From 44ff338023fb08485afe45c365f3f82a978d4ac1 Mon Sep 17 00:00:00 2001 From: asdflj <854865755@qq.com> Date: Sat, 28 Jan 2023 20:32:25 +0800 Subject: [PATCH] add fluid auto filler --- dependencies.gradle | 2 +- .../github/client/gui/GuiFluidAutoFiller.java | 34 ++ .../container/ContainerFluidAutoFiller.java | 54 ++++ .../common/block/BlockFluidAutoFiller.java | 62 ++++ .../common/item/ItemPartFluidTerminal.java | 9 +- .../common/tile/TileFluidAutoFiller.java | 292 ++++++++++++++++++ .../github/inventory/gui/GuiType.java | 11 + .../inventory/slot/FCSlotRestrictedInput.java | 61 +++- .../github/loader/ItemAndBlockHolder.java | 1 + .../com/glodblock/github/util/NameConst.java | 2 + .../resources/assets/ae2fc/lang/en_US.lang | 2 + .../resources/assets/ae2fc/lang/zh_CN.lang | 2 + .../textures/blocks/fluid_auto_filler.png | Bin 0 -> 995 bytes .../ae2fc/textures/gui/fluid_auto_filler.png | Bin 0 -> 1237 bytes 14 files changed, 522 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/glodblock/github/client/gui/GuiFluidAutoFiller.java create mode 100644 src/main/java/com/glodblock/github/client/gui/container/ContainerFluidAutoFiller.java create mode 100644 src/main/java/com/glodblock/github/common/block/BlockFluidAutoFiller.java create mode 100644 src/main/java/com/glodblock/github/common/tile/TileFluidAutoFiller.java create mode 100644 src/main/resources/assets/ae2fc/textures/blocks/fluid_auto_filler.png create mode 100644 src/main/resources/assets/ae2fc/textures/gui/fluid_auto_filler.png diff --git a/dependencies.gradle b/dependencies.gradle index 12fb2e62..018ce888 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,7 +2,7 @@ dependencies { compile('com.github.GTNewHorizons:NotEnoughItems:2.3.21-GTNH:dev') - compile('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-148-GTNH-pre:dev') + compile('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-149-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/client/gui/GuiFluidAutoFiller.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidAutoFiller.java new file mode 100644 index 00000000..8368eb05 --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidAutoFiller.java @@ -0,0 +1,34 @@ +package com.glodblock.github.client.gui; + +import appeng.client.gui.AEBaseMEGui; +import appeng.core.localization.GuiText; +import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.gui.container.ContainerFluidAutoFiller; +import com.glodblock.github.common.tile.TileFluidAutoFiller; +import com.glodblock.github.util.NameConst; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GuiFluidAutoFiller extends AEBaseMEGui { + protected EntityPlayer player; + private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/fluid_auto_filler.png"); + + public GuiFluidAutoFiller(InventoryPlayer ipl, TileFluidAutoFiller tile) { + super(new ContainerFluidAutoFiller(ipl, tile)); + this.player = ipl.player; + } + + @Override + public void drawBG(int offsetX, int offsetY, int mouseX, int mouseY) { + mc.getTextureManager().bindTexture(TEX_BG); + drawTexturedModalRect(offsetX, offsetY, 0, 0, 176, ySize); + } + + @Override + public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) { + fontRendererObj.drawString(getGuiDisplayName(I18n.format(NameConst.GUI_FLUID_AUTO_FILLER)), 8, 6, 0x404040); + fontRendererObj.drawString(GuiText.inventory.getLocal(), 8, ySize - 94, 0x404040); + } +} diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidAutoFiller.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidAutoFiller.java new file mode 100644 index 00000000..b36d6cab --- /dev/null +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerFluidAutoFiller.java @@ -0,0 +1,54 @@ +package com.glodblock.github.client.gui.container; + +import appeng.container.AEBaseContainer; +import appeng.container.slot.SlotFake; +import com.glodblock.github.common.tile.TileFluidAutoFiller; +import com.glodblock.github.util.Util; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import org.apache.commons.lang3.tuple.MutablePair; + +public class ContainerFluidAutoFiller extends AEBaseContainer { + public static class FakeSlot extends SlotFake { + public FakeSlot(IInventory inv, int idx, int x, int y) { + super(inv, idx, x, y); + } + + @Override + public void putStack(ItemStack is) { + MutablePair result = ContainerFluidAutoFiller.isItemValid(is); + if (result.left) { + if (super.getHasStack()) super.clearStack(); + super.putStack(result.right); + } + } + } + + private final TileFluidAutoFiller tile; + + public ContainerFluidAutoFiller(InventoryPlayer ipl, TileFluidAutoFiller tile) { + super(ipl, tile); + this.tile = tile; + addSlotToContainer(new FakeSlot(tile.getInventory(), 0, 80, 35)); + bindPlayerInventory(ipl, 0, 84); + } + + public static MutablePair isItemValid(ItemStack itemStack) { + boolean result = Util.FluidUtil.isFluidContainer(itemStack); + if (!result) return new MutablePair<>(false, null); + ItemStack tank = itemStack.copy(); + tank.stackSize = 1; + if (Util.FluidUtil.isFilled(tank)) { + return new MutablePair<>(true, Util.FluidUtil.clearFluid(tank)); + } else { + return new MutablePair<>(true, tank); + } + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + tile.updatePattern(); + } +} diff --git a/src/main/java/com/glodblock/github/common/block/BlockFluidAutoFiller.java b/src/main/java/com/glodblock/github/common/block/BlockFluidAutoFiller.java new file mode 100644 index 00000000..4ceabaf2 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/block/BlockFluidAutoFiller.java @@ -0,0 +1,62 @@ +package com.glodblock.github.common.block; + +import appeng.api.config.SecurityPermissions; +import appeng.util.Platform; +import com.glodblock.github.common.item.FCBaseItemBlock; +import com.glodblock.github.common.tabs.FluidCraftingTabs; +import com.glodblock.github.common.tile.TileFluidAutoFiller; +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 com.glodblock.github.util.Util; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ChatComponentText; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockFluidAutoFiller extends FCBaseBlock { + + public BlockFluidAutoFiller() { + super(Material.iron, NameConst.BLOCK_FLUID_AUTO_FILLER); + setTileEntity(TileFluidAutoFiller.class); + setFullBlock(false); + setOpaque(false); + this.lightOpacity = 3; + } + + @Override + public BlockFluidAutoFiller register() { + GameRegistry.registerBlock(this, FCBaseItemBlock.class, NameConst.BLOCK_FLUID_AUTO_FILLER); + GameRegistry.registerTileEntity(TileFluidAutoFiller.class, NameConst.BLOCK_FLUID_AUTO_FILLER); + setCreativeTab(FluidCraftingTabs.INSTANCE); + return this; + } + + @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; + } + TileFluidAutoFiller tile = getTileEntity(world, x, y, z); + if (tile != null) { + if (Platform.isServer()) { + if (Util.hasPermission(player, SecurityPermissions.INJECT, tile)) { + InventoryHandler.openGui( + player, + world, + new BlockPos(x, y, z), + ForgeDirection.getOrientation(facing), + GuiType.FLUID_AUTO_FILLER); + } else { + player.addChatComponentMessage(new ChatComponentText("You don't have permission to view.")); + } + } + return true; + } + return false; + } +} diff --git a/src/main/java/com/glodblock/github/common/item/ItemPartFluidTerminal.java b/src/main/java/com/glodblock/github/common/item/ItemPartFluidTerminal.java index f164d370..1b975475 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemPartFluidTerminal.java +++ b/src/main/java/com/glodblock/github/common/item/ItemPartFluidTerminal.java @@ -16,7 +16,6 @@ import javax.annotation.Nullable; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; import net.minecraft.world.World; public class ItemPartFluidTerminal extends FCBaseItem implements IPartItem { @@ -50,8 +49,12 @@ public class ItemPartFluidTerminal extends FCBaseItem implements IPartItem { @Override @SuppressWarnings("unchecked") @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean flag) { - if (isShiftKeyDown()) tooltip.add(StatCollector.translateToLocalFormatted(NameConst.TT_FLUID_TERMINAL)); + public void addInformation(ItemStack stack, EntityPlayer player, List toolTip, boolean flag) { + if (isShiftKeyDown()) { + toolTip.add(NameConst.i18n(NameConst.TT_FLUID_TERMINAL)); + } else { + toolTip.add(NameConst.i18n(NameConst.TT_SHIFT_FOR_MORE)); + } } @Override diff --git a/src/main/java/com/glodblock/github/common/tile/TileFluidAutoFiller.java b/src/main/java/com/glodblock/github/common/tile/TileFluidAutoFiller.java new file mode 100644 index 00000000..49b60c22 --- /dev/null +++ b/src/main/java/com/glodblock/github/common/tile/TileFluidAutoFiller.java @@ -0,0 +1,292 @@ +package com.glodblock.github.common.tile; + +import static com.glodblock.github.loader.RecipeLoader.BUCKET; + +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.config.PowerMultiplier; +import appeng.api.implementations.ICraftingPatternItem; +import appeng.api.networking.GridFlags; +import appeng.api.networking.IGridNode; +import appeng.api.networking.crafting.ICraftingPatternDetails; +import appeng.api.networking.crafting.ICraftingProvider; +import appeng.api.networking.crafting.ICraftingProviderHelper; +import appeng.api.networking.events.MENetworkBootingStatusChange; +import appeng.api.networking.events.MENetworkCraftingPatternChange; +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.storage.IBaseMonitor; +import appeng.api.networking.storage.IStorageGrid; +import appeng.api.networking.ticking.IGridTickable; +import appeng.api.networking.ticking.TickRateModulation; +import appeng.api.networking.ticking.TickingRequest; +import appeng.api.storage.IMEMonitorHandlerReceiver; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import appeng.api.util.AECableType; +import appeng.api.util.DimensionalCoord; +import appeng.helpers.Reflected; +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 com.glodblock.github.common.item.ItemFluidDrop; +import com.glodblock.github.util.Util; +import javax.annotation.Nonnull; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import org.apache.commons.lang3.tuple.MutablePair; + +public class TileFluidAutoFiller extends AENetworkInvTile + implements ICraftingProvider, IMEMonitorHandlerReceiver, IGridTickable { + private final AppEngInternalInventory inventory = new AppEngInternalInventory(this, 1); + private final BaseActionSource source = new MachineSource(this); + private IItemList fluids = AEApi.instance().storage().createFluidList(); + public ItemStack containerItem; + private final Item encodedPattern = + AEApi.instance().definitions().items().encodedPattern().maybeItem().orNull(); + private IAEItemStack returnStack; + private boolean isPowered; + + public IInventory getInventory() { + return inventory; + } + + @Reflected + public TileFluidAutoFiller() { + getProxy().setIdlePowerUsage(1D); + getProxy().setFlags(GridFlags.REQUIRE_CHANNEL); + inventory.setInventorySlotContents(0, BUCKET); + this.containerItem = getInventory().getStackInSlot(0); + } + + @Override + public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removed, ItemStack added) {} + + @Override + public int[] getAccessibleSlotsBySide(ForgeDirection whichSide) { + return new int[0]; + } + + @Override + public boolean canBeRotated() { + return false; + } + + public void updatePattern() { + ItemStack is = inventory.getStackInSlot(0); + if (is == null || this.containerItem.isItemEqual(is)) return; + this.containerItem = is; + postEvent(); + } + + @TileEvent(TileEventType.WORLD_NBT_READ) + public void readFromNBTEvent(NBTTagCompound data) { + inventory.readFromNBT(data, "Inv"); + } + + @TileEvent(TileEventType.WORLD_NBT_WRITE) + public NBTTagCompound writeToNBTEvent(NBTTagCompound data) { + inventory.writeToNBT(data, "Inv"); + return data; + } + + @Nonnull + @Override + public IInventory getInternalInventory() { + return inventory; + } + + @Override + public DimensionalCoord getLocation() { + return new DimensionalCoord(this); + } + + @Override + public AECableType getCableConnectionType(ForgeDirection dir) { + return AECableType.DENSE; + } + + private IStorageGrid getStorageGrid() { + try { + return this.getProxy().getGrid().getCache(IStorageGrid.class); + } catch (GridAccessException e) { + return null; + } + } + + @Override + public void provideCrafting(ICraftingProviderHelper craftingTracker) { + IStorageGrid storage = getStorageGrid(); + if (storage == null) return; + IItemList fluidStorage = + this.fluids.isEmpty() ? storage.getFluidInventory().getStorageList() : this.fluids; + for (IAEFluidStack fluidStack : fluidStorage) { + Fluid fluid = fluidStack.getFluid(); + if (fluid == null) continue; + int maxCapacity = Util.FluidUtil.getCapacity(this.containerItem, fluid); + if (maxCapacity == 0) continue; + MutablePair filled = + Util.FluidUtil.fillStack(this.containerItem.copy(), new FluidStack(fluid, maxCapacity)); + if (filled.right == null) continue; + ItemStack pattern = getPattern(this.containerItem, filled.right); + ICraftingPatternItem patter = (ICraftingPatternItem) pattern.getItem(); + craftingTracker.addCraftingOption(this, patter.getPatternForItem(pattern, getWorldObj())); + } + } + + private ItemStack getPattern(ItemStack emptyContainer, ItemStack filledContainer) { + NBTTagList in = new NBTTagList(); + NBTTagList out = new NBTTagList(); + in.appendTag(emptyContainer.writeToNBT(new NBTTagCompound())); + ItemStack fluidDrop = ItemFluidDrop.newStack(Util.FluidUtil.getFluidFromContainer(filledContainer)); + in.appendTag(createItemTag(fluidDrop)); + out.appendTag(filledContainer.writeToNBT(new NBTTagCompound())); + NBTTagCompound itemTag = new NBTTagCompound(); + itemTag.setTag("in", in); + itemTag.setTag("out", out); + itemTag.setBoolean("crafting", false); + ItemStack pattern = new ItemStack(this.encodedPattern); + pattern.setTagCompound(itemTag); + return pattern; + } + + protected NBTBase createItemTag(final ItemStack i) { + final NBTTagCompound c = new NBTTagCompound(); + if (i != null) { + i.writeToNBT(c); + c.setInteger("Count", i.stackSize); + } + return c; + } + + @Override + public boolean pushPattern(ICraftingPatternDetails patternDetails, InventoryCrafting table) { + this.returnStack = + AEApi.instance().storage().createItemStack(patternDetails.getCondensedOutputs()[0].getItemStack()); + try { + this.getProxy().getTick().alertDevice(this.getProxy().getNode()); + } catch (GridAccessException ignored) { + + } + return true; + } + + @Override + public boolean isBusy() { + return this.returnStack != null; + } + + @Override + public boolean isValid(Object verificationToken) { + return true; + } + + @Override + public void postChange( + IBaseMonitor monitor, Iterable change, BaseActionSource source) { + if (this.getProxy().isActive() && this.getStorageGrid() != null) { + boolean hasChanged = false; + IItemList stored = this.getStorageGrid() + .getFluidInventory() + .getAvailableItems(AEApi.instance().storage().createFluidList()); + for (IAEFluidStack tmp : change) { + if (stored.findPrecise(tmp) == null || this.fluids.findPrecise(tmp) == null) { + hasChanged = true; + this.fluids = stored; + break; + } + } + if (hasChanged) postEvent(); + } + } + + private boolean postEvent() { + try { + this.getProxy() + .getGrid() + .postEvent(new MENetworkCraftingPatternChange(this, getGridNode(ForgeDirection.UNKNOWN))); + return true; + } catch (GridAccessException ignored) { + return false; + } + } + + @Override + public void onListUpdate() {} + + @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; + if (newState != this.isPowered && newState) { + this.getProxy().getStorage().getFluidInventory().addListener(this, null); + } + } catch (final GridAccessException ignored) { + } + if (newState != this.isPowered) { + this.isPowered = newState; + this.markForUpdate(); + } + } + + @Override + public void gridChanged() { + try { + this.getProxy().getStorage().getFluidInventory().removeListener(this); + } catch (final GridAccessException ignored) { + } + super.gridChanged(); + } + + @Override + public TickingRequest getTickingRequest(IGridNode node) { + return new TickingRequest(1, 5, this.returnStack == null, true); + } + + @Override + public TickRateModulation tickingRequest(IGridNode node, int TicksSinceLastCall) { + if (this.getStorageGrid() == null) { + return TickRateModulation.SLOWER; + } + IAEItemStack nodAdded = + getStorageGrid().getItemInventory().injectItems(this.returnStack, Actionable.SIMULATE, this.source); + if (nodAdded == null) { + getStorageGrid().getItemInventory().injectItems(this.returnStack, Actionable.MODULATE, this.source); + this.returnStack = null; + return TickRateModulation.SLEEP; + } else { + return TickRateModulation.SLOWER; + } + } + + @Override + public boolean dropItems() { + return false; + } +} 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 196c7735..625218cc 100644 --- a/src/main/java/com/glodblock/github/inventory/gui/GuiType.java +++ b/src/main/java/com/glodblock/github/inventory/gui/GuiType.java @@ -20,6 +20,17 @@ import javax.annotation.Nullable; import net.minecraft.entity.player.EntityPlayer; public enum GuiType { + FLUID_AUTO_FILLER(new TileGuiFactory(TileFluidAutoFiller.class) { + @Override + protected Object createServerGui(EntityPlayer player, TileFluidAutoFiller inv) { + return new ContainerFluidAutoFiller(player.inventory, inv); + } + + @Override + protected Object createClientGui(EntityPlayer player, TileFluidAutoFiller inv) { + return new GuiFluidAutoFiller(player.inventory, inv); + } + }), FLUID_LEVEL_EMITTER(new PartGuiFactory(PartFluidLevelEmitter.class) { @Override protected Object createServerGui(EntityPlayer player, PartFluidLevelEmitter inv) { diff --git a/src/main/java/com/glodblock/github/inventory/slot/FCSlotRestrictedInput.java b/src/main/java/com/glodblock/github/inventory/slot/FCSlotRestrictedInput.java index 26c066dd..ec81c5e1 100644 --- a/src/main/java/com/glodblock/github/inventory/slot/FCSlotRestrictedInput.java +++ b/src/main/java/com/glodblock/github/inventory/slot/FCSlotRestrictedInput.java @@ -1,23 +1,72 @@ package com.glodblock.github.inventory.slot; import appeng.container.slot.SlotRestrictedInput; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; +import org.apache.commons.lang3.tuple.MutablePair; public class FCSlotRestrictedInput extends SlotRestrictedInput { - private ItemStack valid; + + @FunctionalInterface + public interface Filter { + MutablePair isItemValid(final ItemStack inputItem); + } + + private final Filter filter; + private final InventoryPlayer p; + private ItemStack validItem = null; public FCSlotRestrictedInput(ItemStack valid, IInventory i, int slotIndex, int x, int y, InventoryPlayer p) { + this( + (inputItem) -> new MutablePair<>( + valid.getItem() + .getClass() + .isAssignableFrom(inputItem.getItem().getClass()), + valid), + i, + slotIndex, + x, + y, + p); + this.validItem = valid; + } + + public FCSlotRestrictedInput(Filter filter, IInventory i, int slotIndex, int x, int y, InventoryPlayer p) { super(PlacableItemType.INSCRIBER_PLATE, i, slotIndex, x, y, p); - this.valid = valid; + this.filter = filter; + this.p = p; } @Override - public boolean isItemValid(final ItemStack i) { - if (i.getItem().getClass().isAssignableFrom(valid.getItem().getClass())) { - return true; + public boolean isItemValid(final ItemStack inputItem) { + MutablePair result = this.filter.isItemValid(inputItem); + return result.left; + } + + public boolean getAllowEdit() { + return super.canTakeStack(this.p.player); + } + + @Override + public boolean canTakeStack(final EntityPlayer par1EntityPlayer) { + return getAllowEdit(); + } + + @Override + public void onPickupFromSlot(final EntityPlayer p, final ItemStack i) { + if (getAllowEdit()) { + super.onPickupFromSlot(p, i); + } + } + + @Override + public int getIcon() { + if (validItem != null) { + return super.getIcon(); + } else { + return -1; } - return false; } } diff --git a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java index a4ba903f..d06f374f 100644 --- a/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java +++ b/src/main/java/com/glodblock/github/loader/ItemAndBlockHolder.java @@ -7,6 +7,7 @@ import com.glodblock.github.common.storage.CellType; public class ItemAndBlockHolder { + public static BlockFluidAutoFiller FLUID_AUTO_FILLER = new BlockFluidAutoFiller().register(); public static BlockFluidDiscretizer DISCRETIZER = new BlockFluidDiscretizer().register(); public static BlockLevelMaintainer LEVEL_MAINTAINER = new BlockLevelMaintainer().register(); public static BlockFluidPatternEncoder ENCODER = new BlockFluidPatternEncoder().register(); diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index 17270398..aed75184 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -13,6 +13,7 @@ public class NameConst { 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_FLUID_AUTO_FILLER = "fluid_auto_filler"; 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"; @@ -81,6 +82,7 @@ public class NameConst { public static final String GUI_LEVEL_MAINTAINER = GUI_KEY + BLOCK_LEVEL_MAINTAINER; public static final String GUI_FLUID_PATTERN_ENCODER = GUI_KEY + BLOCK_FLUID_PATTERN_ENCODER; public static final String GUI_FLUID_PACKET_DECODER = GUI_KEY + BLOCK_FLUID_PACKET_DECODER; + public static final String GUI_FLUID_AUTO_FILLER = GUI_KEY + BLOCK_FLUID_AUTO_FILLER; public static final String GUI_INGREDIENT_BUFFER = GUI_KEY + BLOCK_INGREDIENT_BUFFER; public static final String GUI_LARGE_INGREDIENT_BUFFER = GUI_KEY + BLOCK_LARGE_INGREDIENT_BUFFER; public static final String GUI_FLUID_INTERFACE = GUI_KEY + BLOCK_FLUID_INTERFACE; diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index b7c32bd2..71d753ab 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -36,6 +36,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.fluid_auto_filler.name=ME Fluid Auto Filler ae2fc.waila.speed=Speed ae2fc.waila.enable=Enable @@ -106,6 +107,7 @@ ae2fc.gui.part_fluid_import=ME Fluid Import Bus ae2fc.gui.part_fluid_export=ME Fluid Export Bus ae2fc.gui.part_fluid_terminal=ME Fluid Terminal ae2fc.gui.part_fluid_storage_bus=ME Fluid Storage Bus +ae2fc.gui.fluid_auto_filler=ME Fluid Auto Filler error.unknown=Unknown diff --git a/src/main/resources/assets/ae2fc/lang/zh_CN.lang b/src/main/resources/assets/ae2fc/lang/zh_CN.lang index 30523cc2..9ed4a2a1 100644 --- a/src/main/resources/assets/ae2fc/lang/zh_CN.lang +++ b/src/main/resources/assets/ae2fc/lang/zh_CN.lang @@ -36,6 +36,7 @@ tile.oc_pattern_editor.name=OC样板编辑器 tile.level_maintainer.name=ME库存维持器 tile.fluid_buffer.name=ME流体缓存器 tile.walrus.name=海象 +tile.fluid_auto_filler.name=ME流体自动装填器 ae2fc.waila.speed=速度 ae2fc.waila.enable=启用 @@ -106,6 +107,7 @@ ae2fc.gui.part_fluid_import=ME流体输入总线 ae2fc.gui.part_fluid_export=ME流体输出总线 ae2fc.gui.part_fluid_terminal=流体终端 ae2fc.gui.part_fluid_storage_bus=ME流体存储总线 +ae2fc.gui.fluid_auto_filler=ME流体自动装填器 error.unknown=未知流体 diff --git a/src/main/resources/assets/ae2fc/textures/blocks/fluid_auto_filler.png b/src/main/resources/assets/ae2fc/textures/blocks/fluid_auto_filler.png new file mode 100644 index 0000000000000000000000000000000000000000..c66ff872c62124a8ddd3f6b72f473955f4cb69a8 GIT binary patch literal 995 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR=jj9BQ6?`}gnP=4-bd z9UX0LZ6%G0<;@FZ^&({~E2WGo-v(r48bg&0{5Xs%7~iJIl9Ua?WsO6X^h1OdLlg`G z74!mt&KL!wAu!+}P?2L&33S9fPZ!6Kin!eVlYEB^cwCPAH3V@ebTu&l|DWx_v66jP zr;eIl5NpTBqm_?Uk{`HFc^#b8_%%6a?Jh_47IpiH5)-DL5}*F;$+@l7O{E62LYgPJ z^RqS_TyuA6No$6`N}Z&^jk3!VH4+{=PdvGgbK<@5u#(ROe*^cQTW~}v=lRtO#eEAG zH1FP=Id`9}+xAQ@w?dztNzW#Eb&34b`Cb~dmq9hvc+tdO({G^Q@^tlcS?83{1OS3v Bd?5e; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/ae2fc/textures/gui/fluid_auto_filler.png b/src/main/resources/assets/ae2fc/textures/gui/fluid_auto_filler.png new file mode 100644 index 0000000000000000000000000000000000000000..390a3dba10c3e0a7172381e7ff6247d36bc86bf8 GIT binary patch literal 1237 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5C#Tjh5(-sS0EP%%+1Y1Lqof} zyN?|^_W%EXh~OwW8Un*U1d^tF&INjsu_VYZn8D%MjWiG^$=lt9p@UV{1IXbl@Q5sC zVBk9l!i+m6X1@grvX^-Jy0YJA{*@Hhmn+*tcx zd3)^Rm0Os0*VTU!_|WVi5a{y6&ehfOn{u1