Skip to content

Commit

Permalink
feat: ✨ Added support for additional rendering of storage blocks in I…
Browse files Browse the repository at this point in the history
…n Motion addon and a bit of support for item handling in the same
  • Loading branch information
P3pp3rF1y committed Jan 5, 2025
1 parent 7f369ca commit f785a78
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 99 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
@@ -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<ITrackedContentsItemHandler> itemHandlerGetter;
private final Supplier<ISlotTracker> slotTrackerGetter;
private final Supplier<MemorySettingsCategory> memorySettingsGetter;

public ContentsFilteredItemHandler(Supplier<ITrackedContentsItemHandler> itemHandlerGetter, Supplier<ISlotTracker> slotTrackerGetter, Supplier<MemorySettingsCategory> 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<ItemStackKey> getTrackedStacks() {
return itemHandlerGetter.get().getTrackedStacks();
}

@Override
public void registerTrackingListeners(Consumer<ItemStackKey> onAddStackKey, Consumer<ItemStackKey> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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";
Expand Down Expand Up @@ -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<ITrackedContentsItemHandler> itemHandlerGetter;
private final Supplier<ISlotTracker> slotTrackerGetter;
private final Supplier<MemorySettingsCategory> memorySettingsGetter;

private ContentsFilteredItemHandler(Supplier<ITrackedContentsItemHandler> itemHandlerGetter, Supplier<ISlotTracker> slotTrackerGetter, Supplier<MemorySettingsCategory> 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<ItemStackKey> getTrackedStacks() {
return itemHandlerGetter.get().getTrackedStacks();
}

@Override
public void registerTrackingListeners(Consumer<ItemStackKey> onAddStackKey, Consumer<ItemStackKey> 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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down

0 comments on commit f785a78

Please sign in to comment.