diff --git a/build.gradle b/build.gradle index e49735a..eb67521 100644 --- a/build.gradle +++ b/build.gradle @@ -41,6 +41,7 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. 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:valkyrien-sails:1.20.1-0.1.6-fabric" modImplementation "maven.modrinth:vlib:1.20.1-0.0.7-alpha+fabric" diff --git a/src/main/java/ace/actually/pirates/Pirates.java b/src/main/java/ace/actually/pirates/Pirates.java index 5945103..51b9559 100644 --- a/src/main/java/ace/actually/pirates/Pirates.java +++ b/src/main/java/ace/actually/pirates/Pirates.java @@ -38,8 +38,6 @@ import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; -import net.minecraft.resource.ResourceType; -import net.minecraft.server.MinecraftServer; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; @@ -50,7 +48,6 @@ import org.slf4j.LoggerFactory; import java.util.Optional; -import java.util.function.Consumer; import java.util.function.Supplier; public class Pirates implements ModInitializer { @@ -70,31 +67,72 @@ public class Pirates implements ModInitializer { .build(); public static float baseShotPower; + public static float cannonRange; public static int pursuitDistance; public static boolean shouldEnableFlyingPirates; public static Supplier recruitCost; + public static CompatTracker loadedCompats = new CompatTracker(); @Override public void onInitialize() { Optional container = FabricLoader.getInstance().getModContainer(Pirates.MOD_ID); - if (container.isPresent()) { - if(ResourceManagerHelper.registerBuiltinResourcePack( - new Identifier("flying_ships"), - container.get(), - ResourcePackActivationType.NORMAL - )) { - LOGGER.info("Registered flying ships data pack"); + if (FabricLoader.getInstance().isModLoaded("vs_sails")) { + loadedCompats.sails = true; + + if (container.isPresent()) { + if(ResourceManagerHelper.registerBuiltinResourcePack( + new Identifier("sails_ships"), + container.get(), + ResourcePackActivationType.DEFAULT_ENABLED + )) { + LOGGER.info("Registered vs_sails ships data pack"); + } else { + LOGGER.warn("vs_sails ships data pack didn't work"); + } } else { - LOGGER.warn("didn't work"); + LOGGER.warn("Failed to register vs_sails ships data pack"); + } + } + if (FabricLoader.getInstance().isModLoaded("vs_eureka")) { + loadedCompats.eureka = true; + + if (container.isPresent()) { + ResourcePackActivationType eurekaActivation = + loadedCompats.sails ? ResourcePackActivationType.NORMAL : ResourcePackActivationType.DEFAULT_ENABLED; + + if(ResourceManagerHelper.registerBuiltinResourcePack( + new Identifier("eureka_ships"), + container.get(), + eurekaActivation + )) { + LOGGER.info("Registered vs_eureka ships data pack"); + } else { + LOGGER.warn("vs_eureka ships data pack didn't work"); + } + } else { + LOGGER.warn("Failed to register vs_eureka ships data pack"); + } + + if (container.isPresent()) { + if(ResourceManagerHelper.registerBuiltinResourcePack( + new Identifier("flying_ships"), + container.get(), + ResourcePackActivationType.NORMAL + )) { + LOGGER.info("Registered flying ships data pack"); + } else { + LOGGER.warn("didn't work"); + } + } else { + LOGGER.warn("Failed to register flying ships data pack"); } - } else { - LOGGER.warn("Failed to register flying ships data pack"); } ConfigUtils.checkConfigs(); baseShotPower = Float.parseFloat(ConfigUtils.config.getOrDefault("base-shot-power","2.2")); + cannonRange = Float.parseFloat(ConfigUtils.config.getOrDefault("cannon-range","1.7")); pursuitDistance = Integer.parseInt(ConfigUtils.config.getOrDefault("pursuit-distance","10000")); shouldEnableFlyingPirates = ConfigUtils.config.getOrDefault("should-enable-flying-pirates","false").equals("true"); @@ -239,5 +277,9 @@ public static EntityType registerEntity(String name, Spawn } + public static class CompatTracker { + public boolean eureka = false; + public boolean sails = false; + } } \ No newline at end of file diff --git a/src/main/java/ace/actually/pirates/blocks/CannonPrimingBlock.java b/src/main/java/ace/actually/pirates/blocks/CannonPrimingBlock.java index e860238..d49fafb 100644 --- a/src/main/java/ace/actually/pirates/blocks/CannonPrimingBlock.java +++ b/src/main/java/ace/actually/pirates/blocks/CannonPrimingBlock.java @@ -18,6 +18,7 @@ import net.minecraft.world.*; import org.jetbrains.annotations.Nullable; +@SuppressWarnings("deprecation") public class CannonPrimingBlock extends BlockWithEntity { public CannonPrimingBlock(Settings settings) { super(settings); @@ -78,20 +79,6 @@ public BlockEntityTicker getTicker(World world, Block return checkType(type, Pirates.CANNON_PRIMING_BLOCK_ENTITY, (world1, pos, state1, be) -> be.tick(world1, pos, state1, be)); } -// @Override -// public boolean emitsRedstonePower(BlockState state) { -// return state.get(RedstoneLampBlock.LIT); -// } -// -// @Override -// public int getWeakRedstonePower(BlockState state, BlockView world, BlockPos pos, Direction direction) { -// if(state.get(RedstoneLampBlock.LIT)) -// { -// return 15; -// } -// return 0; -// } - @Override public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { @@ -104,11 +91,11 @@ public BlockState getStateForNeighborUpdate(BlockState state, Direction directio } public BlockState rotate(BlockState state, BlockRotation rotation) { - return (BlockState)state.with(Properties.FACING, rotation.rotate((Direction)state.get(Properties.FACING))); + return state.with(Properties.FACING, rotation.rotate(state.get(Properties.FACING))); } public BlockState mirror(BlockState state, BlockMirror mirror) { - return state.rotate(mirror.getRotation((Direction)state.get(Properties.FACING))); + return state.rotate(mirror.getRotation(state.get(Properties.FACING))); } public static void disarm(World world, BlockPos pos) { diff --git a/src/main/java/ace/actually/pirates/blocks/DispenserCannonBlock.java b/src/main/java/ace/actually/pirates/blocks/DispenserCannonBlock.java index 609ac64..40df7f3 100644 --- a/src/main/java/ace/actually/pirates/blocks/DispenserCannonBlock.java +++ b/src/main/java/ace/actually/pirates/blocks/DispenserCannonBlock.java @@ -61,6 +61,7 @@ protected ProjectileEntity createProjectile(World world, Position position, Item return super.getBehaviorForItem(stack); } + @SuppressWarnings("deprecation") @Override public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { diff --git a/src/main/java/ace/actually/pirates/blocks/MotionInvokingBlock.java b/src/main/java/ace/actually/pirates/blocks/MotionInvokingBlock.java index e6fc155..b2d84f6 100644 --- a/src/main/java/ace/actually/pirates/blocks/MotionInvokingBlock.java +++ b/src/main/java/ace/actually/pirates/blocks/MotionInvokingBlock.java @@ -3,6 +3,7 @@ import ace.actually.pirates.Pirates; import ace.actually.pirates.blocks.entity.MotionInvokingBlockEntity; import ace.actually.pirates.util.EurekaCompat; +import ace.actually.pirates.util.SailsCompat; import net.minecraft.block.*; import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.entity.BlockEntityTicker; @@ -16,7 +17,8 @@ import net.minecraft.sound.SoundEvents; import net.minecraft.state.StateManager; import net.minecraft.state.property.BooleanProperty; -import net.minecraft.state.property.Properties; +import net.minecraft.state.property.EnumProperty; +import net.minecraft.state.property.IntProperty; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; @@ -30,6 +32,7 @@ public class MotionInvokingBlock extends BlockWithEntity { public static final BooleanProperty ARMED = BooleanProperty.of("armed"); + public static final IntProperty COMPAT = IntProperty.of("compat", 0, 2); public MotionInvokingBlock(Settings settings) { super(settings); @@ -39,25 +42,44 @@ public MotionInvokingBlock(Settings settings) { @Override protected void appendProperties(StateManager.Builder builder) { builder.add(ARMED); + builder.add(COMPAT); } @Nullable @Override public BlockState getPlacementState(ItemPlacementContext ctx) { - return super.getPlacementState(ctx).with(ARMED,true); + int compatVal = 0; + if (Pirates.loadedCompats.sails && SailsCompat.checkHelm(ctx.getWorld(), ctx.getBlockPos())) { + compatVal = 1; + } + if (Pirates.loadedCompats.eureka && EurekaCompat.checkHelm(ctx.getWorld(), ctx.getBlockPos())) { + compatVal = 2; + } + return super.getPlacementState(ctx).with(ARMED,true).with(COMPAT, compatVal); } @Override public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) { - if(world instanceof ServerWorld serverWorld && player.getStackInHand(hand).isOf(Items.DEBUG_STICK)) - { - MotionInvokingBlockEntity be = (MotionInvokingBlockEntity) serverWorld.getBlockEntity(pos); - be.setCompat("None"); - } +// if(world instanceof ServerWorld serverWorld && player.getStackInHand(hand).isOf(Items.DEBUG_STICK)) { +// MotionInvokingBlockEntity be = (MotionInvokingBlockEntity) serverWorld.getBlockEntity(pos); +// be.setCompat("None"); +// } return super.onUse(state, world, pos, player, hand, hit); } - @Nullable + @Override + public void neighborUpdate(BlockState state, World world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) { + state.with(COMPAT, 0); + if (Pirates.loadedCompats.sails && SailsCompat.checkHelm(world, pos)) { + state.with(COMPAT, 1); + } + if (Pirates.loadedCompats.eureka && EurekaCompat.checkHelm(world, pos)) { + state.with(COMPAT, 2); + } + world.setBlockState(pos, state, 10); + } + + @Nullable @Override public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { return new MotionInvokingBlockEntity(pos, state); @@ -78,7 +100,10 @@ public void onStacksDropped(BlockState state, ServerWorld world, BlockPos pos, I @Override public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState newState, boolean moved) { - stopMotion(world,pos); +// if (!newState.get(ARMED)) { //fixme nullptr exception? +// stopMotion(world,pos); //fixme figure out how to activate this only when newState is not a MotionInvokingBlock +// } //potentially could just move the stopMotion call into disarm() +// super.onStateReplaced(state, world, pos, newState, moved); } @@ -93,21 +118,19 @@ public static void disarm(World world, BlockPos pos) { world.setBlockState(pos, Pirates.MOTION_INVOKING_BLOCK.getDefaultState().with(ARMED,false)); world.playSound(null, pos, SoundEvents.BLOCK_BEACON_DEACTIVATE, SoundCategory.BLOCKS, 1, 0.95f); - + stopMotion(world,pos); //fixme possibly an issue } - private static void stopMotion(World world, BlockPos pos) - { - if(!world.isClient) - { + private static void stopMotion(World world, BlockPos pos) { + if(!world.isClient) { DimensionIdProvider provider = (DimensionIdProvider) world; ChunkPos chunkPos = world.getChunk(pos).getPos(); LoadedServerShip ship = (LoadedServerShip) ValkyrienSkiesMod.getVsCore().getHooks().getCurrentShipServerWorld().getLoadedShips().getByChunkPos(chunkPos.x, chunkPos.z, provider.getDimensionId()); - if(ship!=null) - { + if(ship!=null) { MotionInvokingBlockEntity be = (MotionInvokingBlockEntity) world.getBlockEntity(pos); - if(be!=null && be.getCompat().equals("Eureka")) - { + if(world.getBlockState(pos).get(COMPAT).equals(1)) { + SailsCompat.stopMotion(ship); + } else if (world.getBlockState(pos).get(COMPAT).equals(2)) { EurekaCompat.stopMotion(ship); } } diff --git a/src/main/java/ace/actually/pirates/blocks/entity/MotionInvokingBlockEntity.java b/src/main/java/ace/actually/pirates/blocks/entity/MotionInvokingBlockEntity.java index 6516988..a70d84e 100644 --- a/src/main/java/ace/actually/pirates/blocks/entity/MotionInvokingBlockEntity.java +++ b/src/main/java/ace/actually/pirates/blocks/entity/MotionInvokingBlockEntity.java @@ -4,6 +4,8 @@ import ace.actually.pirates.util.ConfigUtils; import ace.actually.pirates.util.EurekaCompat; import ace.actually.pirates.Pirates; +import ace.actually.pirates.util.SailsCompat; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; import net.minecraft.nbt.NbtCompound; @@ -23,12 +25,14 @@ import java.util.List; +import static ace.actually.pirates.blocks.MotionInvokingBlock.COMPAT; import static net.minecraft.state.property.Properties.HORIZONTAL_FACING; +@SuppressWarnings("UnstableApiUsage") public class MotionInvokingBlockEntity extends BlockEntity { NbtList path = new NbtList(); long nextInstruction = 0; - String compat = "Eureka"; + //boolean isChecked = false; //variables below this line aren't serialised because they don't need to be. int[] target = new int[3]; //x,y,z of a point in space that the ship is "trying" to get to. @@ -42,83 +46,103 @@ public MotionInvokingBlockEntity(BlockPos pos, BlockState state) { super(Pirates.MOTION_INVOKING_BLOCK_ENTITY, pos, state); } - public void setCompat(String compat) { - this.compat = compat; - markDirty(); - } +// public void setCompat(String compat) { +// this.compat = compat; +// markDirty(); +// } public static void tick(World world, BlockPos pos, BlockState state, MotionInvokingBlockEntity be) { +// if (!be.isChecked) { +// state.with(COMPAT, 0); +// if (Pirates.loadedCompats.sails && SailsCompat.checkHelm(world, pos)) { +// state.with(COMPAT, 1); +// } +// if (Pirates.loadedCompats.eureka && EurekaCompat.checkHelm(world, pos)) { +// state.with(COMPAT, 2); +// } +// world.setBlockState(pos, state, 10); +// be.isChecked = true; +// } + if(!state.get(MotionInvokingBlock.ARMED)) return; - if (be.compat.equals("Eureka") && EurekaCompat.isHelm(state)) { - return; + //ensure compat value matches loaded dependencies and a helm is present + if (state.get(COMPAT).equals(1)) { + if (!Pirates.loadedCompats.sails) { + state = state.with(COMPAT, 0); + world.setBlockState(pos, state, 10); + return; + } else if (!SailsCompat.checkHelm(world, pos)) { + MotionInvokingBlock.disarm(world, pos); + return; + } + } else if (state.get(COMPAT).equals(2)) { + if (!Pirates.loadedCompats.eureka) { + state = state.with(COMPAT, 0); + world.setBlockState(pos, state, 10); + return; + } else if (!EurekaCompat.checkHelm(world, pos)) { + MotionInvokingBlock.disarm(world, pos); + return; + } } - if(updateTicks==-1) - { + + if(updateTicks==-1) { updateTicks = Integer.parseInt(ConfigUtils.config.getOrDefault("controlled-ship-updates","100")); } if (!world.isClient && world.getGameRules().getBoolean(Pirates.PIRATES_IS_LIVE_WORLD) && world.getTime() >= be.nextInstruction) { - if (VSGameUtilsKt.isBlockInShipyard(world, pos)) - { + if (VSGameUtilsKt.isBlockInShipyard(world, pos)) { ChunkPos chunkPos = world.getChunk(pos).getPos(); LoadedServerShip ship = VSGameUtilsKt.getShipObjectManagingPos((ServerWorld) world, chunkPos); - if (ship != null) - { + if (ship != null) { ship.setStatic(false); SeatedControllingPlayer seatedControllingPlayer = ship.getAttachment(SeatedControllingPlayer.class); - if (seatedControllingPlayer == null && be.compat.equals("Eureka") && world.getBlockState(pos.up()).contains(HORIZONTAL_FACING)) - { - seatedControllingPlayer = new SeatedControllingPlayer(world.getBlockState(pos.up()).get(HORIZONTAL_FACING).getOpposite()); + if (seatedControllingPlayer == null && (world.getBlockState(pos.up()).contains(HORIZONTAL_FACING))) { + if (state.get(COMPAT).equals(1)) { + seatedControllingPlayer = new SeatedControllingPlayer(world.getBlockState(pos.up()).get(HORIZONTAL_FACING).getOpposite()); //not sure this is necessary + } else if (state.get(COMPAT).equals(2)) { + seatedControllingPlayer = new SeatedControllingPlayer(world.getBlockState(pos.up()).get(HORIZONTAL_FACING).getOpposite()); + } ship.setAttachment(SeatedControllingPlayer.class, seatedControllingPlayer); } - if(world.getTimeOfDay()%updateTicks==0) - { - if(be.path.isEmpty()) - { - List ships = VSGameUtilsKt.getAllShips(world).stream().filter(a-> - { + if(world.getTimeOfDay()%updateTicks==0) { + if(be.path.isEmpty()) { + List ships = VSGameUtilsKt.getAllShips(world).stream().filter(a-> { if(a.getId()==ship.getId()) return false; Vector3dc f1 = ship.getTransform().getPositionInWorld(); Vector3dc f2 = a.getTransform().getPositionInWorld(); return f1.distanceSquared(f2) EurekaCompat.moveTowards(be,seatedControllingPlayer,ship); + switch (state.get(COMPAT)) { + case 1 -> SailsCompat.moveTowards(be,seatedControllingPlayer,ship); + case 2 -> EurekaCompat.moveTowards(be,seatedControllingPlayer,ship); default -> be.moveShipForward(ship); } - - } } } - } @Override @@ -126,7 +150,6 @@ protected void writeNbt(NbtCompound nbt) { nbt.put("path",path); nbt.putLong("nextInstruction", nextInstruction); nbt.putIntArray("target",target); - nbt.putString("compat",compat); super.writeNbt(nbt); } @@ -134,17 +157,11 @@ protected void writeNbt(NbtCompound nbt) { public void readNbt(NbtCompound nbt) { super.readNbt(nbt); nextInstruction = nbt.getLong("nextInstruction"); - if(nbt.contains("path")) - { + if(nbt.contains("path")) { path = (NbtList) nbt.get("path"); } - if(nbt.contains("compat")) - { - compat = nbt.getString("compat"); - } - if(nbt.contains("target")) - { + if(nbt.contains("target")) { target = nbt.getIntArray("target"); } @@ -155,10 +172,6 @@ public void setTarget(int[] target) { markDirty(); } - public String getCompat() { - return compat; - } - public int[] getTarget() { return target; } @@ -187,8 +200,7 @@ public void setPath(NbtList path) { this.path = path; markDirty(); } - public void addPathNode(BlockPos pos) - { + public void addPathNode(BlockPos pos) { this.path.add(new NbtIntArray(new int[]{pos.getX(),pos.getY(),pos.getZ()})); markDirty(); } @@ -198,15 +210,13 @@ public void addPathNode(BlockPos pos) * the circles arent very good. TODO: Make the circles good * @param ship */ - private void moveShipForward(LoadedServerShip ship) - { + private void moveShipForward(LoadedServerShip ship) { double mass = ship.getInertiaData().getMass(); Vector3d qdc = ship.getTransform().getShipToWorldRotation().getEulerAnglesZXY(new Vector3d()).normalize().mul(mass*10); qdc = new Vector3d(-qdc.x,0,-qdc.z); GameTickForceApplier gtfa = ship.getAttachment(GameTickForceApplier.class); - if(gtfa!=null) - { + if(gtfa!=null) { Vector3dc v3dc = ship.getInertiaData().getCenterOfMassInShip(); Vector3d loc = new Vector3d(v3dc.x()+1,v3dc.y(),v3dc.z()+1); //if(world instanceof ServerWorld serverWorld) diff --git a/src/main/java/ace/actually/pirates/util/CannonDispenserBehavior.java b/src/main/java/ace/actually/pirates/util/CannonDispenserBehavior.java index bfbe4c8..8b29560 100644 --- a/src/main/java/ace/actually/pirates/util/CannonDispenserBehavior.java +++ b/src/main/java/ace/actually/pirates/util/CannonDispenserBehavior.java @@ -1,4 +1,5 @@ package ace.actually.pirates.util; +import ace.actually.pirates.Pirates; import ace.actually.pirates.sound.ModSounds; import net.minecraft.block.DispenserBlock; import net.minecraft.block.dispenser.ItemDispenserBehavior; @@ -26,7 +27,7 @@ public ItemStack dispenseSilently(BlockPointer pointer, ItemStack stack) { Position position = DispenserBlock.getOutputLocation(pointer); Direction direction = pointer.getBlockState().get(DispenserBlock.FACING); ProjectileEntity projectileEntity = this.createProjectile(world, position, stack); - projectileEntity.setVelocity(direction.getOffsetX(), (float)direction.getOffsetY() + 0.15f, direction.getOffsetZ(), this.getForce() + 0.6f, this.getVariation() / 2); + projectileEntity.setVelocity(direction.getOffsetX(), (float)direction.getOffsetY() + 0.15f, direction.getOffsetZ(), this.getForce(), this.getVariation() / 2); world.spawnEntity(projectileEntity); Ship ship = VSGameUtilsKt.getShipManagingPos(world, pointer.getPos()); @@ -74,6 +75,6 @@ protected float getVariation() { * {@return the force of a projectile's velocity when spawned} */ protected float getForce() { - return 1.1f; + return Pirates.cannonRange; } } diff --git a/src/main/java/ace/actually/pirates/util/ConfigUtils.java b/src/main/java/ace/actually/pirates/util/ConfigUtils.java index a181e88..1f9d4c0 100644 --- a/src/main/java/ace/actually/pirates/util/ConfigUtils.java +++ b/src/main/java/ace/actually/pirates/util/ConfigUtils.java @@ -22,7 +22,8 @@ public static Map loadConfigs() List lines = FileUtils.readLines(file,"utf-8"); lines.forEach(line-> { - if(line.charAt(0)!='#') + line = line.replaceAll("#.*", ""); + if(!line.isEmpty()) { String noSpace = line.replace(" ",""); String[] entry = noSpace.split("="); @@ -60,26 +61,38 @@ private static List makeDefaults() { List defaults = new ArrayList<>(); - - defaults.add("#General config for Valkyrien Pirates"); + defaults.add("#General config for Valkyrien Pirates\n"); + defaults.add(""); + defaults.add("#The minimum rate the pirates will fire their cannons at"); defaults.add("cannon-firing-pause=40"); + defaults.add(""); + defaults.add("#The speed the cannonballs will fire at, default=1.7"); + defaults.add("cannon-range=1.7"); + defaults.add(""); defaults.add("#The max amount of blocks for the new ship builder, set to -1 to use the Eureka/VS version"); defaults.add("max-ship-blocks=-1"); + defaults.add(""); defaults.add("#How many ticks should it take for an NPC controlled ship to change its target position, default 50"); defaults.add("controlled-ship-updates=100"); + defaults.add(""); defaults.add("#Base power for cannonball shot entity, default=2.2"); defaults.add("base-shot-power=2.2"); + defaults.add(""); defaults.add("#Based squared distance to trigger NPC ship pursuit default=10000"); defaults.add("pursuit-distance=10000"); + defaults.add(""); defaults.add("#Planned for removal: max size of ship in blocks to spawn as a pirate ship"); defaults.add("max-ship-blocks=5000"); + defaults.add(""); defaults.add("#Custom crew from config"); defaults.add("custom-crew-entity-0=minecraft:zombie"); defaults.add("custom-crew-entity-1=minecraft:skeleton"); defaults.add("custom-crew-entity-2=minecraft:creeper"); defaults.add("custom-crew-entity-3=minecraft:stray"); + defaults.add(""); defaults.add("#Whether flying pirates should spawn in the world or not (default true) BETA!"); defaults.add("should-enable-flying-pirates=false"); + defaults.add(""); defaults.add("#what item should be used to recruit friendly pirates in the format \"minecraft:golden_apple,1\" to mean 1 golden apple"); defaults.add("recruit-cost=minecraft:golden_apple,1"); diff --git a/src/main/java/ace/actually/pirates/util/EurekaCompat.java b/src/main/java/ace/actually/pirates/util/EurekaCompat.java index 6993721..ee81d7d 100644 --- a/src/main/java/ace/actually/pirates/util/EurekaCompat.java +++ b/src/main/java/ace/actually/pirates/util/EurekaCompat.java @@ -1,9 +1,14 @@ package ace.actually.pirates.util; import ace.actually.pirates.blocks.entity.MotionInvokingBlockEntity; +import com.quintonc.vs_sails.registration.SailsBlocks; import net.minecraft.block.BlockState; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import org.joml.Vector3dc; import org.valkyrienskies.core.api.ships.LoadedServerShip; +import org.valkyrienskies.eureka.EurekaBlocks; import org.valkyrienskies.eureka.block.ShipHelmBlock; import org.valkyrienskies.eureka.ship.EurekaShipControl; import org.valkyrienskies.mod.api.SeatedControllingPlayer; @@ -86,8 +91,7 @@ private static double vdis(double x, double xto) { return Math.abs(x-xto); } - public static boolean isHelm(BlockState state) - { - return state.getBlock() instanceof ShipHelmBlock; + public static boolean checkHelm(World world, BlockPos pos) { + return world.getBlockState(pos.up()).getBlock() instanceof ShipHelmBlock; } } diff --git a/src/main/java/ace/actually/pirates/util/SailsCompat.java b/src/main/java/ace/actually/pirates/util/SailsCompat.java new file mode 100644 index 0000000..6eba73e --- /dev/null +++ b/src/main/java/ace/actually/pirates/util/SailsCompat.java @@ -0,0 +1,76 @@ +package ace.actually.pirates.util; + +import ace.actually.pirates.blocks.entity.MotionInvokingBlockEntity; +import com.quintonc.vs_sails.blocks.HelmBlock; +import com.quintonc.vs_sails.registration.SailsBlocks; +import com.quintonc.vs_sails.ship.SailsShipControl; +import net.minecraft.block.BlockState; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.joml.Vector3dc; +import org.valkyrienskies.core.api.ships.LoadedServerShip; +import org.valkyrienskies.mod.api.SeatedControllingPlayer; + +public class SailsCompat { + + private static int flipflop = 1; + + public static void moveTowards(MotionInvokingBlockEntity be, SeatedControllingPlayer power, LoadedServerShip ship) + { + if(power==null) return; + if(be.getTarget().length!=3) return; + if(be.getTarget()[0]==0 && be.getTarget()[1]==0 && be.getTarget()[2]==0) + { + power.setForwardImpulse(1); + power.setLeftImpulse(1); + return; + } + + power.setForwardImpulse(1); + Vector3dc v3d = ship.getTransform().getPositionInWorld(); + + if(be.getLdx()==-1) + { + //lastDistance = v3d.distanceSquared(target[0],target[1],target[2]); + be.setLdx(vdis(be.getTarget()[0],v3d.x())); + be.setLdz(vdis(be.getTarget()[2],v3d.z())); + } + else + { + //double currentDistance = v3d.distanceSquared(target[0],target[1],target[2]); + double cdx = vdis(be.getTarget()[0],v3d.x()); + double cdz = vdis(be.getTarget()[2],v3d.z()); + //System.out.println(lastDistance+" -> "+currentDistance); + if(cdx>=be.getLdx() || cdz>= be.getLdz()) + { + power.setLeftImpulse(flipflop); + + } + else + { + power.setLeftImpulse(0); + flipflop = -flipflop; + } + be.setLdx(cdx); + be.setLdz(cdz); + } + + } + + public static void stopMotion(LoadedServerShip ship) + { + SeatedControllingPlayer seatedControllingPlayer = ship.getAttachment(SeatedControllingPlayer.class); + if (seatedControllingPlayer == null) return; + seatedControllingPlayer.setLeftImpulse(0); + ship.setAttachment(SeatedControllingPlayer.class, seatedControllingPlayer); + } + + private static double vdis(double x, double xto) { + return Math.abs(x-xto); + } + + public static boolean checkHelm(World world, BlockPos pos) { + return world.getBlockState(pos.up()).getBlock() instanceof HelmBlock; + } +} diff --git a/src/main/resources/data/pirates/loot_tables/blocks/motion_invoking_block.json b/src/main/resources/data/pirates/loot_tables/blocks/motion_invoking_block.json new file mode 100644 index 0000000..4bba7f9 --- /dev/null +++ b/src/main/resources/data/pirates/loot_tables/blocks/motion_invoking_block.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:spruce_planks" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/pirates/worldgen/structure_set/wrecks.json b/src/main/resources/data/pirates/worldgen/structure_set/wrecks.json index c99f481..458212c 100644 --- a/src/main/resources/data/pirates/worldgen/structure_set/wrecks.json +++ b/src/main/resources/data/pirates/worldgen/structure_set/wrecks.json @@ -23,10 +23,7 @@ ], "placement": { "type": "random_spread", - "exclusion_zone": { - "chunk_count": 8, - "other_set": "pirates:ships" - }, + "spacing": 40, "separation": 20, "salt": 3634534 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index dcfbcff..9d5bba6 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -34,5 +34,9 @@ "fabric-api": "*", "valkyrienskies": ">=2.1.3-beta.1+a52f38bd68", "vlib": "*" + }, + "suggests": { + "vs_sails": ">=0.1.7", + "eureka": "*" } } \ No newline at end of file diff --git a/src/main/resources/data/pirates/structures/ship/anetum-contatum.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/anetum-contatum.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/anetum-contatum.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/anetum-contatum.nbt diff --git a/src/main/resources/data/pirates/structures/ship/antelope.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/antelope.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/antelope.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/antelope.nbt diff --git a/src/main/resources/data/pirates/structures/ship/barnacle-hopper.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/barnacle-hopper.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/barnacle-hopper.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/barnacle-hopper.nbt diff --git a/src/main/resources/data/pirates/structures/ship/deep-sea-moray.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/deep-sea-moray.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/deep-sea-moray.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/deep-sea-moray.nbt diff --git a/src/main/resources/data/pirates/structures/ship/eye-of-horus.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/eye-of-horus.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/eye-of-horus.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/eye-of-horus.nbt diff --git a/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/hispaniola.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/hispaniola.nbt new file mode 100644 index 0000000..8dcb9f7 Binary files /dev/null and b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/hispaniola.nbt differ diff --git a/src/main/resources/data/pirates/structures/ship/midnight-barracuda.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/midnight-barracuda.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/midnight-barracuda.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/midnight-barracuda.nbt diff --git a/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/queen-annes-revenge.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/queen-annes-revenge.nbt new file mode 100644 index 0000000..d17d261 Binary files /dev/null and b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/queen-annes-revenge.nbt differ diff --git a/src/main/resources/data/pirates/structures/ship/revenge.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/revenge.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/revenge.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/revenge.nbt diff --git a/src/main/resources/data/pirates/structures/ship/the-heart-attack.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/the-heart-attack.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/the-heart-attack.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/the-heart-attack.nbt diff --git a/src/main/resources/data/pirates/structures/ship/the-phantom-leviathan.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/the-phantom-leviathan.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/the-phantom-leviathan.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/the-phantom-leviathan.nbt diff --git a/src/main/resources/data/pirates/structures/ship/whydah_ghost.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/whydah-ghost.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/whydah_ghost.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/whydah-ghost.nbt diff --git a/src/main/resources/data/pirates/structures/ship/whydah.nbt b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/whydah.nbt similarity index 100% rename from src/main/resources/data/pirates/structures/ship/whydah.nbt rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/structures/ship/whydah.nbt diff --git a/src/main/resources/data/pirates/worldgen/structure/ship.json b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/worldgen/structure/ship.json similarity index 90% rename from src/main/resources/data/pirates/worldgen/structure/ship.json rename to src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/worldgen/structure/ship.json index 26aa0dd..64a33e4 100644 --- a/src/main/resources/data/pirates/worldgen/structure/ship.json +++ b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/worldgen/structure/ship.json @@ -4,7 +4,7 @@ "adapt_noise": false, "spawn_overrides": {}, "terrain_adaptation": "none", - "start_pool": "pirates:ship", + "start_pool": "pirates_eureka:ship", "size": 7, "step": "surface_structures", "start_height": { diff --git a/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/worldgen/structure_set/ships.json b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/worldgen/structure_set/ships.json new file mode 100644 index 0000000..25b3c88 --- /dev/null +++ b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/worldgen/structure_set/ships.json @@ -0,0 +1,14 @@ +{ + "structures": [ + { + "structure": "pirates_eureka:ship", + "weight": 1 + } + ], + "placement": { + "type": "random_spread", + "spacing": 24, + "separation": 8, + "salt": 367453547 + } +} \ No newline at end of file diff --git a/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/worldgen/template_pool/ship.json b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/worldgen/template_pool/ship.json new file mode 100644 index 0000000..5e7a04c --- /dev/null +++ b/src/main/resources/resourcepacks/eureka_ships/data/pirates_eureka/worldgen/template_pool/ship.json @@ -0,0 +1,123 @@ +{ + "name": "pirates_eureka:ships", + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 3, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/deep-sea-moray", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/barnacle-hopper", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/midnight-barracuda", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/eye-of-horus", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/antelope", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/anetum-contatum", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/the-heart-attack", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/whydah", + "processors": "minecraft:empty" + } + }, + { + "weight": 1, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/whydah-ghost", + "processors": "minecraft:empty" + } + }, + { + "weight": 3, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/revenge", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/the-phantom-leviathan", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/queen-annes-revenge", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_eureka:ship/hispaniola", + "processors": "minecraft:empty" + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/resourcepacks/eureka_ships/data/vlib/structure-settings/pirates_eureka.json b/src/main/resources/resourcepacks/eureka_ships/data/vlib/structure-settings/pirates_eureka.json new file mode 100644 index 0000000..ee7f73e --- /dev/null +++ b/src/main/resources/resourcepacks/eureka_ships/data/vlib/structure-settings/pirates_eureka.json @@ -0,0 +1,5 @@ +{ + "folder": "ship/", + "rename": "false", + "static": "true" +} \ No newline at end of file diff --git a/src/main/resources/resourcepacks/eureka_ships/pack.mcmeta b/src/main/resources/resourcepacks/eureka_ships/pack.mcmeta new file mode 100644 index 0000000..5d41568 --- /dev/null +++ b/src/main/resources/resourcepacks/eureka_ships/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 15, + "description": "Eureka ship structures for VS Pirates." + } +} \ No newline at end of file diff --git a/src/main/resources/resourcepacks/eureka_ships/pack.png b/src/main/resources/resourcepacks/eureka_ships/pack.png new file mode 100644 index 0000000..bbf7184 Binary files /dev/null and b/src/main/resources/resourcepacks/eureka_ships/pack.png differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/anetum-contatum.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/anetum-contatum.nbt new file mode 100644 index 0000000..e2173ef Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/anetum-contatum.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/antelope.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/antelope.nbt new file mode 100644 index 0000000..c4744bf Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/antelope.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/barnacle-hopper.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/barnacle-hopper.nbt new file mode 100644 index 0000000..8c3f193 Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/barnacle-hopper.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/deep-sea-moray.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/deep-sea-moray.nbt new file mode 100644 index 0000000..73a2c04 Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/deep-sea-moray.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/eye-of-horus.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/eye-of-horus.nbt new file mode 100644 index 0000000..54c34ce Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/eye-of-horus.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/hispaniola.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/hispaniola.nbt new file mode 100644 index 0000000..a5ca9ea Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/hispaniola.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/midnight-barracuda.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/midnight-barracuda.nbt new file mode 100644 index 0000000..363ddeb Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/midnight-barracuda.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/queen-annes-revenge.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/queen-annes-revenge.nbt new file mode 100644 index 0000000..d3865b2 Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/queen-annes-revenge.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/revenge.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/revenge.nbt new file mode 100644 index 0000000..fb0b40b Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/revenge.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/the-heart-attack.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/the-heart-attack.nbt new file mode 100644 index 0000000..87c641d Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/the-heart-attack.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/the-phantom-leviathan.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/the-phantom-leviathan.nbt new file mode 100644 index 0000000..f0cc053 Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/the-phantom-leviathan.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/whydah-ghost.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/whydah-ghost.nbt new file mode 100644 index 0000000..2b29918 Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/whydah-ghost.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/whydah.nbt b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/whydah.nbt new file mode 100644 index 0000000..8430dfc Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/structures/ship/whydah.nbt differ diff --git a/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/worldgen/structure/ship.json b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/worldgen/structure/ship.json new file mode 100644 index 0000000..f82ddd9 --- /dev/null +++ b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/worldgen/structure/ship.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:jigsaw", + "biomes": "#pirates:deep_n_warm", + "adapt_noise": false, + "spawn_overrides": {}, + "terrain_adaptation": "none", + "start_pool": "pirates_sails:ship", + "size": 7, + "step": "surface_structures", + "start_height": { + "absolute": -1 + }, + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "max_distance_from_center": 50, + "use_expansion_hack": false +} \ No newline at end of file diff --git a/src/main/resources/data/pirates/worldgen/structure_set/ships.json b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/worldgen/structure_set/ships.json similarity index 81% rename from src/main/resources/data/pirates/worldgen/structure_set/ships.json rename to src/main/resources/resourcepacks/sails_ships/data/pirates_sails/worldgen/structure_set/ships.json index 6e56ef5..3b73e11 100644 --- a/src/main/resources/data/pirates/worldgen/structure_set/ships.json +++ b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/worldgen/structure_set/ships.json @@ -1,7 +1,7 @@ { "structures": [ { - "structure": "pirates:ship", + "structure": "pirates_sails:ship", "weight": 1 } ], diff --git a/src/main/resources/data/pirates/worldgen/template_pool/ship.json b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/worldgen/template_pool/ship.json similarity index 64% rename from src/main/resources/data/pirates/worldgen/template_pool/ship.json rename to src/main/resources/resourcepacks/sails_ships/data/pirates_sails/worldgen/template_pool/ship.json index 55a26e3..a655220 100644 --- a/src/main/resources/data/pirates/worldgen/template_pool/ship.json +++ b/src/main/resources/resourcepacks/sails_ships/data/pirates_sails/worldgen/template_pool/ship.json @@ -1,5 +1,5 @@ { - "name": "pirates:ships", + "name": "pirates_sails:ships", "fallback": "minecraft:empty", "elements": [ { @@ -7,7 +7,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/deep-sea-moray", + "location": "pirates_sails:ship/deep-sea-moray", "processors": "minecraft:empty" } }, @@ -16,7 +16,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/barnacle-hopper", + "location": "pirates_sails:ship/barnacle-hopper", "processors": "minecraft:empty" } }, @@ -25,7 +25,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/midnight-barracuda", + "location": "pirates_sails:ship/midnight-barracuda", "processors": "minecraft:empty" } }, @@ -34,7 +34,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/eye-of-horus", + "location": "pirates_sails:ship/eye-of-horus", "processors": "minecraft:empty" } }, @@ -43,7 +43,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/antelope", + "location": "pirates_sails:ship/antelope", "processors": "minecraft:empty" } }, @@ -52,7 +52,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/anetum-contatum", + "location": "pirates_sails:ship/anetum-contatum", "processors": "minecraft:empty" } }, @@ -61,7 +61,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/the-heart-attack", + "location": "pirates_sails:ship/the-heart-attack", "processors": "minecraft:empty" } }, @@ -70,7 +70,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/whydah", + "location": "pirates_sails:ship/whydah", "processors": "minecraft:empty" } }, @@ -79,7 +79,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/whydah_ghost", + "location": "pirates_sails:ship/whydah_ghost", "processors": "minecraft:empty" } }, @@ -88,7 +88,7 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/revenge", + "location": "pirates_sails:ship/revenge", "processors": "minecraft:empty" } }, @@ -97,7 +97,25 @@ "element": { "element_type": "minecraft:single_pool_element", "projection": "rigid", - "location": "pirates:ship/the-phantom-leviathan", + "location": "pirates_sails:ship/the-phantom-leviathan", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_sails:ship/queen-annes-revenge", + "processors": "minecraft:empty" + } + }, + { + "weight": 2, + "element": { + "element_type": "minecraft:single_pool_element", + "projection": "rigid", + "location": "pirates_sails:ship/hispaniola", "processors": "minecraft:empty" } } diff --git a/src/main/resources/resourcepacks/sails_ships/data/vlib/structure-settings/pirates_sails.json b/src/main/resources/resourcepacks/sails_ships/data/vlib/structure-settings/pirates_sails.json new file mode 100644 index 0000000..ee7f73e --- /dev/null +++ b/src/main/resources/resourcepacks/sails_ships/data/vlib/structure-settings/pirates_sails.json @@ -0,0 +1,5 @@ +{ + "folder": "ship/", + "rename": "false", + "static": "true" +} \ No newline at end of file diff --git a/src/main/resources/resourcepacks/sails_ships/pack.mcmeta b/src/main/resources/resourcepacks/sails_ships/pack.mcmeta new file mode 100644 index 0000000..341c37f --- /dev/null +++ b/src/main/resources/resourcepacks/sails_ships/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 15, + "description": "VS Sails ship structures for VS Pirates." + } +} \ No newline at end of file diff --git a/src/main/resources/resourcepacks/sails_ships/pack.png b/src/main/resources/resourcepacks/sails_ships/pack.png new file mode 100644 index 0000000..1daf053 Binary files /dev/null and b/src/main/resources/resourcepacks/sails_ships/pack.png differ