Skip to content

Commit 4a53780

Browse files
committed
[API] Break out field registration and field adding, fixes #45
1 parent 4f8f6b4 commit 4a53780

File tree

4 files changed

+17
-8
lines changed

4 files changed

+17
-8
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ minecraft_version=1.16.5
77
forge_version=36.1.3
88

99
mod_id=compactcrafting
10-
mod_version=1.0.0-beta.6
10+
mod_version=1.0.0-beta.7
1111

1212
# Dependencies and Libs
1313
jei_version=7.7.1.110

src/api/java/dev/compactmods/crafting/api/field/IActiveWorldFields.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ public interface IActiveWorldFields {
1515

1616
void tickFields();
1717

18+
/**
19+
* Adds a field instance. This is typically called during world load; use this safely.
20+
* @param field The field to register.
21+
*/
22+
default void addFieldInstance(IMiniaturizationField field) {}
1823
IMiniaturizationField registerField(IMiniaturizationField field);
1924

2025
void unregisterField(BlockPos center);

src/main/java/dev/compactmods/crafting/field/ActiveWorldFields.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ public void tickFields() {
6565
loaded.forEach(IMiniaturizationField::tick);
6666
}
6767

68-
public IMiniaturizationField registerField(IMiniaturizationField field) {
68+
@Override
69+
public void addFieldInstance(IMiniaturizationField field) {
6970
field.setLevel(level);
7071

7172
BlockPos center = field.getCenter();
@@ -75,6 +76,12 @@ public IMiniaturizationField registerField(IMiniaturizationField field) {
7576
laziness.put(center, lazy);
7677
field.setRef(lazy);
7778

79+
lazy.addListener(lo -> {
80+
lo.ifPresent(this::unregisterField);
81+
});
82+
}
83+
84+
public IMiniaturizationField registerField(IMiniaturizationField field) {
7885
final Optional<BlockPos> anyMissing = ProjectorHelper
7986
.getMissingProjectors(level, field.getFieldSize(), field.getCenter())
8087
.findFirst();
@@ -84,6 +91,7 @@ public IMiniaturizationField registerField(IMiniaturizationField field) {
8491
return field;
8592
}
8693

94+
addFieldInstance(field);
8795
field.getProjectorPositions().forEach(pos -> {
8896
BlockState stateAt = level.getBlockState(pos);
8997
if(!(stateAt.getBlock() instanceof FieldProjectorBlock))
@@ -92,14 +100,10 @@ public IMiniaturizationField registerField(IMiniaturizationField field) {
92100
if(stateAt.hasTileEntity()) {
93101
TileEntity tileAt = level.getBlockEntity(pos);
94102
if (tileAt instanceof FieldProjectorTile) {
95-
((FieldProjectorTile) tileAt).setFieldRef(lazy);
103+
((FieldProjectorTile) tileAt).setFieldRef(field.getRef());
96104
}
97105
}
98106
});
99-
100-
lazy.addListener(lo -> {
101-
lo.ifPresent(this::unregisterField);
102-
});
103107

104108
return field;
105109
}

src/main/java/dev/compactmods/crafting/field/capability/CapabilityActiveWorldFields.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void readNBT(Capability<IActiveWorldFields> capability, IActiveWorldField
5555
MiniaturizationField field = MiniaturizationField.fromSizeAndCenter(size, center);
5656
field.loadServerData(f);
5757

58-
instance.registerField(field);
58+
instance.addFieldInstance(field);
5959
});
6060
}
6161
},

0 commit comments

Comments
 (0)