From b13bd463a02bfcedb9d1ebd673c901c53b89d87a Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Sat, 22 Feb 2025 22:59:45 +0200 Subject: [PATCH 1/7] 1st commit --- .../client/gui/GuiPatternValueAmount.java | 7 +- .../github/client/gui/GuiSuperStoker.java | 127 +++++ .../ContainerPatternValueAmount.java | 3 +- .../gui/container/ContainerSuperStoker.java | 144 ++++++ .../github/common/block/BlockSuperStoker.java | 69 +++ .../github/common/tile/TileSuperStoker.java | 438 ++++++++++++++++++ .../github/inventory/AEFluidInventory.java | 62 +++ .../github/inventory/gui/GuiType.java | 29 ++ .../inventory/slot/OptionalFluidSlotFake.java | 28 ++ .../github/loader/ChannelLoader.java | 2 + .../github/loader/ItemAndBlockHolder.java | 2 + .../network/CPacketInventoryAction.java | 12 +- .../network/CPacketPatternValueSet.java | 4 +- .../network/SPacketSuperStokerUpdate.java | 71 +++ .../java/com/glodblock/github/util/Util.java | 33 ++ .../assets/ae2fc/textures/gui/superStoker.png | Bin 0 -> 1985 bytes 16 files changed, 1025 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java create mode 100644 src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java create mode 100644 src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java create mode 100644 src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java create mode 100644 src/main/java/com/glodblock/github/inventory/slot/OptionalFluidSlotFake.java create mode 100644 src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java create mode 100644 src/main/resources/assets/ae2fc/textures/gui/superStoker.png diff --git a/src/main/java/com/glodblock/github/client/gui/GuiPatternValueAmount.java b/src/main/java/com/glodblock/github/client/gui/GuiPatternValueAmount.java index e14c9025..77bb6a5d 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiPatternValueAmount.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiPatternValueAmount.java @@ -9,18 +9,18 @@ import com.glodblock.github.client.gui.container.ContainerPatternValueAmount; import com.glodblock.github.common.item.ItemWirelessUltraTerminal; import com.glodblock.github.common.parts.PartFluidPatternTerminal; import com.glodblock.github.common.parts.PartFluidPatternTerminalEx; +import com.glodblock.github.common.tile.TileSuperStoker; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.item.IWirelessTerminal; import com.glodblock.github.inventory.item.WirelessPatternTerminalInventory; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.network.CPacketPatternValueSet; -import appeng.api.storage.ITerminalHost; import appeng.core.localization.GuiText; public class GuiPatternValueAmount extends FCGuiAmount { - public GuiPatternValueAmount(final InventoryPlayer inventoryPlayer, final ITerminalHost te) { + public GuiPatternValueAmount(final InventoryPlayer inventoryPlayer, final Object te) { super(new ContainerPatternValueAmount(inventoryPlayer, te)); } @@ -77,6 +77,9 @@ public class GuiPatternValueAmount extends FCGuiAmount { } else if (target instanceof WirelessPatternTerminalInventory) { this.myIcon = ItemAndBlockHolder.WIRELESS_PATTERN_TERM.stack(); this.originalGui = GuiType.WIRELESS_FLUID_PATTERN_TERMINAL; + } else if (target instanceof TileSuperStoker) { + this.myIcon = ItemAndBlockHolder.SUPER_STOKER.stack(); + this.originalGui = GuiType.GUI_SUPER_STOKER; } } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java b/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java new file mode 100644 index 00000000..8c566ddf --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java @@ -0,0 +1,127 @@ +package com.glodblock.github.client.gui; + +import appeng.api.storage.data.IAEStack; +import appeng.util.Platform; +import appeng.util.item.AEStack; +import com.glodblock.github.client.gui.container.ContainerFluidAutoFiller; +import com.glodblock.github.common.item.ItemFluidPacket; +import com.glodblock.github.inventory.slot.OptionalFluidSlotFake; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.gui.container.ContainerSuperStoker; +import com.glodblock.github.common.tile.TileSuperStoker; +import com.glodblock.github.network.CPacketInventoryAction; + +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IAEItemStack; +import appeng.client.gui.AEBaseGui; +import appeng.container.AEBaseContainer; +import appeng.container.slot.SlotFake; +import appeng.core.localization.GuiText; +import appeng.helpers.InventoryAction; +import appeng.util.item.AEItemStack; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +public class GuiSuperStoker extends AEBaseGui { + + private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/superStoker.png"); + private final ContainerSuperStoker cont; + private final TileSuperStoker tile; + private Map> list = new HashMap<>(); + + public GuiSuperStoker(InventoryPlayer ipl, TileSuperStoker tile) { + super(new ContainerSuperStoker(ipl, tile)); + this.tile = tile; + this.cont = (ContainerSuperStoker) inventorySlots; + this.ySize = 251; + this.xSize = 216; + } + + @Override + protected void handleMouseClick(Slot slot, int slotIdx, int ctrlDown, int mouseButton) { + if (mouseButton == 3) { + if (slot instanceof SlotFake) { + if (slot.getHasStack()) { + InventoryAction action = InventoryAction.SET_PATTERN_VALUE; + IAEItemStack stack = AEItemStack.create(slot.getStack()); + ((AEBaseContainer) this.inventorySlots).setTargetStack(stack); + for (int i = 0; i < this.inventorySlots.inventorySlots.size(); i++) { + if (slot.equals(this.inventorySlots.inventorySlots.get(i))) { + FluidCraft.proxy.netHandler.sendToServer(new CPacketInventoryAction(action, i, 0, stack)); + } + } + return; + } + } + } + super.handleMouseClick(slot, slotIdx, ctrlDown, mouseButton); + } + + @Override + public void func_146977_a(Slot s) { + if (s instanceof SlotFake) { + this.drawFillStatus(s); + } + super.func_146977_a(s); + } + + private void drawFillStatus(Slot slotIn) { + int offsetX = slotIn.xDisplayPosition - 8; + int offsetY = slotIn.yDisplayPosition - 11; + ItemStack itemstack = slotIn.getStack(); + int slotInt = slotIn.slotNumber; + if (itemstack != null) { + String s = "0%"; + if (slotInt > 0 && slotInt < 9) { + IAEStack aeStack = list.get(slotInt - 1); + if (aeStack != null) s = (int) (((float) aeStack.getStackSize() / ItemFluidPacket.getFluidAmount(itemstack)) * 100) + "%"; + } else if (slotInt > 9 && slotInt < 73){ + IAEStack aeStack = list.get(slotInt + 90); + if (aeStack != null && itemstack.stackSize > 0) { + long i = aeStack.getStackSize(); + s = (int) (((float) i / itemstack.stackSize) * 100) + "%"; + } + } + + float scale = 0.5f; + float shiftX = 2; + float shiftY = 1; + final float inverseScaleFactor = 1.0f / scale; + + final int X = (int) (((float) offsetX - shiftX + + 16.0f + + 1.0f + - this.fontRendererObj.getStringWidth(s) * scale) * inverseScaleFactor); + final int Y = (int) (((float) offsetY - shiftY + 16.0f - 7.0f * scale) * inverseScaleFactor); + GL11.glTranslatef(0.0f, 0.0f, 200.0f); + GL11.glScaled(scale, scale, scale); + this.fontRendererObj.drawStringWithShadow(s, X, Y, 16777215); + GL11.glScaled(inverseScaleFactor, inverseScaleFactor, inverseScaleFactor); + GL11.glTranslatef(0.0f, 0.0f, -200.0f); + } + } + + @Override + public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) { + fontRendererObj.drawString(GuiText.inventory.getLocal(), 8, ySize - 94, 0x404040); + } + + @Override + public void drawBG(int offsetX, int offsetY, int mouseX, int mouseY) { + this.bindTexture(TEX_BG); + this.drawTexturedModalRect(offsetX, offsetY, 0, 0, xSize, ySize); + } + + public void update(Map> map) { + this.list = map; + } +} diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerPatternValueAmount.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerPatternValueAmount.java index 525a3f22..27b38762 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerPatternValueAmount.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerPatternValueAmount.java @@ -4,7 +4,6 @@ import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; import appeng.api.config.SecurityPermissions; -import appeng.api.storage.ITerminalHost; import appeng.container.AEBaseContainer; import appeng.container.guisync.GuiSync; import appeng.container.slot.SlotInaccessible; @@ -17,7 +16,7 @@ public class ContainerPatternValueAmount extends AEBaseContainer { @GuiSync(11) public int valueIndex; - public ContainerPatternValueAmount(final InventoryPlayer ip, final ITerminalHost te) { + public ContainerPatternValueAmount(final InventoryPlayer ip, final Object te) { super(ip, te); this.patternValue = new SlotInaccessible(new AppEngInternalInventory(null, 1), 0, 34, 53); this.addSlotToContainer(patternValue); diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java new file mode 100644 index 00000000..11159da5 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java @@ -0,0 +1,144 @@ +package com.glodblock.github.client.gui.container; + +import java.util.HashMap; +import java.util.Map; + +import appeng.api.storage.data.IAEStack; +import com.glodblock.github.network.SPacketSuperStokerUpdate; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import com.glodblock.github.FluidCraft; +import com.glodblock.github.common.item.ItemBasicFluidStorageCell; +import com.glodblock.github.common.item.ItemFluidPacket; +import com.glodblock.github.common.tile.TileSuperStoker; +import com.glodblock.github.inventory.slot.OptionalFluidSlotFake; +import com.glodblock.github.network.SPacketFluidUpdate; + +import appeng.api.storage.data.IAEFluidStack; +import appeng.container.AEBaseContainer; +import appeng.container.slot.IOptionalSlotHost; +import appeng.container.slot.SlotPatternOutputs; +import appeng.container.slot.SlotRestrictedInput; +import appeng.items.storage.ItemBasicStorageCell; +import appeng.util.item.AEFluidStack; + +public class ContainerSuperStoker extends AEBaseContainer implements IOptionalSlotHost { + + private final TileSuperStoker tile; + private IInventory configFluids; + private IInventory configItems; + private Map> list; + + public ContainerSuperStoker(InventoryPlayer ipl, TileSuperStoker tile) { + super(ipl, tile); + this.tile = tile; + configFluids = tile.getConfigFluid(); + configItems = tile.getConfigItems(); + final IInventory cell = tile.getCell(); + + final int x = 8; + final int fy = 8; + + this.addSlotToContainer( + new SlotRestrictedInput( + SlotRestrictedInput.PlacableItemType.WORKBENCH_CELL, + cell, + 0, + 173, + fy, + this.getInventoryPlayer())); + + for (int i = 0; i < 9; i++) { + addSlotToContainer(new OptionalFluidSlotFake(configFluids, this, i, x, fy, i, 0, 0)); + } + + final int io = 29; + for (int y = 0; y < 7; y++) { + for (int ix = 0; ix < 9; ix++) { + this.addSlotToContainer(new SlotPatternOutputs(configItems, this, y * 9 + ix, x, io, ix, y, y)); + } + } + + bindPlayerInventory(ipl, 0, 251 - 82); + } + + @Override + public ItemStack slotClick(int slotId, int clickedButton, int mode, EntityPlayer player) { + if (slotId == 0 && player.inventory.getItemStack() == null && isConfigurated()) { + return null; + } + return super.slotClick(slotId, clickedButton, mode, player); + } + + @Override + public boolean isSlotEnabled(int idx) { + return true; + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + Map> tmp = new HashMap<>(); + for (int i = 0; i < tile.getInternalFluid().getSlots(); i++) { + tmp.put(i, tile.getInternalFluid().getFluidInSlot(i)); + } + for (int i = 0; i < tile.getInternalInventory().getSizeInventory(); i++) { + tmp.put( + i + 100, + tile.getInternalAEInventory().getAEStackInSlot(i)); + } + for (final Object g : this.crafters) { + if (g instanceof EntityPlayer) { + FluidCraft.proxy.netHandler.sendTo(new SPacketSuperStokerUpdate(tmp), (EntityPlayerMP) g); + } + } + } + + private boolean isConfigurated() { + for (int i = 0; i < configItems.getSizeInventory(); i++) { + if (configItems.getStackInSlot(i) != null) { + return true; + } + } + for (int i = 0; i < configFluids.getSizeInventory(); i++) { + if (configFluids.getStackInSlot(i) != null) { + return true; + } + } + return false; + } + + @Override + public boolean isValidForSlot(Slot s, ItemStack is) { + if (s.slotNumber == 0 && s.getHasStack() && isConfigurated()) { + long currentBytes = 0; + long newBytes = 0; + + if (s.getStack().getItem() instanceof ItemBasicStorageCell ibsc) { + currentBytes = ibsc.getBytesLong(is); + } else if (s.getStack().getItem() instanceof ItemBasicFluidStorageCell ibfsc) { + currentBytes = ibfsc.getBytes(is); + } + + if (is.getItem() instanceof ItemBasicStorageCell ibsc) { + newBytes = ibsc.getBytesLong(is); + } else if (is.getItem() instanceof ItemBasicFluidStorageCell ibfsc) { + newBytes = ibfsc.getBytes(is); + } + + if (currentBytes > newBytes) { + return false; + } + } + return super.isValidForSlot(s, is); + } + + public TileSuperStoker getTile() { + return tile; + } +} diff --git a/src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java b/src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java new file mode 100644 index 00000000..bcb72944 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java @@ -0,0 +1,69 @@ +package com.glodblock.github.common.block; + +import appeng.tile.crafting.TileCraftingTile; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.glodblock.github.common.tabs.FluidCraftingTabs; +import com.glodblock.github.common.tile.TileSuperStoker; +import com.glodblock.github.inventory.InventoryHandler; +import com.glodblock.github.inventory.gui.GuiType; +import com.glodblock.github.util.BlockPos; + +import appeng.block.AEBaseItemBlock; +import cpw.mods.fml.common.registry.GameRegistry; + +import java.util.ArrayList; + +public class BlockSuperStoker extends FCBaseBlock { + + public BlockSuperStoker() { + super(Material.iron, "SuperStoker"); + setTileEntity(TileSuperStoker.class); + setOpaque(false); + setFullBlock(false); + this.lightOpacity = 4; + } + + @Override + public boolean onActivated(World world, int x, int y, int z, EntityPlayer player, int facing, float hitX, + float hitY, float hitZ) { + if (player.isSneaking()) { + return false; + } + TileSuperStoker tile = getTileEntity(world, x, y, z); + if (tile != null) { + if (!world.isRemote) { + InventoryHandler.openGui( + player, + world, + new BlockPos(x, y, z), + ForgeDirection.getOrientation(facing), + GuiType.GUI_SUPER_STOKER); + } + return true; + } + return false; + } + + @Override + public void breakBlock(World w, int x, int y, int z, Block a, int b) { + final TileSuperStoker tss = this.getTileEntity(w, x, y, z); + if (tss != null) { + tss.fullRefund(); + } + super.breakBlock(w, x, y, z, a, b); + } + + @Override + public BlockSuperStoker register() { + GameRegistry.registerBlock(this, AEBaseItemBlock.class, "SuperStoker"); + GameRegistry.registerTileEntity(TileSuperStoker.class, "SuperStoker"); + setCreativeTab(FluidCraftingTabs.INSTANCE); + return this; + } +} diff --git a/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java b/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java new file mode 100644 index 00000000..b2a77235 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java @@ -0,0 +1,438 @@ +package com.glodblock.github.common.tile; + +import java.io.IOException; +import java.util.List; +import java.util.stream.IntStream; + +import javax.annotation.Nonnull; + +import appeng.tile.inventory.AppEngInternalAEInventory; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import com.glodblock.github.common.item.ItemBasicFluidStorageCell; +import com.glodblock.github.common.item.ItemFluidPacket; +import com.glodblock.github.inventory.AEFluidInventory; +import com.glodblock.github.inventory.IAEFluidInventory; +import com.glodblock.github.inventory.IAEFluidTank; + +import appeng.api.config.Actionable; +import appeng.api.config.PowerMultiplier; +import appeng.api.implementations.IPowerChannelState; +import appeng.api.networking.GridFlags; +import appeng.api.networking.IGridNode; +import appeng.api.networking.events.MENetworkBootingStatusChange; +import appeng.api.networking.events.MENetworkEventSubscribe; +import appeng.api.networking.events.MENetworkPowerStatusChange; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.MachineSource; +import appeng.api.networking.ticking.IGridTickable; +import appeng.api.networking.ticking.TickRateModulation; +import appeng.api.networking.ticking.TickingRequest; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.util.AECableType; +import appeng.api.util.DimensionalCoord; +import appeng.items.storage.ItemBasicStorageCell; +import appeng.me.GridAccessException; +import appeng.tile.TileEvent; +import appeng.tile.events.TileEventType; +import appeng.tile.grid.AENetworkInvTile; +import appeng.tile.inventory.AppEngInternalInventory; +import appeng.tile.inventory.InvOperation; +import appeng.util.item.AEFluidStack; +import appeng.util.item.AEItemStack; +import cpw.mods.fml.common.network.ByteBufUtils; +import io.netty.buffer.ByteBuf; + +public class TileSuperStoker extends AENetworkInvTile + implements IAEFluidInventory, IFluidHandler, IPowerChannelState, IGridTickable { + + private final AppEngInternalInventory cell = new AppEngInternalInventory(this, 1); + private final AppEngInternalAEInventory invItems = new AppEngInternalAEInventory(this, 63); + private final AEFluidInventory invFluids = new AEFluidInventory(this, 9, Long.MAX_VALUE); + private final AppEngInternalAEInventory configFluids = new AppEngInternalAEInventory(this, 9); + private final AppEngInternalAEInventory configItems = new AppEngInternalAEInventory(this, 63); + private final BaseActionSource source; + private boolean isPowered; + private long totalBytes; + private long storedFluidCount; + private long storedItemCount; + + public TileSuperStoker() { + getProxy().setIdlePowerUsage(2D); + getProxy().setFlags(GridFlags.REQUIRE_CHANNEL); + this.source = new MachineSource(this); + } + + private TickRateModulation doWork() { + for (int i = 0; i < 9; i++) { + IAEFluidStack invFluid = invFluids.getFluidInSlot(i); + IAEItemStack configFluid = configFluids.getAEStackInSlot(i); + if (configFluid != null) { + IAEFluidStack fs = AEFluidStack.create(ItemFluidPacket.getFluidStack(configFluid)); + if (invFluid == null) requestFluid(fs, i); + else if (invFluid.equals(fs)) { + if (invFluid.getStackSize() < fs.getStackSize() / 2) { + fs.setStackSize(fs.getStackSize() - invFluid.getStackSize()); + requestFluid(fs, i); + } else if (invFluid.getStackSize() > fs.getStackSize()) { + returnFluid(i, invFluid.getStackSize() - fs.getStackSize()); + } + } else { + returnFluid(i, Long.MAX_VALUE); + } + } else if (invFluid != null) { + returnFluid(i, Long.MAX_VALUE); + } + } + + for (int i = 0; i < 63; i++) { + IAEItemStack invItem = invItems.getAEStackInSlot(i); + IAEItemStack configItem = configItems.getAEStackInSlot(i); + + if (configItem != null) { + IAEItemStack is = configItem.copy(); + if (invItem == null) requestItem(is, i); + else if (invItem.getItem() == is.getItem()) { + if (invItem.getStackSize() < is.getStackSize() / 2) { + is.setStackSize(is.getStackSize() - invItem.getStackSize()); + requestItem(is, i); + } else if (invItem.getStackSize() > is.getStackSize()) { + returnItem(i, invItem.getStackSize() - is.getStackSize()); + } + } else { + returnItem(i, Long.MAX_VALUE); + } + } else if (invItem != null) { + returnItem(i, Long.MAX_VALUE); + } + } + return TickRateModulation.SAME; + } + + private void returnFluid(int index, long amount) { + try { + IAEFluidStack ias = invFluids.drain(index, amount, true); + storedFluidCount -= ias.getStackSize(); + IAEFluidStack notInserted = this.getProxy().getStorage().getFluidInventory() + .injectItems(ias, Actionable.MODULATE, this.source); + if (notInserted != null) { + invFluids.fill(index, notInserted, true); + storedFluidCount += ias.getStackSize(); + } + } catch (final GridAccessException ignored) {} + } + + private void requestFluid(IAEFluidStack fs, int index) { + if (getRemainingFluidCount() == 0) return; + try { + long remFluid = getRemainingFluidCount(); + if (fs.getStackSize() > remFluid) fs.setStackSize(remFluid); + IAEFluidStack extracted = this.getProxy().getStorage().getFluidInventory() + .extractItems(fs, Actionable.MODULATE, this.source); + if (extracted != null) { + storedFluidCount += extracted.getStackSize(); + invFluids.fill(index, extracted, true); + } + } catch (final GridAccessException ignored) {} + } + + private void returnItem(int index, long amount) { + try { + IAEItemStack ias = invItems.getAEStackInSlot(index); + if (amount != Long.MAX_VALUE) { + ias.decStackSize(amount); + ias = ias.copy(); + ias.setStackSize(amount); + } else { + amount = ias.getStackSize(); + invItems.setInventorySlotContents(index, null); + } + storedItemCount -= amount; + IAEItemStack notInserted = this.getProxy().getStorage().getItemInventory() + .injectItems(ias, Actionable.MODULATE, this.source); + if (notInserted != null) { + invItems.setInventorySlotContents(index, notInserted.getItemStack()); + invItems.getAEStackInSlot(index).setStackSize(notInserted.getStackSize()); + storedItemCount += notInserted.getStackSize(); + } + } catch (final GridAccessException ignored) {} + } + + private void requestItem(IAEItemStack is, int index) { + if (getRemainingItemCount() == 0) return; + try { + long remItem = getRemainingItemCount(); + if (is.getStackSize() > remItem) is.setStackSize(remItem); + IAEItemStack extracted = this.getProxy().getStorage().getItemInventory() + .extractItems(is, Actionable.MODULATE, this.source); + if (extracted != null) { + if (invItems.getAEStackInSlot(index) != null) invItems.getAEStackInSlot(index).add(extracted); + else { invItems.setInventorySlotContents(index, extracted.getItemStack()); invItems.getAEStackInSlot(index).setStackSize(extracted.getStackSize()); } + storedItemCount += extracted.getStackSize(); + } + } catch (final GridAccessException ignored) {} + } + + @Override + public int[] getAccessibleSlotsBySide(ForgeDirection whichSide) { + return IntStream.rangeClosed(0, 62).toArray(); + } + + @Nonnull + @Override + public IInventory getInternalInventory() { + return invItems; + } + + public AppEngInternalAEInventory getInternalAEInventory() { + return invItems; + } + + public AppEngInternalAEInventory getConfigFluid() { + return configFluids; + } + + public AppEngInternalAEInventory getConfigItems() { + return configItems; + } + + public AppEngInternalInventory getCell() { + return cell; + } + + public long getFreeBytes() { + return totalBytes - (((storedItemCount + getUnusedItemCount()) / 8) + ((storedFluidCount + getUnusedFluidCount()) / 2048)); + } + + public long getRemainingFluidCount() { + final double remaining = (double) getFreeBytes() * 2048 + this.getUnusedFluidCount(); + if (remaining > Long.MAX_VALUE) return Long.MAX_VALUE; + return remaining > 0 ? (long) remaining : 0; + } + + public int getUnusedFluidCount() { + final int div = (int) (storedFluidCount % 2048); + if (div == 0) { + return 0; + } + return 2048 - div; + } + + public long getRemainingItemCount() { + final long remaining = getFreeBytes() * 8 + this.getUnusedItemCount(); + + return remaining > 0 ? remaining : 0; + } + + public int getUnusedItemCount() { + final long div = storedItemCount % 8; + + if (div == 0) { + return 0; + } + + return (int) (8 - div); + } + + @Override + public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added) { + switch (mc) { + case setInventorySlotContents -> { + if (inv == cell) { + if (added.getItem() instanceof ItemBasicStorageCell ibsc) { + totalBytes = ibsc.getBytesLong(added); + } else if (added.getItem() instanceof ItemBasicFluidStorageCell ibfsc) { + totalBytes = ibfsc.getBytes(added); + } + } + } + case decreaseStackSize -> { + if (inv == cell) totalBytes = 0; + if (inv == invItems && invItems.getAEStackInSlot(slot) != null) invItems.getAEStackInSlot(slot).decStackSize(removed.stackSize); + } + case markDirty -> { + + } + } + markForUpdate(); + } + + public void fullRefund() { + for (int i = 0; i < 9; i++) { + if ( invFluids.getFluidStackInSlot(i) != null) { + returnFluid(i, Integer.MAX_VALUE); + } + } + + for (int i = 0; i < 63; i++) { + if (invItems.getAEStackInSlot(i) != null) { + returnItem(i, Integer.MAX_VALUE); + } + } + } + + @Override + public void getDrops(World w, int x, int y, int z, List drops) { + for (int i = 0; i < 9; i++) { + ItemStack ifp = ItemFluidPacket.newStack(invFluids.getFluidStackInSlot(i)); + if (ifp != null) drops.add(ifp); + } + super.getDrops(w, x, y, z, drops); + } + + @Override + public boolean canInsertItem(int slotIndex, ItemStack insertingItem, int side) { + return false; + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + return invFluids.fill(from, resource, doFill); + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + return invFluids.drain(from, resource, doDrain); + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + return invFluids.drain(from, maxDrain, doDrain); + } + + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid) { + return false; + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) { + return invFluids.canDrain(from, fluid); + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + return invFluids.getTankInfo(from); + } + + @Override + public void onFluidInventoryChanged(IAEFluidTank inv, int slot) { + saveChanges(); + markForUpdate(); + } + + @Override + public AEFluidInventory getInternalFluid() { + return this.invFluids; + } + + @TileEvent(TileEventType.NETWORK_WRITE) + protected void writeToStream(ByteBuf data) throws IOException { + for (int i = 0; i < invItems.getSizeInventory(); i++) { + ByteBufUtils.writeItemStack(data, invItems.getStackInSlot(i)); + } + this.invFluids.writeToBuf(data); + } + + @TileEvent(TileEventType.NETWORK_READ) + protected boolean readFromStream(ByteBuf data) throws IOException { + boolean changed = false; + for (int i = 0; i < invItems.getSizeInventory(); i++) { + ItemStack stack = ByteBufUtils.readItemStack(data); + if (!ItemStack.areItemStacksEqual(stack, invItems.getStackInSlot(i))) { + invItems.setInventorySlotContents(i, stack); + changed = true; + } + } + changed |= this.invFluids.readFromBuf(data); + return changed; + } + + @TileEvent(TileEventType.WORLD_NBT_READ) + public void readFromNBTEvent(NBTTagCompound data) { + invItems.readFromNBT(data, "ItemInv"); + invFluids.readFromNBT(data, "FluidInv"); + configItems.readFromNBT(data, "configItems"); + configFluids.readFromNBT(data, "configFluids"); + cell.readFromNBT(data, "cellHolder"); + totalBytes = data.getLong("totalBytes"); + storedFluidCount = data.getLong("storedFluidCount"); + storedItemCount = data.getLong("storedItemCount"); + } + + @TileEvent(TileEventType.WORLD_NBT_WRITE) + public NBTTagCompound writeToNBTEvent(NBTTagCompound data) { + invItems.writeToNBT(data, "ItemInv"); + invFluids.writeToNBT(data, "FluidInv"); + configItems.writeToNBT(data, "configItems"); + configFluids.writeToNBT(data, "configFluids"); + cell.writeToNBT(data, "cellHolder"); + data.setLong("totalBytes", totalBytes); + data.setLong("storedFluidCount", storedFluidCount); + data.setLong("storedItemCount", storedItemCount); + return data; + } + + @MENetworkEventSubscribe + public void stateChange(final MENetworkPowerStatusChange p) { + this.updatePowerState(); + } + + @MENetworkEventSubscribe + public final void bootingRender(final MENetworkBootingStatusChange c) { + this.updatePowerState(); + } + + @Override + public boolean isPowered() { + return this.isPowered; + } + + @Override + public boolean isActive() { + return this.isPowered; + } + + private void updatePowerState() { + boolean newState = false; + try { + newState = this.getProxy().isActive() + && this.getProxy().getEnergy().extractAEPower(1, Actionable.SIMULATE, PowerMultiplier.CONFIG) + > 0.0001; + } catch (final GridAccessException ignored) {} + if (newState != this.isPowered) { + this.isPowered = newState; + this.markForUpdate(); + } + } + + @Override + public DimensionalCoord getLocation() { + return new DimensionalCoord(this); + } + + @Override + public AECableType getCableConnectionType(ForgeDirection dir) { + return AECableType.SMART; + } + + @Override + public TickingRequest getTickingRequest(IGridNode node) { + return new TickingRequest(120, 120, false, false); + } + + @Override + public TickRateModulation tickingRequest(IGridNode node, int TicksSinceLastCall) { + return doWork(); + } +} diff --git a/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java b/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java index 522096a0..a6353df7 100644 --- a/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java +++ b/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java @@ -22,12 +22,21 @@ public class AEFluidInventory implements IAEFluidTank { private final IAEFluidStack[] fluids; private final IAEFluidInventory handler; private final int capacity; + private final long capacityLong; public int lastIndex; public AEFluidInventory(final IAEFluidInventory handler, final int slots, final int capcity) { this.fluids = new IAEFluidStack[slots]; this.handler = handler; this.capacity = capcity; + this.capacityLong = capcity; + } + + public AEFluidInventory(final IAEFluidInventory handler, final int slots, final long capcity) { + this.fluids = new IAEFluidStack[slots]; + this.handler = handler; + this.capacity = Integer.MAX_VALUE; + this.capacityLong = capcity; } public AEFluidInventory(final IAEFluidInventory handler, final int slots) { @@ -122,6 +131,37 @@ public class AEFluidInventory implements IAEFluidTank { return amountToStore; } + public long fill(final int slot, final IAEFluidStack resource, final boolean doFill) { + if (resource == null || resource.getStackSize() <= 0) { + return 0; + } + + final IAEFluidStack fluid = this.fluids[slot]; + + if (fluid != null && !(fluid.getFluid() == resource.getFluid())) { + return 0; + } + + long amountToStore = this.capacityLong; + + if (fluid != null) { + amountToStore -= fluid.getStackSize(); + } + + amountToStore = Math.min(amountToStore, resource.getStackSize()); + + if (doFill) { + if (fluid == null) { + this.setFluidInSlot(slot, resource); + } else { + fluid.setStackSize(fluid.getStackSize() + amountToStore); + this.onContentChanged(slot); + } + } + + return amountToStore; + } + public FluidStack drain(final int slot, final FluidStack resource, final boolean doDrain) { final IAEFluidStack fluid = this.fluids[slot]; if (fluid == null || !fluid.getFluidStack().isFluidEqual(resource)) { @@ -152,6 +192,28 @@ public class AEFluidInventory implements IAEFluidTank { return stack; } + public IAEFluidStack drain(final int slot, final long maxDrain, boolean doDrain) { + final IAEFluidStack fluid = this.fluids[slot]; + if (fluid == null || maxDrain <= 0) { + return null; + } + + long drained = maxDrain; + if (fluid.getStackSize() < drained) { + drained = fluid.getStackSize(); + } + + IAEFluidStack stack = fluid.copy().setStackSize(drained); + if (doDrain) { + fluid.setStackSize(fluid.getStackSize() - drained); + if (fluid.getStackSize() <= 0) { + this.fluids[slot] = null; + } + this.onContentChanged(slot); + } + return stack; + } + @Override public int fill(ForgeDirection from, final FluidStack fluid, final boolean doFill) { if (fluid == null || fluid.amount <= 0) { diff --git a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java index 49e5890f..12f8f69b 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java +++ b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java @@ -5,6 +5,7 @@ import java.util.List; import javax.annotation.Nullable; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; import com.glodblock.github.client.gui.GuiCraftingStatus; import com.glodblock.github.client.gui.GuiDualInterface; @@ -37,6 +38,7 @@ import com.glodblock.github.client.gui.GuiOCPatternEditor; import com.glodblock.github.client.gui.GuiPatternMulti; import com.glodblock.github.client.gui.GuiPatternValueAmount; import com.glodblock.github.client.gui.GuiRenamer; +import com.glodblock.github.client.gui.GuiSuperStoker; import com.glodblock.github.client.gui.container.ContainerCraftingWireless; import com.glodblock.github.client.gui.container.ContainerDualInterface; import com.glodblock.github.client.gui.container.ContainerEssentiaMonitor; @@ -65,6 +67,7 @@ import com.glodblock.github.client.gui.container.ContainerOCPatternEditor; import com.glodblock.github.client.gui.container.ContainerPatternMulti; import com.glodblock.github.client.gui.container.ContainerPatternValueAmount; import com.glodblock.github.client.gui.container.ContainerRenamer; +import com.glodblock.github.client.gui.container.ContainerSuperStoker; import com.glodblock.github.common.parts.PartFluidLevelEmitter; import com.glodblock.github.common.parts.PartFluidStorageBus; import com.glodblock.github.common.parts.base.FCPart; @@ -76,6 +79,7 @@ import com.glodblock.github.common.tile.TileIngredientBuffer; import com.glodblock.github.common.tile.TileLargeIngredientBuffer; import com.glodblock.github.common.tile.TileLevelMaintainer; import com.glodblock.github.common.tile.TileOCPatternEditor; +import com.glodblock.github.common.tile.TileSuperStoker; import com.glodblock.github.inventory.IDualHost; import com.glodblock.github.inventory.item.IFluidPortableCell; import com.glodblock.github.inventory.item.IWirelessTerminal; @@ -515,6 +519,18 @@ public enum GuiType { return new GuiPatternValueAmount(player.inventory, inv); } }), + PATTERN_VALUE_SET_TILE(new TileGuiFactory<>(TileEntity.class) { + + @Override + protected Object createServerGui(EntityPlayer player, TileEntity inv) { + return new ContainerPatternValueAmount(player.inventory, inv); + } + + @Override + protected Object createClientGui(EntityPlayer player, TileEntity inv) { + return new GuiPatternValueAmount(player.inventory, inv); + } + }), GUI_PATTERN_MULTI(new PartOrItemGuiFactory<>(ITerminalHost.class) { @@ -527,6 +543,19 @@ public enum GuiType { protected Object createClientGui(EntityPlayer player, ITerminalHost inv) { return new GuiPatternMulti(player.inventory, inv); } + }), + + GUI_SUPER_STOKER(new TileGuiFactory<>(TileSuperStoker.class) { + + @Override + protected Object createServerGui(EntityPlayer player, TileSuperStoker inv) { + return new ContainerSuperStoker(player.inventory, inv); + } + + @Override + protected Object createClientGui(EntityPlayer player, TileSuperStoker inv) { + return new GuiSuperStoker(player.inventory, inv); + } }); public static final List VALUES = ImmutableList.copyOf(values()); diff --git a/src/main/java/com/glodblock/github/inventory/slot/OptionalFluidSlotFake.java b/src/main/java/com/glodblock/github/inventory/slot/OptionalFluidSlotFake.java new file mode 100644 index 00000000..1e6c4ced --- /dev/null +++ b/src/main/java/com/glodblock/github/inventory/slot/OptionalFluidSlotFake.java @@ -0,0 +1,28 @@ +package com.glodblock.github.inventory.slot; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import com.glodblock.github.common.item.ItemFluidPacket; +import com.glodblock.github.util.Util; + +import appeng.container.slot.IOptionalSlotHost; +import appeng.container.slot.OptionalSlotFake; + +public class OptionalFluidSlotFake extends OptionalSlotFake { + + public OptionalFluidSlotFake(final IInventory inv, final IOptionalSlotHost containerBus, final int idx, final int x, + final int y, final int offX, final int offY, final int groupNum) { + super(inv, containerBus, idx, x, y, offX, offY, groupNum); + } + + @Override + public void putStack(ItemStack is) { + if (is == null) super.putStack(null); + FluidStack fluidStack = Util.getFluidFromItem(is); + if (fluidStack != null) { + super.putStack(ItemFluidPacket.newStack(fluidStack)); + } + } +} diff --git a/src/main/java/com/glodblock/github/loader/ChannelLoader.java b/src/main/java/com/glodblock/github/loader/ChannelLoader.java index 1bccece4..d902bff0 100644 --- a/src/main/java/com/glodblock/github/loader/ChannelLoader.java +++ b/src/main/java/com/glodblock/github/loader/ChannelLoader.java @@ -1,5 +1,6 @@ package com.glodblock.github.loader; +import com.glodblock.github.network.SPacketSuperStokerUpdate; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.Packet; import net.minecraft.world.World; @@ -59,6 +60,7 @@ public class ChannelLoader implements Runnable { netHandler.registerMessage(new CPacketTransferRecipe.Handler(), CPacketTransferRecipe.class, id++, Side.SERVER); netHandler.registerMessage(new CPacketDumpTank.Handler(), CPacketDumpTank.class, id++, Side.SERVER); netHandler.registerMessage(new SPacketFluidUpdate.Handler(), SPacketFluidUpdate.class, id++, Side.CLIENT); + netHandler.registerMessage(new SPacketSuperStokerUpdate.Handler(), SPacketSuperStokerUpdate.class, id++, Side.CLIENT); netHandler .registerMessage(new CPacketPatternValueSet.Handler(), CPacketPatternValueSet.class, id++, Side.SERVER); netHandler.registerMessage(new CPacketValueConfig.Handler(), CPacketValueConfig.class, id++, Side.SERVER); diff --git a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java index 605107eb..0f728b9e 100644 --- a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java +++ b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java @@ -14,6 +14,7 @@ import com.glodblock.github.common.block.BlockIngredientBuffer; import com.glodblock.github.common.block.BlockLargeIngredientBuffer; import com.glodblock.github.common.block.BlockLevelMaintainer; import com.glodblock.github.common.block.BlockOCPatternEditor; +import com.glodblock.github.common.block.BlockSuperStoker; import com.glodblock.github.common.block.BlockWalrus; import com.glodblock.github.common.item.ItemBasicFluidStorageCell; import com.glodblock.github.common.item.ItemBasicFluidStoragePart; @@ -65,6 +66,7 @@ public class ItemAndBlockHolder { public static BlockLargeIngredientBuffer LARGE_BUFFER = new BlockLargeIngredientBuffer().register(); public static BlockOCPatternEditor OC_EDITOR = new BlockOCPatternEditor().register(); public static BlockWalrus WALRUS = new BlockWalrus().register(); + public static BlockSuperStoker SUPER_STOKER = new BlockSuperStoker().register(); public static ItemFluidDrop DROP = new ItemFluidDrop().register(); public static ItemFluidEncodedPattern PATTERN = new ItemFluidEncodedPattern().register(); public static ItemPartFluidTerminal FLUID_TERM = new ItemPartFluidTerminal().register(); diff --git a/src/main/java/com/glodblock/github/network/CPacketInventoryAction.java b/src/main/java/com/glodblock/github/network/CPacketInventoryAction.java index b4b96083..53fffc65 100644 --- a/src/main/java/com/glodblock/github/network/CPacketInventoryAction.java +++ b/src/main/java/com/glodblock/github/network/CPacketInventoryAction.java @@ -25,6 +25,7 @@ import appeng.container.AEBaseContainer; import appeng.container.ContainerOpenContext; import appeng.container.implementations.ContainerCraftAmount; import appeng.helpers.InventoryAction; +import appeng.tile.networking.TileCableBus; import appeng.util.item.AEItemStack; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; @@ -130,12 +131,21 @@ public class CPacketInventoryAction implements IMessage { if (context != null && message.stack != null) { final TileEntity te = context.getTile(); if (te != null) { - InventoryHandler.openGui( + if (te instanceof TileCableBus) { + InventoryHandler.openGui( sender, te.getWorldObj(), new BlockPos(te), Objects.requireNonNull(baseContainer.getOpenContext().getSide()), GuiType.PATTERN_VALUE_SET); + } else { + InventoryHandler.openGui( + sender, + te.getWorldObj(), + new BlockPos(te), + Objects.requireNonNull(baseContainer.getOpenContext().getSide()), + GuiType.PATTERN_VALUE_SET_TILE); + } } else if (target instanceof IWirelessTerminal wt) { InventoryHandler.openGui( sender, diff --git a/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java b/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java index 7c3b6a49..2a95038b 100644 --- a/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java +++ b/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java @@ -9,6 +9,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; import com.glodblock.github.client.gui.container.ContainerPatternValueAmount; +import com.glodblock.github.client.gui.container.ContainerSuperStoker; import com.glodblock.github.client.gui.container.base.FCContainerEncodeTerminal; import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.inventory.InventoryHandler; @@ -92,7 +93,8 @@ public class CPacketPatternValueSet implements IMessage { Objects.requireNonNull(context.getSide()), message.originGui); } - if (player.openContainer instanceof FCContainerEncodeTerminal) { + if (player.openContainer instanceof FCContainerEncodeTerminal + || player.openContainer instanceof ContainerSuperStoker) { Slot slot = player.openContainer.getSlot(message.valueIndex); if (slot instanceof SlotFake) { ItemStack stack = slot.getStack().copy(); diff --git a/src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java b/src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java new file mode 100644 index 00000000..66422c71 --- /dev/null +++ b/src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java @@ -0,0 +1,71 @@ +package com.glodblock.github.network; + +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IAEStack; +import appeng.util.Platform; +import appeng.util.item.AEItemStack; +import appeng.util.item.AEStack; +import com.glodblock.github.client.gui.GuiEssentiaTerminal; +import com.glodblock.github.client.gui.GuiFluidIO; +import com.glodblock.github.client.gui.GuiFluidInterface; +import com.glodblock.github.client.gui.GuiFluidLevelEmitter; +import com.glodblock.github.client.gui.GuiFluidStorageBus; +import com.glodblock.github.client.gui.GuiFluidTerminal; +import com.glodblock.github.client.gui.GuiIngredientBuffer; +import com.glodblock.github.client.gui.GuiLargeIngredientBuffer; +import com.glodblock.github.client.gui.GuiSuperStoker; +import com.glodblock.github.util.Util; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.item.ItemStack; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class SPacketSuperStokerUpdate implements IMessage { + + private Map> list; + + public SPacketSuperStokerUpdate() {} + + public SPacketSuperStokerUpdate(Map> data) { + this.list = data; + } + + @Override + public void fromBytes(ByteBuf buf) { + this.list = new HashMap<>(); + try { + Util.readAEStackMapFromBuf(this.list, buf); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void toBytes(ByteBuf buf) { + try { + Util.writeAEStackMapToBuf(this.list, buf); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static class Handler implements IMessageHandler { + + @Override + public IMessage onMessage(SPacketSuperStokerUpdate message, MessageContext ctx) { + final GuiScreen gs = Minecraft.getMinecraft().currentScreen; + if (gs instanceof GuiSuperStoker gss) { + gss.update(message.list); + } + return null; + } + } +} diff --git a/src/main/java/com/glodblock/github/util/Util.java b/src/main/java/com/glodblock/github/util/Util.java index 6b3de0b2..6f8d713e 100644 --- a/src/main/java/com/glodblock/github/util/Util.java +++ b/src/main/java/com/glodblock/github/util/Util.java @@ -9,6 +9,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import appeng.api.storage.data.IAEStack; +import appeng.util.item.AEItemStack; +import appeng.util.item.AEStack; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Items; @@ -382,6 +385,36 @@ public final class Util { } } + public static void writeAEStackMapToBuf(Map> list, ByteBuf buf) throws IOException { + buf.writeInt(list.size()); + for (Map.Entry> as : list.entrySet()) { + buf.writeInt(as.getKey()); + if (as.getValue() == null) buf.writeBoolean(false); + else { + buf.writeBoolean(true); + as.getValue().writeToPacket(buf); + } + } + } + + public static void readAEStackMapFromBuf(Map> list, ByteBuf buf) throws IOException { + int size = buf.readInt(); + for (int i = 0; i < size; i++) { + int id = buf.readInt(); + boolean isNull = buf.readBoolean(); + if (!isNull) list.put(id, null); + else { + IAEStack as; + if (id > 99) { + as = AEItemStack.loadItemStackFromPacket(buf); + } else { + as = AEFluidStack.loadFluidStackFromPacket(buf); + } + list.put(id, as); + } + } + } + public static class GuiHelper { public enum GuiType { diff --git a/src/main/resources/assets/ae2fc/textures/gui/superStoker.png b/src/main/resources/assets/ae2fc/textures/gui/superStoker.png new file mode 100644 index 0000000000000000000000000000000000000000..cd2a6b00526201cd89968a4abdcb97fe8846c4e8 GIT binary patch literal 1985 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G!U;i$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBK4*bPWHAE+-yRTVoVusT6DTNA;u=vBoS#-wo>-L15RjOeSEA?V8lqsT zXQ*eGv^9tasAgMgglC$krxpVTki*I##mEY_+6%~&hO&XKVbEY?28%NR*@lcv3<5wp z3Wzh?S-|31KsE?Ol`%5BU`EhrmNEdPCa^QG096_o85=MzfS3yMEb9V@NmGDq5MTnD z%LG;#WN86pL3J4#7=UCIt|%+AcFsD$z`$1E>Eakt5%>1)Lto`^k+wvSQ0yADCZ$GC>=&6)nd*P&_P!{<=5Jo;~~S;-Bl*uRp)9_V>1Gv-y@= z|9_ry`t<3$n+uOWd3feYHiJ9!hwJwBe*N$3{?_jLzvBMC8-CyY>*vp{{rTzWoIcB~ zhb`NWr&_Ds=G=3nYF66-}6mw#Ox(D}Q$7*`Bt_TXqd64*_U+quH*Lbh z!!H+k6yHnpTYJ{BEcew1mAFHu3>Jod|58~RCSToO8(&l{R{qJH>40a|^Uc2}MXNAA zc(NpZhqNbyMWo-qr5WP6$4G`^?JTIhW<9Ga2+{!$JqySd?HxmH^xL_nGMI ztgL5O+|Iu2_m*xvwox!ctvE~h`3;UOa?*`yM$65L`g$E+7xH4n0J2f&b`<2wA6RmK zPg1ZiFvM3_{w>T@zF=X-bT$R(ei`Y;YstzNe1LYI1KMW0juCe(W3gl1Tjm*GW{2mj zS~)XV+H|?SUM`E&akm9CL7@ONwkn5Z*2y`yPFR{TtvzmvlwhzJg_gt)ZLMXPT=%)l z*VME)Yw@!$$CvgxJiftUGTCzL#Nr&5sQz9DW1yXuK-<3VV8fOuaoVwC8-K#3{J4!P zm!g1U^u{o7dh0g<4^eLc3l6)==1BWw%OGyzz~=POb2F6y}^1cjpt7| zO(?8k!I6E?O)2~G`r!0Wf4>8Lo_p@;)2Hula@X@(oV&=dCH{cW?YCvW=2bwFJusCp zN*s45Jz)P;->A*6g(iocH*=OnTbIT2B|h6U6cgO?7!IcS6I&G?|KNb71M6KPB`ddy zT)KAq`^@0%;vCkv^N`TncJJDmm0K;hF|8*j*y?_-%H0Y}k82M+p2F?;z<85Dii|uX zqf7B4&J@vQTu7nLf(X(f2|uncXxN+b^h^Z&Y$Ej_749eTZ11yVFy(^ cE9TDq%k6b#zRl!oN_HRtPgg&ebxsLQ03Z^?CjbBd literal 0 HcmV?d00001 From e92d524e366bae852dd5817ad28615b59c9171cf Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Wed, 2 Apr 2025 15:57:09 +0300 Subject: [PATCH 2/7] update --- .../github/client/gui/GuiSuperStoker.java | 27 +++---- .../gui/container/ContainerSuperStoker.java | 12 +-- .../github/common/block/BlockSuperStoker.java | 11 +-- .../github/common/tile/TileSuperStoker.java | 72 ++++++++++-------- .../github/loader/ChannelLoader.java | 8 +- .../network/SPacketSuperStokerUpdate.java | 36 +++------ .../com/glodblock/github/util/NameConst.java | 1 + .../java/com/glodblock/github/util/Util.java | 5 +- .../resources/assets/ae2fc/lang/en_US.lang | 1 + .../ae2fc/textures/blocks/super_stoker.png | Bin 0 -> 494 bytes 10 files changed, 78 insertions(+), 95 deletions(-) create mode 100644 src/main/resources/assets/ae2fc/textures/blocks/super_stoker.png diff --git a/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java b/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java index 8c566ddf..7be7a2e6 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java @@ -1,11 +1,8 @@ package com.glodblock.github.client.gui; -import appeng.api.storage.data.IAEStack; -import appeng.util.Platform; -import appeng.util.item.AEStack; -import com.glodblock.github.client.gui.container.ContainerFluidAutoFiller; -import com.glodblock.github.common.item.ItemFluidPacket; -import com.glodblock.github.inventory.slot.OptionalFluidSlotFake; +import java.util.HashMap; +import java.util.Map; + import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; @@ -15,11 +12,12 @@ import org.lwjgl.opengl.GL11; import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.ContainerSuperStoker; +import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.common.tile.TileSuperStoker; import com.glodblock.github.network.CPacketInventoryAction; -import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IAEStack; import appeng.client.gui.AEBaseGui; import appeng.container.AEBaseContainer; import appeng.container.slot.SlotFake; @@ -27,10 +25,6 @@ import appeng.core.localization.GuiText; import appeng.helpers.InventoryAction; import appeng.util.item.AEItemStack; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; - public class GuiSuperStoker extends AEBaseGui { private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/superStoker.png"); @@ -83,8 +77,10 @@ public class GuiSuperStoker extends AEBaseGui { String s = "0%"; if (slotInt > 0 && slotInt < 9) { IAEStack aeStack = list.get(slotInt - 1); - if (aeStack != null) s = (int) (((float) aeStack.getStackSize() / ItemFluidPacket.getFluidAmount(itemstack)) * 100) + "%"; - } else if (slotInt > 9 && slotInt < 73){ + if (aeStack != null) + s = (int) (((float) aeStack.getStackSize() / ItemFluidPacket.getFluidAmount(itemstack)) * 100) + + "%"; + } else if (slotInt > 9 && slotInt < 73) { IAEStack aeStack = list.get(slotInt + 90); if (aeStack != null && itemstack.stackSize > 0) { long i = aeStack.getStackSize(); @@ -97,10 +93,7 @@ public class GuiSuperStoker extends AEBaseGui { float shiftY = 1; final float inverseScaleFactor = 1.0f / scale; - final int X = (int) (((float) offsetX - shiftX - + 16.0f - + 1.0f - - this.fontRendererObj.getStringWidth(s) * scale) * inverseScaleFactor); + final int X = (int) (((float) offsetX - shiftX + 10.0f) * inverseScaleFactor); final int Y = (int) (((float) offsetY - shiftY + 16.0f - 7.0f * scale) * inverseScaleFactor); GL11.glTranslatef(0.0f, 0.0f, 200.0f); GL11.glScaled(scale, scale, scale); diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java index 11159da5..feacf186 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java @@ -3,8 +3,6 @@ package com.glodblock.github.client.gui.container; import java.util.HashMap; import java.util.Map; -import appeng.api.storage.data.IAEStack; -import com.glodblock.github.network.SPacketSuperStokerUpdate; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; @@ -14,18 +12,16 @@ import net.minecraft.item.ItemStack; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.item.ItemBasicFluidStorageCell; -import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.common.tile.TileSuperStoker; import com.glodblock.github.inventory.slot.OptionalFluidSlotFake; -import com.glodblock.github.network.SPacketFluidUpdate; +import com.glodblock.github.network.SPacketSuperStokerUpdate; -import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IAEStack; import appeng.container.AEBaseContainer; import appeng.container.slot.IOptionalSlotHost; import appeng.container.slot.SlotPatternOutputs; import appeng.container.slot.SlotRestrictedInput; import appeng.items.storage.ItemBasicStorageCell; -import appeng.util.item.AEFluidStack; public class ContainerSuperStoker extends AEBaseContainer implements IOptionalSlotHost { @@ -88,9 +84,7 @@ public class ContainerSuperStoker extends AEBaseContainer implements IOptionalSl tmp.put(i, tile.getInternalFluid().getFluidInSlot(i)); } for (int i = 0; i < tile.getInternalInventory().getSizeInventory(); i++) { - tmp.put( - i + 100, - tile.getInternalAEInventory().getAEStackInSlot(i)); + tmp.put(i + 100, tile.getInternalAEInventory().getAEStackInSlot(i)); } for (final Object g : this.crafters) { if (g instanceof EntityPlayer) { diff --git a/src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java b/src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java index bcb72944..6bdb6ea0 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java +++ b/src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java @@ -1,10 +1,8 @@ package com.glodblock.github.common.block; -import appeng.tile.crafting.TileCraftingTile; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -13,16 +11,15 @@ import com.glodblock.github.common.tile.TileSuperStoker; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.util.BlockPos; +import com.glodblock.github.util.NameConst; import appeng.block.AEBaseItemBlock; import cpw.mods.fml.common.registry.GameRegistry; -import java.util.ArrayList; - public class BlockSuperStoker extends FCBaseBlock { public BlockSuperStoker() { - super(Material.iron, "SuperStoker"); + super(Material.web, NameConst.BLOCK_SUPER_STOKER); setTileEntity(TileSuperStoker.class); setOpaque(false); setFullBlock(false); @@ -61,8 +58,8 @@ public class BlockSuperStoker extends FCBaseBlock { @Override public BlockSuperStoker register() { - GameRegistry.registerBlock(this, AEBaseItemBlock.class, "SuperStoker"); - GameRegistry.registerTileEntity(TileSuperStoker.class, "SuperStoker"); + GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_SUPER_STOKER); + GameRegistry.registerTileEntity(TileSuperStoker.class, NameConst.BLOCK_SUPER_STOKER); setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java b/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java index b2a77235..61c0ccd7 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java +++ b/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java @@ -1,12 +1,10 @@ package com.glodblock.github.common.tile; -import java.io.IOException; import java.util.List; import java.util.stream.IntStream; import javax.annotation.Nonnull; -import appeng.tile.inventory.AppEngInternalAEInventory; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -40,16 +38,16 @@ import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.util.AECableType; import appeng.api.util.DimensionalCoord; +import appeng.core.AELog; import appeng.items.storage.ItemBasicStorageCell; import appeng.me.GridAccessException; import appeng.tile.TileEvent; import appeng.tile.events.TileEventType; import appeng.tile.grid.AENetworkInvTile; +import appeng.tile.inventory.AppEngInternalAEInventory; import appeng.tile.inventory.AppEngInternalInventory; import appeng.tile.inventory.InvOperation; import appeng.util.item.AEFluidStack; -import appeng.util.item.AEItemStack; -import cpw.mods.fml.common.network.ByteBufUtils; import io.netty.buffer.ByteBuf; public class TileSuperStoker extends AENetworkInvTile @@ -67,7 +65,7 @@ public class TileSuperStoker extends AENetworkInvTile private long storedItemCount; public TileSuperStoker() { - getProxy().setIdlePowerUsage(2D); + getProxy().setIdlePowerUsage(4D); getProxy().setFlags(GridFlags.REQUIRE_CHANNEL); this.source = new MachineSource(this); } @@ -115,6 +113,7 @@ public class TileSuperStoker extends AENetworkInvTile returnItem(i, Long.MAX_VALUE); } } + return TickRateModulation.SAME; } @@ -176,7 +175,10 @@ public class TileSuperStoker extends AENetworkInvTile .extractItems(is, Actionable.MODULATE, this.source); if (extracted != null) { if (invItems.getAEStackInSlot(index) != null) invItems.getAEStackInSlot(index).add(extracted); - else { invItems.setInventorySlotContents(index, extracted.getItemStack()); invItems.getAEStackInSlot(index).setStackSize(extracted.getStackSize()); } + else { + invItems.setInventorySlotContents(index, extracted.getItemStack()); + invItems.getAEStackInSlot(index).setStackSize(extracted.getStackSize()); + } storedItemCount += extracted.getStackSize(); } } catch (final GridAccessException ignored) {} @@ -210,7 +212,8 @@ public class TileSuperStoker extends AENetworkInvTile } public long getFreeBytes() { - return totalBytes - (((storedItemCount + getUnusedItemCount()) / 8) + ((storedFluidCount + getUnusedFluidCount()) / 2048)); + return totalBytes - (((storedItemCount + getUnusedItemCount()) / 8) + + ((storedFluidCount + getUnusedFluidCount()) / 2048)); } public long getRemainingFluidCount() { @@ -247,28 +250,40 @@ public class TileSuperStoker extends AENetworkInvTile public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added) { switch (mc) { case setInventorySlotContents -> { - if (inv == cell) { + if (inv == cell && added != null) { if (added.getItem() instanceof ItemBasicStorageCell ibsc) { totalBytes = ibsc.getBytesLong(added); } else if (added.getItem() instanceof ItemBasicFluidStorageCell ibfsc) { totalBytes = ibfsc.getBytes(added); } + getProxy().setIdlePowerUsage(Math.sqrt(Math.pow(totalBytes, 0.576D))); } } case decreaseStackSize -> { - if (inv == cell) totalBytes = 0; - if (inv == invItems && invItems.getAEStackInSlot(slot) != null) invItems.getAEStackInSlot(slot).decStackSize(removed.stackSize); + if (inv == cell) { + totalBytes = 0; + getProxy().setIdlePowerUsage(4d); + } + if (inv == invItems && invItems.getAEStackInSlot(slot) != null) + invItems.getAEStackInSlot(slot).decStackSize(removed.stackSize); } case markDirty -> { } } + + try { + getProxy().getTick().alertDevice(getProxy().getNode()); + } catch (GridAccessException e) { + AELog.error(e, "Couldn't wake up level emitter for delayed updates"); + } + markForUpdate(); } public void fullRefund() { for (int i = 0; i < 9; i++) { - if ( invFluids.getFluidStackInSlot(i) != null) { + if (invFluids.getFluidStackInSlot(i) != null) { returnFluid(i, Integer.MAX_VALUE); } } @@ -283,8 +298,8 @@ public class TileSuperStoker extends AENetworkInvTile @Override public void getDrops(World w, int x, int y, int z, List drops) { for (int i = 0; i < 9; i++) { - ItemStack ifp = ItemFluidPacket.newStack(invFluids.getFluidStackInSlot(i)); - if (ifp != null) drops.add(ifp); + ItemStack ifp = ItemFluidPacket.newStack(invFluids.getFluidStackInSlot(i)); + if (ifp != null) drops.add(ifp); } super.getDrops(w, x, y, z, drops); } @@ -296,7 +311,7 @@ public class TileSuperStoker extends AENetworkInvTile @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - return invFluids.fill(from, resource, doFill); + return 0; } @Override @@ -309,7 +324,6 @@ public class TileSuperStoker extends AENetworkInvTile return invFluids.drain(from, maxDrain, doDrain); } - @Override public boolean canFill(ForgeDirection from, Fluid fluid) { return false; @@ -336,26 +350,16 @@ public class TileSuperStoker extends AENetworkInvTile return this.invFluids; } - @TileEvent(TileEventType.NETWORK_WRITE) - protected void writeToStream(ByteBuf data) throws IOException { - for (int i = 0; i < invItems.getSizeInventory(); i++) { - ByteBufUtils.writeItemStack(data, invItems.getStackInSlot(i)); - } - this.invFluids.writeToBuf(data); + @TileEvent(TileEventType.NETWORK_READ) + public boolean readFromStream_TileSuperStoker(final ByteBuf data) { + final boolean oldPower = isPowered; + isPowered = data.readBoolean(); + return isPowered != oldPower; } - @TileEvent(TileEventType.NETWORK_READ) - protected boolean readFromStream(ByteBuf data) throws IOException { - boolean changed = false; - for (int i = 0; i < invItems.getSizeInventory(); i++) { - ItemStack stack = ByteBufUtils.readItemStack(data); - if (!ItemStack.areItemStacksEqual(stack, invItems.getStackInSlot(i))) { - invItems.setInventorySlotContents(i, stack); - changed = true; - } - } - changed |= this.invFluids.readFromBuf(data); - return changed; + @TileEvent(TileEventType.NETWORK_WRITE) + public void writeToStream_TileSuperStoker(final ByteBuf data) { + data.writeBoolean(isActive()); } @TileEvent(TileEventType.WORLD_NBT_READ) @@ -368,6 +372,7 @@ public class TileSuperStoker extends AENetworkInvTile totalBytes = data.getLong("totalBytes"); storedFluidCount = data.getLong("storedFluidCount"); storedItemCount = data.getLong("storedItemCount"); + getProxy().setIdlePowerUsage(data.getDouble("powerDraw")); } @TileEvent(TileEventType.WORLD_NBT_WRITE) @@ -380,6 +385,7 @@ public class TileSuperStoker extends AENetworkInvTile data.setLong("totalBytes", totalBytes); data.setLong("storedFluidCount", storedFluidCount); data.setLong("storedItemCount", storedItemCount); + data.setDouble("powerDraw", getProxy().getIdlePowerUsage()); return data; } diff --git a/src/main/java/com/glodblock/github/loader/ChannelLoader.java b/src/main/java/com/glodblock/github/loader/ChannelLoader.java index d902bff0..8f212cdb 100644 --- a/src/main/java/com/glodblock/github/loader/ChannelLoader.java +++ b/src/main/java/com/glodblock/github/loader/ChannelLoader.java @@ -1,6 +1,5 @@ package com.glodblock.github.loader; -import com.glodblock.github.network.SPacketSuperStokerUpdate; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.Packet; import net.minecraft.world.World; @@ -26,6 +25,7 @@ import com.glodblock.github.network.SPacketMEFluidInvUpdate; import com.glodblock.github.network.SPacketMEItemInvUpdate; import com.glodblock.github.network.SPacketSetItemAmount; import com.glodblock.github.network.SPacketStringUpdate; +import com.glodblock.github.network.SPacketSuperStokerUpdate; import com.glodblock.github.network.SPacketSwitchBack; import com.glodblock.github.network.wrapper.FCNetworkWrapper; @@ -60,7 +60,11 @@ public class ChannelLoader implements Runnable { netHandler.registerMessage(new CPacketTransferRecipe.Handler(), CPacketTransferRecipe.class, id++, Side.SERVER); netHandler.registerMessage(new CPacketDumpTank.Handler(), CPacketDumpTank.class, id++, Side.SERVER); netHandler.registerMessage(new SPacketFluidUpdate.Handler(), SPacketFluidUpdate.class, id++, Side.CLIENT); - netHandler.registerMessage(new SPacketSuperStokerUpdate.Handler(), SPacketSuperStokerUpdate.class, id++, Side.CLIENT); + netHandler.registerMessage( + new SPacketSuperStokerUpdate.Handler(), + SPacketSuperStokerUpdate.class, + id++, + Side.CLIENT); netHandler .registerMessage(new CPacketPatternValueSet.Handler(), CPacketPatternValueSet.class, id++, Side.SERVER); netHandler.registerMessage(new CPacketValueConfig.Handler(), CPacketValueConfig.class, id++, Side.SERVER); diff --git a/src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java b/src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java index 66422c71..9bbf01f8 100644 --- a/src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java +++ b/src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java @@ -1,33 +1,21 @@ package com.glodblock.github.network; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IAEStack; -import appeng.util.Platform; -import appeng.util.item.AEItemStack; -import appeng.util.item.AEStack; -import com.glodblock.github.client.gui.GuiEssentiaTerminal; -import com.glodblock.github.client.gui.GuiFluidIO; -import com.glodblock.github.client.gui.GuiFluidInterface; -import com.glodblock.github.client.gui.GuiFluidLevelEmitter; -import com.glodblock.github.client.gui.GuiFluidStorageBus; -import com.glodblock.github.client.gui.GuiFluidTerminal; -import com.glodblock.github.client.gui.GuiIngredientBuffer; -import com.glodblock.github.client.gui.GuiLargeIngredientBuffer; -import com.glodblock.github.client.gui.GuiSuperStoker; -import com.glodblock.github.util.Util; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.item.ItemStack; - import java.io.IOException; import java.util.HashMap; import java.util.Map; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; + +import com.glodblock.github.client.gui.GuiSuperStoker; +import com.glodblock.github.util.Util; + +import appeng.api.storage.data.IAEStack; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import io.netty.buffer.ByteBuf; + public class SPacketSuperStokerUpdate implements IMessage { private Map> list; diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index e6e46040..2152a5d8 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -21,6 +21,7 @@ public class NameConst { public static final String BLOCK_OC_PATTERN_EDITOR = "oc_pattern_editor"; public static final String BLOCK_LEVEL_MAINTAINER = "level_maintainer"; public static final String BLOCK_WALRUS = "walrus"; + public static final String BLOCK_SUPER_STOKER = "super_stoker"; public static final String ITEM_FLUID_DROP = "fluid_drop"; public static final String ITEM_FLUID_ENCODED_PATTERN = "fluid_encoded_pattern"; public static final String ITEM_PART_FLUID_STORAGE_MONITOR = "part_fluid_storage_monitor"; diff --git a/src/main/java/com/glodblock/github/util/Util.java b/src/main/java/com/glodblock/github/util/Util.java index 6f8d713e..e89ffab3 100644 --- a/src/main/java/com/glodblock/github/util/Util.java +++ b/src/main/java/com/glodblock/github/util/Util.java @@ -9,9 +9,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; -import appeng.api.storage.data.IAEStack; -import appeng.util.item.AEItemStack; -import appeng.util.item.AEStack; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Items; @@ -51,6 +48,7 @@ import appeng.api.parts.IPart; import appeng.api.storage.IMEInventoryHandler; import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IAEStack; import appeng.api.util.DimensionalCoord; import appeng.api.util.WorldCoord; import appeng.container.AEBaseContainer; @@ -60,6 +58,7 @@ import appeng.tile.networking.TileCableBus; import appeng.tile.networking.TileWireless; import appeng.util.Platform; import appeng.util.item.AEFluidStack; +import appeng.util.item.AEItemStack; import baubles.api.BaublesApi; import codechicken.nei.recipe.StackInfo; import cpw.mods.fml.common.ModContainer; diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index fe0fa11a..1bf918fe 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -75,6 +75,7 @@ tile.oc_pattern_editor.name=OC Pattern Editor tile.level_maintainer.name=ME Level Maintainer tile.fluid_buffer.name=ME Fluid Buffer tile.walrus.name=Walrus +tile.super_stoker.name=Super Stoker tile.fluid_auto_filler.name=ME Fluid Auto Filler tile.certus_quartz_tank.name=Certus Quartz Tank - %s tile.certus_quartz_tank_empty.name=Certus Quartz Tank diff --git a/src/main/resources/assets/ae2fc/textures/blocks/super_stoker.png b/src/main/resources/assets/ae2fc/textures/blocks/super_stoker.png new file mode 100644 index 0000000000000000000000000000000000000000..94ce2f83a6dd0c4c94eba31e3e68dcd09ece9118 GIT binary patch literal 494 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF8ZuQ0pzeUNHMZ9FalX#Kr9VqgPg3v$P5-|0@05M2Ej7GDRfti6}0y_f>P=$e!u>s=(h^ZhQtP3C}O#!k&fC*?06If-C zr3H`$)n#a40Fu4_Y`5axXYpHr%ydr|#}J9j$q52Rg@uJ-DG3Q7Wxn3rhC&QnEumYM zGqp~My=UWGYOdz|=dX;@%g*j-N;t6eLD$1u t57`c_1scNXUCJ1BN+IRVqog$_7#N&gjn>F2{W}D*-qY33Wt~$(695)FfSCXQ literal 0 HcmV?d00001 From c07455c5c11ce6097d3551fb4d2dfed0ec5d5ce7 Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Fri, 11 Apr 2025 17:21:40 +0300 Subject: [PATCH 3/7] less often sync gui data change item return logic drop cell on break fix gui not display last fluid slot fix not all fluids cell provide capacity --- .../github/client/gui/GuiSuperStoker.java | 2 +- .../gui/container/ContainerSuperStoker.java | 53 ++++++++++++------- .../github/common/tile/TileSuperStoker.java | 37 ++++++------- 3 files changed, 54 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java b/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java index 7be7a2e6..e50c4796 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java @@ -75,7 +75,7 @@ public class GuiSuperStoker extends AEBaseGui { int slotInt = slotIn.slotNumber; if (itemstack != null) { String s = "0%"; - if (slotInt > 0 && slotInt < 9) { + if (slotInt > 0 && slotInt < 10) { IAEStack aeStack = list.get(slotInt - 1); if (aeStack != null) s = (int) (((float) aeStack.getStackSize() / ItemFluidPacket.getFluidAmount(itemstack)) * 100) diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java index feacf186..1702302e 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java @@ -6,12 +6,13 @@ import java.util.Map; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import com.glodblock.github.FluidCraft; -import com.glodblock.github.common.item.ItemBasicFluidStorageCell; +import com.glodblock.github.common.item.FCBaseItemCell; import com.glodblock.github.common.tile.TileSuperStoker; import com.glodblock.github.inventory.slot.OptionalFluidSlotFake; import com.glodblock.github.network.SPacketSuperStokerUpdate; @@ -26,9 +27,9 @@ import appeng.items.storage.ItemBasicStorageCell; public class ContainerSuperStoker extends AEBaseContainer implements IOptionalSlotHost { private final TileSuperStoker tile; - private IInventory configFluids; - private IInventory configItems; - private Map> list; + private final IInventory configFluids; + private final IInventory configItems; + private int lastUpdated = 0; public ContainerSuperStoker(InventoryPlayer ipl, TileSuperStoker tile) { super(ipl, tile); @@ -76,21 +77,35 @@ public class ContainerSuperStoker extends AEBaseContainer implements IOptionalSl return true; } + @Override + public void addCraftingToCrafters(ICrafting p_75132_1_) { + super.addCraftingToCrafters(p_75132_1_); + lastUpdated = 24; + } + @Override public void detectAndSendChanges() { super.detectAndSendChanges(); - Map> tmp = new HashMap<>(); - for (int i = 0; i < tile.getInternalFluid().getSlots(); i++) { - tmp.put(i, tile.getInternalFluid().getFluidInSlot(i)); - } - for (int i = 0; i < tile.getInternalInventory().getSizeInventory(); i++) { - tmp.put(i + 100, tile.getInternalAEInventory().getAEStackInSlot(i)); - } - for (final Object g : this.crafters) { - if (g instanceof EntityPlayer) { - FluidCraft.proxy.netHandler.sendTo(new SPacketSuperStokerUpdate(tmp), (EntityPlayerMP) g); + + if (lastUpdated > 20) { + lastUpdated = 0; + Map> tmp = new HashMap<>(); + + for (int i = 0; i < tile.getInternalFluid().getSlots(); i++) { + tmp.put(i, tile.getInternalFluid().getFluidInSlot(i)); + } + + for (int i = 0; i < tile.getInternalInventory().getSizeInventory(); i++) { + tmp.put(i + 100, tile.getInternalAEInventory().getAEStackInSlot(i)); + } + + for (final Object g : this.crafters) { + if (g instanceof EntityPlayer) { + FluidCraft.proxy.netHandler.sendTo(new SPacketSuperStokerUpdate(tmp), (EntityPlayerMP) g); + } } } + lastUpdated++; } private boolean isConfigurated() { @@ -111,18 +126,18 @@ public class ContainerSuperStoker extends AEBaseContainer implements IOptionalSl public boolean isValidForSlot(Slot s, ItemStack is) { if (s.slotNumber == 0 && s.getHasStack() && isConfigurated()) { long currentBytes = 0; - long newBytes = 0; + long newBytes = -1; if (s.getStack().getItem() instanceof ItemBasicStorageCell ibsc) { currentBytes = ibsc.getBytesLong(is); - } else if (s.getStack().getItem() instanceof ItemBasicFluidStorageCell ibfsc) { - currentBytes = ibfsc.getBytes(is); + } else if (s.getStack().getItem() instanceof FCBaseItemCell fcbic) { + currentBytes = fcbic.getBytes(is); } if (is.getItem() instanceof ItemBasicStorageCell ibsc) { newBytes = ibsc.getBytesLong(is); - } else if (is.getItem() instanceof ItemBasicFluidStorageCell ibfsc) { - newBytes = ibfsc.getBytes(is); + } else if (is.getItem() instanceof FCBaseItemCell fcbic) { + newBytes = fcbic.getBytes(is); } if (currentBytes > newBytes) { diff --git a/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java b/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java index 61c0ccd7..d1f8b41b 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java +++ b/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java @@ -15,7 +15,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; -import com.glodblock.github.common.item.ItemBasicFluidStorageCell; +import com.glodblock.github.common.item.FCBaseItemCell; import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.inventory.AEFluidInventory; import com.glodblock.github.inventory.IAEFluidInventory; @@ -99,7 +99,7 @@ public class TileSuperStoker extends AENetworkInvTile if (configItem != null) { IAEItemStack is = configItem.copy(); if (invItem == null) requestItem(is, i); - else if (invItem.getItem() == is.getItem()) { + else if (invItem.equals(is)) { if (invItem.getStackSize() < is.getStackSize() / 2) { is.setStackSize(is.getStackSize() - invItem.getStackSize()); requestItem(is, i); @@ -125,7 +125,7 @@ public class TileSuperStoker extends AENetworkInvTile .injectItems(ias, Actionable.MODULATE, this.source); if (notInserted != null) { invFluids.fill(index, notInserted, true); - storedFluidCount += ias.getStackSize(); + storedFluidCount += notInserted.getStackSize(); } } catch (final GridAccessException ignored) {} } @@ -146,22 +146,24 @@ public class TileSuperStoker extends AENetworkInvTile private void returnItem(int index, long amount) { try { - IAEItemStack ias = invItems.getAEStackInSlot(index); + IAEItemStack ais = invItems.getAEStackInSlot(index); + long originalSize = ais.getStackSize(); if (amount != Long.MAX_VALUE) { - ias.decStackSize(amount); - ias = ias.copy(); - ias.setStackSize(amount); + ais.decStackSize(amount); + ais = ais.copy(); + ais.setStackSize(amount); } else { - amount = ias.getStackSize(); + amount = ais.getStackSize(); invItems.setInventorySlotContents(index, null); } storedItemCount -= amount; IAEItemStack notInserted = this.getProxy().getStorage().getItemInventory() - .injectItems(ias, Actionable.MODULATE, this.source); + .injectItems(ais, Actionable.MODULATE, this.source); if (notInserted != null) { + long notInsertedAmount = notInserted.getStackSize(); invItems.setInventorySlotContents(index, notInserted.getItemStack()); - invItems.getAEStackInSlot(index).setStackSize(notInserted.getStackSize()); - storedItemCount += notInserted.getStackSize(); + invItems.getAEStackInSlot(index).setStackSize(originalSize - (amount - notInsertedAmount)); + storedItemCount += notInsertedAmount; } } catch (final GridAccessException ignored) {} } @@ -253,8 +255,8 @@ public class TileSuperStoker extends AENetworkInvTile if (inv == cell && added != null) { if (added.getItem() instanceof ItemBasicStorageCell ibsc) { totalBytes = ibsc.getBytesLong(added); - } else if (added.getItem() instanceof ItemBasicFluidStorageCell ibfsc) { - totalBytes = ibfsc.getBytes(added); + } else if (added.getItem() instanceof FCBaseItemCell fcbic) { + totalBytes = fcbic.getBytes(added); } getProxy().setIdlePowerUsage(Math.sqrt(Math.pow(totalBytes, 0.576D))); } @@ -267,9 +269,7 @@ public class TileSuperStoker extends AENetworkInvTile if (inv == invItems && invItems.getAEStackInSlot(slot) != null) invItems.getAEStackInSlot(slot).decStackSize(removed.stackSize); } - case markDirty -> { - - } + case markDirty -> {} } try { @@ -284,19 +284,20 @@ public class TileSuperStoker extends AENetworkInvTile public void fullRefund() { for (int i = 0; i < 9; i++) { if (invFluids.getFluidStackInSlot(i) != null) { - returnFluid(i, Integer.MAX_VALUE); + returnFluid(i, Long.MAX_VALUE); } } for (int i = 0; i < 63; i++) { if (invItems.getAEStackInSlot(i) != null) { - returnItem(i, Integer.MAX_VALUE); + returnItem(i, Long.MAX_VALUE); } } } @Override public void getDrops(World w, int x, int y, int z, List drops) { + if (cell.getStackInSlot(0) != null) drops.add(cell.getStackInSlot(0)); for (int i = 0; i < 9; i++) { ItemStack ifp = ItemFluidPacket.newStack(invFluids.getFluidStackInSlot(i)); if (ifp != null) drops.add(ifp); From c1c7a6347527242edc94c46c0804f86e4abfd309 Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Mon, 14 Apr 2025 01:44:26 +0300 Subject: [PATCH 4/7] increase precision --- .../github/common/tile/TileSuperStoker.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java b/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java index d1f8b41b..57187a5e 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java +++ b/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java @@ -78,11 +78,13 @@ public class TileSuperStoker extends AENetworkInvTile IAEFluidStack fs = AEFluidStack.create(ItemFluidPacket.getFluidStack(configFluid)); if (invFluid == null) requestFluid(fs, i); else if (invFluid.equals(fs)) { - if (invFluid.getStackSize() < fs.getStackSize() / 2) { - fs.setStackSize(fs.getStackSize() - invFluid.getStackSize()); + long invSize = invFluid.getStackSize(); + long confSize = fs.getStackSize(); + if (invSize < confSize / 2f) { + fs.setStackSize(confSize - invSize); requestFluid(fs, i); - } else if (invFluid.getStackSize() > fs.getStackSize()) { - returnFluid(i, invFluid.getStackSize() - fs.getStackSize()); + } else if (invSize > confSize) { + returnFluid(i, invSize - confSize); } } else { returnFluid(i, Long.MAX_VALUE); @@ -100,11 +102,13 @@ public class TileSuperStoker extends AENetworkInvTile IAEItemStack is = configItem.copy(); if (invItem == null) requestItem(is, i); else if (invItem.equals(is)) { - if (invItem.getStackSize() < is.getStackSize() / 2) { - is.setStackSize(is.getStackSize() - invItem.getStackSize()); + long invSize = invItem.getStackSize(); + long confSize = is.getStackSize(); + if (invSize < confSize / 2f) { + is.setStackSize(confSize - invSize); requestItem(is, i); - } else if (invItem.getStackSize() > is.getStackSize()) { - returnItem(i, invItem.getStackSize() - is.getStackSize()); + } else if (invSize > confSize) { + returnItem(i, invSize - confSize); } } else { returnItem(i, Long.MAX_VALUE); From e81cbb4012bede9d0837e446d307fe3fa6af5261 Mon Sep 17 00:00:00 2001 From: Maya <10861407+serenibyss@users.noreply.github.com> Date: Tue, 6 May 2025 17:55:04 -0500 Subject: [PATCH 5/7] spotless --- src/main/java/com/glodblock/github/inventory/gui/GuiType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java index ce25a151..61e4baca 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java +++ b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java @@ -559,7 +559,7 @@ public enum GuiType { return new GuiPatternItemRenamer(player.inventory, inv); } }), - + GUI_SUPER_STOKER(new TileGuiFactory<>(TileSuperStoker.class) { @Override From 1049cd90afa3fabcf4ebb4e44b9f072d95b95920 Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Tue, 20 May 2025 06:50:45 +0300 Subject: [PATCH 6/7] rebranding --- .../client/gui/GuiPatternValueAmount.java | 8 +++---- ...ker.java => GuiSuperStockReplenisher.java} | 18 +++++++------- ...va => ContainerSuperStockReplenisher.java} | 14 +++++------ ...r.java => BlockSuperStockReplenisher.java} | 22 +++++++++--------- ...er.java => TileSuperStockReplenisher.java} | 8 +++---- .../github/inventory/gui/GuiType.java | 16 ++++++------- .../github/loader/ChannelLoader.java | 6 ++--- .../github/loader/ItemAndBlockHolder.java | 4 ++-- .../network/CPacketPatternValueSet.java | 4 ++-- ...> SPacketSuperStockReplenisherUpdate.java} | 14 +++++------ .../com/glodblock/github/util/NameConst.java | 2 +- .../resources/assets/ae2fc/lang/en_US.lang | 2 +- ...stoker.png => super_stock_replenisher.png} | Bin ...erStoker.png => superStockReplenisher.png} | Bin 14 files changed, 59 insertions(+), 59 deletions(-) rename src/main/java/com/glodblock/github/client/gui/{GuiSuperStoker.java => GuiSuperStockReplenisher.java} (89%) rename src/main/java/com/glodblock/github/client/gui/container/{ContainerSuperStoker.java => ContainerSuperStockReplenisher.java} (90%) rename src/main/java/com/glodblock/github/common/block/{BlockSuperStoker.java => BlockSuperStockReplenisher.java} (69%) rename src/main/java/com/glodblock/github/common/tile/{TileSuperStoker.java => TileSuperStockReplenisher.java} (98%) rename src/main/java/com/glodblock/github/network/{SPacketSuperStokerUpdate.java => SPacketSuperStockReplenisherUpdate.java} (73%) rename src/main/resources/assets/ae2fc/textures/blocks/{super_stoker.png => super_stock_replenisher.png} (100%) rename src/main/resources/assets/ae2fc/textures/gui/{superStoker.png => superStockReplenisher.png} (100%) diff --git a/src/main/java/com/glodblock/github/client/gui/GuiPatternValueAmount.java b/src/main/java/com/glodblock/github/client/gui/GuiPatternValueAmount.java index 77bb6a5d..b73d099d 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiPatternValueAmount.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiPatternValueAmount.java @@ -9,7 +9,7 @@ import com.glodblock.github.client.gui.container.ContainerPatternValueAmount; import com.glodblock.github.common.item.ItemWirelessUltraTerminal; import com.glodblock.github.common.parts.PartFluidPatternTerminal; import com.glodblock.github.common.parts.PartFluidPatternTerminalEx; -import com.glodblock.github.common.tile.TileSuperStoker; +import com.glodblock.github.common.tile.TileSuperStockReplenisher; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.item.IWirelessTerminal; import com.glodblock.github.inventory.item.WirelessPatternTerminalInventory; @@ -77,9 +77,9 @@ public class GuiPatternValueAmount extends FCGuiAmount { } else if (target instanceof WirelessPatternTerminalInventory) { this.myIcon = ItemAndBlockHolder.WIRELESS_PATTERN_TERM.stack(); this.originalGui = GuiType.WIRELESS_FLUID_PATTERN_TERMINAL; - } else if (target instanceof TileSuperStoker) { - this.myIcon = ItemAndBlockHolder.SUPER_STOKER.stack(); - this.originalGui = GuiType.GUI_SUPER_STOKER; + } else if (target instanceof TileSuperStockReplenisher) { + this.myIcon = ItemAndBlockHolder.SUPER_STOCK_RERPLENISHER.stack(); + this.originalGui = GuiType.GUI_SUPER_STOCK_REPLENISHER; } } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java b/src/main/java/com/glodblock/github/client/gui/GuiSuperStockReplenisher.java similarity index 89% rename from src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java rename to src/main/java/com/glodblock/github/client/gui/GuiSuperStockReplenisher.java index e50c4796..a67df7cc 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiSuperStoker.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiSuperStockReplenisher.java @@ -11,9 +11,9 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import com.glodblock.github.FluidCraft; -import com.glodblock.github.client.gui.container.ContainerSuperStoker; +import com.glodblock.github.client.gui.container.ContainerSuperStockReplenisher; import com.glodblock.github.common.item.ItemFluidPacket; -import com.glodblock.github.common.tile.TileSuperStoker; +import com.glodblock.github.common.tile.TileSuperStockReplenisher; import com.glodblock.github.network.CPacketInventoryAction; import appeng.api.storage.data.IAEItemStack; @@ -25,17 +25,17 @@ import appeng.core.localization.GuiText; import appeng.helpers.InventoryAction; import appeng.util.item.AEItemStack; -public class GuiSuperStoker extends AEBaseGui { +public class GuiSuperStockReplenisher extends AEBaseGui { - private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/superStoker.png"); - private final ContainerSuperStoker cont; - private final TileSuperStoker tile; + private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/superStockReplenisher.png"); + private final ContainerSuperStockReplenisher cont; + private final TileSuperStockReplenisher tile; private Map> list = new HashMap<>(); - public GuiSuperStoker(InventoryPlayer ipl, TileSuperStoker tile) { - super(new ContainerSuperStoker(ipl, tile)); + public GuiSuperStockReplenisher(InventoryPlayer ipl, TileSuperStockReplenisher tile) { + super(new ContainerSuperStockReplenisher(ipl, tile)); this.tile = tile; - this.cont = (ContainerSuperStoker) inventorySlots; + this.cont = (ContainerSuperStockReplenisher) inventorySlots; this.ySize = 251; this.xSize = 216; } diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStockReplenisher.java similarity index 90% rename from src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java rename to src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStockReplenisher.java index 1702302e..b05dcd9d 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStoker.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerSuperStockReplenisher.java @@ -13,9 +13,9 @@ import net.minecraft.item.ItemStack; import com.glodblock.github.FluidCraft; import com.glodblock.github.common.item.FCBaseItemCell; -import com.glodblock.github.common.tile.TileSuperStoker; +import com.glodblock.github.common.tile.TileSuperStockReplenisher; import com.glodblock.github.inventory.slot.OptionalFluidSlotFake; -import com.glodblock.github.network.SPacketSuperStokerUpdate; +import com.glodblock.github.network.SPacketSuperStockReplenisherUpdate; import appeng.api.storage.data.IAEStack; import appeng.container.AEBaseContainer; @@ -24,14 +24,14 @@ import appeng.container.slot.SlotPatternOutputs; import appeng.container.slot.SlotRestrictedInput; import appeng.items.storage.ItemBasicStorageCell; -public class ContainerSuperStoker extends AEBaseContainer implements IOptionalSlotHost { +public class ContainerSuperStockReplenisher extends AEBaseContainer implements IOptionalSlotHost { - private final TileSuperStoker tile; + private final TileSuperStockReplenisher tile; private final IInventory configFluids; private final IInventory configItems; private int lastUpdated = 0; - public ContainerSuperStoker(InventoryPlayer ipl, TileSuperStoker tile) { + public ContainerSuperStockReplenisher(InventoryPlayer ipl, TileSuperStockReplenisher tile) { super(ipl, tile); this.tile = tile; configFluids = tile.getConfigFluid(); @@ -101,7 +101,7 @@ public class ContainerSuperStoker extends AEBaseContainer implements IOptionalSl for (final Object g : this.crafters) { if (g instanceof EntityPlayer) { - FluidCraft.proxy.netHandler.sendTo(new SPacketSuperStokerUpdate(tmp), (EntityPlayerMP) g); + FluidCraft.proxy.netHandler.sendTo(new SPacketSuperStockReplenisherUpdate(tmp), (EntityPlayerMP) g); } } } @@ -147,7 +147,7 @@ public class ContainerSuperStoker extends AEBaseContainer implements IOptionalSl return super.isValidForSlot(s, is); } - public TileSuperStoker getTile() { + public TileSuperStockReplenisher getTile() { return tile; } } diff --git a/src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java b/src/main/java/com/glodblock/github/common/block/BlockSuperStockReplenisher.java similarity index 69% rename from src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java rename to src/main/java/com/glodblock/github/common/block/BlockSuperStockReplenisher.java index 6bdb6ea0..a93be5fc 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockSuperStoker.java +++ b/src/main/java/com/glodblock/github/common/block/BlockSuperStockReplenisher.java @@ -7,7 +7,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import com.glodblock.github.common.tabs.FluidCraftingTabs; -import com.glodblock.github.common.tile.TileSuperStoker; +import com.glodblock.github.common.tile.TileSuperStockReplenisher; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.util.BlockPos; @@ -16,11 +16,11 @@ import com.glodblock.github.util.NameConst; import appeng.block.AEBaseItemBlock; import cpw.mods.fml.common.registry.GameRegistry; -public class BlockSuperStoker extends FCBaseBlock { +public class BlockSuperStockReplenisher extends FCBaseBlock { - public BlockSuperStoker() { - super(Material.web, NameConst.BLOCK_SUPER_STOKER); - setTileEntity(TileSuperStoker.class); + public BlockSuperStockReplenisher() { + super(Material.web, NameConst.BLOCK_SUPER_STOCK_REPLENISHER); + setTileEntity(TileSuperStockReplenisher.class); setOpaque(false); setFullBlock(false); this.lightOpacity = 4; @@ -32,7 +32,7 @@ public class BlockSuperStoker extends FCBaseBlock { if (player.isSneaking()) { return false; } - TileSuperStoker tile = getTileEntity(world, x, y, z); + TileSuperStockReplenisher tile = getTileEntity(world, x, y, z); if (tile != null) { if (!world.isRemote) { InventoryHandler.openGui( @@ -40,7 +40,7 @@ public class BlockSuperStoker extends FCBaseBlock { world, new BlockPos(x, y, z), ForgeDirection.getOrientation(facing), - GuiType.GUI_SUPER_STOKER); + GuiType.GUI_SUPER_STOCK_REPLENISHER); } return true; } @@ -49,7 +49,7 @@ public class BlockSuperStoker extends FCBaseBlock { @Override public void breakBlock(World w, int x, int y, int z, Block a, int b) { - final TileSuperStoker tss = this.getTileEntity(w, x, y, z); + final TileSuperStockReplenisher tss = this.getTileEntity(w, x, y, z); if (tss != null) { tss.fullRefund(); } @@ -57,9 +57,9 @@ public class BlockSuperStoker extends FCBaseBlock { } @Override - public BlockSuperStoker register() { - GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_SUPER_STOKER); - GameRegistry.registerTileEntity(TileSuperStoker.class, NameConst.BLOCK_SUPER_STOKER); + public BlockSuperStockReplenisher register() { + GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_SUPER_STOCK_REPLENISHER); + GameRegistry.registerTileEntity(TileSuperStockReplenisher.class, NameConst.BLOCK_SUPER_STOCK_REPLENISHER); setCreativeTab(FluidCraftingTabs.INSTANCE); return this; } diff --git a/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java b/src/main/java/com/glodblock/github/common/tile/TileSuperStockReplenisher.java similarity index 98% rename from src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java rename to src/main/java/com/glodblock/github/common/tile/TileSuperStockReplenisher.java index 57187a5e..191e80cd 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileSuperStoker.java +++ b/src/main/java/com/glodblock/github/common/tile/TileSuperStockReplenisher.java @@ -50,7 +50,7 @@ import appeng.tile.inventory.InvOperation; import appeng.util.item.AEFluidStack; import io.netty.buffer.ByteBuf; -public class TileSuperStoker extends AENetworkInvTile +public class TileSuperStockReplenisher extends AENetworkInvTile implements IAEFluidInventory, IFluidHandler, IPowerChannelState, IGridTickable { private final AppEngInternalInventory cell = new AppEngInternalInventory(this, 1); @@ -64,7 +64,7 @@ public class TileSuperStoker extends AENetworkInvTile private long storedFluidCount; private long storedItemCount; - public TileSuperStoker() { + public TileSuperStockReplenisher() { getProxy().setIdlePowerUsage(4D); getProxy().setFlags(GridFlags.REQUIRE_CHANNEL); this.source = new MachineSource(this); @@ -356,14 +356,14 @@ public class TileSuperStoker extends AENetworkInvTile } @TileEvent(TileEventType.NETWORK_READ) - public boolean readFromStream_TileSuperStoker(final ByteBuf data) { + public boolean readFromStream_TileSuperStockReplenisher(final ByteBuf data) { final boolean oldPower = isPowered; isPowered = data.readBoolean(); return isPowered != oldPower; } @TileEvent(TileEventType.NETWORK_WRITE) - public void writeToStream_TileSuperStoker(final ByteBuf data) { + public void writeToStream_TileSuperStockReplenisher(final ByteBuf data) { data.writeBoolean(isActive()); } diff --git a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java index 61e4baca..efed73ef 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java +++ b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java @@ -39,7 +39,7 @@ import com.glodblock.github.client.gui.GuiPatternItemRenamer; import com.glodblock.github.client.gui.GuiPatternMulti; import com.glodblock.github.client.gui.GuiPatternValueAmount; import com.glodblock.github.client.gui.GuiRenamer; -import com.glodblock.github.client.gui.GuiSuperStoker; +import com.glodblock.github.client.gui.GuiSuperStockReplenisher; import com.glodblock.github.client.gui.container.ContainerCraftingWireless; import com.glodblock.github.client.gui.container.ContainerDualInterface; import com.glodblock.github.client.gui.container.ContainerEssentiaMonitor; @@ -68,7 +68,7 @@ import com.glodblock.github.client.gui.container.ContainerOCPatternEditor; import com.glodblock.github.client.gui.container.ContainerPatternMulti; import com.glodblock.github.client.gui.container.ContainerPatternValueAmount; import com.glodblock.github.client.gui.container.ContainerRenamer; -import com.glodblock.github.client.gui.container.ContainerSuperStoker; +import com.glodblock.github.client.gui.container.ContainerSuperStockReplenisher; import com.glodblock.github.common.parts.PartFluidLevelEmitter; import com.glodblock.github.common.parts.PartFluidStorageBus; import com.glodblock.github.common.parts.base.FCPart; @@ -80,7 +80,7 @@ import com.glodblock.github.common.tile.TileIngredientBuffer; import com.glodblock.github.common.tile.TileLargeIngredientBuffer; import com.glodblock.github.common.tile.TileLevelMaintainer; import com.glodblock.github.common.tile.TileOCPatternEditor; -import com.glodblock.github.common.tile.TileSuperStoker; +import com.glodblock.github.common.tile.TileSuperStockReplenisher; import com.glodblock.github.inventory.IDualHost; import com.glodblock.github.inventory.item.IFluidPortableCell; import com.glodblock.github.inventory.item.IWirelessTerminal; @@ -560,16 +560,16 @@ public enum GuiType { } }), - GUI_SUPER_STOKER(new TileGuiFactory<>(TileSuperStoker.class) { + GUI_SUPER_STOCK_REPLENISHER(new TileGuiFactory<>(TileSuperStockReplenisher.class) { @Override - protected Object createServerGui(EntityPlayer player, TileSuperStoker inv) { - return new ContainerSuperStoker(player.inventory, inv); + protected Object createServerGui(EntityPlayer player, TileSuperStockReplenisher inv) { + return new ContainerSuperStockReplenisher(player.inventory, inv); } @Override - protected Object createClientGui(EntityPlayer player, TileSuperStoker inv) { - return new GuiSuperStoker(player.inventory, inv); + protected Object createClientGui(EntityPlayer player, TileSuperStockReplenisher inv) { + return new GuiSuperStockReplenisher(player.inventory, inv); } }); diff --git a/src/main/java/com/glodblock/github/loader/ChannelLoader.java b/src/main/java/com/glodblock/github/loader/ChannelLoader.java index 3dda0137..b2d02c66 100644 --- a/src/main/java/com/glodblock/github/loader/ChannelLoader.java +++ b/src/main/java/com/glodblock/github/loader/ChannelLoader.java @@ -26,7 +26,7 @@ import com.glodblock.github.network.SPacketMEItemInvUpdate; import com.glodblock.github.network.SPacketPatternItemRenamer; import com.glodblock.github.network.SPacketSetItemAmount; import com.glodblock.github.network.SPacketStringUpdate; -import com.glodblock.github.network.SPacketSuperStokerUpdate; +import com.glodblock.github.network.SPacketSuperStockReplenisherUpdate; import com.glodblock.github.network.SPacketSwitchBack; import com.glodblock.github.network.wrapper.FCNetworkWrapper; @@ -62,8 +62,8 @@ public class ChannelLoader implements Runnable { netHandler.registerMessage(new CPacketDumpTank.Handler(), CPacketDumpTank.class, id++, Side.SERVER); netHandler.registerMessage(new SPacketFluidUpdate.Handler(), SPacketFluidUpdate.class, id++, Side.CLIENT); netHandler.registerMessage( - new SPacketSuperStokerUpdate.Handler(), - SPacketSuperStokerUpdate.class, + new SPacketSuperStockReplenisherUpdate.Handler(), + SPacketSuperStockReplenisherUpdate.class, id++, Side.CLIENT); netHandler diff --git a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java index 0f728b9e..98c9054f 100644 --- a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java +++ b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java @@ -14,7 +14,7 @@ import com.glodblock.github.common.block.BlockIngredientBuffer; import com.glodblock.github.common.block.BlockLargeIngredientBuffer; import com.glodblock.github.common.block.BlockLevelMaintainer; import com.glodblock.github.common.block.BlockOCPatternEditor; -import com.glodblock.github.common.block.BlockSuperStoker; +import com.glodblock.github.common.block.BlockSuperStockReplenisher; import com.glodblock.github.common.block.BlockWalrus; import com.glodblock.github.common.item.ItemBasicFluidStorageCell; import com.glodblock.github.common.item.ItemBasicFluidStoragePart; @@ -66,7 +66,7 @@ public class ItemAndBlockHolder { public static BlockLargeIngredientBuffer LARGE_BUFFER = new BlockLargeIngredientBuffer().register(); public static BlockOCPatternEditor OC_EDITOR = new BlockOCPatternEditor().register(); public static BlockWalrus WALRUS = new BlockWalrus().register(); - public static BlockSuperStoker SUPER_STOKER = new BlockSuperStoker().register(); + public static BlockSuperStockReplenisher SUPER_STOCK_RERPLENISHER = new BlockSuperStockReplenisher().register(); public static ItemFluidDrop DROP = new ItemFluidDrop().register(); public static ItemFluidEncodedPattern PATTERN = new ItemFluidEncodedPattern().register(); public static ItemPartFluidTerminal FLUID_TERM = new ItemPartFluidTerminal().register(); diff --git a/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java b/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java index 2a95038b..e17557a9 100644 --- a/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java +++ b/src/main/java/com/glodblock/github/network/CPacketPatternValueSet.java @@ -9,7 +9,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; import com.glodblock.github.client.gui.container.ContainerPatternValueAmount; -import com.glodblock.github.client.gui.container.ContainerSuperStoker; +import com.glodblock.github.client.gui.container.ContainerSuperStockReplenisher; import com.glodblock.github.client.gui.container.base.FCContainerEncodeTerminal; import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.inventory.InventoryHandler; @@ -94,7 +94,7 @@ public class CPacketPatternValueSet implements IMessage { message.originGui); } if (player.openContainer instanceof FCContainerEncodeTerminal - || player.openContainer instanceof ContainerSuperStoker) { + || player.openContainer instanceof ContainerSuperStockReplenisher) { Slot slot = player.openContainer.getSlot(message.valueIndex); if (slot instanceof SlotFake) { ItemStack stack = slot.getStack().copy(); diff --git a/src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java b/src/main/java/com/glodblock/github/network/SPacketSuperStockReplenisherUpdate.java similarity index 73% rename from src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java rename to src/main/java/com/glodblock/github/network/SPacketSuperStockReplenisherUpdate.java index 9bbf01f8..e039fb70 100644 --- a/src/main/java/com/glodblock/github/network/SPacketSuperStokerUpdate.java +++ b/src/main/java/com/glodblock/github/network/SPacketSuperStockReplenisherUpdate.java @@ -7,7 +7,7 @@ import java.util.Map; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; -import com.glodblock.github.client.gui.GuiSuperStoker; +import com.glodblock.github.client.gui.GuiSuperStockReplenisher; import com.glodblock.github.util.Util; import appeng.api.storage.data.IAEStack; @@ -16,13 +16,13 @@ import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import io.netty.buffer.ByteBuf; -public class SPacketSuperStokerUpdate implements IMessage { +public class SPacketSuperStockReplenisherUpdate implements IMessage { private Map> list; - public SPacketSuperStokerUpdate() {} + public SPacketSuperStockReplenisherUpdate() {} - public SPacketSuperStokerUpdate(Map> data) { + public SPacketSuperStockReplenisherUpdate(Map> data) { this.list = data; } @@ -45,12 +45,12 @@ public class SPacketSuperStokerUpdate implements IMessage { } } - public static class Handler implements IMessageHandler { + public static class Handler implements IMessageHandler { @Override - public IMessage onMessage(SPacketSuperStokerUpdate message, MessageContext ctx) { + public IMessage onMessage(SPacketSuperStockReplenisherUpdate message, MessageContext ctx) { final GuiScreen gs = Minecraft.getMinecraft().currentScreen; - if (gs instanceof GuiSuperStoker gss) { + if (gs instanceof GuiSuperStockReplenisher gss) { gss.update(message.list); } return null; diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index 2152a5d8..422b59bf 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -21,7 +21,7 @@ public class NameConst { public static final String BLOCK_OC_PATTERN_EDITOR = "oc_pattern_editor"; public static final String BLOCK_LEVEL_MAINTAINER = "level_maintainer"; public static final String BLOCK_WALRUS = "walrus"; - public static final String BLOCK_SUPER_STOKER = "super_stoker"; + public static final String BLOCK_SUPER_STOCK_REPLENISHER = "super_stock_replenisher"; public static final String ITEM_FLUID_DROP = "fluid_drop"; public static final String ITEM_FLUID_ENCODED_PATTERN = "fluid_encoded_pattern"; public static final String ITEM_PART_FLUID_STORAGE_MONITOR = "part_fluid_storage_monitor"; diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index 1bf918fe..80aec562 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -75,7 +75,7 @@ tile.oc_pattern_editor.name=OC Pattern Editor tile.level_maintainer.name=ME Level Maintainer tile.fluid_buffer.name=ME Fluid Buffer tile.walrus.name=Walrus -tile.super_stoker.name=Super Stoker +tile.super_stock_replenisher.name=Super Stock Replenisher tile.fluid_auto_filler.name=ME Fluid Auto Filler tile.certus_quartz_tank.name=Certus Quartz Tank - %s tile.certus_quartz_tank_empty.name=Certus Quartz Tank diff --git a/src/main/resources/assets/ae2fc/textures/blocks/super_stoker.png b/src/main/resources/assets/ae2fc/textures/blocks/super_stock_replenisher.png similarity index 100% rename from src/main/resources/assets/ae2fc/textures/blocks/super_stoker.png rename to src/main/resources/assets/ae2fc/textures/blocks/super_stock_replenisher.png diff --git a/src/main/resources/assets/ae2fc/textures/gui/superStoker.png b/src/main/resources/assets/ae2fc/textures/gui/superStockReplenisher.png similarity index 100% rename from src/main/resources/assets/ae2fc/textures/gui/superStoker.png rename to src/main/resources/assets/ae2fc/textures/gui/superStockReplenisher.png From 708fe0e731826e920848f0944c51396db0346e3f Mon Sep 17 00:00:00 2001 From: lordIcocain Date: Sun, 8 Jun 2025 13:07:50 +0300 Subject: [PATCH 7/7] new texture --- .../textures/blocks/super_stock_replenisher.png | Bin 494 -> 581 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/ae2fc/textures/blocks/super_stock_replenisher.png b/src/main/resources/assets/ae2fc/textures/blocks/super_stock_replenisher.png index 94ce2f83a6dd0c4c94eba31e3e68dcd09ece9118..378a9d8bc90550487a638329ecf66d5475cd460f 100644 GIT binary patch delta 290 zcmV+-0p0%Y1H}Z87zqdl0000V^Z#LyAs~@=`+xLFL_t(IPoCCLGuY7@k6>?uUcu5R-^i@%3WmrlcG+RR$3Q|wDfOTd zXu*82;6hQtqvE}aWi=j>(~h}N1oR>USTJjJ_)tV5J(6JoC?c`LfCW*n%ZFbQJ1m(x zuYUOj1^9%xE?BU@$HxaKTF=1nm%;ImQO5t|uK)G( znI`<}I{jz$|Nj^NgF(UM7e%wrPPF@1lkVx_7$R{wIYGdvu&^*JB_ScC%-5USP>6x6 zC3MSjrq(I3m#x#Mv`QEWAJqKb6Mw<&;$VK>{avt