Skip to content

Commit d70ecfb

Browse files
committed
MT3 Programming Table recipe adding support, WAILA power limiter tooltip
1 parent efd46ec commit d70ecfb

7 files changed

Lines changed: 273 additions & 4 deletions

File tree

changelog/7.1.2

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Additions:
2+
3+
* MineTweaker support for adding Programming Table recipes (asie)
4+
* WAILA support for the Creative Engine and Iron Kinesis Pipe (asie)
5+
6+
Improvements:
7+
8+
* Sensible name for Refinery MineTweaker removeRecipe method (Yulife)

common/buildcraft/compat/CompatModuleMineTweaker3.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import buildcraft.compat.minetweaker.AssemblyTable;
44
import buildcraft.compat.minetweaker.Fuels;
5+
import buildcraft.compat.minetweaker.ProgrammingTable;
56
import buildcraft.compat.minetweaker.Refinery;
67

78
import minetweaker.MineTweakerAPI;
@@ -17,6 +18,7 @@ public String name() {
1718
public void postInit() {
1819
MineTweakerAPI.registerClass(AssemblyTable.class);
1920
MineTweakerAPI.registerClass(Fuels.class);
21+
MineTweakerAPI.registerClass(ProgrammingTable.class);
2022
MineTweakerAPI.registerClass(Refinery.class);
2123
}
2224
}
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
/*
2+
* To change this license header, choose License Headers in Project Properties.
3+
* To change this template file, choose Tools | Templates
4+
* and open the template in the editor.
5+
*/
6+
7+
package buildcraft.compat.minetweaker;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
import net.minecraft.item.ItemStack;
13+
14+
import buildcraft.api.recipes.BuildcraftRecipeRegistry;
15+
import buildcraft.api.recipes.IProgrammingRecipe;
16+
import buildcraft.core.lib.inventory.StackHelper;
17+
18+
import minetweaker.IUndoableAction;
19+
import minetweaker.MineTweakerAPI;
20+
import minetweaker.annotations.ModOnly;
21+
import minetweaker.api.item.IItemStack;
22+
import minetweaker.api.minecraft.MineTweakerMC;
23+
import stanhebben.zenscript.annotations.Optional;
24+
import stanhebben.zenscript.annotations.ZenClass;
25+
import stanhebben.zenscript.annotations.ZenMethod;
26+
27+
@ZenClass("mods.buildcraft.ProgrammingTable")
28+
@ModOnly("BuildCraft|Silicon")
29+
public class ProgrammingTable {
30+
@ZenMethod
31+
public static void addRecipe(IItemStack input, int energy, IItemStack[] options, @Optional boolean programmableOnce) {
32+
MineTweakerAPI.apply(new AddRecipeAction(input, energy, options, programmableOnce));
33+
}
34+
35+
private static class ProgrammingRecipeMT implements IProgrammingRecipe {
36+
private final String id;
37+
private final int energyCost;
38+
private final IItemStack input;
39+
private final List<ItemStack> options;
40+
private final boolean programmableOnce;
41+
42+
public ProgrammingRecipeMT(String id, int energyCost, IItemStack input, IItemStack[] options, boolean programmableOnce) {
43+
this.id = id;
44+
this.energyCost = energyCost;
45+
this.input = input;
46+
this.options = new ArrayList<ItemStack>();
47+
for (IItemStack option : options) {
48+
this.options.add(MineTweakerMC.getItemStack(option));
49+
}
50+
this.programmableOnce = programmableOnce;
51+
}
52+
53+
@Override
54+
public String getId() {
55+
return id;
56+
}
57+
58+
@Override
59+
public List<ItemStack> getOptions(int w, int h) {
60+
return options;
61+
}
62+
63+
@Override
64+
public int getEnergyCost(ItemStack itemStack) {
65+
return energyCost;
66+
}
67+
68+
@Override
69+
public boolean canCraft(ItemStack stack) {
70+
if (input.matches(MineTweakerMC.getIItemStack(stack))) {
71+
return true;
72+
}
73+
74+
if (!programmableOnce) {
75+
for (ItemStack option : options) {
76+
if (StackHelper.isEqualItem(option, stack)) {
77+
return true;
78+
}
79+
}
80+
}
81+
82+
return false;
83+
}
84+
85+
@Override
86+
public ItemStack craft(ItemStack input, ItemStack option) {
87+
return option.copy();
88+
}
89+
}
90+
91+
// ######################
92+
// ### Action classes ###
93+
// ######################
94+
95+
private static class AddRecipeAction implements IUndoableAction {
96+
private final String id;
97+
private final ProgrammingRecipeMT progRecipe;
98+
99+
public AddRecipeAction(IItemStack input, int energy, IItemStack[] options, boolean programmableOnce) {
100+
this.id = "MineTweaker:" + input.getName() + ":" + input.getDamage();
101+
this.progRecipe = new ProgrammingRecipeMT(id, energy, input, options, programmableOnce);
102+
}
103+
104+
@Override
105+
public void apply() {
106+
BuildcraftRecipeRegistry.programmingTable.addRecipe(progRecipe);
107+
}
108+
109+
@Override
110+
public boolean canUndo() {
111+
return true;
112+
}
113+
114+
@Override
115+
public void undo() {
116+
BuildcraftRecipeRegistry.programmingTable.removeRecipe(id);
117+
}
118+
119+
@Override
120+
public String describe() {
121+
return "Adding programming table recipe " + id;
122+
}
123+
124+
@Override
125+
public String describeUndo() {
126+
return "Removing programming table recipe " + id;
127+
}
128+
129+
@Override
130+
public Object getOverrideKey() {
131+
return null;
132+
}
133+
}
134+
}

common/buildcraft/compat/minetweaker/Refinery.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,21 @@
66

77
package buildcraft.compat.minetweaker;
88

9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
import net.minecraftforge.fluids.Fluid;
13+
import net.minecraftforge.fluids.FluidStack;
14+
915
import buildcraft.api.recipes.BuildcraftRecipeRegistry;
1016
import buildcraft.api.recipes.IFlexibleRecipe;
1117
import buildcraft.api.recipes.IFlexibleRecipeViewable;
12-
import java.util.ArrayList;
13-
import java.util.List;
18+
1419
import minetweaker.IUndoableAction;
1520
import minetweaker.MineTweakerAPI;
1621
import minetweaker.annotations.ModOnly;
1722
import minetweaker.api.liquid.ILiquidStack;
1823
import minetweaker.api.minecraft.MineTweakerMC;
19-
import net.minecraftforge.fluids.Fluid;
20-
import net.minecraftforge.fluids.FluidStack;
2124
import stanhebben.zenscript.annotations.Optional;
2225
import stanhebben.zenscript.annotations.ZenClass;
2326
import stanhebben.zenscript.annotations.ZenMethod;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package buildcraft.compat.waila;
2+
3+
import java.util.List;
4+
5+
import net.minecraft.entity.player.EntityPlayerMP;
6+
import net.minecraft.item.ItemStack;
7+
import net.minecraft.nbt.NBTTagCompound;
8+
import net.minecraft.tileentity.TileEntity;
9+
import net.minecraft.world.World;
10+
11+
import buildcraft.energy.TileEngineCreative;
12+
13+
import mcp.mobius.waila.api.IWailaConfigHandler;
14+
import mcp.mobius.waila.api.IWailaDataAccessor;
15+
import mcp.mobius.waila.api.IWailaDataProvider;
16+
17+
public class PowerModeEnergyDataProvider implements IWailaDataProvider {
18+
@Override
19+
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) {
20+
return null;
21+
}
22+
23+
@Override
24+
public List<String> getWailaHead(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
25+
return currenttip;
26+
}
27+
28+
@Override
29+
public List<String> getWailaBody(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
30+
TileEntity te = accessor.getTileEntity();
31+
32+
if (te instanceof TileEngineCreative) {
33+
TileEngineCreative tile = (TileEngineCreative) te;
34+
35+
currenttip.add(tile.getIdealOutput() + " RF/t");
36+
}
37+
return currenttip;
38+
}
39+
40+
@Override
41+
public List<String> getWailaTail(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
42+
return currenttip;
43+
}
44+
45+
@Override
46+
public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, int x, int y, int z) {
47+
return tag;
48+
}
49+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package buildcraft.compat.waila;
2+
3+
import java.util.List;
4+
5+
import net.minecraft.entity.player.EntityPlayerMP;
6+
import net.minecraft.item.ItemStack;
7+
import net.minecraft.nbt.NBTTagCompound;
8+
import net.minecraft.tileentity.TileEntity;
9+
import net.minecraft.world.World;
10+
11+
import buildcraft.api.transport.IPipeTile;
12+
import buildcraft.transport.pipes.PipePowerIron;
13+
14+
import mcp.mobius.waila.api.IWailaConfigHandler;
15+
import mcp.mobius.waila.api.IWailaDataAccessor;
16+
import mcp.mobius.waila.api.IWailaDataProvider;
17+
18+
public class PowerModeTransportDataProvider implements IWailaDataProvider {
19+
@Override
20+
public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) {
21+
return null;
22+
}
23+
24+
@Override
25+
public List<String> getWailaHead(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
26+
return currenttip;
27+
}
28+
29+
@Override
30+
public List<String> getWailaBody(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
31+
TileEntity te = accessor.getTileEntity();
32+
33+
if (te instanceof IPipeTile) {
34+
IPipeTile tile = (IPipeTile) te;
35+
if (tile.getPipe() instanceof PipePowerIron) {
36+
PipePowerIron powerIron = (PipePowerIron) tile.getPipe();
37+
38+
currenttip.add(powerIron.getMode().maxPower + " RF/t");
39+
}
40+
}
41+
42+
return currenttip;
43+
}
44+
45+
@Override
46+
public List<String> getWailaTail(ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
47+
return currenttip;
48+
}
49+
50+
@Override
51+
public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, int x, int y, int z) {
52+
return tag;
53+
}
54+
}

common/buildcraft/compat/waila/WailaCallback.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import cpw.mods.fml.common.Optional;
77

88
import buildcraft.compat.CompatModuleWAILA;
9+
import buildcraft.core.BlockEngine;
910
import buildcraft.robotics.EntityRobot;
11+
import buildcraft.transport.BlockGenericPipe;
1012

1113
import mcp.mobius.waila.api.IWailaRegistrar;
1214

@@ -16,14 +18,31 @@ private WailaCallback() {
1618
}
1719

1820
public static void callback(IWailaRegistrar registry) {
21+
if (Loader.isModLoaded("BuildCraft|Energy")) {
22+
callbackEnergy(registry);
23+
}
1924
if (Loader.isModLoaded("BuildCraft|Robotics")) {
2025
callbackRobotics(registry);
2126
}
27+
if (Loader.isModLoaded("BuildCraft|Transport")) {
28+
callbackTransport(registry);
29+
}
30+
2231
if (CompatModuleWAILA.ENABLE_BUILDER_DEBUG) {
2332
registry.registerTailProvider(new BuilderDebugDataProvider(), Block.class);
2433
}
2534
}
2635

36+
@Optional.Method(modid = "BuildCraft|Energy")
37+
private static void callbackEnergy(IWailaRegistrar registry) {
38+
registry.registerBodyProvider(new PowerModeEnergyDataProvider(), BlockEngine.class);
39+
}
40+
41+
@Optional.Method(modid = "BuildCraft|Transport")
42+
private static void callbackTransport(IWailaRegistrar registry) {
43+
registry.registerBodyProvider(new PowerModeTransportDataProvider(), BlockGenericPipe.class);
44+
}
45+
2746
@Optional.Method(modid = "BuildCraft|Robotics")
2847
private static void callbackRobotics(IWailaRegistrar registry) {
2948
registry.registerBodyProvider(new EntityRobotDataProvider(), EntityRobot.class);

0 commit comments

Comments
 (0)