diff --git a/gradle.properties b/gradle.properties index b3c3e7f3..ff2aa6bb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version_range=[4,) mod_id=sophisticatedstorage mod_name=Sophisticated Storage mod_license=GNU General Public License v3.0 -mod_version=1.0.11 +mod_version=1.0.12 mod_group_id=sophisticatedstorage mod_authors=P3pp3rF1y, Ridanisaurus mod_description=Fancy and functional storage containers. diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/ContentsFilteredItemHandler.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/ContentsFilteredItemHandler.java new file mode 100644 index 00000000..dc6c57f6 --- /dev/null +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/ContentsFilteredItemHandler.java @@ -0,0 +1,103 @@ +package net.p3pp3rf1y.sophisticatedstorage.block; + +import net.minecraft.world.item.ItemStack; +import net.p3pp3rf1y.sophisticatedcore.inventory.ISlotTracker; +import net.p3pp3rf1y.sophisticatedcore.inventory.ITrackedContentsItemHandler; +import net.p3pp3rf1y.sophisticatedcore.inventory.ItemStackKey; +import net.p3pp3rf1y.sophisticatedcore.settings.memory.MemorySettingsCategory; + +import javax.annotation.Nonnull; +import java.util.Set; +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class ContentsFilteredItemHandler implements ITrackedContentsItemHandler { + + private final Supplier itemHandlerGetter; + private final Supplier slotTrackerGetter; + private final Supplier memorySettingsGetter; + + public ContentsFilteredItemHandler(Supplier itemHandlerGetter, Supplier slotTrackerGetter, Supplier memorySettingsGetter) { + this.itemHandlerGetter = itemHandlerGetter; + this.slotTrackerGetter = slotTrackerGetter; + this.memorySettingsGetter = memorySettingsGetter; + } + + @Override + public int getSlots() { + return itemHandlerGetter.get().getSlots(); + } + + @Nonnull + @Override + public ItemStack getStackInSlot(int slot) { + return itemHandlerGetter.get().getStackInSlot(slot); + } + + @Nonnull + @Override + public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { + if (matchesContents(stack)) { + return itemHandlerGetter.get().insertItem(slot, stack, simulate); + } + return stack; + } + + @Nonnull + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return itemHandlerGetter.get().extractItem(slot, amount, simulate); + } + + @Override + public int getSlotLimit(int slot) { + return itemHandlerGetter.get().getSlotLimit(slot); + } + + @Override + public boolean isItemValid(int slot, @Nonnull ItemStack stack) { + return matchesContents(stack) && itemHandlerGetter.get().isItemValid(slot, stack); + } + + private boolean matchesContents(ItemStack stack) { + return slotTrackerGetter.get().getItems().contains(stack.getItem()) || memorySettingsGetter.get().matchesFilter(stack); + } + + @Override + public ItemStack insertItem(ItemStack stack, boolean simulate) { + if (matchesContents(stack)) { + return itemHandlerGetter.get().insertItem(stack, simulate); + } + return stack; + } + + @Override + public Set getTrackedStacks() { + return itemHandlerGetter.get().getTrackedStacks(); + } + + @Override + public void registerTrackingListeners(Consumer onAddStackKey, Consumer onRemoveStackKey, Runnable onAddFirstEmptySlot, Runnable onRemoveLastEmptySlot) { + itemHandlerGetter.get().registerTrackingListeners(onAddStackKey, onRemoveStackKey, onAddFirstEmptySlot, onRemoveLastEmptySlot); + } + + @Override + public void unregisterStackKeyListeners() { + itemHandlerGetter.get().unregisterStackKeyListeners(); + } + + @Override + public boolean hasEmptySlots() { + return itemHandlerGetter.get().hasEmptySlots(); + } + + @Override + public int getInternalSlotLimit(int slot) { + return itemHandlerGetter.get().getInternalSlotLimit(slot); + } + + @Override + public void setStackInSlot(int slot, @Nonnull ItemStack stack) { + itemHandlerGetter.get().setStackInSlot(slot, stack); + } +} diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/StorageBlockEntity.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/StorageBlockEntity.java index f454b6f7..734e8b1b 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/StorageBlockEntity.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/block/StorageBlockEntity.java @@ -24,9 +24,7 @@ import net.p3pp3rf1y.sophisticatedcore.controller.IControllableStorage; import net.p3pp3rf1y.sophisticatedcore.controller.ILinkable; import net.p3pp3rf1y.sophisticatedcore.inventory.CachedFailedInsertInventoryHandler; -import net.p3pp3rf1y.sophisticatedcore.inventory.ISlotTracker; import net.p3pp3rf1y.sophisticatedcore.inventory.ITrackedContentsItemHandler; -import net.p3pp3rf1y.sophisticatedcore.inventory.ItemStackKey; import net.p3pp3rf1y.sophisticatedcore.settings.itemdisplay.ItemDisplaySettingsCategory; import net.p3pp3rf1y.sophisticatedcore.settings.memory.MemorySettingsCategory; import net.p3pp3rf1y.sophisticatedcore.upgrades.ITickableUpgrade; @@ -35,11 +33,8 @@ import net.p3pp3rf1y.sophisticatedcore.util.WorldHelper; import net.p3pp3rf1y.sophisticatedstorage.upgrades.INeighborChangeListenerUpgrade; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.*; -import java.util.function.Consumer; -import java.util.function.Supplier; public abstract class StorageBlockEntity extends BlockEntity implements IControllableStorage, ILinkable, ILockable, Nameable, ITierDisplay, IUpgradeDisplay { public static final String STORAGE_WRAPPER_TAG = "storageWrapper"; @@ -593,95 +588,4 @@ protected Direction getNeighborDirection(BlockPos neighborPos) { public float getSlotFillPercentage(int slot) { return 0; //only used in limited barrels } - - private static class ContentsFilteredItemHandler implements ITrackedContentsItemHandler { - - private final Supplier itemHandlerGetter; - private final Supplier slotTrackerGetter; - private final Supplier memorySettingsGetter; - - private ContentsFilteredItemHandler(Supplier itemHandlerGetter, Supplier slotTrackerGetter, Supplier memorySettingsGetter) { - this.itemHandlerGetter = itemHandlerGetter; - this.slotTrackerGetter = slotTrackerGetter; - this.memorySettingsGetter = memorySettingsGetter; - } - - @Override - public int getSlots() { - return itemHandlerGetter.get().getSlots(); - } - - @Nonnull - @Override - public ItemStack getStackInSlot(int slot) { - return itemHandlerGetter.get().getStackInSlot(slot); - } - - @Nonnull - @Override - public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) { - if (matchesContents(stack)) { - return itemHandlerGetter.get().insertItem(slot, stack, simulate); - } - return stack; - } - - @Nonnull - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - return itemHandlerGetter.get().extractItem(slot, amount, simulate); - } - - @Override - public int getSlotLimit(int slot) { - return itemHandlerGetter.get().getSlotLimit(slot); - } - - @Override - public boolean isItemValid(int slot, @Nonnull ItemStack stack) { - return matchesContents(stack) && itemHandlerGetter.get().isItemValid(slot, stack); - } - - private boolean matchesContents(ItemStack stack) { - return slotTrackerGetter.get().getItems().contains(stack.getItem()) || memorySettingsGetter.get().matchesFilter(stack); - } - - @Override - public ItemStack insertItem(ItemStack stack, boolean simulate) { - if (matchesContents(stack)) { - return itemHandlerGetter.get().insertItem(stack, simulate); - } - return stack; - } - - @Override - public Set getTrackedStacks() { - return itemHandlerGetter.get().getTrackedStacks(); - } - - @Override - public void registerTrackingListeners(Consumer onAddStackKey, Consumer onRemoveStackKey, Runnable onAddFirstEmptySlot, Runnable onRemoveLastEmptySlot) { - itemHandlerGetter.get().registerTrackingListeners(onAddStackKey, onRemoveStackKey, onAddFirstEmptySlot, onRemoveLastEmptySlot); - } - - @Override - public void unregisterStackKeyListeners() { - itemHandlerGetter.get().unregisterStackKeyListeners(); - } - - @Override - public boolean hasEmptySlots() { - return itemHandlerGetter.get().hasEmptySlots(); - } - - @Override - public int getInternalSlotLimit(int slot) { - return itemHandlerGetter.get().getInternalSlotLimit(slot); - } - - @Override - public void setStackInSlot(int slot, @Nonnull ItemStack stack) { - itemHandlerGetter.get().setStackInSlot(slot, stack); - } - } } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/client/render/BarrelRenderer.java b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/client/render/BarrelRenderer.java index cb8b1fc7..0cb1e6b9 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedstorage/client/render/BarrelRenderer.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedstorage/client/render/BarrelRenderer.java @@ -98,9 +98,11 @@ private void renderTranslucentQuads(T blockEntity, PoseStack poseStack, MultiBuf poseStack.translate(-0.005, -0.005, -0.005); poseStack.scale(1.01f, 1.01f, 1.01f); - if (blockEntity.getLevel() != null && blockModel instanceof BarrelBakedModelBase barrelBakedModel) { + RandomSource random = blockEntity.getLevel() != null ? blockEntity.getLevel().random : Minecraft.getInstance().level.random; + + if (blockModel instanceof BarrelBakedModelBase barrelBakedModel) { VertexConsumer vertexConsumer = TranslucentVertexConsumer.getVertexConsumer(bufferSource, 128); - getQuads.apply(barrelBakedModel, state, blockEntity.getLevel().random, woodName, RenderType.cutout()).forEach(quad -> vertexConsumer.putBulkData(poseStack.last(), quad, 1, 1, 1, 1, packedLight, packedOverlay, false)); + getQuads.apply(barrelBakedModel, state, random, woodName, RenderType.cutout()).forEach(quad -> vertexConsumer.putBulkData(poseStack.last(), quad, 1, 1, 1, 1, packedLight, packedOverlay, false)); } poseStack.popPose(); }