From 896724a682031b6972af68188a8253c783b75b74 Mon Sep 17 00:00:00 2001 From: RS-gty <18920702372@163.com> Date: Mon, 9 Sep 2024 01:06:16 +0800 Subject: [PATCH] Relic_Structure Addition --- .../103d9f3f36b01595f1aa5172191e60eff02e6924 | 12 +- .../structure/mod_end_relic_structure.json | 6 + .../structure/mod_nether_relic_structure.json | 6 + .../structure/mod_ocean_relic_structure.json | 6 + .../structure/mod_soul_relic_structure.json | 6 + .../mod_vitality_relic_structure.json | 6 + .../mod_end_relic_structure.json | 14 +++ .../mod_nether_relic_structure.json | 14 +++ .../mod_ocean_relic_structure.json | 14 +++ .../mod_soul_relic_structure.json | 14 +++ .../mod_vitality_relic_structure.json | 14 +++ .../structure/ModStructurePieceTypes.java | 5 + .../world/structure/ModStructureSets.java | 30 +++++ .../world/structure/ModStructureType.java | 12 +- .../world/structure/ModStructures.java | 26 ++++ .../piece/ModEndRelicStructurePieces.java | 112 ++++++++++++++++++ .../piece/ModNetherRelicStructurePieces.java | 112 ++++++++++++++++++ .../piece/ModOceanRelicStructurePieces.java | 112 ++++++++++++++++++ .../piece/ModSoulRelicStructurePieces.java | 112 ++++++++++++++++++ .../ModVitalityRelicStructurePieces.java | 112 ++++++++++++++++++ .../structure/ModDesertRelicStructure.java | 1 - .../structure/ModEndRelicStructure.java | 41 +++++++ .../structure/ModNetherRelicStructure.java | 42 +++++++ .../structure/ModOceanRelicStructure.java | 42 +++++++ .../structure/ModSoulRelicStructure.java | 42 +++++++ .../structure/ModVitalityRelicStructure.java | 42 +++++++ .../structures/mod_desert_relic_structure.nbt | Bin 0 -> 1054 bytes .../structures/mod_end_relic_structure.nbt | Bin 0 -> 1054 bytes .../structures/mod_nether_relic_structure.nbt | Bin 0 -> 1054 bytes .../structures/mod_ocean_relic_structure.nbt | Bin 0 -> 1054 bytes .../structures/mod_soul_relic_structure.nbt | Bin 0 -> 1054 bytes .../mod_vitality_relic_structure.nbt | Bin 0 -> 1054 bytes 32 files changed, 952 insertions(+), 3 deletions(-) create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_end_relic_structure.json create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_nether_relic_structure.json create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_ocean_relic_structure.json create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_soul_relic_structure.json create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_vitality_relic_structure.json create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_end_relic_structure.json create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_nether_relic_structure.json create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_ocean_relic_structure.json create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_soul_relic_structure.json create mode 100644 src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_vitality_relic_structure.json create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModEndRelicStructurePieces.java create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModNetherRelicStructurePieces.java create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModOceanRelicStructurePieces.java create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModSoulRelicStructurePieces.java create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModVitalityRelicStructurePieces.java create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModEndRelicStructure.java create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModNetherRelicStructure.java create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModOceanRelicStructure.java create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModSoulRelicStructure.java create mode 100644 src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModVitalityRelicStructure.java create mode 100644 src/main/resources/data/enhancedstonebricks/structures/mod_desert_relic_structure.nbt create mode 100644 src/main/resources/data/enhancedstonebricks/structures/mod_end_relic_structure.nbt create mode 100644 src/main/resources/data/enhancedstonebricks/structures/mod_nether_relic_structure.nbt create mode 100644 src/main/resources/data/enhancedstonebricks/structures/mod_ocean_relic_structure.nbt create mode 100644 src/main/resources/data/enhancedstonebricks/structures/mod_soul_relic_structure.nbt create mode 100644 src/main/resources/data/enhancedstonebricks/structures/mod_vitality_relic_structure.nbt diff --git a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 index 06141c9..dfb7e05 100644 --- a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 +++ b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 @@ -1,3 +1,13 @@ -// 1.20.4 2024-09-08T20:21:52.127306 Registries +// 1.20.4 2024-09-09T00:59:44.9842061 Registries 477b95f83609ea2dd8482f82a4f56c4042d89de8 data/enhancedstonebricks/worldgen/structure/mod_desert_relic_structure.json +d50999a6a95e11bb9cad8aec620930eb3070282c data/enhancedstonebricks/worldgen/structure/mod_end_relic_structure.json +5db3f100eafa46928bdd7e00df605a7253661164 data/enhancedstonebricks/worldgen/structure/mod_nether_relic_structure.json +50cceb240ed48390865fc3cb6fd93e31cd8ad610 data/enhancedstonebricks/worldgen/structure/mod_ocean_relic_structure.json +5db3f100eafa46928bdd7e00df605a7253661164 data/enhancedstonebricks/worldgen/structure/mod_soul_relic_structure.json +32e1b6be17e0534660d235c27886abc933c37ea5 data/enhancedstonebricks/worldgen/structure/mod_vitality_relic_structure.json 9bd304efc7a5d834dd1ee6fb1a2e76e8ca34c747 data/enhancedstonebricks/worldgen/structure_set/mod_desert_relic_structure.json +357a30f14d144bd9046eec07e8b6a5a3ebe3c148 data/enhancedstonebricks/worldgen/structure_set/mod_end_relic_structure.json +46d9684c8d5de3d70294ed4ec096d3020dcc4ebd data/enhancedstonebricks/worldgen/structure_set/mod_nether_relic_structure.json +a04a27f7b76f34c43ba6543542dfc86b78d310be data/enhancedstonebricks/worldgen/structure_set/mod_ocean_relic_structure.json +13e2453e7afa368c62bae5fdb61137b000b1f84e data/enhancedstonebricks/worldgen/structure_set/mod_soul_relic_structure.json +e121c9154b99f141d6e22eee9308f900b98e2e64 data/enhancedstonebricks/worldgen/structure_set/mod_vitality_relic_structure.json diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_end_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_end_relic_structure.json new file mode 100644 index 0000000..e1c61e8 --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_end_relic_structure.json @@ -0,0 +1,6 @@ +{ + "type": "enhancedstonebricks:mod_desert_relic_structure", + "biomes": "#forge:is_cold/end", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_nether_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_nether_relic_structure.json new file mode 100644 index 0000000..c171e43 --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_nether_relic_structure.json @@ -0,0 +1,6 @@ +{ + "type": "enhancedstonebricks:mod_desert_relic_structure", + "biomes": "#forge:is_dry/nether", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_ocean_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_ocean_relic_structure.json new file mode 100644 index 0000000..76f646d --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_ocean_relic_structure.json @@ -0,0 +1,6 @@ +{ + "type": "enhancedstonebricks:mod_desert_relic_structure", + "biomes": "#minecraft:has_structure/ruined_portal_ocean", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_soul_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_soul_relic_structure.json new file mode 100644 index 0000000..c171e43 --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_soul_relic_structure.json @@ -0,0 +1,6 @@ +{ + "type": "enhancedstonebricks:mod_desert_relic_structure", + "biomes": "#forge:is_dry/nether", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_vitality_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_vitality_relic_structure.json new file mode 100644 index 0000000..3ea4619 --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure/mod_vitality_relic_structure.json @@ -0,0 +1,6 @@ +{ + "type": "enhancedstonebricks:mod_desert_relic_structure", + "biomes": "#minecraft:is_forest", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_end_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_end_relic_structure.json new file mode 100644 index 0000000..1cdf22e --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_end_relic_structure.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 98715357, + "separation": 8, + "spacing": 28 + }, + "structures": [ + { + "structure": "enhancedstonebricks:mod_end_relic_structure", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_nether_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_nether_relic_structure.json new file mode 100644 index 0000000..307a444 --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_nether_relic_structure.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 65423147, + "separation": 8, + "spacing": 28 + }, + "structures": [ + { + "structure": "enhancedstonebricks:mod_nether_relic_structure", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_ocean_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_ocean_relic_structure.json new file mode 100644 index 0000000..bbda511 --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_ocean_relic_structure.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 15489653, + "separation": 8, + "spacing": 28 + }, + "structures": [ + { + "structure": "enhancedstonebricks:mod_ocean_relic_structure", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_soul_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_soul_relic_structure.json new file mode 100644 index 0000000..4441cd2 --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_soul_relic_structure.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 78435694, + "separation": 8, + "spacing": 28 + }, + "structures": [ + { + "structure": "enhancedstonebricks:mod_soul_relic_structure", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_vitality_relic_structure.json b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_vitality_relic_structure.json new file mode 100644 index 0000000..a320fd1 --- /dev/null +++ b/src/generated/resources/data/enhancedstonebricks/worldgen/structure_set/mod_vitality_relic_structure.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 87364230, + "separation": 8, + "spacing": 28 + }, + "structures": [ + { + "structure": "enhancedstonebricks:mod_vitality_relic_structure", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructurePieceTypes.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructurePieceTypes.java index 269c87f..f3e3658 100644 --- a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructurePieceTypes.java +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructurePieceTypes.java @@ -14,6 +14,11 @@ public class ModStructurePieceTypes { public static final DeferredRegister STRUCTURE_PIECE_TYPES = DeferredRegister.create(Registries.STRUCTURE_PIECE, ExampleMod.MODID); public static final DeferredHolder MOD_DESERT_RELIC_STRUCTURE_PIECE = registerPieceType("mod_desert_relic_structure_piece", ModDesertRelicStructurePieces.ModDesertRelicStructurePiece::new); + public static final DeferredHolder MOD_END_RELIC_STRUCTURE_PIECE = registerPieceType("mod_end_relic_structure_piece", ModDesertRelicStructurePieces.ModDesertRelicStructurePiece::new); + public static final DeferredHolder MOD_NETHER_RELIC_STRUCTURE_PIECE = registerPieceType("mod_nether_relic_structure_piece", ModDesertRelicStructurePieces.ModDesertRelicStructurePiece::new); + public static final DeferredHolder MOD_OCEAN_RELIC_STRUCTURE_PIECE = registerPieceType("mod_ocean_relic_structure_piece", ModDesertRelicStructurePieces.ModDesertRelicStructurePiece::new); + public static final DeferredHolder MOD_SOUL_RELIC_STRUCTURE_PIECE = registerPieceType("mod_soul_relic_structure_piece", ModDesertRelicStructurePieces.ModDesertRelicStructurePiece::new); + public static final DeferredHolder MOD_VITALITY_RELIC_STRUCTURE_PIECE = registerPieceType("mod_vitality_relic_structure_piece", ModDesertRelicStructurePieces.ModDesertRelicStructurePiece::new); private static DeferredHolder registerPieceType(String name, StructurePieceType.StructureTemplateType structurePieceType) { return STRUCTURE_PIECE_TYPES.register(name.toLowerCase(Locale.ROOT), () -> structurePieceType); } diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructureSets.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructureSets.java index 6fc7849..898d84b 100644 --- a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructureSets.java +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructureSets.java @@ -17,6 +17,16 @@ public class ModStructureSets { public static final ResourceKey DESERT_RELIC_STRUCTURE_SET = register("mod_desert_relic_structure"); + public static final ResourceKey END_RELIC_STRUCTURE_SET = register("mod_end_relic_structure"); + + public static final ResourceKey NETHER_RELIC_STRUCTURE_SET = register("mod_nether_relic_structure"); + + public static final ResourceKey OCEAN_RELIC_STRUCTURE_SET = register("mod_ocean_relic_structure"); + + public static final ResourceKey SOUL_RELIC_STRUCTURE_SET = register("mod_soul_relic_structure"); + + public static final ResourceKey VITALITY_RELIC_STRUCTURE_SET = register("mod_vitality_relic_structure"); + public static void bootstap(BootstapContext pContext) { HolderGetter holdergetter = pContext.lookup(Registries.STRUCTURE); @@ -24,6 +34,26 @@ public static void bootstap(BootstapContext pContext) { ModStructureSets.DESERT_RELIC_STRUCTURE_SET, new StructureSet(holdergetter.getOrThrow(ModStructures.MOD_DESERT_RELIC_STRUCTURE), new RandomSpreadStructurePlacement(28, 8, RandomSpreadType.LINEAR, 14357619)) ); + pContext.register( + ModStructureSets.END_RELIC_STRUCTURE_SET, + new StructureSet(holdergetter.getOrThrow(ModStructures.MOD_END_RELIC_STRUCTURE), new RandomSpreadStructurePlacement(28, 8, RandomSpreadType.LINEAR, 98715357)) + ); + pContext.register( + ModStructureSets.NETHER_RELIC_STRUCTURE_SET, + new StructureSet(holdergetter.getOrThrow(ModStructures.MOD_NETHER_RELIC_STRUCTURE), new RandomSpreadStructurePlacement(28, 8, RandomSpreadType.LINEAR, 65423147)) + ); + pContext.register( + ModStructureSets.OCEAN_RELIC_STRUCTURE_SET, + new StructureSet(holdergetter.getOrThrow(ModStructures.MOD_OCEAN_RELIC_STRUCTURE), new RandomSpreadStructurePlacement(28, 8, RandomSpreadType.LINEAR, 15489653)) + ); + pContext.register( + ModStructureSets.SOUL_RELIC_STRUCTURE_SET, + new StructureSet(holdergetter.getOrThrow(ModStructures.MOD_SOUL_RELIC_STRUCTURE), new RandomSpreadStructurePlacement(28, 8, RandomSpreadType.LINEAR, 78435694)) + ); + pContext.register( + ModStructureSets.VITALITY_RELIC_STRUCTURE_SET, + new StructureSet(holdergetter.getOrThrow(ModStructures.MOD_VITALITY_RELIC_STRUCTURE), new RandomSpreadStructurePlacement(28, 8, RandomSpreadType.LINEAR, 87364230)) + ); } private static ResourceKey register(String pName) { diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructureType.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructureType.java index a8a5d74..f8d49fe 100644 --- a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructureType.java +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructureType.java @@ -7,7 +7,7 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; -import net.rswfb.enhancedstonebricks.world.structure.structure.ModDesertRelicStructure; +import net.rswfb.enhancedstonebricks.world.structure.structure.*; import java.util.function.Supplier; @@ -16,6 +16,16 @@ public class ModStructureType { public static final DeferredHolder, StructureType> MOD_DESERT_RELIC_STRUCTURE = registerType("mod_desert_relic_structure", () -> () -> ModDesertRelicStructure.CODEC); + public static final DeferredHolder, StructureType> MOD_END_RELIC_STRUCTURE = registerType("mod_end_relic_structure", () -> () -> ModEndRelicStructure.CODEC); + + public static final DeferredHolder, StructureType> MOD_NETHER_RELIC_STRUCTURE = registerType("mod_nether_relic_structure", () -> () -> ModNetherRelicStructure.CODEC); + + public static final DeferredHolder, StructureType> MOD_OCEAN_RELIC_STRUCTURE = registerType("mod_ocean_relic_structure", () -> () -> ModOceanRelicStructure.CODEC); + + public static final DeferredHolder, StructureType> MOD_SOUL_RELIC_STRUCTURE = registerType("mod_soul_relic_structure", () -> () -> ModSoulRelicStructure.CODEC); + + public static final DeferredHolder, StructureType> MOD_VITALITY_RELIC_STRUCTURE = registerType("mod_vitality_relic_structure", () -> () -> ModVitalityRelicStructure.CODEC); + private static

DeferredHolder, StructureType

> registerType(String name, Supplier> factory) { return STRUCTURE_TYPES.register(name, factory); } diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructures.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructures.java index 20e0161..355a0a3 100644 --- a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructures.java +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/ModStructures.java @@ -6,6 +6,7 @@ import net.minecraft.data.worldgen.BootstapContext; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BiomeTags; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.GenerationStep; @@ -36,6 +37,11 @@ private static Structure.StructureSettings structure(HolderSet pBiomes, public static final ResourceKey MOD_DESERT_RELIC_STRUCTURE = registerKey("mod_desert_relic_structure"); + public static final ResourceKey MOD_END_RELIC_STRUCTURE = registerKey("mod_end_relic_structure"); + public static final ResourceKey MOD_NETHER_RELIC_STRUCTURE = registerKey("mod_nether_relic_structure"); + public static final ResourceKey MOD_OCEAN_RELIC_STRUCTURE = registerKey("mod_ocean_relic_structure"); + public static final ResourceKey MOD_SOUL_RELIC_STRUCTURE = registerKey("mod_soul_relic_structure"); + public static final ResourceKey MOD_VITALITY_RELIC_STRUCTURE = registerKey("mod_vitality_relic_structure"); public static ResourceKey registerKey(String name) { return ResourceKey.create(Registries.STRUCTURE, new ResourceLocation(ExampleMod.MODID,name)); @@ -48,6 +54,26 @@ public static void bootstrap(BootstapContext context) { ModStructures.MOD_DESERT_RELIC_STRUCTURE, new ModDesertRelicStructure(structure(biomeHolderGetter.getOrThrow(Tags.Biomes.IS_DESERT), TerrainAdjustment.NONE)) ); + context.register( + ModStructures.MOD_END_RELIC_STRUCTURE, + new ModDesertRelicStructure(structure(biomeHolderGetter.getOrThrow(Tags.Biomes.IS_COLD_END), TerrainAdjustment.NONE)) + ); + context.register( + ModStructures.MOD_NETHER_RELIC_STRUCTURE, + new ModDesertRelicStructure(structure(biomeHolderGetter.getOrThrow(Tags.Biomes.IS_DRY_NETHER), TerrainAdjustment.NONE)) + ); + context.register( + ModStructures.MOD_OCEAN_RELIC_STRUCTURE, + new ModDesertRelicStructure(structure(biomeHolderGetter.getOrThrow(BiomeTags.HAS_RUINED_PORTAL_OCEAN), TerrainAdjustment.NONE)) + ); + context.register( + ModStructures.MOD_SOUL_RELIC_STRUCTURE, + new ModDesertRelicStructure(structure(biomeHolderGetter.getOrThrow(Tags.Biomes.IS_DRY_NETHER), TerrainAdjustment.NONE)) + ); + context.register( + ModStructures.MOD_VITALITY_RELIC_STRUCTURE, + new ModDesertRelicStructure(structure(biomeHolderGetter.getOrThrow(BiomeTags.IS_FOREST), TerrainAdjustment.NONE)) + ); } } diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModEndRelicStructurePieces.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModEndRelicStructurePieces.java new file mode 100644 index 0000000..7154dc0 --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModEndRelicStructurePieces.java @@ -0,0 +1,112 @@ +package net.rswfb.enhancedstonebricks.world.structure.piece; + +import com.google.common.collect.ImmutableMap; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.StructureManager; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.ChestBlockEntity; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.StructurePieceAccessor; +import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.templatesystem.BlockIgnoreProcessor; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.rswfb.enhancedstonebricks.ExampleMod; +import net.rswfb.enhancedstonebricks.world.structure.*; + +import java.util.Map; + +public class ModEndRelicStructurePieces { + static final ResourceLocation STRUCTURE_LOCATION_MOD_END_RELIC_STRUCTURE = new ResourceLocation(ExampleMod.MODID,"mod_end_relic_structure"); + static final Map PIVOTS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_END_RELIC_STRUCTURE, new BlockPos(4, 0, 4) + ); + static final Map OFFSETS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_END_RELIC_STRUCTURE, BlockPos.ZERO + ); + + public static void addPieces( + StructureTemplateManager pStructureTemplateManager, BlockPos pStartPos, Rotation pRotation, StructurePieceAccessor pPieces, RandomSource pRandom + ) { + pPieces.addPiece(new ModEndRelicStructurePieces.ModEndRelicStructurePiece(pStructureTemplateManager, STRUCTURE_LOCATION_MOD_END_RELIC_STRUCTURE, pStartPos, pRotation, 0)); + } + + public static class ModEndRelicStructurePiece extends TemplateStructurePiece { + + public ModEndRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, ResourceLocation pLocation, BlockPos pStartPos, Rotation pRotation, int pDown) { + super(ModStructurePieceTypes.MOD_END_RELIC_STRUCTURE_PIECE.get(), 0, pStructureTemplateManager, pLocation, pLocation.toString(), + makeSettings(pRotation, pLocation), + makePosition(pLocation, pStartPos, pDown) + ); + } + + + public ModEndRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, CompoundTag pTag) { + super(ModStructurePieceTypes.MOD_END_RELIC_STRUCTURE_PIECE.get(), pTag, pStructureTemplateManager, resourceLocation -> makeSettings(Rotation.valueOf(pTag.getString("Rot")), resourceLocation)); + } + + private static StructurePlaceSettings makeSettings(Rotation pRotation, ResourceLocation pLocation) { + return new StructurePlaceSettings() + .setRotation(pRotation) + .setMirror(Mirror.NONE) + .setRotationPivot(ModEndRelicStructurePieces.PIVOTS.get(pLocation)) + .addProcessor(BlockIgnoreProcessor.STRUCTURE_BLOCK); + } + + private static BlockPos makePosition(ResourceLocation pLocation, BlockPos pPos, int pDown) { + return pPos.offset(ModEndRelicStructurePieces.OFFSETS.get(pLocation)).below(pDown); + } + @Override + protected void addAdditionalSaveData(StructurePieceSerializationContext pContext, CompoundTag pTag) { + super.addAdditionalSaveData(pContext, pTag); + pTag.putString("Rot", this.placeSettings.getRotation().name()); + } + + @Override + protected void handleDataMarker(String pName, BlockPos pPos, ServerLevelAccessor pLevel, RandomSource pRandom, BoundingBox pBox) { + if ("chest".equals(pName)) { + pLevel.setBlock(pPos, Blocks.AIR.defaultBlockState(), 3); + BlockEntity blockentity = pLevel.getBlockEntity(pPos.below()); + if (blockentity instanceof ChestBlockEntity) { + ((ChestBlockEntity)blockentity).setLootTable(BuiltInLootTables.IGLOO_CHEST, pRandom.nextLong()); + } + } + } + + @Override + public void postProcess( + WorldGenLevel pLevel, + StructureManager pStructureManager, + ChunkGenerator pGenerator, + RandomSource pRandom, + BoundingBox pBox, + ChunkPos pChunkPos, + BlockPos pPos + ) { + ResourceLocation resourceLocation = new ResourceLocation(this.templateName); + StructurePlaceSettings structureplacesettings = makeSettings(this.placeSettings.getRotation(), resourceLocation); + BlockPos blockpos = ModEndRelicStructurePieces.OFFSETS.get(resourceLocation); + BlockPos blockpos1 = this.templatePosition + .offset(StructureTemplate.calculateRelativePosition(structureplacesettings, new BlockPos(3 - blockpos.getX(), 0, -blockpos.getZ()))); + int i = pLevel.getHeight(Heightmap.Types.WORLD_SURFACE_WG, blockpos1.getX(), blockpos1.getZ()); + BlockPos blockpos2 = this.templatePosition; + this.templatePosition = this.templatePosition.offset(0, i - 90 - 1, 0); + super.postProcess(pLevel, pStructureManager, pGenerator, pRandom, pBox, pChunkPos, pPos); + this.templatePosition = blockpos2; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModNetherRelicStructurePieces.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModNetherRelicStructurePieces.java new file mode 100644 index 0000000..b8b6997 --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModNetherRelicStructurePieces.java @@ -0,0 +1,112 @@ +package net.rswfb.enhancedstonebricks.world.structure.piece; + +import com.google.common.collect.ImmutableMap; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.StructureManager; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.ChestBlockEntity; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.StructurePieceAccessor; +import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.templatesystem.BlockIgnoreProcessor; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.rswfb.enhancedstonebricks.ExampleMod; +import net.rswfb.enhancedstonebricks.world.structure.*; + +import java.util.Map; + +public class ModNetherRelicStructurePieces { + static final ResourceLocation STRUCTURE_LOCATION_MOD_NETHER_RELIC_STRUCTURE = new ResourceLocation(ExampleMod.MODID,"mod_nether_relic_structure"); + static final Map PIVOTS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_NETHER_RELIC_STRUCTURE, new BlockPos(4, 0, 4) + ); + static final Map OFFSETS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_NETHER_RELIC_STRUCTURE, BlockPos.ZERO + ); + + public static void addPieces( + StructureTemplateManager pStructureTemplateManager, BlockPos pStartPos, Rotation pRotation, StructurePieceAccessor pPieces, RandomSource pRandom + ) { + pPieces.addPiece(new ModNetherRelicStructurePieces.ModNetherRelicStructurePiece(pStructureTemplateManager, STRUCTURE_LOCATION_MOD_NETHER_RELIC_STRUCTURE, pStartPos, pRotation, 0)); + } + + public static class ModNetherRelicStructurePiece extends TemplateStructurePiece { + + public ModNetherRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, ResourceLocation pLocation, BlockPos pStartPos, Rotation pRotation, int pDown) { + super(ModStructurePieceTypes.MOD_NETHER_RELIC_STRUCTURE_PIECE.get(), 0, pStructureTemplateManager, pLocation, pLocation.toString(), + makeSettings(pRotation, pLocation), + makePosition(pLocation, pStartPos, pDown) + ); + } + + + public ModNetherRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, CompoundTag pTag) { + super(ModStructurePieceTypes.MOD_NETHER_RELIC_STRUCTURE_PIECE.get(), pTag, pStructureTemplateManager, resourceLocation -> makeSettings(Rotation.valueOf(pTag.getString("Rot")), resourceLocation)); + } + + private static StructurePlaceSettings makeSettings(Rotation pRotation, ResourceLocation pLocation) { + return new StructurePlaceSettings() + .setRotation(pRotation) + .setMirror(Mirror.NONE) + .setRotationPivot(ModNetherRelicStructurePieces.PIVOTS.get(pLocation)) + .addProcessor(BlockIgnoreProcessor.STRUCTURE_BLOCK); + } + + private static BlockPos makePosition(ResourceLocation pLocation, BlockPos pPos, int pDown) { + return pPos.offset(ModNetherRelicStructurePieces.OFFSETS.get(pLocation)).below(pDown); + } + @Override + protected void addAdditionalSaveData(StructurePieceSerializationContext pContext, CompoundTag pTag) { + super.addAdditionalSaveData(pContext, pTag); + pTag.putString("Rot", this.placeSettings.getRotation().name()); + } + + @Override + protected void handleDataMarker(String pName, BlockPos pPos, ServerLevelAccessor pLevel, RandomSource pRandom, BoundingBox pBox) { + if ("chest".equals(pName)) { + pLevel.setBlock(pPos, Blocks.AIR.defaultBlockState(), 3); + BlockEntity blockentity = pLevel.getBlockEntity(pPos.below()); + if (blockentity instanceof ChestBlockEntity) { + ((ChestBlockEntity)blockentity).setLootTable(BuiltInLootTables.IGLOO_CHEST, pRandom.nextLong()); + } + } + } + + @Override + public void postProcess( + WorldGenLevel pLevel, + StructureManager pStructureManager, + ChunkGenerator pGenerator, + RandomSource pRandom, + BoundingBox pBox, + ChunkPos pChunkPos, + BlockPos pPos + ) { + ResourceLocation resourceLocation = new ResourceLocation(this.templateName); + StructurePlaceSettings structureplacesettings = makeSettings(this.placeSettings.getRotation(), resourceLocation); + BlockPos blockpos = ModNetherRelicStructurePieces.OFFSETS.get(resourceLocation); + BlockPos blockpos1 = this.templatePosition + .offset(StructureTemplate.calculateRelativePosition(structureplacesettings, new BlockPos(3 - blockpos.getX(), 0, -blockpos.getZ()))); + int i = pLevel.getHeight(Heightmap.Types.WORLD_SURFACE_WG, blockpos1.getX(), blockpos1.getZ()); + BlockPos blockpos2 = this.templatePosition; + this.templatePosition = this.templatePosition.offset(0, i - 90 - 1, 0); + super.postProcess(pLevel, pStructureManager, pGenerator, pRandom, pBox, pChunkPos, pPos); + this.templatePosition = blockpos2; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModOceanRelicStructurePieces.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModOceanRelicStructurePieces.java new file mode 100644 index 0000000..5855025 --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModOceanRelicStructurePieces.java @@ -0,0 +1,112 @@ +package net.rswfb.enhancedstonebricks.world.structure.piece; + +import com.google.common.collect.ImmutableMap; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.StructureManager; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.ChestBlockEntity; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.StructurePieceAccessor; +import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.templatesystem.BlockIgnoreProcessor; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.rswfb.enhancedstonebricks.ExampleMod; +import net.rswfb.enhancedstonebricks.world.structure.*; + +import java.util.Map; + +public class ModOceanRelicStructurePieces { + static final ResourceLocation STRUCTURE_LOCATION_MOD_OCEAN_RELIC_STRUCTURE = new ResourceLocation(ExampleMod.MODID,"mod_desert_relic_structure"); + static final Map PIVOTS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_OCEAN_RELIC_STRUCTURE, new BlockPos(4, 0, 4) + ); + static final Map OFFSETS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_OCEAN_RELIC_STRUCTURE, BlockPos.ZERO + ); + + public static void addPieces( + StructureTemplateManager pStructureTemplateManager, BlockPos pStartPos, Rotation pRotation, StructurePieceAccessor pPieces, RandomSource pRandom + ) { + pPieces.addPiece(new ModOceanRelicStructurePieces.ModOceanRelicStructurePiece(pStructureTemplateManager, STRUCTURE_LOCATION_MOD_OCEAN_RELIC_STRUCTURE, pStartPos, pRotation, 0)); + } + + public static class ModOceanRelicStructurePiece extends TemplateStructurePiece { + + public ModOceanRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, ResourceLocation pLocation, BlockPos pStartPos, Rotation pRotation, int pDown) { + super(ModStructurePieceTypes.MOD_OCEAN_RELIC_STRUCTURE_PIECE.get(), 0, pStructureTemplateManager, pLocation, pLocation.toString(), + makeSettings(pRotation, pLocation), + makePosition(pLocation, pStartPos, pDown) + ); + } + + + public ModOceanRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, CompoundTag pTag) { + super(ModStructurePieceTypes.MOD_OCEAN_RELIC_STRUCTURE_PIECE.get(), pTag, pStructureTemplateManager, resourceLocation -> makeSettings(Rotation.valueOf(pTag.getString("Rot")), resourceLocation)); + } + + private static StructurePlaceSettings makeSettings(Rotation pRotation, ResourceLocation pLocation) { + return new StructurePlaceSettings() + .setRotation(pRotation) + .setMirror(Mirror.NONE) + .setRotationPivot(ModOceanRelicStructurePieces.PIVOTS.get(pLocation)) + .addProcessor(BlockIgnoreProcessor.STRUCTURE_BLOCK); + } + + private static BlockPos makePosition(ResourceLocation pLocation, BlockPos pPos, int pDown) { + return pPos.offset(ModOceanRelicStructurePieces.OFFSETS.get(pLocation)).below(pDown); + } + @Override + protected void addAdditionalSaveData(StructurePieceSerializationContext pContext, CompoundTag pTag) { + super.addAdditionalSaveData(pContext, pTag); + pTag.putString("Rot", this.placeSettings.getRotation().name()); + } + + @Override + protected void handleDataMarker(String pName, BlockPos pPos, ServerLevelAccessor pLevel, RandomSource pRandom, BoundingBox pBox) { + if ("chest".equals(pName)) { + pLevel.setBlock(pPos, Blocks.AIR.defaultBlockState(), 3); + BlockEntity blockentity = pLevel.getBlockEntity(pPos.below()); + if (blockentity instanceof ChestBlockEntity) { + ((ChestBlockEntity)blockentity).setLootTable(BuiltInLootTables.IGLOO_CHEST, pRandom.nextLong()); + } + } + } + + @Override + public void postProcess( + WorldGenLevel pLevel, + StructureManager pStructureManager, + ChunkGenerator pGenerator, + RandomSource pRandom, + BoundingBox pBox, + ChunkPos pChunkPos, + BlockPos pPos + ) { + ResourceLocation resourceLocation = new ResourceLocation(this.templateName); + StructurePlaceSettings structureplacesettings = makeSettings(this.placeSettings.getRotation(), resourceLocation); + BlockPos blockpos = ModOceanRelicStructurePieces.OFFSETS.get(resourceLocation); + BlockPos blockpos1 = this.templatePosition + .offset(StructureTemplate.calculateRelativePosition(structureplacesettings, new BlockPos(3 - blockpos.getX(), 0, -blockpos.getZ()))); + int i = pLevel.getHeight(Heightmap.Types.WORLD_SURFACE_WG, blockpos1.getX(), blockpos1.getZ()); + BlockPos blockpos2 = this.templatePosition; + this.templatePosition = this.templatePosition.offset(0, i - 90 - 1, 0); + super.postProcess(pLevel, pStructureManager, pGenerator, pRandom, pBox, pChunkPos, pPos); + this.templatePosition = blockpos2; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModSoulRelicStructurePieces.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModSoulRelicStructurePieces.java new file mode 100644 index 0000000..e8aba9e --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModSoulRelicStructurePieces.java @@ -0,0 +1,112 @@ +package net.rswfb.enhancedstonebricks.world.structure.piece; + +import com.google.common.collect.ImmutableMap; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.StructureManager; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.ChestBlockEntity; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.StructurePieceAccessor; +import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.templatesystem.BlockIgnoreProcessor; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.rswfb.enhancedstonebricks.ExampleMod; +import net.rswfb.enhancedstonebricks.world.structure.*; + +import java.util.Map; + +public class ModSoulRelicStructurePieces { + static final ResourceLocation STRUCTURE_LOCATION_MOD_SOUL_RELIC_STRUCTURE = new ResourceLocation(ExampleMod.MODID,"mod_desert_relic_structure"); + static final Map PIVOTS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_SOUL_RELIC_STRUCTURE, new BlockPos(4, 0, 4) + ); + static final Map OFFSETS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_SOUL_RELIC_STRUCTURE, BlockPos.ZERO + ); + + public static void addPieces( + StructureTemplateManager pStructureTemplateManager, BlockPos pStartPos, Rotation pRotation, StructurePieceAccessor pPieces, RandomSource pRandom + ) { + pPieces.addPiece(new ModSoulRelicStructurePieces.ModSoulRelicStructurePiece(pStructureTemplateManager, STRUCTURE_LOCATION_MOD_SOUL_RELIC_STRUCTURE, pStartPos, pRotation, 0)); + } + + public static class ModSoulRelicStructurePiece extends TemplateStructurePiece { + + public ModSoulRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, ResourceLocation pLocation, BlockPos pStartPos, Rotation pRotation, int pDown) { + super(ModStructurePieceTypes.MOD_SOUL_RELIC_STRUCTURE_PIECE.get(), 0, pStructureTemplateManager, pLocation, pLocation.toString(), + makeSettings(pRotation, pLocation), + makePosition(pLocation, pStartPos, pDown) + ); + } + + + public ModSoulRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, CompoundTag pTag) { + super(ModStructurePieceTypes.MOD_SOUL_RELIC_STRUCTURE_PIECE.get(), pTag, pStructureTemplateManager, resourceLocation -> makeSettings(Rotation.valueOf(pTag.getString("Rot")), resourceLocation)); + } + + private static StructurePlaceSettings makeSettings(Rotation pRotation, ResourceLocation pLocation) { + return new StructurePlaceSettings() + .setRotation(pRotation) + .setMirror(Mirror.NONE) + .setRotationPivot(ModSoulRelicStructurePieces.PIVOTS.get(pLocation)) + .addProcessor(BlockIgnoreProcessor.STRUCTURE_BLOCK); + } + + private static BlockPos makePosition(ResourceLocation pLocation, BlockPos pPos, int pDown) { + return pPos.offset(ModSoulRelicStructurePieces.OFFSETS.get(pLocation)).below(pDown); + } + @Override + protected void addAdditionalSaveData(StructurePieceSerializationContext pContext, CompoundTag pTag) { + super.addAdditionalSaveData(pContext, pTag); + pTag.putString("Rot", this.placeSettings.getRotation().name()); + } + + @Override + protected void handleDataMarker(String pName, BlockPos pPos, ServerLevelAccessor pLevel, RandomSource pRandom, BoundingBox pBox) { + if ("chest".equals(pName)) { + pLevel.setBlock(pPos, Blocks.AIR.defaultBlockState(), 3); + BlockEntity blockentity = pLevel.getBlockEntity(pPos.below()); + if (blockentity instanceof ChestBlockEntity) { + ((ChestBlockEntity)blockentity).setLootTable(BuiltInLootTables.IGLOO_CHEST, pRandom.nextLong()); + } + } + } + + @Override + public void postProcess( + WorldGenLevel pLevel, + StructureManager pStructureManager, + ChunkGenerator pGenerator, + RandomSource pRandom, + BoundingBox pBox, + ChunkPos pChunkPos, + BlockPos pPos + ) { + ResourceLocation resourceLocation = new ResourceLocation(this.templateName); + StructurePlaceSettings structureplacesettings = makeSettings(this.placeSettings.getRotation(), resourceLocation); + BlockPos blockpos = ModSoulRelicStructurePieces.OFFSETS.get(resourceLocation); + BlockPos blockpos1 = this.templatePosition + .offset(StructureTemplate.calculateRelativePosition(structureplacesettings, new BlockPos(3 - blockpos.getX(), 0, -blockpos.getZ()))); + int i = pLevel.getHeight(Heightmap.Types.WORLD_SURFACE_WG, blockpos1.getX(), blockpos1.getZ()); + BlockPos blockpos2 = this.templatePosition; + this.templatePosition = this.templatePosition.offset(0, i - 90 - 1, 0); + super.postProcess(pLevel, pStructureManager, pGenerator, pRandom, pBox, pChunkPos, pPos); + this.templatePosition = blockpos2; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModVitalityRelicStructurePieces.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModVitalityRelicStructurePieces.java new file mode 100644 index 0000000..b80902a --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/piece/ModVitalityRelicStructurePieces.java @@ -0,0 +1,112 @@ +package net.rswfb.enhancedstonebricks.world.structure.piece; + +import com.google.common.collect.ImmutableMap; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.StructureManager; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.ChestBlockEntity; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.StructurePieceAccessor; +import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.templatesystem.BlockIgnoreProcessor; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; +import net.rswfb.enhancedstonebricks.ExampleMod; +import net.rswfb.enhancedstonebricks.world.structure.*; + +import java.util.Map; + +public class ModVitalityRelicStructurePieces { + static final ResourceLocation STRUCTURE_LOCATION_MOD_VITALITY_RELIC_STRUCTURE = new ResourceLocation(ExampleMod.MODID,"mod_desert_relic_structure"); + static final Map PIVOTS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_VITALITY_RELIC_STRUCTURE, new BlockPos(4, 0, 4) + ); + static final Map OFFSETS = ImmutableMap.of( + STRUCTURE_LOCATION_MOD_VITALITY_RELIC_STRUCTURE, BlockPos.ZERO + ); + + public static void addPieces( + StructureTemplateManager pStructureTemplateManager, BlockPos pStartPos, Rotation pRotation, StructurePieceAccessor pPieces, RandomSource pRandom + ) { + pPieces.addPiece(new ModVitalityRelicStructurePieces.ModVitalityRelicStructurePiece(pStructureTemplateManager, STRUCTURE_LOCATION_MOD_VITALITY_RELIC_STRUCTURE, pStartPos, pRotation, 0)); + } + + public static class ModVitalityRelicStructurePiece extends TemplateStructurePiece { + + public ModVitalityRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, ResourceLocation pLocation, BlockPos pStartPos, Rotation pRotation, int pDown) { + super(ModStructurePieceTypes.MOD_VITALITY_RELIC_STRUCTURE_PIECE.get(), 0, pStructureTemplateManager, pLocation, pLocation.toString(), + makeSettings(pRotation, pLocation), + makePosition(pLocation, pStartPos, pDown) + ); + } + + + public ModVitalityRelicStructurePiece(StructureTemplateManager pStructureTemplateManager, CompoundTag pTag) { + super(ModStructurePieceTypes.MOD_VITALITY_RELIC_STRUCTURE_PIECE.get(), pTag, pStructureTemplateManager, resourceLocation -> makeSettings(Rotation.valueOf(pTag.getString("Rot")), resourceLocation)); + } + + private static StructurePlaceSettings makeSettings(Rotation pRotation, ResourceLocation pLocation) { + return new StructurePlaceSettings() + .setRotation(pRotation) + .setMirror(Mirror.NONE) + .setRotationPivot(ModVitalityRelicStructurePieces.PIVOTS.get(pLocation)) + .addProcessor(BlockIgnoreProcessor.STRUCTURE_BLOCK); + } + + private static BlockPos makePosition(ResourceLocation pLocation, BlockPos pPos, int pDown) { + return pPos.offset(ModVitalityRelicStructurePieces.OFFSETS.get(pLocation)).below(pDown); + } + @Override + protected void addAdditionalSaveData(StructurePieceSerializationContext pContext, CompoundTag pTag) { + super.addAdditionalSaveData(pContext, pTag); + pTag.putString("Rot", this.placeSettings.getRotation().name()); + } + + @Override + protected void handleDataMarker(String pName, BlockPos pPos, ServerLevelAccessor pLevel, RandomSource pRandom, BoundingBox pBox) { + if ("chest".equals(pName)) { + pLevel.setBlock(pPos, Blocks.AIR.defaultBlockState(), 3); + BlockEntity blockentity = pLevel.getBlockEntity(pPos.below()); + if (blockentity instanceof ChestBlockEntity) { + ((ChestBlockEntity)blockentity).setLootTable(BuiltInLootTables.IGLOO_CHEST, pRandom.nextLong()); + } + } + } + + @Override + public void postProcess( + WorldGenLevel pLevel, + StructureManager pStructureManager, + ChunkGenerator pGenerator, + RandomSource pRandom, + BoundingBox pBox, + ChunkPos pChunkPos, + BlockPos pPos + ) { + ResourceLocation resourceLocation = new ResourceLocation(this.templateName); + StructurePlaceSettings structureplacesettings = makeSettings(this.placeSettings.getRotation(), resourceLocation); + BlockPos blockpos = ModVitalityRelicStructurePieces.OFFSETS.get(resourceLocation); + BlockPos blockpos1 = this.templatePosition + .offset(StructureTemplate.calculateRelativePosition(structureplacesettings, new BlockPos(3 - blockpos.getX(), 0, -blockpos.getZ()))); + int i = pLevel.getHeight(Heightmap.Types.WORLD_SURFACE_WG, blockpos1.getX(), blockpos1.getZ()); + BlockPos blockpos2 = this.templatePosition; + this.templatePosition = this.templatePosition.offset(0, i - 90 - 1, 0); + super.postProcess(pLevel, pStructureManager, pGenerator, pRandom, pBox, pChunkPos, pPos); + this.templatePosition = blockpos2; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModDesertRelicStructure.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModDesertRelicStructure.java index 4e2dad4..6d95b37 100644 --- a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModDesertRelicStructure.java +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModDesertRelicStructure.java @@ -15,7 +15,6 @@ public class ModDesertRelicStructure extends Structure { - public static final Codec CODEC = simpleCodec(ModDesertRelicStructure::new); public ModDesertRelicStructure(StructureSettings pSettings) { diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModEndRelicStructure.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModEndRelicStructure.java new file mode 100644 index 0000000..71a127a --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModEndRelicStructure.java @@ -0,0 +1,41 @@ +package net.rswfb.enhancedstonebricks.world.structure.structure; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.WorldgenRandom; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; +import net.rswfb.enhancedstonebricks.world.structure.ModStructureType; +import net.rswfb.enhancedstonebricks.world.structure.piece.ModEndRelicStructurePieces; + +import java.util.Optional; + +public class ModEndRelicStructure extends Structure { + public static final Codec CODEC = simpleCodec(ModEndRelicStructure::new); + + public ModEndRelicStructure(StructureSettings pSettings) { + super(pSettings); + } + + @Override + protected Optional findGenerationPoint(GenerationContext pContext) { + return onTopOfChunkCenter(pContext, Heightmap.Types.WORLD_SURFACE_WG, structurePiecesBuilder -> this.generatePieces(structurePiecesBuilder, pContext)); + } + + private void generatePieces(StructurePiecesBuilder pBuilder, Structure.GenerationContext pContext) { + ChunkPos chunkpos = pContext.chunkPos(); + WorldgenRandom worldgenrandom = pContext.random(); + BlockPos blockpos = new BlockPos(chunkpos.getMinBlockX(), 90, chunkpos.getMinBlockZ()); + Rotation rotation = Rotation.getRandom(worldgenrandom); + ModEndRelicStructurePieces.addPieces(pContext.structureTemplateManager(), blockpos, rotation, pBuilder, worldgenrandom); + } + + @Override + public StructureType type() { + return ModStructureType.MOD_END_RELIC_STRUCTURE.get(); + } +} diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModNetherRelicStructure.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModNetherRelicStructure.java new file mode 100644 index 0000000..fdd9416 --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModNetherRelicStructure.java @@ -0,0 +1,42 @@ +package net.rswfb.enhancedstonebricks.world.structure.structure; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.WorldgenRandom; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; +import net.rswfb.enhancedstonebricks.world.structure.ModStructureType; +import net.rswfb.enhancedstonebricks.world.structure.piece.ModNetherRelicStructurePieces; + +import java.util.Optional; + +public class ModNetherRelicStructure extends Structure { + + public static final Codec CODEC = simpleCodec(ModNetherRelicStructure::new); + + public ModNetherRelicStructure(StructureSettings pSettings) { + super(pSettings); + } + + @Override + protected Optional findGenerationPoint(GenerationContext pContext) { + return onTopOfChunkCenter(pContext, Heightmap.Types.WORLD_SURFACE_WG, structurePiecesBuilder -> this.generatePieces(structurePiecesBuilder, pContext)); + } + + private void generatePieces(StructurePiecesBuilder pBuilder, Structure.GenerationContext pContext) { + ChunkPos chunkpos = pContext.chunkPos(); + WorldgenRandom worldgenrandom = pContext.random(); + BlockPos blockpos = new BlockPos(chunkpos.getMinBlockX(), 90, chunkpos.getMinBlockZ()); + Rotation rotation = Rotation.getRandom(worldgenrandom); + ModNetherRelicStructurePieces.addPieces(pContext.structureTemplateManager(), blockpos, rotation, pBuilder, worldgenrandom); + } + + @Override + public StructureType type() { + return ModStructureType.MOD_NETHER_RELIC_STRUCTURE.get(); + } +} diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModOceanRelicStructure.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModOceanRelicStructure.java new file mode 100644 index 0000000..91555e1 --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModOceanRelicStructure.java @@ -0,0 +1,42 @@ +package net.rswfb.enhancedstonebricks.world.structure.structure; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.WorldgenRandom; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; +import net.rswfb.enhancedstonebricks.world.structure.ModStructureType; +import net.rswfb.enhancedstonebricks.world.structure.piece.ModOceanRelicStructurePieces; + +import java.util.Optional; + +public class ModOceanRelicStructure extends Structure { + + public static final Codec CODEC = simpleCodec(ModOceanRelicStructure::new); + + public ModOceanRelicStructure(StructureSettings pSettings) { + super(pSettings); + } + + @Override + protected Optional findGenerationPoint(GenerationContext pContext) { + return onTopOfChunkCenter(pContext, Heightmap.Types.WORLD_SURFACE_WG, structurePiecesBuilder -> this.generatePieces(structurePiecesBuilder, pContext)); + } + + private void generatePieces(StructurePiecesBuilder pBuilder, Structure.GenerationContext pContext) { + ChunkPos chunkpos = pContext.chunkPos(); + WorldgenRandom worldgenrandom = pContext.random(); + BlockPos blockpos = new BlockPos(chunkpos.getMinBlockX(), 90, chunkpos.getMinBlockZ()); + Rotation rotation = Rotation.getRandom(worldgenrandom); + ModOceanRelicStructurePieces.addPieces(pContext.structureTemplateManager(), blockpos, rotation, pBuilder, worldgenrandom); + } + + @Override + public StructureType type() { + return ModStructureType.MOD_OCEAN_RELIC_STRUCTURE.get(); + } +} diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModSoulRelicStructure.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModSoulRelicStructure.java new file mode 100644 index 0000000..23565c5 --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModSoulRelicStructure.java @@ -0,0 +1,42 @@ +package net.rswfb.enhancedstonebricks.world.structure.structure; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.WorldgenRandom; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; +import net.rswfb.enhancedstonebricks.world.structure.ModStructureType; +import net.rswfb.enhancedstonebricks.world.structure.piece.ModSoulRelicStructurePieces; + +import java.util.Optional; + +public class ModSoulRelicStructure extends Structure { + + public static final Codec CODEC = simpleCodec(ModSoulRelicStructure::new); + + public ModSoulRelicStructure(StructureSettings pSettings) { + super(pSettings); + } + + @Override + protected Optional findGenerationPoint(GenerationContext pContext) { + return onTopOfChunkCenter(pContext, Heightmap.Types.WORLD_SURFACE_WG, structurePiecesBuilder -> this.generatePieces(structurePiecesBuilder, pContext)); + } + + private void generatePieces(StructurePiecesBuilder pBuilder, Structure.GenerationContext pContext) { + ChunkPos chunkpos = pContext.chunkPos(); + WorldgenRandom worldgenrandom = pContext.random(); + BlockPos blockpos = new BlockPos(chunkpos.getMinBlockX(), 90, chunkpos.getMinBlockZ()); + Rotation rotation = Rotation.getRandom(worldgenrandom); + ModSoulRelicStructurePieces.addPieces(pContext.structureTemplateManager(), blockpos, rotation, pBuilder, worldgenrandom); + } + + @Override + public StructureType type() { + return ModStructureType.MOD_SOUL_RELIC_STRUCTURE.get(); + } +} diff --git a/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModVitalityRelicStructure.java b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModVitalityRelicStructure.java new file mode 100644 index 0000000..e41faa6 --- /dev/null +++ b/src/main/java/net/rswfb/enhancedstonebricks/world/structure/structure/ModVitalityRelicStructure.java @@ -0,0 +1,42 @@ +package net.rswfb.enhancedstonebricks.world.structure.structure; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.WorldgenRandom; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePiecesBuilder; +import net.rswfb.enhancedstonebricks.world.structure.ModStructureType; +import net.rswfb.enhancedstonebricks.world.structure.piece.ModVitalityRelicStructurePieces; + +import java.util.Optional; + +public class ModVitalityRelicStructure extends Structure { + + public static final Codec CODEC = simpleCodec(ModVitalityRelicStructure::new); + + public ModVitalityRelicStructure(StructureSettings pSettings) { + super(pSettings); + } + + @Override + protected Optional findGenerationPoint(GenerationContext pContext) { + return onTopOfChunkCenter(pContext, Heightmap.Types.WORLD_SURFACE_WG, structurePiecesBuilder -> this.generatePieces(structurePiecesBuilder, pContext)); + } + + private void generatePieces(StructurePiecesBuilder pBuilder, Structure.GenerationContext pContext) { + ChunkPos chunkpos = pContext.chunkPos(); + WorldgenRandom worldgenrandom = pContext.random(); + BlockPos blockpos = new BlockPos(chunkpos.getMinBlockX(), 90, chunkpos.getMinBlockZ()); + Rotation rotation = Rotation.getRandom(worldgenrandom); + ModVitalityRelicStructurePieces.addPieces(pContext.structureTemplateManager(), blockpos, rotation, pBuilder, worldgenrandom); + } + + @Override + public StructureType type() { + return ModStructureType.MOD_VITALITY_RELIC_STRUCTURE.get(); + } +} \ No newline at end of file diff --git a/src/main/resources/data/enhancedstonebricks/structures/mod_desert_relic_structure.nbt b/src/main/resources/data/enhancedstonebricks/structures/mod_desert_relic_structure.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a7ec0fe85c7c9d3184f3cdb4c10bdd20a88ccd6b GIT binary patch literal 1054 zcmV+(1mXK1iwFP!00000|Hau&Z{s!)24IpiR&1xcZBK2{UV7=d=e@S)qNlwYw9VMU zDv}{m2--i@zgXH4ZJA4nZ;C=|AP8)~o_RPS{gt&4E5Ww>+mI0A{Il>s59i-2u{5gqxy^*WK_bF>%~AX(Qk%f9U93DJv@@(i8?Y-XOUQY?1_7Yj0EZs zkl~451eh6^At&m@y*S}X%}_*jip07^G@pl&%y2%-k+U=GwHn#a!(Qu=i~=$=k&)u_ zJwKM2@<_lV-{9eii~`IGFe|{L01p8k0z4rzHA4c-1eh7{FyLXpBl^dStiV>bCEMkz$^i?Oqf%9K4(^dSpjARm=$0qz)XOd z05bt*0?Z8TX9mm+m>Dp0!kju^oH2*Y(EQa%W@vslk|Cf@?hMA}xK7CA&R}dF%jC{r zY>quDVUFjc0J8$j3NWjLIrdP(9IuN2GXZ7-%#<+49tQR^C(L7YruH)@%wu(OXE6Sp z`+g)t6PfV2TL77{|WgKIpQQV)0wk)$aTy*!kWcZuf56&K~u)GMmd6 zd#SqlC`KO6D>R@LfyFT(9V-EQ9elhh? z*E{oi^R_K_pX`Udv8HvK)>P%L2ZsE2gQ}fN6#VfPXj)w#%*L6v)w{+yeGLsKQFV6_ z|GM;N+njv=(paBA>gq`pTYq2Uhy3{Br_ol;;b8V+@uVwjmVQP@eewe9T3sHFZYhc< zy({a3;1^@vwd>D=Nj*1>JKp#kKjyNv|8Mt2-L&rb<=We(`-1J+=(o*2MDGvLXQ)eA zuKfc?Ntbo^k^Ya+UwhpU{T0=n1iQAoZQk$i&(bUJMORgFn`$ Y?es^}+OnzrM?WY21-a?SMtLCs05|s$vH$=8 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/enhancedstonebricks/structures/mod_end_relic_structure.nbt b/src/main/resources/data/enhancedstonebricks/structures/mod_end_relic_structure.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a7ec0fe85c7c9d3184f3cdb4c10bdd20a88ccd6b GIT binary patch literal 1054 zcmV+(1mXK1iwFP!00000|Hau&Z{s!)24IpiR&1xcZBK2{UV7=d=e@S)qNlwYw9VMU zDv}{m2--i@zgXH4ZJA4nZ;C=|AP8)~o_RPS{gt&4E5Ww>+mI0A{Il>s59i-2u{5gqxy^*WK_bF>%~AX(Qk%f9U93DJv@@(i8?Y-XOUQY?1_7Yj0EZs zkl~451eh6^At&m@y*S}X%}_*jip07^G@pl&%y2%-k+U=GwHn#a!(Qu=i~=$=k&)u_ zJwKM2@<_lV-{9eii~`IGFe|{L01p8k0z4rzHA4c-1eh7{FyLXpBl^dStiV>bCEMkz$^i?Oqf%9K4(^dSpjARm=$0qz)XOd z05bt*0?Z8TX9mm+m>Dp0!kju^oH2*Y(EQa%W@vslk|Cf@?hMA}xK7CA&R}dF%jC{r zY>quDVUFjc0J8$j3NWjLIrdP(9IuN2GXZ7-%#<+49tQR^C(L7YruH)@%wu(OXE6Sp z`+g)t6PfV2TL77{|WgKIpQQV)0wk)$aTy*!kWcZuf56&K~u)GMmd6 zd#SqlC`KO6D>R@LfyFT(9V-EQ9elhh? z*E{oi^R_K_pX`Udv8HvK)>P%L2ZsE2gQ}fN6#VfPXj)w#%*L6v)w{+yeGLsKQFV6_ z|GM;N+njv=(paBA>gq`pTYq2Uhy3{Br_ol;;b8V+@uVwjmVQP@eewe9T3sHFZYhc< zy({a3;1^@vwd>D=Nj*1>JKp#kKjyNv|8Mt2-L&rb<=We(`-1J+=(o*2MDGvLXQ)eA zuKfc?Ntbo^k^Ya+UwhpU{T0=n1iQAoZQk$i&(bUJMORgFn`$ Y?es^}+OnzrM?WY21-a?SMtLCs05|s$vH$=8 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/enhancedstonebricks/structures/mod_nether_relic_structure.nbt b/src/main/resources/data/enhancedstonebricks/structures/mod_nether_relic_structure.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a7ec0fe85c7c9d3184f3cdb4c10bdd20a88ccd6b GIT binary patch literal 1054 zcmV+(1mXK1iwFP!00000|Hau&Z{s!)24IpiR&1xcZBK2{UV7=d=e@S)qNlwYw9VMU zDv}{m2--i@zgXH4ZJA4nZ;C=|AP8)~o_RPS{gt&4E5Ww>+mI0A{Il>s59i-2u{5gqxy^*WK_bF>%~AX(Qk%f9U93DJv@@(i8?Y-XOUQY?1_7Yj0EZs zkl~451eh6^At&m@y*S}X%}_*jip07^G@pl&%y2%-k+U=GwHn#a!(Qu=i~=$=k&)u_ zJwKM2@<_lV-{9eii~`IGFe|{L01p8k0z4rzHA4c-1eh7{FyLXpBl^dStiV>bCEMkz$^i?Oqf%9K4(^dSpjARm=$0qz)XOd z05bt*0?Z8TX9mm+m>Dp0!kju^oH2*Y(EQa%W@vslk|Cf@?hMA}xK7CA&R}dF%jC{r zY>quDVUFjc0J8$j3NWjLIrdP(9IuN2GXZ7-%#<+49tQR^C(L7YruH)@%wu(OXE6Sp z`+g)t6PfV2TL77{|WgKIpQQV)0wk)$aTy*!kWcZuf56&K~u)GMmd6 zd#SqlC`KO6D>R@LfyFT(9V-EQ9elhh? z*E{oi^R_K_pX`Udv8HvK)>P%L2ZsE2gQ}fN6#VfPXj)w#%*L6v)w{+yeGLsKQFV6_ z|GM;N+njv=(paBA>gq`pTYq2Uhy3{Br_ol;;b8V+@uVwjmVQP@eewe9T3sHFZYhc< zy({a3;1^@vwd>D=Nj*1>JKp#kKjyNv|8Mt2-L&rb<=We(`-1J+=(o*2MDGvLXQ)eA zuKfc?Ntbo^k^Ya+UwhpU{T0=n1iQAoZQk$i&(bUJMORgFn`$ Y?es^}+OnzrM?WY21-a?SMtLCs05|s$vH$=8 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/enhancedstonebricks/structures/mod_ocean_relic_structure.nbt b/src/main/resources/data/enhancedstonebricks/structures/mod_ocean_relic_structure.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a7ec0fe85c7c9d3184f3cdb4c10bdd20a88ccd6b GIT binary patch literal 1054 zcmV+(1mXK1iwFP!00000|Hau&Z{s!)24IpiR&1xcZBK2{UV7=d=e@S)qNlwYw9VMU zDv}{m2--i@zgXH4ZJA4nZ;C=|AP8)~o_RPS{gt&4E5Ww>+mI0A{Il>s59i-2u{5gqxy^*WK_bF>%~AX(Qk%f9U93DJv@@(i8?Y-XOUQY?1_7Yj0EZs zkl~451eh6^At&m@y*S}X%}_*jip07^G@pl&%y2%-k+U=GwHn#a!(Qu=i~=$=k&)u_ zJwKM2@<_lV-{9eii~`IGFe|{L01p8k0z4rzHA4c-1eh7{FyLXpBl^dStiV>bCEMkz$^i?Oqf%9K4(^dSpjARm=$0qz)XOd z05bt*0?Z8TX9mm+m>Dp0!kju^oH2*Y(EQa%W@vslk|Cf@?hMA}xK7CA&R}dF%jC{r zY>quDVUFjc0J8$j3NWjLIrdP(9IuN2GXZ7-%#<+49tQR^C(L7YruH)@%wu(OXE6Sp z`+g)t6PfV2TL77{|WgKIpQQV)0wk)$aTy*!kWcZuf56&K~u)GMmd6 zd#SqlC`KO6D>R@LfyFT(9V-EQ9elhh? z*E{oi^R_K_pX`Udv8HvK)>P%L2ZsE2gQ}fN6#VfPXj)w#%*L6v)w{+yeGLsKQFV6_ z|GM;N+njv=(paBA>gq`pTYq2Uhy3{Br_ol;;b8V+@uVwjmVQP@eewe9T3sHFZYhc< zy({a3;1^@vwd>D=Nj*1>JKp#kKjyNv|8Mt2-L&rb<=We(`-1J+=(o*2MDGvLXQ)eA zuKfc?Ntbo^k^Ya+UwhpU{T0=n1iQAoZQk$i&(bUJMORgFn`$ Y?es^}+OnzrM?WY21-a?SMtLCs05|s$vH$=8 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/enhancedstonebricks/structures/mod_soul_relic_structure.nbt b/src/main/resources/data/enhancedstonebricks/structures/mod_soul_relic_structure.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a7ec0fe85c7c9d3184f3cdb4c10bdd20a88ccd6b GIT binary patch literal 1054 zcmV+(1mXK1iwFP!00000|Hau&Z{s!)24IpiR&1xcZBK2{UV7=d=e@S)qNlwYw9VMU zDv}{m2--i@zgXH4ZJA4nZ;C=|AP8)~o_RPS{gt&4E5Ww>+mI0A{Il>s59i-2u{5gqxy^*WK_bF>%~AX(Qk%f9U93DJv@@(i8?Y-XOUQY?1_7Yj0EZs zkl~451eh6^At&m@y*S}X%}_*jip07^G@pl&%y2%-k+U=GwHn#a!(Qu=i~=$=k&)u_ zJwKM2@<_lV-{9eii~`IGFe|{L01p8k0z4rzHA4c-1eh7{FyLXpBl^dStiV>bCEMkz$^i?Oqf%9K4(^dSpjARm=$0qz)XOd z05bt*0?Z8TX9mm+m>Dp0!kju^oH2*Y(EQa%W@vslk|Cf@?hMA}xK7CA&R}dF%jC{r zY>quDVUFjc0J8$j3NWjLIrdP(9IuN2GXZ7-%#<+49tQR^C(L7YruH)@%wu(OXE6Sp z`+g)t6PfV2TL77{|WgKIpQQV)0wk)$aTy*!kWcZuf56&K~u)GMmd6 zd#SqlC`KO6D>R@LfyFT(9V-EQ9elhh? z*E{oi^R_K_pX`Udv8HvK)>P%L2ZsE2gQ}fN6#VfPXj)w#%*L6v)w{+yeGLsKQFV6_ z|GM;N+njv=(paBA>gq`pTYq2Uhy3{Br_ol;;b8V+@uVwjmVQP@eewe9T3sHFZYhc< zy({a3;1^@vwd>D=Nj*1>JKp#kKjyNv|8Mt2-L&rb<=We(`-1J+=(o*2MDGvLXQ)eA zuKfc?Ntbo^k^Ya+UwhpU{T0=n1iQAoZQk$i&(bUJMORgFn`$ Y?es^}+OnzrM?WY21-a?SMtLCs05|s$vH$=8 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/enhancedstonebricks/structures/mod_vitality_relic_structure.nbt b/src/main/resources/data/enhancedstonebricks/structures/mod_vitality_relic_structure.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a7ec0fe85c7c9d3184f3cdb4c10bdd20a88ccd6b GIT binary patch literal 1054 zcmV+(1mXK1iwFP!00000|Hau&Z{s!)24IpiR&1xcZBK2{UV7=d=e@S)qNlwYw9VMU zDv}{m2--i@zgXH4ZJA4nZ;C=|AP8)~o_RPS{gt&4E5Ww>+mI0A{Il>s59i-2u{5gqxy^*WK_bF>%~AX(Qk%f9U93DJv@@(i8?Y-XOUQY?1_7Yj0EZs zkl~451eh6^At&m@y*S}X%}_*jip07^G@pl&%y2%-k+U=GwHn#a!(Qu=i~=$=k&)u_ zJwKM2@<_lV-{9eii~`IGFe|{L01p8k0z4rzHA4c-1eh7{FyLXpBl^dStiV>bCEMkz$^i?Oqf%9K4(^dSpjARm=$0qz)XOd z05bt*0?Z8TX9mm+m>Dp0!kju^oH2*Y(EQa%W@vslk|Cf@?hMA}xK7CA&R}dF%jC{r zY>quDVUFjc0J8$j3NWjLIrdP(9IuN2GXZ7-%#<+49tQR^C(L7YruH)@%wu(OXE6Sp z`+g)t6PfV2TL77{|WgKIpQQV)0wk)$aTy*!kWcZuf56&K~u)GMmd6 zd#SqlC`KO6D>R@LfyFT(9V-EQ9elhh? z*E{oi^R_K_pX`Udv8HvK)>P%L2ZsE2gQ}fN6#VfPXj)w#%*L6v)w{+yeGLsKQFV6_ z|GM;N+njv=(paBA>gq`pTYq2Uhy3{Br_ol;;b8V+@uVwjmVQP@eewe9T3sHFZYhc< zy({a3;1^@vwd>D=Nj*1>JKp#kKjyNv|8Mt2-L&rb<=We(`-1J+=(o*2MDGvLXQ)eA zuKfc?Ntbo^k^Ya+UwhpU{T0=n1iQAoZQk$i&(bUJMORgFn`$ Y?es^}+OnzrM?WY21-a?SMtLCs05|s$vH$=8 literal 0 HcmV?d00001