From b3fa0c09d13733a0c8ddcd88f092a98b580f101d Mon Sep 17 00:00:00 2001 From: asdflj <854865755@qq.com> Date: Tue, 29 Nov 2022 15:40:01 +0800 Subject: [PATCH] add waila support --- dependencies.gradle | 13 +- .../java/com/glodblock/github/FluidCraft.java | 6 +- .../github/client/gui/GuiFluidInterface.java | 15 ++ .../glodblock/github/client/me/FluidRepo.java | 18 ++- .../common/parts/PartSharedFluidBus.java | 6 +- .../common/tile/TileIngredientBuffer.java | 7 +- .../tile/TileLargeIngredientBuffer.java | 5 + .../crossmod/waila/FCTooltipHandlerWaila.java | 43 +++++ .../crossmod/waila/PartWailaDataProvider.java | 147 ++++++++++++++++++ .../crossmod/waila/TileWailaDataProvider.java | 85 ++++++++++ .../github/crossmod/waila/Tooltip.java | 26 ++++ .../github/crossmod/waila/WailaInit.java | 27 ++++ .../waila/part/FluidInvWailaDataProvider.java | 52 +++++++ .../waila/part/SpeedWailaDataProvider.java | 46 ++++++ .../waila/tile/FluidInvWailaDataProvider.java | 83 ++++++++++ .../tile/LevelMaintainerWailaDataProvide.java | 57 +++++++ .../github/inventory/AEFluidInventory.java | 3 +- .../github/inventory/IAEFluidInventory.java | 5 +- .../github/util/DualityFluidInterface.java | 5 + .../glodblock/github/util/FluidSorters.java | 4 +- .../github/util/ModAndClassUtil.java | 4 +- .../com/glodblock/github/util/NameConst.java | 4 + .../java/com/glodblock/github/util/Util.java | 19 +++ .../resources/assets/ae2fc/lang/en_US.lang | 4 + .../resources/assets/ae2fc/lang/zh_CN.lang | 4 + 25 files changed, 663 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/glodblock/github/crossmod/waila/FCTooltipHandlerWaila.java create mode 100644 src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java create mode 100644 src/main/java/com/glodblock/github/crossmod/waila/TileWailaDataProvider.java create mode 100644 src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java create mode 100644 src/main/java/com/glodblock/github/crossmod/waila/WailaInit.java create mode 100644 src/main/java/com/glodblock/github/crossmod/waila/part/FluidInvWailaDataProvider.java create mode 100644 src/main/java/com/glodblock/github/crossmod/waila/part/SpeedWailaDataProvider.java create mode 100644 src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java create mode 100644 src/main/java/com/glodblock/github/crossmod/waila/tile/LevelMaintainerWailaDataProvide.java diff --git a/dependencies.gradle b/dependencies.gradle index 2e6b4529..1a0a09c4 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,22 +4,23 @@ dependencies { compile('com.github.GTNewHorizons:NotEnoughItems:2.3.10-GTNH:dev') compile('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-117-GTNH:dev') compile('curse.maven:cofh-core-69162:2388751') + compile('com.github.GTNewHorizons:waila:1.5.22') compileOnly('com.github.GTNewHorizons:ExtraCells2:2.5.25:dev') { transitive = false } compileOnly("com.github.GTNewHorizons:WirelessCraftingTerminal:1.8.9.2:dev") compileOnly('com.github.GTNewHorizons:ForestryMC:4.4.7:dev') - compileOnly('com.github.GTNewHorizons:EnderIO:2.3.1.27:dev') - compileOnly('com.github.GTNewHorizons:EnderCore:0.2.6:dev') + compileOnly('com.github.GTNewHorizons:EnderIO:2.3.1.48:dev') + compileOnly('com.github.GTNewHorizons:EnderCore:0.2.11:dev') compileOnly('com.github.GTNewHorizons:GT5-Unofficial:5.09.40.41:dev') compileOnly('com.github.GTNewHorizons:StructureLib:1.0.15:dev') compileOnly('net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev') compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') compileOnly('com.github.GTNewHorizons:AppleCore:3.1.9:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.27:dev') { transitive = false } - compileOnly('com.gregoriust.gregtech:gregtech_1.7.10:6.14.23:dev') {transitive = false} - compileOnly('com.github.GTNewHorizons:OpenComputers:1.7.5.23-GTNH:dev') {transitive = false} - compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.3.19-GTNH:dev') {transitive = false} - compileOnly('com.github.GTNewHorizons:EnderIO:2.3.1.29:dev') {transitive = false} + compileOnly('com.gregoriust.gregtech:gregtech_1.7.10:6.14.23:dev') { transitive = false } + compileOnly('com.github.GTNewHorizons:OpenComputers:1.7.5.23-GTNH:dev') { transitive = false } + compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.3.19-GTNH:dev') { transitive = false } + compileOnly('com.github.GTNewHorizons:EnderIO:2.3.1.29:dev') { transitive = false } compileOnly('com.github.GTNewHorizons:GTplusplus:1.7.49:dev') {transitive = false} runtime('com.github.GTNewHorizons:Baubles:1.0.1.14:dev') diff --git a/src/main/java/com/glodblock/github/FluidCraft.java b/src/main/java/com/glodblock/github/FluidCraft.java index c4e2788c..6cd1ae38 100644 --- a/src/main/java/com/glodblock/github/FluidCraft.java +++ b/src/main/java/com/glodblock/github/FluidCraft.java @@ -5,6 +5,7 @@ import appeng.api.config.Upgrades; import com.glodblock.github.common.Config; import com.glodblock.github.common.storage.FluidCellHandler; import com.glodblock.github.crossmod.opencomputers.OCDriverInit; +import com.glodblock.github.crossmod.waila.WailaInit; import com.glodblock.github.inventory.InventoryHandler; import com.glodblock.github.loader.ChannelLoader; import com.glodblock.github.loader.ItemAndBlockHolder; @@ -21,7 +22,7 @@ import cpw.mods.fml.common.network.NetworkRegistry; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -@Mod(modid = FluidCraft.MODID, version = FluidCraft.VERSION, name = FluidCraft.MODNAME, dependencies = "required-after:appliedenergistics2") +@Mod(modid = FluidCraft.MODID, version = FluidCraft.VERSION, name = FluidCraft.MODNAME, dependencies = "required-after:appliedenergistics2;after:waila") public class FluidCraft { public static final String MODID = "GRADLETOKEN_MODID"; @@ -47,6 +48,9 @@ public class FluidCraft { if (ModAndClassUtil.OC) { OCDriverInit.run(); } + if (ModAndClassUtil.WAILA) { + WailaInit.run(); + } proxy.init(event); } diff --git a/src/main/java/com/glodblock/github/client/gui/GuiFluidInterface.java b/src/main/java/com/glodblock/github/client/gui/GuiFluidInterface.java index b08677c0..52779754 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiFluidInterface.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiFluidInterface.java @@ -10,6 +10,8 @@ import com.glodblock.github.common.parts.PartFluidInterface; import com.glodblock.github.common.tile.TileFluidInterface; import com.glodblock.github.inventory.IAEFluidTank; import com.glodblock.github.inventory.gui.GuiType; +import com.glodblock.github.inventory.gui.MouseRegionManager; +import com.glodblock.github.inventory.gui.TankMouseHandler; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.network.CPacketSwitchGuis; import com.glodblock.github.util.NameConst; @@ -37,17 +39,29 @@ public class GuiFluidInterface extends AEBaseGui { private final ContainerFluidInterface cont; private GuiTabButton switcher; + private final MouseRegionManager mouseRegions = new MouseRegionManager(this); public GuiFluidInterface(InventoryPlayer ipl, TileFluidInterface tile) { super(new ContainerFluidInterface(ipl, tile)); this.cont = (ContainerFluidInterface) inventorySlots; this.ySize = 231; + this.addMouseRegin(); } public GuiFluidInterface(InventoryPlayer ipl, PartFluidInterface tile) { super(new ContainerFluidInterface(ipl, tile)); this.cont = (ContainerFluidInterface) inventorySlots; this.ySize = 231; + this.addMouseRegin(); + } + + private void addMouseRegin() { + for (int i = 0; i < 6; i++) { + mouseRegions.addRegion(TANK_X + TANK_X_OFF * i, TANK_Y, TANK_WIDTH, TANK_HEIGHT, + new TankMouseHandler( + isPart() ? ((PartFluidInterface) cont.getTile()).getInternalFluid() : ((TileFluidInterface) cont.getTile()).getInternalFluid(), + i)); + } } @Override @@ -91,6 +105,7 @@ public class GuiFluidInterface extends AEBaseGui { fluidInv.getFluidInSlot(i), fluidInv.getTankInfo(ForgeDirection.UNKNOWN)[i].capacity); } GL11.glColor4f(1F, 1F, 1F, 1F); + mouseRegions.render(mouseX, mouseY); } public String dirName(int face) { diff --git a/src/main/java/com/glodblock/github/client/me/FluidRepo.java b/src/main/java/com/glodblock/github/client/me/FluidRepo.java index 36885231..e3ec051d 100644 --- a/src/main/java/com/glodblock/github/client/me/FluidRepo.java +++ b/src/main/java/com/glodblock/github/client/me/FluidRepo.java @@ -20,7 +20,6 @@ package com.glodblock.github.client.me; import appeng.api.AEApi; import appeng.api.config.*; -import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; import appeng.client.gui.widgets.IScrollSource; @@ -28,13 +27,13 @@ import appeng.client.gui.widgets.ISortSource; import appeng.client.me.ItemRepo; import appeng.core.AEConfig; import appeng.items.storage.ItemViewCell; -import appeng.util.item.AEItemStack; import appeng.util.prioitylist.IPartitionList; import com.glodblock.github.common.item.ItemFluidDrop; import com.glodblock.github.util.FluidSorters; import com.glodblock.github.util.Util; import cpw.mods.fml.relauncher.ReflectionHelper; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; import javax.annotation.Nonnull; import java.lang.reflect.Field; @@ -158,11 +157,16 @@ public class FluidRepo extends ItemRepo { if (viewMode == ViewItems.STORED && is.getStackSize() == 0) { continue; } - - final String dspName = searchMod ? Util.getFluidModID(ItemFluidDrop.getAeFluidStack(is).getFluid()) : ItemFluidDrop.getAeFluidStack(is).getFluid().getLocalizedName(); - - if (m.matcher(dspName.toLowerCase()).find()) { - this.view.add(is); + Fluid fluid = ItemFluidDrop.getAeFluidStack(is).getFluid(); + if (searchMod) { + if (m.matcher(Util.getFluidModID(fluid).toLowerCase()).find() || + m.matcher(Util.getFluidModName(fluid).toLowerCase()).find()) { + this.view.add(is); + } + } else { + if (m.matcher(fluid.getLocalizedName().toLowerCase()).find()) { + this.view.add(is); + } } /* diff --git a/src/main/java/com/glodblock/github/common/parts/PartSharedFluidBus.java b/src/main/java/com/glodblock/github/common/parts/PartSharedFluidBus.java index 506a0b88..1a096c30 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartSharedFluidBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartSharedFluidBus.java @@ -120,11 +120,9 @@ public abstract class PartSharedFluidBus extends PartUpgradeable implements IGri return null; } - protected int calculateAmountToSend() - { + public int calculateAmountToSend() { double amount = 1000D; - switch( this.getInstalledUpgrades( Upgrades.SPEED ) ) - { + switch (this.getInstalledUpgrades(Upgrades.SPEED)) { case 4: amount = amount * 1.5; case 3: diff --git a/src/main/java/com/glodblock/github/common/tile/TileIngredientBuffer.java b/src/main/java/com/glodblock/github/common/tile/TileIngredientBuffer.java index 37135e4d..6727b29a 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileIngredientBuffer.java +++ b/src/main/java/com/glodblock/github/common/tile/TileIngredientBuffer.java @@ -60,7 +60,12 @@ public class TileIngredientBuffer extends AEBaseInvTile implements IAEFluidInven markForUpdate(); } - @TileEvent( TileEventType.NETWORK_WRITE ) + @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)); diff --git a/src/main/java/com/glodblock/github/common/tile/TileLargeIngredientBuffer.java b/src/main/java/com/glodblock/github/common/tile/TileLargeIngredientBuffer.java index 90fd2056..d4de15cb 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileLargeIngredientBuffer.java +++ b/src/main/java/com/glodblock/github/common/tile/TileLargeIngredientBuffer.java @@ -60,6 +60,11 @@ public class TileLargeIngredientBuffer extends AEBaseInvTile implements IAEFluid 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++) { diff --git a/src/main/java/com/glodblock/github/crossmod/waila/FCTooltipHandlerWaila.java b/src/main/java/com/glodblock/github/crossmod/waila/FCTooltipHandlerWaila.java new file mode 100644 index 00000000..4766016a --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/waila/FCTooltipHandlerWaila.java @@ -0,0 +1,43 @@ +package com.glodblock.github.crossmod.waila; + +import com.glodblock.github.common.item.ItemFluidDrop; +import com.glodblock.github.util.Util; +import mcp.mobius.waila.handlers.nei.TooltipHandlerWaila; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import java.util.List; + +public class FCTooltipHandlerWaila extends TooltipHandlerWaila { + @Override + public List handleItemDisplayName(GuiContainer arg0, ItemStack itemstack, List currenttip) { + return currenttip; + } + + @Override + public List handleItemTooltip(GuiContainer arg0, ItemStack itemstack, int arg2, int arg3, List currenttip) { + if (itemstack != null && itemstack.getItem() instanceof ItemFluidDrop && currenttip.size() > 0) { + FluidStack fs = ItemFluidDrop.getFluidStack(itemstack); + if (fs == null) return currenttip; + + int fsid = Util.getFluidID(fs.getFluid()); + if (Minecraft.getMinecraft().gameSettings.advancedItemTooltips) { + currenttip.set(0, String.format("%s (#%s) %s", fs.getFluid().getLocalizedName(), fsid, fsid)); + } else { + currenttip.set(0, String.format("%s %s", fs.getFluid().getLocalizedName(), fsid)); + } + + String modName = Util.getFluidModName(fs.getFluid()); + if (modName != null && !modName.equals("")) + currenttip.set(currenttip.size() - 1, "\u00a79\u00a7o" + modName); + } + return currenttip; + } + + @Override + public List handleTooltip(GuiContainer arg0, int arg1, int arg2, List currenttip) { + return currenttip; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java new file mode 100644 index 00000000..ec1cbdc9 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java @@ -0,0 +1,147 @@ +package com.glodblock.github.crossmod.waila; + +import appeng.api.parts.IPart; +import appeng.integration.modules.waila.part.IPartWailaDataProvider; +import appeng.integration.modules.waila.part.PartAccessor; +import appeng.integration.modules.waila.part.Tracer; +import com.glodblock.github.crossmod.waila.part.FluidInvWailaDataProvider; +import com.glodblock.github.crossmod.waila.part.SpeedWailaDataProvider; +import com.google.common.base.Optional; +import com.google.common.collect.Lists; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import java.util.List; + +public class PartWailaDataProvider implements IWailaDataProvider { + private final List providers; + private final PartAccessor accessor = new PartAccessor(); + private final Tracer tracer = new Tracer(); + + public PartWailaDataProvider() { + final IPartWailaDataProvider speed = new SpeedWailaDataProvider(); + final IPartWailaDataProvider fluidInv = new FluidInvWailaDataProvider(); + this.providers = Lists.newArrayList(speed, fluidInv); + } + + @Override + public ItemStack getWailaStack(final IWailaDataAccessor accessor, final IWailaConfigHandler config) { + final TileEntity te = accessor.getTileEntity(); + final MovingObjectPosition mop = accessor.getPosition(); + + final Optional maybePart = this.accessor.getMaybePart(te, mop); + + if (maybePart.isPresent()) { + final IPart part = maybePart.get(); + + ItemStack wailaStack = null; + + for (final IPartWailaDataProvider provider : this.providers) { + wailaStack = provider.getWailaStack(part, config, wailaStack); + if (wailaStack != null) break; + } + return wailaStack; + } + + return null; + } + + @Override + public List getWailaHead( + final ItemStack itemStack, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + final TileEntity te = accessor.getTileEntity(); + final MovingObjectPosition mop = accessor.getPosition(); + + final Optional maybePart = this.accessor.getMaybePart(te, mop); + + if (maybePart.isPresent()) { + final IPart part = maybePart.get(); + + for (final IPartWailaDataProvider provider : this.providers) { + provider.getWailaHead(part, currentToolTip, accessor, config); + } + } + + return currentToolTip; + } + + @Override + public List getWailaBody( + final ItemStack itemStack, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + final TileEntity te = accessor.getTileEntity(); + final MovingObjectPosition mop = accessor.getPosition(); + + final Optional maybePart = this.accessor.getMaybePart(te, mop); + + if (maybePart.isPresent()) { + final IPart part = maybePart.get(); + + for (final IPartWailaDataProvider provider : this.providers) { + provider.getWailaBody(part, currentToolTip, accessor, config); + } + } + + return currentToolTip; + } + + @Override + public List getWailaTail( + final ItemStack itemStack, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + final TileEntity te = accessor.getTileEntity(); + final MovingObjectPosition mop = accessor.getPosition(); + + final Optional maybePart = this.accessor.getMaybePart(te, mop); + + if (maybePart.isPresent()) { + final IPart part = maybePart.get(); + + for (final IPartWailaDataProvider provider : this.providers) { + provider.getWailaTail(part, currentToolTip, accessor, config); + } + } + + return currentToolTip; + } + + @Override + public NBTTagCompound getNBTData( + final EntityPlayerMP player, + final TileEntity te, + final NBTTagCompound tag, + final World world, + final int x, + final int y, + final int z) { + final MovingObjectPosition mop = this.tracer.retraceBlock(world, player, x, y, z); + + if (mop != null) { + final Optional maybePart = this.accessor.getMaybePart(te, mop); + + if (maybePart.isPresent()) { + final IPart part = maybePart.get(); + + for (final IPartWailaDataProvider provider : this.providers) { + provider.getNBTData(player, part, te, tag, world, x, y, z); + } + } + } + + return tag; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/waila/TileWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/TileWailaDataProvider.java new file mode 100644 index 00000000..b8d8dffe --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/waila/TileWailaDataProvider.java @@ -0,0 +1,85 @@ +package com.glodblock.github.crossmod.waila; + +import com.glodblock.github.crossmod.waila.tile.FluidInvWailaDataProvider; +import com.glodblock.github.crossmod.waila.tile.LevelMaintainerWailaDataProvide; +import com.google.common.collect.Lists; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import java.util.List; + +public class TileWailaDataProvider implements IWailaDataProvider { + private final List providers; + + public TileWailaDataProvider() { + final IWailaDataProvider fluidInv = new FluidInvWailaDataProvider(); + final IWailaDataProvider levelMaintainer = new LevelMaintainerWailaDataProvide(); + this.providers = Lists.newArrayList(fluidInv, levelMaintainer); + } + + @Override + public ItemStack getWailaStack(final IWailaDataAccessor accessor, final IWailaConfigHandler config) { + return null; + } + + @Override + public List getWailaHead( + final ItemStack itemStack, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + for (final IWailaDataProvider provider : this.providers) { + provider.getWailaHead(itemStack, currentToolTip, accessor, config); + } + + return currentToolTip; + } + + @Override + public List getWailaBody( + final ItemStack itemStack, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + for (final IWailaDataProvider provider : this.providers) { + provider.getWailaBody(itemStack, currentToolTip, accessor, config); + } + + return currentToolTip; + } + + @Override + public List getWailaTail( + final ItemStack itemStack, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + for (final IWailaDataProvider provider : this.providers) { + provider.getWailaTail(itemStack, currentToolTip, accessor, config); + } + + return currentToolTip; + } + + @Override + public NBTTagCompound getNBTData( + final EntityPlayerMP player, + final TileEntity te, + final NBTTagCompound tag, + final World world, + final int x, + final int y, + final int z) { + for (final IWailaDataProvider provider : this.providers) { + provider.getNBTData(player, te, tag, world, x, y, z); + } + + return tag; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java b/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java new file mode 100644 index 00000000..5931edd1 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/waila/Tooltip.java @@ -0,0 +1,26 @@ +package com.glodblock.github.crossmod.waila; + +import appeng.util.Utility; +import com.glodblock.github.util.NameConst; +import net.minecraft.client.resources.I18n; + +public class Tooltip { + public static String fluidFormat(String name, int amount) { + return String.format("%s: %s mB", name, Utility.formatNumbers(amount)); + } + + public static String partFluidBusFormat(int amount) { + return String.format("%s: %s mB/t", I18n.format(NameConst.WAILA_SPEED), Utility.formatNumbers(amount / 5)); + } + + public static String tileFluidInterfaceFormat(String name, int amount, int face) { + return String.format("%s %s: %s mB", I18n.format(NameConst.GUI_FLUID_INTERFACE + "." + face), name, Utility.formatNumbers(amount)); + } + + public static String tileLevelMaintainerFormat(String name, long quantity, long batch, boolean isEnable) { + return String.format("%s: %s / %s %s", + name, Utility.formatNumbers(quantity), Utility.formatNumbers(batch), + isEnable ? I18n.format(NameConst.WAILA_ENABLE) : I18n.format(NameConst.WAILA_DISABLE) + ); + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/waila/WailaInit.java b/src/main/java/com/glodblock/github/crossmod/waila/WailaInit.java new file mode 100644 index 00000000..6f9166ff --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/waila/WailaInit.java @@ -0,0 +1,27 @@ +package com.glodblock.github.crossmod.waila; + +import appeng.api.parts.IPartHost; +import appeng.tile.AEBaseTile; +import codechicken.nei.guihook.GuiContainerManager; +import cpw.mods.fml.common.event.FMLInterModComms; +import mcp.mobius.waila.api.IWailaDataProvider; +import mcp.mobius.waila.api.IWailaRegistrar; + +public class WailaInit { + + public static void run() { + FMLInterModComms.sendMessage("Waila", "register", WailaInit.class.getName() + ".register"); + } + + public static void register(final IWailaRegistrar registrar) { + final IWailaDataProvider part = new PartWailaDataProvider(); + registrar.registerBodyProvider(part, IPartHost.class); + registrar.registerNBTProvider(part, IPartHost.class); + GuiContainerManager.addTooltipHandler(new FCTooltipHandlerWaila()); + + final IWailaDataProvider tile = new TileWailaDataProvider(); + registrar.registerBodyProvider(tile, AEBaseTile.class); + registrar.registerNBTProvider(tile, AEBaseTile.class); + } + +} diff --git a/src/main/java/com/glodblock/github/crossmod/waila/part/FluidInvWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/part/FluidInvWailaDataProvider.java new file mode 100644 index 00000000..4de650c0 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/waila/part/FluidInvWailaDataProvider.java @@ -0,0 +1,52 @@ +package com.glodblock.github.crossmod.waila.part; + +import appeng.api.parts.IPart; +import appeng.integration.modules.waila.part.BasePartWailaDataProvider; +import com.glodblock.github.crossmod.waila.Tooltip; +import com.glodblock.github.inventory.AEFluidInventory; +import com.glodblock.github.inventory.IAEFluidInventory; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +import java.util.List; + +public class FluidInvWailaDataProvider extends BasePartWailaDataProvider { + @Override + public List getWailaBody( + final IPart part, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + if (part instanceof IAEFluidInventory) { + ((IAEFluidInventory) part).getInternalFluid().readFromNBT(accessor.getNBTData(), "fluidInv"); + AEFluidInventory fluidInventory = ((IAEFluidInventory) part).getInternalFluid(); + for (int i = 0; i < fluidInventory.getSlots(); i++) { + FluidStack fs = fluidInventory.getFluidStackInSlot(i); + if (fs == null) continue; + currentToolTip.add(Tooltip.fluidFormat(fs.getFluid().getLocalizedName(), fs.amount)); + } + } + return currentToolTip; + } + + @Override + public NBTTagCompound getNBTData( + final EntityPlayerMP player, + final IPart part, + final TileEntity te, + final NBTTagCompound tag, + final World world, + final int x, + final int y, + final int z) { + if (part instanceof IAEFluidInventory) { + ((IAEFluidInventory) part).getInternalFluid().writeToNBT(tag, "fluidInv"); + } + return tag; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/waila/part/SpeedWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/part/SpeedWailaDataProvider.java new file mode 100644 index 00000000..329c8941 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/waila/part/SpeedWailaDataProvider.java @@ -0,0 +1,46 @@ +package com.glodblock.github.crossmod.waila.part; + +import appeng.api.parts.IPart; +import appeng.integration.modules.waila.part.BasePartWailaDataProvider; +import com.glodblock.github.common.parts.PartSharedFluidBus; +import com.glodblock.github.crossmod.waila.Tooltip; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import java.util.List; + +public class SpeedWailaDataProvider extends BasePartWailaDataProvider { + + @Override + public List getWailaBody( + final IPart part, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + if (part instanceof PartSharedFluidBus) { + part.readFromNBT(accessor.getNBTData()); + currentToolTip.add(Tooltip.partFluidBusFormat(((PartSharedFluidBus) part).calculateAmountToSend())); + } + return currentToolTip; + } + + @Override + public NBTTagCompound getNBTData( + final EntityPlayerMP player, + final IPart part, + final TileEntity te, + final NBTTagCompound tag, + final World world, + final int x, + final int y, + final int z) { + if (part instanceof PartSharedFluidBus) { + part.writeToNBT(tag); + } + return tag; + } +} 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 new file mode 100644 index 00000000..f88764de --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/waila/tile/FluidInvWailaDataProvider.java @@ -0,0 +1,83 @@ +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.TileFluidInterface; +import com.glodblock.github.common.tile.TileFluidPacketDecoder; +import com.glodblock.github.crossmod.waila.Tooltip; +import com.glodblock.github.inventory.IAEFluidInventory; +import com.glodblock.github.inventory.IAEFluidTank; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +import java.util.List; + +public class FluidInvWailaDataProvider extends BaseWailaDataProvider { + + @Override + public List getWailaBody( + final ItemStack itemStack, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + final TileEntity te = accessor.getTileEntity(); + if (te instanceof TileFluidInterface) { + ((IAEFluidInventory) te).getInternalFluid().readFromNBT(accessor.getNBTData(), "fluidInv"); + addTooltip(currentToolTip, ((IAEFluidInventory) te).getInternalFluid(), true); + } else if (te instanceof IAEFluidInventory) { + ((IAEFluidInventory) te).getInternalFluid().readFromNBT(accessor.getNBTData(), "fluidInv"); + addTooltip(currentToolTip, ((IAEFluidInventory) te).getInternalFluid()); + } else if (te instanceof TileFluidPacketDecoder) { + te.readFromNBT(accessor.getNBTData()); + IInventory inv = ((TileFluidPacketDecoder) te).getInventory(); + for (int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack is = inv.getStackInSlot(i); + if (is != null && is.getItem() instanceof ItemFluidPacket) { + FluidStack fs = ItemFluidPacket.getFluidStack(is); + currentToolTip.add(Tooltip.fluidFormat(fs.getFluid().getLocalizedName(), fs.amount)); + } + } + } + return currentToolTip; + } + + private void addTooltip(List currentToolTip, IAEFluidTank ft, boolean prefix) { + for (int i = 0; i < ft.getSlots(); i++) { + if (ft.getFluidInSlot(i) == null) continue; + FluidStack fs = ft.getFluidInSlot(i).getFluidStack(); + if (prefix) { + currentToolTip.add(Tooltip.tileFluidInterfaceFormat(fs.getFluid().getLocalizedName(), fs.amount, i)); + } else { + currentToolTip.add(Tooltip.fluidFormat(fs.getFluid().getLocalizedName(), fs.amount)); + } + } + } + + private void addTooltip(List currentToolTip, IAEFluidTank ft) { + this.addTooltip(currentToolTip, ft, false); + } + + @Override + public NBTTagCompound getNBTData( + final EntityPlayerMP player, + final TileEntity te, + final NBTTagCompound tag, + final World world, + final int x, + final int y, + final int z) { + if (te instanceof IAEFluidInventory) { + ((IAEFluidInventory) te).getInternalFluid().writeToNBT(tag, "fluidInv"); + } else if (te instanceof TileFluidPacketDecoder) { + te.writeToNBT(tag); + } + return tag; + } +} diff --git a/src/main/java/com/glodblock/github/crossmod/waila/tile/LevelMaintainerWailaDataProvide.java b/src/main/java/com/glodblock/github/crossmod/waila/tile/LevelMaintainerWailaDataProvide.java new file mode 100644 index 00000000..88692183 --- /dev/null +++ b/src/main/java/com/glodblock/github/crossmod/waila/tile/LevelMaintainerWailaDataProvide.java @@ -0,0 +1,57 @@ +package com.glodblock.github.crossmod.waila.tile; + +import appeng.api.storage.data.IAEItemStack; +import appeng.integration.modules.waila.BaseWailaDataProvider; +import com.glodblock.github.common.tile.TileLevelMaintainer; +import com.glodblock.github.crossmod.waila.Tooltip; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import java.util.List; + +public class LevelMaintainerWailaDataProvide extends BaseWailaDataProvider { + @Override + public List getWailaBody( + final ItemStack itemStack, + final List currentToolTip, + final IWailaDataAccessor accessor, + final IWailaConfigHandler config) { + final TileEntity te = accessor.getTileEntity(); + if (te instanceof TileLevelMaintainer) { + te.readFromNBT(accessor.getNBTData()); + for (int i = 0; i < TileLevelMaintainer.REQ_COUNT; i++) { + IAEItemStack ias = ((TileLevelMaintainer) te).requests.getRequestStacks().getStack(i); + if (ias != null) { + currentToolTip.add(Tooltip.tileLevelMaintainerFormat( + ias.getItemStack().getDisplayName(), + ((TileLevelMaintainer) te).requests.getQuantity(i), + ((TileLevelMaintainer) te).requests.getBatchSize(i), + ((TileLevelMaintainer) te).requests.isEnable(i) + )); + } + } + } + return currentToolTip; + } + + + @Override + public NBTTagCompound getNBTData( + final EntityPlayerMP player, + final TileEntity te, + final NBTTagCompound tag, + final World world, + final int x, + final int y, + final int z) { + if (te instanceof TileLevelMaintainer) { + te.writeToNBT(tag); + } + return tag; + } +} diff --git a/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java b/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java index 2e17578c..6d24a806 100644 --- a/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java +++ b/src/main/java/com/glodblock/github/inventory/AEFluidInventory.java @@ -352,7 +352,8 @@ public class AEFluidInventory implements IAEFluidTank } catch( final Exception e ) { - AELog.debug( e ); + this.fluids[x] = null; + AELog.debug(e); } } } diff --git a/src/main/java/com/glodblock/github/inventory/IAEFluidInventory.java b/src/main/java/com/glodblock/github/inventory/IAEFluidInventory.java index 79ed92c7..0cf45f6a 100644 --- a/src/main/java/com/glodblock/github/inventory/IAEFluidInventory.java +++ b/src/main/java/com/glodblock/github/inventory/IAEFluidInventory.java @@ -1,7 +1,8 @@ package com.glodblock.github.inventory; -@FunctionalInterface public interface IAEFluidInventory { - void onFluidInventoryChanged( final IAEFluidTank inv, final int slot ); + void onFluidInventoryChanged(final IAEFluidTank inv, final int slot); + + AEFluidInventory getInternalFluid(); } diff --git a/src/main/java/com/glodblock/github/util/DualityFluidInterface.java b/src/main/java/com/glodblock/github/util/DualityFluidInterface.java index 50febdf1..5b96cdf4 100644 --- a/src/main/java/com/glodblock/github/util/DualityFluidInterface.java +++ b/src/main/java/com/glodblock/github/util/DualityFluidInterface.java @@ -236,6 +236,11 @@ public class DualityFluidInterface implements IGridTickable, IStorageMonitorable } } + @Override + public AEFluidInventory getInternalFluid() { + return this.tanks; + } + private boolean hasWorkToDo() { for (IAEFluidStack requiredWork : this.requireWork) { if (requiredWork != null) { diff --git a/src/main/java/com/glodblock/github/util/FluidSorters.java b/src/main/java/com/glodblock/github/util/FluidSorters.java index bb7e3c82..dd940379 100644 --- a/src/main/java/com/glodblock/github/util/FluidSorters.java +++ b/src/main/java/com/glodblock/github/util/FluidSorters.java @@ -20,9 +20,9 @@ public class FluidSorters { final Fluid f1 = ItemFluidDrop.getAeFluidStack(o1).getFluid(); final Fluid f2 = ItemFluidDrop.getAeFluidStack(o2).getFluid(); if (getDirection() == SortDir.ASCENDING) { - return this.secondarySort(Util.getFluidModID(f2).compareToIgnoreCase(Util.getFluidModID(f1)), f1, f2); + return this.secondarySort(Util.getFluidModName(f2).compareToIgnoreCase(Util.getFluidModName(f1)), f1, f2); } - return this.secondarySort(Util.getFluidModID(f1).compareToIgnoreCase(Util.getFluidModID(f2)), f2, f1); + return this.secondarySort(Util.getFluidModName(f1).compareToIgnoreCase(Util.getFluidModName(f2)), f2, f1); } private int secondarySort(final int compareToIgnoreCase, final Fluid f1, final Fluid f2) { diff --git a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java index 48a687d0..d01680fa 100644 --- a/src/main/java/com/glodblock/github/util/ModAndClassUtil.java +++ b/src/main/java/com/glodblock/github/util/ModAndClassUtil.java @@ -24,7 +24,7 @@ public final class ModAndClassUtil { public static boolean NEI = false; public static boolean COFH = false; public static boolean GTPP = false; - + public static boolean WAILA = false; public static boolean isDoubleButton; public static boolean isSaveText; public static boolean isSearchStringTooltip; @@ -132,5 +132,7 @@ public final class ModAndClassUtil { COFH = true; if (Loader.isModLoaded("miscutils")) GTPP = true; + if (Loader.isModLoaded("Waila")) + WAILA = true; } } diff --git a/src/main/java/com/glodblock/github/util/NameConst.java b/src/main/java/com/glodblock/github/util/NameConst.java index 2d463855..79d8da28 100644 --- a/src/main/java/com/glodblock/github/util/NameConst.java +++ b/src/main/java/com/glodblock/github/util/NameConst.java @@ -35,6 +35,10 @@ public class NameConst { public static final String TT_REQUEST_SIZE = TT_KEY + "request_size"; public static final String TT_BATCH_SIZE = TT_KEY + "batch_size"; + public static final String WAILA_KEY = FluidCraft.MODID + ".waila."; + public static final String WAILA_ENABLE = WAILA_KEY + "enable"; + public static final String WAILA_DISABLE = WAILA_KEY + "disable"; + public static final String WAILA_SPEED = WAILA_KEY + "speed"; public static final String RES_KEY = FluidCraft.MODID + ":"; public static final String GUI_KEY = FluidCraft.MODID + ".gui."; diff --git a/src/main/java/com/glodblock/github/util/Util.java b/src/main/java/com/glodblock/github/util/Util.java index 5eadad50..e4cf68b1 100644 --- a/src/main/java/com/glodblock/github/util/Util.java +++ b/src/main/java/com/glodblock/github/util/Util.java @@ -10,6 +10,8 @@ import appeng.api.parts.IPart; import appeng.api.storage.data.IAEFluidStack; import appeng.util.item.AEFluidStack; import com.glodblock.github.common.item.ItemFluidPacket; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.registry.GameData; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -145,6 +147,23 @@ public final class Util { } catch (Exception e) { return ""; } + } + + public static ModContainer getFluidMod(Fluid fluid) { + return GameData.findModOwner(String.format("%s:%s", getFluidModID(fluid), fluid.getName())); + } + + public static int getFluidID(Fluid fluid) { + return GameData.getBlockRegistry().getId(fluid.getBlock()); + } + + public static String getFluidModName(Fluid fluid) { + try { + ModContainer mod = getFluidMod(fluid); + return mod == null ? "Minecraft" : mod.getName(); + } catch (Exception e) { + return ""; + } } diff --git a/src/main/resources/assets/ae2fc/lang/en_US.lang b/src/main/resources/assets/ae2fc/lang/en_US.lang index 624e54c7..cd045272 100644 --- a/src/main/resources/assets/ae2fc/lang/en_US.lang +++ b/src/main/resources/assets/ae2fc/lang/en_US.lang @@ -31,6 +31,10 @@ tile.large_ingredient_buffer.name=Large Ingredient Buffer tile.oc_pattern_editor.name=OC Pattern Editor tile.level_maintainer.name=ME Level Maintainer +ae2fc.waila.speed=Speed +ae2fc.waila.enable=Enable +ae2fc.waila.disable=Disable + ae2fc.tooltip.request_size=Amount to Maintain ae2fc.tooltip.batch_size=Crafting Batch Size ae2fc.tooltip.fluid_terminal=uh So we don't need EC2 anymore? diff --git a/src/main/resources/assets/ae2fc/lang/zh_CN.lang b/src/main/resources/assets/ae2fc/lang/zh_CN.lang index 3e21bb7d..a90e92cd 100644 --- a/src/main/resources/assets/ae2fc/lang/zh_CN.lang +++ b/src/main/resources/assets/ae2fc/lang/zh_CN.lang @@ -31,6 +31,10 @@ tile.large_ingredient_buffer.name=大型原材料缓存仓 tile.oc_pattern_editor.name=OC样板编辑器 tile.level_maintainer.name=ME缓存指令器 +ae2fc.waila.speed=速度 +ae2fc.waila.enable=启用 +ae2fc.waila.disable=禁用 + ae2fc.tooltip.request_size=缓存量 ae2fc.tooltip.batch_size=批量制作数量 ae2fc.tooltip.fluid_terminal=我们不再需要EC2了吗?