-
Notifications
You must be signed in to change notification settings - Fork 497
/
SchematicPipe.java
139 lines (112 loc) · 4.16 KB
/
SchematicPipe.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* 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.blueprints;
import java.util.ArrayList;
import java.util.LinkedList;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicTile;
import buildcraft.api.gates.ActionManager;
import buildcraft.api.gates.IAction;
import buildcraft.api.gates.ITrigger;
import buildcraft.transport.BlockGenericPipe;
import buildcraft.transport.Pipe;
import buildcraft.transport.TileGenericPipe.SideProperties;
public class SchematicPipe extends SchematicTile {
@Override
public boolean isAlreadyBuilt(IBuilderContext context, int x, int y, int z) {
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
if (BlockGenericPipe.isValid(pipe)) {
return pipe.item == context.getMappingRegistry().getItemForId(
cpt.getInteger("pipeId"));
} else {
return false;
}
}
@Override
public void rotateLeft(IBuilderContext context) {
SideProperties props = new SideProperties ();
props.readFromNBT(cpt);
props.rotateLeft();
props.writeToNBT(cpt);
Item pipeItem = context.getMappingRegistry().getItemForId(cpt.getInteger("pipeId"));
if (BptPipeExtension.contains(pipeItem)) {
BptPipeExtension.get(pipeItem).rotateLeft(this, context);
}
NBTTagCompound gateNBT = cpt.getCompoundTag("Gate");
for (int i = 0; i < 8; ++i) {
if (gateNBT.hasKey("trigger[" + i + "]")) {
ITrigger t = ActionManager.triggers.get(gateNBT.getString("trigger[" + i + "]"));
t = t.rotateLeft ();
gateNBT.setString("trigger[" + i + "]", t.getUniqueTag());
}
if (gateNBT.hasKey("action[" + i + "]")) {
IAction a = ActionManager.actions.get(gateNBT.getString("action[" + i + "]"));
a = a.rotateLeft ();
gateNBT.setString("action[" + i + "]", a.getUniqueTag());
}
}
}
@Override
public void writeToWorld(IBuilderContext context, int x, int y, int z, LinkedList <ItemStack> stacks) {
cpt.setInteger("x", x);
cpt.setInteger("y", y);
cpt.setInteger("z", z);
cpt.setInteger(
"pipeId",
Item.getIdFromItem(context.getMappingRegistry().getItemForId(
cpt.getInteger("pipeId"))));
context.world().setBlock(x, y, z, block, meta, 3);
TileEntity tile = context.world().getTileEntity(x, y, z);
tile.readFromNBT(cpt);
}
@Override
public void readFromWorld(IBuilderContext context, int x, int y, int z) {
TileEntity tile = context.world().getTileEntity(x, y, z);
Pipe pipe = BlockGenericPipe.getPipe(context.world(), x, y, z);
if (BlockGenericPipe.isValid(pipe)) {
ArrayList <ItemStack> items = pipe.computeItemDrop ();
storedRequirements = new ItemStack [items.size() + 1];
items.toArray(storedRequirements);
storedRequirements[storedRequirements.length - 1] = new ItemStack(
pipe.item);
tile.writeToNBT(cpt);
// This overrides the default pipeId
cpt.setInteger("pipeId", context.getMappingRegistry()
.getIdForItem(pipe.item));
// remove all pipe contents
cpt.removeTag("travelingEntities");
for (ForgeDirection direction : ForgeDirection.values()) {
cpt.removeTag("tank[" + direction.ordinal() + "]");
cpt.removeTag("transferState[" + direction.ordinal() + "]");
}
for (int i = 0; i < 6; ++i) {
cpt.removeTag("powerQuery[" + i + "]");
cpt.removeTag("nextPowerQuery[" + i + "]");
cpt.removeTag("internalPower[" + i + "]");
cpt.removeTag("internalNextPower[" + i + "]");
}
}
}
@Override
public void postProcessing(IBuilderContext context, int x, int y, int z) {
Item pipeItem = context.getMappingRegistry().getItemForId(cpt.getInteger("pipeId"));
if (BptPipeExtension.contains(pipeItem)) {
BptPipeExtension.get(pipeItem).postProcessing(this, context);
}
}
@Override
public boolean isStandalone () {
return true;
}
}