From ad8012ec62c459ad1a5d0b55bef617b1f75238c4 Mon Sep 17 00:00:00 2001 From: James Green Date: Fri, 9 May 2025 19:36:41 -0700 Subject: [PATCH 1/2] rip out ship placement and flying ships, depend on vlib for ship placement --- build.gradle | 3 + .../mixin/shipPlacement/ServerWorldMixin.java | 32 ------ .../StructureTemplateManagerMixin.java | 58 ----------- .../shipPlacement/StructureTemplateMixin.java | 58 ----------- .../pirates/structures/CanRemoveTemplate.java | 7 -- .../ShipStructurePlacementHelper.java | 91 ------------------ .../structures/flyingship/wreckerideal.nbt | Bin 234119 -> 0 bytes .../worldgen/structure/flyingship.json | 15 --- .../worldgen/structure_set/flyingships.json | 14 --- .../worldgen/template_pool/flyingship.json | 15 --- .../data/vlib/structure-settings/pirates.json | 5 + .../resources/valkyrienpirates120.mixins.json | 5 +- 12 files changed, 9 insertions(+), 294 deletions(-) delete mode 100644 src/main/java/ace/actually/pirates/mixin/shipPlacement/ServerWorldMixin.java delete mode 100644 src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateManagerMixin.java delete mode 100644 src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateMixin.java delete mode 100644 src/main/java/ace/actually/pirates/structures/CanRemoveTemplate.java delete mode 100644 src/main/java/ace/actually/pirates/structures/ShipStructurePlacementHelper.java delete mode 100644 src/main/resources/data/pirates/structures/flyingship/wreckerideal.nbt delete mode 100644 src/main/resources/data/pirates/worldgen/structure/flyingship.json delete mode 100644 src/main/resources/data/pirates/worldgen/structure_set/flyingships.json delete mode 100644 src/main/resources/data/pirates/worldgen/template_pool/flyingship.json create mode 100644 src/main/resources/data/vlib/structure-settings/pirates.json diff --git a/build.gradle b/build.gradle index 5e0c2bb..e2d3db3 100644 --- a/build.gradle +++ b/build.gradle @@ -42,6 +42,9 @@ dependencies { modImplementation "maven.modrinth:valkyrien-skies:1.20.1-fabric-2.3.0-beta.5" modImplementation "maven.modrinth:eureka:1.20.1-fabric-1.5.1-beta.3" + modImplementation "maven.modrinth:vlib:1.20.1-0.0.4-alpha+fabric" + + modImplementation "maven.modrinth:architectury-api:9.2.14+fabric" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" modImplementation "net.fabricmc:fabric-language-kotlin:${project.fabric_kotlin_version}" diff --git a/src/main/java/ace/actually/pirates/mixin/shipPlacement/ServerWorldMixin.java b/src/main/java/ace/actually/pirates/mixin/shipPlacement/ServerWorldMixin.java deleted file mode 100644 index 88a3842..0000000 --- a/src/main/java/ace/actually/pirates/mixin/shipPlacement/ServerWorldMixin.java +++ /dev/null @@ -1,32 +0,0 @@ -package ace.actually.pirates.mixin.shipPlacement; - -import ace.actually.pirates.structures.ShipStructurePlacementHelper; -import kotlin.Triple; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.structure.StructureTemplate; -import net.minecraft.util.math.BlockPos; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.function.BooleanSupplier; - -import static ace.actually.pirates.structures.ShipStructurePlacementHelper.shipQueue; - -@Mixin(ServerWorld.class) -public abstract class ServerWorldMixin { - - @Shadow public abstract ServerWorld toServerWorld(); - - @Inject(method = "tick", at = @At("HEAD")) - protected void tickMixin(BooleanSupplier shouldKeepTicking, CallbackInfo ci) { - if (!shipQueue.isEmpty()) { - Triple structureData = shipQueue.poll(); - assert structureData != null; - ShipStructurePlacementHelper.createShip(structureData.getFirst(), structureData.getSecond(), structureData.getThird()); - //System.out.println(toServerWorld().getSeaLevel()); - } - } -} diff --git a/src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateManagerMixin.java b/src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateManagerMixin.java deleted file mode 100644 index ef0c8af..0000000 --- a/src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateManagerMixin.java +++ /dev/null @@ -1,58 +0,0 @@ -package ace.actually.pirates.mixin.shipPlacement; - -import ace.actually.pirates.structures.CanRemoveTemplate; -import net.minecraft.structure.StructureTemplate; -import net.minecraft.structure.StructureTemplateManager; -import net.minecraft.util.Identifier; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Map; -import java.util.Optional; - -@Mixin(value = StructureTemplateManager.class) -public abstract class StructureTemplateManagerMixin implements CanRemoveTemplate { - - @Final - @Shadow - private Map> templates; - - @Shadow - protected abstract Optional loadTemplate(Identifier identifier); - - @Shadow public abstract void unloadTemplate(Identifier id); - - @Inject(method = "getTemplate", at = @At("HEAD"), cancellable = true) - public void getTemplateMixin(Identifier id, CallbackInfoReturnable> cir) { - - Optional template = this.templates.computeIfAbsent(id, this::loadTemplate); - - if (template.isPresent() && !template.get().getAuthor().contains("dirty") && id.getNamespace().equals("pirates")) { - //System.out.println(id); - if(id.getPath().startsWith("ship/")) - { - template.get().setAuthor("pirate-ship"); - } - else if(id.getPath().startsWith("flyingship/")) - { - template.get().setAuthor("flying-pirate-ship"); - } - - } - - cir.setReturnValue(template); - } - - @Override - public boolean pirates$unload(StructureTemplate template) { - Optional key = templates.entrySet().stream() - .filter(entry -> entry.getValue().isPresent() && entry.getValue().get().equals(template)) - .map(Map.Entry::getKey) - .findFirst(); - - key.ifPresent(this::unloadTemplate); - return key.isPresent(); - } -} diff --git a/src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateMixin.java b/src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateMixin.java deleted file mode 100644 index 679bcea..0000000 --- a/src/main/java/ace/actually/pirates/mixin/shipPlacement/StructureTemplateMixin.java +++ /dev/null @@ -1,58 +0,0 @@ -package ace.actually.pirates.mixin.shipPlacement; - -import ace.actually.pirates.structures.ShipStructurePlacementHelper; -import net.minecraft.structure.StructurePlacementData; -import net.minecraft.structure.StructureTemplate; -import net.minecraft.util.math.*; -import net.minecraft.util.math.random.Random; -import net.minecraft.world.ServerWorldAccess; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.valkyrienskies.mod.common.VSGameUtilsKt; - - -@Mixin(value = StructureTemplate.class) -public abstract class StructureTemplateMixin { - - @Shadow private String author; - - @Shadow public abstract void setAuthor(String author); - - @Inject(method = "place", at = @At("HEAD"), cancellable = true) - public void placeMixin(ServerWorldAccess world, BlockPos pos, BlockPos pivot, StructurePlacementData placementData, Random random, int flags, CallbackInfoReturnable cir) { - try { - if (VSGameUtilsKt.isBlockInShipyard(world.toServerWorld(), pos)) return; - - if (this.author.contains("pirate-ship")) { - ShipStructurePlacementHelper.placeShipTemplate( - (StructureTemplate) (Object) this, - world.toServerWorld(), - pos); - - if(this.author.contains("flying")) - { - this.setAuthor("dirtyf"); - } - else - { - this.setAuthor("dirty"); - } - - cir.setReturnValue(true); - cir.cancel(); - } else if (this.author.contains("dirty")) { - cir.setReturnValue(false); - cir.cancel(); - } - } - catch (IllegalStateException ignored) - { - - } - - - } -} diff --git a/src/main/java/ace/actually/pirates/structures/CanRemoveTemplate.java b/src/main/java/ace/actually/pirates/structures/CanRemoveTemplate.java deleted file mode 100644 index bd863cc..0000000 --- a/src/main/java/ace/actually/pirates/structures/CanRemoveTemplate.java +++ /dev/null @@ -1,7 +0,0 @@ -package ace.actually.pirates.structures; - -import net.minecraft.structure.StructureTemplate; - -public interface CanRemoveTemplate { - boolean pirates$unload(StructureTemplate template); -} diff --git a/src/main/java/ace/actually/pirates/structures/ShipStructurePlacementHelper.java b/src/main/java/ace/actually/pirates/structures/ShipStructurePlacementHelper.java deleted file mode 100644 index ba700b1..0000000 --- a/src/main/java/ace/actually/pirates/structures/ShipStructurePlacementHelper.java +++ /dev/null @@ -1,91 +0,0 @@ -package ace.actually.pirates.structures; - -import ace.actually.pirates.Pirates; -import kotlin.Triple; - -import net.minecraft.server.world.ServerWorld; -import net.minecraft.structure.StructurePlacementData; -import net.minecraft.structure.StructureTemplate; -import net.minecraft.structure.StructureTemplateManager; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.random.Random; -import org.joml.Vector3i; -import org.valkyrienskies.core.api.ships.ServerShip; -import org.valkyrienskies.mod.common.VSGameUtilsKt; -import org.valkyrienskies.mod.common.util.VectorConversionsMCKt; - -import java.util.*; -import java.util.concurrent.ArrayBlockingQueue; - - -public class ShipStructurePlacementHelper { - - public static final Queue> shipQueue = new ArrayBlockingQueue<>(12,false); - - private static final Set blacklist = new HashSet<>(); - - - - public static void placeShipTemplate(StructureTemplate structureTemplate, ServerWorld world, BlockPos centrePos) { - shipQueue.add(new Triple<>(structureTemplate, world, centrePos)); - Pirates.LOGGER.info("enqueuing template at {}", centrePos.toString()); - } - - public static void createShip (StructureTemplate structureTemplate, ServerWorld world, BlockPos blockPos) { - if (blacklist.contains(blockPos)) - { - System.out.println("Tried to spawn a ship at the same position as another!"); - return; - } - blacklist.add(blockPos); - - ServerShip newShip; - //System.out.println(structureTemplate.getAuthor()); - if(structureTemplate.getAuthor().contains("dirtyf")) - { - newShip = VSGameUtilsKt.getShipObjectWorld(world).createNewShipAtBlock( - VectorConversionsMCKt.toJOML(blockPos.up(structureTemplate.getSize().getY()/7)), - false, - 1.0, - VSGameUtilsKt.getDimensionId(world)); - } - else - { - newShip = VSGameUtilsKt.getShipObjectWorld(world).createNewShipAtBlock( - VectorConversionsMCKt.toJOML(withOceanYLevel(world, blockPos).up(structureTemplate.getSize().getY()/7)), - false, - 1.0, - VSGameUtilsKt.getDimensionId(world)); - } - - newShip.setStatic(true); - - BlockPos centerPos = VectorConversionsMCKt.toBlockPos(newShip.getChunkClaim().getCenterBlockCoordinates(VSGameUtilsKt.getYRange(world), new Vector3i())); - - StructurePlacementData structurePlacementData = new StructurePlacementData(); - structurePlacementData.setPosition(centerPos); - boolean success = structureTemplate.place(world, centerPos, centerPos, structurePlacementData, Random.create(), 2); - - Pirates.LOGGER.info("new ship id: {} mass: {}", newShip.getId(), newShip.getInertiaData().getMass()); - Pirates.LOGGER.info("Template claims to have generated successfully? {}", success); - if (newShip.getInertiaData().getMass() < 0.1 || (!Pirates.shouldEnableFlyingPirates && structureTemplate.getAuthor().contains("dirtyf"))) { - System.out.println("deleting ship"); - VSGameUtilsKt.getShipObjectWorld(world).deleteShip(newShip); - } else { - Pirates.LOGGER.info("ship created successfully."); - StructureTemplateManager manager = Objects.requireNonNull(world.getServer()).getStructureTemplateManager(); - if(((CanRemoveTemplate) manager).pirates$unload(structureTemplate)) { - Pirates.LOGGER.info("templates cleaned."); - } else { - Pirates.LOGGER.info("template cleanup failed."); - } - - - } - - } - - private static BlockPos withOceanYLevel(ServerWorld world, BlockPos source) { - return new BlockPos(source.getX(), world.getSeaLevel(), source.getZ()); - } -} diff --git a/src/main/resources/data/pirates/structures/flyingship/wreckerideal.nbt b/src/main/resources/data/pirates/structures/flyingship/wreckerideal.nbt deleted file mode 100644 index 9905938af989aa65d17b0adc068d5501c18871ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234119 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

    2K`$h%>RLlfx==OS*hIR~Nt5vSEl9zs$zT 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 aW9U5->3>MomUe4jxL Date: Fri, 9 May 2025 19:44:09 -0700 Subject: [PATCH 2/2] add vlib dependency to mod json --- src/main/resources/META-INF/mods.toml | 7 +++++++ src/main/resources/fabric.mod.json | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 850722d..eb3458a 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -43,6 +43,13 @@ versionRange = "*" ordering = "NONE" side = "BOTH" +[[dependencies.pirates]] +modId = "vlib" +mandatory = true +versionRange = "*" +ordering = "NONE" +side = "BOTH" + [[dependencies.pirates]] modId = "valkyrienskies" mandatory = true diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index c2bd20c..dcfbcff 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -32,6 +32,7 @@ "minecraft": "1.20.1", "java": ">=17", "fabric-api": "*", - "valkyrienskies": ">=2.1.3-beta.1+a52f38bd68" + "valkyrienskies": ">=2.1.3-beta.1+a52f38bd68", + "vlib": "*" } } \ No newline at end of file