From 90ca08146ad0d5478e91745bf9e575c52a9f4828 Mon Sep 17 00:00:00 2001 From: lordlogo2002 Date: Tue, 16 Dec 2025 01:00:48 +0100 Subject: [PATCH] added spawn structure to spwan at 0 80 0 and player at 5 90 6 --- .../java/net/Chipperfluff/chipi/ChipiMod.java | 58 ++++++++++++++++-- .../Chipperfluff/chipi/SpawnPlacedState.java | 21 +++++++ .../Chipperfluff/chipi/block/ModBlocks.java | 28 +++++++++ .../net/Chipperfluff/chipi/item/ModItems.java | 27 ++++++++ .../assets/chipi/blockstates/void_block.json | 5 ++ .../assets/chipi/models/block/void_block.json | 6 ++ .../assets/chipi/models/item/void_block.json | 3 + .../chipi/textures/block/void_block.png | Bin 0 -> 581 bytes .../assets/chipi/textures/item/void_block.png | Bin 0 -> 581 bytes .../resources/data/chipi/structures/spawn.nbt | Bin 0 -> 6461 bytes 10 files changed, 143 insertions(+), 5 deletions(-) create mode 100644 src/main/java/net/Chipperfluff/chipi/SpawnPlacedState.java create mode 100644 src/main/java/net/Chipperfluff/chipi/block/ModBlocks.java create mode 100644 src/main/java/net/Chipperfluff/chipi/item/ModItems.java create mode 100644 src/main/resources/assets/chipi/blockstates/void_block.json create mode 100644 src/main/resources/assets/chipi/models/block/void_block.json create mode 100644 src/main/resources/assets/chipi/models/item/void_block.json create mode 100644 src/main/resources/assets/chipi/textures/block/void_block.png create mode 100644 src/main/resources/assets/chipi/textures/item/void_block.png create mode 100644 src/main/resources/data/chipi/structures/spawn.nbt diff --git a/src/main/java/net/Chipperfluff/chipi/ChipiMod.java b/src/main/java/net/Chipperfluff/chipi/ChipiMod.java index ed472b3..3c11c21 100644 --- a/src/main/java/net/Chipperfluff/chipi/ChipiMod.java +++ b/src/main/java/net/Chipperfluff/chipi/ChipiMod.java @@ -5,30 +5,78 @@ import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.GameRules; +import net.minecraft.structure.StructurePlacementData; +import net.minecraft.structure.StructureTemplate; import net.Chipperfluff.chipi.command.ChipperCommand; +import net.Chipperfluff.chipi.block.ModBlocks; +import net.Chipperfluff.chipi.item.ModItems; public class ChipiMod implements ModInitializer { + public static final String MOD_ID = "chipi"; + private static final Identifier CHIPI_DIM = new Identifier("chipi", "chipi_dimension"); + private static final Identifier SPAWN_STRUCTURE = + new Identifier("chipi", "spawn"); + @Override public void onInitialize() { ServerTickEvents.END_WORLD_TICK.register((ServerWorld world) -> { + if (!world.getRegistryKey().getValue().equals(CHIPI_DIM)) return; - if (!world.getRegistryKey().getValue().equals(CHIPI_DIM)) { - return; - } - + // 🌙 Lock time world.setTimeOfDay(18000); - world.getGameRules() .get(GameRules.DO_DAYLIGHT_CYCLE) .set(false, world.getServer()); + + // 🧠 persistent spawn state + SpawnPlacedState state = world.getPersistentStateManager() + .getOrCreate( + SpawnPlacedState::fromNbt, + SpawnPlacedState::new, + "chipi_spawn" + ); + + if (state.placed) return; + + var optional = world.getStructureTemplateManager() + .getTemplate(SPAWN_STRUCTURE); + + if (optional.isEmpty()) { + System.err.println("[CHIPI] spawn.nbt not found!"); + return; + } + + StructureTemplate template = optional.get(); + + BlockPos origin = new BlockPos(0, 80, 0); + + template.place( + world, + origin, + origin, + new StructurePlacementData(), + world.getRandom(), + 2 + ); + + world.setSpawnPos(origin.up(), 0.0f); + + state.placed = true; + state.markDirty(); + + System.out.println("[CHIPI] Spawn structure placed"); }); + ModBlocks.register(); + ModItems.register(); + CommandRegistrationCallback.EVENT.register( (dispatcher, registryAccess, environment) -> ChipperCommand.register(dispatcher) diff --git a/src/main/java/net/Chipperfluff/chipi/SpawnPlacedState.java b/src/main/java/net/Chipperfluff/chipi/SpawnPlacedState.java new file mode 100644 index 0000000..3e6c802 --- /dev/null +++ b/src/main/java/net/Chipperfluff/chipi/SpawnPlacedState.java @@ -0,0 +1,21 @@ +package net.Chipperfluff.chipi; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.world.PersistentState; + +public class SpawnPlacedState extends PersistentState { + + public boolean placed = false; + + public static SpawnPlacedState fromNbt(NbtCompound nbt) { + SpawnPlacedState state = new SpawnPlacedState(); + state.placed = nbt.getBoolean("placed"); + return state; + } + + @Override + public NbtCompound writeNbt(NbtCompound nbt) { + nbt.putBoolean("placed", placed); + return nbt; + } +} diff --git a/src/main/java/net/Chipperfluff/chipi/block/ModBlocks.java b/src/main/java/net/Chipperfluff/chipi/block/ModBlocks.java new file mode 100644 index 0000000..16c88ee --- /dev/null +++ b/src/main/java/net/Chipperfluff/chipi/block/ModBlocks.java @@ -0,0 +1,28 @@ +package net.Chipperfluff.chipi.block; + +import net.minecraft.block.Block; +import net.minecraft.block.AbstractBlock; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; +import net.Chipperfluff.chipi.ChipiMod; + +public class ModBlocks { + + public static final Block VOID_BLOCK = register( + "void_block", + new Block(AbstractBlock.Settings.create() + .strength(1.5f, 6.0f) + ) + ); + + private static Block register(String name, Block block) { + return Registry.register( + Registries.BLOCK, + new Identifier(ChipiMod.MOD_ID, name), + block + ); + } + + public static void register() {} +} diff --git a/src/main/java/net/Chipperfluff/chipi/item/ModItems.java b/src/main/java/net/Chipperfluff/chipi/item/ModItems.java new file mode 100644 index 0000000..864047f --- /dev/null +++ b/src/main/java/net/Chipperfluff/chipi/item/ModItems.java @@ -0,0 +1,27 @@ +package net.Chipperfluff.chipi.item; + +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; +import net.Chipperfluff.chipi.ChipiMod; +import net.Chipperfluff.chipi.block.ModBlocks; + +public class ModItems { + + public static final Item VOID_BLOCK = register( + "void_block", + new BlockItem(ModBlocks.VOID_BLOCK, new Item.Settings()) + ); + + private static Item register(String name, Item item) { + return Registry.register( + Registries.ITEM, + new Identifier(ChipiMod.MOD_ID, name), + item + ); + } + + public static void register() {} +} diff --git a/src/main/resources/assets/chipi/blockstates/void_block.json b/src/main/resources/assets/chipi/blockstates/void_block.json new file mode 100644 index 0000000..4b9d15f --- /dev/null +++ b/src/main/resources/assets/chipi/blockstates/void_block.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "chipi:block/void_block" } + } +} diff --git a/src/main/resources/assets/chipi/models/block/void_block.json b/src/main/resources/assets/chipi/models/block/void_block.json new file mode 100644 index 0000000..f4e3df6 --- /dev/null +++ b/src/main/resources/assets/chipi/models/block/void_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "chipi:block/void_block" + } +} diff --git a/src/main/resources/assets/chipi/models/item/void_block.json b/src/main/resources/assets/chipi/models/item/void_block.json new file mode 100644 index 0000000..bd3c4aa --- /dev/null +++ b/src/main/resources/assets/chipi/models/item/void_block.json @@ -0,0 +1,3 @@ +{ + "parent": "chipi:block/void_block" +} diff --git a/src/main/resources/assets/chipi/textures/block/void_block.png b/src/main/resources/assets/chipi/textures/block/void_block.png new file mode 100644 index 0000000000000000000000000000000000000000..63fcdde53693a4391c03ce9ceb402fcba7d871d5 GIT binary patch literal 581 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 s&PnPKYAKQrTA^-pY literal 0 HcmV?d00001