Skip to content

Commit

Permalink
Fix a bunch of issue with super wireless grid
Browse files Browse the repository at this point in the history
  • Loading branch information
gigabit101 committed Mar 9, 2024
1 parent fea5e6a commit 1aff18c
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 33 deletions.
11 changes: 11 additions & 0 deletions src/main/java/net/gigabit101/rebornstorage/RebornStorage.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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, () -> () -> {
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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())
{
Expand Down Expand Up @@ -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();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand All @@ -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();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ public enum Type
NORMAL,
CREATIVE;
}

Type type;

public ItemWirelessGrid(Properties item, Type type, Supplier<Integer> energyCapacity)
Expand Down Expand Up @@ -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<Component> tooltip, TooltipFlag flag)
{
Expand Down

0 comments on commit 1aff18c

Please sign in to comment.