Skip to content

Commit

Permalink
start work on caps for forge, needed to make WorldlyContainer work
Browse files Browse the repository at this point in the history
  • Loading branch information
IThundxr committed Apr 19, 2024
1 parent 5656348 commit ed1f4a8
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package dev.ithundxr.createnumismatics.forge.mixin.self;

import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import dev.ithundxr.createnumismatics.content.vendor.VendorBlockEntity;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.WorldlyContainer;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.capabilities.*;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.SidedInvWrapper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;

@Mixin(VendorBlockEntity.class)
public abstract class VendorBlockEntityCapabilities extends SmartBlockEntity implements ICapabilityProvider {
public VendorBlockEntityCapabilities(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
}

private static Direction[] dirs = {Direction.UP, Direction.DOWN, Direction.NORTH};
LazyOptional<? extends IItemHandler>[] createNumismatics$handlers = SidedInvWrapper.create((WorldlyContainer) this, dirs);

@Override
public <T> @NotNull LazyOptional<T> getCapability(@NotNull Capability<T> capability, @Nullable Direction facing) {
if (remove || facing == null || capability != ForgeCapabilities.ITEM_HANDLER) {
return super.getCapability(capability, facing);
} else if (facing == Direction.UP) {
return createNumismatics$handlers[0].cast();
} else {
return facing == Direction.DOWN ? createNumismatics$handlers[1].cast() : createNumismatics$handlers[2].cast();
}
}

@Override
public void invalidateCaps() {
super.invalidateCaps();

for (LazyOptional<? extends IItemHandler> createNumismatics$handler : createNumismatics$handlers) {
createNumismatics$handler.invalidate();
}
}
}
3 changes: 2 additions & 1 deletion forge/src/main/resources/numismatics.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
"client.MixinPonderTooltipHandler"
],
"mixins": [
"ServerGamePacketListenerImplMixin"
"ServerGamePacketListenerImplMixin",
"self.VendorBlockEntityCapabilities"
],
"injectors": {
"defaultRequire": 1
Expand Down

0 comments on commit ed1f4a8

Please sign in to comment.