diff --git a/Fabric-1.20.1/gradle.properties b/Fabric-1.20.1/gradle.properties index 57c3a31..4411101 100644 --- a/Fabric-1.20.1/gradle.properties +++ b/Fabric-1.20.1/gradle.properties @@ -12,7 +12,7 @@ loader_version=0.18.4 loom_version=1.15-SNAPSHOT # Mod Properties -mod_version=1.4.0-mc1.20.1 +mod_version=1.4.1-mc1.20.1 maven_group=com.box3lab archives_base_name=box3 diff --git a/Fabric-1.20.1/src/main/java/com/box3lab/block/BouncePadBlock.java b/Fabric-1.20.1/src/main/java/com/box3lab/block/BouncePadBlock.java index 40ab246..4017ecb 100644 --- a/Fabric-1.20.1/src/main/java/com/box3lab/block/BouncePadBlock.java +++ b/Fabric-1.20.1/src/main/java/com/box3lab/block/BouncePadBlock.java @@ -31,4 +31,14 @@ public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { entity.setDeltaMovement(vel); } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + + if (entity.isSuppressingBounce()) { + super.fallOn(level, state, pos, entity, fallDistance); + } else { + entity.resetFallDistance(); + } + } } diff --git a/Fabric-1.20.1/src/main/java/com/box3lab/command/ModCommands.java b/Fabric-1.20.1/src/main/java/com/box3lab/command/ModCommands.java index 2483f36..bb43fb7 100644 --- a/Fabric-1.20.1/src/main/java/com/box3lab/command/ModCommands.java +++ b/Fabric-1.20.1/src/main/java/com/box3lab/command/ModCommands.java @@ -8,6 +8,7 @@ import com.box3lab.util.Box3ImportFiles; import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.suggestion.SuggestionProvider; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; @@ -46,37 +47,71 @@ public static void register() { .executes(context -> listBox3ImportFiles(context.getSource())) .then(argument("fileName", StringArgumentType.word()) .suggests(BOX3_FILE_SUGGESTIONS) + // /box3import .executes(context -> executeBox3Import( context.getSource(), StringArgumentType.getString( context, "fileName"), + 0, false, false)) - .then(argument("ignoreBarrier", - BoolArgumentType.bool()) + // /box3import + .then(argument("offsetY", + IntegerArgumentType.integer()) .executes(context -> executeBox3Import( context.getSource(), StringArgumentType - .getString(context, + .getString( + context, "fileName"), - BoolArgumentType.getBool( - context, - "ignoreBarrier"), + IntegerArgumentType + .getInteger( + context, + "offsetY"), + false, false)) - .then(argument("ignoreWater", + // /box3import + // + .then(argument("ignoreBarrier", BoolArgumentType.bool()) .executes(context -> executeBox3Import( context.getSource(), StringArgumentType - .getString(context, + .getString( + context, "fileName"), + IntegerArgumentType + .getInteger( + context, + "offsetY"), BoolArgumentType.getBool( context, "ignoreBarrier"), - BoolArgumentType.getBool( - context, - "ignoreWater"))))))); + false)) + // /box3import + // + // + // + // + .then(argument("ignoreWater", + BoolArgumentType.bool()) + .executes(context -> executeBox3Import( + context.getSource(), + StringArgumentType + .getString( + context, + "fileName"), + IntegerArgumentType + .getInteger( + context, + "offsetY"), + BoolArgumentType.getBool( + context, + "ignoreBarrier"), + BoolArgumentType.getBool( + context, + "ignoreWater")))))))); dispatcher.register( literal("box3barrier") @@ -134,13 +169,16 @@ private static String resolveMapName(String fileName) { } private static int executeBox3Import(CommandSourceStack source, String fileName, - boolean ignoreBarrier, boolean useVanillaWater) { + int offsetY, boolean ignoreBarrier, boolean useVanillaWater) { ServerLevel level = source.getServer().overworld(); try { ServerPlayer player = source.getPlayer(); String mapName = resolveMapName(fileName); + var basePos = player != null ? player.position() : new BlockPos(0, 0, 0).getCenter(); + var offsetPos = basePos.add(0, offsetY, 0); + VoxelImport.apply(null, level, mapName, - player != null ? player.position() : new BlockPos(0, 0, 0).getCenter(), + offsetPos, player, ignoreBarrier, useVanillaWater); diff --git a/Fabric-1.20.1/src/main/resources/assets/box3/lang/en_us.json b/Fabric-1.20.1/src/main/resources/assets/box3/lang/en_us.json index 20cdb13..9b34656 100644 --- a/Fabric-1.20.1/src/main/resources/assets/box3/lang/en_us.json +++ b/Fabric-1.20.1/src/main/resources/assets/box3/lang/en_us.json @@ -411,5 +411,6 @@ "command.box3.box3barrier.status": "Barrier visible: %s", "command.box3.box3barrier.set": "Barrier visibility set to: %s", "command.box3.box3barrier.toggled": "Barrier visibility toggled to: %s (re-enter the world to fully apply)", - "item.box3.model_destroyer": "Model destruction bucket" + "item.box3.model_destroyer": "Model destruction bucket", + "flat_world_preset.box3.box3_plains_world": "Box3 Plains" } diff --git a/Fabric-1.20.1/src/main/resources/assets/box3/lang/zh_cn.json b/Fabric-1.20.1/src/main/resources/assets/box3/lang/zh_cn.json index 2bd3f32..29bebcc 100644 --- a/Fabric-1.20.1/src/main/resources/assets/box3/lang/zh_cn.json +++ b/Fabric-1.20.1/src/main/resources/assets/box3/lang/zh_cn.json @@ -399,5 +399,6 @@ "command.box3.box3barrier.status": "屏障可见状态:%s", "command.box3.box3barrier.set": "屏障可见状态已设置为:%s", "command.box3.box3barrier.toggled": "屏障可见状态已切换为:%s(重新进入世界以完全生效)", - "item.box3.model_destroyer": "模型销毁桶" + "item.box3.model_destroyer": "模型销毁桶", + "flat_world_preset.box3.box3_plains_world": "神岛平原" } diff --git a/Fabric-1.20.1/src/main/resources/data/box3/worldgen/flat_level_generator_preset/box3_plains_world.json b/Fabric-1.20.1/src/main/resources/data/box3/worldgen/flat_level_generator_preset/box3_plains_world.json new file mode 100644 index 0000000..f0a387b --- /dev/null +++ b/Fabric-1.20.1/src/main/resources/data/box3/worldgen/flat_level_generator_preset/box3_plains_world.json @@ -0,0 +1,13 @@ +{ + "display": "box3:grass", + "settings": { + "biome": "minecraft:plains", + "lakes": false, + "features": false, + "layers": [ + { "block": "box3:stone", "height": 1 }, + { "block": "box3:dirt", "height": 6 }, + { "block": "box3:grass", "height": 1 } + ] + } +} diff --git a/Fabric-1.20.1/src/main/resources/data/minecraft/tags/worldgen/flat_level_generator_preset/visible.json b/Fabric-1.20.1/src/main/resources/data/minecraft/tags/worldgen/flat_level_generator_preset/visible.json new file mode 100644 index 0000000..7809017 --- /dev/null +++ b/Fabric-1.20.1/src/main/resources/data/minecraft/tags/worldgen/flat_level_generator_preset/visible.json @@ -0,0 +1,4 @@ +{ + "replace": false, + "values": ["box3:box3_plains_world", "box3:box3_custom_noise"] +} diff --git a/Fabric-1.21.1/gradle.properties b/Fabric-1.21.1/gradle.properties index 6a6e012..4d1d24b 100644 --- a/Fabric-1.21.1/gradle.properties +++ b/Fabric-1.21.1/gradle.properties @@ -12,7 +12,7 @@ loader_version=0.18.4 loom_version=1.15-SNAPSHOT # Mod Properties -mod_version=1.4.0-mc1.21.1 +mod_version=1.4.1-mc1.21.1 maven_group=com.box3lab archives_base_name=box3 diff --git a/Fabric-1.21.1/src/main/java/com/box3lab/block/BouncePadBlock.java b/Fabric-1.21.1/src/main/java/com/box3lab/block/BouncePadBlock.java index 40ab246..4017ecb 100644 --- a/Fabric-1.21.1/src/main/java/com/box3lab/block/BouncePadBlock.java +++ b/Fabric-1.21.1/src/main/java/com/box3lab/block/BouncePadBlock.java @@ -31,4 +31,14 @@ public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { entity.setDeltaMovement(vel); } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + + if (entity.isSuppressingBounce()) { + super.fallOn(level, state, pos, entity, fallDistance); + } else { + entity.resetFallDistance(); + } + } } diff --git a/Fabric-1.21.1/src/main/java/com/box3lab/command/ModCommands.java b/Fabric-1.21.1/src/main/java/com/box3lab/command/ModCommands.java index 2483f36..bb43fb7 100644 --- a/Fabric-1.21.1/src/main/java/com/box3lab/command/ModCommands.java +++ b/Fabric-1.21.1/src/main/java/com/box3lab/command/ModCommands.java @@ -8,6 +8,7 @@ import com.box3lab.util.Box3ImportFiles; import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.suggestion.SuggestionProvider; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; @@ -46,37 +47,71 @@ public static void register() { .executes(context -> listBox3ImportFiles(context.getSource())) .then(argument("fileName", StringArgumentType.word()) .suggests(BOX3_FILE_SUGGESTIONS) + // /box3import .executes(context -> executeBox3Import( context.getSource(), StringArgumentType.getString( context, "fileName"), + 0, false, false)) - .then(argument("ignoreBarrier", - BoolArgumentType.bool()) + // /box3import + .then(argument("offsetY", + IntegerArgumentType.integer()) .executes(context -> executeBox3Import( context.getSource(), StringArgumentType - .getString(context, + .getString( + context, "fileName"), - BoolArgumentType.getBool( - context, - "ignoreBarrier"), + IntegerArgumentType + .getInteger( + context, + "offsetY"), + false, false)) - .then(argument("ignoreWater", + // /box3import + // + .then(argument("ignoreBarrier", BoolArgumentType.bool()) .executes(context -> executeBox3Import( context.getSource(), StringArgumentType - .getString(context, + .getString( + context, "fileName"), + IntegerArgumentType + .getInteger( + context, + "offsetY"), BoolArgumentType.getBool( context, "ignoreBarrier"), - BoolArgumentType.getBool( - context, - "ignoreWater"))))))); + false)) + // /box3import + // + // + // + // + .then(argument("ignoreWater", + BoolArgumentType.bool()) + .executes(context -> executeBox3Import( + context.getSource(), + StringArgumentType + .getString( + context, + "fileName"), + IntegerArgumentType + .getInteger( + context, + "offsetY"), + BoolArgumentType.getBool( + context, + "ignoreBarrier"), + BoolArgumentType.getBool( + context, + "ignoreWater")))))))); dispatcher.register( literal("box3barrier") @@ -134,13 +169,16 @@ private static String resolveMapName(String fileName) { } private static int executeBox3Import(CommandSourceStack source, String fileName, - boolean ignoreBarrier, boolean useVanillaWater) { + int offsetY, boolean ignoreBarrier, boolean useVanillaWater) { ServerLevel level = source.getServer().overworld(); try { ServerPlayer player = source.getPlayer(); String mapName = resolveMapName(fileName); + var basePos = player != null ? player.position() : new BlockPos(0, 0, 0).getCenter(); + var offsetPos = basePos.add(0, offsetY, 0); + VoxelImport.apply(null, level, mapName, - player != null ? player.position() : new BlockPos(0, 0, 0).getCenter(), + offsetPos, player, ignoreBarrier, useVanillaWater); diff --git a/Fabric-1.21.1/src/main/resources/assets/box3/lang/en_us.json b/Fabric-1.21.1/src/main/resources/assets/box3/lang/en_us.json index 20cdb13..9b34656 100644 --- a/Fabric-1.21.1/src/main/resources/assets/box3/lang/en_us.json +++ b/Fabric-1.21.1/src/main/resources/assets/box3/lang/en_us.json @@ -411,5 +411,6 @@ "command.box3.box3barrier.status": "Barrier visible: %s", "command.box3.box3barrier.set": "Barrier visibility set to: %s", "command.box3.box3barrier.toggled": "Barrier visibility toggled to: %s (re-enter the world to fully apply)", - "item.box3.model_destroyer": "Model destruction bucket" + "item.box3.model_destroyer": "Model destruction bucket", + "flat_world_preset.box3.box3_plains_world": "Box3 Plains" } diff --git a/Fabric-1.21.1/src/main/resources/assets/box3/lang/zh_cn.json b/Fabric-1.21.1/src/main/resources/assets/box3/lang/zh_cn.json index 2bd3f32..29bebcc 100644 --- a/Fabric-1.21.1/src/main/resources/assets/box3/lang/zh_cn.json +++ b/Fabric-1.21.1/src/main/resources/assets/box3/lang/zh_cn.json @@ -399,5 +399,6 @@ "command.box3.box3barrier.status": "屏障可见状态:%s", "command.box3.box3barrier.set": "屏障可见状态已设置为:%s", "command.box3.box3barrier.toggled": "屏障可见状态已切换为:%s(重新进入世界以完全生效)", - "item.box3.model_destroyer": "模型销毁桶" + "item.box3.model_destroyer": "模型销毁桶", + "flat_world_preset.box3.box3_plains_world": "神岛平原" } diff --git a/Fabric-1.21.1/src/main/resources/data/box3/worldgen/flat_level_generator_preset/box3_plains_world.json b/Fabric-1.21.1/src/main/resources/data/box3/worldgen/flat_level_generator_preset/box3_plains_world.json new file mode 100644 index 0000000..f0a387b --- /dev/null +++ b/Fabric-1.21.1/src/main/resources/data/box3/worldgen/flat_level_generator_preset/box3_plains_world.json @@ -0,0 +1,13 @@ +{ + "display": "box3:grass", + "settings": { + "biome": "minecraft:plains", + "lakes": false, + "features": false, + "layers": [ + { "block": "box3:stone", "height": 1 }, + { "block": "box3:dirt", "height": 6 }, + { "block": "box3:grass", "height": 1 } + ] + } +} diff --git a/Fabric-1.21.1/src/main/resources/data/minecraft/tags/worldgen/flat_level_generator_preset/visible.json b/Fabric-1.21.1/src/main/resources/data/minecraft/tags/worldgen/flat_level_generator_preset/visible.json new file mode 100644 index 0000000..5fcd620 --- /dev/null +++ b/Fabric-1.21.1/src/main/resources/data/minecraft/tags/worldgen/flat_level_generator_preset/visible.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "box3:box3_plains_world" + ] +} diff --git a/Fabric-1.21.11/gradle.properties b/Fabric-1.21.11/gradle.properties index ac8df9a..8b57103 100644 --- a/Fabric-1.21.11/gradle.properties +++ b/Fabric-1.21.11/gradle.properties @@ -12,7 +12,7 @@ loader_version=0.18.4 loom_version=1.15-SNAPSHOT # Mod Properties -mod_version=1.4.0-mc1.21.11 +mod_version=1.4.1-mc1.21.11 maven_group=com.box3lab archives_base_name=box3 diff --git a/Fabric-1.21.11/src/main/java/com/box3lab/block/BouncePadBlock.java b/Fabric-1.21.11/src/main/java/com/box3lab/block/BouncePadBlock.java index 40ab246..49ceabe 100644 --- a/Fabric-1.21.11/src/main/java/com/box3lab/block/BouncePadBlock.java +++ b/Fabric-1.21.11/src/main/java/com/box3lab/block/BouncePadBlock.java @@ -31,4 +31,14 @@ public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { entity.setDeltaMovement(vel); } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, double fallDistance) { + + if (entity.isSuppressingBounce()) { + super.fallOn(level, state, pos, entity, fallDistance); + } else { + entity.resetFallDistance(); + } + } } diff --git a/Fabric-1.21.11/src/main/java/com/box3lab/command/ModCommands.java b/Fabric-1.21.11/src/main/java/com/box3lab/command/ModCommands.java index 2483f36..bb43fb7 100644 --- a/Fabric-1.21.11/src/main/java/com/box3lab/command/ModCommands.java +++ b/Fabric-1.21.11/src/main/java/com/box3lab/command/ModCommands.java @@ -8,6 +8,7 @@ import com.box3lab.util.Box3ImportFiles; import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.suggestion.SuggestionProvider; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; @@ -46,37 +47,71 @@ public static void register() { .executes(context -> listBox3ImportFiles(context.getSource())) .then(argument("fileName", StringArgumentType.word()) .suggests(BOX3_FILE_SUGGESTIONS) + // /box3import .executes(context -> executeBox3Import( context.getSource(), StringArgumentType.getString( context, "fileName"), + 0, false, false)) - .then(argument("ignoreBarrier", - BoolArgumentType.bool()) + // /box3import + .then(argument("offsetY", + IntegerArgumentType.integer()) .executes(context -> executeBox3Import( context.getSource(), StringArgumentType - .getString(context, + .getString( + context, "fileName"), - BoolArgumentType.getBool( - context, - "ignoreBarrier"), + IntegerArgumentType + .getInteger( + context, + "offsetY"), + false, false)) - .then(argument("ignoreWater", + // /box3import + // + .then(argument("ignoreBarrier", BoolArgumentType.bool()) .executes(context -> executeBox3Import( context.getSource(), StringArgumentType - .getString(context, + .getString( + context, "fileName"), + IntegerArgumentType + .getInteger( + context, + "offsetY"), BoolArgumentType.getBool( context, "ignoreBarrier"), - BoolArgumentType.getBool( - context, - "ignoreWater"))))))); + false)) + // /box3import + // + // + // + // + .then(argument("ignoreWater", + BoolArgumentType.bool()) + .executes(context -> executeBox3Import( + context.getSource(), + StringArgumentType + .getString( + context, + "fileName"), + IntegerArgumentType + .getInteger( + context, + "offsetY"), + BoolArgumentType.getBool( + context, + "ignoreBarrier"), + BoolArgumentType.getBool( + context, + "ignoreWater")))))))); dispatcher.register( literal("box3barrier") @@ -134,13 +169,16 @@ private static String resolveMapName(String fileName) { } private static int executeBox3Import(CommandSourceStack source, String fileName, - boolean ignoreBarrier, boolean useVanillaWater) { + int offsetY, boolean ignoreBarrier, boolean useVanillaWater) { ServerLevel level = source.getServer().overworld(); try { ServerPlayer player = source.getPlayer(); String mapName = resolveMapName(fileName); + var basePos = player != null ? player.position() : new BlockPos(0, 0, 0).getCenter(); + var offsetPos = basePos.add(0, offsetY, 0); + VoxelImport.apply(null, level, mapName, - player != null ? player.position() : new BlockPos(0, 0, 0).getCenter(), + offsetPos, player, ignoreBarrier, useVanillaWater); diff --git a/Fabric-1.21.11/src/main/java/com/box3lab/fluid/VoxelSpecFluid.java b/Fabric-1.21.11/src/main/java/com/box3lab/fluid/VoxelSpecFluid.java deleted file mode 100644 index ab35188..0000000 --- a/Fabric-1.21.11/src/main/java/com/box3lab/fluid/VoxelSpecFluid.java +++ /dev/null @@ -1,137 +0,0 @@ -package com.box3lab.fluid; - -import java.util.function.Supplier; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.item.Item; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.LevelReader; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.FlowingFluid; -import net.minecraft.world.level.material.Fluid; -import net.minecraft.world.level.material.FluidState; - -public abstract class VoxelSpecFluid extends FlowingFluid { - private final Supplier still; - private final Supplier flowing; - private final Supplier bucket; - private final Supplier block; - - protected VoxelSpecFluid(Supplier still, Supplier flowing, - Supplier bucket, Supplier block) { - this.still = still; - this.flowing = flowing; - this.bucket = bucket; - this.block = block; - } - - @Override - public Fluid getFlowing() { - return flowing.get(); - } - - @Override - public Fluid getSource() { - return still.get(); - } - - @Override - public Item getBucket() { - return bucket.get(); - } - - @Override - protected BlockState createLegacyBlock(FluidState state) { - return block.get().defaultBlockState().setValue(net.minecraft.world.level.block.LiquidBlock.LEVEL, - getLegacyLevel(state)); - } - - @Override - public boolean isSame(Fluid fluid) { - return fluid == still.get() || fluid == flowing.get(); - } - - @Override - public int getDropOff(LevelReader level) { - return 1; - } - - @Override - public int getSlopeFindDistance(LevelReader level) { - return 4; - } - - @Override - public int getTickDelay(LevelReader level) { - return 5; - } - - @Override - protected float getExplosionResistance() { - return 100.0F; - } - - @Override - public boolean canConvertToSource(ServerLevel level) { - return false; - } - - @Override - protected void beforeDestroyingBlock(LevelAccessor level, BlockPos pos, BlockState state) { - if (level instanceof Level l) { - Block.dropResources(state, l, pos); - } - } - - @Override - public boolean canBeReplacedWith(FluidState state, BlockGetter level, BlockPos pos, Fluid fluid, - Direction direction) { - return false; - } - - @Override - protected void createFluidStateDefinition(StateDefinition.Builder builder) { - super.createFluidStateDefinition(builder); - builder.add(LEVEL); - } - - public static final class Flowing extends VoxelSpecFluid { - public Flowing(Supplier still, Supplier flowing, - Supplier bucket, Supplier block) { - super(still, flowing, bucket, block); - } - - @Override - public boolean isSource(FluidState state) { - return false; - } - - @Override - public int getAmount(FluidState state) { - return state.getValue(LEVEL); - } - } - - public static final class Still extends VoxelSpecFluid { - public Still(Supplier still, Supplier flowing, - Supplier bucket, Supplier block) { - super(still, flowing, bucket, block); - } - - @Override - public boolean isSource(FluidState state) { - return true; - } - - @Override - public int getAmount(FluidState state) { - return 8; - } - } -} diff --git a/Fabric-1.21.11/src/main/resources/assets/box3/lang/en_us.json b/Fabric-1.21.11/src/main/resources/assets/box3/lang/en_us.json index 20cdb13..9b34656 100644 --- a/Fabric-1.21.11/src/main/resources/assets/box3/lang/en_us.json +++ b/Fabric-1.21.11/src/main/resources/assets/box3/lang/en_us.json @@ -411,5 +411,6 @@ "command.box3.box3barrier.status": "Barrier visible: %s", "command.box3.box3barrier.set": "Barrier visibility set to: %s", "command.box3.box3barrier.toggled": "Barrier visibility toggled to: %s (re-enter the world to fully apply)", - "item.box3.model_destroyer": "Model destruction bucket" + "item.box3.model_destroyer": "Model destruction bucket", + "flat_world_preset.box3.box3_plains_world": "Box3 Plains" } diff --git a/Fabric-1.21.11/src/main/resources/assets/box3/lang/zh_cn.json b/Fabric-1.21.11/src/main/resources/assets/box3/lang/zh_cn.json index 2bd3f32..29bebcc 100644 --- a/Fabric-1.21.11/src/main/resources/assets/box3/lang/zh_cn.json +++ b/Fabric-1.21.11/src/main/resources/assets/box3/lang/zh_cn.json @@ -399,5 +399,6 @@ "command.box3.box3barrier.status": "屏障可见状态:%s", "command.box3.box3barrier.set": "屏障可见状态已设置为:%s", "command.box3.box3barrier.toggled": "屏障可见状态已切换为:%s(重新进入世界以完全生效)", - "item.box3.model_destroyer": "模型销毁桶" + "item.box3.model_destroyer": "模型销毁桶", + "flat_world_preset.box3.box3_plains_world": "神岛平原" } diff --git a/Fabric-1.21.11/src/main/resources/data/box3/worldgen/flat_level_generator_preset/box3_plains_world.json b/Fabric-1.21.11/src/main/resources/data/box3/worldgen/flat_level_generator_preset/box3_plains_world.json new file mode 100644 index 0000000..f0a387b --- /dev/null +++ b/Fabric-1.21.11/src/main/resources/data/box3/worldgen/flat_level_generator_preset/box3_plains_world.json @@ -0,0 +1,13 @@ +{ + "display": "box3:grass", + "settings": { + "biome": "minecraft:plains", + "lakes": false, + "features": false, + "layers": [ + { "block": "box3:stone", "height": 1 }, + { "block": "box3:dirt", "height": 6 }, + { "block": "box3:grass", "height": 1 } + ] + } +} diff --git a/Fabric-1.21.11/src/main/resources/data/minecraft/tags/worldgen/flat_level_generator_preset/visible.json b/Fabric-1.21.11/src/main/resources/data/minecraft/tags/worldgen/flat_level_generator_preset/visible.json new file mode 100644 index 0000000..5fcd620 --- /dev/null +++ b/Fabric-1.21.11/src/main/resources/data/minecraft/tags/worldgen/flat_level_generator_preset/visible.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "box3:box3_plains_world" + ] +}