From 1aff18c697f60a304f9acda01849fe5774675132 Mon Sep 17 00:00:00 2001 From: Gigabit101 Date: Sat, 9 Mar 2024 20:31:05 +0000 Subject: [PATCH] Fix a bunch of issue with super wireless grid --- .../rebornstorage/RebornStorage.java | 11 ++++ .../capabilities/EnergisedItem.java | 52 +++++++++++++++++++ .../WirelessCraftingGridNetworkItem.java | 18 +++---- .../WirelessFluidGridNetworkItemExt.java | 16 +++--- ...WirelessCraftingMonitorNetworkItemExt.java | 25 +++++---- .../rebornstorage/items/ItemWirelessGrid.java | 6 ++- 6 files changed, 95 insertions(+), 33 deletions(-) create mode 100644 src/main/java/net/gigabit101/rebornstorage/capabilities/EnergisedItem.java diff --git a/src/main/java/net/gigabit101/rebornstorage/RebornStorage.java b/src/main/java/net/gigabit101/rebornstorage/RebornStorage.java index 7a45cd6..6971b09 100644 --- a/src/main/java/net/gigabit101/rebornstorage/RebornStorage.java +++ b/src/main/java/net/gigabit101/rebornstorage/RebornStorage.java @@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage.apiimpl.network.node.NetworkNode; import com.refinedmods.refinedstorage.screen.KeyInputListener; import com.refinedmods.refinedstorage.util.StackUtils; +import net.gigabit101.rebornstorage.capabilities.EnergisedItem; import net.gigabit101.rebornstorage.client.KeyBindings; import net.gigabit101.rebornstorage.core.multiblock.events.MultiblockClientTickHandler; import net.gigabit101.rebornstorage.core.multiblock.events.MultiblockEventHandler; @@ -16,6 +17,7 @@ import net.gigabit101.rebornstorage.init.ModContainers; import net.gigabit101.rebornstorage.init.ModItems; import net.gigabit101.rebornstorage.init.ModScreens; +import net.gigabit101.rebornstorage.items.ItemWirelessGrid; import net.gigabit101.rebornstorage.multiblocks.MultiBlockCrafter; import net.gigabit101.rebornstorage.nodes.AdvancedWirelessTransmitterNode; import net.gigabit101.rebornstorage.nodes.CraftingNode; @@ -42,6 +44,8 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.fml.loading.FMLPaths; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.client.event.InputEvent; import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; import net.neoforged.neoforge.common.NeoForge; @@ -72,6 +76,7 @@ public RebornStorage(IEventBus eventBus) eventBus.addListener(this::registerCreativeTab); NeoForge.EVENT_BUS.register(new MultiblockEventHandler()); NeoForge.EVENT_BUS.register(new MultiblockServerTickHandler()); + eventBus.addListener(this::registerCapabilities); PacketHandler.init(eventBus); //noinspection removal DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { @@ -93,6 +98,12 @@ public void preInit(FMLCommonSetupEvent event) API.instance().getGridManager().add(WirelessCraftingGridGridFactory.ID, new WirelessCraftingGridGridFactory()); } + private void registerCapabilities(RegisterCapabilitiesEvent event) { + event.registerItem(Capabilities.EnergyStorage.ITEM, (itemStack, context) -> new EnergisedItem(itemStack, ((ItemWirelessGrid) itemStack.getItem()).getEnergyMax()), + ModItems.WIRELESS_GRID.get() + ); + } + @SuppressWarnings("all") @SubscribeEvent public void clientInit(FMLClientSetupEvent event) diff --git a/src/main/java/net/gigabit101/rebornstorage/capabilities/EnergisedItem.java b/src/main/java/net/gigabit101/rebornstorage/capabilities/EnergisedItem.java new file mode 100644 index 0000000..f92be3f --- /dev/null +++ b/src/main/java/net/gigabit101/rebornstorage/capabilities/EnergisedItem.java @@ -0,0 +1,52 @@ +package net.gigabit101.rebornstorage.capabilities; + + +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.energy.EnergyStorage; + +public class EnergisedItem extends EnergyStorage +{ + private ItemStack stack; + + public EnergisedItem(ItemStack stack, int capacity) { + super(getMaxCapacity(stack, capacity), Integer.MAX_VALUE, Integer.MAX_VALUE); + + this.stack = stack; + this.energy = stack.hasTag() && stack.getTag().contains("energy") ? stack.getTag().getInt("energy") : 0; + } + + private static int getMaxCapacity(ItemStack stack, int capacity) { + if( !stack.hasTag() || !stack.getTag().contains("max_energy") ) + return capacity; + + return stack.getTag().getInt("max_energy"); + } + + public void updatedMaxEnergy(int max) { + stack.getOrCreateTag().putInt("max_energy", max); + this.capacity = max; + this.energy = Math.min(max, this.energy); + + // Ensure the current stored energy is up to date with the new max. + this.receiveEnergy(1, false); + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate) { + return 0; + } + + @Override + public int receiveEnergy(int maxReceive, boolean simulate) { + int stored = this.getEnergyStored() + maxReceive; + if (stored < 0) { + return 0; + } + + int amount = super.receiveEnergy(maxReceive, simulate); + if( !simulate ) + stack.getOrCreateTag().putInt("energy", this.energy); + + return amount; + } +} diff --git a/src/main/java/net/gigabit101/rebornstorage/grid/crafting/WirelessCraftingGridNetworkItem.java b/src/main/java/net/gigabit101/rebornstorage/grid/crafting/WirelessCraftingGridNetworkItem.java index df9e1df..6770685 100644 --- a/src/main/java/net/gigabit101/rebornstorage/grid/crafting/WirelessCraftingGridNetworkItem.java +++ b/src/main/java/net/gigabit101/rebornstorage/grid/crafting/WirelessCraftingGridNetworkItem.java @@ -42,7 +42,7 @@ public Player getPlayer() @Override public boolean onOpen(INetwork network) { - IEnergyStorage energy = (IEnergyStorage)this.stack.getCapability(Capabilities.EnergyStorage.ITEM); + IEnergyStorage energy = this.stack.getCapability(Capabilities.EnergyStorage.ITEM); if (((ItemWirelessGrid) stack.getItem()).getType() != ItemWirelessGrid.Type.CREATIVE && energy != null && energy.getEnergyStored() <= RS.SERVER_CONFIG.getWirelessFluidGrid().getOpenUsage()) { @@ -71,15 +71,13 @@ private void sendOutOfEnergyMessage() { @Override public void drainEnergy(int energy) { - if (RS.SERVER_CONFIG.getWirelessFluidGrid().getUseEnergy() && ((WirelessFluidGridItem)this.stack.getItem()).getType() != WirelessFluidGridItem.Type.CREATIVE) { - IEnergyStorage energyStorage = (IEnergyStorage)this.stack.getCapability(Capabilities.EnergyStorage.ITEM); - if (energyStorage != null) { - energyStorage.extractEnergy(energy, false); - if (energyStorage.getEnergyStored() <= 0) { - this.handler.close(this.player); - this.player.closeContainer(); - this.sendOutOfEnergyMessage(); - } + IEnergyStorage energyStorage = this.stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (energyStorage != null) { + energyStorage.extractEnergy(energy, false); + if (energyStorage.getEnergyStored() <= 0) { + this.handler.close(this.player); + this.player.closeContainer(); + this.sendOutOfEnergyMessage(); } } } diff --git a/src/main/java/net/gigabit101/rebornstorage/grid/fluid/WirelessFluidGridNetworkItemExt.java b/src/main/java/net/gigabit101/rebornstorage/grid/fluid/WirelessFluidGridNetworkItemExt.java index 48549b9..6ca0f00 100644 --- a/src/main/java/net/gigabit101/rebornstorage/grid/fluid/WirelessFluidGridNetworkItemExt.java +++ b/src/main/java/net/gigabit101/rebornstorage/grid/fluid/WirelessFluidGridNetworkItemExt.java @@ -53,15 +53,13 @@ public boolean onOpen(INetwork network) { @Override public void drainEnergy(int energy) { - if (RS.SERVER_CONFIG.getWirelessFluidGrid().getUseEnergy() && ((WirelessFluidGridItem)this.stack.getItem()).getType() != WirelessFluidGridItem.Type.CREATIVE) { - IEnergyStorage energyStorage = (IEnergyStorage)this.stack.getCapability(Capabilities.EnergyStorage.ITEM); - if (energyStorage != null) { - energyStorage.extractEnergy(energy, false); - if (energyStorage.getEnergyStored() <= 0) { - this.handler.close(this.player); - this.player.closeContainer(); - this.sendOutOfEnergyMessage(); - } + IEnergyStorage energyStorage = this.stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (energyStorage != null) { + energyStorage.extractEnergy(energy, false); + if (energyStorage.getEnergyStored() <= 0) { + this.handler.close(this.player); + this.player.closeContainer(); + this.sendOutOfEnergyMessage(); } } } diff --git a/src/main/java/net/gigabit101/rebornstorage/grid/monitor/WirelessCraftingMonitorNetworkItemExt.java b/src/main/java/net/gigabit101/rebornstorage/grid/monitor/WirelessCraftingMonitorNetworkItemExt.java index 65fbe9d..c49e2ee 100644 --- a/src/main/java/net/gigabit101/rebornstorage/grid/monitor/WirelessCraftingMonitorNetworkItemExt.java +++ b/src/main/java/net/gigabit101/rebornstorage/grid/monitor/WirelessCraftingMonitorNetworkItemExt.java @@ -18,6 +18,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.energy.IEnergyStorage; @@ -48,12 +49,12 @@ public boolean onOpen(INetwork network) this.sendOutOfEnergyMessage(); return false; } else if (network.getSecurityManager().hasPermission(Permission.MODIFY, this.player) && network.getSecurityManager().hasPermission(Permission.AUTOCRAFTING, this.player)) { -// WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(this.stack, this.player.getServer(), this.slot); -// ServerPlayer var10000 = (ServerPlayer)this.player; -// CraftingMonitorMenuProvider var10001 = new CraftingMonitorMenuProvider(RSContainerMenus.WIRELESS_CRAFTING_MONITOR.get(), wirelessCraftingMonitor, (CraftingMonitorBlockEntity)null); + WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(this.stack, this.player.getServer(), this.slot); + Player var10000 = this.player; + CraftingMonitorMenuProvider var10001 = new CraftingMonitorMenuProvider((MenuType)RSContainerMenus.WIRELESS_CRAFTING_MONITOR.get(), wirelessCraftingMonitor, (CraftingMonitorBlockEntity)null); PlayerSlot var10002 = this.slot; Objects.requireNonNull(var10002); - API.instance().getGridManager().openGrid(WirelessFluidGridGridFactory.ID, (ServerPlayer)this.player, this.stack, this.slot); + var10000.openMenu(var10001, var10002::writePlayerSlot); this.drainEnergy(RS.SERVER_CONFIG.getWirelessCraftingMonitor().getOpenUsage()); return true; } else { @@ -65,15 +66,13 @@ public boolean onOpen(INetwork network) @Override public void drainEnergy(int energy) { - if (RS.SERVER_CONFIG.getWirelessFluidGrid().getUseEnergy() && ((WirelessFluidGridItem)this.stack.getItem()).getType() != WirelessFluidGridItem.Type.CREATIVE) { - IEnergyStorage energyStorage = (IEnergyStorage)this.stack.getCapability(Capabilities.EnergyStorage.ITEM); - if (energyStorage != null) { - energyStorage.extractEnergy(energy, false); - if (energyStorage.getEnergyStored() <= 0) { - this.handler.close(this.player); - this.player.closeContainer(); - this.sendOutOfEnergyMessage(); - } + IEnergyStorage energyStorage = this.stack.getCapability(Capabilities.EnergyStorage.ITEM); + if (energyStorage != null) { + energyStorage.extractEnergy(energy, false); + if (energyStorage.getEnergyStored() <= 0) { + this.handler.close(this.player); + this.player.closeContainer(); + this.sendOutOfEnergyMessage(); } } } diff --git a/src/main/java/net/gigabit101/rebornstorage/items/ItemWirelessGrid.java b/src/main/java/net/gigabit101/rebornstorage/items/ItemWirelessGrid.java index eaf1067..9b62430 100644 --- a/src/main/java/net/gigabit101/rebornstorage/items/ItemWirelessGrid.java +++ b/src/main/java/net/gigabit101/rebornstorage/items/ItemWirelessGrid.java @@ -29,7 +29,6 @@ public enum Type NORMAL, CREATIVE; } - Type type; public ItemWirelessGrid(Properties item, Type type, Supplier energyCapacity) @@ -102,6 +101,11 @@ public INetworkItem provide(INetworkItemManager iNetworkItemManager, Player play return new WirelessCraftingGridNetworkItem(iNetworkItemManager, player, itemStack, playerSlot); } + public int getEnergyMax() + { + return 3200; + } + @Override public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) {