Skip to content

Commit

Permalink
progress on capabilityfixer and tile nbt
Browse files Browse the repository at this point in the history
  • Loading branch information
Lothrazar committed Feb 17, 2025
1 parent 7a52168 commit 1433d88
Show file tree
Hide file tree
Showing 8 changed files with 237 additions and 214 deletions.
45 changes: 18 additions & 27 deletions src/main/java/com/lothrazar/cyclic/block/BlockCyclic.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.phys.BlockHitResult;
import net.neoforged.neoforge.capabilities.BaseCapability;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.fluids.FluidUtil;
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
import net.neoforged.neoforge.items.IItemHandler;

public class BlockCyclic extends EntityBlockFlib {

Expand Down Expand Up @@ -145,17 +147,17 @@ private void displayClientFluidMessage(Player player, IFluidHandler handler) {
@Override
public void onRemove(BlockState state, Level worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
if (state.getBlock() != newState.getBlock()) {
BlockEntity tileentity = worldIn.getBlockEntity(pos);
if (tileentity != null) {
// BlockEntity tileentity = worldIn.getBlockEntity(pos);
// if (tileentity != null) {

IItemHandler items = tileentity.getCapability(ForgeCapabilities.ITEM_HANDLER).orElse(null);
IItemHandler items = CapabilityFixer.item(worldIn, pos);
if (items != null) {
for (int i = 0; i < items.getSlots(); ++i) {
Containers.dropItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), items.getStackInSlot(i));
}
worldIn.updateNeighbourForOutputSignal(pos, this);
}
}
// }
super.onRemove(state, worldIn, pos, newState, isMoving);
}
}
Expand All @@ -165,33 +167,22 @@ public void onRemove(BlockState state, Level worldIn, BlockPos pos, BlockState n
*/
public void registerClient() {}

public static boolean isItem(BlockState stateIn, Direction facing, BlockState facingState, LevelAccessor world, BlockPos currentPos, BlockPos facingPos) {
return hasCapabilityDir(facing, world, facingPos, ForgeCapabilities.ITEM_HANDLER);
}

public static boolean isFluid(BlockState stateIn, Direction facing, BlockState facingState, LevelAccessor world, BlockPos currentPos, BlockPos facingPos) {
return hasCapabilityDir(facing, world, facingPos, ForgeCapabilities.FLUID_HANDLER);
}

public static boolean isEnergy(BlockState stateIn, Direction facing, BlockState facingState, LevelAccessor world, BlockPos currentPos, BlockPos facingPos) {
return hasCapabilityDir(facing, world, facingPos, ForgeCapabilities.ENERGY);
}

private static boolean hasCapabilityDir(Direction facing, LevelAccessor world, BlockPos facingPos, Capability<?> cap) {
if (facing == null) {
return false;
}
BlockEntity neighbor = world.getBlockEntity(facingPos);
if (neighbor != null
&& neighbor.getCapability(cap, facing.getOpposite()).orElse(null) != null) {
return true;
}
return false;
}
// private static boolean hasCapabilityDir(Direction facing, LevelAccessor world, BlockPos facingPos, BaseCapability cap) {
// if (facing == null) {
// return false;
// }
// BlockEntity neighbor = world.getBlockEntity(facingPos);
// if (neighbor != null
// && neighbor.getCapability(cap, facing.getOpposite()).orElse(null) != null) {
// return true;
// }
// return false;
// }

//for comparators that dont use item inventories
protected int calcRedstoneFromFluid(BlockEntity tileEntity) {
IFluidHandler fluid = tileEntity.getCapability(ForgeCapabilities.FLUID_HANDLER).orElse(null);
IFluidHandler fluid = CapabilityFixer.fluid(tileEntity.getLevel(), tileEntity.getBlockPos());//tileEntity.getCapability(ForgeCapabilities.FLUID_HANDLER).orElse(null);
if (fluid.getFluidInTank(0).isEmpty()) {
return 0;
}
Expand Down
188 changes: 96 additions & 92 deletions src/main/java/com/lothrazar/cyclic/block/TileBlockEntityCyclic.java

Large diffs are not rendered by default.

31 changes: 8 additions & 23 deletions src/main/java/com/lothrazar/cyclic/block/anvil/TileAnvilAuto.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import com.lothrazar.cyclic.data.DataTags;
import com.lothrazar.cyclic.registry.BlockRegistry;
import com.lothrazar.cyclic.registry.TileRegistry;
import com.lothrazar.library.cap.CustomEnergyStorage;
import com.lothrazar.library.cap.ItemStackHandlerWrapper;
import com.lothrazar.library.util.ItemStackUtil;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.MenuProvider;
Expand Down Expand Up @@ -75,35 +77,18 @@ public AbstractContainerMenu createMenu(int i, Inventory playerInventory, Player
return new ContainerAnvil(i, level, worldPosition, playerInventory, playerEntity);
}

@Override
public void invalidateCaps() {
energyCap.invalidate();
inventoryCap.invalidate();
super.invalidateCaps();
}

@Override
public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) {
if (cap == ForgeCapabilities.ENERGY && POWERCONF.get() > 0) {
return energyCap.cast();
}
if (cap == ForgeCapabilities.ITEM_HANDLER) {
return inventoryCap.cast();
}
return super.getCapability(cap, side);
}

@Override
public void load(CompoundTag tag) {
energy.deserializeNBT(tag.getCompound(NBTENERGY));
inventory.deserializeNBT(tag.getCompound(NBTINV));
public void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) {
energy.deserializeNBT(registries,tag.getCompound(NBTENERGY));
inventory.deserializeNBT(registries,tag.getCompound(NBTINV));
super.load(tag);
}

@Override
public void saveAdditional(CompoundTag tag) {
tag.put(NBTENERGY, energy.serializeNBT());
tag.put(NBTINV, inventory.serializeNBT());
public void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) {
tag.put(NBTENERGY, energy.serializeNBT(registries));
tag.put(NBTINV, inventory.serializeNBT(registries));
super.saveAdditional(tag);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.lothrazar.cyclic.block.facade.ITileFacade;
import com.lothrazar.cyclic.registry.TileRegistry;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.Connection;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
Expand All @@ -16,16 +17,16 @@ public TileLightFacade(BlockPos pos, BlockState state) {
}

@Override
public CompoundTag getUpdateTag() {
CompoundTag syncData = super.getUpdateTag();
public CompoundTag getUpdateTag(HolderLookup.Provider registries) {
CompoundTag syncData = super.getUpdateTag(registries);
return syncData;
}

@Override
public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) {
public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt, HolderLookup.Provider registries) {
if (pkt.getTag().contains(NBT_FACADE)) {
this.load(pkt.getTag());
super.onDataPacket(net, pkt);
super.onDataPacket(net, pkt, registries);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.lothrazar.cyclic.block.facade.ITileFacade;
import com.lothrazar.cyclic.registry.TileRegistry;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.Connection;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
Expand All @@ -16,16 +17,16 @@ public SoundmuffTileFacade(BlockPos pos, BlockState state) {
}

@Override
public CompoundTag getUpdateTag() {
CompoundTag syncData = super.getUpdateTag();
public CompoundTag getUpdateTag(HolderLookup.Provider registries) {
CompoundTag syncData = super.getUpdateTag(registries);
return syncData;
}

@Override
public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt) {
public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt,HolderLookup.Provider registries) {
if (pkt.getTag().contains(NBT_FACADE)) {
this.load(pkt.getTag());
super.onDataPacket(net, pkt);
super.onDataPacket(net, pkt,registries);
}
}

Expand Down
36 changes: 18 additions & 18 deletions src/main/java/com/lothrazar/cyclic/config/ClientConfigCyclic.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import com.lothrazar.cyclic.registry.TileRegistry;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.common.ForgeConfigSpec.ConfigValue;
import net.neoforged.neoforge.common.ModConfigSpec;

/**
* TODO: fully refactor this as ConfigTemplate flow
Expand All @@ -17,23 +17,23 @@
public class ClientConfigCyclic {

private static final Color DEFAULTC = Color.GRAY;
public static ConfigValue<String> COLLECTOR_ITEM;
public static ConfigValue<String> COLLECTOR_FLUID;
public static ConfigValue<String> DETECTOR_ENTITY;
public static ConfigValue<String> DETECTOR_ITEM;
public static ConfigValue<String> DROPPER;
public static ConfigValue<String> FORESTER;
public static ConfigValue<String> HARVESTER;
public static ConfigValue<String> MINER;
public static ConfigValue<String> PEAT_FARM;
public static ConfigValue<String> STRUCTURE;
public static ConfigValue<String> LOCATION;
public static ConfigValue<String> SHAPE_DATA;
public static ConfigValue<String> RANDOMIZE_SCEPTER;
public static ConfigValue<String> OFFSET_SCEPTER;
public static ConfigValue<String> REPLACE_SCEPTER;
public static ConfigValue<String> BUILD_SCEPTER;
public static ConfigValue<Boolean> FLUID_BLOCK_STATUS;
public static ModConfigSpec.ConfigValue<String> COLLECTOR_ITEM;
public static ModConfigSpec.ConfigValue<String> COLLECTOR_FLUID;
public static ModConfigSpec.ConfigValue<String> DETECTOR_ENTITY;
public static ModConfigSpec.ConfigValue<String> DETECTOR_ITEM;
public static ModConfigSpec.ConfigValue<String> DROPPER;
public static ModConfigSpec.ConfigValue<String> FORESTER;
public static ModConfigSpec.ConfigValue<String> HARVESTER;
public static ModConfigSpec.ConfigValue<String> MINER;
public static ModConfigSpec.ConfigValue<String> PEAT_FARM;
public static ModConfigSpec.ConfigValue<String> STRUCTURE;
public static ModConfigSpec.ConfigValue<String> LOCATION;
public static ModConfigSpec.ConfigValue<String> SHAPE_DATA;
public static ModConfigSpec.ConfigValue<String> RANDOMIZE_SCEPTER;
public static ModConfigSpec.ConfigValue<String> OFFSET_SCEPTER;
public static ModConfigSpec.ConfigValue<String> REPLACE_SCEPTER;
public static ModConfigSpec.ConfigValue<String> BUILD_SCEPTER;
public static ModConfigSpec.ConfigValue<Boolean> FLUID_BLOCK_STATUS;

public static Color getColor(BlockEntity tile) {
//passing in tile in case of data overrides in future
Expand Down
43 changes: 42 additions & 1 deletion src/main/java/com/lothrazar/cyclic/fixers/CapabilityFixer.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,48 @@
import net.minecraft.core.Direction;
import net.minecraft.world.phys.BlockHitResult;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.energy.IEnergyStorage;
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
import net.minecraft.world.level.Level;
import net.neoforged.neoforge.items.IItemHandler;

public class CapabilityFixer {



public static boolean isItem( Direction facing, Level level, BlockPos facingPos) {
if (facing == null) {
return false;
}
return CapabilityFixer.item(level, facingPos, facing.getOpposite()) != null ;
}

public static boolean isFluid(Direction facing, Level level, BlockPos facingPos){
// return hasCapabilityDir(facing, world, facingPos, ForgeCapabilities.FLUID_HANDLER);
if (facing == null) {
return false;
}
return CapabilityFixer.item(level, facingPos, facing.getOpposite()) != null ;
}

public static boolean isEnergy(Direction facing, Level level, BlockPos facingPos) {
// return hasCapabilityDir(facing, world, facingPos, ForgeCapabilities.ENERGY);
if (facing == null) {
return false;
}
return CapabilityFixer.energy(level, facingPos, facing.getOpposite()) != null ;
}

public static IEnergyStorage energy(Level level, BlockPos pos) {
return energy(level,pos,null);
}
public static IEnergyStorage energy(net.minecraft.world.level.Level level, BlockPos pos, Direction dir) {
return level.getCapability(Capabilities.EnergyStorage.BLOCK, pos, dir);
}

public static IFluidHandler fluid(net.minecraft.world.level.Level level, BlockPos pos ) {
return fluid(level,pos, (Direction)null);
}
public static IFluidHandler fluid(net.minecraft.world.level.Level level, BlockPos pos, BlockHitResult dir) {
return fluid(level,pos,dir.getDirection());
}
Expand All @@ -19,5 +55,10 @@ public static IFluidHandler fluid(net.minecraft.world.level.Level level, BlockPo
}



public static IItemHandler item(Level level, BlockPos pos) {
return item(level, pos, null);
}
public static IItemHandler item(Level level, BlockPos pos, Direction dir) {
return level.getCapability(Capabilities.ItemHandler.BLOCK, pos, dir);
}
}
Loading

0 comments on commit 1433d88

Please sign in to comment.