Skip to content
This repository was archived by the owner on Nov 11, 2024. It is now read-only.

Commit fb658ec

Browse files
authored
Self destruct. (FStorage bus, FImport/Export bus, and more) (#81)
* Update dependencies.gradle Use latest AE2 and add AE2FC for testing * Add AE2FC integration. - Caches AE2FC IDs when IDs are remapped - Adds some utility methods for NBT conversion * Deprecate Fluid storage, import, and export buses Now they will automatically replace themselves with AE2FC variants, if AE2FC is detected. * Deprecate Fluid Level Emitter Convert the EC2 Fluid Level Emitter to AE2FC's variant * Deprecate Fluid Storage Monitor Fluid Storage Monitor now converts to AE2FC variant * Deprecate Fluid Conversion Monitor And it's gone. If AE2FC exists, that is. * Deprecate Fluid Interface Converts them to Dual Interfaces...
1 parent 95e692c commit fb658ec

12 files changed

Lines changed: 403 additions & 18 deletions

dependencies.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// Add your dependencies here
22

33
dependencies {
4-
compile('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-118-GTNH:dev')
5-
4+
api('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-175-GTNH:dev')
5+
api('com.github.GTNewHorizons:AE2FluidCraft-Rework:1.0.92-gtnh:dev')
66
compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.2.12-GTNH:dev') {transitive=false}
77
compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.3.16-GTNH:dev') {transitive=false}
88
compileOnly('com.github.GTNewHorizons:CodeChickenLib:1.1.5.3:dev') {transitive=false}

src/main/scala/extracells/Extracells.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import cpw.mods.fml.client.registry.RenderingRegistry
55
import cpw.mods.fml.common.Mod.EventHandler
66
import cpw.mods.fml.common.event.{
77
FMLInitializationEvent,
8+
FMLModIdMappingEvent,
89
FMLPostInitializationEvent,
910
FMLPreInitializationEvent
1011
}
1112
import cpw.mods.fml.common.network.NetworkRegistry
1213
import cpw.mods.fml.common.{FMLCommonHandler, Loader, Mod, SidedProxy}
1314
import extracells.integration.Integration
15+
import extracells.integration.ae2fc.FluidCraft
1416
import extracells.network.{ChannelHandler, GuiHandler}
1517
import extracells.proxy.CommonProxy
1618
import extracells.registries.ItemEnum
@@ -144,4 +146,11 @@ object Extracells {
144146
proxy.registerBlocks()
145147
integration.preInit()
146148
}
149+
150+
@EventHandler
151+
def handleRemap(event: FMLModIdMappingEvent): Unit = {
152+
if (Integration.Mods.FLUIDCRAFT.isEnabled) {
153+
FluidCraft.onRemapEvent(event)
154+
}
155+
}
147156
}

src/main/scala/extracells/integration/Integration.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public enum Mods {
2525
IGW("IGWMod", "IngameWikiMod", Side.CLIENT),
2626
THAUMATICENERGISTICS("thaumicenergistics", "Thaumatic Energistics"),
2727
MEKANISM("Mekanism"),
28-
WIRELESSCRAFTING("ae2wct", "AE2 Wireless Crafting Terminal");
28+
WIRELESSCRAFTING("ae2wct", "AE2 Wireless Crafting Terminal"),
29+
FLUIDCRAFT("ae2fc", "Fluid Craft For AE2");
2930

3031
private final String modID;
3132

@@ -43,6 +44,8 @@ private Mods(String modid, String modName, Side side) {
4344
this.modID = modid;
4445
this.name = modName;
4546
this.side = side;
47+
this.enabled = (Loader.isModLoaded(getModID()) && shouldLoad && correctSide())
48+
|| (ModAPIManager.INSTANCE.hasAPI(getModID()) && shouldLoad && correctSide());
4649
}
4750

4851
private Mods(String modid, String modName) {
@@ -69,15 +72,16 @@ public boolean isOnServer() {
6972
return side != Side.CLIENT;
7073
}
7174

75+
private final boolean enabled;
76+
7277
public void loadConfig(Configuration config) {
7378
shouldLoad = config
7479
.get("Integration", "enable" + getModName(), true, "Enable " + getModName() + " Integration.")
7580
.getBoolean(true);
7681
}
7782

7883
public boolean isEnabled() {
79-
return (Loader.isModLoaded(getModID()) && shouldLoad && correctSide())
80-
|| (ModAPIManager.INSTANCE.hasAPI(getModID()) && shouldLoad && correctSide());
84+
return enabled;
8185
}
8286

8387
private boolean correctSide() {
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package extracells.integration.ae2fc;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
import net.minecraft.item.Item;
7+
import net.minecraft.item.ItemStack;
8+
import net.minecraft.nbt.NBTTagCompound;
9+
import net.minecraftforge.fluids.Fluid;
10+
import net.minecraftforge.fluids.FluidRegistry;
11+
import net.minecraftforge.fluids.FluidStack;
12+
13+
import appeng.api.storage.data.IAEItemStack;
14+
import appeng.util.item.AEItemStack;
15+
16+
import com.glodblock.github.util.NameConst;
17+
18+
import cpw.mods.fml.common.Optional;
19+
import cpw.mods.fml.common.event.FMLModIdMappingEvent;
20+
import cpw.mods.fml.common.registry.GameRegistry;
21+
import extracells.registries.PartEnum;
22+
23+
public final class FluidCraft {
24+
25+
private final static Map<PartEnum, Short> REPLACER = new HashMap<>(16);
26+
27+
@Optional.Method(modid = "ae2fc")
28+
public static void onRemapEvent(FMLModIdMappingEvent event) {
29+
REPLACER.put(
30+
PartEnum.FLUIDEXPORT,
31+
(short) Item.getIdFromItem(GameRegistry.findItem("ae2fc", NameConst.ITEM_PART_FLUID_EXPORT)));
32+
REPLACER.put(
33+
PartEnum.FLUIDIMPORT,
34+
(short) Item.getIdFromItem(GameRegistry.findItem("ae2fc", NameConst.ITEM_PART_FLUID_IMPORT)));
35+
REPLACER.put(
36+
PartEnum.FLUIDSTORAGE,
37+
(short) Item.getIdFromItem(GameRegistry.findItem("ae2fc", NameConst.ITEM_PART_FLUID_STORAGE_BUS)));
38+
REPLACER.put(
39+
PartEnum.FLUIDLEVELEMITTER,
40+
(short) Item.getIdFromItem(GameRegistry.findItem("ae2fc", NameConst.ITEM_PART_FLUID_LEVEL_EMITTER)));
41+
REPLACER.put(
42+
PartEnum.FLUIDMONITOR,
43+
(short) Item.getIdFromItem(GameRegistry.findItem("ae2fc", NameConst.ITEM_PART_FLUID_STORAGE_MONITOR)));
44+
REPLACER.put(
45+
PartEnum.FLUIDCONVERSIONMONITOR,
46+
(short) Item
47+
.getIdFromItem(GameRegistry.findItem("ae2fc", NameConst.ITEM_PART_FLUID_CONVERSION_MONITOR)));
48+
REPLACER.put(
49+
PartEnum.INTERFACE,
50+
(short) Item.getIdFromItem(GameRegistry.findItem("ae2fc", NameConst.ITEM_PART_FLUID_INTERFACE)));
51+
}
52+
53+
public static void replace(NBTTagCompound def, PartEnum part) {
54+
def.setShort("id", REPLACER.getOrDefault(part, (short) 0));
55+
def.setShort("Damage", (short) 0);
56+
}
57+
58+
@Optional.Method(modid = "ae2fc")
59+
public static NBTTagCompound createFluidDisplay(String fluidName) {
60+
NBTTagCompound fluidDisplay = new NBTTagCompound();
61+
Fluid fluid = FluidRegistry.getFluid(fluidName);
62+
if (fluid != null) {
63+
ItemStack fluidPacket = new ItemStack(GameRegistry.findItem("ae2fc", "fluid_packet"), 1, 0);
64+
NBTTagCompound fluidPacketTag = new NBTTagCompound();
65+
// FluidStack
66+
FluidStack fluidStack = new FluidStack(fluid, 1000);
67+
NBTTagCompound fluidStackNbt = new NBTTagCompound();
68+
fluidStack.writeToNBT(fluidStackNbt);
69+
fluidPacketTag.setTag("FluidStack", fluidStackNbt);
70+
// FluidPacket
71+
fluidPacketTag.setBoolean("DisplayOnly", true);
72+
fluidPacket.setTagCompound(fluidPacketTag);
73+
// Final Item
74+
IAEItemStack aeStack = AEItemStack.create(fluidPacket);
75+
aeStack.writeToNBT(fluidDisplay);
76+
}
77+
return fluidDisplay;
78+
}
79+
80+
public static NBTTagCompound createFluidNBT(String fluidName, long amount) {
81+
NBTTagCompound fluid = new NBTTagCompound();
82+
fluid.setString("FluidName", fluidName);
83+
fluid.setBoolean("Craft", false);
84+
fluid.setLong("Req", 0);
85+
fluid.setLong("Cnt", amount);
86+
return fluid;
87+
}
88+
}

src/main/scala/extracells/part/PartFluidConversionMonitor.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import net.minecraft.client.renderer.Tessellator;
55
import net.minecraft.entity.player.EntityPlayer;
66
import net.minecraft.item.ItemStack;
7+
import net.minecraft.nbt.NBTTagCompound;
78
import net.minecraft.tileentity.TileEntity;
89
import net.minecraft.util.IIcon;
910
import net.minecraft.util.Vec3;
@@ -21,6 +22,9 @@
2122
import appeng.api.util.AEColor;
2223
import cpw.mods.fml.relauncher.Side;
2324
import cpw.mods.fml.relauncher.SideOnly;
25+
import extracells.integration.Integration;
26+
import extracells.integration.ae2fc.FluidCraft;
27+
import extracells.registries.PartEnum;
2428
import extracells.render.TextureManager;
2529
import extracells.util.FluidUtil;
2630

@@ -135,4 +139,12 @@ public void renderStatic(int x, int y, int z, IPartRenderHelper rh, RenderBlocks
135139
renderBackPanel(x, y, z, rh, renderer);
136140
renderPowerStatus(x, y, z, rh, renderer);
137141
}
142+
143+
@Override
144+
public NBTTagCompound transformPart(NBTTagCompound def) {
145+
if (Integration.Mods.FLUIDCRAFT.isEnabled()) {
146+
FluidCraft.replace(def, PartEnum.FLUIDCONVERSIONMONITOR);
147+
}
148+
return def;
149+
}
138150
}

src/main/scala/extracells/part/PartFluidExport.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.minecraft.client.renderer.RenderBlocks;
77
import net.minecraft.client.renderer.Tessellator;
88
import net.minecraft.entity.player.EntityPlayer;
9+
import net.minecraft.nbt.NBTTagCompound;
910
import net.minecraft.util.IIcon;
1011
import net.minecraft.util.Vec3;
1112
import net.minecraftforge.common.util.ForgeDirection;
@@ -25,6 +26,9 @@
2526
import cpw.mods.fml.common.FMLLog;
2627
import cpw.mods.fml.relauncher.Side;
2728
import cpw.mods.fml.relauncher.SideOnly;
29+
import extracells.integration.Integration;
30+
import extracells.integration.ae2fc.FluidCraft;
31+
import extracells.registries.PartEnum;
2832
import extracells.render.TextureManager;
2933
import extracells.util.PermissionUtil;
3034

@@ -173,4 +177,12 @@ public void renderStatic(int x, int y, int z, IPartRenderHelper rh, RenderBlocks
173177
rh.setBounds(6, 6, 11, 10, 10, 12);
174178
renderStaticBusLights(x, y, z, rh, renderer);
175179
}
180+
181+
@Override
182+
public NBTTagCompound transformPart(NBTTagCompound def) {
183+
if (Integration.Mods.FLUIDCRAFT.isEnabled()) {
184+
FluidCraft.replace(def, PartEnum.FLUIDEXPORT);
185+
}
186+
return def;
187+
}
176188
}

src/main/scala/extracells/part/PartFluidIO.java

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package extracells.part;
22

3+
import static net.minecraftforge.common.util.Constants.NBT.TAG_COMPOUND;
4+
35
import java.io.IOException;
46
import java.util.Arrays;
57
import java.util.List;
@@ -8,6 +10,7 @@
810
import net.minecraft.entity.player.EntityPlayer;
911
import net.minecraft.item.ItemStack;
1012
import net.minecraft.nbt.NBTTagCompound;
13+
import net.minecraft.nbt.NBTTagList;
1114
import net.minecraft.tileentity.TileEntity;
1215
import net.minecraft.util.Vec3;
1316
import net.minecraftforge.common.util.ForgeDirection;
@@ -21,13 +24,16 @@
2124
import appeng.api.networking.ticking.TickRateModulation;
2225
import appeng.api.networking.ticking.TickingRequest;
2326
import appeng.api.parts.IPartCollisionHelper;
27+
import appeng.api.parts.IPartDeprecated;
2428
import appeng.api.parts.IPartHost;
2529
import appeng.api.parts.IPartRenderHelper;
2630
import cpw.mods.fml.relauncher.Side;
2731
import cpw.mods.fml.relauncher.SideOnly;
2832
import extracells.Extracells;
2933
import extracells.container.ContainerBusFluidIO;
3034
import extracells.gui.GuiBusFluidIO;
35+
import extracells.integration.Integration;
36+
import extracells.integration.ae2fc.FluidCraft;
3137
import extracells.item.ItemPartECBase;
3238
import extracells.network.packet.other.IFluidSlotPartOrBlock;
3339
import extracells.network.packet.other.PacketFluidSlot;
@@ -37,7 +43,7 @@
3743
import io.netty.buffer.ByteBuf;
3844

3945
public abstract class PartFluidIO extends PartECBase
40-
implements IGridTickable, IInventoryUpdateReceiver, IFluidSlotPartOrBlock {
46+
implements IGridTickable, IInventoryUpdateReceiver, IFluidSlotPartOrBlock, IPartDeprecated {
4147

4248
public Fluid[] filterFluids = new Fluid[9];
4349
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
@@ -181,6 +187,16 @@ public void onNeighborChanged() {
181187
this.lastRedstone = redstonePowered;
182188
}
183189

190+
/**
191+
* Map for converting slots from bus EC2 -> AE2FC
192+
*/
193+
private static int[] FILTER_MAP = null;
194+
static {
195+
if (Integration.Mods.FLUIDCRAFT.isEnabled()) {
196+
FILTER_MAP = new int[] { 5, 3, 6, 1, 0, 2, 7, 4, 8 };
197+
}
198+
}
199+
184200
@Override
185201
public final void readFromNBT(NBTTagCompound data) {
186202
super.readFromNBT(data);
@@ -192,6 +208,57 @@ public final void readFromNBT(NBTTagCompound data) {
192208
onInventoryChanged();
193209
}
194210

211+
@Override
212+
public NBTTagCompound transformNBT(NBTTagCompound extra) {
213+
if (Integration.Mods.FLUIDCRAFT.isEnabled()) {
214+
// Transform NBT in place
215+
// Fluid Filter
216+
NBTTagCompound fluidFilterNew = new NBTTagCompound();
217+
for (int slot = 0; slot < 9; ++slot) {
218+
String oldFilterName = "FilterFluid#" + slot;
219+
fluidFilterNew
220+
.setTag("#" + FILTER_MAP[slot], FluidCraft.createFluidDisplay(extra.getString(oldFilterName)));
221+
extra.removeTag(oldFilterName);
222+
}
223+
extra.setTag("config", fluidFilterNew);
224+
// Upgrades
225+
NBTTagList upgrades = extra.getTagList("upgradeInventory", TAG_COMPOUND);
226+
NBTTagCompound upgradesNew = new NBTTagCompound();
227+
for (int i = 0; i < 4; ++i) {
228+
NBTTagCompound upgrade = upgrades.getCompoundTagAt(i);
229+
upgrade.removeTag("Slot");
230+
upgradesNew.setTag("#" + i, upgrade);
231+
}
232+
extra.removeTag("upgradeInventory");
233+
extra.setTag("upgrades", upgradesNew);
234+
// Redstone mode
235+
RedstoneMode redstoneMode = RedstoneMode.values()[extra.getInteger("redstoneMode")];
236+
switch (redstoneMode) {
237+
case LOW_SIGNAL:
238+
extra.setString("REDSTONE_CONTROLLED", "LOW_SIGNAL");
239+
break;
240+
case HIGH_SIGNAL:
241+
extra.setString("REDSTONE_CONTROLLED", "HIGH_SIGNAL");
242+
break;
243+
case SIGNAL_PULSE:
244+
extra.setString("REDSTONE_CONTROLLED", "SIGNAL_PULSE");
245+
break;
246+
default:
247+
extra.setString("REDSTONE_CONTROLLED", "IGNORE");
248+
break;
249+
}
250+
extra.removeTag("redstoneMode");
251+
// Part data
252+
extra.setTag("part", extra.getCompoundTag("node").getCompoundTag("node0"));
253+
extra.removeTag("node");
254+
// Extra tags
255+
extra.setString("CRAFT_ONLY", "NO");
256+
extra.setString("FUZZY_MODE", "IGNORE_ALL");
257+
extra.setString("SCHEDULING_MODE", "DEFAULT");
258+
}
259+
return extra;
260+
}
261+
195262
@Override
196263
public final boolean readFromStream(ByteBuf data) throws IOException {
197264
return super.readFromStream(data);

src/main/scala/extracells/part/PartFluidImport.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.minecraft.client.renderer.RenderBlocks;
77
import net.minecraft.client.renderer.Tessellator;
88
import net.minecraft.entity.player.EntityPlayer;
9+
import net.minecraft.nbt.NBTTagCompound;
910
import net.minecraft.util.IIcon;
1011
import net.minecraft.util.Vec3;
1112
import net.minecraftforge.common.util.ForgeDirection;
@@ -28,6 +29,9 @@
2829
import cpw.mods.fml.relauncher.Side;
2930
import cpw.mods.fml.relauncher.SideOnly;
3031
import extracells.Extracells;
32+
import extracells.integration.Integration;
33+
import extracells.integration.ae2fc.FluidCraft;
34+
import extracells.registries.PartEnum;
3135
import extracells.render.TextureManager;
3236
import extracells.util.PermissionUtil;
3337

@@ -239,4 +243,12 @@ public void renderStatic(int x, int y, int z, IPartRenderHelper rh, RenderBlocks
239243
rh.setBounds(6, 6, 11, 10, 10, 12);
240244
renderStaticBusLights(x, y, z, rh, renderer);
241245
}
246+
247+
@Override
248+
public NBTTagCompound transformPart(NBTTagCompound def) {
249+
if (Integration.Mods.FLUIDCRAFT.isEnabled()) {
250+
FluidCraft.replace(def, PartEnum.FLUIDIMPORT);
251+
}
252+
return def;
253+
}
242254
}

0 commit comments

Comments
 (0)