First Iteration of Gate Rewrite
GateKind enum is gone, replaced with two enums: GateMaterial and GateLogic. Pulsars and Timers are abstracted into GateExpansions that can be applied to "upgrade" a gate. (Incomplete) GateExpansions will eventually be moved to the API so that other can define new expansions easily. GateExpansions are not currently serialized or synced to the client. This remains to be done. Legacy migration support is included, but untested. Currently only the base logic texture layer (white/black) are being rendered. Eventually the material and expansions will each render an additional texture layer onto the gate.
Before Width: | Height: | Size: 163 B |
Before Width: | Height: | Size: 137 B |
Before Width: | Height: | Size: 158 B After Width: | Height: | Size: 158 B |
After Width: | Height: | Size: 217 B |
Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 129 B |
After Width: | Height: | Size: 194 B |
After Width: | Height: | Size: 195 B |
After Width: | Height: | Size: 196 B |
After Width: | Height: | Size: 194 B |
Before Width: | Height: | Size: 339 B |
Before Width: | Height: | Size: 340 B |
Before Width: | Height: | Size: 340 B |
Before Width: | Height: | Size: 340 B |
After Width: | Height: | Size: 214 B |
After Width: | Height: | Size: 222 B |
Before Width: | Height: | Size: 326 B After Width: | Height: | Size: 326 B |
After Width: | Height: | Size: 340 B |
After Width: | Height: | Size: 204 B |
After Width: | Height: | Size: 204 B |
After Width: | Height: | Size: 204 B |
|
@ -30,17 +30,28 @@ fillerpattern.box=Box
|
|||
fluid.oil=Oil
|
||||
fluid.fuel=Fuel
|
||||
|
||||
gate.pipe.empty=Pipe Empty
|
||||
gate.pipe.containsItems=Items Traversing
|
||||
gate.pipe.containsFluids=Fluid Traversing
|
||||
gate.pipe.containsEnergy=Power Traversing
|
||||
gate.pipe.requestsEnergy=Power Requested
|
||||
gate.pipe.tooMuchEnergy=Power Overloaded
|
||||
gate.engine.blue=Engine Blue
|
||||
gate.engine.green=Engine Green
|
||||
gate.engine.yellow=Engine Yellow
|
||||
gate.engine.red=Engine Red
|
||||
gate.pipe.item.color=Paint Items %s
|
||||
gate.action.pipe.item.color=Paint Items %s
|
||||
|
||||
gate.logic.and=AND
|
||||
gate.logic.or=OR
|
||||
|
||||
gate.material.iron=Iron
|
||||
gate.material.gold=Gold
|
||||
gate.material.diamond=Diamond
|
||||
|
||||
gate.name=%s %s Gate
|
||||
gate.name.basic=Gate
|
||||
|
||||
gate.trigger.pipe.empty=Pipe Empty
|
||||
gate.trigger.pipe.containsItems=Items Traversing
|
||||
gate.trigger.pipe.containsFluids=Fluid Traversing
|
||||
gate.trigger.pipe.containsEnergy=Power Traversing
|
||||
gate.trigger.pipe.requestsEnergy=Power Requested
|
||||
gate.trigger.pipe.tooMuchEnergy=Power Overloaded
|
||||
gate.trigger.engine.blue=Engine Blue
|
||||
gate.trigger.engine.green=Engine Green
|
||||
gate.trigger.engine.yellow=Engine Yellow
|
||||
gate.trigger.engine.red=Engine Red
|
||||
|
||||
gui.building.resources=Building Resources
|
||||
gui.del=Del
|
||||
|
|
|
@ -29,7 +29,7 @@ import buildcraft.energy.ItemBucketBuildcraft;
|
|||
import buildcraft.energy.ItemEngine;
|
||||
import buildcraft.energy.BucketHandler;
|
||||
import buildcraft.energy.TileEngine.EnergyStage;
|
||||
import buildcraft.energy.TriggerEngineHeat;
|
||||
import buildcraft.energy.triggers.TriggerEngineHeat;
|
||||
import buildcraft.energy.worldgen.BiomeGenOilDesert;
|
||||
import buildcraft.energy.worldgen.BiomeGenOilOcean;
|
||||
import buildcraft.energy.worldgen.BiomeInitializer;
|
||||
|
|
|
@ -146,28 +146,28 @@ public class BuildCraftSilicon {
|
|||
new ItemStack(BuildCraftTransport.pipeGate, 1, 8)});
|
||||
|
||||
// Iron - Autarchic
|
||||
CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1)});
|
||||
CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2)});
|
||||
|
||||
// Gold - Autarchic
|
||||
CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3)});
|
||||
CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4)});
|
||||
|
||||
// Diamond - Autarchic
|
||||
CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5)});
|
||||
CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6)});
|
||||
|
||||
// Quartz - Autarchic
|
||||
CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 8), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 7)});
|
||||
CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 7), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 8)});
|
||||
// CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
// new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1)});
|
||||
// CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
// new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2)});
|
||||
//
|
||||
// // Gold - Autarchic
|
||||
// CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
// new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3)});
|
||||
// CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
// new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4)});
|
||||
//
|
||||
// // Diamond - Autarchic
|
||||
// CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
// new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5)});
|
||||
// CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
// new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6)});
|
||||
//
|
||||
// // Quartz - Autarchic
|
||||
// CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 8), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
// new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 7)});
|
||||
// CoreProxy.proxy.addShapelessRecipe(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 7), new Object[]{new ItemStack(redstoneChipset, 1, 0),
|
||||
// new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 8)});
|
||||
|
||||
// / REDSTONE CHIPSETS
|
||||
CoreProxy.proxy.addName(new ItemStack(redstoneChipset, 1, 0), "Redstone Chipset");
|
||||
|
@ -192,13 +192,13 @@ public class BuildCraftSilicon {
|
|||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 2), "Iron OR Gate");
|
||||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 4), "Gold OR Gate");
|
||||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGate, 1, 6), "Diamond OR Gate");
|
||||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 0), "Autarchic Gate");
|
||||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1), "Autarchic Iron AND Gate");
|
||||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3), "Autarchic Gold AND Gate");
|
||||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5), "Autarchic Diamond AND Gate");
|
||||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2), "Autarchic Iron OR Gate");
|
||||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4), "Autarchic Gold OR Gate");
|
||||
CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6), "Autarchic Diamond OR Gate");
|
||||
// CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 0), "Autarchic Gate");
|
||||
// CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 1), "Autarchic Iron AND Gate");
|
||||
// CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 3), "Autarchic Gold AND Gate");
|
||||
// CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 5), "Autarchic Diamond AND Gate");
|
||||
// CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 2), "Autarchic Iron OR Gate");
|
||||
// CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 4), "Autarchic Gold OR Gate");
|
||||
// CoreProxy.proxy.addName(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, 6), "Autarchic Diamond OR Gate");
|
||||
|
||||
|
||||
// BuildcraftRecipes.assemblyTable.addRecipe(new ItemStack(BuildCraftTransport.pipeGate, 1, 0), 20000, new ItemStack(redstoneChipset, 1, 0));
|
||||
|
|
|
@ -8,10 +8,8 @@
|
|||
package buildcraft;
|
||||
|
||||
import buildcraft.api.core.IIconProvider;
|
||||
import buildcraft.api.filler.IFillerPattern;
|
||||
import buildcraft.api.gates.ActionManager;
|
||||
import buildcraft.api.recipes.BuildcraftRecipes;
|
||||
import buildcraft.core.recipes.AssemblyRecipeManager;
|
||||
import buildcraft.api.transport.IExtractionHandler;
|
||||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.api.transport.PipeManager;
|
||||
|
@ -29,7 +27,7 @@ import buildcraft.transport.BlockGenericPipe;
|
|||
import buildcraft.transport.GateIconProvider;
|
||||
import buildcraft.transport.GuiHandler;
|
||||
import buildcraft.transport.ItemFacade;
|
||||
import buildcraft.transport.ItemGate;
|
||||
import buildcraft.transport.gates.ItemGate;
|
||||
import buildcraft.transport.ItemPipe;
|
||||
import buildcraft.transport.ItemPlug;
|
||||
import buildcraft.transport.Pipe;
|
||||
|
@ -42,6 +40,8 @@ import buildcraft.transport.blueprints.BptItemPipeDiamond;
|
|||
import buildcraft.transport.blueprints.BptItemPipeEmerald;
|
||||
import buildcraft.transport.blueprints.BptItemPipeIron;
|
||||
import buildcraft.transport.blueprints.BptItemPipeWooden;
|
||||
import buildcraft.transport.gates.GateExpansionPulsar;
|
||||
import buildcraft.transport.gates.GateExpansions;
|
||||
import buildcraft.transport.network.PacketHandlerTransport;
|
||||
import buildcraft.transport.pipes.PipeFluidsCobblestone;
|
||||
import buildcraft.transport.pipes.PipeFluidsEmerald;
|
||||
|
@ -114,7 +114,6 @@ public class BuildCraftTransport {
|
|||
public static float pipeDurability;
|
||||
public static Item pipeWaterproof;
|
||||
public static Item pipeGate;
|
||||
public static Item pipeGateAutarchic;
|
||||
public static Item redPipeWire;
|
||||
public static Item bluePipeWire;
|
||||
public static Item greenPipeWire;
|
||||
|
@ -267,6 +266,8 @@ public class BuildCraftTransport {
|
|||
|
||||
PipeManager.registerExtractionHandler(new ExtractionHandler(excludedItemBlocks, excludedFluidBlocks));
|
||||
|
||||
GateExpansions.registerExpansion(GateExpansionPulsar.INSTANCE);
|
||||
|
||||
Property groupItemsTriggerProp = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_GENERAL, "pipes.groupItemsTrigger", 32);
|
||||
groupItemsTriggerProp.comment = "when reaching this amount of objects in a pipes, items will be automatically grouped";
|
||||
groupItemsTrigger = groupItemsTriggerProp.getInt();
|
||||
|
@ -347,16 +348,10 @@ public class BuildCraftTransport {
|
|||
CoreProxy.proxy.registerItem(yellowPipeWire);
|
||||
|
||||
Property pipeGateId = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_ITEM, "pipeGate.id", DefaultProps.GATE_ID);
|
||||
pipeGate = new ItemGate(pipeGateId.getInt(), 0);
|
||||
pipeGate = new ItemGate(pipeGateId.getInt());
|
||||
pipeGate.setUnlocalizedName("pipeGate");
|
||||
CoreProxy.proxy.registerItem(pipeGate);
|
||||
|
||||
Property pipeGateAutarchicId = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_ITEM, "pipeGateAutarchic.id",
|
||||
DefaultProps.GATE_AUTARCHIC_ID);
|
||||
pipeGateAutarchic = new ItemGate(pipeGateAutarchicId.getInt(), 1);
|
||||
pipeGateAutarchic.setUnlocalizedName("pipeGateAutarchic");
|
||||
CoreProxy.proxy.registerItem(pipeGateAutarchic);
|
||||
|
||||
Property pipeFacadeId = BuildCraftCore.mainConfiguration.get(Configuration.CATEGORY_ITEM, "pipeFacade.id", DefaultProps.PIPE_FACADE_ID);
|
||||
facadeItem = new ItemFacade(pipeFacadeId.getInt());
|
||||
facadeItem.setUnlocalizedName("pipeFacade");
|
||||
|
|
|
@ -4,6 +4,7 @@ import buildcraft.BuildCraftBuilders;
|
|||
import buildcraft.core.TileBuildCraft;
|
||||
import buildcraft.core.blueprints.BptBase;
|
||||
import buildcraft.core.blueprints.BptPlayerIndex;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.network.TileNetworkData;
|
||||
import buildcraft.core.proxy.CoreProxy;
|
||||
import buildcraft.core.utils.Utils;
|
||||
|
@ -150,7 +151,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
owner = nbttagcompound.getString("owner");
|
||||
locked = nbttagcompound.getBoolean("locked");
|
||||
|
||||
Utils.readStacksFromNBT(nbttagcompound, "stack", stack);
|
||||
InvUtils.readStacksFromNBT(nbttagcompound, "stack", stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -160,7 +161,7 @@ public class TileBlueprintLibrary extends TileBuildCraft implements IInventory {
|
|||
nbttagcompound.setString("owner", owner);
|
||||
nbttagcompound.setBoolean("locked", locked);
|
||||
|
||||
Utils.writeStacksToNBT(nbttagcompound, "stack", stack);
|
||||
InvUtils.writeStacksToNBT(nbttagcompound, "stack", stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -29,6 +29,7 @@ import buildcraft.core.blueprints.BptBuilderBase;
|
|||
import buildcraft.core.blueprints.BptBuilderBlueprint;
|
||||
import buildcraft.core.blueprints.BptBuilderTemplate;
|
||||
import buildcraft.core.blueprints.BptContext;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.network.PacketUpdate;
|
||||
import buildcraft.core.network.TileNetworkData;
|
||||
import buildcraft.core.proxy.CoreProxy;
|
||||
|
@ -447,7 +448,7 @@ public class TileBuilder extends TileBuildCraft implements IBuilderInventory, IP
|
|||
public void readFromNBT(NBTTagCompound nbttagcompound) {
|
||||
super.readFromNBT(nbttagcompound);
|
||||
|
||||
Utils.readStacksFromNBT(nbttagcompound, "Items", items);
|
||||
InvUtils.readStacksFromNBT(nbttagcompound, "Items", items);
|
||||
|
||||
if (nbttagcompound.hasKey("box")) {
|
||||
box.initialize(nbttagcompound.getCompoundTag("box"));
|
||||
|
@ -470,7 +471,7 @@ public class TileBuilder extends TileBuildCraft implements IBuilderInventory, IP
|
|||
public void writeToNBT(NBTTagCompound nbttagcompound) {
|
||||
super.writeToNBT(nbttagcompound);
|
||||
|
||||
Utils.writeStacksToNBT(nbttagcompound, "Items", items);
|
||||
InvUtils.writeStacksToNBT(nbttagcompound, "Items", items);
|
||||
|
||||
if (box.isInitialized()) {
|
||||
NBTTagCompound boxStore = new NBTTagCompound();
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package buildcraft.core.fluids;
|
||||
|
||||
import buildcraft.core.TileBuffer;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
@ -34,7 +35,7 @@ public class FluidUtils {
|
|||
|
||||
if (used > 0) {
|
||||
if (!player.capabilities.isCreativeMode) {
|
||||
player.inventory.setInventorySlotContents(player.inventory.currentItem, Utils.consumeItem(current));
|
||||
player.inventory.setInventorySlotContents(player.inventory.currentItem, InvUtils.consumeItem(current));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -52,10 +53,10 @@ public class FluidUtils {
|
|||
if (!player.inventory.addItemStackToInventory(filled)) {
|
||||
return false;
|
||||
} else {
|
||||
player.inventory.setInventorySlotContents(player.inventory.currentItem, Utils.consumeItem(current));
|
||||
player.inventory.setInventorySlotContents(player.inventory.currentItem, InvUtils.consumeItem(current));
|
||||
}
|
||||
} else {
|
||||
player.inventory.setInventorySlotContents(player.inventory.currentItem, Utils.consumeItem(current));
|
||||
player.inventory.setInventorySlotContents(player.inventory.currentItem, InvUtils.consumeItem(current));
|
||||
player.inventory.setInventorySlotContents(player.inventory.currentItem, filled);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,9 @@ import buildcraft.core.inventory.filters.IStackFilter;
|
|||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
||||
|
@ -116,4 +119,91 @@ public class InvUtils {
|
|||
inv.setInventorySlotContents(slot, null);
|
||||
}
|
||||
}
|
||||
|
||||
public static NBTTagCompound getItemData(ItemStack stack) {
|
||||
NBTTagCompound nbt = stack.getTagCompound();
|
||||
if (nbt == null) {
|
||||
nbt = new NBTTagCompound("tag");
|
||||
stack.setTagCompound(nbt);
|
||||
}
|
||||
return nbt;
|
||||
}
|
||||
|
||||
public static void addItemToolTip(ItemStack stack, String tag, String msg) {
|
||||
NBTTagCompound nbt = getItemData(stack);
|
||||
NBTTagCompound display = nbt.getCompoundTag("display");
|
||||
nbt.setCompoundTag("display", display);
|
||||
NBTTagList lore = display.getTagList("Lore");
|
||||
display.setTag("Lore", lore);
|
||||
lore.appendTag(new NBTTagString(tag, msg));
|
||||
}
|
||||
|
||||
public static void writeInvToNBT(IInventory inv, String tag, NBTTagCompound data) {
|
||||
NBTTagList list = new NBTTagList();
|
||||
for (byte slot = 0; slot < inv.getSizeInventory(); slot++) {
|
||||
ItemStack stack = inv.getStackInSlot(slot);
|
||||
if (stack != null) {
|
||||
NBTTagCompound itemTag = new NBTTagCompound();
|
||||
itemTag.setByte("Slot", slot);
|
||||
stack.writeToNBT(itemTag);
|
||||
list.appendTag(itemTag);
|
||||
}
|
||||
}
|
||||
data.setTag(tag, list);
|
||||
}
|
||||
|
||||
public static void readInvFromNBT(IInventory inv, String tag, NBTTagCompound data) {
|
||||
NBTTagList list = data.getTagList(tag);
|
||||
for (byte entry = 0; entry < list.tagCount(); entry++) {
|
||||
NBTTagCompound itemTag = (NBTTagCompound) list.tagAt(entry);
|
||||
int slot = itemTag.getByte("Slot");
|
||||
if (slot >= 0 && slot < inv.getSizeInventory()) {
|
||||
ItemStack stack = ItemStack.loadItemStackFromNBT(itemTag);
|
||||
inv.setInventorySlotContents(slot, stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void readStacksFromNBT(NBTTagCompound nbt, String name, ItemStack[] stacks) {
|
||||
NBTTagList nbttaglist = nbt.getTagList(name);
|
||||
|
||||
for (int i = 0; i < stacks.length; ++i) {
|
||||
if (i < nbttaglist.tagCount()) {
|
||||
NBTTagCompound nbttagcompound2 = (NBTTagCompound) nbttaglist.tagAt(i);
|
||||
|
||||
stacks[i] = ItemStack.loadItemStackFromNBT(nbttagcompound2);
|
||||
} else {
|
||||
stacks[i] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeStacksToNBT(NBTTagCompound nbt, String name, ItemStack[] stacks) {
|
||||
NBTTagList nbttaglist = new NBTTagList();
|
||||
|
||||
for (int i = 0; i < stacks.length; ++i) {
|
||||
NBTTagCompound cpt = new NBTTagCompound();
|
||||
nbttaglist.appendTag(cpt);
|
||||
if (stacks[i] != null) {
|
||||
stacks[i].writeToNBT(cpt);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
nbt.setTag(name, nbttaglist);
|
||||
}
|
||||
|
||||
public static ItemStack consumeItem(ItemStack stack) {
|
||||
if (stack.stackSize == 1) {
|
||||
if (stack.getItem().hasContainerItem()) {
|
||||
return stack.getItem().getContainerItemStack(stack);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
stack.splitStack(1);
|
||||
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -388,93 +388,6 @@ public class Utils {
|
|||
|
||||
}
|
||||
|
||||
public static NBTTagCompound getItemData(ItemStack stack) {
|
||||
NBTTagCompound nbt = stack.getTagCompound();
|
||||
if (nbt == null) {
|
||||
nbt = new NBTTagCompound("tag");
|
||||
stack.setTagCompound(nbt);
|
||||
}
|
||||
return nbt;
|
||||
}
|
||||
|
||||
public static void addItemToolTip(ItemStack stack, String tag, String msg) {
|
||||
NBTTagCompound nbt = getItemData(stack);
|
||||
NBTTagCompound display = nbt.getCompoundTag("display");
|
||||
nbt.setCompoundTag("display", display);
|
||||
NBTTagList lore = display.getTagList("Lore");
|
||||
display.setTag("Lore", lore);
|
||||
lore.appendTag(new NBTTagString(tag, msg));
|
||||
}
|
||||
|
||||
public static void writeInvToNBT(IInventory inv, String tag, NBTTagCompound data) {
|
||||
NBTTagList list = new NBTTagList();
|
||||
for (byte slot = 0; slot < inv.getSizeInventory(); slot++) {
|
||||
ItemStack stack = inv.getStackInSlot(slot);
|
||||
if (stack != null) {
|
||||
NBTTagCompound itemTag = new NBTTagCompound();
|
||||
itemTag.setByte("Slot", slot);
|
||||
stack.writeToNBT(itemTag);
|
||||
list.appendTag(itemTag);
|
||||
}
|
||||
}
|
||||
data.setTag(tag, list);
|
||||
}
|
||||
|
||||
public static void readInvFromNBT(IInventory inv, String tag, NBTTagCompound data) {
|
||||
NBTTagList list = data.getTagList(tag);
|
||||
for (byte entry = 0; entry < list.tagCount(); entry++) {
|
||||
NBTTagCompound itemTag = (NBTTagCompound) list.tagAt(entry);
|
||||
int slot = itemTag.getByte("Slot");
|
||||
if (slot >= 0 && slot < inv.getSizeInventory()) {
|
||||
ItemStack stack = ItemStack.loadItemStackFromNBT(itemTag);
|
||||
inv.setInventorySlotContents(slot, stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void readStacksFromNBT(NBTTagCompound nbt, String name, ItemStack[] stacks) {
|
||||
NBTTagList nbttaglist = nbt.getTagList(name);
|
||||
|
||||
for (int i = 0; i < stacks.length; ++i) {
|
||||
if (i < nbttaglist.tagCount()) {
|
||||
NBTTagCompound nbttagcompound2 = (NBTTagCompound) nbttaglist.tagAt(i);
|
||||
|
||||
stacks[i] = ItemStack.loadItemStackFromNBT(nbttagcompound2);
|
||||
} else {
|
||||
stacks[i] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void writeStacksToNBT(NBTTagCompound nbt, String name, ItemStack[] stacks) {
|
||||
NBTTagList nbttaglist = new NBTTagList();
|
||||
|
||||
for (int i = 0; i < stacks.length; ++i) {
|
||||
NBTTagCompound cpt = new NBTTagCompound();
|
||||
nbttaglist.appendTag(cpt);
|
||||
if (stacks[i] != null) {
|
||||
stacks[i].writeToNBT(cpt);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
nbt.setTag(name, nbttaglist);
|
||||
}
|
||||
|
||||
public static ItemStack consumeItem(ItemStack stack) {
|
||||
if (stack.stackSize == 1) {
|
||||
if (stack.getItem().hasContainerItem()) {
|
||||
return stack.getItem().getContainerItemStack(stack);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
stack.splitStack(1);
|
||||
|
||||
return stack;
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> T[] concat(T[] first, T[] second) {
|
||||
T[] result = Arrays.copyOf(first, first.length + second.length);
|
||||
System.arraycopy(second, 0, result, first.length, second.length);
|
||||
|
|
|
@ -33,6 +33,7 @@ import buildcraft.core.IItemPipe;
|
|||
import buildcraft.core.fluids.FluidUtils;
|
||||
import buildcraft.core.fluids.Tank;
|
||||
import buildcraft.core.fluids.TankManager;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.proxy.CoreProxy;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import buildcraft.energy.gui.ContainerEngine;
|
||||
|
@ -192,7 +193,7 @@ public class TileEngineIron extends TileEngineWithInventory implements IFluidHan
|
|||
if (liquid != null) {
|
||||
if (fill(ForgeDirection.UNKNOWN, liquid, false) == liquid.amount) {
|
||||
fill(ForgeDirection.UNKNOWN, liquid, true);
|
||||
setInventorySlotContents(0, Utils.consumeItem(stack));
|
||||
setInventorySlotContents(0, InvUtils.consumeItem(stack));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import buildcraft.BuildCraftCore;
|
|||
import buildcraft.BuildCraftEnergy;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.proxy.CoreProxy;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import buildcraft.energy.gui.ContainerEngine;
|
||||
|
@ -77,7 +78,7 @@ public class TileEngineStone extends TileEngineWithInventory {
|
|||
burnTime = totalBurnTime = getItemBurnTime(getStackInSlot(0));
|
||||
|
||||
if (burnTime > 0) {
|
||||
setInventorySlotContents(0, Utils.consumeItem(getStackInSlot(0)));
|
||||
setInventorySlotContents(0, InvUtils.consumeItem(getStackInSlot(0)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,11 +5,12 @@
|
|||
* 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.energy;
|
||||
package buildcraft.energy.triggers;
|
||||
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.core.triggers.BCTrigger;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.energy.TileEngine;
|
||||
import buildcraft.energy.TileEngine.EnergyStage;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
@ -34,13 +35,13 @@ public class TriggerEngineHeat extends BCTrigger {
|
|||
public String getDescription() {
|
||||
switch (stage) {
|
||||
case BLUE:
|
||||
return StringUtils.localize("gate.engine.blue");
|
||||
return StringUtils.localize("gate.trigger.engine.blue");
|
||||
case GREEN:
|
||||
return StringUtils.localize("gate.engine.green");
|
||||
return StringUtils.localize("gate.trigger.engine.green");
|
||||
case YELLOW:
|
||||
return StringUtils.localize("gate.engine.yellow");
|
||||
return StringUtils.localize("gate.trigger.engine.yellow");
|
||||
default:
|
||||
return StringUtils.localize("gate.engine.red");
|
||||
return StringUtils.localize("gate.trigger.engine.red");
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ package buildcraft.factory;
|
|||
|
||||
import buildcraft.BuildCraftCore;
|
||||
import buildcraft.core.CreativeTabBuildCraft;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
@ -101,7 +102,7 @@ public class BlockTank extends BlockContainer {
|
|||
int qty = tank.fill(ForgeDirection.UNKNOWN, liquid, true);
|
||||
|
||||
if (qty != 0 && !BuildCraftCore.debugMode && !entityplayer.capabilities.isCreativeMode) {
|
||||
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, Utils.consumeItem(current));
|
||||
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, InvUtils.consumeItem(current));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -121,10 +122,10 @@ public class BlockTank extends BlockContainer {
|
|||
if (!entityplayer.inventory.addItemStackToInventory(filled))
|
||||
return false;
|
||||
else {
|
||||
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, Utils.consumeItem(current));
|
||||
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, InvUtils.consumeItem(current));
|
||||
}
|
||||
} else {
|
||||
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, Utils.consumeItem(current));
|
||||
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, InvUtils.consumeItem(current));
|
||||
entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, filled);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -127,12 +127,12 @@ public class TileAutoWorkbench extends TileBuildCraft implements ISidedInventory
|
|||
public void readFromNBT(NBTTagCompound data) {
|
||||
super.readFromNBT(data);
|
||||
resultInv.readFromNBT(data);
|
||||
Utils.readInvFromNBT(craftMatrix, "matrix", data);
|
||||
InvUtils.readInvFromNBT(craftMatrix, "matrix", data);
|
||||
|
||||
// Legacy Code
|
||||
if (data.hasKey("stackList")) {
|
||||
ItemStack[] stacks = new ItemStack[9];
|
||||
Utils.readStacksFromNBT(data, "stackList", stacks);
|
||||
InvUtils.readStacksFromNBT(data, "stackList", stacks);
|
||||
for (int i = 0; i < 9; i++) {
|
||||
craftMatrix.setInventorySlotContents(i, stacks[i]);
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ public class TileAutoWorkbench extends TileBuildCraft implements ISidedInventory
|
|||
public void writeToNBT(NBTTagCompound data) {
|
||||
super.writeToNBT(data);
|
||||
resultInv.writeToNBT(data);
|
||||
Utils.writeInvToNBT(craftMatrix, "matrix", data);
|
||||
InvUtils.writeInvToNBT(craftMatrix, "matrix", data);
|
||||
}
|
||||
|
||||
public ItemStack findRecipeOutput() {
|
||||
|
|
|
@ -11,6 +11,7 @@ import buildcraft.core.gui.BuildCraftContainer;
|
|||
import buildcraft.core.gui.slots.SlotOutput;
|
||||
import buildcraft.core.gui.slots.SlotUntouchable;
|
||||
import buildcraft.core.gui.slots.SlotWorkbench;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.proxy.CoreProxy;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.core.utils.Utils;
|
||||
|
@ -39,7 +40,7 @@ public class ContainerAutoWorkbench extends BuildCraftContainer {
|
|||
public void setInventorySlotContents(int slot, ItemStack stack) {
|
||||
super.setInventorySlotContents(slot, stack);
|
||||
if (stack != null && tile.isLast() && CoreProxy.proxy.isRenderWorld(tile.worldObj)) {
|
||||
Utils.addItemToolTip(stack, "tip", EnumChatFormatting.YELLOW + StringUtils.localize("gui.clickcraft"));
|
||||
InvUtils.addItemToolTip(stack, "tip", EnumChatFormatting.YELLOW + StringUtils.localize("gui.clickcraft"));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -5,6 +5,7 @@ import buildcraft.api.power.ILaserTarget;
|
|||
import buildcraft.api.gates.IAction;
|
||||
import buildcraft.core.DefaultProps;
|
||||
import buildcraft.core.IMachine;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.network.PacketIds;
|
||||
import buildcraft.core.network.PacketNBT;
|
||||
import buildcraft.core.proxy.CoreProxy;
|
||||
|
@ -190,7 +191,7 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
|
|||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
|
||||
Utils.readStacksFromNBT(nbt, "items", items);
|
||||
InvUtils.readStacksFromNBT(nbt, "items", items);
|
||||
|
||||
energyStored = nbt.getFloat("energyStored");
|
||||
|
||||
|
@ -225,7 +226,7 @@ public class TileAssemblyTable extends TileEntity implements IMachine, IInventor
|
|||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
super.writeToNBT(nbt);
|
||||
|
||||
Utils.writeStacksToNBT(nbt, "items", items);
|
||||
InvUtils.writeStacksToNBT(nbt, "items", items);
|
||||
|
||||
nbt.setFloat("energyStored", energyStored);
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
*/
|
||||
package buildcraft.transport;
|
||||
|
||||
import buildcraft.transport.gates.ItemGate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
@ -44,6 +45,8 @@ import buildcraft.core.proxy.CoreProxy;
|
|||
import buildcraft.core.utils.BCLog;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import buildcraft.core.utils.MatrixTranformations;
|
||||
import buildcraft.transport.gates.GateDefinition;
|
||||
import buildcraft.transport.gates.GateFactory;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
@ -726,7 +729,7 @@ public class BlockGenericPipe extends BlockBuildCraft {
|
|||
|
||||
private boolean addGate(EntityPlayer player, Pipe pipe) {
|
||||
if (!pipe.hasGate()) {
|
||||
pipe.gate = Gate.makeGate(pipe, player.getCurrentEquippedItem());
|
||||
pipe.gate = GateFactory.makeGate(pipe, player.getCurrentEquippedItem());
|
||||
if (!player.capabilities.isCreativeMode) {
|
||||
player.getCurrentEquippedItem().splitStack(1);
|
||||
}
|
||||
|
@ -885,26 +888,12 @@ public class BlockGenericPipe extends BlockBuildCraft {
|
|||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public Icon getBlockTexture(IBlockAccess iblockaccess, int x, int y, int z, int side) {
|
||||
|
||||
TileEntity tile = iblockaccess.getBlockTileEntity(x, y, z);
|
||||
if (!(tile instanceof IPipeRenderState))
|
||||
if (!(tile instanceof TileGenericPipe))
|
||||
return null;
|
||||
if (((IPipeRenderState) tile).getRenderState().textureArray != null)
|
||||
return ((IPipeRenderState) tile).getRenderState().textureArray[side];
|
||||
return ((IPipeRenderState) tile).getRenderState().currentTexture;
|
||||
|
||||
// Pipe pipe = getPipe(iblockaccess, i, j, k);
|
||||
// if (!isValid(pipe)) {
|
||||
// CoreProxy.BindTexture(DefaultProps.TEXTURE_BLOCKS);
|
||||
// return 0;
|
||||
// }
|
||||
// int pipeTexture = pipe.getPipeTexture();
|
||||
// if (pipeTexture > 255) {
|
||||
// CoreProxy.BindTexture(DefaultProps.TEXTURE_EXTERNAL);
|
||||
// return pipeTexture - 256;
|
||||
// }
|
||||
// CoreProxy.BindTexture(DefaultProps.TEXTURE_BLOCKS);
|
||||
// return pipeTexture;
|
||||
if (((TileGenericPipe) tile).renderState.textureArray != null)
|
||||
return ((TileGenericPipe) tile).renderState.textureArray[side];
|
||||
return ((TileGenericPipe) tile).renderState.currentTexture;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1052,6 +1041,14 @@ public class BlockGenericPipe extends BlockBuildCraft {
|
|||
dummyPipe.getIconProvider().registerIcons(iconRegister);
|
||||
}
|
||||
}
|
||||
|
||||
for (GateDefinition.GateMaterial material : GateDefinition.GateMaterial.VALUES) {
|
||||
material.registerBlockIcon(iconRegister);
|
||||
}
|
||||
|
||||
for (GateDefinition.GateLogic logic : GateDefinition.GateLogic.VALUES) {
|
||||
logic.registerBlockIcon(iconRegister);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -7,60 +7,34 @@ import buildcraft.api.gates.IActionReceptor;
|
|||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.api.gates.ITriggerParameter;
|
||||
import buildcraft.api.gates.TriggerParameter;
|
||||
import buildcraft.core.network.PacketPayload;
|
||||
import buildcraft.core.network.PacketPayloadArrays;
|
||||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.proxy.CoreProxy;
|
||||
import buildcraft.core.triggers.ActionRedstoneOutput;
|
||||
import buildcraft.transport.gates.GateDefinition.GateLogic;
|
||||
import buildcraft.transport.gates.GateDefinition.GateMaterial;
|
||||
import buildcraft.transport.gates.GateExpansionController;
|
||||
import buildcraft.transport.gates.ItemGate;
|
||||
import buildcraft.transport.triggers.ActionSignalOutput;
|
||||
import com.google.common.collect.HashMultiset;
|
||||
import com.google.common.collect.Multiset;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
||||
public abstract class Gate {
|
||||
public final class Gate {
|
||||
|
||||
public static enum GateKind {
|
||||
|
||||
None, Single, AND_2, OR_2, AND_3, OR_3, AND_4, OR_4, AND_5, OR_5;
|
||||
|
||||
public static GateKind getKindFromDamage(ItemStack itemstack) {
|
||||
switch (itemstack.getItemDamage()) {
|
||||
case 0:
|
||||
return Single;
|
||||
case 1:
|
||||
return AND_2;
|
||||
case 2:
|
||||
return OR_2;
|
||||
case 3:
|
||||
return AND_3;
|
||||
case 4:
|
||||
return OR_3;
|
||||
case 5:
|
||||
return AND_4;
|
||||
case 6:
|
||||
return OR_4;
|
||||
case 7:
|
||||
return AND_5;
|
||||
case 8:
|
||||
return OR_5;
|
||||
default:
|
||||
return None;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static enum GateConditional {
|
||||
|
||||
None, AND, OR
|
||||
}
|
||||
protected Pipe pipe;
|
||||
public GateKind kind;
|
||||
public final Pipe pipe;
|
||||
public final GateMaterial material;
|
||||
public final GateLogic logic;
|
||||
public final Set<GateExpansionController> expansions = new HashSet<GateExpansionController>();
|
||||
public ITrigger[] triggers = new ITrigger[8];
|
||||
public ITriggerParameter[] triggerParameters = new ITriggerParameter[8];
|
||||
public IAction[] actions = new IAction[8];
|
||||
|
@ -68,14 +42,10 @@ public abstract class Gate {
|
|||
public boolean broadcastRedstone = false;
|
||||
|
||||
// / CONSTRUCTOR
|
||||
public Gate(Pipe pipe) {
|
||||
public Gate(Pipe pipe, GateMaterial material, GateLogic logic) {
|
||||
this.pipe = pipe;
|
||||
}
|
||||
|
||||
public Gate(Pipe pipe, ItemStack stack) {
|
||||
|
||||
this.pipe = pipe;
|
||||
kind = GateKind.getKindFromDamage(stack);
|
||||
this.material = material;
|
||||
this.logic = logic;
|
||||
}
|
||||
|
||||
public void setTrigger(int position, ITrigger trigger) {
|
||||
|
@ -104,7 +74,8 @@ public abstract class Gate {
|
|||
|
||||
// / SAVING & LOADING
|
||||
public void writeToNBT(NBTTagCompound data) {
|
||||
data.setInteger("Kind", kind.ordinal());
|
||||
data.setString("material", material.name());
|
||||
data.setString("logic", logic.name());
|
||||
|
||||
for (int i = 0; i < 8; ++i) {
|
||||
if (triggers[i] != null)
|
||||
|
@ -125,8 +96,6 @@ public abstract class Gate {
|
|||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound data) {
|
||||
kind = Gate.GateKind.values()[data.getInteger("Kind")];
|
||||
|
||||
for (int i = 0; i < 8; ++i) {
|
||||
if (data.hasKey("trigger[" + i + "]"))
|
||||
triggers[i] = ActionManager.triggers.get(data.getString("trigger[" + i + "]"));
|
||||
|
@ -144,20 +113,23 @@ public abstract class Gate {
|
|||
broadcastRedstone = data.getBoolean("redstoneState");
|
||||
}
|
||||
|
||||
// / SMP
|
||||
public PacketPayload toPayload() {
|
||||
PacketPayloadArrays payload = new PacketPayloadArrays(1, 0, 0);
|
||||
payload.intPayload[0] = kind.ordinal();
|
||||
return payload;
|
||||
// GUI
|
||||
public void openGui(EntityPlayer player) {
|
||||
if (!CoreProxy.proxy.isRenderWorld(player.worldObj)) {
|
||||
player.openGui(BuildCraftTransport.instance, GuiIds.GATES, pipe.container.worldObj, pipe.container.xCoord, pipe.container.yCoord, pipe.container.zCoord);
|
||||
}
|
||||
}
|
||||
|
||||
// GUI
|
||||
public abstract void openGui(EntityPlayer player);
|
||||
|
||||
// / UPDATING
|
||||
public abstract void update();
|
||||
public void tick() {
|
||||
for (GateExpansionController expansion : expansions) {
|
||||
expansion.tick();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract ItemStack getGateItem();
|
||||
public ItemStack getGateItem() {
|
||||
return ItemGate.makeGateItem(this);
|
||||
}
|
||||
|
||||
public void dropGate() {
|
||||
pipe.dropItem(getGateItem());
|
||||
|
@ -170,11 +142,6 @@ public abstract class Gate {
|
|||
}
|
||||
}
|
||||
|
||||
// / INFORMATION
|
||||
public abstract String getName();
|
||||
|
||||
public abstract GateConditional getConditional();
|
||||
|
||||
public boolean isGateActive() {
|
||||
for (boolean b : broadcastSignal) {
|
||||
if (b)
|
||||
|
@ -187,7 +154,11 @@ public abstract class Gate {
|
|||
return broadcastRedstone;
|
||||
}
|
||||
|
||||
public abstract void startResolution();
|
||||
public void startResolution() {
|
||||
for (GateExpansionController expansion : expansions) {
|
||||
expansion.startResolution();
|
||||
}
|
||||
}
|
||||
|
||||
public void resolveActions() {
|
||||
boolean oldBroadcastRedstone = broadcastRedstone;
|
||||
|
@ -212,7 +183,7 @@ public abstract class Gate {
|
|||
actionCount.add(action);
|
||||
if (!activeActions.containsKey(action)) {
|
||||
activeActions.put(action, isNearbyTriggerActive(trigger, parameter));
|
||||
} else if (getConditional() == GateConditional.AND) {
|
||||
} else if (logic == GateLogic.AND) {
|
||||
activeActions.put(action, activeActions.get(action) && isNearbyTriggerActive(trigger, parameter));
|
||||
} else {
|
||||
activeActions.put(action, activeActions.get(action) || isNearbyTriggerActive(trigger, parameter));
|
||||
|
@ -262,7 +233,13 @@ public abstract class Gate {
|
|||
}
|
||||
}
|
||||
|
||||
public abstract boolean resolveAction(IAction action, int count);
|
||||
public boolean resolveAction(IAction action, int count) {
|
||||
for (GateExpansionController expansion : expansions) {
|
||||
if (expansion.resolveAction(action, count))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isNearbyTriggerActive(ITrigger trigger, ITriggerParameter parameter) {
|
||||
if (trigger instanceof ITriggerPipe)
|
||||
|
@ -282,31 +259,57 @@ public abstract class Gate {
|
|||
}
|
||||
|
||||
// / TRIGGERS
|
||||
public abstract void addTrigger(LinkedList<ITrigger> list);
|
||||
public void addTrigger(List<ITrigger> list) {
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Red.ordinal()] && material == GateMaterial.IRON) {
|
||||
list.add(BuildCraftTransport.triggerRedSignalActive);
|
||||
list.add(BuildCraftTransport.triggerRedSignalInactive);
|
||||
}
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Blue.ordinal()] && material == GateMaterial.IRON) {
|
||||
list.add(BuildCraftTransport.triggerBlueSignalActive);
|
||||
list.add(BuildCraftTransport.triggerBlueSignalInactive);
|
||||
}
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Green.ordinal()] && material == GateMaterial.GOLD) {
|
||||
list.add(BuildCraftTransport.triggerGreenSignalActive);
|
||||
list.add(BuildCraftTransport.triggerGreenSignalInactive);
|
||||
}
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Yellow.ordinal()] && material == GateMaterial.DIAMOND) {
|
||||
list.add(BuildCraftTransport.triggerYellowSignalActive);
|
||||
list.add(BuildCraftTransport.triggerYellowSignalInactive);
|
||||
}
|
||||
|
||||
for (GateExpansionController expansion : expansions) {
|
||||
expansion.addTriggers(list);
|
||||
}
|
||||
|
||||
// if (pipe.gate.kind == GateKind.AND_5 || pipe.gate.kind == GateKind.OR_5) {
|
||||
// list.add(BuildCraftTransport.triggerTimerShort);
|
||||
// list.add(BuildCraftTransport.triggerTimerMedium);
|
||||
// list.add(BuildCraftTransport.triggerTimerLong);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
// / ACTIONS
|
||||
public abstract void addActions(LinkedList<IAction> list);
|
||||
public void addActions(List<IAction> list) {
|
||||
if (pipe.wireSet[IPipe.WireColor.Red.ordinal()] && material == GateMaterial.IRON)
|
||||
list.add(BuildCraftTransport.actionRedSignal);
|
||||
|
||||
// / TEXTURES
|
||||
public abstract int getTextureIconIndex(boolean isSignalActive);
|
||||
if (pipe.wireSet[IPipe.WireColor.Blue.ordinal()] && material == GateMaterial.IRON)
|
||||
list.add(BuildCraftTransport.actionBlueSignal);
|
||||
|
||||
public abstract ResourceLocation getGuiFile();
|
||||
if (pipe.wireSet[IPipe.WireColor.Green.ordinal()] && material == GateMaterial.GOLD)
|
||||
list.add(BuildCraftTransport.actionGreenSignal);
|
||||
|
||||
public int getGuiHeight() {
|
||||
return 207;
|
||||
}
|
||||
if (pipe.wireSet[IPipe.WireColor.Yellow.ordinal()] && material == GateMaterial.DIAMOND)
|
||||
list.add(BuildCraftTransport.actionYellowSignal);
|
||||
|
||||
public static boolean isGateItem(ItemStack stack) {
|
||||
return stack.itemID == BuildCraftTransport.pipeGate.itemID || stack.itemID == BuildCraftTransport.pipeGateAutarchic.itemID;
|
||||
}
|
||||
|
||||
public static Gate makeGate(Pipe pipe, NBTTagCompound data) {
|
||||
Gate gate = new GateVanilla(pipe);
|
||||
gate.readFromNBT(data);
|
||||
return gate;
|
||||
}
|
||||
|
||||
public static Gate makeGate(Pipe pipe, ItemStack stack) {
|
||||
return new GateVanilla(pipe, stack);
|
||||
for (GateExpansionController expansion : expansions) {
|
||||
expansion.addActions(list);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,360 +0,0 @@
|
|||
package buildcraft.transport;
|
||||
|
||||
import buildcraft.BuildCraftTransport;
|
||||
import buildcraft.api.gates.IAction;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.api.power.IPowerReceptor;
|
||||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.core.DefaultProps;
|
||||
import buildcraft.core.GuiIds;
|
||||
import buildcraft.core.proxy.CoreProxy;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.transport.pipes.PipePowerWood;
|
||||
import buildcraft.transport.triggers.ActionEnergyPulser;
|
||||
import buildcraft.transport.triggers.ActionSingleEnergyPulse;
|
||||
import java.util.LinkedList;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
public class GateVanilla extends Gate {
|
||||
|
||||
private EnergyPulser pulser;
|
||||
|
||||
public GateVanilla(Pipe pipe) {
|
||||
super(pipe);
|
||||
}
|
||||
|
||||
public GateVanilla(Pipe pipe, ItemStack stack) {
|
||||
super(pipe, stack);
|
||||
|
||||
if (stack.itemID == BuildCraftTransport.pipeGateAutarchic.itemID) {
|
||||
addEnergyPulser(pipe);
|
||||
}
|
||||
}
|
||||
|
||||
// / SAVING & LOADING
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbttagcompound) {
|
||||
super.writeToNBT(nbttagcompound);
|
||||
|
||||
if (pulser != null) {
|
||||
NBTTagCompound nbttagcompoundC = new NBTTagCompound();
|
||||
pulser.writeToNBT(nbttagcompoundC);
|
||||
nbttagcompound.setTag("Pulser", nbttagcompoundC);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbttagcompound) {
|
||||
super.readFromNBT(nbttagcompound);
|
||||
|
||||
// Load pulser if any
|
||||
if (nbttagcompound.hasKey("Pulser")) {
|
||||
NBTTagCompound nbttagcompoundP = nbttagcompound.getCompoundTag("Pulser");
|
||||
addEnergyPulser(pipe);
|
||||
pulser.readFromNBT(nbttagcompoundP);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// GUI
|
||||
@Override
|
||||
public void openGui(EntityPlayer player) {
|
||||
if (!CoreProxy.proxy.isRenderWorld(player.worldObj)) {
|
||||
player.openGui(BuildCraftTransport.instance, GuiIds.GATES, pipe.container.worldObj, pipe.container.xCoord, pipe.container.yCoord, pipe.container.zCoord);
|
||||
}
|
||||
}
|
||||
|
||||
// / UPDATING
|
||||
@Override
|
||||
public void update() {
|
||||
if (hasPulser()) {
|
||||
pulser.update();
|
||||
}
|
||||
}
|
||||
|
||||
// / INFORMATION
|
||||
public boolean hasPulser() {
|
||||
return pulser != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
switch (kind) {
|
||||
case Single:
|
||||
return StringUtils.localize("item.pipeGate.0");
|
||||
case AND_2:
|
||||
return StringUtils.localize("item.pipeGate.1");
|
||||
case OR_2:
|
||||
return StringUtils.localize("item.pipeGate.2");
|
||||
case AND_3:
|
||||
return StringUtils.localize("item.pipeGate.3");
|
||||
case OR_3:
|
||||
return StringUtils.localize("item.pipeGate.4");
|
||||
case AND_4:
|
||||
return StringUtils.localize("item.pipeGate.5");
|
||||
case OR_4:
|
||||
return StringUtils.localize("item.pipeGate.6");
|
||||
case AND_5:
|
||||
return StringUtils.localize("item.pipeGate.7");
|
||||
case OR_5:
|
||||
return StringUtils.localize("item.pipeGate.8");
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public GateConditional getConditional() {
|
||||
if (kind == GateKind.OR_2 || kind == GateKind.OR_3 || kind == GateKind.OR_4 || kind == GateKind.OR_5)
|
||||
return GateConditional.OR;
|
||||
else if (kind == GateKind.AND_2 || kind == GateKind.AND_3 || kind == GateKind.AND_4 || kind == GateKind.AND_5)
|
||||
return GateConditional.AND;
|
||||
else
|
||||
return GateConditional.None;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to add an energy pulser to gates that accept energy.
|
||||
*
|
||||
* @param pipe
|
||||
* @return
|
||||
*/
|
||||
private boolean addEnergyPulser(Pipe pipe) {
|
||||
if (!(pipe instanceof IPowerReceptor) || pipe instanceof PipePowerWood) {
|
||||
pulser = new EnergyPulser(null);
|
||||
return false;
|
||||
}
|
||||
pulser = new EnergyPulser((IPowerReceptor) pipe);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Drops a gate item of the specified kind.
|
||||
*
|
||||
* @param kind
|
||||
* @param world
|
||||
* @param i
|
||||
* @param j
|
||||
* @param k
|
||||
*/
|
||||
@Override
|
||||
public ItemStack getGateItem() {
|
||||
|
||||
int gateDamage;
|
||||
switch (kind) {
|
||||
case Single:
|
||||
gateDamage = 0;
|
||||
break;
|
||||
case AND_2:
|
||||
gateDamage = 1;
|
||||
break;
|
||||
case OR_2:
|
||||
gateDamage = 2;
|
||||
break;
|
||||
case AND_3:
|
||||
gateDamage = 3;
|
||||
break;
|
||||
case OR_3:
|
||||
gateDamage = 4;
|
||||
break;
|
||||
case AND_4:
|
||||
gateDamage = 5;
|
||||
break;
|
||||
case OR_4:
|
||||
gateDamage = 6;
|
||||
case AND_5:
|
||||
gateDamage = 7;
|
||||
break;
|
||||
default:
|
||||
gateDamage = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
Item gateItem;
|
||||
if (hasPulser()) {
|
||||
gateItem = BuildCraftTransport.pipeGateAutarchic;
|
||||
} else {
|
||||
gateItem = BuildCraftTransport.pipeGate;
|
||||
}
|
||||
|
||||
return new ItemStack(gateItem, 1, gateDamage);
|
||||
|
||||
}
|
||||
|
||||
// / ACTIONS
|
||||
@Override
|
||||
public void addActions(LinkedList<IAction> list) {
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Red.ordinal()] && kind.ordinal() >= Gate.GateKind.AND_2.ordinal()) {
|
||||
list.add(BuildCraftTransport.actionRedSignal);
|
||||
}
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Blue.ordinal()] && kind.ordinal() >= Gate.GateKind.AND_3.ordinal()) {
|
||||
list.add(BuildCraftTransport.actionBlueSignal);
|
||||
}
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Green.ordinal()] && kind.ordinal() >= Gate.GateKind.AND_4.ordinal()) {
|
||||
list.add(BuildCraftTransport.actionGreenSignal);
|
||||
}
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Yellow.ordinal()] && kind.ordinal() >= Gate.GateKind.AND_4.ordinal()) {
|
||||
list.add(BuildCraftTransport.actionYellowSignal);
|
||||
}
|
||||
|
||||
if (hasPulser()) {
|
||||
list.add(BuildCraftTransport.actionEnergyPulser);
|
||||
list.add(BuildCraftTransport.actionSingleEnergyPulse);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startResolution() {
|
||||
if (hasPulser() && pulser.isActive()) {
|
||||
pulser.disablePulse();
|
||||
pipe.container.scheduleRenderUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean resolveAction(IAction action, int count) {
|
||||
|
||||
if (action instanceof ActionEnergyPulser) {
|
||||
pulser.enablePulse(count);
|
||||
pipe.container.scheduleRenderUpdate();
|
||||
return true;
|
||||
} else if (action instanceof ActionSingleEnergyPulse) {
|
||||
pulser.enableSinglePulse(count);
|
||||
pipe.container.scheduleRenderUpdate();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// / TRIGGERS
|
||||
@Override
|
||||
public void addTrigger(LinkedList<ITrigger> list) {
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Red.ordinal()] && kind.ordinal() >= Gate.GateKind.AND_2.ordinal()) {
|
||||
list.add(BuildCraftTransport.triggerRedSignalActive);
|
||||
list.add(BuildCraftTransport.triggerRedSignalInactive);
|
||||
}
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Blue.ordinal()] && kind.ordinal() >= Gate.GateKind.AND_3.ordinal()) {
|
||||
list.add(BuildCraftTransport.triggerBlueSignalActive);
|
||||
list.add(BuildCraftTransport.triggerBlueSignalInactive);
|
||||
}
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Green.ordinal()] && kind.ordinal() >= Gate.GateKind.AND_4.ordinal()) {
|
||||
list.add(BuildCraftTransport.triggerGreenSignalActive);
|
||||
list.add(BuildCraftTransport.triggerGreenSignalInactive);
|
||||
}
|
||||
|
||||
if (pipe.wireSet[IPipe.WireColor.Yellow.ordinal()] && kind.ordinal() >= Gate.GateKind.AND_4.ordinal()) {
|
||||
list.add(BuildCraftTransport.triggerYellowSignalActive);
|
||||
list.add(BuildCraftTransport.triggerYellowSignalInactive);
|
||||
}
|
||||
|
||||
if (pipe.gate.kind == GateKind.AND_5 || pipe.gate.kind == GateKind.OR_5) {
|
||||
list.add(BuildCraftTransport.triggerTimerShort);
|
||||
list.add(BuildCraftTransport.triggerTimerMedium);
|
||||
list.add(BuildCraftTransport.triggerTimerLong);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// / ICONS
|
||||
@Override
|
||||
public final int getTextureIconIndex(boolean isSignalActive) {
|
||||
|
||||
boolean isGateActive = isSignalActive;
|
||||
if (hasPulser() && pulser.isActive()) {
|
||||
isGateActive = true;
|
||||
}
|
||||
|
||||
if (!hasPulser()) {
|
||||
switch (kind) {
|
||||
case None:
|
||||
return 0;
|
||||
case Single:
|
||||
return isGateActive ? GateIconProvider.Gate_Lit : GateIconProvider.Gate_Dark;
|
||||
case AND_2:
|
||||
return isGateActive ? GateIconProvider.Gate_Iron_And_Lit : GateIconProvider.Gate_Iron_And_Dark;
|
||||
case OR_2:
|
||||
return isGateActive ? GateIconProvider.Gate_Iron_Or_Lit : GateIconProvider.Gate_Iron_Or_Dark;
|
||||
case AND_3:
|
||||
return isGateActive ? GateIconProvider.Gate_Gold_And_Lit : GateIconProvider.Gate_Gold_And_Dark;
|
||||
case OR_3:
|
||||
return isGateActive ? GateIconProvider.Gate_Gold_Or_Lit : GateIconProvider.Gate_Gold_Or_Dark;
|
||||
case AND_4:
|
||||
return isGateActive ? GateIconProvider.Gate_Diamond_And_Lit : GateIconProvider.Gate_Diamond_And_Dark;
|
||||
case OR_4:
|
||||
return isGateActive ? GateIconProvider.Gate_Diamond_Or_Lit : GateIconProvider.Gate_Diamond_Or_Dark;
|
||||
case AND_5:
|
||||
return isGateActive ? GateIconProvider.Gate_Quartz_And_Lit : GateIconProvider.Gate_Quartz_And_Dark;
|
||||
case OR_5:
|
||||
return isGateActive ? GateIconProvider.Gate_Quartz_Or_Lit : GateIconProvider.Gate_Quartz_Or_Dark;
|
||||
}
|
||||
} else {
|
||||
switch (kind) {
|
||||
case None:
|
||||
return 0;
|
||||
case Single:
|
||||
return isGateActive ? GateIconProvider.Gate_Autarchic_Lit : GateIconProvider.Gate_Autarchic_Dark;
|
||||
case AND_2:
|
||||
return isGateActive ? GateIconProvider.Gate_Autarchic_Iron_And_Lit : GateIconProvider.Gate_Autarchic_Iron_And_Dark;
|
||||
case OR_2:
|
||||
return isGateActive ? GateIconProvider.Gate_Autarchic_Iron_Or_Lit : GateIconProvider.Gate_Autarchic_Iron_Or_Dark;
|
||||
case AND_3:
|
||||
return isGateActive ? GateIconProvider.Gate_Autarchic_Gold_And_Lit : GateIconProvider.Gate_Autarchic_Gold_And_Dark;
|
||||
case OR_3:
|
||||
return isGateActive ? GateIconProvider.Gate_Autarchic_Gold_Or_Lit : GateIconProvider.Gate_Autarchic_Gold_Or_Dark;
|
||||
case AND_4:
|
||||
return isGateActive ? GateIconProvider.Gate_Autarchic_Diamond_And_Lit : GateIconProvider.Gate_Autarchic_Diamond_And_Dark;
|
||||
case OR_4:
|
||||
return isGateActive ? GateIconProvider.Gate_Autarchic_Diamond_Or_Lit : GateIconProvider.Gate_Autarchic_Diamond_Or_Dark;
|
||||
case AND_5:
|
||||
return isGateActive ? GateIconProvider.Gate_Autarchic_Quartz_And_Lit : GateIconProvider.Gate_Autarchic_Quartz_And_Dark;
|
||||
case OR_5:
|
||||
return isGateActive ? GateIconProvider.Gate_Autarchic_Quartz_Or_Lit : GateIconProvider.Gate_Autarchic_Quartz_Or_Dark;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
private static final ResourceLocation TEXTURE1 = new ResourceLocation("buildcraft", DefaultProps.TEXTURE_PATH_GUI + "/gate_interface_1.png");
|
||||
private static final ResourceLocation TEXTURE2 = new ResourceLocation("buildcraft", DefaultProps.TEXTURE_PATH_GUI + "/gate_interface_2.png");
|
||||
private static final ResourceLocation TEXTURE3 = new ResourceLocation("buildcraft", DefaultProps.TEXTURE_PATH_GUI + "/gate_interface_3.png");
|
||||
private static final ResourceLocation TEXTURE4 = new ResourceLocation("buildcraft", DefaultProps.TEXTURE_PATH_GUI + "/gate_interface_4.png");
|
||||
|
||||
@Override
|
||||
public ResourceLocation getGuiFile() {
|
||||
if (kind == GateKind.Single)
|
||||
return TEXTURE1;
|
||||
else if (kind == GateKind.AND_2 || kind == GateKind.OR_2)
|
||||
return TEXTURE2;
|
||||
else if (kind == GateKind.AND_3 || kind == GateKind.OR_3 || kind == GateKind.AND_5 || kind == GateKind.OR_5)
|
||||
return TEXTURE3;
|
||||
else
|
||||
return TEXTURE4;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGuiHeight() {
|
||||
switch (kind) {
|
||||
case Single:
|
||||
return 146;
|
||||
case AND_2:
|
||||
case OR_2:
|
||||
return 164;
|
||||
default:
|
||||
return 200;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
package buildcraft.transport;
|
||||
|
||||
import buildcraft.api.core.IIconProvider;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
public interface IPipeRenderState {
|
||||
public PipeRenderState getRenderState();
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIconProvider getPipeIcons();
|
||||
}
|
|
@ -1,164 +0,0 @@
|
|||
package buildcraft.transport;
|
||||
|
||||
import buildcraft.api.gates.ActionManager;
|
||||
import buildcraft.api.gates.IAction;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.core.ItemBuildCraft;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.util.List;
|
||||
import net.minecraft.client.renderer.texture.IconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Icon;
|
||||
|
||||
public class ItemGate extends ItemBuildCraft {
|
||||
|
||||
public static final int Gate = 0;
|
||||
public static final int Gate_Iron_And = 1;
|
||||
public static final int Gate_Iron_Or = 2;
|
||||
public static final int Gate_Gold_And = 3;
|
||||
public static final int Gate_Gold_Or = 4;
|
||||
public static final int Gate_Diamond_And = 5;
|
||||
public static final int Gate_Diamond_Or = 6;
|
||||
|
||||
public static final int Autarchic_Gate = 7;
|
||||
public static final int Autarchic_Gate_Iron_And = 8;
|
||||
public static final int Autarchic_Gate_Iron_Or = 9;
|
||||
public static final int Autarchic_Gate_Gold_And = 10;
|
||||
public static final int Autarchic_Gate_Gold_Or = 11;
|
||||
public static final int Autarchic_Gate_Diamond_And = 12;
|
||||
public static final int Autarchic_Gate_Diamond_Or = 13;
|
||||
|
||||
public static final int Gate_Quartz_And = 14;
|
||||
public static final int Gate_Quartz_Or = 15;
|
||||
|
||||
public static final int Autarchic_Gate_Quartz_And = 16;
|
||||
public static final int Autarchic_Gate_Quartz_Or = 17;
|
||||
|
||||
public static final int MAX = 18;
|
||||
|
||||
private int series;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private Icon[] icons;
|
||||
|
||||
public ItemGate(int i, int series) {
|
||||
super(i);
|
||||
|
||||
this.series = series;
|
||||
|
||||
setHasSubtypes(true);
|
||||
setMaxDamage(0);
|
||||
setPassSneakClick(true);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "all" })
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public Icon getIconFromDamage(int i) {
|
||||
if (series == 0){ //Normal Gates
|
||||
switch (i) {
|
||||
case 0:
|
||||
return icons[ItemGate.Gate];
|
||||
case 1:
|
||||
return icons[ItemGate.Gate_Iron_And];
|
||||
case 2:
|
||||
return icons[ItemGate.Gate_Iron_Or];
|
||||
case 3:
|
||||
return icons[ItemGate.Gate_Gold_And];
|
||||
case 4:
|
||||
return icons[ItemGate.Gate_Gold_Or];
|
||||
case 5:
|
||||
return icons[ItemGate.Gate_Diamond_And];
|
||||
case 6:
|
||||
return icons[ItemGate.Gate_Diamond_Or];
|
||||
case 7:
|
||||
return icons[ItemGate.Gate_Quartz_And];
|
||||
default:
|
||||
return icons[ItemGate.Gate_Quartz_Or];
|
||||
}
|
||||
} else if (series == 1){
|
||||
switch (i) {
|
||||
case 0:
|
||||
return icons[ItemGate.Autarchic_Gate];
|
||||
case 1:
|
||||
return icons[ItemGate.Autarchic_Gate_Iron_And];
|
||||
case 2:
|
||||
return icons[ItemGate.Autarchic_Gate_Iron_Or];
|
||||
case 3:
|
||||
return icons[ItemGate.Autarchic_Gate_Gold_And];
|
||||
case 4:
|
||||
return icons[ItemGate.Autarchic_Gate_Gold_Or];
|
||||
case 5:
|
||||
return icons[ItemGate.Autarchic_Gate_Diamond_And];
|
||||
case 6:
|
||||
return icons[ItemGate.Autarchic_Gate_Diamond_Or];
|
||||
case 7:
|
||||
return icons[ItemGate.Autarchic_Gate_Quartz_And];
|
||||
default:
|
||||
return icons[ItemGate.Autarchic_Gate_Quartz_Or];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack itemstack) {
|
||||
return (new StringBuilder()).append(super.getUnlocalizedName()).append(".").append(itemstack.getItemDamage()).toString();
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List itemList) {
|
||||
itemList.add(new ItemStack(this, 1, 0));
|
||||
itemList.add(new ItemStack(this, 1, 1));
|
||||
itemList.add(new ItemStack(this, 1, 2));
|
||||
itemList.add(new ItemStack(this, 1, 3));
|
||||
itemList.add(new ItemStack(this, 1, 4));
|
||||
itemList.add(new ItemStack(this, 1, 5));
|
||||
itemList.add(new ItemStack(this, 1, 6));
|
||||
itemList.add(new ItemStack(this, 1, 7));
|
||||
itemList.add(new ItemStack(this, 1, 8));
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IconRegister iconRegister)
|
||||
{
|
||||
|
||||
for (IAction action : ActionManager.actions.values()){
|
||||
action.registerIcons(iconRegister);
|
||||
}
|
||||
|
||||
for (ITrigger trigger : ActionManager.triggers.values()){
|
||||
trigger.registerIcons(iconRegister);
|
||||
}
|
||||
|
||||
icons = new Icon[ItemGate.MAX];
|
||||
icons[ItemGate.Gate] = iconRegister.registerIcon("buildcraft:gate");
|
||||
icons[ItemGate.Gate_Iron_And] = iconRegister.registerIcon("buildcraft:gate_iron_and");
|
||||
icons[ItemGate.Gate_Iron_Or] = iconRegister.registerIcon("buildcraft:gate_iron_or");
|
||||
icons[ItemGate.Gate_Gold_And] = iconRegister.registerIcon("buildcraft:gate_gold_and");
|
||||
icons[ItemGate.Gate_Gold_Or] = iconRegister.registerIcon("buildcraft:gate_gold_or");
|
||||
icons[ItemGate.Gate_Diamond_And] = iconRegister.registerIcon("buildcraft:gate_diamond_and");
|
||||
icons[ItemGate.Gate_Diamond_Or] = iconRegister.registerIcon("buildcraft:gate_diamond_or");
|
||||
|
||||
icons[ItemGate.Autarchic_Gate] = iconRegister.registerIcon("buildcraft:autarchic_gate");
|
||||
icons[ItemGate.Autarchic_Gate_Iron_And] = iconRegister.registerIcon("buildcraft:autarchic_gate_iron_and");
|
||||
icons[ItemGate.Autarchic_Gate_Iron_Or] = iconRegister.registerIcon("buildcraft:autarchic_gate_iron_or");
|
||||
icons[ItemGate.Autarchic_Gate_Gold_And] = iconRegister.registerIcon("buildcraft:autarchic_gate_gold_and");
|
||||
icons[ItemGate.Autarchic_Gate_Gold_Or] = iconRegister.registerIcon("buildcraft:autarchic_gate_gold_or");
|
||||
icons[ItemGate.Autarchic_Gate_Diamond_And] = iconRegister.registerIcon("buildcraft:autarchic_gate_diamond_and");
|
||||
icons[ItemGate.Autarchic_Gate_Diamond_Or] = iconRegister.registerIcon("buildcraft:autarchic_gate_diamond_or");
|
||||
|
||||
icons[ItemGate.Gate_Quartz_And] = iconRegister.registerIcon("buildcraft:gate_quartz_and");
|
||||
icons[ItemGate.Gate_Quartz_Or] = iconRegister.registerIcon("buildcraft:gate_quartz_or");
|
||||
|
||||
icons[ItemGate.Autarchic_Gate_Quartz_And] = iconRegister.registerIcon("buildcraft:autarchic_gate_quartz_and");
|
||||
icons[ItemGate.Autarchic_Gate_Quartz_Or] = iconRegister.registerIcon("buildcraft:autarchic_gate_quartz_or");
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -19,6 +19,7 @@ import buildcraft.core.IDropControlInventory;
|
|||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.core.network.TilePacketWrapper;
|
||||
import buildcraft.core.utils.Utils;
|
||||
import buildcraft.transport.gates.GateFactory;
|
||||
import buildcraft.transport.pipes.events.PipeEvent;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
@ -189,7 +190,7 @@ public abstract class Pipe<T extends PipeTransport> implements IPipe, IDropContr
|
|||
// Update the gate if we have any
|
||||
if (gate != null) {
|
||||
gate.resolveActions();
|
||||
gate.update();
|
||||
gate.tick();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -200,7 +201,7 @@ public abstract class Pipe<T extends PipeTransport> implements IPipe, IDropContr
|
|||
public void writeToNBT(NBTTagCompound data) {
|
||||
transport.writeToNBT(data);
|
||||
|
||||
// Save pulser if any
|
||||
// Save gate if any
|
||||
if (gate != null) {
|
||||
NBTTagCompound gateNBT = new NBTTagCompound();
|
||||
gate.writeToNBT(gateNBT);
|
||||
|
@ -215,17 +216,10 @@ public abstract class Pipe<T extends PipeTransport> implements IPipe, IDropContr
|
|||
public void readFromNBT(NBTTagCompound data) {
|
||||
transport.readFromNBT(data);
|
||||
|
||||
// Load pulser if any
|
||||
// Load gate if any
|
||||
if (data.hasKey("Gate")) {
|
||||
NBTTagCompound gateNBT = data.getCompoundTag("Gate");
|
||||
gate = Gate.makeGate(this, gateNBT);
|
||||
} else if (data.hasKey("gateKind")) {
|
||||
// Legacy implementation
|
||||
Gate.GateKind kind = Gate.GateKind.values()[data.getInteger("gateKind")];
|
||||
if (kind != Gate.GateKind.None) {
|
||||
gate = new GateVanilla(this);
|
||||
gate.kind = kind;
|
||||
}
|
||||
gate = GateFactory.makeGate(this, gateNBT);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
|
|
|
@ -14,7 +14,7 @@ import net.minecraft.util.Icon;
|
|||
|
||||
public class PipeRenderState implements IClientState {
|
||||
|
||||
private boolean hasGate = false;
|
||||
private boolean isGateLit = false;
|
||||
private int gateIconIndex = 0;
|
||||
public final ConnectionMatrix pipeConnectionMatrix = new ConnectionMatrix();
|
||||
public final TextureMatrix textureMatrix = new TextureMatrix();
|
||||
|
@ -31,26 +31,15 @@ public class PipeRenderState implements IClientState {
|
|||
@SideOnly(Side.CLIENT)
|
||||
public Icon[] textureArray;
|
||||
|
||||
public void setHasGate(boolean value) {
|
||||
if (hasGate != value) {
|
||||
hasGate = value;
|
||||
public void setIsGateLit(boolean value) {
|
||||
if (isGateLit != value) {
|
||||
isGateLit = value;
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasGate() {
|
||||
return hasGate;
|
||||
}
|
||||
|
||||
public void setGateIconIndex(int value) {
|
||||
if (gateIconIndex != value) {
|
||||
gateIconIndex = value;
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
public int getGateIconIndex() {
|
||||
return gateIconIndex;
|
||||
public boolean isGateLit() {
|
||||
return isGateLit;
|
||||
}
|
||||
|
||||
public void clean() {
|
||||
|
@ -72,7 +61,7 @@ public class PipeRenderState implements IClientState {
|
|||
|
||||
@Override
|
||||
public void writeData(DataOutputStream data) throws IOException {
|
||||
data.writeBoolean(hasGate);
|
||||
data.writeBoolean(isGateLit);
|
||||
data.writeInt(gateIconIndex);
|
||||
pipeConnectionMatrix.writeData(data);
|
||||
textureMatrix.writeData(data);
|
||||
|
@ -83,7 +72,7 @@ public class PipeRenderState implements IClientState {
|
|||
|
||||
@Override
|
||||
public void readData(DataInputStream data) throws IOException {
|
||||
hasGate = data.readBoolean();
|
||||
isGateLit = data.readBoolean();
|
||||
gateIconIndex = data.readInt();
|
||||
pipeConnectionMatrix.readData(data);
|
||||
textureMatrix.readData(data);
|
||||
|
|
|
@ -49,37 +49,38 @@ import buildcraft.core.network.IGuiReturnHandler;
|
|||
import buildcraft.core.network.ISyncedTile;
|
||||
import buildcraft.core.network.PacketTileState;
|
||||
import buildcraft.core.utils.BCLog;
|
||||
import buildcraft.transport.Gate.GateKind;
|
||||
import buildcraft.transport.gates.GateDefinition;
|
||||
import buildcraft.transport.gates.GateFactory;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.server.management.PlayerInstance;
|
||||
import net.minecraft.world.WorldServer;
|
||||
|
||||
public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFluidHandler, IPipeTile, IOverrideDefaultTriggers, ITileBufferHolder,
|
||||
IDropControlInventory, IPipeRenderState, ISyncedTile, ISolidSideTile, IGuiReturnHandler {
|
||||
IDropControlInventory, ISyncedTile, ISolidSideTile, IGuiReturnHandler {
|
||||
|
||||
private class CoreState implements IClientState {
|
||||
public class CoreState implements IClientState {
|
||||
|
||||
public int pipeId = -1;
|
||||
public int gateKind = 0;
|
||||
public boolean pulser = false;
|
||||
public int gateMaterial = -1;
|
||||
public int gateLogic = -1;
|
||||
|
||||
@Override
|
||||
public void writeData(DataOutputStream data) throws IOException {
|
||||
data.writeInt(pipeId);
|
||||
data.writeInt(gateKind);
|
||||
data.writeBoolean(pulser);
|
||||
data.writeByte(gateMaterial);
|
||||
data.writeByte(gateLogic);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readData(DataInputStream data) throws IOException {
|
||||
pipeId = data.readInt();
|
||||
gateKind = data.readInt();
|
||||
pulser = data.readBoolean();
|
||||
gateMaterial = data.readByte();
|
||||
gateLogic = data.readByte();
|
||||
}
|
||||
}
|
||||
private PipeRenderState renderState = new PipeRenderState();
|
||||
private CoreState coreState = new CoreState();
|
||||
public final PipeRenderState renderState = new PipeRenderState();
|
||||
public final CoreState coreState = new CoreState();
|
||||
private boolean deletePipe = false;
|
||||
private TileBuffer[] tileBuffer;
|
||||
public boolean[] pipeConnectionsBuffer = new boolean[6];
|
||||
|
@ -120,7 +121,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
|
|||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
super.readFromNBT(nbt);
|
||||
redstonePowered = nbt.getBoolean("redstonePowered");
|
||||
|
||||
|
||||
coreState.pipeId = nbt.getInteger("pipeId");
|
||||
pipe = BlockGenericPipe.createPipe(coreState.pipeId);
|
||||
|
||||
|
@ -249,8 +250,7 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
|
|||
}
|
||||
|
||||
// Gate Textures
|
||||
renderState.setHasGate(pipe.hasGate());
|
||||
renderState.setGateIconIndex(!pipe.hasGate() ? 0 : pipe.gate.getTextureIconIndex(pipe.gate.isGateActive()));
|
||||
renderState.setIsGateLit(pipe.gate != null ? pipe.gate.isGateActive() : false);
|
||||
|
||||
// Facades
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
|
||||
|
@ -369,11 +369,11 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
|
|||
|
||||
PacketTileState packet = new PacketTileState(this.xCoord, this.yCoord, this.zCoord);
|
||||
if (pipe != null && pipe.gate != null) {
|
||||
coreState.gateKind = pipe.gate.kind.ordinal();
|
||||
coreState.pulser = pipe.gate instanceof GateVanilla && ((GateVanilla)pipe.gate).hasPulser() ? true : false;
|
||||
coreState.gateMaterial = pipe.gate.material.ordinal();
|
||||
coreState.gateLogic = pipe.gate.logic.ordinal();
|
||||
} else {
|
||||
coreState.gateKind = 0;
|
||||
coreState.pulser = false;
|
||||
coreState.gateMaterial = -1;
|
||||
coreState.gateLogic = -1;
|
||||
}
|
||||
|
||||
if (pipe != null && pipe.transport != null)
|
||||
|
@ -604,15 +604,6 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* IPipeRenderState implementation *
|
||||
*/
|
||||
@Override
|
||||
public PipeRenderState getRenderState() {
|
||||
return renderState;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIconProvider getPipeIcons() {
|
||||
if (pipe == null)
|
||||
|
@ -643,16 +634,14 @@ public class TileGenericPipe extends TileEntity implements IPowerReceptor, IFlui
|
|||
if (pipe == null && coreState.pipeId != 0)
|
||||
initialize(BlockGenericPipe.createPipe(coreState.pipeId));
|
||||
|
||||
if (pipe != null && coreState.gateKind != GateKind.None.ordinal()) {
|
||||
if (pipe.gate == null) {
|
||||
if (coreState.pulser) {
|
||||
pipe.gate = new GateVanilla(pipe, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, coreState.gateKind));
|
||||
} else {
|
||||
pipe.gate = new GateVanilla(pipe);
|
||||
}
|
||||
}
|
||||
pipe.gate.kind = GateKind.values()[coreState.gateKind];
|
||||
}
|
||||
if (pipe == null)
|
||||
break;
|
||||
|
||||
if (coreState.gateMaterial == -1)
|
||||
pipe.gate = null;
|
||||
else if (pipe.gate == null)
|
||||
pipe.gate = GateFactory.makeGate(pipe, GateDefinition.GateMaterial.fromOrdinal(coreState.gateMaterial), GateDefinition.GateLogic.fromOrdinal(coreState.gateLogic));
|
||||
|
||||
worldObj.markBlockForRenderUpdate(xCoord, yCoord, zCoord);
|
||||
break;
|
||||
case 1: {
|
||||
|
|
|
@ -19,7 +19,6 @@ import buildcraft.api.gates.ActionManager;
|
|||
import buildcraft.api.gates.TriggerParameter;
|
||||
import buildcraft.core.Version;
|
||||
import buildcraft.transport.BlockGenericPipe;
|
||||
import buildcraft.transport.GateVanilla;
|
||||
import buildcraft.transport.Pipe;
|
||||
import java.util.LinkedList;
|
||||
import net.minecraft.block.Block;
|
||||
|
@ -55,14 +54,14 @@ public class BptBlockPipe extends BptBlock {
|
|||
requirements.add(new ItemStack(BuildCraftTransport.yellowPipeWire));
|
||||
}
|
||||
|
||||
if (slot.cpt.hasKey("gate")) {
|
||||
int gateId = slot.cpt.getInteger("gate");
|
||||
if (slot.cpt.hasKey("hasPulser") && slot.cpt.getBoolean("hasPulser")) {
|
||||
requirements.add(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, gateId - 1));
|
||||
} else {
|
||||
requirements.add(new ItemStack(BuildCraftTransport.pipeGate, 1, gateId - 1));
|
||||
}
|
||||
}
|
||||
// if (slot.cpt.hasKey("gate")) {
|
||||
// int gateId = slot.cpt.getInteger("gate");
|
||||
// if (slot.cpt.hasKey("hasPulser") && slot.cpt.getBoolean("hasPulser")) {
|
||||
// requirements.add(new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, gateId - 1));
|
||||
// } else {
|
||||
// requirements.add(new ItemStack(BuildCraftTransport.pipeGate, 1, gateId - 1));
|
||||
// }
|
||||
// }
|
||||
|
||||
if (BuildCraftCore.itemBptProps[pipeId] != null) {
|
||||
BuildCraftCore.itemBptProps[pipeId].addRequirements(slot, requirements);
|
||||
|
@ -99,36 +98,36 @@ public class BptBlockPipe extends BptBlock {
|
|||
pipe.wireSet[i] = true;
|
||||
}
|
||||
|
||||
if (slot.cpt.hasKey("gate")) {
|
||||
// / TODO: Does not save/load custom gates
|
||||
int gateId = slot.cpt.getInteger("gate");
|
||||
GateVanilla newGate;
|
||||
if (slot.cpt.hasKey("hasPulser") && slot.cpt.getBoolean("hasPulser")) {
|
||||
newGate = new GateVanilla(pipe, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, gateId - 1));
|
||||
} else {
|
||||
newGate = new GateVanilla(pipe, new ItemStack(BuildCraftTransport.pipeGate, 1, gateId - 1));
|
||||
}
|
||||
pipe.gate = newGate;
|
||||
|
||||
for (int i = 0; i < 8; ++i) {
|
||||
if (slot.cpt.hasKey("trigger" + i)) {
|
||||
// pipe.gate.actions[i] = ActionManager.triggers[slot.cpt.getInteger("trigger" + i)];
|
||||
}
|
||||
|
||||
if (slot.cpt.hasKey("triggerParameter" + i)) {
|
||||
ItemStack s = ItemStack.loadItemStackFromNBT((NBTTagCompound) slot.cpt.getTag("triggerParameter" + i));
|
||||
|
||||
if (s != null) {
|
||||
// pipe.triggerParameters[i] = new TriggerParameter();
|
||||
// pipe.triggerParameters[i].set(s);
|
||||
}
|
||||
}
|
||||
|
||||
if (slot.cpt.hasKey("action" + i)) {
|
||||
// pipe.activatedActions[i] = ActionManager.actions[slot.cpt.getInteger("action" + i)];
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (slot.cpt.hasKey("gate")) {
|
||||
// // / TODO: Does not save/load custom gates
|
||||
// int gateId = slot.cpt.getInteger("gate");
|
||||
// GateVanilla newGate;
|
||||
// if (slot.cpt.hasKey("hasPulser") && slot.cpt.getBoolean("hasPulser")) {
|
||||
// newGate = new GateVanilla(pipe, new ItemStack(BuildCraftTransport.pipeGateAutarchic, 1, gateId - 1));
|
||||
// } else {
|
||||
// newGate = new GateVanilla(pipe, new ItemStack(BuildCraftTransport.pipeGate, 1, gateId - 1));
|
||||
// }
|
||||
// pipe.gate = newGate;
|
||||
//
|
||||
// for (int i = 0; i < 8; ++i) {
|
||||
// if (slot.cpt.hasKey("trigger" + i)) {
|
||||
//// pipe.gate.actions[i] = ActionManager.triggers[slot.cpt.getInteger("trigger" + i)];
|
||||
// }
|
||||
//
|
||||
// if (slot.cpt.hasKey("triggerParameter" + i)) {
|
||||
// ItemStack s = ItemStack.loadItemStackFromNBT((NBTTagCompound) slot.cpt.getTag("triggerParameter" + i));
|
||||
//
|
||||
// if (s != null) {
|
||||
//// pipe.triggerParameters[i] = new TriggerParameter();
|
||||
//// pipe.triggerParameters[i].set(s);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (slot.cpt.hasKey("action" + i)) {
|
||||
//// pipe.activatedActions[i] = ActionManager.actions[slot.cpt.getInteger("action" + i)];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
BlockGenericPipe.placePipe(pipe, context.world(), slot.x, slot.y, slot.z, slot.blockId, slot.meta);
|
||||
|
||||
|
@ -150,29 +149,29 @@ public class BptBlockPipe extends BptBlock {
|
|||
}
|
||||
|
||||
// / TODO: Does not save/load custom gates
|
||||
if (pipe.hasGate()) {
|
||||
bptSlot.cpt.setInteger("gate", pipe.gate.kind.ordinal());
|
||||
if (pipe.gate instanceof GateVanilla) {
|
||||
bptSlot.cpt.setBoolean("hasPulser", ((GateVanilla) pipe.gate).hasPulser());
|
||||
}
|
||||
|
||||
for (int i = 0; i < 8; ++i) {
|
||||
// if (pipe.activatedTriggers[i] != null) {
|
||||
// bptSlot.cpt.setInteger("trigger" + i, pipe.activatedTriggers[i].getId());
|
||||
// }
|
||||
// if (pipe.hasGate()) {
|
||||
// bptSlot.cpt.setInteger("gate", pipe.gate.kind.ordinal());
|
||||
// if (pipe.gate instanceof GateVanilla) {
|
||||
// bptSlot.cpt.setBoolean("hasPulser", ((GateVanilla) pipe.gate).hasPulser());
|
||||
// }
|
||||
//
|
||||
// if (pipe.triggerParameters[i] != null) {
|
||||
// NBTTagCompound subCpt = new NBTTagCompound();
|
||||
// pipe.triggerParameters[i].getItemStack().writeToNBT(subCpt);
|
||||
//
|
||||
// bptSlot.cpt.setTag("triggerParameter" + i, subCpt);
|
||||
// }
|
||||
//
|
||||
// if (pipe.activatedActions[i] != null) {
|
||||
// bptSlot.cpt.setInteger("action" + i, pipe.activatedActions[i].getId());
|
||||
// }
|
||||
}
|
||||
}
|
||||
// for (int i = 0; i < 8; ++i) {
|
||||
//// if (pipe.activatedTriggers[i] != null) {
|
||||
//// bptSlot.cpt.setInteger("trigger" + i, pipe.activatedTriggers[i].getId());
|
||||
//// }
|
||||
////
|
||||
//// if (pipe.triggerParameters[i] != null) {
|
||||
//// NBTTagCompound subCpt = new NBTTagCompound();
|
||||
//// pipe.triggerParameters[i].getItemStack().writeToNBT(subCpt);
|
||||
////
|
||||
//// bptSlot.cpt.setTag("triggerParameter" + i, subCpt);
|
||||
//// }
|
||||
////
|
||||
//// if (pipe.activatedActions[i] != null) {
|
||||
//// bptSlot.cpt.setInteger("action" + i, pipe.activatedActions[i].getId());
|
||||
//// }
|
||||
// }
|
||||
// }
|
||||
|
||||
if (BuildCraftCore.itemBptProps[pipe.itemID] != null) {
|
||||
BuildCraftCore.itemBptProps[pipe.itemID].initializeFromWorld(bptSlot, context, x, y, z);
|
||||
|
|
119
common/buildcraft/transport/gates/GateDefinition.java
Normal file
|
@ -0,0 +1,119 @@
|
|||
/*
|
||||
* Copyright (c) SpaceToad, 2011-2012
|
||||
* http://www.mod-buildcraft.com
|
||||
*
|
||||
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.transport.gates;
|
||||
|
||||
import buildcraft.core.DefaultProps;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import java.util.Locale;
|
||||
import net.minecraft.client.renderer.texture.IconRegister;
|
||||
import net.minecraft.util.Icon;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author CovertJaguar <http://www.railcraft.info/>
|
||||
*/
|
||||
public final class GateDefinition {
|
||||
|
||||
private GateDefinition() {
|
||||
}
|
||||
|
||||
public static String getLocalizedName(GateMaterial material, GateLogic logic) {
|
||||
if (material == GateMaterial.REDSTONE)
|
||||
return StringUtils.localize("gate.name.basic");
|
||||
return String.format(StringUtils.localize("gate.name"), StringUtils.localize("gate.material." + material.getTag()), StringUtils.localize("gate.logic." + logic.getTag()));
|
||||
}
|
||||
|
||||
public static enum GateMaterial {
|
||||
|
||||
REDSTONE("gate_interface_1.png", 146, 1, false), IRON("gate_interface_2.png", 164, 2, true), GOLD("gate_interface_3.png", 200, 4, true), DIAMOND("gate_interface_4.png", 200, 8, true);
|
||||
public static final GateMaterial[] VALUES = values();
|
||||
public final ResourceLocation guiFile;
|
||||
public final int guiHeight;
|
||||
public final int numSlots;
|
||||
public final boolean hasParameterSlot;
|
||||
private Icon iconBlock;
|
||||
private Icon iconItem;
|
||||
|
||||
public Icon getIconBlock() {
|
||||
return iconBlock;
|
||||
}
|
||||
|
||||
public Icon getIconItem() {
|
||||
return iconItem;
|
||||
}
|
||||
|
||||
public String getTag() {
|
||||
return name().toLowerCase(Locale.ENGLISH);
|
||||
}
|
||||
|
||||
public void registerBlockIcon(IconRegister iconRegister) {
|
||||
if (this != REDSTONE)
|
||||
iconBlock = iconRegister.registerIcon("buildcraft:gates/gate_material_" + getTag());
|
||||
}
|
||||
|
||||
public void registerItemIcon(IconRegister iconRegister) {
|
||||
if (this != REDSTONE)
|
||||
iconItem = iconRegister.registerIcon("buildcraft:gates/gate_material_" + getTag());
|
||||
}
|
||||
|
||||
private GateMaterial(String guiFile, int guiHeight, int numSlots, boolean hasParamterSlot) {
|
||||
this.guiFile = new ResourceLocation("buildcraft", DefaultProps.TEXTURE_PATH_GUI + "/" + guiFile);
|
||||
this.guiHeight = guiHeight;
|
||||
this.numSlots = numSlots;
|
||||
this.hasParameterSlot = hasParamterSlot;
|
||||
}
|
||||
|
||||
public static GateMaterial fromOrdinal(int ordinal) {
|
||||
if (ordinal < 0 || ordinal >= VALUES.length)
|
||||
return REDSTONE;
|
||||
return VALUES[ordinal];
|
||||
}
|
||||
}
|
||||
|
||||
public static enum GateLogic {
|
||||
|
||||
AND, OR;
|
||||
public static final GateLogic[] VALUES = values();
|
||||
private Icon iconLit;
|
||||
private Icon iconDark;
|
||||
private Icon iconItem;
|
||||
|
||||
public Icon getIconLit() {
|
||||
return iconLit;
|
||||
}
|
||||
|
||||
public Icon getIconDark() {
|
||||
return iconDark;
|
||||
}
|
||||
|
||||
public Icon getIconItem() {
|
||||
return iconItem;
|
||||
}
|
||||
|
||||
public String getTag() {
|
||||
return name().toLowerCase(Locale.ENGLISH);
|
||||
}
|
||||
|
||||
public void registerBlockIcon(IconRegister iconRegister) {
|
||||
iconLit = iconRegister.registerIcon("buildcraft:gates/gate_lit_" + getTag());
|
||||
iconDark = iconRegister.registerIcon("buildcraft:gates/gate_dark_" + getTag());
|
||||
}
|
||||
|
||||
public void registerItemIcon(IconRegister iconRegister) {
|
||||
iconItem = iconRegister.registerIcon("buildcraft:gates/gate_logic_" + getTag());
|
||||
}
|
||||
|
||||
public static GateLogic fromOrdinal(int ordinal) {
|
||||
if (ordinal < 0 || ordinal >= VALUES.length)
|
||||
return AND;
|
||||
return VALUES[ordinal];
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) SpaceToad, 2011-2012
|
||||
* http://www.mod-buildcraft.com
|
||||
*
|
||||
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.transport.gates;
|
||||
|
||||
import buildcraft.api.gates.IAction;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import java.util.List;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author CovertJaguar <http://www.railcraft.info/>
|
||||
*/
|
||||
public abstract class GateExpansionController {
|
||||
|
||||
public final IGateExpansion type;
|
||||
public final TileEntity pipeTile;
|
||||
|
||||
public GateExpansionController(IGateExpansion type, TileEntity pipeTile) {
|
||||
this.pipeTile = pipeTile;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public IGateExpansion getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public boolean isActive() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void tick() {
|
||||
}
|
||||
|
||||
public void startResolution() {
|
||||
}
|
||||
|
||||
public boolean resolveAction(IAction action, int count) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void addTriggers(List<ITrigger> list) {
|
||||
}
|
||||
|
||||
public void addActions(List<IAction> list) {
|
||||
}
|
||||
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
}
|
||||
}
|
148
common/buildcraft/transport/gates/GateExpansionPulsar.java
Normal file
|
@ -0,0 +1,148 @@
|
|||
/*
|
||||
* Copyright (c) SpaceToad, 2011-2012
|
||||
* http://www.mod-buildcraft.com
|
||||
*
|
||||
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.transport.gates;
|
||||
|
||||
import buildcraft.BuildCraftTransport;
|
||||
import buildcraft.api.gates.IAction;
|
||||
import buildcraft.api.power.IPowerReceptor;
|
||||
import buildcraft.api.power.PowerHandler;
|
||||
import buildcraft.api.power.PowerHandler.Type;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.transport.triggers.ActionEnergyPulser;
|
||||
import buildcraft.transport.triggers.ActionSingleEnergyPulse;
|
||||
import java.util.List;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author CovertJaguar <http://www.railcraft.info/>
|
||||
*/
|
||||
public class GateExpansionPulsar implements IGateExpansion {
|
||||
|
||||
public static GateExpansionPulsar INSTANCE = new GateExpansionPulsar();
|
||||
|
||||
private GateExpansionPulsar() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUniqueIdentifier() {
|
||||
return "buildcraft:pulsar";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return StringUtils.localize("gate.expansion.pulsar");
|
||||
}
|
||||
|
||||
@Override
|
||||
public GateExpansionController makeController(TileEntity pipeTile) {
|
||||
return new GateExpansionControllerPulsar(pipeTile);
|
||||
}
|
||||
|
||||
private class GateExpansionControllerPulsar extends GateExpansionController {
|
||||
|
||||
private boolean isActive;
|
||||
private boolean singlePulse;
|
||||
private boolean hasPulsed;
|
||||
private int pulseCount;
|
||||
private int tick;
|
||||
|
||||
public GateExpansionControllerPulsar(TileEntity pipeTile) {
|
||||
super(GateExpansionPulsar.this, pipeTile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startResolution() {
|
||||
if (isActive()) {
|
||||
disablePulse();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean resolveAction(IAction action, int count) {
|
||||
|
||||
if (action instanceof ActionEnergyPulser) {
|
||||
enablePulse(count);
|
||||
return true;
|
||||
} else if (action instanceof ActionSingleEnergyPulse) {
|
||||
enableSinglePulse(count);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addActions(List<IAction> list) {
|
||||
super.addActions(list);
|
||||
list.add(BuildCraftTransport.actionEnergyPulser);
|
||||
list.add(BuildCraftTransport.actionSingleEnergyPulse);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
if (!isActive && hasPulsed)
|
||||
hasPulsed = false;
|
||||
|
||||
PowerHandler.PowerReceiver powerReceptor = ((IPowerReceptor) pipeTile).getPowerReceiver(ForgeDirection.UNKNOWN);
|
||||
|
||||
if (powerReceptor == null || !isActive || tick++ % 10 != 0)
|
||||
return;
|
||||
|
||||
if (!singlePulse || !hasPulsed) {
|
||||
powerReceptor.receiveEnergy(Type.GATE, Math.min(1 << (pulseCount - 1), 64) * 1.01f, ForgeDirection.WEST);
|
||||
hasPulsed = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void enableSinglePulse(int count) {
|
||||
singlePulse = true;
|
||||
isActive = true;
|
||||
pulseCount = count;
|
||||
}
|
||||
|
||||
private void enablePulse(int count) {
|
||||
isActive = true;
|
||||
singlePulse = false;
|
||||
pulseCount = count;
|
||||
}
|
||||
|
||||
private void disablePulse() {
|
||||
if (!isActive) {
|
||||
hasPulsed = false;
|
||||
}
|
||||
isActive = false;
|
||||
pulseCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
return isActive;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbt) {
|
||||
nbt.setBoolean("singlePulse", singlePulse);
|
||||
nbt.setBoolean("isActive", isActive);
|
||||
nbt.setBoolean("hasPulsed", hasPulsed);
|
||||
nbt.setInteger("pulseCount", pulseCount);
|
||||
nbt.setInteger("tick", tick);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbt) {
|
||||
isActive = nbt.getBoolean("isActive");
|
||||
singlePulse = nbt.getBoolean("singlePulse");
|
||||
hasPulsed = nbt.getBoolean("hasPulsed");
|
||||
pulseCount = nbt.getInteger("pulseCount");
|
||||
tick = nbt.getInteger("tick");
|
||||
}
|
||||
}
|
||||
}
|
28
common/buildcraft/transport/gates/GateExpansions.java
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* Copyright (c) SpaceToad, 2011-2012
|
||||
* http://www.mod-buildcraft.com
|
||||
*
|
||||
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.transport.gates;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author CovertJaguar <http://www.railcraft.info/>
|
||||
*/
|
||||
public final class GateExpansions {
|
||||
|
||||
public static final Map<String, IGateExpansion> expansions = new HashMap<String, IGateExpansion>();
|
||||
|
||||
private GateExpansions() {
|
||||
}
|
||||
|
||||
public static void registerExpansion(IGateExpansion expansion) {
|
||||
expansions.put(expansion.getUniqueIdentifier(), expansion);
|
||||
}
|
||||
}
|
91
common/buildcraft/transport/gates/GateFactory.java
Normal file
|
@ -0,0 +1,91 @@
|
|||
/*
|
||||
* Copyright (c) SpaceToad, 2011-2012
|
||||
* http://www.mod-buildcraft.com
|
||||
*
|
||||
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.transport.gates;
|
||||
|
||||
import buildcraft.transport.Gate;
|
||||
import buildcraft.transport.Pipe;
|
||||
import buildcraft.transport.gates.GateDefinition.GateLogic;
|
||||
import buildcraft.transport.gates.GateDefinition.GateMaterial;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author CovertJaguar <http://www.railcraft.info/>
|
||||
*/
|
||||
public class GateFactory {
|
||||
|
||||
public static Gate makeGate(Pipe pipe, GateMaterial material, GateLogic logic) {
|
||||
return new Gate(pipe, material, logic);
|
||||
}
|
||||
|
||||
public static Gate makeGate(Pipe pipe, ItemStack stack) {
|
||||
if (stack == null || stack.stackSize <= 0 || !(stack.getItem() instanceof ItemGate))
|
||||
return null;
|
||||
|
||||
return makeGate(pipe, ItemGate.getMaterial(stack), ItemGate.getLogic(stack));
|
||||
}
|
||||
|
||||
public static Gate makeGate(Pipe pipe, NBTTagCompound nbt) {
|
||||
GateMaterial material = GateMaterial.REDSTONE;
|
||||
GateLogic logic = GateLogic.AND;
|
||||
|
||||
// Legacy Support
|
||||
if (nbt.hasKey("Kind")) {
|
||||
int kind = nbt.getInteger("Kind");
|
||||
switch (kind) {
|
||||
case 1:
|
||||
case 2:
|
||||
material = GateMaterial.IRON;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
material = GateMaterial.GOLD;
|
||||
break;
|
||||
case 5:
|
||||
case 6:
|
||||
material = GateMaterial.DIAMOND;
|
||||
break;
|
||||
}
|
||||
switch (kind) {
|
||||
case 2:
|
||||
case 4:
|
||||
case 6:
|
||||
logic = GateLogic.OR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (nbt.hasKey("material")) {
|
||||
try {
|
||||
material = GateMaterial.valueOf(nbt.getString("material"));
|
||||
} catch (IllegalArgumentException ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (nbt.hasKey("logic")) {
|
||||
try {
|
||||
logic = GateLogic.valueOf(nbt.getString("logic"));
|
||||
} catch (IllegalArgumentException ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Gate gate = makeGate(pipe, material, logic);
|
||||
|
||||
if (nbt.hasKey("Pulser")) {
|
||||
NBTTagCompound pulsarTag = nbt.getCompoundTag("Pulser");
|
||||
GateExpansionController pulsarCon = GateExpansionPulsar.INSTANCE.makeController(pipe.container);
|
||||
pulsarCon.readFromNBT(pulsarTag);
|
||||
gate.expansions.add(pulsarCon);
|
||||
}
|
||||
|
||||
return gate;
|
||||
}
|
||||
}
|
24
common/buildcraft/transport/gates/IGateExpansion.java
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright (c) SpaceToad, 2011-2012
|
||||
* http://www.mod-buildcraft.com
|
||||
*
|
||||
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||
*/
|
||||
package buildcraft.transport.gates;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author CovertJaguar <http://www.railcraft.info/>
|
||||
*/
|
||||
public interface IGateExpansion {
|
||||
|
||||
String getUniqueIdentifier();
|
||||
|
||||
String getDisplayName();
|
||||
|
||||
GateExpansionController makeController(TileEntity pipeTile);
|
||||
}
|
135
common/buildcraft/transport/gates/ItemGate.java
Normal file
|
@ -0,0 +1,135 @@
|
|||
package buildcraft.transport.gates;
|
||||
|
||||
import buildcraft.BuildCraftTransport;
|
||||
import buildcraft.api.gates.ActionManager;
|
||||
import buildcraft.api.gates.IAction;
|
||||
import buildcraft.api.gates.ITrigger;
|
||||
import buildcraft.core.ItemBuildCraft;
|
||||
import buildcraft.core.inventory.InvUtils;
|
||||
import buildcraft.transport.Gate;
|
||||
import buildcraft.transport.gates.GateDefinition.GateLogic;
|
||||
import buildcraft.transport.gates.GateDefinition.GateMaterial;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.util.List;
|
||||
import net.minecraft.client.renderer.texture.IconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.Icon;
|
||||
|
||||
public class ItemGate extends ItemBuildCraft {
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private Icon[] icons;
|
||||
|
||||
public ItemGate(int id) {
|
||||
super(id);
|
||||
setHasSubtypes(false);
|
||||
setMaxDamage(0);
|
||||
setPassSneakClick(true);
|
||||
}
|
||||
|
||||
private static NBTTagCompound getNBT(ItemStack stack) {
|
||||
if (stack == null || !(stack.getItem() instanceof ItemGate))
|
||||
return null;
|
||||
return InvUtils.getItemData(stack);
|
||||
}
|
||||
|
||||
public static GateMaterial getMaterial(ItemStack stack) {
|
||||
NBTTagCompound nbt = getNBT(stack);
|
||||
if (nbt == null)
|
||||
return GateMaterial.REDSTONE;
|
||||
return GateMaterial.fromOrdinal(nbt.getByte("material"));
|
||||
}
|
||||
|
||||
public static GateLogic getLogic(ItemStack stack) {
|
||||
NBTTagCompound nbt = getNBT(stack);
|
||||
if (nbt == null)
|
||||
return GateLogic.AND;
|
||||
return GateLogic.fromOrdinal(nbt.getByte("logic"));
|
||||
}
|
||||
|
||||
public static void addGateExpansion(ItemStack stack, IGateExpansion expansion) {
|
||||
NBTTagCompound nbt = getNBT(stack);
|
||||
if (nbt == null)
|
||||
return;
|
||||
nbt.setBoolean(expansion.getUniqueIdentifier(), true);
|
||||
}
|
||||
|
||||
public static boolean hasGateExpansion(ItemStack stack, IGateExpansion expansion) {
|
||||
NBTTagCompound nbt = getNBT(stack);
|
||||
if (nbt == null)
|
||||
return false;
|
||||
return nbt.getBoolean(expansion.getUniqueIdentifier());
|
||||
}
|
||||
|
||||
public static ItemStack makeGateItem(GateMaterial material, GateLogic logic) {
|
||||
ItemStack stack = new ItemStack(BuildCraftTransport.pipeGate);
|
||||
NBTTagCompound nbt = InvUtils.getItemData(stack);
|
||||
nbt.setByte("material", (byte) material.ordinal());
|
||||
nbt.setByte("logic", (byte) logic.ordinal());
|
||||
return stack;
|
||||
}
|
||||
|
||||
public static ItemStack makeGateItem(Gate gate) {
|
||||
ItemStack stack = new ItemStack(BuildCraftTransport.pipeGate);
|
||||
NBTTagCompound nbt = InvUtils.getItemData(stack);
|
||||
nbt.setByte("material", (byte) gate.material.ordinal());
|
||||
nbt.setByte("logic", (byte) gate.logic.ordinal());
|
||||
return stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack stack) {
|
||||
return GateDefinition.getLocalizedName(getMaterial(stack), getLogic(stack));
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubItems(int id, CreativeTabs tab, List itemList) {
|
||||
for (GateMaterial material : GateMaterial.VALUES) {
|
||||
for (GateLogic logic : GateLogic.VALUES) {
|
||||
if (material == GateMaterial.REDSTONE && logic == GateLogic.OR)
|
||||
continue;
|
||||
ItemStack stack = makeGateItem(material, logic);
|
||||
for (IGateExpansion exp : GateExpansions.expansions.values()) {
|
||||
addGateExpansion(stack, exp);
|
||||
}
|
||||
itemList.add(stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIconIndex(ItemStack stack) {
|
||||
return getIcon(stack, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon(ItemStack stack, int pass) {
|
||||
return getLogic(stack).getIconItem();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IconRegister iconRegister) {
|
||||
|
||||
for (GateDefinition.GateMaterial material : GateDefinition.GateMaterial.VALUES) {
|
||||
material.registerItemIcon(iconRegister);
|
||||
}
|
||||
|
||||
for (GateDefinition.GateLogic logic : GateDefinition.GateLogic.VALUES) {
|
||||
logic.registerItemIcon(iconRegister);
|
||||
}
|
||||
|
||||
for (IAction action : ActionManager.actions.values()) {
|
||||
action.registerIcons(iconRegister);
|
||||
}
|
||||
|
||||
for (ITrigger trigger : ActionManager.triggers.values()) {
|
||||
trigger.registerIcons(iconRegister);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -21,9 +21,8 @@ import buildcraft.core.network.PacketPayloadArrays;
|
|||
import buildcraft.core.network.PacketPayloadStream;
|
||||
import buildcraft.core.network.PacketUpdate;
|
||||
import buildcraft.core.proxy.CoreProxy;
|
||||
import buildcraft.core.utils.BCLog;
|
||||
import buildcraft.transport.Gate;
|
||||
import buildcraft.transport.Pipe;
|
||||
import buildcraft.transport.gates.GateDefinition;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
|
@ -71,12 +70,12 @@ public class ContainerGateInterface extends BuildCraftContainer {
|
|||
|
||||
for (int y = 0; y < 3; y++) {
|
||||
for (int x = 0; x < 9; x++) {
|
||||
addSlotToContainer(new Slot(playerInventory, x + y * 9 + 9, 8 + x * 18, pipe.gate.getGuiHeight() - 84 + y * 18));
|
||||
addSlotToContainer(new Slot(playerInventory, x + y * 9 + 9, 8 + x * 18, pipe.gate.material.guiHeight - 84 + y * 18));
|
||||
}
|
||||
}
|
||||
|
||||
for (int x = 0; x < 9; x++) {
|
||||
addSlotToContainer(new Slot(playerInventory, x, 8 + x * 18, pipe.gate.getGuiHeight() - 26));
|
||||
addSlotToContainer(new Slot(playerInventory, x, 8 + x * 18, pipe.gate.material.guiHeight - 26));
|
||||
}
|
||||
|
||||
this.pipe = pipe;
|
||||
|
@ -99,16 +98,12 @@ public class ContainerGateInterface extends BuildCraftContainer {
|
|||
_potentialActions.addAll(ActionManager.getNeighborActions(block, tile));
|
||||
}
|
||||
|
||||
if (getGateOrdinal() < Gate.GateKind.AND_3.ordinal()) {
|
||||
if (!pipe.gate.material.hasParameterSlot) {
|
||||
Iterator<ITrigger> it = _potentialTriggers.iterator();
|
||||
while (it.hasNext()) {
|
||||
ITrigger trigger = it.next();
|
||||
try {
|
||||
if (trigger.requiresParameter())
|
||||
it.remove();
|
||||
} catch (Throwable error) {
|
||||
BCLog.logErrorAPI("Buildcraft", error, trigger.getClass());
|
||||
}
|
||||
if (trigger.requiresParameter())
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -169,31 +164,31 @@ public class ContainerGateInterface extends BuildCraftContainer {
|
|||
try {
|
||||
PacketPayloadStream payload = (PacketPayloadStream) packet.payload;
|
||||
DataInputStream data = payload.stream;
|
||||
|
||||
|
||||
int position = data.readInt();
|
||||
|
||||
|
||||
setTrigger(position, ActionManager.triggers.get(data.readUTF()), notify);
|
||||
setAction(position, ActionManager.actions.get(data.readUTF()), notify);
|
||||
|
||||
|
||||
ItemStack parameter = Packet.readItemStack(data);
|
||||
if(parameter != null) {
|
||||
if (parameter != null) {
|
||||
ITriggerParameter param = new TriggerParameter();
|
||||
param.set(parameter);
|
||||
setTriggerParameter(position, param, notify);
|
||||
} else {
|
||||
setTriggerParameter(position, null, notify);
|
||||
}
|
||||
} catch(IOException e) {
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private PacketPayload getSelectionPayload(final int position) {
|
||||
PacketPayloadStream payload = new PacketPayloadStream(new PacketPayloadStream.StreamWriter() {
|
||||
@Override
|
||||
public void writeData(DataOutputStream data) throws IOException {
|
||||
data.writeInt(position);
|
||||
|
||||
|
||||
if (pipe.gate.triggers[position] != null) {
|
||||
data.writeUTF(pipe.gate.triggers[position].getUniqueTag());
|
||||
} else {
|
||||
|
@ -338,29 +333,7 @@ public class ContainerGateInterface extends BuildCraftContainer {
|
|||
public void sendSelection(EntityPlayer player) {
|
||||
if (pipe == null || pipe.gate == null)
|
||||
return;
|
||||
int positions = 0;
|
||||
switch (pipe.gate.kind) {
|
||||
case Single:
|
||||
positions = 1;
|
||||
break;
|
||||
case AND_2:
|
||||
case OR_2:
|
||||
positions = 2;
|
||||
break;
|
||||
case AND_3:
|
||||
case OR_3:
|
||||
case AND_5:
|
||||
case OR_5:
|
||||
positions = 4;
|
||||
break;
|
||||
case OR_4:
|
||||
case AND_4:
|
||||
default:
|
||||
positions = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
for (int position = 0; position < positions; position++) {
|
||||
for (int position = 0; position < pipe.gate.material.numSlots; position++) {
|
||||
CoreProxy.proxy.sendToPlayer(player, new PacketUpdate(PacketIds.GATE_SELECTION, pipe.container.xCoord, pipe.container.yCoord, pipe.container.zCoord, getSelectionPayload(position)));
|
||||
}
|
||||
|
||||
|
@ -442,14 +415,10 @@ public class ContainerGateInterface extends BuildCraftContainer {
|
|||
* GATE INFORMATION *
|
||||
*/
|
||||
public ResourceLocation getGateGuiFile() {
|
||||
return pipe.gate.getGuiFile();
|
||||
}
|
||||
|
||||
public final int getGateOrdinal() {
|
||||
return pipe.gate.kind.ordinal();
|
||||
return pipe.gate.material.guiFile;
|
||||
}
|
||||
|
||||
public String getGateName() {
|
||||
return pipe.gate.getName();
|
||||
return GateDefinition.getLocalizedName(pipe.gate.material, pipe.gate.logic);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ import buildcraft.api.gates.ITriggerParameter;
|
|||
import buildcraft.core.gui.GuiAdvancedInterface;
|
||||
import buildcraft.core.triggers.BCAction;
|
||||
import buildcraft.core.utils.StringUtils;
|
||||
import buildcraft.transport.Gate.GateKind;
|
||||
import buildcraft.transport.Pipe;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
@ -29,7 +28,8 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
|
||||
IInventory playerInventory;
|
||||
private final ContainerGateInterface _container;
|
||||
private int nbEntries;
|
||||
private final Pipe pipe;
|
||||
private int numSlots;
|
||||
|
||||
class TriggerSlot extends AdvancedSlot {
|
||||
|
||||
|
@ -159,31 +159,27 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
super(new ContainerGateInterface(playerInventory, pipe), null, null);
|
||||
|
||||
_container = (ContainerGateInterface) this.inventorySlots;
|
||||
this.pipe = pipe;
|
||||
|
||||
this.playerInventory = playerInventory;
|
||||
xSize = 176;
|
||||
ySize = pipe.gate.getGuiHeight();
|
||||
ySize = pipe.gate.material.guiHeight;
|
||||
|
||||
int position = 0;
|
||||
numSlots = pipe.gate.material.numSlots;
|
||||
|
||||
if (pipe.gate.kind == GateKind.Single) {
|
||||
nbEntries = 1;
|
||||
|
||||
if (numSlots == 1) {
|
||||
slots = new AdvancedSlot[2];
|
||||
slots[0] = new TriggerSlot(62, 26, pipe, 0);
|
||||
slots[1] = new ActionSlot(98, 26, pipe, 0);
|
||||
} else if (pipe.gate.kind == GateKind.AND_2 || pipe.gate.kind == GateKind.OR_2) {
|
||||
nbEntries = 2;
|
||||
|
||||
} else if (numSlots == 2) {
|
||||
slots = new AdvancedSlot[4];
|
||||
|
||||
slots[0] = new TriggerSlot(62, 26, pipe, 0);
|
||||
slots[1] = new TriggerSlot(62, 44, pipe, 1);
|
||||
slots[2] = new ActionSlot(98, 26, pipe, 0);
|
||||
slots[3] = new ActionSlot(98, 44, pipe, 1);
|
||||
} else if (pipe.gate.kind == GateKind.AND_3 || pipe.gate.kind == GateKind.OR_3 || pipe.gate.kind == GateKind.AND_5 || pipe.gate.kind == GateKind.OR_5) {
|
||||
nbEntries = 4;
|
||||
|
||||
} else if (numSlots == 4) {
|
||||
slots = new AdvancedSlot[12];
|
||||
|
||||
for (int k = 0; k < 4; ++k) {
|
||||
|
@ -201,9 +197,7 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
position++;
|
||||
|
||||
}
|
||||
} else if (pipe.gate.kind == GateKind.AND_4 || pipe.gate.kind == GateKind.OR_4) {
|
||||
nbEntries = 8;
|
||||
|
||||
} else if (numSlots == 8) {
|
||||
slots = new AdvancedSlot[24];
|
||||
|
||||
for (int k = 0; k < 4; ++k) {
|
||||
|
@ -261,7 +255,7 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
if (slot instanceof TriggerSlot) {
|
||||
ITrigger trigger = ((TriggerSlot) slot).getTrigger();
|
||||
|
||||
if (_container.getGateOrdinal() >= GateKind.AND_3.ordinal()) {
|
||||
if (pipe.gate.material.hasParameterSlot) {
|
||||
|
||||
if (_container.triggerState[triggerTracker++]) {
|
||||
mc.renderEngine.bindTexture(texture);
|
||||
|
@ -333,7 +327,7 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
|
||||
_container.setTrigger(position, changed, true);
|
||||
|
||||
if (_container.getGateOrdinal() >= GateKind.AND_3.ordinal()) {
|
||||
if (pipe.gate.material.hasParameterSlot) {
|
||||
_container.setTriggerParameter(position, null, true);
|
||||
}
|
||||
} else if (slot instanceof ActionSlot) {
|
||||
|
@ -366,16 +360,16 @@ public class GuiGateInterface extends GuiAdvancedInterface {
|
|||
}
|
||||
}
|
||||
|
||||
_container.setAction(position - nbEntries, changed, true);
|
||||
_container.setAction(position - numSlots, changed, true);
|
||||
} else if (slot instanceof TriggerParameterSlot) {
|
||||
TriggerSlot trigger = (TriggerSlot) slots[position - nbEntries * 2];
|
||||
TriggerSlot trigger = (TriggerSlot) slots[position - numSlots * 2];
|
||||
|
||||
if (trigger.isDefined() && trigger.getTrigger().hasParameter()) {
|
||||
ITriggerParameter param = trigger.getTrigger().createParameter();
|
||||
|
||||
if (param != null) {
|
||||
param.set(mc.thePlayer.inventory.getItemStack());
|
||||
_container.setTriggerParameter(position - nbEntries * 2, param, true);
|
||||
_container.setTriggerParameter(position - numSlots * 2, param, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,10 +13,10 @@ import buildcraft.BuildCraftTransport;
|
|||
import buildcraft.api.transport.IPipe;
|
||||
import buildcraft.api.transport.IPipe.WireColor;
|
||||
import buildcraft.core.CoreConstants;
|
||||
import buildcraft.core.render.FluidRenderer;
|
||||
import buildcraft.core.render.RenderEntityBlock;
|
||||
import buildcraft.core.render.RenderEntityBlock.RenderInfo;
|
||||
import buildcraft.core.utils.EnumColor;
|
||||
import buildcraft.core.utils.MatrixTranformations;
|
||||
import buildcraft.transport.Pipe;
|
||||
import buildcraft.transport.PipeIconProvider;
|
||||
import buildcraft.transport.PipeRenderState;
|
||||
|
@ -37,6 +37,7 @@ import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
|||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Icon;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
|
@ -270,7 +271,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
|
|||
}
|
||||
|
||||
private void renderGatesWires(TileGenericPipe pipe, double x, double y, double z) {
|
||||
PipeRenderState state = pipe.getRenderState();
|
||||
PipeRenderState state = pipe.renderState;
|
||||
|
||||
if (state.wireMatrix.hasWire(WireColor.Red)) {
|
||||
pipeWireRender(pipe, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, CoreConstants.PIPE_MIN_POS, IPipe.WireColor.Red, x, y, z);
|
||||
|
@ -288,14 +289,14 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
|
|||
pipeWireRender(pipe, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MIN_POS, CoreConstants.PIPE_MAX_POS, IPipe.WireColor.Yellow, x, y, z);
|
||||
}
|
||||
|
||||
if (state.hasGate()) {
|
||||
if (pipe.pipe.gate != null) {
|
||||
pipeGateRender(pipe, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
private void pipeWireRender(TileGenericPipe pipe, float cx, float cy, float cz, IPipe.WireColor color, double x, double y, double z) {
|
||||
|
||||
PipeRenderState state = pipe.getRenderState();
|
||||
PipeRenderState state = pipe.renderState;
|
||||
|
||||
float minX = CoreConstants.PIPE_MIN_POS;
|
||||
float minY = CoreConstants.PIPE_MIN_POS;
|
||||
|
@ -454,43 +455,7 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
|
|||
|
||||
bindTexture(TextureMap.locationBlocksTexture);
|
||||
|
||||
PipeRenderState state = pipe.getRenderState();
|
||||
|
||||
float min = CoreConstants.PIPE_MIN_POS + 0.05F;
|
||||
float max = CoreConstants.PIPE_MAX_POS - 0.05F;
|
||||
|
||||
RenderInfo box = new RenderInfo();
|
||||
box.texture = BuildCraftTransport.instance.gateIconProvider.getIcon(state.getGateIconIndex());
|
||||
|
||||
if (shouldRenderNormalPipeSide(state, ForgeDirection.WEST)) {
|
||||
box.setBounds(CoreConstants.PIPE_MIN_POS - 0.10F, min, min, CoreConstants.PIPE_MIN_POS + 0.001F, max, max);
|
||||
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
|
||||
}
|
||||
|
||||
if (shouldRenderNormalPipeSide(state, ForgeDirection.EAST)) {
|
||||
box.setBounds(CoreConstants.PIPE_MAX_POS + 0.001F, min, min, CoreConstants.PIPE_MAX_POS + 0.10F, max, max);
|
||||
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
|
||||
}
|
||||
|
||||
if (shouldRenderNormalPipeSide(state, ForgeDirection.DOWN)) {
|
||||
box.setBounds(min, CoreConstants.PIPE_MIN_POS - 0.10F, min, max, CoreConstants.PIPE_MIN_POS + 0.001F, max);
|
||||
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
|
||||
}
|
||||
|
||||
if (shouldRenderNormalPipeSide(state, ForgeDirection.UP)) {
|
||||
box.setBounds(min, CoreConstants.PIPE_MAX_POS + 0.001F, min, max, CoreConstants.PIPE_MAX_POS + 0.10F, max);
|
||||
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
|
||||
}
|
||||
|
||||
if (shouldRenderNormalPipeSide(state, ForgeDirection.NORTH)) {
|
||||
box.setBounds(min, min, CoreConstants.PIPE_MIN_POS - 0.10F, max, max, CoreConstants.PIPE_MIN_POS + 0.001F);
|
||||
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
|
||||
}
|
||||
|
||||
if (shouldRenderNormalPipeSide(state, ForgeDirection.SOUTH)) {
|
||||
box.setBounds(min, min, CoreConstants.PIPE_MAX_POS + 0.001F, max, max, CoreConstants.PIPE_MAX_POS + 0.10F);
|
||||
RenderEntityBlock.INSTANCE.renderBlock(box, pipe.worldObj, 0, 0, 0, pipe.xCoord, pipe.yCoord, pipe.zCoord, true, true);
|
||||
}
|
||||
renderGate(pipe, pipe.pipe.gate.logic.getIconDark());
|
||||
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
|
||||
|
@ -498,6 +463,67 @@ public class PipeRendererTESR extends TileEntitySpecialRenderer {
|
|||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
private void renderGate(TileGenericPipe tile, Icon icon) {
|
||||
float min = CoreConstants.PIPE_MIN_POS + 0.05F;
|
||||
float max = CoreConstants.PIPE_MAX_POS - 0.05F;
|
||||
|
||||
PipeRenderState state = tile.renderState;
|
||||
|
||||
RenderInfo box = new RenderInfo();
|
||||
box.texture = icon;
|
||||
|
||||
float[][] zeroState = new float[3][2];
|
||||
// X START - END
|
||||
zeroState[0][0] = min;
|
||||
zeroState[0][1] = max;
|
||||
// Y START - END
|
||||
zeroState[1][0] = CoreConstants.PIPE_MIN_POS - 0.10F;
|
||||
zeroState[1][1] = CoreConstants.PIPE_MIN_POS + 0.001F;
|
||||
// Z START - END
|
||||
zeroState[2][0] = min;
|
||||
zeroState[2][1] = max;
|
||||
|
||||
for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
|
||||
if (shouldRenderNormalPipeSide(state, direction)) {
|
||||
float[][] rotated = MatrixTranformations.deepClone(zeroState);
|
||||
MatrixTranformations.transform(rotated, direction);
|
||||
|
||||
box.setBounds(rotated[0][0], rotated[1][0], rotated[2][0], rotated[0][1], rotated[1][1], rotated[2][1]);
|
||||
RenderEntityBlock.INSTANCE.renderBlock(box, tile.worldObj, 0, 0, 0, tile.xCoord, tile.yCoord, tile.zCoord, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
// if (shouldRenderNormalPipeSide(state, ForgeDirection.WEST)) {
|
||||
// box.setBounds(CoreConstants.PIPE_MIN_POS - 0.10F, min, min, CoreConstants.PIPE_MIN_POS + 0.001F, max, max);
|
||||
// RenderEntityBlock.INSTANCE.renderBlock(box, tile.worldObj, 0, 0, 0, tile.xCoord, tile.yCoord, tile.zCoord, true, true);
|
||||
// }
|
||||
//
|
||||
// if (shouldRenderNormalPipeSide(state, ForgeDirection.EAST)) {
|
||||
// box.setBounds(CoreConstants.PIPE_MAX_POS + 0.001F, min, min, CoreConstants.PIPE_MAX_POS + 0.10F, max, max);
|
||||
// RenderEntityBlock.INSTANCE.renderBlock(box, tile.worldObj, 0, 0, 0, tile.xCoord, tile.yCoord, tile.zCoord, true, true);
|
||||
// }
|
||||
//
|
||||
// if (shouldRenderNormalPipeSide(state, ForgeDirection.DOWN)) {
|
||||
// box.setBounds(min, CoreConstants.PIPE_MIN_POS - 0.10F, min, max, CoreConstants.PIPE_MIN_POS + 0.001F, max);
|
||||
// RenderEntityBlock.INSTANCE.renderBlock(box, tile.worldObj, 0, 0, 0, tile.xCoord, tile.yCoord, tile.zCoord, true, true);
|
||||
// }
|
||||
//
|
||||
// if (shouldRenderNormalPipeSide(state, ForgeDirection.UP)) {
|
||||
// box.setBounds(min, CoreConstants.PIPE_MAX_POS + 0.001F, min, max, CoreConstants.PIPE_MAX_POS + 0.10F, max);
|
||||
// RenderEntityBlock.INSTANCE.renderBlock(box, tile.worldObj, 0, 0, 0, tile.xCoord, tile.yCoord, tile.zCoord, true, true);
|
||||
// }
|
||||
//
|
||||
// if (shouldRenderNormalPipeSide(state, ForgeDirection.NORTH)) {
|
||||
// box.setBounds(min, min, CoreConstants.PIPE_MIN_POS - 0.10F, max, max, CoreConstants.PIPE_MIN_POS + 0.001F);
|
||||
// RenderEntityBlock.INSTANCE.renderBlock(box, tile.worldObj, 0, 0, 0, tile.xCoord, tile.yCoord, tile.zCoord, true, true);
|
||||
// }
|
||||
//
|
||||
// if (shouldRenderNormalPipeSide(state, ForgeDirection.SOUTH)) {
|
||||
// box.setBounds(min, min, CoreConstants.PIPE_MAX_POS + 0.001F, max, max, CoreConstants.PIPE_MAX_POS + 0.10F);
|
||||
// RenderEntityBlock.INSTANCE.renderBlock(box, tile.worldObj, 0, 0, 0, tile.xCoord, tile.yCoord, tile.zCoord, true, true);
|
||||
// }
|
||||
}
|
||||
|
||||
private boolean shouldRenderNormalPipeSide(PipeRenderState state, ForgeDirection direction) {
|
||||
return !state.pipeConnectionMatrix.isConnected(direction) && state.facadeMatrix.getFacadeBlockId(direction) == 0 && !state.plugMatrix.isConnected(direction) && !isOpenOrientation(state, direction);
|
||||
}
|
||||
|
|
|
@ -4,11 +4,11 @@ import buildcraft.BuildCraftTransport;
|
|||
import buildcraft.api.core.IIconProvider;
|
||||
import buildcraft.core.CoreConstants;
|
||||
import buildcraft.transport.BlockGenericPipe;
|
||||
import buildcraft.transport.IPipeRenderState;
|
||||
import buildcraft.transport.PipeIconProvider;
|
||||
import buildcraft.transport.PipeRenderState;
|
||||
import buildcraft.transport.TransportProxy;
|
||||
import buildcraft.core.utils.MatrixTranformations;
|
||||
import buildcraft.transport.TileGenericPipe;
|
||||
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
|
||||
|
@ -20,9 +20,10 @@ import net.minecraft.world.IBlockAccess;
|
|||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
||||
public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
|
||||
public void renderPipe(RenderBlocks renderblocks, IBlockAccess iblockaccess, BlockGenericPipe block, IPipeRenderState renderState, int x, int y, int z) {
|
||||
PipeRenderState state = renderState.getRenderState();
|
||||
IIconProvider icons = renderState.getPipeIcons();
|
||||
|
||||
public void renderPipe(RenderBlocks renderblocks, IBlockAccess iblockaccess, BlockGenericPipe block, TileGenericPipe tile, int x, int y, int z) {
|
||||
PipeRenderState state = tile.renderState;
|
||||
IIconProvider icons = tile.getPipeIcons();
|
||||
if (icons == null)
|
||||
return;
|
||||
|
||||
|
@ -42,7 +43,8 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
|
|||
|
||||
for (int dir = 0; dir < 6; dir++) {
|
||||
int mask = 1 << dir;
|
||||
if ((connectivity & mask) == 0) continue; // no connection towards dir
|
||||
if ((connectivity & mask) == 0)
|
||||
continue; // no connection towards dir
|
||||
|
||||
// center piece offsets
|
||||
resetToCenterDimensions(dim);
|
||||
|
@ -67,12 +69,17 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
|
|||
}
|
||||
|
||||
private void resetToCenterDimensions(float[] dim) {
|
||||
for (int i = 0; i < 3; i++) dim[i] = CoreConstants.PIPE_MIN_POS;
|
||||
for (int i = 3; i < 6; i++) dim[i] = CoreConstants.PIPE_MAX_POS;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
dim[i] = CoreConstants.PIPE_MIN_POS;
|
||||
}
|
||||
for (int i = 3; i < 6; i++) {
|
||||
dim[i] = CoreConstants.PIPE_MAX_POS;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Render a block with normal and inverted vertex order so back face culling doesn't have any effect.
|
||||
* Render a block with normal and inverted vertex order so back face culling
|
||||
* doesn't have any effect.
|
||||
*/
|
||||
private void renderTwoWayBlock(RenderBlocks renderblocks, BlockGenericPipe block, int x, int y, int z, float[] dim, int mask) {
|
||||
assert mask != 0;
|
||||
|
@ -149,8 +156,8 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler {
|
|||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
|
||||
TileEntity tile = world.getBlockTileEntity(x, y, z);
|
||||
|
||||
if (tile instanceof IPipeRenderState) {
|
||||
IPipeRenderState pipeTile = (IPipeRenderState) tile;
|
||||
if (tile instanceof TileGenericPipe) {
|
||||
TileGenericPipe pipeTile = (TileGenericPipe) tile;
|
||||
renderPipe(renderer, world, (BlockGenericPipe) block, pipeTile, x, y, z);
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -27,7 +27,7 @@ public class ActionPipeColor extends BCAction {
|
|||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return String.format(StringUtils.localize("gate.pipe.item.color"), color.getLocalizedName());
|
||||
return String.format(StringUtils.localize("gate.action.pipe.item.color"), color.getLocalizedName());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -66,17 +66,17 @@ public class TriggerPipeContents extends BCTrigger implements ITriggerPipe {
|
|||
|
||||
switch (kind) {
|
||||
case Empty:
|
||||
return StringUtils.localize("gate.pipe.empty");
|
||||
return StringUtils.localize("gate.trigger.pipe.empty");
|
||||
case ContainsItems:
|
||||
return StringUtils.localize("gate.pipe.containsItems");
|
||||
return StringUtils.localize("gate.trigger.pipe.containsItems");
|
||||
case ContainsFluids:
|
||||
return StringUtils.localize("gate.pipe.containsFluids");
|
||||
return StringUtils.localize("gate.trigger.pipe.containsFluids");
|
||||
case ContainsEnergy:
|
||||
return StringUtils.localize("gate.pipe.containsEnergy");
|
||||
return StringUtils.localize("gate.trigger.pipe.containsEnergy");
|
||||
case RequestsEnergy:
|
||||
return StringUtils.localize("gate.pipe.requestsEnergy");
|
||||
return StringUtils.localize("gate.trigger.pipe.requestsEnergy");
|
||||
case TooMuchEnergy:
|
||||
return StringUtils.localize("gate.pipe.tooMuchEnergy");
|
||||
return StringUtils.localize("gate.trigger.pipe.tooMuchEnergy");
|
||||
}
|
||||
|
||||
return "";
|
||||
|
|