From 77ccfb5606230c11beeff748b8dafcc81af891db Mon Sep 17 00:00:00 2001 From: asdflj <854865755@qq.com> Date: Mon, 12 Dec 2022 15:40:59 +0800 Subject: [PATCH 1/3] add Fluid Buffer --- .../gui/GuiBaseFluidPatternTerminal.java | 35 ++- .../gui/GuiBaseFluidPatternTerminalEx.java | 34 +-- .../client/render/RenderBlockFluidBuffer.java | 69 +++++ .../github/common/block/BlockFluidBuffer.java | 73 +++++ .../common/item/ItemFluidEncodedPattern.java | 16 -- .../parts/PartFluidPatternTerminal.java | 2 +- .../parts/PartFluidPatternTerminalEx.java | 2 +- .../github/common/tile/TileFluidBuffer.java | 250 ++++++++++++++++++ .../github/crossmod/waila/Tooltip.java | 2 +- .../github/loader/ItemAndBlockHolder.java | 1 + .../glodblock/github/loader/RecipeLoader.java | 1 + .../github/util/ModAndClassUtil.java | 2 +- .../com/glodblock/github/util/NameConst.java | 1 + .../resources/assets/ae2fc/lang/en_US.lang | 1 + .../resources/assets/ae2fc/lang/zh_CN.lang | 3 +- .../ae2fc/textures/blocks/fluid_buffer.png | Bin 0 -> 376 bytes 16 files changed, 436 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/glodblock/github/client/render/RenderBlockFluidBuffer.java create mode 100644 src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java create mode 100644 src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java create mode 100644 src/main/resources/assets/ae2fc/textures/blocks/fluid_buffer.png diff --git a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java index 0b5b939f..f1dbe6ef 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminal.java @@ -1,8 +1,6 @@ package com.glodblock.github.client.gui; -import appeng.api.config.ActionItems; -import appeng.api.config.ItemSubstitution; -import appeng.api.config.Settings; +import appeng.api.config.*; import appeng.api.storage.ITerminalHost; import appeng.client.gui.widgets.GuiImgButton; import appeng.client.gui.widgets.GuiTabButton; @@ -129,21 +127,22 @@ public class GuiBaseFluidPatternTerminal extends GuiFCBaseMonitor { this.buttonList.add(this.doubleBtn); combineLeft = 84; } - // if (ModAndClassUtil.isBeSubstitutionsButton) { - // combineLeft = 74; - // combineTop -= 11; - // this.beSubstitutionsEnabledBtn = new GuiImgButton( - // this.guiLeft + 84, this.guiTop + this.ySize - 153, Settings.ACTIONS, - // PatternBeSubstitution.ENABLED); - // this.beSubstitutionsEnabledBtn.setHalfSize(true); - // this.buttonList.add(this.beSubstitutionsEnabledBtn); - // - // this.beSubstitutionsDisabledBtn = new GuiImgButton( - // this.guiLeft + 84, this.guiTop + this.ySize - 153, Settings.ACTIONS, - // PatternBeSubstitution.DISABLED); - // this.beSubstitutionsDisabledBtn.setHalfSize(true); - // this.buttonList.add(this.beSubstitutionsDisabledBtn); - // } + if (ModAndClassUtil.isBeSubstitutionsButton) { + combineLeft = 74; + combineTop -= 11; + this.beSubstitutionsEnabledBtn = new GuiImgButton( + this.guiLeft + 84, this.guiTop + this.ySize - 153, Settings.ACTIONS, PatternBeSubstitution.ENABLED); + this.beSubstitutionsEnabledBtn.setHalfSize(true); + this.buttonList.add(this.beSubstitutionsEnabledBtn); + + this.beSubstitutionsDisabledBtn = new GuiImgButton( + this.guiLeft + 84, + this.guiTop + this.ySize - 153, + Settings.ACTIONS, + PatternBeSubstitution.DISABLED); + this.beSubstitutionsDisabledBtn.setHalfSize(true); + this.buttonList.add(this.beSubstitutionsDisabledBtn); + } this.combineEnableBtn = new GuiFCImgButton( this.guiLeft + combineLeft, this.guiTop + this.ySize - combineTop, "FORCE_COMBINE", "DO_COMBINE"); this.combineEnableBtn.setHalfSize(true); diff --git a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java index af023dd9..10f451a9 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiBaseFluidPatternTerminalEx.java @@ -1,9 +1,6 @@ package com.glodblock.github.client.gui; -import appeng.api.config.ActionItems; -import appeng.api.config.ItemSubstitution; -import appeng.api.config.PatternSlotConfig; -import appeng.api.config.Settings; +import appeng.api.config.*; import appeng.api.storage.ITerminalHost; import appeng.client.gui.widgets.GuiImgButton; import appeng.client.gui.widgets.GuiScrollbar; @@ -144,19 +141,20 @@ public class GuiBaseFluidPatternTerminalEx extends GuiFCBaseMonitor { new GuiFCImgButton(this.guiLeft + 87, this.guiTop + this.ySize - 114, "NOT_COMBINE", "DONT_COMBINE"); this.combineDisableBtn.setHalfSize(true); this.buttonList.add(this.combineDisableBtn); - // if (ModAndClassUtil.isBeSubstitutionsButton) { - // this.beSubstitutionsEnabledBtn = new GuiImgButton( - // this.guiLeft + 87, this.guiTop + this.ySize - 103, Settings.ACTIONS, - // PatternBeSubstitution.ENABLED); - // this.beSubstitutionsEnabledBtn.setHalfSize(true); - // this.buttonList.add(this.beSubstitutionsEnabledBtn); - // - // this.beSubstitutionsDisabledBtn = new GuiImgButton( - // this.guiLeft + 87, this.guiTop + this.ySize - 103, Settings.ACTIONS, - // PatternBeSubstitution.DISABLED); - // this.beSubstitutionsDisabledBtn.setHalfSize(true); - // this.buttonList.add(this.beSubstitutionsDisabledBtn); - // } + if (ModAndClassUtil.isBeSubstitutionsButton) { + this.beSubstitutionsEnabledBtn = new GuiImgButton( + this.guiLeft + 87, this.guiTop + this.ySize - 103, Settings.ACTIONS, PatternBeSubstitution.ENABLED); + this.beSubstitutionsEnabledBtn.setHalfSize(true); + this.buttonList.add(this.beSubstitutionsEnabledBtn); + + this.beSubstitutionsDisabledBtn = new GuiImgButton( + this.guiLeft + 87, + this.guiTop + this.ySize - 103, + Settings.ACTIONS, + PatternBeSubstitution.DISABLED); + this.beSubstitutionsDisabledBtn.setHalfSize(true); + this.buttonList.add(this.beSubstitutionsDisabledBtn); + } processingScrollBar.setTop(this.ySize - 164); } @@ -241,6 +239,8 @@ public class GuiBaseFluidPatternTerminalEx extends GuiFCBaseMonitor { substitutionsEnabledBtn.xPosition = this.guiLeft + 97 + offset; substitutionsDisabledBtn.xPosition = this.guiLeft + 97 + offset; + beSubstitutionsEnabledBtn.xPosition = this.guiLeft + 97 + offset; + beSubstitutionsDisabledBtn.xPosition = this.guiLeft + 97 + offset; fluidPrioritizedEnabledBtn.xPosition = this.guiLeft + 97 + offset; fluidPrioritizedDisabledBtn.xPosition = this.guiLeft + 97 + offset; doubleBtn.xPosition = this.guiLeft + 97 + offset; diff --git a/src/main/java/com/glodblock/github/client/render/RenderBlockFluidBuffer.java b/src/main/java/com/glodblock/github/client/render/RenderBlockFluidBuffer.java new file mode 100644 index 00000000..098a81e8 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/render/RenderBlockFluidBuffer.java @@ -0,0 +1,69 @@ +package com.glodblock.github.client.render; + +import appeng.client.render.BaseBlockRender; +import appeng.client.render.BlockRenderInfo; +import com.glodblock.github.common.block.BlockFluidBuffer; +import com.glodblock.github.common.tile.TileFluidBuffer; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import org.lwjgl.opengl.GL11; + +public class RenderBlockFluidBuffer extends BaseBlockRender { + + public RenderBlockFluidBuffer() { + super(false, 20); + } + + @Override + public boolean renderInWorld( + final BlockFluidBuffer block, + final IBlockAccess world, + final int x, + final int y, + final int z, + final RenderBlocks renderer) { + final TileFluidBuffer ti = block.getTileEntity(world, x, y, z); + final BlockRenderInfo info = block.getRendererInstance(); + this.renderFluid(ti, x, y, z, renderer); + final boolean fz = super.renderInWorld(block, world, x, y, z, renderer); + info.setTemporaryRenderIcon(null); + return fz; + } + + private void renderFluid(TileFluidBuffer tileEntity, double x, double y, double z, RenderBlocks renderer) { + Tessellator tessellator = Tessellator.instance; + if (tileEntity != null && tileEntity.getFluidStack() != null) { + Fluid storedFluid = tileEntity.getFluidStack().getFluid(); + if (storedFluid != null) { + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Block id = Block.getBlockById(FluidRegistry.WATER.getID()); + IIcon fluidIcon = storedFluid.getIcon(); + if (fluidIcon == null) fluidIcon = FluidRegistry.LAVA.getIcon(); + tessellator.setColorRGBA_F( + (storedFluid.getColor() >> 16 & 0xFF) / 255.0F, + (storedFluid.getColor() >> 8 & 0xFF) / 255.0F, + (storedFluid.getColor() & 0xFF) / 255.0F, + 1.0F); + tessellator.setNormal(0.0F, -1F, 0.0F); + renderer.renderFaceYNeg(id, x, y, z, fluidIcon); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + renderer.renderFaceYPos(id, x, y, z, fluidIcon); + tessellator.setNormal(0.0F, 0.0F, -1F); + renderer.renderFaceZNeg(id, x, y, z, fluidIcon); + tessellator.setNormal(0.0F, 0.0F, 1.0F); + renderer.renderFaceZPos(id, x, y, z, fluidIcon); + tessellator.setNormal(-1F, 0.0F, 0.0F); + renderer.renderFaceXNeg(id, x, y, z, fluidIcon); + tessellator.setNormal(1.0F, 0.0F, 0.0F); + renderer.renderFaceXPos(id, x, y, z, fluidIcon); + GL11.glDisable(GL11.GL_BLEND); + } + } + } +} diff --git a/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java b/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java new file mode 100644 index 00000000..80a4ba8d --- /dev/null +++ b/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java @@ -0,0 +1,73 @@ +package com.glodblock.github.common.block; + +import appeng.api.storage.data.IAEFluidStack; +import appeng.block.AEBaseItemBlock; +import appeng.util.Platform; +import com.glodblock.github.client.render.RenderBlockFluidBuffer; +import com.glodblock.github.common.tabs.FluidCraftingTabs; +import com.glodblock.github.common.tile.TileFluidBuffer; +import com.glodblock.github.crossmod.waila.Tooltip; +import com.glodblock.github.util.NameConst; +import com.glodblock.github.util.Util; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +public class BlockFluidBuffer extends FCBaseBlock { + + public BlockFluidBuffer() { + super(Material.iron, NameConst.BLOCK_FLUID_BUFFER); + setTileEntity(TileFluidBuffer.class); + setFullBlock(false); + setOpaque(false); + this.lightOpacity = 3; + } + + @Override + public boolean onActivated( + World world, int x, int y, int z, EntityPlayer player, int facing, float hitX, float hitY, float hitZ) { + ItemStack itemStack = player.inventory.getCurrentItem(); + FluidStack fs = Util.getFluidFromItem(itemStack); + if (Platform.isServer()) { + TileFluidBuffer tile = getTileEntity(world, x, y, z); + if (tile == null) return false; + IAEFluidStack ias = tile.getAEStoreFluidStack(); + if (fs == null && ias != null) { + player.addChatMessage(new ChatComponentText( + Tooltip.fluidFormat(ias.getFluid().getLocalizedName(), ias.getStackSize()))); + return false; + } else { + tile.setFluid(fs); + return true; + } + } + return fs != null; + } + + public BlockFluidBuffer register() { + GameRegistry.registerBlock(this, AEBaseItemBlock.class, NameConst.BLOCK_FLUID_BUFFER); + GameRegistry.registerTileEntity(TileFluidBuffer.class, NameConst.BLOCK_FLUID_BUFFER); + setCreativeTab(FluidCraftingTabs.INSTANCE); + return this; + } + + @Override + @SideOnly(Side.CLIENT) + protected RenderBlockFluidBuffer getRenderer() { + return new RenderBlockFluidBuffer(); + } + + public ItemStack stack(int size) { + return new ItemStack(this, size); + } + + public ItemStack stack() { + return new ItemStack(this, 1); + } +} diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidEncodedPattern.java b/src/main/java/com/glodblock/github/common/item/ItemFluidEncodedPattern.java index b917874e..992929e6 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidEncodedPattern.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidEncodedPattern.java @@ -6,10 +6,7 @@ import com.glodblock.github.FluidCraft; import com.glodblock.github.util.FluidPatternDetails; import com.glodblock.github.util.NameConst; import cpw.mods.fml.common.registry.GameRegistry; -import java.util.List; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; public class ItemFluidEncodedPattern extends ItemEncodedPattern { @@ -31,19 +28,6 @@ public class ItemFluidEncodedPattern extends ItemEncodedPattern { return this; } - @Override - public void addCheckedInformation( - final ItemStack stack, final EntityPlayer player, final List lines, final boolean displayMoreInfo) { - NBTTagCompound data = stack.getTagCompound(); - final boolean combine = data.getBoolean("combine"); - final boolean prio = data.getBoolean("prioritize"); - super.addCheckedInformation(stack, player, lines, displayMoreInfo); - // lines.add(String.format("%s: %s",combine ? - // StatCollector.translateToLocal(NameConst.TT_KEY+"combine"):StatCollector.translateToLocal(NameConst.TT_KEY+"not_combine"),combine ? GuiText.Yes.getLocal() : GuiText.No.getLocal())); - // lines.add(String.format("%s: %s",prio ? - // StatCollector.translateToLocal(NameConst.TT_KEY+"prio"):StatCollector.translateToLocal(NameConst.TT_KEY+"not_prio"),prio ? GuiText.Yes.getLocal() : GuiText.No.getLocal())); - } - public ItemStack stack() { return new ItemStack(this, 1); } diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java index 070b27f7..ed34669d 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminal.java @@ -141,7 +141,7 @@ public class PartFluidPatternTerminal extends FCBasePart { if (newStack != null) { NBTTagCompound data = newStack.getTagCompound(); this.setCombineMode(data.getInteger("combine") == 1); - // this.setBeSubstitute(data.getBoolean("beSubstitute")); + this.setBeSubstitute(data.getBoolean("beSubstitute")); } for (int i = 0; i < this.crafting.getSizeInventory(); i++) { this.crafting.setInventorySlotContents(i, null); diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java index a1d03f07..47f06079 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidPatternTerminalEx.java @@ -166,7 +166,7 @@ public class PartFluidPatternTerminalEx extends FCBasePart { if (newStack != null) { NBTTagCompound data = newStack.getTagCompound(); this.setCombineMode(data.getInteger("combine") == 1); - // this.setBeSubstitute(data.getBoolean("beSubstitute")); + this.setBeSubstitute(data.getBoolean("beSubstitute")); } this.setInverted(inputsCount <= 8 && outputCount > 8); this.setActivePage(0); diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java b/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java new file mode 100644 index 00000000..d917280c --- /dev/null +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java @@ -0,0 +1,250 @@ +package com.glodblock.github.common.tile; + +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.me.GridAccessException; +import appeng.tile.TileEvent; +import appeng.tile.events.TileEventType; +import appeng.tile.grid.AENetworkTile; +import appeng.util.item.AEFluidStack; +import com.glodblock.github.inventory.AEFluidInventory; +import com.glodblock.github.inventory.IAEFluidInventory; +import com.glodblock.github.inventory.IAEFluidTank; +import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; +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; + +public class TileFluidBuffer extends AENetworkTile + implements IAEFluidInventory, IFluidHandler, IPowerChannelState, IGridTickable { + + private final AEFluidInventory invFluids = new AEFluidInventory(this, 1, Integer.MAX_VALUE); + private final BaseActionSource source; + private boolean isPowered; + + public TileFluidBuffer() { + getProxy().setIdlePowerUsage(2D); + getProxy().setFlags(GridFlags.REQUIRE_CHANNEL); + this.source = new MachineSource(this); + } + + public boolean setFluid(FluidStack fs) { + return this.setFluid(fs, Actionable.MODULATE); + } + + public boolean setFluid(FluidStack fs, Actionable actionable) { + if (fs == null) { + this.invFluids.setFluidInSlot(0, null); + return false; + } + try { + IAEFluidStack ias = this.getProxy() + .getStorage() + .getFluidInventory() + .getStorageList() + .findPrecise(AEFluidStack.create(fs)); + if (actionable == Actionable.MODULATE) this.invFluids.setFluidInSlot(0, ias); + if (ias != null) return true; + } catch (final GridAccessException e) { + // :P + } + return false; + } + + @Override + public int fill(ForgeDirection forgeDirection, FluidStack fluidStack, boolean b) { + IAEFluidStack ifs = this.getAEFluidStack(); + if (ifs != null && ifs.getFluid() == fluidStack.getFluid()) { + try { + IAEFluidStack notInserted = this.getProxy() + .getStorage() + .getFluidInventory() + .injectItems( + AEFluidStack.create(fluidStack), + b ? Actionable.MODULATE : Actionable.SIMULATE, + this.source); + if (notInserted != null) return fluidStack.amount -= notInserted.getStackSize(); + return fluidStack.amount; + } catch (final GridAccessException e) { + // :P + } + } + return 0; + } + + @Override + public FluidStack drain(ForgeDirection forgeDirection, FluidStack fluidStack, boolean b) { + return this.drainFluid(fluidStack, b ? Actionable.MODULATE : Actionable.SIMULATE); + } + + public FluidStack drainFluid(FluidStack fs, Actionable actionable) { + if (fs == null || fs.amount <= 0) return null; + try { + IAEFluidStack ias = AEFluidStack.create(fs); + IAEFluidStack extracted = + this.getProxy().getStorage().getFluidInventory().extractItems(ias, actionable, this.source); + if (extracted == null) return null; + return extracted.getFluidStack(); + } catch (final GridAccessException e) { + // :P + } + return null; + } + + @Override + public FluidStack drain(ForgeDirection forgeDirection, int maxDrain, boolean b) { + FluidStack fs = this.getFluidStack(); + if (maxDrain == 0 || fs == null) { + return null; + } + FluidStack tmp = fs.copy(); + tmp.amount = maxDrain; + return this.drainFluid(tmp, b ? Actionable.MODULATE : Actionable.SIMULATE); + } + + public IAEFluidStack getAEStoreFluidStack() { + try { + return this.getProxy() + .getStorage() + .getFluidInventory() + .getStorageList() + .findPrecise(this.getAEFluidStack()); + } catch (final GridAccessException e) { + // :P + } + return null; + } + + public FluidStack getFluidStack() { + return this.getInternalFluid().getFluidStackInSlot(0); + } + + public IAEFluidStack getAEFluidStack() { + return this.getInternalFluid().getFluidInSlot(0); + } + + @Override + public boolean canFill(ForgeDirection forgeDirection, Fluid fluid) { + FluidStack fs = this.getFluidStack(); + return fs != null && fs.getFluid() == fluid; + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) { + return getInternalFluid().canDrain(from, fluid); + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + FluidTankInfo[] FluidTankInfos = getInternalFluid().getTankInfo(from); + FluidTankInfo[] tmp = FluidTankInfos.clone(); + for (FluidTankInfo ft : tmp) { + if (ft.fluid == null) continue; + ft.fluid.amount = 0; + } + return tmp; + } + + @TileEvent(TileEventType.WORLD_NBT_WRITE) + public NBTTagCompound writeToNBTEvent(NBTTagCompound data) { + invFluids.writeToNBT(data, "FluidInv"); + return data; + } + + @TileEvent(TileEventType.WORLD_NBT_READ) + public void readFromNBTEvent(NBTTagCompound data) { + invFluids.readFromNBT(data, "FluidInv"); + } + + @TileEvent(TileEventType.NETWORK_READ) + public boolean readFromStream(final ByteBuf data) { + final boolean oldPower = this.isPowered; + this.isPowered = data.readBoolean(); + return this.isPowered != oldPower; + } + + @TileEvent(TileEventType.NETWORK_WRITE) + public void writeToStream(final ByteBuf data) { + data.writeBoolean(this.isActive()); + } + + @Override + public boolean isPowered() { + return this.isPowered; + } + + @Override + public boolean isActive() { + return this.isPowered; + } + + @MENetworkEventSubscribe + public void stateChange(final MENetworkPowerStatusChange p) { + this.updatePowerState(); + } + + @MENetworkEventSubscribe + public final void bootingRender(final MENetworkBootingStatusChange c) { + this.updatePowerState(); + } + + 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 void onFluidInventoryChanged(IAEFluidTank inv, int slot) { + saveChanges(); + markForUpdate(); + } + + @Override + public AEFluidInventory getInternalFluid() { + return this.invFluids; + } + + @Override + public TickingRequest getTickingRequest(IGridNode node) { + return new TickingRequest(40, 120, false, true); + } + + @Override + public TickRateModulation tickingRequest(IGridNode node, int TicksSinceLastCall) { + return this.canDoBusWork() ? this.doWork() : TickRateModulation.IDLE; + } + + private TickRateModulation doWork() { + return this.setFluid(this.getFluidStack(), Actionable.SIMULATE) + ? TickRateModulation.SLOWER + : TickRateModulation.FASTER; + } + + private boolean canDoBusWork() { + return this.getProxy().isActive(); + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java b/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java index 0ae77dce..ddc7d9dd 100644 --- a/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java +++ b/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java @@ -8,7 +8,7 @@ import net.minecraft.client.resources.I18n; import net.minecraftforge.fluids.FluidStack; public class Tooltip { - public static String fluidFormat(String name, int amount) { + public static String fluidFormat(String name, long amount) { return String.format("%s: %s mB", name, NumberFormat.getInstance().format(amount)); } diff --git a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java index 5e6252ae..94d0275a 100644 --- a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java +++ b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java @@ -13,6 +13,7 @@ public class ItemAndBlockHolder { public static BlockFluidPacketDecoder DECODER = new BlockFluidPacketDecoder().register(); public static BlockFluidInterface INTERFACE = new BlockFluidInterface().register(); public static BlockIngredientBuffer BUFFER = new BlockIngredientBuffer().register(); + public static BlockFluidBuffer FLUID_BUFFER = new BlockFluidBuffer().register(); public static BlockLargeIngredientBuffer LARGE_BUFFER = new BlockLargeIngredientBuffer().register(); public static BlockOCPatternEditor OC_EDITOR = new BlockOCPatternEditor().register(); diff --git a/src/main/java/com/glodblock/github/loader/RecipeLoader.java b/src/main/java/com/glodblock/github/loader/RecipeLoader.java index 400c23c9..80469973 100644 --- a/src/main/java/com/glodblock/github/loader/RecipeLoader.java +++ b/src/main/java/com/glodblock/github/loader/RecipeLoader.java @@ -151,6 +151,7 @@ public class RecipeLoader implements Runnable { AE2_PROCESS_ENG)); GameRegistry.addShapelessRecipe(AE2_BLANK_PATTERN, PATTERN.stack()); GameRegistry.addShapelessRecipe(FLUID_TERM.stack(), AE2_TERMINAL, BUFFER); + GameRegistry.addShapelessRecipe(FLUID_BUFFER.stack(), LARGE_BUFFER.stack(), CELL1K.getComponent()); GameRegistry.addShapelessRecipe( LEVEL_MAINTAINER.stack(), AE2_CRAFTING_CP_UNIT, ENCODER, AE2_PATTERN_CAPACITY_CARD); if (Config.fluidCells) { diff --git a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java index 9aa21c1e..5d9fd739 100644 --- a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java +++ b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java @@ -72,7 +72,7 @@ public final class ModAndClassUtil { } try { Field d = ButtonToolTips.class.getDeclaredField("BeSubstitutionsDescEnabled"); - // isBeSubstitutionsButton = true; + isBeSubstitutionsButton = true; } catch (NoSuchFieldException e) { isBeSubstitutionsButton = false; } diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index 30554a12..e06dbe1e 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -9,6 +9,7 @@ public class NameConst { public static final String BLOCK_FLUID_PACKET_DECODER = "fluid_packet_decoder"; public static final String BLOCK_FLUID_INTERFACE = "fluid_interface"; public static final String BLOCK_INGREDIENT_BUFFER = "ingredient_buffer"; + public static final String BLOCK_FLUID_BUFFER = "fluid_buffer"; public static final String BLOCK_LARGE_INGREDIENT_BUFFER = "large_ingredient_buffer"; public static final String BLOCK_OC_PATTERN_EDITOR = "oc_pattern_editor"; public static final String BLOCK_LEVEL_MAINTAINER = "level_maintainer"; diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index cd045272..b324e144 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -30,6 +30,7 @@ tile.ingredient_buffer.name=Ingredient Buffer tile.large_ingredient_buffer.name=Large Ingredient Buffer tile.oc_pattern_editor.name=OC Pattern Editor tile.level_maintainer.name=ME Level Maintainer +tile.fluid_buffer.name=ME Fluid Buffer ae2fc.waila.speed=Speed ae2fc.waila.enable=Enable diff --git a/src/main/resources/assets/ae2fc/lang/zh_CN.lang b/src/main/resources/assets/ae2fc/lang/zh_CN.lang index a90e92cd..918b1da0 100644 --- a/src/main/resources/assets/ae2fc/lang/zh_CN.lang +++ b/src/main/resources/assets/ae2fc/lang/zh_CN.lang @@ -30,6 +30,7 @@ tile.ingredient_buffer.name=原材料缓存仓 tile.large_ingredient_buffer.name=大型原材料缓存仓 tile.oc_pattern_editor.name=OC样板编辑器 tile.level_maintainer.name=ME缓存指令器 +tile.fluid_buffer.name=ME流体缓存器 ae2fc.waila.speed=速度 ae2fc.waila.enable=启用 @@ -64,7 +65,7 @@ ae2fc.gui.fluid_packet_decoder=ME流体封包解码器 ae2fc.gui.ingredient_buffer=原材料缓存仓 ae2fc.gui.large_ingredient_buffer=大型原材料缓存仓 ae2fc.gui.fluid_interface=ME二合一接口 -ae2fc.gui.level_maintainer=ME缓存指令器 +ae2fc.gui.level_maintainer=ME库存维持器 ae2fc.gui.fluid_interface.0=下 ae2fc.gui.fluid_interface.1=上 ae2fc.gui.fluid_interface.2=北 diff --git a/src/main/resources/assets/ae2fc/textures/blocks/fluid_buffer.png b/src/main/resources/assets/ae2fc/textures/blocks/fluid_buffer.png new file mode 100644 index 0000000000000000000000000000000000000000..4e6dbe8f79b5a979bc21c9ecae954ed84aa8d9be GIT binary patch literal 376 zcmV-;0f+vHP)92r*{k2e5#|fP@eetx zNQfYIVH|+rPB|bBamB-*P1~23pReK@V=8GYXX0000$fVr> literal 0 HcmV?d00001 From c9ba859d343ee568a91b43ab1e73b32a3835f47b Mon Sep 17 00:00:00 2001 From: asdflj <854865755@qq.com> Date: Sun, 18 Dec 2022 15:04:59 +0800 Subject: [PATCH 2/3] fix fluid buffer bug --- dependencies.gradle | 2 +- .../github/common/block/BlockFluidBuffer.java | 3 +- .../github/common/tile/TileFluidBuffer.java | 39 +++++++------------ .../waila/tile/FluidInvWailaDataProvider.java | 4 ++ 4 files changed, 20 insertions(+), 28 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index b81df083..35ddf8d5 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,7 +2,7 @@ dependencies { compile('com.github.GTNewHorizons:NotEnoughItems:2.3.10-GTNH:dev') - compile('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-121-GTNH:dev') + compile('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-127-GTNH:dev') compile('curse.maven:cofh-core-69162:2388751') compile('com.github.GTNewHorizons:waila:1.5.22:dev') compileOnly('com.github.GTNewHorizons:ExtraCells2:2.5.25:dev') { transitive = false } diff --git a/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java b/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java index 80a4ba8d..93a258f4 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java +++ b/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java @@ -37,6 +37,7 @@ public class BlockFluidBuffer extends FCBaseBlock { if (Platform.isServer()) { TileFluidBuffer tile = getTileEntity(world, x, y, z); if (tile == null) return false; + if(player.isSneaking() && itemStack == null) return !tile.setFluid(null); IAEFluidStack ias = tile.getAEStoreFluidStack(); if (fs == null && ias != null) { player.addChatMessage(new ChatComponentText( @@ -47,7 +48,7 @@ public class BlockFluidBuffer extends FCBaseBlock { return true; } } - return fs != null; + return fs != null || (player.isSneaking() && itemStack == null); } public BlockFluidBuffer register() { diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java b/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java index d917280c..02ac6d13 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java @@ -31,7 +31,7 @@ import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; public class TileFluidBuffer extends AENetworkTile - implements IAEFluidInventory, IFluidHandler, IPowerChannelState, IGridTickable { + implements IAEFluidInventory, IFluidHandler, IPowerChannelState { private final AEFluidInventory invFluids = new AEFluidInventory(this, 1, Integer.MAX_VALUE); private final BaseActionSource source; @@ -44,10 +44,6 @@ public class TileFluidBuffer extends AENetworkTile } public boolean setFluid(FluidStack fs) { - return this.setFluid(fs, Actionable.MODULATE); - } - - public boolean setFluid(FluidStack fs, Actionable actionable) { if (fs == null) { this.invFluids.setFluidInSlot(0, null); return false; @@ -58,7 +54,7 @@ public class TileFluidBuffer extends AENetworkTile .getFluidInventory() .getStorageList() .findPrecise(AEFluidStack.create(fs)); - if (actionable == Actionable.MODULATE) this.invFluids.setFluidInSlot(0, ias); + this.invFluids.setFluidInSlot(0, ias); if (ias != null) return true; } catch (final GridAccessException e) { // :P @@ -89,7 +85,12 @@ public class TileFluidBuffer extends AENetworkTile @Override public FluidStack drain(ForgeDirection forgeDirection, FluidStack fluidStack, boolean b) { - return this.drainFluid(fluidStack, b ? Actionable.MODULATE : Actionable.SIMULATE); + FluidStack fs = this.getFluidStack(); + if(fs != null && fs.getFluid() == fluidStack.getFluid()){ + return this.drainFluid(fluidStack, b ? Actionable.MODULATE : Actionable.SIMULATE); + }else { + return null; + } } public FluidStack drainFluid(FluidStack fs, Actionable actionable) { @@ -227,24 +228,10 @@ public class TileFluidBuffer extends AENetworkTile public AEFluidInventory getInternalFluid() { return this.invFluids; } - - @Override - public TickingRequest getTickingRequest(IGridNode node) { - return new TickingRequest(40, 120, false, true); - } - - @Override - public TickRateModulation tickingRequest(IGridNode node, int TicksSinceLastCall) { - return this.canDoBusWork() ? this.doWork() : TickRateModulation.IDLE; - } - - private TickRateModulation doWork() { - return this.setFluid(this.getFluidStack(), Actionable.SIMULATE) - ? TickRateModulation.SLOWER - : TickRateModulation.FASTER; - } - - private boolean canDoBusWork() { - return this.getProxy().isActive(); + public void updateFluidStore(){ + IAEFluidStack iaf = this.getAEStoreFluidStack(); + if(iaf != null){ + this.invFluids.setFluidInSlot(0,iaf); + } } } diff --git a/src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java index 2d432e28..26befc36 100644 --- a/src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java +++ b/src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java @@ -2,6 +2,7 @@ package com.glodblock.github.crossmod.waila.tile; import appeng.integration.modules.waila.BaseWailaDataProvider; import com.glodblock.github.common.item.ItemFluidPacket; +import com.glodblock.github.common.tile.TileFluidBuffer; import com.glodblock.github.common.tile.TileFluidInterface; import com.glodblock.github.common.tile.TileFluidPacketDecoder; import com.glodblock.github.crossmod.waila.Tooltip; @@ -73,6 +74,9 @@ public class FluidInvWailaDataProvider extends BaseWailaDataProvider { final int x, final int y, final int z) { + if(te instanceof TileFluidBuffer){ + ((TileFluidBuffer) te).updateFluidStore(); + } if (te instanceof IAEFluidInventory) { ((IAEFluidInventory) te).getInternalFluid().writeToNBT(tag, "fluidInv"); } else if (te instanceof TileFluidPacketDecoder) { From 23379df0b0a53b0b070bc0ac9fce3c8e07a102c3 Mon Sep 17 00:00:00 2001 From: GlodBlock <1356392126@qq.com> Date: Sun, 18 Dec 2022 15:57:32 +0800 Subject: [PATCH 3/3] sa --- .../github/common/block/BlockFluidBuffer.java | 2 +- .../github/common/tile/TileFluidBuffer.java | 20 ++++++++----------- .../waila/tile/FluidInvWailaDataProvider.java | 2 +- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java b/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java index 93a258f4..e3f60cdd 100644 --- a/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java +++ b/src/main/java/com/glodblock/github/common/block/BlockFluidBuffer.java @@ -37,7 +37,7 @@ public class BlockFluidBuffer extends FCBaseBlock { if (Platform.isServer()) { TileFluidBuffer tile = getTileEntity(world, x, y, z); if (tile == null) return false; - if(player.isSneaking() && itemStack == null) return !tile.setFluid(null); + if (player.isSneaking() && itemStack == null) return !tile.setFluid(null); IAEFluidStack ias = tile.getAEStoreFluidStack(); if (fs == null && ias != null) { player.addChatMessage(new ChatComponentText( diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java b/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java index 02ac6d13..e10b77b4 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidBuffer.java @@ -4,15 +4,11 @@ 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.me.GridAccessException; import appeng.tile.TileEvent; @@ -30,8 +26,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; -public class TileFluidBuffer extends AENetworkTile - implements IAEFluidInventory, IFluidHandler, IPowerChannelState { +public class TileFluidBuffer extends AENetworkTile implements IAEFluidInventory, IFluidHandler, IPowerChannelState { private final AEFluidInventory invFluids = new AEFluidInventory(this, 1, Integer.MAX_VALUE); private final BaseActionSource source; @@ -86,9 +81,9 @@ public class TileFluidBuffer extends AENetworkTile @Override public FluidStack drain(ForgeDirection forgeDirection, FluidStack fluidStack, boolean b) { FluidStack fs = this.getFluidStack(); - if(fs != null && fs.getFluid() == fluidStack.getFluid()){ + if (fs != null && fs.getFluid() == fluidStack.getFluid()) { return this.drainFluid(fluidStack, b ? Actionable.MODULATE : Actionable.SIMULATE); - }else { + } else { return null; } } @@ -228,10 +223,11 @@ public class TileFluidBuffer extends AENetworkTile public AEFluidInventory getInternalFluid() { return this.invFluids; } - public void updateFluidStore(){ - IAEFluidStack iaf = this.getAEStoreFluidStack(); - if(iaf != null){ - this.invFluids.setFluidInSlot(0,iaf); + + public void updateFluidStore() { + IAEFluidStack iaf = this.getAEStoreFluidStack(); + if (iaf != null) { + this.invFluids.setFluidInSlot(0, iaf); } } } diff --git a/src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java index 26befc36..33c41741 100644 --- a/src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java +++ b/src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java @@ -74,7 +74,7 @@ public class FluidInvWailaDataProvider extends BaseWailaDataProvider { final int x, final int y, final int z) { - if(te instanceof TileFluidBuffer){ + if (te instanceof TileFluidBuffer) { ((TileFluidBuffer) te).updateFluidStore(); } if (te instanceof IAEFluidInventory) {