Skip to content

Commit 5176583

Browse files
committed
Fixed world loading issues
1 parent df3b1f0 commit 5176583

File tree

9 files changed

+27
-35
lines changed

9 files changed

+27
-35
lines changed

src/main/java/ml/sakii/factoryisland/Game.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,9 @@ public void run() {
573573
for(PowerPropagatorComponent ppc : SelectedBlock.getComponents(PowerPropagatorComponent.class)) {
574574
debugInfo.add("Generators: "+ppc.generators.toString());
575575
}
576+
for(PowerConsumerComponent pcc : SelectedBlock.getComponents(PowerConsumerComponent.class)) {
577+
debugInfo.add("Generators: "+pcc.generators.toString());
578+
}
576579
if(SelectedPolygon != null) {
577580
debugInfo.add("SelPoly: "+SelectedPolygon);
578581
}else {

src/main/java/ml/sakii/factoryisland/World.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import ml.sakii.factoryisland.blocks.Block;
4343
import ml.sakii.factoryisland.blocks.BlockFace;
4444
import ml.sakii.factoryisland.blocks.BlockInventoryInterface;
45+
import ml.sakii.factoryisland.blocks.MetadataListener;
4546
import ml.sakii.factoryisland.blocks.WaterBlock;
4647
import ml.sakii.factoryisland.blocks.components.DayNightComponent;
4748
import ml.sakii.factoryisland.blocks.components.DynamicTextureComponent;
@@ -217,6 +218,9 @@ private String loadWorld(GameEngine engine, Consumer<String> update) {
217218
if(bMetadata) {
218219
if(curBlock!=null && curMeta != null) {
219220
curBlock.storeMetadata(curMeta,data);
221+
if(curBlock instanceof MetadataListener ml) {
222+
ml.onMetadataUpdate(curMeta, data);
223+
}
220224
}else {
221225
return "No current block/metadata tag while parsing metadata";
222226
}
@@ -261,7 +265,7 @@ private String loadWorld(GameEngine engine, Consumer<String> update) {
261265
curMeta=null;
262266
bMetadata=false;
263267
}
264-
else if(endElement.getName().getLocalPart().equalsIgnoreCase("power")) {
268+
else if(endElement.getName().getLocalPart().equalsIgnoreCase("signals")) {
265269
curSignals=null;
266270
bSignals=false;
267271
}

src/main/java/ml/sakii/factoryisland/blocks/Block.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,10 +226,6 @@ public String toString()
226226

227227

228228

229-
BlockFace getTarget()
230-
{
231-
return BlockFace.values[java.lang.Integer.parseInt(this.BlockMeta.get("target"))];
232-
}
233229

234230
long getTick()
235231
{

src/main/java/ml/sakii/factoryisland/blocks/Fluid.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.util.List;
66
import java.util.Map.Entry;
77

8-
import ml.sakii.factoryisland.Game;
98
import ml.sakii.factoryisland.GameEngine;
109
import ml.sakii.factoryisland.Main;
1110
import ml.sakii.factoryisland.Object3D;
@@ -140,16 +139,6 @@ public List<ItemStack> onBreak() {
140139
};
141140

142141
addComponent(bc);
143-
144-
wlc = new WorldLoadComponent(this) {
145-
146-
@Override
147-
public void onLoad(Game game) {
148-
heightMap();
149-
}
150-
};
151-
152-
addComponent(wlc);
153142

154143
}
155144

@@ -176,12 +165,13 @@ private void heightMap() {
176165
@Override
177166
public boolean onMetadataUpdate(String key, String value)
178167
{
179-
storeMetadata(key, value);
180168
if(key.equals("height")){
169+
storeMetadata(key, value);
181170
heightMap();
171+
return true;
182172
}
183173

184-
return true;
174+
return false;
185175
}
186176

187177

src/main/java/ml/sakii/factoryisland/blocks/SimpleMachine.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ public SimpleMachine(String name, int x, int y, int z, Surface side, Surface fro
5353
updateTargetColors(BlockFace.EAST,BlockFace.TOP);
5454
}
5555

56+
// this is needed because if "active" comes before "target",
57+
// the textures will be incorrect after world load
5658
wlc = new WorldLoadComponent(this) {
5759

5860
@Override
@@ -240,7 +242,7 @@ public boolean onMetadataUpdate(String key, String value){
240242
updateTargetColors(getTarget(),BlockFace.values[Integer.parseInt(value)]);
241243
storeMetadata(key, value);
242244

243-
if(Engine.game != null) {
245+
if(Engine.game != null && Engine.game.PE != null) {
244246
dtc.updateTexture(new Vector(), Engine.game);
245247
}
246248
return true;
@@ -254,6 +256,11 @@ public boolean onMetadataUpdate(String key, String value){
254256

255257
}
256258

259+
protected BlockFace getTarget()
260+
{
261+
return BlockFace.values[java.lang.Integer.parseInt(getMetadata("target"))];
262+
}
263+
257264

258265

259266
}

src/main/java/ml/sakii/factoryisland/blocks/WoodBlock.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.awt.Color;
44
import ml.sakii.factoryisland.AssetLibrary;
55
import ml.sakii.factoryisland.Color4;
6-
import ml.sakii.factoryisland.Game;
76
import ml.sakii.factoryisland.GameEngine;
87
import ml.sakii.factoryisland.Object3D;
98
import ml.sakii.factoryisland.Polygon3D;
@@ -21,15 +20,6 @@ public WoodBlock(int x, int y, int z, GameEngine engine) {
2120

2221
spc = new SignalPropagatorComponent(this);
2322
addComponent(spc);
24-
25-
wlc = new WorldLoadComponent(this) {
26-
@Override
27-
public void onLoad(Game game) {
28-
recalcPaints();
29-
}
30-
};
31-
32-
addComponent(wlc);
3323
}
3424

3525

@@ -38,9 +28,7 @@ public Surface[] getSurfaces() {
3828
return Block.generateSurfacesCopy(new Surface(AssetLibrary.wood.Texture,Color4.TRANSPARENT));
3929
}
4030

41-
private void recalcPaints() {
42-
int charge = spc.getCharge();
43-
31+
private void recalcPaints(int charge) {
4432
for(Object3D obj : Objects){
4533
if(obj instanceof Polygon3D p) {
4634
if(charge == 0){
@@ -60,7 +48,7 @@ private void recalcPaints() {
6048
public boolean onMetadataUpdate(String key, String value) {
6149
if(key.equals("signalLevel")) {
6250
storeMetadata(key, value);
63-
recalcPaints();
51+
recalcPaints(Integer.parseInt(value));
6452
return true;
6553
}
6654
return false;

src/main/java/ml/sakii/factoryisland/blocks/components/PowerConsumerComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
public class PowerConsumerComponent extends PowerComponent {
1414

15-
HashMap<PowerGeneratorComponent, Float> generators = new HashMap<>();
15+
public HashMap<PowerGeneratorComponent, Float> generators = new HashMap<>();
1616
BreakComponent bc;
1717
PlaceComponent pc;
1818

src/main/java/ml/sakii/factoryisland/blocks/components/PowerGeneratorComponent.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.HashSet;
66
import java.util.LinkedList;
77
import java.util.List;
8+
89
import ml.sakii.factoryisland.Main;
910
import ml.sakii.factoryisland.blocks.Block;
1011
import ml.sakii.factoryisland.blocks.BlockFace;
@@ -30,7 +31,7 @@ public List<ItemStack> onBreak() {
3031
SubComponents.add(bc);
3132

3233
tuc = new TickUpdateComponent(block) {
33-
34+
// automatically runs on world load
3435
@Override
3536
public boolean onTick(long tick) {
3637
Main.log("Setting power to "+getDesiredPower());

src/main/java/ml/sakii/factoryisland/blocks/components/PowerPropagatorComponent.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ public PowerPropagatorComponent(Block block) {
2121

2222
@Override
2323
public List<ItemStack> onBreak() {
24+
for(PowerGeneratorComponent pgc : generators) {
25+
propagate(0,pgc,new LinkedList<>(), new HashSet<>());
26+
}
2427
refreshGenerators(new LinkedList<>());
2528
return null;
2629
}

0 commit comments

Comments
 (0)