Skip to content

Commit 314fea4

Browse files
committed
Add more tests for field syncing and layers
1 parent 85409ca commit 314fea4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+559
-295
lines changed

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

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,21 @@ public BlockPos getProjectorLocationForDirection(BlockPos center, Direction dire
106106
return center.relative(direction, this.getProjectorDistance() + 1);
107107
}
108108

109+
public BlockPos getOriginCenter() {
110+
return new BlockPos(BlockPos.ZERO.offset(size, size, size));
111+
}
112+
113+
public BlockPos getOriginCenterFromCorner() {
114+
return getOriginCenter().offset(projectorDistance, 0, projectorDistance);
115+
}
116+
117+
public Stream<BlockPos> getProjectorLocationsAtOrigin() {
118+
return Arrays
119+
.stream(new Direction[]{Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST})
120+
.filter(d -> d.getAxis().isHorizontal())
121+
.map(hor -> getProjectorLocationForDirection(getOriginCenter(), hor));
122+
}
123+
109124
public Stream<BlockPos> getProjectorLocations(BlockPos center) {
110125
return Arrays
111126
.stream(new Direction[]{Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST})
@@ -127,8 +142,7 @@ public BlockPos getOppositeProjectorPosition(BlockPos projectorPos, Direction pr
127142
}
128143

129144
public AxisAlignedBB getBoundsAtOrigin() {
130-
int offset = this.size;
131-
return getBoundsAtPosition(BlockPos.ZERO.offset(offset, offset, offset));
145+
return getBoundsAtPosition(getOriginCenter());
132146
}
133147

134148
public AxisAlignedBB getBoundsAtPosition(BlockPos center) {
@@ -139,8 +153,4 @@ public AxisAlignedBB getBoundsAtPosition(BlockPos center) {
139153
public String getSerializedName() {
140154
return name;
141155
}
142-
143-
public BlockPos getCenterOffset() {
144-
return new BlockPos(getBoundsAtOrigin().getCenter());
145-
}
146156
}

src/main/java/dev/compactmods/crafting/Registration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import dev.compactmods.crafting.field.block.FieldCraftingPreviewBlock;
55
import dev.compactmods.crafting.field.tile.FieldCraftingPreviewTile;
66
import dev.compactmods.crafting.items.FieldProjectorItem;
7-
import dev.compactmods.crafting.projector.block.FieldProjectorBlock;
8-
import dev.compactmods.crafting.projector.tile.FieldProjectorTile;
7+
import dev.compactmods.crafting.projector.FieldProjectorBlock;
8+
import dev.compactmods.crafting.projector.FieldProjectorTile;
99
import dev.compactmods.crafting.proxies.block.MatchFieldProxyBlock;
1010
import dev.compactmods.crafting.proxies.block.RescanFieldProxyBlock;
1111
import dev.compactmods.crafting.proxies.data.MatchFieldProxyEntity;

src/main/java/dev/compactmods/crafting/compat/theoneprobe/providers/FieldProjectorProvider.java

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

33
import dev.compactmods.crafting.CompactCrafting;
44
import dev.compactmods.crafting.field.capability.CapabilityMiniaturizationField;
5-
import dev.compactmods.crafting.projector.block.FieldProjectorBlock;
6-
import dev.compactmods.crafting.projector.tile.FieldProjectorTile;
5+
import dev.compactmods.crafting.projector.FieldProjectorBlock;
6+
import dev.compactmods.crafting.projector.FieldProjectorTile;
77
import dev.compactmods.crafting.api.EnumCraftingState;
88
import dev.compactmods.crafting.api.recipe.IMiniaturizationRecipe;
99
import mcjty.theoneprobe.api.*;

src/main/java/dev/compactmods/crafting/datagen/ProjectorStateGenerator.java

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

33
import dev.compactmods.crafting.CompactCrafting;
44
import dev.compactmods.crafting.Registration;
5-
import dev.compactmods.crafting.projector.block.FieldProjectorBlock;
5+
import dev.compactmods.crafting.projector.FieldProjectorBlock;
66
import net.minecraft.data.DataGenerator;
77
import net.minecraft.util.Direction;
88
import net.minecraftforge.client.model.generators.BlockModelBuilder;

src/main/java/dev/compactmods/crafting/events/WorldEventHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public static void onChunkLoadStatusChanged(final ChunkEvent cEvent) {
5252

5353
final MinecraftServer server = level.getServer();
5454
if (server != null) {
55-
server.tell(new TickDelayedTask(server.getTickCount() + 10, () -> {
55+
server.submitAsync(new TickDelayedTask(server.getTickCount() + 10, () -> {
5656
BlockPos chunkCenter = chunk.getPos()
5757
.getWorldPosition()
5858
.offset(8, 0, 8);

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
import dev.compactmods.crafting.CompactCrafting;
1010
import dev.compactmods.crafting.api.field.IActiveWorldFields;
1111
import dev.compactmods.crafting.api.field.IMiniaturizationField;
12+
import dev.compactmods.crafting.network.FieldDeactivatedPacket;
13+
import dev.compactmods.crafting.network.NetworkHandler;
1214
import net.minecraft.util.math.BlockPos;
1315
import net.minecraft.util.math.ChunkPos;
1416
import net.minecraft.world.World;
1517
import net.minecraftforge.common.util.LazyOptional;
18+
import net.minecraftforge.fml.network.PacketDistributor;
1619

1720
public class ActiveWorldFields implements IActiveWorldFields {
1821

@@ -74,8 +77,15 @@ public IMiniaturizationField registerField(IMiniaturizationField field) {
7477
}
7578

7679
public void unregisterField(BlockPos center) {
77-
fields.remove(center);
80+
IMiniaturizationField removedField = fields.remove(center);
7881
laziness.remove(center);
82+
83+
if(!level.isClientSide && removedField != null) {
84+
// Send activation packet to clients
85+
NetworkHandler.MAIN_CHANNEL.send(
86+
PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(removedField.getCenter())),
87+
new FieldDeactivatedPacket(removedField.getFieldSize(), removedField.getCenter()));
88+
}
7989
}
8090

8191
public void unregisterField(IMiniaturizationField field) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import dev.compactmods.crafting.field.capability.CapabilityActiveWorldFields;
55
import dev.compactmods.crafting.api.field.MiniaturizationFieldSize;
66
import dev.compactmods.crafting.api.field.IMiniaturizationField;
7-
import dev.compactmods.crafting.projector.block.FieldProjectorBlock;
7+
import dev.compactmods.crafting.projector.FieldProjectorBlock;
88
import dev.compactmods.crafting.server.ServerConfig;
99
import net.minecraft.util.math.AxisAlignedBB;
1010
import net.minecraft.util.math.BlockPos;

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

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@
66
import java.util.stream.Stream;
77
import dev.compactmods.crafting.CompactCrafting;
88
import dev.compactmods.crafting.Registration;
9+
import dev.compactmods.crafting.api.EnumCraftingState;
10+
import dev.compactmods.crafting.api.field.IFieldListener;
11+
import dev.compactmods.crafting.api.field.IMiniaturizationField;
12+
import dev.compactmods.crafting.api.field.MiniaturizationFieldSize;
13+
import dev.compactmods.crafting.api.recipe.IMiniaturizationRecipe;
914
import dev.compactmods.crafting.crafting.CraftingHelper;
1015
import dev.compactmods.crafting.network.FieldRecipeChangedPacket;
1116
import dev.compactmods.crafting.network.NetworkHandler;
12-
import dev.compactmods.crafting.projector.block.FieldProjectorBlock;
17+
import dev.compactmods.crafting.projector.FieldProjectorBlock;
1318
import dev.compactmods.crafting.recipes.MiniaturizationRecipe;
1419
import dev.compactmods.crafting.recipes.blocks.RecipeBlocks;
1520
import dev.compactmods.crafting.server.ServerConfig;
1621
import dev.compactmods.crafting.util.BlockSpaceUtil;
17-
import dev.compactmods.crafting.api.EnumCraftingState;
18-
import dev.compactmods.crafting.api.field.MiniaturizationFieldSize;
19-
import dev.compactmods.crafting.api.field.IFieldListener;
20-
import dev.compactmods.crafting.api.field.IMiniaturizationField;
21-
import dev.compactmods.crafting.api.recipe.IMiniaturizationRecipe;
2222
import net.minecraft.block.Blocks;
2323
import net.minecraft.entity.item.ItemEntity;
2424
import net.minecraft.item.Item;
@@ -179,23 +179,6 @@ public void clearRecipe() {
179179
}));
180180
}
181181

182-
@Override
183-
public void completeCraft() {
184-
185-
if (currentRecipe != null) {
186-
for (ItemStack is : currentRecipe.getOutputs()) {
187-
ItemEntity itemEntity = new ItemEntity(level, center.getX() + 0.5f, center.getY() + 0.5f, center.getZ() + 0.5f, is);
188-
level.addFreshEntity(itemEntity);
189-
}
190-
}
191-
192-
IMiniaturizationRecipe completed = this.currentRecipe;
193-
194-
clearRecipe();
195-
196-
listeners.forEach(l -> l.ifPresent(listener -> listener.onRecipeCompleted(this, completed)));
197-
}
198-
199182
@Override
200183
public EnumCraftingState getCraftingState() {
201184
return craftingState;
@@ -246,8 +229,18 @@ public void tickCrafting() {
246229

247230
case CRAFTING:
248231
craftingProgress++;
249-
if (craftingProgress >= currentRecipe.getCraftingTime())
250-
this.completeCraft();
232+
if (craftingProgress >= currentRecipe.getCraftingTime()) {
233+
for (ItemStack is : currentRecipe.getOutputs()) {
234+
ItemEntity itemEntity = new ItemEntity(level, center.getX() + 0.5f, center.getY() + 0.5f, center.getZ() + 0.5f, is);
235+
level.addFreshEntity(itemEntity);
236+
}
237+
238+
IMiniaturizationRecipe completed = this.currentRecipe;
239+
240+
clearRecipe();
241+
242+
listeners.forEach(l -> l.ifPresent(listener -> listener.onRecipeCompleted(this, completed)));
243+
}
251244

252245
break;
253246
}
Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,75 @@
11
package dev.compactmods.crafting.network;
22

3+
import javax.annotation.Nullable;
4+
import java.io.IOException;
5+
import java.util.function.Supplier;
6+
import com.mojang.serialization.Codec;
7+
import com.mojang.serialization.codecs.RecordCodecBuilder;
38
import dev.compactmods.crafting.CompactCrafting;
4-
import dev.compactmods.crafting.client.ClientPacketHandler;
9+
import dev.compactmods.crafting.api.field.IMiniaturizationField;
510
import dev.compactmods.crafting.api.field.MiniaturizationFieldSize;
11+
import dev.compactmods.crafting.client.ClientPacketHandler;
12+
import dev.compactmods.crafting.field.MiniaturizationField;
13+
import net.minecraft.nbt.CompoundNBT;
614
import net.minecraft.network.PacketBuffer;
715
import net.minecraft.util.math.BlockPos;
816
import net.minecraftforge.api.distmarker.Dist;
917
import net.minecraftforge.fml.DistExecutor;
1018
import net.minecraftforge.fml.network.NetworkEvent;
1119

12-
import javax.annotation.Nullable;
13-
import java.io.IOException;
14-
import java.util.function.Supplier;
20+
public class FieldActivatedPacket {
1521

16-
public class FieldActivatedPacket extends FieldChangedPacket {
22+
private IMiniaturizationField field;
1723

18-
public FieldActivatedPacket(MiniaturizationFieldSize fieldSize, BlockPos fieldCenter) {
19-
super(fieldSize, fieldCenter);
20-
}
24+
@Nullable
25+
protected CompoundNBT clientData;
2126

22-
public static void handle(FieldActivatedPacket message, Supplier<NetworkEvent.Context> context) {
23-
NetworkEvent.Context ctx = context.get();
27+
protected static final Codec<FieldActivatedPacket> CODEC = RecordCodecBuilder.create(i -> i.group(
28+
Codec.STRING.xmap(MiniaturizationFieldSize::valueOf, Enum::name)
29+
.fieldOf("size").forGetter(x -> x.field.getFieldSize()),
2430

25-
ctx.enqueueWork(() -> {
26-
DistExecutor.unsafeCallWhenOn(Dist.CLIENT, () -> () -> {
27-
ClientPacketHandler.handleFieldActivation(message.projectorLocations, message.fieldSize);
28-
return null;
29-
});
30-
});
31+
BlockPos.CODEC.fieldOf("center").forGetter(x -> x.field.getCenter()),
3132

32-
ctx.setPacketHandled(true);
33+
CompoundNBT.CODEC.fieldOf("clientData").forGetter(x -> x.clientData)
34+
).apply(i, FieldActivatedPacket::new));
35+
36+
public FieldActivatedPacket(IMiniaturizationField field) {
37+
this.field = field;
38+
this.clientData = field.clientData();
3339
}
3440

35-
public static void encode(FieldActivatedPacket pkt, PacketBuffer buf) {
41+
private FieldActivatedPacket(MiniaturizationFieldSize fieldSize, BlockPos center, CompoundNBT clientData) {
42+
this.field = new MiniaturizationField();
43+
field.setSize(fieldSize);
44+
field.setCenter(center);
45+
this.clientData = clientData;
46+
}
47+
48+
public FieldActivatedPacket(PacketBuffer buf) {
3649
try {
37-
buf.writeWithCodec(CODEC, pkt);
50+
FieldActivatedPacket base = buf.readWithCodec(CODEC);
51+
this.field = base.field;
52+
this.clientData = base.clientData;
3853
} catch (IOException e) {
3954
CompactCrafting.LOGGER.error(e);
4055
}
4156
}
4257

43-
@Nullable
44-
public static FieldActivatedPacket decode(PacketBuffer buf) {
58+
public static void handle(FieldActivatedPacket message, Supplier<NetworkEvent.Context> context) {
59+
NetworkEvent.Context ctx = context.get();
60+
61+
ctx.enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
62+
ClientPacketHandler.handleFieldActivation(message.field, message.clientData);
63+
}));
64+
65+
ctx.setPacketHandled(true);
66+
}
67+
68+
public static void encode(FieldActivatedPacket pkt, PacketBuffer buf) {
4569
try {
46-
FieldChangedPacket base = buf.readWithCodec(CODEC);
47-
return new FieldActivatedPacket(base.fieldSize, base.fieldCenter);
70+
buf.writeWithCodec(CODEC, pkt);
4871
} catch (IOException e) {
4972
CompactCrafting.LOGGER.error(e);
5073
}
51-
52-
return null;
5374
}
5475
}

src/main/java/dev/compactmods/crafting/network/FieldChangedPacket.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)