Skip to content

Commit e5a417b

Browse files
authored
Merge pull request #11 from jamesgreen26/1.20
Refactoring and Cleanup
2 parents 24054f4 + 78dccb0 commit e5a417b

14 files changed

+82
-86
lines changed

src/main/java/ace/actually/pirates/blocks/CrewSpawnerBlock.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import ace.actually.pirates.Pirates;
44
import ace.actually.pirates.blocks.entity.CrewSpawnerBlockEntity;
5-
import ace.actually.pirates.util.CrewTypes;
5+
import ace.actually.pirates.entities.CrewTypes;
66
import net.minecraft.block.*;
77
import net.minecraft.block.entity.BlockEntity;
88
import net.minecraft.block.entity.BlockEntityTicker;

src/main/java/ace/actually/pirates/blocks/entity/CrewSpawnerBlockEntity.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import ace.actually.pirates.entities.pirate_default.PirateEntity;
66
import ace.actually.pirates.entities.pirate_skeleton.SkeletonPirateEntity;
77
import ace.actually.pirates.events.IPirateSpawns;
8-
import ace.actually.pirates.util.CrewSpawnType;
9-
import ace.actually.pirates.util.CrewTypes;
8+
import ace.actually.pirates.entities.CrewSpawnType;
9+
import ace.actually.pirates.entities.CrewTypes;
1010
import net.minecraft.block.BlockState;
1111
import net.minecraft.block.entity.BlockEntity;
1212
import net.minecraft.enchantment.Enchantments;

src/main/java/ace/actually/pirates/blocks/entity/MotionInvokingBlockEntity.java

+10-32
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,21 @@
4242
import static net.minecraft.state.property.Properties.HORIZONTAL_FACING;
4343

4444
public class MotionInvokingBlockEntity extends BlockEntity {
45-
4645
NbtList instructions = new NbtList();
4746
long nextInstruction = 0;
47+
48+
public NbtList getInstructions() {return instructions;}
49+
public void setNextInstruction(long nextInstruction) {this.nextInstruction = nextInstruction;}
50+
public void advanceInstructionList() {instructions.add(instructions.remove(0));}
51+
4852
private static int updateTicks = -1;
4953

5054
public MotionInvokingBlockEntity(BlockPos pos, BlockState state) {
5155
super(Pirates.MOTION_INVOKING_BLOCK_ENTITY, pos, state);
5256
}
5357

58+
59+
5460
public static void tick(World world, BlockPos pos, BlockState state, MotionInvokingBlockEntity be) {
5561

5662
if (!(world.getBlockState(pos.up()).getBlock() instanceof ShipHelmBlock)) {
@@ -74,13 +80,12 @@ public static void tick(World world, BlockPos pos, BlockState state, MotionInvok
7480

7581
}
7682
if (!world.isClient && world.getGameRules().getBoolean(Pirates.PIRATES_IS_LIVE_WORLD) && world.getTime() >= be.nextInstruction) {
77-
DimensionIdProvider provider = (DimensionIdProvider) world;
7883

7984
if (VSGameUtilsKt.isBlockInShipyard(world, pos)) {
8085

8186

8287
ChunkPos chunkPos = world.getChunk(pos).getPos();
83-
LoadedServerShip ship = (LoadedServerShip) ValkyrienSkiesMod.getVsCore().getHooks().getCurrentShipServerWorld().getLoadedShips().getByChunkPos(chunkPos.x, chunkPos.z, provider.getDimensionId());
88+
LoadedServerShip ship = VSGameUtilsKt.getShipObjectManagingPos((ServerWorld) world, chunkPos);
8489

8590
//Pirates.LOGGER.info("scaling of ship: "+s.x()+" "+s.y()+" "+s.z());
8691

@@ -194,16 +199,8 @@ private void moveTowards(SeatedControllingPlayer power, LoadedServerShip ship)
194199

195200
}
196201

197-
private double vdis(double x, double xto)
198-
{
199-
if(x>xto)
200-
{
201-
return x-xto;
202-
}
203-
else
204-
{
205-
return xto-x;
206-
}
202+
private double vdis(double x, double xto) {
203+
return Math.abs(x-xto);
207204
}
208205

209206
private void moveShipForward(LoadedServerShip ship)
@@ -220,23 +217,4 @@ private void moveShipForward(LoadedServerShip ship)
220217
//gtfa.applyInvariantForce(qdc);
221218
}
222219
}
223-
224-
private void utiliseInternalPattern(SeatedControllingPlayer seatedControllingPlayer, MotionInvokingBlockEntity be) {
225-
String[] instruction = be.instructions.getString(0).split(" ");
226-
227-
if (seatedControllingPlayer == null) return;
228-
switch (instruction[0]) {
229-
case "forward" -> seatedControllingPlayer.setForwardImpulse(Float.parseFloat(instruction[1]));
230-
case "left" -> seatedControllingPlayer.setLeftImpulse(Float.parseFloat(instruction[1]));
231-
case "right" -> seatedControllingPlayer.setLeftImpulse(-Float.parseFloat(instruction[1]));
232-
case "backwards" -> seatedControllingPlayer.setForwardImpulse(-Float.parseFloat(instruction[1]));
233-
case "up" -> seatedControllingPlayer.setUpImpulse(Float.parseFloat(instruction[1]));
234-
case "down" -> seatedControllingPlayer.setUpImpulse(-Float.parseFloat(instruction[1]));
235-
}
236-
237-
be.nextInstruction = world.getTime() + Long.parseLong(instruction[2]);
238-
be.instructions.add(be.instructions.remove(0));
239-
be.markDirty();
240-
}
241-
242220
}

src/main/java/ace/actually/pirates/util/CrewSpawnType.java src/main/java/ace/actually/pirates/entities/CrewSpawnType.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ace.actually.pirates.util;
1+
package ace.actually.pirates.entities;
22

33

44
import net.minecraft.util.StringIdentifiable;

src/main/java/ace/actually/pirates/util/CrewTypes.java src/main/java/ace/actually/pirates/entities/CrewTypes.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ace.actually.pirates.util;
1+
package ace.actually.pirates.entities;
22

33
import net.minecraft.state.property.EnumProperty;
44

src/main/java/ace/actually/pirates/mixin/SpeedMixin.java src/main/java/ace/actually/pirates/mixin/bugfixes/SpeedMixin.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package ace.actually.pirates.mixin;
1+
package ace.actually.pirates.mixin.bugfixes;
22

3-
import ace.actually.pirates.Pirates;
43
import net.minecraft.entity.Entity;
54
import net.minecraft.util.math.Vec3d;
65
import org.spongepowered.asm.mixin.Mixin;

src/main/java/ace/actually/pirates/mixin/FallingBlockEntityMixin.java src/main/java/ace/actually/pirates/mixin/compat/FallingBlockEntityMixin.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
1-
package ace.actually.pirates.mixin;
1+
package ace.actually.pirates.mixin.compat;
22

33
import ace.actually.pirates.Pirates;
44
import net.minecraft.block.BlockState;
5-
import net.minecraft.entity.EntityType;
65
import net.minecraft.entity.FallingBlockEntity;
7-
import net.minecraft.state.property.Properties;
86
import net.minecraft.util.math.BlockPos;
97
import net.minecraft.world.World;
108
import org.spongepowered.asm.mixin.Mixin;
11-
import org.spongepowered.asm.mixin.Shadow;
129
import org.spongepowered.asm.mixin.injection.At;
1310
import org.spongepowered.asm.mixin.injection.Inject;
14-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1511
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1612
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
1713

18-
/*
19-
* VS Crumbles compatibility :)
20-
*/
14+
2115

2216
@Mixin(value = FallingBlockEntity.class)
2317
public abstract class FallingBlockEntityMixin{
2418

19+
/**
20+
@author G_Mungus
21+
@reason fix behavior with VS Crumbles
22+
**/
23+
2524
@Inject(method = "spawnFromBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;spawnEntity(Lnet/minecraft/entity/Entity;)Z"), locals = LocalCapture.CAPTURE_FAILSOFT)
2625
private static void beforeSpawnEntity(World world, BlockPos pos, BlockState state, CallbackInfoReturnable<FallingBlockEntity> cir, FallingBlockEntity fallingBlockEntity) {
2726
if (fallingBlockEntity.getBlockState().isOf(Pirates.CREW_SPAWNER_BLOCK) ||

src/main/java/ace/actually/pirates/mixin/ServerWorldMixin.java src/main/java/ace/actually/pirates/mixin/shipPlacement/ServerWorldMixin.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package ace.actually.pirates.mixin;
1+
package ace.actually.pirates.mixin.shipPlacement;
22

3-
import ace.actually.pirates.util.ShipStructurePlacementHelper;
3+
import ace.actually.pirates.structures.ShipStructurePlacementHelper;
44
import kotlin.Triple;
55
import net.minecraft.server.world.ServerWorld;
66
import net.minecraft.structure.StructureTemplate;
@@ -12,7 +12,7 @@
1212

1313
import java.util.function.BooleanSupplier;
1414

15-
import static ace.actually.pirates.util.ShipStructurePlacementHelper.shipQueue;
15+
import static ace.actually.pirates.structures.ShipStructurePlacementHelper.shipQueue;
1616

1717
@Mixin(ServerWorld.class)
1818
public abstract class ServerWorldMixin {

src/main/java/ace/actually/pirates/mixin/StructureTemplateManagerMixin.java src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateManagerMixin.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package ace.actually.pirates.mixin;
1+
package ace.actually.pirates.mixin.shipPlacement;
22

3-
import ace.actually.pirates.util.CanRemoveTemplate;
3+
import ace.actually.pirates.structures.CanRemoveTemplate;
44
import net.minecraft.structure.StructureTemplate;
55
import net.minecraft.structure.StructureTemplateManager;
66
import net.minecraft.util.Identifier;

src/main/java/ace/actually/pirates/mixin/StructureTemplateMixin.java src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateMixin.java

+8-25
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
package ace.actually.pirates.mixin;
1+
package ace.actually.pirates.mixin.shipPlacement;
22

33
import ace.actually.pirates.Pirates;
4-
import ace.actually.pirates.util.CanRemoveTemplate;
5-
import ace.actually.pirates.util.ShipStructurePlacementHelper;
6-
import net.minecraft.client.render.entity.SpiderEntityRenderer;
4+
import ace.actually.pirates.structures.ShipStructurePlacementHelper;
75
import net.minecraft.structure.StructurePlacementData;
86
import net.minecraft.structure.StructureTemplate;
9-
import net.minecraft.structure.StructureTemplateManager;
10-
import net.minecraft.util.BlockMirror;
11-
import net.minecraft.util.BlockRotation;
127
import net.minecraft.util.math.*;
138
import net.minecraft.util.math.random.Random;
149
import net.minecraft.world.ServerWorldAccess;
@@ -19,8 +14,6 @@
1914
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
2015
import org.valkyrienskies.mod.common.VSGameUtilsKt;
2116

22-
import java.util.Objects;
23-
2417

2518
@Mixin(value = StructureTemplate.class)
2619
public abstract class StructureTemplateMixin {
@@ -33,24 +26,14 @@ public abstract class StructureTemplateMixin {
3326
public void placeMixin(ServerWorldAccess world, BlockPos pos, BlockPos pivot, StructurePlacementData placementData, Random random, int flags, CallbackInfoReturnable<Boolean> cir) {
3427
if (VSGameUtilsKt.isBlockInShipyard(world.toServerWorld(), pos)) return;
3528

36-
boolean placed;
3729
if (this.author.equals("pirate-ship")) {
38-
if (placementData.getBoundingBox() != null) {
39-
ShipStructurePlacementHelper.placeShipTemplate(
40-
(StructureTemplate) (Object) this,
41-
world.toServerWorld(),
42-
placementData.getBoundingBox().getCenter());
43-
placed = true;
44-
} else {
45-
ShipStructurePlacementHelper.placeShipTemplate(
46-
(StructureTemplate) (Object) this,
47-
world.toServerWorld(),
48-
pos);
49-
Pirates.LOGGER.info("Template generated with null bounding box");
50-
placed = true;
51-
}
30+
ShipStructurePlacementHelper.placeShipTemplate(
31+
(StructureTemplate) (Object) this,
32+
world.toServerWorld(),
33+
pos);
34+
5235
this.setAuthor("dirty");
53-
cir.setReturnValue(placed);
36+
cir.setReturnValue(true);
5437
cir.cancel();
5538
} else if (this.author.equals("dirty")) {
5639
cir.setReturnValue(false);

src/main/java/ace/actually/pirates/util/CanRemoveTemplate.java src/main/java/ace/actually/pirates/structures/CanRemoveTemplate.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ace.actually.pirates.util;
1+
package ace.actually.pirates.structures;
22

33
import net.minecraft.structure.StructureTemplate;
44

src/main/java/ace/actually/pirates/util/ShipStructurePlacementHelper.java src/main/java/ace/actually/pirates/structures/ShipStructurePlacementHelper.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ace.actually.pirates.util;
1+
package ace.actually.pirates.structures;
22

33
import ace.actually.pirates.Pirates;
44
import kotlin.Triple;
@@ -22,6 +22,8 @@ public class ShipStructurePlacementHelper {
2222

2323
public static final Queue<Triple<StructureTemplate, ServerWorld, BlockPos>> shipQueue = new ArrayBlockingQueue<>(12,false);
2424

25+
private static final Set<BlockPos> blacklist = new HashSet<>();
26+
2527

2628

2729
public static void placeShipTemplate(StructureTemplate structureTemplate, ServerWorld world, BlockPos centrePos) {
@@ -30,9 +32,12 @@ public static void placeShipTemplate(StructureTemplate structureTemplate, Server
3032
}
3133

3234
public static void createShip (StructureTemplate structureTemplate, ServerWorld world, BlockPos blockPos) {
35+
if (blacklist.contains(blockPos)) return;
36+
blacklist.add(blockPos);
37+
3338

3439
ServerShip newShip = VSGameUtilsKt.getShipObjectWorld(world).createNewShipAtBlock(
35-
VectorConversionsMCKt.toJOML(withOceanYLevel(world, blockPos)),
40+
VectorConversionsMCKt.toJOML(withOceanYLevel(world, blockPos).up(structureTemplate.getSize().getY()/7)),
3641
false,
3742
1.0,
3843
VSGameUtilsKt.getDimensionId(world));
@@ -42,7 +47,8 @@ public static void createShip (StructureTemplate structureTemplate, ServerWorld
4247
BlockPos centerPos = VectorConversionsMCKt.toBlockPos(newShip.getChunkClaim().getCenterBlockCoordinates(VSGameUtilsKt.getYRange(world), new Vector3i()));
4348

4449
StructurePlacementData structurePlacementData = new StructurePlacementData();
45-
boolean success = structureTemplate.place(world, withOceanYLevel(world, centerPos), centerPos, structurePlacementData, Random.create(), 2);
50+
structurePlacementData.setPosition(centerPos);
51+
boolean success = structureTemplate.place(world, centerPos, centerPos, structurePlacementData, Random.create(), 2);
4652

4753
Pirates.LOGGER.info("new ship id: {} mass: {}", newShip.getId(), newShip.getInertiaData().getMass());
4854
Pirates.LOGGER.info("Template claims to have generated successfully? {}", success);

src/main/java/ace/actually/pirates/util/PatternProcessor.java

+31
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package ace.actually.pirates.util;
22

3+
import ace.actually.pirates.blocks.entity.MotionInvokingBlockEntity;
34
import net.fabricmc.loader.api.FabricLoader;
45
import net.minecraft.nbt.NbtList;
56
import net.minecraft.nbt.NbtString;
67
import org.apache.commons.io.FileUtils;
8+
import org.joml.Vector3d;
9+
import org.valkyrienskies.core.api.ships.LoadedServerShip;
10+
import org.valkyrienskies.mod.api.SeatedControllingPlayer;
11+
import org.valkyrienskies.mod.common.util.GameTickForceApplier;
712

813
import java.io.File;
914
import java.io.IOException;
1015
import java.util.Arrays;
1116
import java.util.List;
17+
import java.util.Objects;
1218

1319
public class PatternProcessor {
1420

@@ -59,4 +65,29 @@ public static void setupBasicPatterns()
5965
}
6066
}
6167

68+
69+
70+
71+
/**
72+
* @deprecated ship patterns are planned for removal, will be replaced with proper ship ai
73+
**/
74+
@Deprecated
75+
public static void utiliseInternalPattern(SeatedControllingPlayer seatedControllingPlayer, MotionInvokingBlockEntity be) {
76+
String[] instruction = be.getInstructions().getString(0).split(" ");
77+
78+
if (seatedControllingPlayer == null) return;
79+
switch (instruction[0]) {
80+
case "forward" -> seatedControllingPlayer.setForwardImpulse(Float.parseFloat(instruction[1]));
81+
case "left" -> seatedControllingPlayer.setLeftImpulse(Float.parseFloat(instruction[1]));
82+
case "right" -> seatedControllingPlayer.setLeftImpulse(-Float.parseFloat(instruction[1]));
83+
case "backwards" -> seatedControllingPlayer.setForwardImpulse(-Float.parseFloat(instruction[1]));
84+
case "up" -> seatedControllingPlayer.setUpImpulse(Float.parseFloat(instruction[1]));
85+
case "down" -> seatedControllingPlayer.setUpImpulse(-Float.parseFloat(instruction[1]));
86+
}
87+
88+
be.setNextInstruction(Objects.requireNonNull(be.getWorld()).getTime() + Long.parseLong(instruction[2]));
89+
be.advanceInstructionList();
90+
be.markDirty();
91+
}
92+
6293
}

src/main/resources/valkyrienpirates120.mixins.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
"package": "ace.actually.pirates.mixin",
44
"compatibilityLevel": "JAVA_17",
55
"mixins": [
6-
"FallingBlockEntityMixin",
7-
"SpeedMixin",
8-
"ServerWorldMixin",
9-
"StructureTemplateManagerMixin",
10-
"StructureTemplateMixin"
6+
"compat.FallingBlockEntityMixin",
7+
"bugfixes.SpeedMixin",
8+
"shipPlacement.ServerWorldMixin",
9+
"shipPlacement.StructureTemplateManagerMixin",
10+
"shipPlacement.StructureTemplateMixin"
1111
],
1212
"injectors": {
1313
"defaultRequire": 1

0 commit comments

Comments
 (0)