diff --git a/gradle.properties b/gradle.properties index 8cfe02e3..3b43a313 100644 --- a/gradle.properties +++ b/gradle.properties @@ -108,7 +108,7 @@ mixinsPackage = # Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! # This parameter is for legacy compatibility only # Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin -coreModClass = coremod.FluidCraftCore +coreModClass = # If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class # that is annotated with @Mod) you want this to be true. When in doubt: leave it on false! diff --git a/src/main/java/com/glodblock/github/FluidCraft.java b/src/main/java/com/glodblock/github/FluidCraft.java index 706ce9da..90d7aaa6 100644 --- a/src/main/java/com/glodblock/github/FluidCraft.java +++ b/src/main/java/com/glodblock/github/FluidCraft.java @@ -6,7 +6,6 @@ import com.glodblock.github.common.Config; 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.CalculatorV2PluginLoader; import com.glodblock.github.loader.ChannelLoader; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.loader.RecipeLoader; @@ -74,10 +73,6 @@ public class FluidCraft { RecipeLoader.runTerminalRecipe(); RecipeLoader.addDisassembleRecipe(); - if (ModAndClassUtil.isV2) { - CalculatorV2PluginLoader.installCalculatorV2Plugins(); - } - proxy.postInit(event); } diff --git a/src/main/java/com/glodblock/github/api/FluidCraftAPI.java b/src/main/java/com/glodblock/github/api/FluidCraftAPI.java index 00396424..b8dcd2c6 100644 --- a/src/main/java/com/glodblock/github/api/FluidCraftAPI.java +++ b/src/main/java/com/glodblock/github/api/FluidCraftAPI.java @@ -6,7 +6,7 @@ import java.util.Set; import net.minecraftforge.fluids.Fluid; import com.glodblock.github.api.registries.ILevelTerminalRegistry; -import com.glodblock.github.coremod.registries.LevelTerminalRegistry; +import com.glodblock.github.util.LevelTerminalRegistry; public final class FluidCraftAPI implements IFluidCraftAPI { diff --git a/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java b/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java index acd90762..f5c78a3f 100644 --- a/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java +++ b/src/main/java/com/glodblock/github/client/gui/GuiLevelMaintainer.java @@ -24,6 +24,7 @@ import com.glodblock.github.util.NameConst; import appeng.api.features.LevelState; import appeng.api.storage.data.IAEStack; +import appeng.api.storage.data.IAEStackType; import appeng.client.gui.GuiSub; import appeng.client.gui.slots.VirtualMEPhantomSlot; import appeng.client.gui.widgets.GuiTabButton; @@ -61,7 +62,8 @@ public class GuiLevelMaintainer extends GuiSub { 27, 20 + i * 19, this.cont.getTile().getAEStackInventory(), - i); + i, + GuiLevelMaintainer::acceptType); slot.setShowAmount(true); slot.setShowAmountAlways(true); this.registerVirtualSlots(slot); @@ -193,6 +195,10 @@ public class GuiLevelMaintainer extends GuiSub { component[index].setState(state); } + private static boolean acceptType(VirtualMEPhantomSlot slot, IAEStackType type, int mouseButton) { + return true; + } + private class Component { public boolean isEnable = false; diff --git a/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelTerminal.java b/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelTerminal.java index 40d65816..78c2caf8 100644 --- a/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelTerminal.java +++ b/src/main/java/com/glodblock/github/client/gui/container/ContainerLevelTerminal.java @@ -16,12 +16,12 @@ import org.jetbrains.annotations.Nullable; import com.glodblock.github.FluidCraft; import com.glodblock.github.client.gui.container.base.FCBaseContainer; import com.glodblock.github.common.parts.PartLevelTerminal; -import com.glodblock.github.coremod.registries.LevelTerminalRegistry; import com.glodblock.github.inventory.gui.GuiType; import com.glodblock.github.inventory.item.IWirelessTerminal; import com.glodblock.github.loader.ItemAndBlockHolder; import com.glodblock.github.network.SPacketLevelTerminalUpdate; import com.glodblock.github.util.FluidPrimaryGui; +import com.glodblock.github.util.LevelTerminalRegistry; import appeng.api.features.ILevelViewable; import appeng.api.features.LevelItemInfo; diff --git a/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java b/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java index 5ba2b702..9a11153e 100644 --- a/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java +++ b/src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java @@ -1,12 +1,16 @@ package com.glodblock.github.common.item; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + import com.glodblock.github.common.storage.CellType; import com.glodblock.github.loader.ItemAndBlockHolder; import com.google.common.base.Optional; -import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEStackType; import appeng.items.AEBaseCell; import appeng.util.Platform; @@ -24,8 +28,8 @@ public abstract class FCBaseItemCell extends AEBaseCell { } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public @NotNull IAEStackType getStackType() { + return FLUID_STACK_TYPE; } public FCBaseItemCell(Optional subName) { diff --git a/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java index 4e6d0887..30d954e3 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemCreativeFluidStorageCell.java @@ -1,17 +1,24 @@ package com.glodblock.github.common.item; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import java.util.EnumSet; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + import com.glodblock.github.FluidCraft; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.loader.IRegister; import com.glodblock.github.util.NameConst; -import appeng.api.storage.StorageChannel; +import appeng.api.storage.IMEInventoryHandler; +import appeng.api.storage.data.IAEStackType; import appeng.core.features.AEFeature; import appeng.items.AEBaseInfiniteCell; +import appeng.me.storage.CreativeCellInventory; +import appeng.me.storage.FluidCellInventoryHandler; import cpw.mods.fml.common.registry.GameRegistry; public class ItemCreativeFluidStorageCell extends AEBaseInfiniteCell @@ -42,7 +49,12 @@ public class ItemCreativeFluidStorageCell extends AEBaseInfiniteCell } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public @NotNull IAEStackType getStackType() { + return FLUID_STACK_TYPE; + } + + @Override + public IMEInventoryHandler getCellInventory(ItemStack stack) { + return new FluidCellInventoryHandler(new CreativeCellInventory<>(stack)); } } diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidConversionMonitor.java b/src/main/java/com/glodblock/github/common/item/ItemFluidConversionMonitor.java index ae9dde55..e8185fb3 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidConversionMonitor.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidConversionMonitor.java @@ -3,9 +3,11 @@ package com.glodblock.github.common.item; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; import net.minecraft.world.World; import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.textures.FCPartsTexture; import com.glodblock.github.common.parts.PartFluidConversionMonitor; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; @@ -37,6 +39,11 @@ public class ItemFluidConversionMonitor extends FCBaseItem implements IPartItem return this; } + @Override + public IIcon getIconIndex(ItemStack p_77650_1_) { + return FCPartsTexture.PartTerminalBroad.getIcon(); + } + public void registerIcons(IIconRegister _iconRegister) {} @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidStorageMonitor.java b/src/main/java/com/glodblock/github/common/item/ItemFluidStorageMonitor.java index c5d0b33f..4c1c4730 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidStorageMonitor.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidStorageMonitor.java @@ -3,9 +3,11 @@ package com.glodblock.github.common.item; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; import net.minecraft.world.World; import com.glodblock.github.FluidCraft; +import com.glodblock.github.client.textures.FCPartsTexture; import com.glodblock.github.common.parts.PartFluidStorageMonitor; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.util.NameConst; @@ -37,6 +39,11 @@ public class ItemFluidStorageMonitor extends FCBaseItem implements IPartItem { return this; } + @Override + public IIcon getIconIndex(ItemStack p_77650_1_) { + return FCPartsTexture.PartTerminalBroad.getIcon(); + } + public void registerIcons(IIconRegister _iconRegister) {} @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/glodblock/github/common/item/ItemFluidVoidStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemFluidVoidStorageCell.java index 599630dd..0ea3443b 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemFluidVoidStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemFluidVoidStorageCell.java @@ -1,11 +1,13 @@ package com.glodblock.github.common.item; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import com.glodblock.github.FluidCraft; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.loader.IRegister; import com.glodblock.github.util.NameConst; -import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEStackType; import appeng.items.storage.ItemVoidStorageCell; import cpw.mods.fml.common.registry.GameRegistry; @@ -25,7 +27,7 @@ public class ItemFluidVoidStorageCell extends ItemVoidStorageCell implements IRe } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public IAEStackType getStackType() { + return FLUID_STACK_TYPE; } } diff --git a/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java b/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java index f0646c9e..b341c7a3 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemInfinityWaterStorageCell.java @@ -1,20 +1,26 @@ package com.glodblock.github.common.item; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; import static com.glodblock.github.util.Util.FluidUtil.water_bucket; import java.util.EnumSet; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + import com.glodblock.github.FluidCraft; import com.glodblock.github.common.tabs.FluidCraftingTabs; import com.glodblock.github.loader.IRegister; import com.glodblock.github.util.NameConst; import com.glodblock.github.util.Util; -import appeng.api.storage.StorageChannel; +import appeng.api.storage.IMEInventoryHandler; +import appeng.api.storage.data.IAEStackType; import appeng.core.features.AEFeature; import appeng.items.AEBaseInfiniteCell; +import appeng.me.storage.CreativeCellInventory; +import appeng.me.storage.FluidCellInventoryHandler; import appeng.tile.inventory.IAEStackInventory; import cpw.mods.fml.common.registry.GameRegistry; @@ -62,7 +68,12 @@ public class ItemInfinityWaterStorageCell extends AEBaseInfiniteCell } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public @NotNull IAEStackType getStackType() { + return FLUID_STACK_TYPE; + } + + @Override + public IMEInventoryHandler getCellInventory(ItemStack stack) { + return new FluidCellInventoryHandler(new CreativeCellInventory<>(stack)); } } diff --git a/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java b/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java index 0dc7863e..d40f9c7e 100644 --- a/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java +++ b/src/main/java/com/glodblock/github/common/item/ItemPortableFluidCell.java @@ -1,5 +1,7 @@ package com.glodblock.github.common.item; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import java.util.List; import net.minecraft.client.gui.GuiScreen; @@ -9,6 +11,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; + import com.glodblock.github.FluidCraft; import com.glodblock.github.api.FluidCraftAPI; import com.glodblock.github.common.tabs.FluidCraftingTabs; @@ -17,9 +21,9 @@ import com.glodblock.github.util.NameConst; import com.glodblock.github.util.RenderUtil; import appeng.api.implementations.guiobjects.IGuiItemObject; -import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEStack; +import appeng.api.storage.data.IAEStackType; import appeng.items.AEBasePortableCell; import appeng.items.contents.CellUpgrades; import appeng.items.contents.PortableCellViewer; @@ -79,12 +83,12 @@ public class ItemPortableFluidCell extends AEBasePortableCell implements IRegist @Override public IGuiItemObject getGuiObject(final ItemStack is, final World w, final EntityPlayer p, final int x, final int y, final int z) { - return new PortableCellViewer(is, x, StorageChannel.FLUIDS); + return new PortableCellViewer(is, x, FLUID_STACK_TYPE); } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public @NotNull IAEStackType getStackType() { + return FLUID_STACK_TYPE; } @Override diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidConversionMonitor.java b/src/main/java/com/glodblock/github/common/parts/PartFluidConversionMonitor.java index a92043c5..29918c6a 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidConversionMonitor.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidConversionMonitor.java @@ -1,157 +1,28 @@ package com.glodblock.github.common.parts; -import java.util.Collections; -import java.util.List; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Vec3; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraft.nbt.NBTTagCompound; -import org.apache.commons.lang3.tuple.MutablePair; +import appeng.parts.reporting.PartConversionMonitor; -import com.glodblock.github.common.item.ItemFluidPacket; -import com.glodblock.github.util.Util; - -import appeng.api.config.Actionable; -import appeng.api.networking.energy.IEnergySource; -import appeng.api.networking.security.PlayerSource; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.data.IAEFluidStack; -import appeng.me.GridAccessException; -import appeng.util.InventoryAdaptor; -import appeng.util.Platform; - -public class PartFluidConversionMonitor extends PartFluidStorageMonitor { +public class PartFluidConversionMonitor extends PartConversionMonitor { public PartFluidConversionMonitor(ItemStack is) { super(is); } @Override - public boolean onPartShiftActivate(final EntityPlayer player, final Vec3 pos) { - if (Platform.isClient()) { - return true; - } - - if (!this.getProxy().isActive()) { - return false; - } - - if (!Platform.hasPermissions(this.getLocation(), player)) { - return false; - } - FluidStack fluidStack; - ItemStack item = player.getCurrentEquippedItem(); - if (item != null && item.getItem() instanceof ItemFluidPacket) { - fluidStack = ItemFluidPacket.getFluidStack(item); - } else { - fluidStack = Util.FluidUtil.getFluidFromContainer(item); - } - if (this.getDisplayed() == null || fluidStack == null - || fluidStack.getFluid() != ((IAEFluidStack) this.getDisplayed()).getFluid()) { - return false; - } - - try { - if (!this.getProxy().isActive()) { - return false; + public void readFromNBT(NBTTagCompound data) { + // Migrate old tag + if (data.hasKey("configuredItem")) { + final NBTTagCompound myItem = data.getCompoundTag("configuredItem"); + if (!myItem.hasNoTags() && !myItem.hasKey("StackType")) { + myItem.setString("StackType", FLUID_STACK_TYPE.getId()); } - final IEnergySource energy = this.getProxy().getEnergy(); - final IMEMonitor cell = this.getProxy().getStorage().getFluidInventory(); - final IAEFluidStack input = (IAEFluidStack) this.getDisplayed().copy().setStackSize(fluidStack.amount); - final IAEFluidStack failedToInsert = Platform - .poweredInsert(energy, cell, input, new PlayerSource(player, this)); - if (failedToInsert != null && failedToInsert.getStackSize() == input.getStackSize()) { - return false; - } else if (failedToInsert == null || failedToInsert.getStackSize() != input.getStackSize()) { - if (item.getItem() instanceof ItemFluidPacket) { - if (failedToInsert != null) { - player.getCurrentEquippedItem() - .setTagCompound(ItemFluidPacket.newStack(failedToInsert).getTagCompound()); - return true; - } - } else { - ItemStack tmp = item.copy(); - tmp.stackSize = 1; - ItemStack tank = null; - if (failedToInsert == null) { - tank = Util.FluidUtil.clearFluid(tmp); - } else { - if (tmp.getItem() instanceof IFluidContainerItem) { - tank = Util.FluidUtil.setFluidContainerAmount(tmp, (int) failedToInsert.getStackSize()); - } else if (FluidContainerRegistry.isContainer(tmp)) { - IAEFluidStack insertedFluid = input.copy(); - insertedFluid.decStackSize(failedToInsert.getStackSize()); - this.getProxy().getStorage().getFluidInventory() - .extractItems(insertedFluid, Actionable.MODULATE, new PlayerSource(player, this)); - return false; - } - } - if (tank != null && !player.inventory.addItemStackToInventory(tank)) { - player.entityDropItem(tank, 0); - } - } - item.stackSize--; - if (item.stackSize <= 0) { - player.inventory.setInventorySlotContents(player.inventory.currentItem, null); - } - } - - } catch (final GridAccessException ignored) {} - return true; - } - - @Override - protected void extractItem(final EntityPlayer player) { - final IAEFluidStack input = (IAEFluidStack) this.getDisplayed(); - ItemStack eq = player.getCurrentEquippedItem(); - if (input != null && Util.FluidUtil.isFluidContainer(eq) && Util.FluidUtil.isEmpty(eq)) { - try { - if (!this.getProxy().isActive()) { - return; - } - - final IEnergySource energy = this.getProxy().getEnergy(); - final IMEMonitor cell = this.getProxy().getStorage().getFluidInventory(); - ItemStack tank = eq.copy(); - tank.stackSize = 1; - MutablePair fillStack = Util.FluidUtil.fillStack(tank, input.getFluidStack()); - input.setStackSize(fillStack.left); - - final IAEFluidStack retrieved = Platform - .poweredExtraction(energy, cell, input, new PlayerSource(player, this)); - if (retrieved != null) { - if (!player.inventory.addItemStackToInventory(fillStack.right)) { - player.entityDropItem(fillStack.right.copy(), 0); - } - eq.stackSize--; - if (eq.stackSize <= 0) { - player.inventory.setInventorySlotContents(player.inventory.currentItem, null); - } - final InventoryAdaptor adaptor = InventoryAdaptor.getAdaptor(player, ForgeDirection.UNKNOWN); - ItemStack newItems = adaptor.addItems( - Util.FluidUtil.setFluidContainerAmount(fillStack.right, (int) retrieved.getStackSize())); - if (newItems != null) { - final TileEntity te = this.getTile(); - final List list = Collections.singletonList(newItems); - Platform.spawnDrops( - player.worldObj, - te.xCoord + this.getSide().offsetX, - te.yCoord + this.getSide().offsetY, - te.zCoord + this.getSide().offsetZ, - list); - } - - if (player.openContainer != null) { - player.openContainer.detectAndSendChanges(); - } - } - } catch (final GridAccessException ignored) {} } + + super.readFromNBT(data); } } diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java index bb4de3cd..c4628d04 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidExportBus.java @@ -1,5 +1,7 @@ package com.glodblock.github.common.parts; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; @@ -15,6 +17,7 @@ import appeng.api.storage.StorageName; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEStack; +import appeng.api.storage.data.IAEStackType; import appeng.me.GridAccessException; import appeng.parts.automation.PartBaseExportBus; import appeng.tile.inventory.IAEStackInventory; @@ -72,11 +75,11 @@ public class PartFluidExportBus extends PartBaseExportBus { } @Override - protected void doFuzzy(IAEFluidStack aes, FuzzyMode fzMode, InventoryAdaptor destination, IEnergyGrid energy, + protected void doFuzzy(IAEFluidStack aes, FuzzyMode fzMode, IEnergyGrid energy, IMEMonitor gridInv) {} @Override - protected void doOreDict(InventoryAdaptor destination, IEnergyGrid energy, IMEMonitor gridInv) {} + protected void doOreDict(IEnergyGrid energy, IMEMonitor gridInv) {} // legacy @Override @@ -91,4 +94,9 @@ public class PartFluidExportBus extends PartBaseExportBus { } } } + + @Override + public IAEStackType getStackType() { + return FLUID_STACK_TYPE; + } } diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java index 3a2a9850..f8371dfc 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidImportBus.java @@ -1,16 +1,16 @@ package com.glodblock.github.common.parts; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; -import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; import com.glodblock.github.client.textures.FCPartsTexture; -import com.glodblock.github.util.BlockPos; import com.glodblock.github.util.Util; import appeng.api.config.Actionable; @@ -23,6 +23,7 @@ import appeng.api.storage.StorageName; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEStack; +import appeng.api.storage.data.IAEStackType; import appeng.me.GridAccessException; import appeng.parts.automation.PartBaseImportBus; import appeng.tile.inventory.IAEStackInventory; @@ -42,18 +43,14 @@ public class PartFluidImportBus extends PartBaseImportBus { @Override protected Object getTarget() { - TileEntity self = this.getHost().getTile(); - return this.getTileEntity(self, (new BlockPos(self)).getOffSet(this.getSide())); - } + final TileEntity self = this.getHost().getTile(); + final TileEntity target = this.getTileEntity( + self, + self.xCoord + this.getSide().offsetX, + self.yCoord + this.getSide().offsetY, + self.zCoord + this.getSide().offsetZ); - private TileEntity getTileEntity(final TileEntity self, final BlockPos pos) { - final World w = self.getWorldObj(); - - if (w.getChunkProvider().chunkExists(pos.getX() >> 4, pos.getZ() >> 4)) { - return w.getTileEntity(pos.getX(), pos.getY(), pos.getZ()); - } - - return null; + return target instanceof IFluidHandler handler ? handler : null; } @Override @@ -91,6 +88,11 @@ public class PartFluidImportBus extends PartBaseImportBus { } } + @Override + protected int getAdaptorFlags() { + return InventoryAdaptor.ALLOW_FLUIDS | InventoryAdaptor.FOR_EXTRACTS; + } + @Override protected boolean importStuff(final Object myTarget, final IAEFluidStack whatToImport, final IMEMonitor inv, final IEnergySource energy, final FuzzyMode fzMode) { @@ -173,7 +175,7 @@ public class PartFluidImportBus extends PartBaseImportBus { } @Override - protected int getAdaptorFlags() { - return InventoryAdaptor.ALLOW_FLUIDS | InventoryAdaptor.FOR_EXTRACTS; + public IAEStackType getStackType() { + return FLUID_STACK_TYPE; } } diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidStorageBus.java b/src/main/java/com/glodblock/github/common/parts/PartFluidStorageBus.java index 702367ac..30fe136d 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidStorageBus.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidStorageBus.java @@ -1,8 +1,10 @@ package com.glodblock.github.common.parts; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import net.minecraft.item.ItemStack; -import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEStackType; import appeng.parts.misc.PartStorageBus; public class PartFluidStorageBus extends PartStorageBus { @@ -12,7 +14,7 @@ public class PartFluidStorageBus extends PartStorageBus { } @Override - public StorageChannel getStorageChannel() { - return StorageChannel.FLUIDS; + public IAEStackType getStackType() { + return FLUID_STACK_TYPE; } } diff --git a/src/main/java/com/glodblock/github/common/parts/PartFluidStorageMonitor.java b/src/main/java/com/glodblock/github/common/parts/PartFluidStorageMonitor.java index 25089861..f20a74e9 100644 --- a/src/main/java/com/glodblock/github/common/parts/PartFluidStorageMonitor.java +++ b/src/main/java/com/glodblock/github/common/parts/PartFluidStorageMonitor.java @@ -1,36 +1,28 @@ package com.glodblock.github.common.parts; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; + import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; -import com.glodblock.github.common.parts.base.FCPartMonitor; +import appeng.parts.reporting.PartStorageMonitor; -import appeng.client.texture.CableBusTextures; -import appeng.helpers.Reflected; +public class PartFluidStorageMonitor extends PartStorageMonitor { -public class PartFluidStorageMonitor extends FCPartMonitor { - - private static final CableBusTextures FRONT_BRIGHT_ICON = CableBusTextures.PartStorageMonitor_Bright; - private static final CableBusTextures FRONT_DARK_ICON = CableBusTextures.PartStorageMonitor_Dark; - private static final CableBusTextures FRONT_COLORED_ICON = CableBusTextures.PartStorageMonitor_Colored; - private static final CableBusTextures FRONT_COLORED_ICON_LOCKED = CableBusTextures.PartStorageMonitor_Colored_Locked; - - @Reflected - public PartFluidStorageMonitor(final ItemStack is) { + public PartFluidStorageMonitor(ItemStack is) { super(is); } @Override - public CableBusTextures getFrontBright() { - return FRONT_BRIGHT_ICON; - } + public void readFromNBT(NBTTagCompound data) { + // Migrate old tag + if (data.hasKey("configuredItem")) { + final NBTTagCompound myItem = data.getCompoundTag("configuredItem"); + if (!myItem.hasNoTags() && !myItem.hasKey("StackType")) { + myItem.setString("StackType", FLUID_STACK_TYPE.getId()); + } + } - @Override - public CableBusTextures getFrontColored() { - return this.isLocked() ? FRONT_COLORED_ICON_LOCKED : FRONT_COLORED_ICON; - } - - @Override - public CableBusTextures getFrontDark() { - return FRONT_DARK_ICON; + super.readFromNBT(data); } } diff --git a/src/main/java/com/glodblock/github/common/tile/TileLevelMaintainer.java b/src/main/java/com/glodblock/github/common/tile/TileLevelMaintainer.java index 60c21155..bf91e8c2 100644 --- a/src/main/java/com/glodblock/github/common/tile/TileLevelMaintainer.java +++ b/src/main/java/com/glodblock/github/common/tile/TileLevelMaintainer.java @@ -18,7 +18,6 @@ import org.jetbrains.annotations.Nullable; import com.glodblock.github.common.Config; import com.glodblock.github.common.item.ItemFluidDrop; import com.glodblock.github.crossmod.thaumcraft.ThaumicEnergisticsCrafting; -import com.glodblock.github.util.ModAndClassUtil; import com.google.common.collect.ImmutableSet; import appeng.api.AEApi; @@ -45,11 +44,10 @@ 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.IMEMonitor; import appeng.api.storage.StorageName; -import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEStack; -import appeng.api.storage.data.IItemList; import appeng.core.AELog; import appeng.me.GridAccessException; import appeng.tile.TileEvent; @@ -99,30 +97,35 @@ public class TileLevelMaintainer extends AENetworkTile } @Override - public IAEItemStack injectCraftedItems(ICraftingLink link, IAEItemStack items, Actionable mode) { + @SuppressWarnings({ "unchecked", "rawtypes" }) + public IAEStack injectCraftedItems(ICraftingLink link, IAEStack stack, Actionable mode) { int idx = this.getRequestIndexByLink(link); try { if (getProxy().isActive()) { final IEnergyGrid energy = getProxy().getEnergy(); - final double power = Math - .ceil(ItemFluidDrop.isFluidStack(items) ? items.getStackSize() / 1000D : items.getStackSize()); - if (energy.extractAEPower(power, mode, PowerMultiplier.CONFIG) > power - 0.01) { - if (ItemFluidDrop.isFluidStack(items)) { - IAEFluidStack notInjectedItems = getProxy().getStorage().getFluidInventory() - .injectItems(ItemFluidDrop.getAeFluidStack(items), mode, source); - if (notInjectedItems != null) { - items.setStackSize(notInjectedItems.getStackSize()); - if (idx != -1) { - this.updateState(idx, LevelState.Export); - } + final double power = Math.ceil((double) stack.getStackSize() / stack.getAmountPerUnit()); - return items; - } else { - return null; - } + if (energy.extractAEPower(power, mode, PowerMultiplier.CONFIG) > power - 0.01) { + IMEMonitor monitor = getProxy().getStorage().getMEMonitor(stack.getStackType()); + if (monitor == null) return stack; + + IAEStack notInjected; + if (stack instanceof IAEItemStack ais && ItemFluidDrop.isFluidStack(ais)) { + notInjected = getProxy().getStorage().getFluidInventory() + .injectItems(ItemFluidDrop.getAeFluidStack(ais), mode, source); } else { - return getProxy().getStorage().getItemInventory().injectItems(items, mode, source); + notInjected = monitor.injectItems(stack, mode, source); + } + + if (notInjected != null) { + if (idx != -1) { + this.updateState(idx, LevelState.Export); + } + + return notInjected; + } else { + return null; } } } @@ -130,7 +133,7 @@ public class TileLevelMaintainer extends AENetworkTile AELog.debug(e); } - return items; + return stack; } @Override @@ -162,8 +165,6 @@ public class TileLevelMaintainer extends AENetworkTile try { final ICraftingGrid craftingGrid = getProxy().getCrafting(); final IGrid grid = getProxy().getGrid(); - final IItemList invItems = getProxy().getStorage().getItemInventory().getStorageList(); - final IItemList invFluid = getProxy().getStorage().getFluidInventory().getStorageList(); // Check there are available crafting CPUs before doing any work. // This hopefully stops level maintainers busy-looping calculating @@ -196,32 +197,17 @@ public class TileLevelMaintainer extends AENetworkTile continue; } - IAEStack aeItem = null; - IAEStack craftItem = requests[i].stack.copy(); craftItem.setStackSize(batchSize); + IMEMonitor monitor = getProxy().getStorage().getMEMonitor(craftItem.getStackType()); + if (monitor == null) continue; - if (craftItem instanceof IAEItemStack ais) { - if (ModAndClassUtil.ThE && ThaumicEnergisticsCrafting.isAspectStack(ais.getItemStack())) { - aeItem = ThaumicEnergisticsCrafting.convertAspectStack(ais); - } else { - aeItem = invItems.findPrecise(ais); - } - } else if (craftItem instanceof IAEFluidStack afs) { - aeItem = invFluid.findPrecise(afs); - } + IAEStack stackInStorage = monitor.getStorageList().findPrecise(craftItem); - long stackSize = aeItem == null ? 0 : aeItem.getStackSize(); - - if (ModAndClassUtil.ThE) { - if (aeItem instanceof IAEItemStack ais - && ThaumicEnergisticsCrafting.isAspectStack(ais.getItemStack())) { - stackSize = ThaumicEnergisticsCrafting.getEssentiaAmount(ais, grid); - } - } + long stackSize = stackInStorage == null ? 0 : stackInStorage.getStackSize(); boolean isDone = this.isDone(i); - boolean isCraftable = aeItem != null && aeItem.isCraftable(); + boolean isCraftable = stackInStorage != null && stackInStorage.isCraftable(); boolean shouldCraft = isCraftable && stackSize < quantity; if (isDone) { @@ -240,11 +226,11 @@ public class TileLevelMaintainer extends AENetworkTile continue; } - if (craftingGrid.canEmitFor(aeItem)) { + if (craftingGrid.canEmitFor(stackInStorage)) { continue; } - if (craftingGrid.isRequesting(aeItem)) { + if (craftingGrid.isRequesting(stackInStorage)) { continue; } @@ -289,7 +275,7 @@ public class TileLevelMaintainer extends AENetworkTile // No jobs to submit, start calculating some item. requests[itemToBeginIdx].job = craftingGrid - .beginCraftingJob(getWorldObj(), grid, source, itemToBegin, null); + .beginCraftingJob(this.worldObj, grid, source, itemToBegin, null); this.updateState(itemToBeginIdx, LevelState.Craft); // Try the next item next time. @@ -644,6 +630,10 @@ public class TileLevelMaintainer extends AENetworkTile if (stack == null) { throw new IllegalArgumentException("ItemStack cannot be null!"); } + + // Migrate old aspect stack + stack = ThaumicEnergisticsCrafting.convertItemAspectStack(stack); + quantity = tag.getLong(NBT_QUANTITY); batchSize = tag.getLong(NBT_BATCH); enable = tag.getBoolean(NBT_ENABLE); @@ -660,6 +650,10 @@ public class TileLevelMaintainer extends AENetworkTile public void loadFromNBT(NBTTagCompound tag) { stack = Platform.readStackNBT(tag.getCompoundTag(NBT_STACK), true); + + // Migrate old aspect stack + stack = ThaumicEnergisticsCrafting.convertItemAspectStack(stack); + quantity = tag.getLong(NBT_QUANTITY); batchSize = tag.getLong(NBT_BATCH); enable = tag.getBoolean(NBT_ENABLE); diff --git a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java b/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java deleted file mode 100644 index ebd48a06..00000000 --- a/src/main/java/com/glodblock/github/coremod/FCClassTransformer.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.glodblock.github.coremod; - -import net.minecraft.launchwrapper.IClassTransformer; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.objectweb.asm.ClassReader; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; - -import com.glodblock.github.coremod.transform.ExternalStorageRegistryTransformer; -import com.glodblock.github.coremod.transform.GuiCraftingTransformer; -import com.glodblock.github.coremod.transform.NEITransformer; -import com.gtnewhorizon.gtnhlib.asm.ASMUtil; - -public class FCClassTransformer implements IClassTransformer { - - private static final Logger logger = LogManager.getLogger("ASM AE2FC"); - - @Override - public byte[] transform(String name, String transformedName, byte[] basicClass) { - ClassMapper tform; - switch (transformedName) { - case "appeng.client.gui.implementations.GuiCraftingCPU", "appeng.client.gui.implementations.GuiCraftConfirm", "net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftConfirm", "appeng.client.gui.widgets.GuiCraftingTree" -> tform = GuiCraftingTransformer.INSTANCE; - case "appeng.integration.modules.NEI" -> tform = NEITransformer.INSTANCE; - case "appeng.core.features.registries.ExternalStorageRegistry" -> tform = ExternalStorageRegistryTransformer.INSTANCE; - default -> { - return basicClass; - } - } - logger.debug("Transforming class: " + transformedName); - final byte[] bytes = tform.transformClass(basicClass); - if (FluidCraftCore.DUMP_CLASSES()) { - ASMUtil.saveAsRawClassFile(basicClass, transformedName + "_PRE", this); - ASMUtil.saveAsRawClassFile(bytes, transformedName + "_POST", this); - } - return bytes; - } - - public abstract static class ClassMapper { - - public final byte[] transformClass(byte[] code) { - ClassReader reader = new ClassReader(code); - ClassWriter writer = new ClassWriter(reader, getWriteFlags()); - reader.accept(getClassMapper(writer), ClassReader.EXPAND_FRAMES); - return writer.toByteArray(); - } - - protected int getWriteFlags() { - return 0; - } - - protected abstract ClassVisitor getClassMapper(ClassVisitor downstream); - } -} diff --git a/src/main/java/com/glodblock/github/coremod/FluidCraftCore.java b/src/main/java/com/glodblock/github/coremod/FluidCraftCore.java deleted file mode 100644 index 6f9b97a9..00000000 --- a/src/main/java/com/glodblock/github/coremod/FluidCraftCore.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.glodblock.github.coremod; - -import java.util.Map; - -import javax.annotation.Nullable; - -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; - -@IFMLLoadingPlugin.Name("FluidCraftCore") -@IFMLLoadingPlugin.MCVersion("1.7.10") -@IFMLLoadingPlugin.TransformerExclusions("com.glodblock.github.coremod") -public class FluidCraftCore implements IFMLLoadingPlugin { - - private static final boolean DUMP_CLASSES = Boolean.parseBoolean(System.getProperty("ae2fc.dumpClass", "false")); - private static boolean OBF_ENV; - - @Override - public String[] getASMTransformerClass() { - return new String[] { FCClassTransformer.class.getName() }; - } - - @Nullable - @Override - public String getModContainerClass() { - return null; - } - - @Nullable - @Override - public String getSetupClass() { - return null; - } - - @Override - public void injectData(Map data) { - OBF_ENV = (boolean) data.get("runtimeDeobfuscationEnabled"); - } - - @Nullable - @Override - public String getAccessTransformerClass() { - return null; - } - - public static boolean DUMP_CLASSES() { - return DUMP_CLASSES || !OBF_ENV; - } -} diff --git a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java deleted file mode 100644 index 7a98dd7b..00000000 --- a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooks.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.glodblock.github.coremod.hooker; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.common.item.ItemFluidDrop; -import com.glodblock.github.common.item.ItemFluidPacket; - -import appeng.api.storage.data.IAEItemStack; -import appeng.client.gui.IGuiTooltipHandler; - -public class CoreModHooks { - - public static ItemStack displayFluid(IAEItemStack aeStack) { - if (aeStack.getItemStack() != null && aeStack.getItemStack().getItem() instanceof ItemFluidDrop) { - FluidStack fluid = ItemFluidDrop.getFluidStack(aeStack.getItemStack()); - return ItemFluidPacket.newDisplayStack(fluid); - } else return aeStack.getItemStack(); - } - - public static ItemStack getStackUnderMouse(GuiContainer gui, int mousex, int mousey) { - if (gui instanceof IGuiTooltipHandler guiTooltipHandler) { - return guiTooltipHandler.getHoveredStack(); - } - return null; - } -} diff --git a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java b/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java deleted file mode 100644 index bf94e47f..00000000 --- a/src/main/java/com/glodblock/github/coremod/hooker/CoreModHooksClient.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.glodblock.github.coremod.hooker; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class CoreModHooksClient { - -} diff --git a/src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java deleted file mode 100644 index 0ad99cc6..00000000 --- a/src/main/java/com/glodblock/github/coremod/transform/ExternalStorageRegistryTransformer.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.glodblock.github.coremod.transform; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import com.glodblock.github.coremod.FCClassTransformer; - -public class ExternalStorageRegistryTransformer extends FCClassTransformer.ClassMapper { - - public static final ExternalStorageRegistryTransformer INSTANCE = new ExternalStorageRegistryTransformer(); - - private ExternalStorageRegistryTransformer() { - // NO-OP - } - - @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { - return new TransformExternalStorageRegistry(Opcodes.ASM5, downstream); - } - - @Override - protected int getWriteFlags() { - return ClassWriter.COMPUTE_FRAMES; - } - - private static class TransformExternalStorageRegistry extends ClassVisitor { - - public TransformExternalStorageRegistry(int api, ClassVisitor cv) { - super(api, cv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if ("getHandler".equals(name)) { - return new TransformGetHandler(api, super.visitMethod(access, name, desc, signature, exceptions)); - } else { - return super.visitMethod(access, name, desc, signature, exceptions); - } - } - } - - private static class TransformGetHandler extends MethodVisitor { - - private int cnt_return = 0; - private int cnt_if = 0; - private Label L6 = null; - private final Label L9 = new Label(); - - TransformGetHandler(int api, MethodVisitor mv) { - super(api, mv); - } - - @Override - public void visitJumpInsn(int opcode, Label label) { - if (opcode == Opcodes.IFEQ) { - cnt_if++; - } - if (cnt_if == 3) { - L6 = label; - cnt_if++; - super.visitJumpInsn(opcode, L9); - return; - } - super.visitJumpInsn(opcode, label); - } - - @Override - public void visitInsn(int opcode) { - if (opcode == Opcodes.ARETURN) { - cnt_return++; - } - super.visitInsn(opcode); - if (cnt_return == 2) { - super.visitLabel(L9); - super.visitFieldInsn( - Opcodes.GETSTATIC, - "com/glodblock/github/inventory/external/AEFluidTankHandler", - "INSTANCE", - "Lcom/glodblock/github/inventory/external/AEFluidTankHandler;"); - super.visitVarInsn(Opcodes.ALOAD, 1); - super.visitVarInsn(Opcodes.ALOAD, 2); - super.visitVarInsn(Opcodes.ALOAD, 3); - super.visitVarInsn(Opcodes.ALOAD, 4); - super.visitMethodInsn( - Opcodes.INVOKEVIRTUAL, - "com/glodblock/github/inventory/external/AEFluidTankHandler", - "canHandle", - "(Lnet/minecraft/tileentity/TileEntity;Lnet/minecraftforge/common/util/ForgeDirection;Lappeng/api/storage/StorageChannel;Lappeng/api/networking/security/BaseActionSource;)Z", - false); - super.visitJumpInsn(Opcodes.IFEQ, L6); - super.visitFieldInsn( - Opcodes.GETSTATIC, - "com/glodblock/github/inventory/external/AEFluidTankHandler", - "INSTANCE", - "Lcom/glodblock/github/inventory/external/AEFluidTankHandler;"); - super.visitInsn(Opcodes.ARETURN); - cnt_return++; - } - } - } -} diff --git a/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java b/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java deleted file mode 100644 index da1874e3..00000000 --- a/src/main/java/com/glodblock/github/coremod/transform/GuiCraftingTransformer.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.glodblock.github.coremod.transform; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import com.glodblock.github.coremod.FCClassTransformer; - -public class GuiCraftingTransformer extends FCClassTransformer.ClassMapper { - - public static final GuiCraftingTransformer INSTANCE = new GuiCraftingTransformer(); - - private GuiCraftingTransformer() { - // NO-OP - } - - @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { - return new TransformGuiCrafting(Opcodes.ASM5, downstream); - } - - private static class TransformGuiCrafting extends ClassVisitor { - - TransformGuiCrafting(int api, ClassVisitor cv) { - super(api, cv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - if ("drawFG".equals(name) || "drawListFG".equals(name) || "drawStack".equals(name)) { - return new TransformFluidIcon(api, super.visitMethod(access, name, desc, signature, exceptions)); - } - return super.visitMethod(access, name, desc, signature, exceptions); - } - } - - private static class TransformFluidIcon extends MethodVisitor { - - TransformFluidIcon(int api, MethodVisitor mv) { - super(api, mv); - } - - @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { - if (opcode == Opcodes.INVOKEINTERFACE && owner.equals("appeng/api/storage/data/IAEItemStack") - && name.equals("getItemStack")) { - super.visitMethodInsn( - Opcodes.INVOKESTATIC, - "com/glodblock/github/coremod/hooker/CoreModHooks", - "displayFluid", - "(Lappeng/api/storage/data/IAEItemStack;)Lnet/minecraft/item/ItemStack;", - false); - } else { - super.visitMethodInsn(opcode, owner, name, desc, itf); - } - } - } -} diff --git a/src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java b/src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java deleted file mode 100644 index 6c8a8dc7..00000000 --- a/src/main/java/com/glodblock/github/coremod/transform/NEITransformer.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.glodblock.github.coremod.transform; - -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; -import org.objectweb.asm.Opcodes; - -import com.glodblock.github.coremod.FCClassTransformer; - -public class NEITransformer extends FCClassTransformer.ClassMapper { - - public static final NEITransformer INSTANCE = new NEITransformer(); - - private NEITransformer() { - // NO-OP - } - - @Override - protected ClassVisitor getClassMapper(ClassVisitor downstream) { - return new TransformNEI(Opcodes.ASM5, downstream); - } - - private static class TransformNEI extends ClassVisitor { - - TransformNEI(int api, ClassVisitor cv) { - super(api, cv); - } - - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - return switch (name) { - case "getStackUnderMouse" -> new TransformStackUnderMouse( - api, - super.visitMethod(access, name, desc, signature, exceptions)); - default -> super.visitMethod(access, name, desc, signature, exceptions); - }; - } - } - - private static class TransformStackUnderMouse extends MethodVisitor { - - TransformStackUnderMouse(int api, MethodVisitor mv) { - super(api, mv); - } - - @Override - public void visitInsn(int opcode) { - if (opcode == Opcodes.ACONST_NULL) { - super.visitVarInsn(Opcodes.ALOAD, 1); - super.visitVarInsn(Opcodes.ILOAD, 2); - super.visitVarInsn(Opcodes.ILOAD, 3); - super.visitMethodInsn( - Opcodes.INVOKESTATIC, - "com/glodblock/github/coremod/hooker/CoreModHooks", - "getStackUnderMouse", - "(Lnet/minecraft/client/gui/inventory/GuiContainer;II)Lnet/minecraft/item/ItemStack;", - false); - return; - } - super.visitInsn(opcode); - } - } -} diff --git a/src/main/java/com/glodblock/github/crossmod/thaumcraft/AspectRender.java b/src/main/java/com/glodblock/github/crossmod/thaumcraft/AspectRender.java deleted file mode 100644 index 46260a09..00000000 --- a/src/main/java/com/glodblock/github/crossmod/thaumcraft/AspectRender.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.glodblock.github.crossmod.thaumcraft; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; - -import com.glodblock.github.util.RenderUtil; - -import thaumcraft.api.aspects.Aspect; -import thaumcraft.client.lib.UtilsFX; - -public class AspectRender { - - public static final ResourceLocation UNKNOWN_TEXTURE = new ResourceLocation( - "thaumcraft", - "textures/aspects/_unknown.png"); - - public static void drawAspect(EntityPlayer player, int posX, int posY, float zLevel, Aspect aspect, long amount) { - if (aspect == null || amount <= 0) { - return; - } - if (AspectUtil.isPlayerDiscoveredAspect(player, aspect)) { - UtilsFX.drawTag(posX, posY, aspect, 0, 0, zLevel); - } else { - Minecraft.getMinecraft().renderEngine.bindTexture(UNKNOWN_TEXTURE); - RenderUtil.setGLColorFromInt(aspect.getColor()); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - UtilsFX.drawTexturedQuadFull(posX, posY, zLevel); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_BLEND); - } - } - -} diff --git a/src/main/java/com/glodblock/github/crossmod/thaumcraft/AspectUtil.java b/src/main/java/com/glodblock/github/crossmod/thaumcraft/AspectUtil.java deleted file mode 100644 index 74560a9c..00000000 --- a/src/main/java/com/glodblock/github/crossmod/thaumcraft/AspectUtil.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.glodblock.github.crossmod.thaumcraft; - -import java.util.Objects; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.MutablePair; - -import appeng.api.storage.data.IAEFluidStack; -import appeng.util.item.AEFluidStack; -import cpw.mods.fml.common.Optional; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.IEssentiaContainerItem; -import thaumcraft.common.Thaumcraft; -import thaumicenergistics.api.ThEApi; -import thaumicenergistics.api.storage.IAspectStack; -import thaumicenergistics.common.fluids.GaseousEssentia; -import thaumicenergistics.common.integration.tc.EssentiaItemContainerHelper; -import thaumicenergistics.common.storage.AspectStack; - -public class AspectUtil { - - public static final EssentiaItemContainerHelper HELPER = EssentiaItemContainerHelper.INSTANCE; - public static int R = 128; - - @Optional.Method(modid = "thaumicenergistics") - public static void init() { - R = ThEApi.instance().config().conversionMultiplier(); - } - - public static boolean isPlayerDiscoveredAspect(final EntityPlayer player, final Aspect aspect) { - if (player != null && aspect != null) { - return Thaumcraft.proxy.getPlayerKnowledge().hasDiscoveredAspect(player.getCommandSenderName(), aspect); - } - return false; - } - - public static boolean isEssentiaGas(Fluid fluid) { - return fluid instanceof GaseousEssentia; - } - - public static boolean isEssentiaGas(FluidStack fluid) { - return fluid != null && fluid.getFluid() instanceof GaseousEssentia; - } - - public static boolean isEssentiaGas(IAEFluidStack fluid) { - return fluid != null && fluid.getFluid() instanceof GaseousEssentia; - } - - public static Aspect getAspectFromGas(FluidStack fluid) { - if (!isEssentiaGas(fluid)) { - return null; - } - GaseousEssentia gas = (GaseousEssentia) fluid.getFluid(); - return gas.getAspect(); - } - - public static Aspect getAspectFromJar(ItemStack stack) { - if (isEssentiaContainer(stack)) { - return HELPER.getAspectInContainer(stack); - } - return null; - } - - public static Aspect getAspectFromGas(IAEFluidStack fluid) { - if (isEssentiaGas(fluid)) { - return null; - } - GaseousEssentia gas = (GaseousEssentia) fluid.getFluid(); - return gas.getAspect(); - } - - public static FluidStack getGasFromAspect(IAspectStack aspectStack) { - if (aspectStack == null || aspectStack.isEmpty()) return null; - return new FluidStack( - GaseousEssentia.getGasFromAspect(aspectStack.getAspect()), - (int) aspectStack.getStackSize() * R); - } - - public static boolean isEssentiaContainer(ItemStack stack) { - return HELPER.getItemType(stack) != EssentiaItemContainerHelper.AspectItemType.Invalid - && HELPER.getItemType(stack) != EssentiaItemContainerHelper.AspectItemType.ItemAspect; - } - - public static AEFluidStack getAEGasFromContainer(ItemStack stack) { - if (isEssentiaContainer(stack) && !isEmptyEssentiaContainer(stack)) { - IAspectStack aspectStack = HELPER.getAspectStackFromContainer(stack); - aspectStack.setStackSize(stack.stackSize * aspectStack.getStackSize()); - FluidStack gas = getGasFromAspect(aspectStack); - return AEFluidStack.create(gas); - } - return null; - } - - public static boolean isEmptyEssentiaContainer(ItemStack stack) { - return HELPER.isContainerEmpty(stack) && isEssentiaContainer(stack); - } - - public static ItemStack setAspectAmount(ItemStack itemStack, int amount, Aspect aspect) { - if (isEssentiaContainer(itemStack)) { - IEssentiaContainerItem container = (IEssentiaContainerItem) itemStack.getItem(); - assert container != null; - container.getAspects(itemStack).aspects.put(aspect, amount); - return itemStack; - } - return null; - } - - public static MutablePair fillEssentiaFromGas(ItemStack itemStack, FluidStack fluid) { - if (isEssentiaContainer(itemStack) && isEssentiaGas(fluid)) { - if (itemStack.stackSize != 1) { - return null; - } - Aspect aspect = getAspectFromGas(fluid); - int amount = fluid.amount / R; - EssentiaItemContainerHelper.AspectItemType iType = HELPER.getItemType(itemStack); - if (iType == EssentiaItemContainerHelper.AspectItemType.JarLabel) { - ItemStack label = itemStack.copy(); - HELPER.setLabelAspect(label, aspect); - } - int cap = HELPER.getContainerCapacity(itemStack); - int tryFill = Math.min(cap, amount); - ImmutablePair result = HELPER - .injectIntoContainer(itemStack, new AspectStack(aspect, tryFill)); - return result != null ? new MutablePair<>(result.left * R, result.right) : null; - } - return null; - } - - public static MutablePair drainEssentiaFromGas(ItemStack itemStack, FluidStack fluid) { - if (isEssentiaContainer(itemStack) && isEssentiaGas(fluid)) { - Aspect aspect = getAspectFromGas(fluid); - int amount = fluid.amount / R; - IAspectStack contents = HELPER.getAspectStackFromContainer(itemStack); - int drained; - ItemStack stack = null; - if (contents == null || !Objects.equals(contents.getAspect(), aspect)) { - drained = 0; - } else { - ImmutablePair result = HELPER - .extractFromContainer(itemStack, new AspectStack(aspect, amount)); - drained = result == null ? 0 : result.left; - stack = result == null ? null : result.right; - } - return stack == null ? null : new MutablePair<>(drained * R, stack); - } - return null; - } - -} diff --git a/src/main/java/com/glodblock/github/crossmod/thaumcraft/ThaumicEnergisticsCrafting.java b/src/main/java/com/glodblock/github/crossmod/thaumcraft/ThaumicEnergisticsCrafting.java index 7e2510d9..ccb3d833 100644 --- a/src/main/java/com/glodblock/github/crossmod/thaumcraft/ThaumicEnergisticsCrafting.java +++ b/src/main/java/com/glodblock/github/crossmod/thaumcraft/ThaumicEnergisticsCrafting.java @@ -1,7 +1,5 @@ package com.glodblock.github.crossmod.thaumcraft; -import java.util.Objects; - import javax.annotation.Nullable; import net.minecraft.item.Item; @@ -11,14 +9,13 @@ import net.minecraft.nbt.NBTTagList; import com.glodblock.github.util.ModAndClassUtil; -import appeng.api.networking.IGrid; import appeng.api.storage.data.IAEItemStack; -import appeng.util.item.AEItemStack; +import appeng.api.storage.data.IAEStack; import cpw.mods.fml.common.Optional.Method; import cpw.mods.fml.common.registry.GameRegistry; import thaumcraft.api.aspects.Aspect; -import thaumicenergistics.api.grid.IEssentiaGrid; import thaumicenergistics.common.items.ItemCraftingAspect; +import thaumicenergistics.common.storage.AEEssentiaStack; public class ThaumicEnergisticsCrafting { @@ -39,6 +36,17 @@ public class ThaumicEnergisticsCrafting { return stack.getItem() == neiAddonAspect || stack.getItem() == thaumicEnergisticsAspect; } + public static IAEStack convertItemAspectStack(IAEStack stack) { + if (stack instanceof IAEItemStack ais && isAspectStack(ais.getItemStack())) { + Aspect aspect = getAspect(ais.getItemStack()); + if (aspect == null) return stack; + + return new AEEssentiaStack(aspect, stack.getStackSize()); + } else { + return stack; + } + } + @Method(modid = "thaumicenergistics") private static @Nullable Aspect getAspect(ItemStack stack) { if (stack == null) return null; @@ -59,53 +67,4 @@ public class ThaumicEnergisticsCrafting { return null; } - - @Method(modid = "thaumicenergistics") - private static ItemStack getAspectStack(Aspect aspect, int stackSize) { - return ItemCraftingAspect.createStackForAspect(aspect, stackSize); - } - - /** - * Converts an aspect stack into a thaumic energistics stack. - */ - public static IAEItemStack convertAspectStack(IAEItemStack stack) { - if (ModAndClassUtil.ThE) { - return convertAspectStackImpl(stack); - } else { - return stack; - } - } - - @Method(modid = "thaumicenergistics") - private static IAEItemStack convertAspectStackImpl(IAEItemStack stack) { - if (stack == null) return null; - - Aspect aspect = getAspect(stack.getItemStack()); - - if (aspect == null) return stack; - - return Objects.requireNonNull(AEItemStack.create(getAspectStack(aspect, 1))).setStackSize(stack.getStackSize()); - } - - /** - * Gets the amount of essentia stored in a grid for a given aspect preview. - */ - public static long getEssentiaAmount(IAEItemStack stack, IGrid grid) { - if (ModAndClassUtil.ThE) { - return getEssentiaAmountImpl(stack, grid); - } else { - return 0; - } - } - - @Method(modid = "thaumicenergistics") - private static long getEssentiaAmountImpl(IAEItemStack stack, IGrid grid) { - Aspect aspect = getAspect(stack.getItemStack()); - - if (aspect == null) return 0; - - IEssentiaGrid essentiaGrid = grid.getCache(IEssentiaGrid.class); - - return essentiaGrid.getEssentiaAmount(aspect); - } } diff --git a/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java index b36d9848..52d07723 100644 --- a/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java +++ b/src/main/java/com/glodblock/github/crossmod/waila/PartWailaDataProvider.java @@ -10,7 +10,6 @@ import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import com.glodblock.github.crossmod.waila.part.FluidInvWailaDataProvider; -import com.glodblock.github.crossmod.waila.part.FluidMonitorWailaDataProvider; import com.glodblock.github.crossmod.waila.part.SpeedWailaDataProvider; import com.google.common.base.Optional; import com.google.common.collect.Lists; @@ -32,8 +31,7 @@ public class PartWailaDataProvider implements IWailaDataProvider { public PartWailaDataProvider() { final IPartWailaDataProvider speed = new SpeedWailaDataProvider(); final IPartWailaDataProvider fluidInv = new FluidInvWailaDataProvider(); - final IPartWailaDataProvider fluidMonitor = new FluidMonitorWailaDataProvider(); - this.providers = Lists.newArrayList(speed, fluidInv, fluidMonitor); + this.providers = Lists.newArrayList(speed, fluidInv); } @Override diff --git a/src/main/java/com/glodblock/github/crossmod/waila/part/FluidMonitorWailaDataProvider.java b/src/main/java/com/glodblock/github/crossmod/waila/part/FluidMonitorWailaDataProvider.java deleted file mode 100644 index ad85f6f2..00000000 --- a/src/main/java/com/glodblock/github/crossmod/waila/part/FluidMonitorWailaDataProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.glodblock.github.crossmod.waila.part; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import com.glodblock.github.common.parts.base.FCPartMonitor; -import com.glodblock.github.crossmod.waila.Tooltip; -import com.glodblock.github.util.Util; - -import appeng.api.parts.IPart; -import appeng.api.storage.data.IAEFluidStack; -import appeng.integration.modules.waila.part.BasePartWailaDataProvider; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class FluidMonitorWailaDataProvider extends BasePartWailaDataProvider { - - private final String key = "fluidStore"; - - @Override - public List getWailaBody(final IPart part, final List currentToolTip, - final IWailaDataAccessor accessor, final IWailaConfigHandler config) { - if (part instanceof FCPartMonitor && accessor.getNBTData().hasKey(key)) { - IAEFluidStack iaeFluidStack = Util.loadFluidStackFromNBT(accessor.getNBTData().getCompoundTag(key)); - if (iaeFluidStack != null) currentToolTip.add( - Tooltip.fluidFormat( - iaeFluidStack.getFluidStack().getLocalizedName(), - iaeFluidStack.getStackSize())); - } - 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 FCPartMonitor && ((FCPartMonitor) part).getAEStoreFluidStack() != null) { - NBTTagCompound data = new NBTTagCompound(); - ((FCPartMonitor) part).getAEStoreFluidStack().writeToNBT(data); - tag.setTag(key, data); - } - return tag; - } -} diff --git a/src/main/java/com/glodblock/github/inventory/MEMonitorIFluidHandler.java b/src/main/java/com/glodblock/github/inventory/MEMonitorIFluidHandler.java deleted file mode 100644 index e1ced089..00000000 --- a/src/main/java/com/glodblock/github/inventory/MEMonitorIFluidHandler.java +++ /dev/null @@ -1,262 +0,0 @@ -package com.glodblock.github.inventory; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import javax.annotation.Nonnull; - -import net.minecraft.event.ClickEvent; -import net.minecraft.event.HoverEvent; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatStyle; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import appeng.api.AEApi; -import appeng.api.config.AccessRestriction; -import appeng.api.config.Actionable; -import appeng.api.config.StorageFilter; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.ticking.TickRateModulation; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.IMEMonitorHandlerReceiver; -import appeng.api.storage.StorageChannel; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IAEStack; -import appeng.api.storage.data.IItemList; -import appeng.core.AELog; -import appeng.util.item.AEFluidStack; - -public class MEMonitorIFluidHandler implements IMEMonitor { - - private static boolean WrongFluidRemovedWarnIssued = false; - - private final IFluidHandler handler; - private final ForgeDirection side; - private IItemList cache = AEApi.instance().storage().createFluidList(); - private final HashMap listeners = new HashMap<>(); - private BaseActionSource mySource; - private StorageFilter mode; - private boolean init = false; - - public MEMonitorIFluidHandler(IFluidHandler handler, ForgeDirection side) { - this.mode = StorageFilter.EXTRACTABLE_ONLY; - this.handler = handler; - this.side = side; - } - - public MEMonitorIFluidHandler(IFluidHandler handler) { - this.mode = StorageFilter.EXTRACTABLE_ONLY; - this.handler = handler; - this.side = ForgeDirection.UNKNOWN; - } - - public void addListener(IMEMonitorHandlerReceiver l, Object verificationToken) { - this.listeners.put(l, verificationToken); - } - - public void removeListener(IMEMonitorHandlerReceiver l) { - this.listeners.remove(l); - } - - public IAEFluidStack injectItems(IAEFluidStack input, Actionable type, BaseActionSource src) { - if (!this.handler.canFill(this.side, input.getFluid())) { - return input; - } - - int filled = this.handler.fill(this.side, input.getFluidStack(), type == Actionable.MODULATE); - - if (type == Actionable.MODULATE) { - this.onTick(); - } - - if ((long) filled == input.getStackSize()) { - return null; - } - - IAEFluidStack o = input.copy(); - o.setStackSize(input.getStackSize() - (long) filled); - return o; - } - - public IAEFluidStack extractItems(IAEFluidStack request, Actionable type, BaseActionSource src) { - if (!this.handler.canDrain(this.side, request.getFluid())) { - return null; - } - FluidStack removed = this.handler.drain(this.side, request.getFluidStack(), type == Actionable.MODULATE); - if (removed != null && removed.amount != 0) { - // perform a one time log if the removed fluid isn't what's reported since this will create a dupe exploit - if (!WrongFluidRemovedWarnIssued && !removed.isFluidEqual(request.getFluidStack())) { - WrongFluidRemovedWarnIssued = true; - String issuesUrl = "https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/new"; - String msg = String.format( - "[AE2FC] MEMonitorIFluidHandler.extractItems got the wrong fluids while extracting from %s. expected %s got %s. Please report this message if seen: ", - this.handler.getClass().getSimpleName(), - request.getFluidStack().getUnlocalizedName(), - removed.getUnlocalizedName()); - // elevate log to error if chat msg is removed to make it easier to find. - AELog.warn(msg + issuesUrl); - - ChatComponentText chatTxt = new ChatComponentText(msg); - chatTxt.setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED).setBold(true)); - - ChatComponentText chatUrl = new ChatComponentText(issuesUrl); - chatUrl.setChatStyle( - new ChatStyle().setUnderlined(true) - .setChatClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, issuesUrl)) - .setChatHoverEvent( - new HoverEvent( - HoverEvent.Action.SHOW_TEXT, - new ChatComponentText("Click to open link")))); - - ChatComponentText chat = new ChatComponentText(""); - chat.appendSibling(chatTxt); - chat.appendSibling(chatUrl); - - MinecraftServer.getServer().getConfigurationManager().sendChatMsg(chat); - } - IAEFluidStack o = request.copy(); - o.setStackSize(removed.amount); - if (type == Actionable.MODULATE) { - IAEFluidStack cachedStack = this.cache.findPrecise(request); - if (cachedStack != null) { - cachedStack.decStackSize(o.getStackSize()); - this.postDifference(Collections.singletonList(o.copy().setStackSize(-o.getStackSize()))); - } - } - return o; - } else { - return null; - } - } - - @Override - public StorageChannel getChannel() { - return StorageChannel.FLUIDS; - } - - // *Decompiled Stuff*// - - public TickRateModulation onTick() { - FluidTankInfo[] tankProperties = this.handler.getTankInfo(this.side); - IItemList currentlyOnStorage = AEApi.instance().storage().createFluidList(); - - if (tankProperties != null) { - for (FluidTankInfo tankProperty : tankProperties) { - if (this.mode != StorageFilter.EXTRACTABLE_ONLY || this.handler.drain(this.side, 1, false) != null) { - currentlyOnStorage.add(AEFluidStack.create(tankProperty.fluid)); - } - } - } - - // make diff between cache and new contents - IItemList> changes = AEApi.instance().storage().createAEStackList(); - // using non-enhanced for to prevent concurrency errors - for (Iterator iter = this.cache.iterator(); iter.hasNext();) { - IAEFluidStack copy = iter.next().copy(); - copy.setStackSize(-copy.getStackSize()); - changes.add(copy); - } - for (IAEFluidStack is : currentlyOnStorage) { - changes.add(is); - } - // update cache as soon as possible - this.cache = currentlyOnStorage; - // remove unchanged values - for (Iterator> iter = changes.iterator(); iter.hasNext();) { - if (iter.next().getStackSize() == 0L) { - iter.remove(); - } - } - - if (!changes.isEmpty()) { - this.postDifference(changes); - return TickRateModulation.URGENT; - } - - return TickRateModulation.SLOWER; - } - - private void postDifference(Iterable> a) { - if (a != null) { - Iterator> i = this.listeners.entrySet().iterator(); - - while (i.hasNext()) { - Map.Entry l = i.next(); - IMEMonitorHandlerReceiver key = l.getKey(); - if (key.isValid(l.getValue())) { - key.postChange(this, a, this.getActionSource()); - } else { - i.remove(); - } - } - } - } - - public AccessRestriction getAccess() { - return AccessRestriction.READ_WRITE; - } - - public boolean isPrioritized(IAEFluidStack input) { - return false; - } - - public boolean canAccept(IAEFluidStack input) { - return true; - } - - public int getPriority() { - return 0; - } - - public int getSlot() { - return 0; - } - - public boolean validForPass(int i) { - return true; - } - - public IItemList getAvailableItems(IItemList out, int iteration) { - if (!init) { - this.onTick(); - init = true; - } - for (IAEFluidStack fs : this.cache) { - out.addStorage(fs); - } - - return out; - } - - @Override - public IAEFluidStack getAvailableItem(@Nonnull IAEFluidStack request, int iteration) { - if (!init) { - this.onTick(); - init = true; - } - return this.cache.findPrecise(request); - } - - public IItemList getStorageList() { - return this.cache; - } - - public void setMode(StorageFilter mode) { - this.mode = mode; - } - - private BaseActionSource getActionSource() { - return this.mySource; - } - - public void setActionSource(BaseActionSource mySource) { - this.mySource = mySource; - } -} diff --git a/src/main/java/com/glodblock/github/inventory/external/AEFluidTankHandler.java b/src/main/java/com/glodblock/github/inventory/external/AEFluidTankHandler.java deleted file mode 100644 index acbde506..00000000 --- a/src/main/java/com/glodblock/github/inventory/external/AEFluidTankHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.glodblock.github.inventory.external; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.IFluidHandler; - -import com.glodblock.github.inventory.MEMonitorIFluidHandler; - -import appeng.api.networking.security.BaseActionSource; -import appeng.api.storage.IExternalStorageHandler; -import appeng.api.storage.IMEInventory; -import appeng.api.storage.StorageChannel; - -// This handler is too generic, so it will overlap other mods' fluid handler. -// It will be injected into external handler by ASM to make sure it is executed at last. -public class AEFluidTankHandler implements IExternalStorageHandler { - - public static final AEFluidTankHandler INSTANCE = new AEFluidTankHandler(); - - @Override - public boolean canHandle(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource mySrc) { - return channel == StorageChannel.FLUIDS && te instanceof IFluidHandler; - } - - @Override - @SuppressWarnings("rawtypes") - public IMEInventory getInventory(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource src) { - if (channel == StorageChannel.FLUIDS) { - return new MEMonitorIFluidHandler((IFluidHandler) te, d); - } - return null; - } -} diff --git a/src/main/java/com/glodblock/github/loader/CalculatorV2PluginLoader.java b/src/main/java/com/glodblock/github/loader/CalculatorV2PluginLoader.java deleted file mode 100644 index 4d9ed210..00000000 --- a/src/main/java/com/glodblock/github/loader/CalculatorV2PluginLoader.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.glodblock.github.loader; - -import com.glodblock.github.common.item.ItemFluidDrop; - -import appeng.api.storage.data.IAEItemStack; -import appeng.crafting.v2.CraftingCalculations; -import appeng.crafting.v2.CraftingRequest; -import appeng.util.Platform; - -public class CalculatorV2PluginLoader { - - private static long adjustByteCost(CraftingRequest request, Long originalAmount) { - if (request.stack.getItem() instanceof ItemFluidDrop) { - return Platform.ceilDiv(originalAmount, 1000L); - } else { - return originalAmount; - } - } - - public static void installCalculatorV2Plugins() { - CraftingCalculations.registerByteAmountAdjuster(CalculatorV2PluginLoader::adjustByteCost, IAEItemStack.class); - } -} diff --git a/src/main/java/com/glodblock/github/proxy/CommonProxy.java b/src/main/java/com/glodblock/github/proxy/CommonProxy.java index 2c387855..8567b234 100644 --- a/src/main/java/com/glodblock/github/proxy/CommonProxy.java +++ b/src/main/java/com/glodblock/github/proxy/CommonProxy.java @@ -15,7 +15,6 @@ import com.glodblock.github.common.parts.PartFluidInterface; import com.glodblock.github.common.parts.PartFluidP2PInterface; import com.glodblock.github.common.tile.TileFluidInterface; import com.glodblock.github.common.tile.TileWalrus; -import com.glodblock.github.crossmod.thaumcraft.AspectUtil; import com.glodblock.github.crossmod.thaumcraft.ThaumicEnergisticsCrafting; import com.glodblock.github.inventory.external.AEFluidInterfaceHandler; import com.glodblock.github.inventory.item.WirelessMagnet; @@ -89,9 +88,6 @@ public class CommonProxy { public void init(FMLInitializationEvent event) { this.registerMovables(); - if (ModAndClassUtil.ThE) { - AspectUtil.init(); - } } public void postInit(FMLPostInitializationEvent event) { diff --git a/src/main/java/com/glodblock/github/util/DualityFluidInterface.java b/src/main/java/com/glodblock/github/util/DualityFluidInterface.java index eb2c8a64..e85e6436 100644 --- a/src/main/java/com/glodblock/github/util/DualityFluidInterface.java +++ b/src/main/java/com/glodblock/github/util/DualityFluidInterface.java @@ -1,5 +1,8 @@ package com.glodblock.github.util; +import static appeng.util.item.AEFluidStackType.FLUID_STACK_TYPE; +import static appeng.util.item.AEItemStackType.ITEM_STACK_TYPE; + import java.util.List; import java.util.Objects; @@ -18,7 +21,6 @@ import com.glodblock.github.common.item.ItemFluidPacket; import com.glodblock.github.inventory.AEFluidInventory; import com.glodblock.github.inventory.IAEFluidInventory; import com.glodblock.github.inventory.IAEFluidTank; -import com.glodblock.github.inventory.MEMonitorIFluidHandler; import appeng.api.config.Actionable; import appeng.api.config.Upgrades; @@ -36,7 +38,6 @@ import appeng.api.networking.ticking.TickingRequest; import appeng.api.storage.IMEInventory; import appeng.api.storage.IMEMonitor; import appeng.api.storage.IStorageMonitorable; -import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEFluidStack; import appeng.api.storage.data.IAEItemStack; import appeng.api.util.IConfigManager; @@ -44,6 +45,7 @@ import appeng.core.settings.TickRates; import appeng.helpers.IInterfaceHost; import appeng.me.GridAccessException; import appeng.me.helpers.AENetworkProxy; +import appeng.me.storage.MEMonitorIFluidHandler; import appeng.me.storage.MEMonitorPassThrough; import appeng.me.storage.NullInventory; import appeng.util.ConfigManager; @@ -67,10 +69,10 @@ public class DualityFluidInterface implements IGridTickable, IStorageMonitorable private int isWorking = -1; private final MEMonitorPassThrough items = new MEMonitorPassThrough( new NullInventory<>(), - StorageChannel.ITEMS); + ITEM_STACK_TYPE); private final MEMonitorPassThrough fluids = new MEMonitorPassThrough( new NullInventory<>(), - StorageChannel.FLUIDS); + FLUID_STACK_TYPE); private boolean resetConfigCache = true; public DualityFluidInterface(final AENetworkProxy networkProxy, final IInterfaceHost ih) { diff --git a/src/main/java/com/glodblock/github/coremod/registries/LevelTerminalRegistry.java b/src/main/java/com/glodblock/github/util/LevelTerminalRegistry.java similarity index 97% rename from src/main/java/com/glodblock/github/coremod/registries/LevelTerminalRegistry.java rename to src/main/java/com/glodblock/github/util/LevelTerminalRegistry.java index 480c1c60..8e2c312a 100644 --- a/src/main/java/com/glodblock/github/coremod/registries/LevelTerminalRegistry.java +++ b/src/main/java/com/glodblock/github/util/LevelTerminalRegistry.java @@ -1,4 +1,4 @@ -package com.glodblock.github.coremod.registries; +package com.glodblock.github.util; import java.util.HashSet; import java.util.Map;