From 28336e328ca8347d89d66833042d39a2cd4d28d3 Mon Sep 17 00:00:00 2001 From: XiaoHuNao Date: Sun, 14 Jan 2024 19:26:39 +0800 Subject: [PATCH] update --- .../aftermath/{nether_raid.json => raid.json} | 9 +- .../worldgen/biome/has_burnt_structure.json | 6 + .../tags/worldgen/biome/has_city.json | 5 + .../worldgen/biome/has_expansion_build.json | 6 + .../worldgen/biome/has_house_of_sakura.json | 5 + .../tags/worldgen/biome/has_nether_raid.json | 5 + .../tags/worldgen/structure/nether_raid.json | 8 ++ .../worldgen/biome/barren.json | 99 +++++++++++++++ .../worldgen/structure/brick_well.json | 6 + .../worldgen/structure/burnt_structure1.json | 6 + .../worldgen/structure/burnt_structure2.json | 6 + .../worldgen/structure/burnt_structure3.json | 6 + .../worldgen/structure/burnt_structure4.json | 6 + .../worldgen/structure/burnt_structure5.json | 6 + .../worldgen/structure/burnt_structure6.json | 6 + .../worldgen/structure/camp.json | 6 + .../worldgen/structure/city.json | 7 + .../worldgen/structure/cobblestone_pile.json | 6 + .../worldgen/structure/construction1.json | 6 + .../worldgen/structure/construction2.json | 6 + .../worldgen/structure/house_of_sakura.json | 7 + .../worldgen/structure/logs.json | 6 + .../structure/nether_invasion_portal.json | 7 + .../worldgen/structure/tent.json | 6 + .../worldgen/structure/wagon_cargo1.json | 6 + .../worldgen/structure/wagon_cargo2.json | 6 + .../worldgen/structure/wagon_cargo3.json | 6 + .../worldgen/structure/wagon_cargo4.json | 6 + .../worldgen/structure/wagon_cargo5.json | 6 + .../worldgen/structure/wagon_cargo6.json | 6 + .../worldgen/structure_set/brick_well.json | 14 ++ .../structure_set/burnt_structure1.json | 14 ++ .../structure_set/burnt_structure2.json | 14 ++ .../structure_set/burnt_structure3.json | 14 ++ .../structure_set/burnt_structure4.json | 14 ++ .../structure_set/burnt_structure5.json | 14 ++ .../structure_set/burnt_structure6.json | 14 ++ .../worldgen/structure_set/camp.json | 14 ++ .../worldgen/structure_set/city.json | 14 ++ .../structure_set/cobblestone_pile.json | 14 ++ .../worldgen/structure_set/construction1.json | 14 ++ .../worldgen/structure_set/construction2.json | 14 ++ .../structure_set/house_of_sakura.json | 14 ++ .../worldgen/structure_set/logs.json | 14 ++ .../structure_set/nether_invasion_portal.json | 14 ++ .../worldgen/structure_set/tent.json | 14 ++ .../worldgen/structure_set/wagon_cargo1.json | 14 ++ .../worldgen/structure_set/wagon_cargo2.json | 14 ++ .../worldgen/structure_set/wagon_cargo3.json | 14 ++ .../worldgen/structure_set/wagon_cargo4.json | 14 ++ .../worldgen/structure_set/wagon_cargo5.json | 14 ++ .../worldgen/structure_set/wagon_cargo6.json | 14 ++ .../SurvivingTheAftermath.java | 5 + .../api/AftermathManager.java | 40 +++--- .../api/IAftermath.java | 7 +- .../api/base/BaseAftermath.java | 110 +++++++++------- .../api/base/BaseAftermathModule.java | 10 +- .../api/module/IAftermathModule.java | 2 + .../api/module/IEntityInfoModule.java | 7 +- .../common/capability/AftermathCap.java | 1 + .../datagen/AftermathModuleProviders.java | 9 +- .../common/data/datagen/EventSubscriber.java | 6 +- .../common/data/datagen/ModTagProviders.java | 51 ++++++++ .../data/datagen/RegistryDataGenerator.java | 27 ++++ .../raid/NetherRaidModuleProvider.java | 36 +++--- .../data/datagen/raid/RaidModuleProvider.java | 45 +++++++ .../data/pack/AftermathModuleLoader.java | 3 +- .../common/event/PlayerEvent.java | 37 +++++- .../subscriber/ForgeEventSubscriber.java | 28 ++++ .../event/subscriber/RaidEventSubscriber.java | 49 +++++++ .../common/init/ModAftermathModule.java | 8 +- .../common/init/ModBiomes.java | 29 +++++ .../common/init/ModStructurePieceTypes.java | 44 +++++++ .../common/init/ModStructureSets.java | 66 ++++++++++ .../common/init/ModStructureTypes.java | 47 +++++++ .../common/init/ModStructures.java | 64 ++++++++++ .../common/init/ModTags.java | 26 ++++ .../common/level/biomes/ModBiomesMaker.java | 34 +++++ .../condition/LevelConditionModule.java | 4 +- .../condition/PlayerConditionModule.java | 7 +- .../condition/StructureConditionModule.java | 14 +- .../condition/WeatherConditionModule.java | 4 + .../module/condition/XpConditionModule.java | 12 +- .../module/entity_info/EntityInfoModule.java | 17 +++ .../EntityInfoWithEquipmentModule.java | 21 +++ .../common/raid/BaseRaid.java | 120 +++++++++++++++--- .../common/raid/NetherRaid.java | 46 +++---- .../common/raid/module/BaseRaidModule.java | 23 +++- .../common/raid/module/NetherRaidModule.java | 71 +++++------ .../common/structure/AbstractStructure.java | 99 +++++++++++++++ .../common/structure/BurntStructure.java | 56 ++++++++ .../common/structure/CityStructure.java | 73 +++++++++++ .../common/structure/HouseOfSakura.java | 42 ++++++ .../common/structure/NetherRaidStructure.java | 44 +++++++ .../expansion/BrickWellStructure.java | 43 +++++++ .../structure/expansion/CampStructure.java | 43 +++++++ .../expansion/CobblestonePileStructure.java | 42 ++++++ .../expansion/ConstructionStructure.java | 45 +++++++ .../structure/expansion/LogsStructure.java | 42 ++++++ .../structure/expansion/TentStructure.java | 42 ++++++ .../expansion/WagonCargoStructure.java | 57 +++++++++ .../structure/expansion/package-info.java | 9 ++ .../common/structure/package-info.java | 9 ++ .../util/CodecUtils.java | 21 +++ .../util/StructureUtils.java | 62 +++++++++ .../structures/brick_well.nbt | Bin 0 -> 565 bytes .../structures/burnt_structure1.nbt | Bin 0 -> 3551 bytes .../structures/burnt_structure2.nbt | Bin 0 -> 3028 bytes .../structures/burnt_structure3.nbt | Bin 0 -> 2071 bytes .../structures/burnt_structure4.nbt | Bin 0 -> 2033 bytes .../structures/burnt_structure5.nbt | Bin 0 -> 517 bytes .../structures/burnt_structure6.nbt | Bin 0 -> 511 bytes .../structures/camp.nbt | Bin 0 -> 2350 bytes .../structures/city.nbt | Bin 0 -> 348800 bytes .../structures/cobblestone_pile.nbt | Bin 0 -> 705 bytes .../structures/construction1.nbt | Bin 0 -> 4362 bytes .../structures/construction2.nbt | Bin 0 -> 3486 bytes .../structures/house_of_sakura.nbt | Bin 0 -> 5561 bytes .../structures/logs.nbt | Bin 0 -> 543 bytes .../structures/nether_invasion_portal.nbt | Bin 0 -> 40819 bytes .../nether_invasion_portal_transformed.nbt | Bin 0 -> 40135 bytes .../structures/tent.nbt | Bin 0 -> 2338 bytes .../structures/wagon_cargo1.nbt | Bin 0 -> 733 bytes .../structures/wagon_cargo2.nbt | Bin 0 -> 707 bytes .../structures/wagon_cargo3.nbt | Bin 0 -> 703 bytes .../structures/wagon_cargo4.nbt | Bin 0 -> 703 bytes .../structures/wagon_cargo5.nbt | Bin 0 -> 712 bytes .../structures/wagon_cargo6.nbt | Bin 0 -> 706 bytes .../surviving_the_aftermath.mixins.json | 1 - 129 files changed, 2249 insertions(+), 197 deletions(-) rename src/generated/resources/data/surviving_the_aftermath/aftermath/{nether_raid.json => raid.json} (80%) create mode 100644 src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_burnt_structure.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_city.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_expansion_build.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_house_of_sakura.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_nether_raid.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/tags/worldgen/structure/nether_raid.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/biome/barren.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/brick_well.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure1.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure2.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure3.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure4.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure5.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure6.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/camp.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/city.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/cobblestone_pile.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/construction1.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/construction2.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/house_of_sakura.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/logs.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/nether_invasion_portal.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/tent.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo1.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo2.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo3.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo4.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo5.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo6.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/brick_well.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure1.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure2.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure3.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure4.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure5.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure6.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/camp.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/city.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/cobblestone_pile.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/construction1.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/construction2.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/house_of_sakura.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/logs.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/nether_invasion_portal.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/tent.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo1.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo2.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo3.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo4.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo5.json create mode 100644 src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo6.json create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/ModTagProviders.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/RegistryDataGenerator.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/raid/RaidModuleProvider.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/event/subscriber/ForgeEventSubscriber.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/event/subscriber/RaidEventSubscriber.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/init/ModBiomes.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructurePieceTypes.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructureSets.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructureTypes.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructures.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/init/ModTags.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/level/biomes/ModBiomesMaker.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/AbstractStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/BurntStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/CityStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/HouseOfSakura.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/NetherRaidStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/BrickWellStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/CampStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/CobblestonePileStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/ConstructionStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/LogsStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/TentStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/WagonCargoStructure.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/package-info.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/common/structure/package-info.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/util/CodecUtils.java create mode 100644 src/main/java/com/pancake/surviving_the_aftermath/util/StructureUtils.java create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/brick_well.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/burnt_structure1.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/burnt_structure2.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/burnt_structure3.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/burnt_structure4.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/burnt_structure5.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/burnt_structure6.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/camp.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/city.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/cobblestone_pile.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/construction1.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/construction2.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/house_of_sakura.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/logs.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/nether_invasion_portal.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/nether_invasion_portal_transformed.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/tent.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo1.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo2.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo3.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo4.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo5.nbt create mode 100644 src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo6.nbt diff --git a/src/generated/resources/data/surviving_the_aftermath/aftermath/nether_raid.json b/src/generated/resources/data/surviving_the_aftermath/aftermath/raid.json similarity index 80% rename from src/generated/resources/data/surviving_the_aftermath/aftermath/nether_raid.json rename to src/generated/resources/data/surviving_the_aftermath/aftermath/raid.json index b659657..9bf666c 100644 --- a/src/generated/resources/data/surviving_the_aftermath/aftermath/nether_raid.json +++ b/src/generated/resources/data/surviving_the_aftermath/aftermath/raid.json @@ -1,6 +1,11 @@ { - "aftermath_module": "surviving_the_aftermath:nether_raid", - "ready_time": 10, + "aftermath_module": "surviving_the_aftermath:raid", + "conditions": [ + { + "condition": "surviving_the_aftermath:structure_condition", + "value": "surviving_the_aftermath:nether_invasion_portal" + } + ], "rewards": [ { "data": "minecraft:stone", diff --git a/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_burnt_structure.json b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_burnt_structure.json new file mode 100644 index 0000000..ef5b750 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_burnt_structure.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#minecraft:is_badlands", + "#minecraft:has_structure/desert_pyramid" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_city.json b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_city.json new file mode 100644 index 0000000..8b5e6c2 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_city.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:plains" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_expansion_build.json b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_expansion_build.json new file mode 100644 index 0000000..3b9fc26 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_expansion_build.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#minecraft:is_forest", + "minecraft:plains" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_house_of_sakura.json b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_house_of_sakura.json new file mode 100644 index 0000000..4c83435 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_house_of_sakura.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:cherry_grove" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_nether_raid.json b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_nether_raid.json new file mode 100644 index 0000000..8b5e6c2 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/biome/has_nether_raid.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:plains" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/structure/nether_raid.json b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/structure/nether_raid.json new file mode 100644 index 0000000..35c6d99 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/tags/worldgen/structure/nether_raid.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "surviving_the_aftermath:nether_invasion_portal", + "required": false + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/biome/barren.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/biome/barren.json new file mode 100644 index 0000000..9a4a748 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/biome/barren.json @@ -0,0 +1,99 @@ +{ + "carvers": {}, + "downfall": 0.9, + "effects": { + "fog_color": 12638463, + "particle": { + "options": { + "type": "minecraft:white_ash" + }, + "probability": 0.118093334 + }, + "sky_color": 7254527, + "water_color": 4159204, + "water_fog_color": 329011 + }, + "features": [], + "has_precipitation": true, + "spawn_costs": {}, + "spawners": { + "ambient": [ + { + "type": "minecraft:bat", + "maxCount": 8, + "minCount": 8, + "weight": 10 + } + ], + "axolotls": [], + "creature": [], + "misc": [], + "monster": [ + { + "type": "minecraft:zombified_piglin", + "maxCount": 4, + "minCount": 4, + "weight": 100 + }, + { + "type": "minecraft:spider", + "maxCount": 4, + "minCount": 4, + "weight": 100 + }, + { + "type": "minecraft:zombie", + "maxCount": 4, + "minCount": 4, + "weight": 95 + }, + { + "type": "minecraft:zombie_villager", + "maxCount": 1, + "minCount": 1, + "weight": 5 + }, + { + "type": "minecraft:skeleton", + "maxCount": 4, + "minCount": 4, + "weight": 100 + }, + { + "type": "minecraft:creeper", + "maxCount": 4, + "minCount": 4, + "weight": 100 + }, + { + "type": "minecraft:slime", + "maxCount": 4, + "minCount": 4, + "weight": 100 + }, + { + "type": "minecraft:enderman", + "maxCount": 4, + "minCount": 1, + "weight": 10 + }, + { + "type": "minecraft:witch", + "maxCount": 1, + "minCount": 1, + "weight": 5 + } + ], + "underground_water_creature": [ + { + "type": "minecraft:glow_squid", + "maxCount": 6, + "minCount": 4, + "weight": 10 + } + ], + "water_ambient": [], + "water_creature": [] + }, + "temperature": 0.8 +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/brick_well.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/brick_well.json new file mode 100644 index 0000000..89a9a53 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/brick_well.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:brick_well", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure1.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure1.json new file mode 100644 index 0000000..0630684 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure1.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:burnt_structure1", + "biomes": "#surviving_the_aftermath:has_burnt_structure", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure2.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure2.json new file mode 100644 index 0000000..2252609 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure2.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:burnt_structure2", + "biomes": "#surviving_the_aftermath:has_burnt_structure", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure3.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure3.json new file mode 100644 index 0000000..9e4630e --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure3.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:burnt_structure3", + "biomes": "#surviving_the_aftermath:has_burnt_structure", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure4.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure4.json new file mode 100644 index 0000000..56800ff --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure4.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:burnt_structure4", + "biomes": "#surviving_the_aftermath:has_burnt_structure", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure5.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure5.json new file mode 100644 index 0000000..e3a8072 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure5.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:burnt_structure5", + "biomes": "#surviving_the_aftermath:has_burnt_structure", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure6.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure6.json new file mode 100644 index 0000000..6c38abf --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/burnt_structure6.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:burnt_structure6", + "biomes": "#surviving_the_aftermath:has_burnt_structure", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/camp.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/camp.json new file mode 100644 index 0000000..d82a136 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/camp.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:camo", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/city.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/city.json new file mode 100644 index 0000000..1e86215 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/city.json @@ -0,0 +1,7 @@ +{ + "type": "surviving_the_aftermath:city", + "biomes": "#surviving_the_aftermath:has_city", + "spawn_overrides": {}, + "step": "surface_structures", + "terrain_adaptation": "beard_box" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/cobblestone_pile.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/cobblestone_pile.json new file mode 100644 index 0000000..e70ac97 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/cobblestone_pile.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:cobblestone_pile", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/construction1.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/construction1.json new file mode 100644 index 0000000..fb5eae0 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/construction1.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:construction1", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/construction2.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/construction2.json new file mode 100644 index 0000000..51315c1 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/construction2.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:construction2", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/house_of_sakura.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/house_of_sakura.json new file mode 100644 index 0000000..f4108e7 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/house_of_sakura.json @@ -0,0 +1,7 @@ +{ + "type": "surviving_the_aftermath:house_of_sakura", + "biomes": "#surviving_the_aftermath:has_house_of_sakura", + "spawn_overrides": {}, + "step": "surface_structures", + "terrain_adaptation": "beard_thin" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/logs.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/logs.json new file mode 100644 index 0000000..5a7a6f9 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/logs.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:logs", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/nether_invasion_portal.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/nether_invasion_portal.json new file mode 100644 index 0000000..5be4d76 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/nether_invasion_portal.json @@ -0,0 +1,7 @@ +{ + "type": "surviving_the_aftermath:nether_invasion_portal", + "biomes": "#surviving_the_aftermath:has_nether_raid", + "spawn_overrides": {}, + "step": "surface_structures", + "terrain_adaptation": "beard_thin" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/tent.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/tent.json new file mode 100644 index 0000000..a5c9ac5 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/tent.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:tent", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo1.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo1.json new file mode 100644 index 0000000..f38ea66 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo1.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:wagon_cargo1", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo2.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo2.json new file mode 100644 index 0000000..20898ff --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo2.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:wagon_cargo2", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo3.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo3.json new file mode 100644 index 0000000..71430d5 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo3.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:wagon_cargo3", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo4.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo4.json new file mode 100644 index 0000000..0ed1164 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo4.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:wagon_cargo4", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo5.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo5.json new file mode 100644 index 0000000..aec37c1 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo5.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:wagon_cargo5", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo6.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo6.json new file mode 100644 index 0000000..930fff6 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure/wagon_cargo6.json @@ -0,0 +1,6 @@ +{ + "type": "surviving_the_aftermath:wagon_cargo6", + "biomes": "#surviving_the_aftermath:has_expansion_build", + "spawn_overrides": {}, + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/brick_well.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/brick_well.json new file mode 100644 index 0000000..6ca4cf7 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/brick_well.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1561323135, + "separation": 40, + "spacing": 95 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:brick_well", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure1.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure1.json new file mode 100644 index 0000000..9e17eb0 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure1.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 104706480, + "separation": 40, + "spacing": 80 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:burnt_structure1", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure2.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure2.json new file mode 100644 index 0000000..81b4c91 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure2.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 705540248, + "separation": 40, + "spacing": 80 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:burnt_structure2", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure3.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure3.json new file mode 100644 index 0000000..048bca7 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure3.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1838764692, + "separation": 40, + "spacing": 80 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:burnt_structure3", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure4.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure4.json new file mode 100644 index 0000000..6951be1 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure4.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1669956657, + "separation": 40, + "spacing": 80 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:burnt_structure4", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure5.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure5.json new file mode 100644 index 0000000..22a5f15 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure5.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1334899266, + "separation": 40, + "spacing": 80 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:burnt_structure5", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure6.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure6.json new file mode 100644 index 0000000..6d87eb2 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/burnt_structure6.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 2119656745, + "separation": 40, + "spacing": 80 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:burnt_structure6", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/camp.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/camp.json new file mode 100644 index 0000000..05fb9b0 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/camp.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1310135130, + "separation": 40, + "spacing": 100 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:camp", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/city.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/city.json new file mode 100644 index 0000000..8adf2a3 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/city.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 2057068235, + "separation": 40, + "spacing": 80 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:city", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/cobblestone_pile.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/cobblestone_pile.json new file mode 100644 index 0000000..07854b4 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/cobblestone_pile.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 795416633, + "separation": 40, + "spacing": 75 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:cobblestone_pile", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/construction1.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/construction1.json new file mode 100644 index 0000000..b6f33bf --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/construction1.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 761313131, + "separation": 40, + "spacing": 100 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:construction1", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/construction2.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/construction2.json new file mode 100644 index 0000000..d00696b --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/construction2.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 498231431, + "separation": 40, + "spacing": 85 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:construction2", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/house_of_sakura.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/house_of_sakura.json new file mode 100644 index 0000000..6273a69 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/house_of_sakura.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1712650656, + "separation": 40, + "spacing": 80 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:house_of_sakura", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/logs.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/logs.json new file mode 100644 index 0000000..6737d2a --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/logs.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1321561321, + "separation": 40, + "spacing": 90 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:logs", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/nether_invasion_portal.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/nether_invasion_portal.json new file mode 100644 index 0000000..a85de7f --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/nether_invasion_portal.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1629143766, + "separation": 40, + "spacing": 100 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:nether_invasion_portal", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/tent.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/tent.json new file mode 100644 index 0000000..6ae998c --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/tent.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1653821652, + "separation": 40, + "spacing": 90 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:tent", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo1.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo1.json new file mode 100644 index 0000000..5bb2ffc --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo1.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1365330241, + "separation": 40, + "spacing": 90 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:wagon_cargo1", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo2.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo2.json new file mode 100644 index 0000000..d94eaab --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo2.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 161766032, + "separation": 40, + "spacing": 90 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:wagon_cargo2", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo3.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo3.json new file mode 100644 index 0000000..526a6b2 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo3.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 1733648479, + "separation": 40, + "spacing": 90 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:wagon_cargo3", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo4.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo4.json new file mode 100644 index 0000000..7591f65 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo4.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 2081980804, + "separation": 40, + "spacing": 90 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:wagon_cargo4", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo5.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo5.json new file mode 100644 index 0000000..aab2798 --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo5.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 418595573, + "separation": 40, + "spacing": 90 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:wagon_cargo5", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo6.json b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo6.json new file mode 100644 index 0000000..82457cd --- /dev/null +++ b/src/generated/resources/data/surviving_the_aftermath/worldgen/structure_set/wagon_cargo6.json @@ -0,0 +1,14 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "salt": 947847921, + "separation": 40, + "spacing": 90 + }, + "structures": [ + { + "structure": "surviving_the_aftermath:wagon_cargo6", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/SurvivingTheAftermath.java b/src/main/java/com/pancake/surviving_the_aftermath/SurvivingTheAftermath.java index 5d11830..e9b70e9 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/SurvivingTheAftermath.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/SurvivingTheAftermath.java @@ -6,6 +6,8 @@ import com.pancake.surviving_the_aftermath.common.data.datagen.EventSubscriber; import com.pancake.surviving_the_aftermath.common.data.pack.AftermathModuleLoader; import com.pancake.surviving_the_aftermath.common.init.ModAftermathModule; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; import com.pancake.surviving_the_aftermath.common.init.ModuleRegistry; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.MinecraftForge; @@ -27,6 +29,9 @@ public SurvivingTheAftermath() { bus.addListener(EventSubscriber::onGatherData); // bus.addListener(ModuleRegistry::onNewRegistry); ModuleRegistry.register(bus); + + ModStructurePieceTypes.STRUCTURE_PIECE_TYPES.register(bus); + ModStructureTypes.STRUCTURE_TYPES.register(bus); MinecraftForge.EVENT_BUS.addListener(this::onDataPackLoad); } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/api/AftermathManager.java b/src/main/java/com/pancake/surviving_the_aftermath/api/AftermathManager.java index 1a2b8c8..fd79c09 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/api/AftermathManager.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/api/AftermathManager.java @@ -3,11 +3,15 @@ import com.google.common.collect.Maps; import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; import com.pancake.surviving_the_aftermath.api.module.IAftermathModule; +import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; +import javax.annotation.Nullable; import java.util.Iterator; import java.util.Map; import java.util.Optional; @@ -22,12 +26,12 @@ private AftermathManager() {} public void tick() { Iterator> iterator = AFTERMATH_MAP.values().iterator(); while (iterator.hasNext()) { - IAftermath raid = iterator.next(); -// if (raid.isEnd() || raid.isLose()) { -// iterator.remove(); // 通过迭代器安全地移除元素 -// } else { -// raid.tick(); -// } + IAftermath aftermath = iterator.next(); + if (aftermath.isEnd() || aftermath.isLose()) { + iterator.remove(); // 通过迭代器安全地移除元素 + } else { + aftermath.tick(); + } } } @@ -47,20 +51,20 @@ public Optional> getAftermath(UUID uuid) { return Optional.ofNullable(AFTERMATH_MAP.get(uuid)); } - public boolean create(IAftermath aftermath) { -// if (aftermath.isCreate()) { -// add(aftermath); -// return true; -// } -// return false; + public boolean create(IAftermath aftermath, Level level, BlockPos pos, @Nullable Player player) { + if (aftermath.isCreate(level, pos, player)) { + add(aftermath); + return true; + } + return false; } public void create(Level level, CompoundTag compoundTag) { -// IAftermath.CODEC.get().parse(NbtOps.INSTANCE,compoundTag) -// .resultOrPartial(SurvivingTheAftermath.LOGGER::error) -// .ifPresent(aftermath -> { -// aftermath.setServerLevel(level); -// add(aftermath); -// }); + IAftermath.CODEC.get().parse(NbtOps.INSTANCE,compoundTag) + .resultOrPartial(SurvivingTheAftermath.LOGGER::error) + .ifPresent(aftermath -> { + aftermath.setLevel(level); + add(aftermath); + }); } } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/api/IAftermath.java b/src/main/java/com/pancake/surviving_the_aftermath/api/IAftermath.java index c57253a..5abbd5c 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/api/IAftermath.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/api/IAftermath.java @@ -6,6 +6,7 @@ import com.pancake.surviving_the_aftermath.common.init.ModuleRegistry; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; @@ -23,6 +24,9 @@ public interface IAftermath extends IModule extends IModule getPlayers(); Set getEnemies(); - BaseAftermathModule getModule(); + IAftermathModule getModule(); UUID getUUID(); float getProgressPercent(); void insertTag(LivingEntity entity); + void setLevel(Level level); } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/api/base/BaseAftermath.java b/src/main/java/com/pancake/surviving_the_aftermath/api/base/BaseAftermath.java index f8d32f8..f079d77 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/api/base/BaseAftermath.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/api/base/BaseAftermath.java @@ -5,57 +5,52 @@ import com.pancake.surviving_the_aftermath.api.AftermathState; import com.pancake.surviving_the_aftermath.api.IAftermath; import com.pancake.surviving_the_aftermath.api.module.IAftermathModule; -import com.pancake.surviving_the_aftermath.api.module.IConditionModule; import com.pancake.surviving_the_aftermath.common.data.pack.AftermathModuleLoader; import com.pancake.surviving_the_aftermath.common.module.condition.StructureConditionModule; -import com.pancake.surviving_the_aftermath.util.RegistryUtil; +import com.pancake.surviving_the_aftermath.util.StructureUtils; import net.minecraft.core.BlockPos; -import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerBossEvent; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.BossEvent; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; -import net.minecraft.world.level.StructureManager; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.properties.StructureMode; -import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraft.world.level.levelgen.structure.StructurePiece; -import net.minecraft.world.level.levelgen.structure.StructureStart; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; +import org.jetbrains.annotations.NotNull; +import javax.annotation.Nullable; import java.util.*; import java.util.function.Predicate; -public abstract class BaseAftermath implements IAftermath { +public abstract class BaseAftermath implements IAftermath { protected final AftermathManager MANAGER = AftermathManager.getInstance(); protected AftermathState state; protected Level level; protected Set players = Sets.newHashSet(); protected Set enemies = Sets.newHashSet(); protected T module; + protected BlockPos centerPos; + protected Set spawnPos = Sets.newHashSet(); protected final ServerBossEvent progress = new ServerBossEvent(Component.empty(), BossEvent.BossBarColor.RED, BossEvent.BossBarOverlay.PROGRESS); protected final UUID uuid = progress.getId(); protected float progressPercent = progress.getProgress(); + protected int rewardTime; - public BaseAftermath(AftermathState state, Set players, Set enemies, T module, float progressPercent) { - this.state = state; + public BaseAftermath(Set players, Set enemies, Set spawnPos,T module, BlockPos centerPos, float progressPercent, int rewardTime) { this.players = players; this.enemies = enemies; + this.spawnPos = spawnPos; this.module = module; + this.centerPos = centerPos; this.progressPercent = progressPercent; + this.rewardTime = rewardTime; } - public BaseAftermath(Level level, BlockPos pos, Player player){ + + public BaseAftermath(Level level, BlockPos pos){ this.level = level; this.module = (T) getRandomAftermathModule(); - getSpawnPos(level,pos); + SetSpawnPos(level,pos); } @@ -67,36 +62,31 @@ public IAftermathModule getRandomAftermathModule() { return modules.stream().findAny().get(); } - public void getSpawnPos(Level level, BlockPos pos) { - if (level instanceof ServerLevel serverLevel){ - Optional module = getModule().getConditions().stream() - .filter(condition -> condition instanceof StructureConditionModule structureModule) + public void SetSpawnPos(Level level, BlockPos pos) { + if (level instanceof ServerLevel serverLevel) { + Optional module = getModule().getConditions().stream() + .filter(condition -> condition instanceof StructureConditionModule) + .map(condition -> (StructureConditionModule) condition) .findFirst(); - module.ifPresent(structureModule ->{ - if (structureModule instanceof StructureConditionModule structureConditionModule){ - if (structureConditionModule.checkCondition(level,pos)) { - String moduleStructure = structureConditionModule.getStructure(); - ResourceKey key = RegistryUtil.keyStructure(moduleStructure); - Structure structure = level.registryAccess().registryOrThrow(Registries.STRUCTURE).get(key); - - StructureManager structureManager1 = serverLevel.structureManager(); - if (structure != null) { - StructureStart structureAt = structureManager1.getStructureAt(pos, structure); - ChunkPos chunkPos = structureAt.getChunkPos(); - List pieces = structureAt.getPieces(); - for (StructurePiece piece : pieces) { - BlockPos realPos = piece.getLocatorPosition().offset(chunkPos.x * 16, 0, chunkPos.z * 16); // 计算真实的世界坐标 - System.out.println("realPos : " + realPos + "BlockState : " + serverLevel.getBlockState(realPos).getBlock()); - } - } - } - } - }); + if (module.isPresent()){ + StructureUtils.handleDataMarker(serverLevel, pos, module.get().getResourceLocation(), (serverLevel1,metadata,startPos,metaPos) -> { + centerPos = startPos; + setMobSpawnPos(serverLevel1,metadata,startPos,metaPos); + }); + }else { + centerPos = pos; + spawnPos.add(pos); + } } } + public void setMobSpawnPos(ServerLevel serverLevel, String metadata, BlockPos startPos, BlockPos metaPos) { + spawnPos.add(metaPos); + } + + @Override - public boolean isCreate(Level level, BlockPos pos, Player player) { + public boolean isCreate(Level level, BlockPos pos, @Nullable Player player) { return getModule().isCreate(level, pos,player); } @@ -141,10 +131,15 @@ public Predicate validPlayer() { public void spawnRewards() { } + @Override + public void end() { + this.progress.removeAllPlayers(); + } - - - + @Override + public void lose() { + this.progress.removeAllPlayers(); + } @Override public boolean isEnd() { @@ -170,10 +165,12 @@ public Set getPlayers() { public Set getEnemies() { return enemies; } + @Override - public T getModule() { + public IAftermathModule getModule() { return module; } + @Override public UUID getUUID() { return uuid; @@ -182,4 +179,21 @@ public UUID getUUID() { public float getProgressPercent() { return progressPercent; } + + public BlockPos getCenterPos() { + return centerPos; + } + + public Set getSpawnPos() { + return spawnPos; + } + + public int getRewardTime() { + return rewardTime; + } + + @Override + public void setLevel(Level level) { + this.level = level; + } } \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/api/base/BaseAftermathModule.java b/src/main/java/com/pancake/surviving_the_aftermath/api/base/BaseAftermathModule.java index be795f0..5431377 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/api/base/BaseAftermathModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/api/base/BaseAftermathModule.java @@ -11,7 +11,9 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; +import javax.annotation.Nullable; import java.util.List; import java.util.Optional; @@ -29,20 +31,19 @@ public BaseAftermathModule() { } - //过滤条件 public List getFilterConditions(List conditions){ Optional module = conditions.stream() .filter(condition -> condition instanceof StructureConditionModule) .findFirst(); - module.ifPresent(iConditionModule -> - conditions.removeIf(condition -> condition instanceof StructureConditionModule && condition != iConditionModule)); +// module.ifPresent(iConditionModule -> +// conditions.removeIf(condition -> condition instanceof StructureConditionModule && condition != iConditionModule)); return conditions; } @Override - public boolean isCreate(Level level, BlockPos pos, Player player) { + public boolean isCreate(Level level, BlockPos pos, @Nullable Player player) { conditions.forEach(condition -> { if(condition instanceof LevelConditionModule levelConditionModule){ levelConditionModule.checkCondition(level,pos); @@ -54,6 +55,7 @@ public boolean isCreate(Level level, BlockPos pos, Player player) { return true; } + @Override public List getConditions() { return conditions; } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/api/module/IAftermathModule.java b/src/main/java/com/pancake/surviving_the_aftermath/api/module/IAftermathModule.java index b9f7be1..3b41658 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/api/module/IAftermathModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/api/module/IAftermathModule.java @@ -8,6 +8,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; +import java.util.List; import java.util.function.Supplier; public interface IAftermathModule extends IModule { @@ -18,4 +19,5 @@ public interface IAftermathModule extends IModule { void setJsonName(String jsonName); boolean isCreate(Level level,BlockPos pos, Player player); + List getConditions(); } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/api/module/IEntityInfoModule.java b/src/main/java/com/pancake/surviving_the_aftermath/api/module/IEntityInfoModule.java index 2d72168..6c85f66 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/api/module/IEntityInfoModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/api/module/IEntityInfoModule.java @@ -1,14 +1,17 @@ package com.pancake.surviving_the_aftermath.api.module; import com.mojang.serialization.Codec; -import com.pancake.surviving_the_aftermath.api.ICodec; import com.pancake.surviving_the_aftermath.api.IModule; import com.pancake.surviving_the_aftermath.common.init.ModuleRegistry; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.util.LazyOptional; +import java.util.List; import java.util.function.Supplier; public interface IEntityInfoModule extends IModule { Supplier> CODEC = () -> ModuleRegistry.ENTITY_INFO_REGISTRY.get().getCodec() .dispatch("entity_info", IEntityInfoModule::type, IEntityInfoModule::codec); - + List> spawnEntity(Level level); } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/capability/AftermathCap.java b/src/main/java/com/pancake/surviving_the_aftermath/common/capability/AftermathCap.java index 67dcec4..37bd61b 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/capability/AftermathCap.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/capability/AftermathCap.java @@ -3,6 +3,7 @@ import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; import com.pancake.surviving_the_aftermath.api.AftermathManager; import com.pancake.surviving_the_aftermath.api.IAftermath; +import com.pancake.surviving_the_aftermath.api.module.IAftermathModule; import com.pancake.surviving_the_aftermath.common.init.ModCapability; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/AftermathModuleProviders.java b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/AftermathModuleProviders.java index c975829..7132bf9 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/AftermathModuleProviders.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/AftermathModuleProviders.java @@ -35,12 +35,15 @@ public abstract class AftermathModuleProviders implements DataProvider { private final PackOutput output; private final String modId; + private final String locale; private final List modules = Lists.newArrayList(); - public AftermathModuleProviders(PackOutput output, String modId) { + + public AftermathModuleProviders(PackOutput output ,String locale) { this.output = output; - this.modId = modId; + this.modId = SurvivingTheAftermath.MOD_ID; + this.locale = locale; } @@ -80,6 +83,6 @@ public void addModule(T module) { @Override @NotNull public String getName() { - return "AftermathModuleProviders"; + return "AftermathModuleProviders" + locale; } } \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/EventSubscriber.java b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/EventSubscriber.java index 55bbc4e..282ac5e 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/EventSubscriber.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/EventSubscriber.java @@ -1,6 +1,7 @@ package com.pancake.surviving_the_aftermath.common.data.datagen; import com.pancake.surviving_the_aftermath.common.data.datagen.raid.NetherRaidModuleProvider; +import com.pancake.surviving_the_aftermath.common.data.datagen.raid.RaidModuleProvider; import net.minecraft.core.HolderLookup; import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; @@ -16,8 +17,11 @@ public static void onGatherData(GatherDataEvent event) { PackOutput output = generator.getPackOutput(); ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); CompletableFuture provider = event.getLookupProvider(); - + generator.addProvider(event.includeServer(), new ModTagProviders.ModBiomeTagsProvider(output, provider, existingFileHelper)); + generator.addProvider(event.includeServer(), new ModTagProviders.ModStructureTagsProvider(output, provider, existingFileHelper)); generator.addProvider(event.includeServer(), new NetherRaidModuleProvider(output)); + generator.addProvider(event.includeServer(), new RaidModuleProvider(output)); + generator.addProvider(event.includeServer(), new RegistryDataGenerator(output, provider)); } } \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/ModTagProviders.java b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/ModTagProviders.java new file mode 100644 index 0000000..e3604db --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/ModTagProviders.java @@ -0,0 +1,51 @@ +package com.pancake.surviving_the_aftermath.common.data.datagen; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructures; +import com.pancake.surviving_the_aftermath.common.init.ModTags; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.BiomeTagsProvider; +import net.minecraft.data.tags.StructureTagsProvider; +import net.minecraft.tags.BiomeTags; +import net.minecraft.world.level.biome.Biomes; +import net.minecraftforge.common.data.ExistingFileHelper; +import org.jetbrains.annotations.Nullable; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.concurrent.CompletableFuture; + +@ParametersAreNonnullByDefault +public class ModTagProviders { + public static class ModBiomeTagsProvider extends BiomeTagsProvider { + + public ModBiomeTagsProvider(PackOutput output, CompletableFuture lookupProvider, + @Nullable ExistingFileHelper existingFileHelper) { + super(output, lookupProvider, SurvivingTheAftermath.MOD_ID, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider provider) { + tag(ModTags.HAS_CITY).add(Biomes.PLAINS); + tag(ModTags.HAS_NETHER_RAID).add(Biomes.PLAINS); + tag(ModTags.HAS_HOUSE_OF_SAKURA).add(Biomes.CHERRY_GROVE); + tag(ModTags.HAS_EXPANSION_BUILD).addTag(BiomeTags.IS_FOREST).add(Biomes.PLAINS); + tag(ModTags.HAS_BURNT_STRUCTURE).addTag(BiomeTags.IS_BADLANDS).addTag(BiomeTags.HAS_DESERT_PYRAMID); + } + + } + + public static class ModStructureTagsProvider extends StructureTagsProvider { + + public ModStructureTagsProvider(PackOutput output, CompletableFuture provider, + @Nullable ExistingFileHelper existingFileHelper) { + super(output, provider, SurvivingTheAftermath.MOD_ID, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider provider) { + tag(ModTags.NETHER_RAID).addOptional(ModStructures.NETHER_RAID.location()); + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/RegistryDataGenerator.java b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/RegistryDataGenerator.java new file mode 100644 index 0000000..f6a2c5e --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/RegistryDataGenerator.java @@ -0,0 +1,27 @@ +package com.pancake.surviving_the_aftermath.common.data.datagen; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModBiomes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureSets; +import com.pancake.surviving_the_aftermath.common.init.ModStructures; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; + +import java.util.Set; +import java.util.concurrent.CompletableFuture; + +public class RegistryDataGenerator extends DatapackBuiltinEntriesProvider { + + public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + .add(Registries.BIOME, ModBiomes::bootstrap) + .add(Registries.STRUCTURE, ModStructures::bootstrap) + .add(Registries.STRUCTURE_SET, ModStructureSets::bootstrap); + + public RegistryDataGenerator(PackOutput output, CompletableFuture provider) { + super(output, provider, BUILDER, Set.of(SurvivingTheAftermath.MOD_ID)); + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/raid/NetherRaidModuleProvider.java b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/raid/NetherRaidModuleProvider.java index c351983..188099d 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/raid/NetherRaidModuleProvider.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/raid/NetherRaidModuleProvider.java @@ -17,28 +17,28 @@ public class NetherRaidModuleProvider extends AftermathModuleProviders { public NetherRaidModuleProvider(PackOutput output) { - super(output, "surviving_the_aftermath"); + super(output, "NetherRaid"); } @Override public void addModules() { - RandomAmountModule randomAmountModule = new RandomAmountModule(1, 5); - IntegerAmountModule integerAmountModule = new IntegerAmountModule(1); - EntityInfoModule entityInfoModule = new EntityInfoModule(EntityType.PIG, randomAmountModule); - NetherRaidModule netherRaidModule = new NetherRaidModule(); - ItemWeightedModule itemWeightedModule = new ItemWeightedModule(List.of( - WeightedEntry.wrap(Items.STONE, 10), - WeightedEntry.wrap(Items.STONE_AXE, 20) - )); - EntityInfoWithEquipmentModule equipmentModule = new EntityInfoWithEquipmentModule(EntityType.PIG, integerAmountModule,itemWeightedModule); - netherRaidModule.setReadyTime(10).setWaves(List.of( - List.of(entityInfoModule), - List.of(equipmentModule) - )).setRewards(itemWeightedModule).setConditions(List.of( - new StructureConditionModule("surviving_the_aftermath:") - )); - - addModule(netherRaidModule); +// RandomAmountModule randomAmountModule = new RandomAmountModule(1, 5); +// IntegerAmountModule integerAmountModule = new IntegerAmountModule(1); +// EntityInfoModule entityInfoModule = new EntityInfoModule(EntityType.PIG, randomAmountModule); +// NetherRaidModule netherRaidModule = new NetherRaidModule(); +// ItemWeightedModule itemWeightedModule = new ItemWeightedModule(List.of( +// WeightedEntry.wrap(Items.STONE, 10), +// WeightedEntry.wrap(Items.STONE_AXE, 20) +// )); +// EntityInfoWithEquipmentModule equipmentModule = new EntityInfoWithEquipmentModule(EntityType.PIG, integerAmountModule,itemWeightedModule); +// netherRaidModule.setReadyTime(10).setWaves(List.of( +// List.of(entityInfoModule), +// List.of(equipmentModule) +// )).setRewards(itemWeightedModule).setConditions(List.of( +// new StructureConditionModule("surviving_the_aftermath:nether_invasion_portal") +// )).setJsonName("nether_raid"); +// +// addModule(netherRaidModule); } } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/raid/RaidModuleProvider.java b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/raid/RaidModuleProvider.java new file mode 100644 index 0000000..f0eb502 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/data/datagen/raid/RaidModuleProvider.java @@ -0,0 +1,45 @@ +package com.pancake.surviving_the_aftermath.common.data.datagen.raid; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.data.datagen.AftermathModuleProviders; +import com.pancake.surviving_the_aftermath.common.module.amount.IntegerAmountModule; +import com.pancake.surviving_the_aftermath.common.module.amount.RandomAmountModule; +import com.pancake.surviving_the_aftermath.common.module.condition.StructureConditionModule; +import com.pancake.surviving_the_aftermath.common.module.entity_info.EntityInfoModule; +import com.pancake.surviving_the_aftermath.common.module.entity_info.EntityInfoWithEquipmentModule; +import com.pancake.surviving_the_aftermath.common.module.weighted.ItemWeightedModule; +import com.pancake.surviving_the_aftermath.common.raid.module.BaseRaidModule; +import com.pancake.surviving_the_aftermath.common.raid.module.NetherRaidModule; +import net.minecraft.data.PackOutput; +import net.minecraft.util.random.WeightedEntry; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Items; + +import java.util.List; + +public class RaidModuleProvider extends AftermathModuleProviders { + public RaidModuleProvider(PackOutput output) { + super(output, "Raid"); + } + + @Override + public void addModules() { + RandomAmountModule randomAmountModule = new RandomAmountModule(1, 5); + IntegerAmountModule integerAmountModule = new IntegerAmountModule(1); + EntityInfoModule entityInfoModule = new EntityInfoModule(EntityType.PIG, randomAmountModule); + BaseRaidModule RaidModule = new BaseRaidModule(); + ItemWeightedModule itemWeightedModule = new ItemWeightedModule(List.of( + WeightedEntry.wrap(Items.STONE, 10), + WeightedEntry.wrap(Items.STONE_AXE, 20) + )); + EntityInfoWithEquipmentModule equipmentModule = new EntityInfoWithEquipmentModule(EntityType.PIG, integerAmountModule,itemWeightedModule); + RaidModule.setWaves(List.of( + List.of(entityInfoModule), + List.of(equipmentModule) + )).setRewards(itemWeightedModule).setConditions(List.of( + new StructureConditionModule("surviving_the_aftermath:nether_invasion_portal") + )).setJsonName("raid"); + + addModule(RaidModule); + } +} diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/data/pack/AftermathModuleLoader.java b/src/main/java/com/pancake/surviving_the_aftermath/common/data/pack/AftermathModuleLoader.java index 2c01ad3..462b832 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/data/pack/AftermathModuleLoader.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/data/pack/AftermathModuleLoader.java @@ -38,7 +38,8 @@ protected void apply(Map jsonElementMap, @NotNull .parse(JsonOps.INSTANCE, asJsonObject) .resultOrPartial(SurvivingTheAftermath.LOGGER::error) .ifPresent(aftermathModule -> { - AFTERMATH_MODULE_MAP.put(resourceLocation, aftermathModule); + String string = asJsonObject.get("aftermath_module").getAsString(); + AFTERMATH_MODULE_MAP.put(ResourceLocation.tryParse(string), aftermathModule); }); }); } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/event/PlayerEvent.java b/src/main/java/com/pancake/surviving_the_aftermath/common/event/PlayerEvent.java index 49cae62..ddb42b1 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/event/PlayerEvent.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/event/PlayerEvent.java @@ -5,34 +5,55 @@ import com.mojang.serialization.DataResult; import com.mojang.serialization.DynamicOps; import com.mojang.serialization.JsonOps; +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; import com.pancake.surviving_the_aftermath.api.module.IAftermathModule; import com.pancake.surviving_the_aftermath.api.module.IAmountModule; import com.pancake.surviving_the_aftermath.api.module.IEntityInfoModule; import com.pancake.surviving_the_aftermath.common.data.pack.AftermathModuleLoader; import com.pancake.surviving_the_aftermath.common.init.ModAftermathModule; +import com.pancake.surviving_the_aftermath.common.init.ModStructures; import com.pancake.surviving_the_aftermath.common.init.ModuleRegistry; import com.pancake.surviving_the_aftermath.common.module.amount.IntegerAmountModule; import com.pancake.surviving_the_aftermath.common.module.amount.RandomAmountModule; +import com.pancake.surviving_the_aftermath.common.module.condition.StructureConditionModule; import com.pancake.surviving_the_aftermath.common.module.entity_info.EntityInfoModule; import com.pancake.surviving_the_aftermath.common.module.weighted.ItemWeightedModule; import com.pancake.surviving_the_aftermath.common.raid.BaseRaid; import com.pancake.surviving_the_aftermath.common.raid.module.NetherRaidModule; +import com.pancake.surviving_the_aftermath.util.RegistryUtil; +import com.pancake.surviving_the_aftermath.util.StructureUtils; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.util.random.WeightedEntry; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; +import net.minecraft.world.level.StructureManager; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureStart; +import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.ForgeRegistries; import java.util.List; +import java.util.Objects; +import java.util.Optional; @Mod.EventBusSubscriber public class PlayerEvent { + private static Object blockPos; + @SubscribeEvent public static void onPlayerInteractRightClickBlock(PlayerInteractEvent.RightClickBlock event) { Level level = event.getLevel(); @@ -40,7 +61,21 @@ public static void onPlayerInteractRightClickBlock(PlayerInteractEvent.RightClic if (level.isClientSide() || hand != InteractionHand.MAIN_HAND) { return; } - new BaseRaid<>(level, event.getPos(), event.getEntity()); + + BlockPos pos = event.getPos(); +// new BaseRaid<>(level, event.getPos(), event.getEntity()); + +// System.out.println(AftermathModuleLoader.AFTERMATH_MODULE_MAP); + + +// if (level instanceof ServerLevel serverLevel){ +// StructureUtils.handleDataMarker(serverLevel, pos, SurvivingTheAftermath.asResource("nether_invasion_portal"), (serverLevel1, metadata, blockPos) -> { +// +// }); +// } + } + + } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/event/subscriber/ForgeEventSubscriber.java b/src/main/java/com/pancake/surviving_the_aftermath/common/event/subscriber/ForgeEventSubscriber.java new file mode 100644 index 0000000..c92caf5 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/event/subscriber/ForgeEventSubscriber.java @@ -0,0 +1,28 @@ +package com.pancake.surviving_the_aftermath.common.event.subscriber; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModTags; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.storage.ServerLevelData; +import net.minecraftforge.event.level.LevelEvent.CreateSpawnPosition; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; + +@EventBusSubscriber(modid = SurvivingTheAftermath.MOD_ID, bus = Bus.FORGE) +public class ForgeEventSubscriber { + @SubscribeEvent + public static void changeSpawn(CreateSpawnPosition event) { + if (event.getLevel() instanceof ServerLevel level) { + ServerLevelData settings = event.getSettings(); + BlockPos pos = level.findNearestMapStructure(ModTags.NETHER_RAID, + new BlockPos(settings.getXSpawn(), settings.getYSpawn(), settings.getZSpawn()), 100, false); + if (pos != null) { + settings.setSpawn(new BlockPos(pos.getX(), level.getHeight(Heightmap.Types.WORLD_SURFACE, pos.getX(), pos.getZ()), pos.getZ()), 0); + event.setCanceled(true); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/event/subscriber/RaidEventSubscriber.java b/src/main/java/com/pancake/surviving_the_aftermath/common/event/subscriber/RaidEventSubscriber.java new file mode 100644 index 0000000..2a77dff --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/event/subscriber/RaidEventSubscriber.java @@ -0,0 +1,49 @@ +package com.pancake.surviving_the_aftermath.common.event.subscriber; + + +import com.pancake.surviving_the_aftermath.api.AftermathManager; +import com.pancake.surviving_the_aftermath.common.init.ModStructures; +import com.pancake.surviving_the_aftermath.common.raid.BaseRaid; +import com.pancake.surviving_the_aftermath.common.raid.module.BaseRaidModule; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.Registries; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.portal.PortalShape; +import net.minecraftforge.event.entity.EntityTravelToDimensionEvent; +import net.minecraftforge.event.level.BlockEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + + +@Mod.EventBusSubscriber +public class RaidEventSubscriber { + @SubscribeEvent + public static void netherRaid(EntityTravelToDimensionEvent event) { + Entity entity = event.getEntity(); + Level level = entity.level(); + BlockPos pos = entity.blockPosition(); + if (level instanceof ServerLevel serverLevel) { + event.setCanceled(serverLevel.structureManager().getAllStructuresAt(pos) + .containsKey(level.registryAccess().registryOrThrow(Registries.STRUCTURE).get(ModStructures.NETHER_RAID))); + } + } + + @SubscribeEvent + public static void onBlock(BlockEvent.PortalSpawnEvent event) { + LevelAccessor level = event.getLevel(); + if (level instanceof ServerLevel serverLevel) { + PortalShape.findEmptyPortalShape(serverLevel, event.getPos(), Direction.Axis.X).ifPresent(portalShape -> { + portalShape.createPortalBlocks(); + BaseRaid netherRaid = new BaseRaid(serverLevel, event.getPos()); + AftermathManager instance = AftermathManager.getInstance(); + if (instance.create(netherRaid, serverLevel, event.getPos(), null)) { + event.setCanceled(true); + } + }); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModAftermathModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModAftermathModule.java index 02434d7..684fd25 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModAftermathModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModAftermathModule.java @@ -1,5 +1,6 @@ package com.pancake.surviving_the_aftermath.common.init; +import com.pancake.surviving_the_aftermath.api.IAftermath; import com.pancake.surviving_the_aftermath.api.module.*; import com.pancake.surviving_the_aftermath.common.module.amount.IntegerAmountModule; import com.pancake.surviving_the_aftermath.common.module.amount.RandomAmountModule; @@ -8,7 +9,9 @@ import com.pancake.surviving_the_aftermath.common.module.entity_info.EntityInfoWithEquipmentModule; import com.pancake.surviving_the_aftermath.common.module.weighted.EntityTypeWeightedModule; import com.pancake.surviving_the_aftermath.common.module.weighted.ItemWeightedModule; +import com.pancake.surviving_the_aftermath.common.raid.BaseRaid; import com.pancake.surviving_the_aftermath.common.raid.NetherRaid; +import com.pancake.surviving_the_aftermath.common.raid.module.BaseRaidModule; import com.pancake.surviving_the_aftermath.common.raid.module.NetherRaidModule; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Item; @@ -29,7 +32,10 @@ public class ModAftermathModule { public static final RegistryObject> ITEM_WEIGHTED = ModuleRegistry.WEIGHTED_MODULE.register(ItemWeightedModule.IDENTIFIER, ItemWeightedModule::new); - public static final RegistryObject NETHER_RAID = ModuleRegistry.AFTERMATH_MODULE.register(NetherRaid.IDENTIFIER, NetherRaidModule::new); +// public static final RegistryObject NETHER_RAID_MODULE = ModuleRegistry.AFTERMATH_MODULE.register(NetherRaid.IDENTIFIER, NetherRaidModule::new); + public static final RegistryObject RAID_MODULE = ModuleRegistry.AFTERMATH_MODULE.register(BaseRaid.IDENTIFIER, BaseRaidModule::new); + + public static final RegistryObject> BASE_RAID = ModuleRegistry.AFTERMATH.register(BaseRaid.IDENTIFIER, BaseRaid::new); public static final RegistryObject LEVEL_CONDITION = ModuleRegistry.CONDITION_MODULE.register(StructureConditionModule.IDENTIFIER, StructureConditionModule::new); diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModBiomes.java b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModBiomes.java new file mode 100644 index 0000000..d23db09 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModBiomes.java @@ -0,0 +1,29 @@ +package com.pancake.surviving_the_aftermath.common.init; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.level.biomes.ModBiomesMaker; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeGenerationSettings; +import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; + +public class ModBiomes { + + public static final ResourceKey BARREN = makeKey("barren"); + + private static ResourceKey makeKey(String name) { + return ResourceKey.create(Registries.BIOME, SurvivingTheAftermath.asResource(name)); + } + + public static void bootstrap(BootstapContext context) { + HolderGetter featureGetter = context.lookup(Registries.PLACED_FEATURE); + HolderGetter> carverGetter = context.lookup(Registries.CONFIGURED_CARVER); + BiomeGenerationSettings.Builder builder = new BiomeGenerationSettings.Builder(featureGetter, carverGetter); + context.register(BARREN, ModBiomesMaker.generateBarren(builder)); + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructurePieceTypes.java b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructurePieceTypes.java new file mode 100644 index 0000000..aaec632 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructurePieceTypes.java @@ -0,0 +1,44 @@ +package com.pancake.surviving_the_aftermath.common.init; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.structure.BurntStructure; +import com.pancake.surviving_the_aftermath.common.structure.CityStructure; +import com.pancake.surviving_the_aftermath.common.structure.HouseOfSakura; +import com.pancake.surviving_the_aftermath.common.structure.NetherRaidStructure; +import com.pancake.surviving_the_aftermath.common.structure.expansion.*; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; + +public class ModStructurePieceTypes { + + public static final DeferredRegister STRUCTURE_PIECE_TYPES = DeferredRegister.create(Registries.STRUCTURE_PIECE.location(), SurvivingTheAftermath.MOD_ID); + public static final RegistryObject HOUSE_OF_SAKURA = register("house_of_sakura", HouseOfSakura.Piece::new); + public static final RegistryObject NETHER_RAID = register("nether_invasion_portal", NetherRaidStructure.Piece::new); + public static final RegistryObject CITY = register("city", CityStructure.Piece::new); + public static final RegistryObject CAMP = register("camp", CampStructure.Piece::new); + public static final RegistryObject LOGS = register("logs", LogsStructure.Piece::new); + public static final RegistryObject TENT = register("tent", TentStructure.Piece::new); + public static final RegistryObject BRICK_WELL = register("brick_well", BrickWellStructure.Piece::new); + public static final RegistryObject COBBLESTONE_PILE = register("cobblestone_pile", CobblestonePileStructure.Piece::new); + public static final RegistryObject CONSTRUCTION_1 = register("construction1", (context, tag) -> new ConstructionStructure.Piece(context, tag, 1)); + public static final RegistryObject CONSTRUCTION_2 = register("construction2", (context, tag) -> new ConstructionStructure.Piece(context, tag, 2)); + public static final RegistryObject WAGON_CARGO_1 = register("wagon_cargo1", (context, tag) -> new WagonCargoStructure.Piece(context, tag, 1)); + public static final RegistryObject WAGON_CARGO_2 = register("wagon_cargo2", (context, tag) -> new WagonCargoStructure.Piece(context, tag, 2)); + public static final RegistryObject WAGON_CARGO_3 = register("wagon_cargo3", (context, tag) -> new WagonCargoStructure.Piece(context, tag, 3)); + public static final RegistryObject WAGON_CARGO_4 = register("wagon_cargo4", (context, tag) -> new WagonCargoStructure.Piece(context, tag, 4)); + public static final RegistryObject WAGON_CARGO_5 = register("wagon_cargo5", (context, tag) -> new WagonCargoStructure.Piece(context, tag, 5)); + public static final RegistryObject WAGON_CARGO_6 = register("wagon_cargo6", (context, tag) -> new WagonCargoStructure.Piece(context, tag, 6)); + public static final RegistryObject BURNT_1 = register("burnt_structure1", (context, tag) -> new BurntStructure.Piece(context, tag, 1)); + public static final RegistryObject BURNT_2 = register("burnt_structure2", (context, tag) -> new BurntStructure.Piece(context, tag, 2)); + public static final RegistryObject BURNT_3 = register("burnt_structure3", (context, tag) -> new BurntStructure.Piece(context, tag, 3)); + public static final RegistryObject BURNT_4 = register("burnt_structure4", (context, tag) -> new BurntStructure.Piece(context, tag, 4)); + public static final RegistryObject BURNT_5 = register("burnt_structure5", (context, tag) -> new BurntStructure.Piece(context, tag, 5)); + public static final RegistryObject BURNT_6 = register("burnt_structure6", (context, tag) -> new BurntStructure.Piece(context, tag, 6)); + + private static RegistryObject register(String name, StructurePieceType pieceType) { + return STRUCTURE_PIECE_TYPES.register(name, () -> pieceType); + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructureSets.java b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructureSets.java new file mode 100644 index 0000000..0f2f4ae --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructureSets.java @@ -0,0 +1,66 @@ +package com.pancake.surviving_the_aftermath.common.init; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureSet; +import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement; +import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType; + +import static com.pancake.surviving_the_aftermath.common.init.ModStructures.*; + +public class ModStructureSets { + + public static final ResourceKey HOUSE_OF_SAKURA_SET = register("house_of_sakura"); + public static final ResourceKey NETHER_RAID_SET = register("nether_invasion_portal"); + public static final ResourceKey CITY_SET = register("city"); + public static final ResourceKey CAMP_SET = register("camp"); + public static final ResourceKey LOGS_SET = register("logs"); + public static final ResourceKey TENT_SET = register("tent"); + public static final ResourceKey BRICK_WELL_SET = register("brick_well"); + public static final ResourceKey CONSTRUCTION_1_SET = register("construction1"); + public static final ResourceKey CONSTRUCTION_2_SET = register("construction2"); + public static final ResourceKey COBBLESTONE_PILE_SET = register("cobblestone_pile"); + + protected static ResourceKey register(String name) { + return ResourceKey.create(Registries.STRUCTURE_SET, SurvivingTheAftermath.asResource(name)); + } + + public static void bootstrap(BootstapContext context) { + int[] wagonCargoSalt = new int[]{0, 1365330241, 161766032, 1733648479, 2081980804, 418595573, 947847921}; + int[] burntSalt = new int[] {0, 104706480, 705540248, 1838764692, 1669956657, 1334899266, 2119656745}; + context.register(CITY_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(CITY), + new RandomSpreadStructurePlacement(80, 40, RandomSpreadType.LINEAR, 2057068235))); + context.register(HOUSE_OF_SAKURA_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(HOUSE_OF_SAKURA), + new RandomSpreadStructurePlacement(80, 40, RandomSpreadType.LINEAR, 1712650656))); + context.register(NETHER_RAID_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(NETHER_RAID), + new RandomSpreadStructurePlacement(100, 40, RandomSpreadType.LINEAR, 1629143766))); + context.register(CAMP_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(CAMP), + new RandomSpreadStructurePlacement(100, 40, RandomSpreadType.LINEAR, 1310135130))); + context.register(LOGS_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(LOGS), + new RandomSpreadStructurePlacement(90, 40, RandomSpreadType.LINEAR, 1321561321))); + context.register(TENT_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(TENT), + new RandomSpreadStructurePlacement(90, 40, RandomSpreadType.LINEAR, 1653821652))); + context.register(BRICK_WELL_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(BRICK_WELL), + new RandomSpreadStructurePlacement(95, 40, RandomSpreadType.LINEAR, 1561323135))); + context.register(CONSTRUCTION_1_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(CONSTRUCTION_1), + new RandomSpreadStructurePlacement(100, 40, RandomSpreadType.LINEAR, 761313131))); + context.register(CONSTRUCTION_2_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(CONSTRUCTION_2), + new RandomSpreadStructurePlacement(85, 40, RandomSpreadType.LINEAR, 498231431))); + context.register(COBBLESTONE_PILE_SET, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(COBBLESTONE_PILE), + new RandomSpreadStructurePlacement(75, 40, RandomSpreadType.LINEAR, 795416633))); + for (int i = 1; i <= 6; i++) { + ResourceKey wagonCargoSet = register("wagon_cargo" + i); + ResourceKey burntSet = register("burnt_structure" + i); + ResourceKey wagonCargo = ModStructures.register("wagon_cargo" + i); + ResourceKey burnt = ModStructures.register("burnt_structure" + i); + context.register(wagonCargoSet, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(wagonCargo), + new RandomSpreadStructurePlacement(90, 40, RandomSpreadType.LINEAR, wagonCargoSalt[i]))); + context.register(burntSet, new StructureSet(context.lookup(Registries.STRUCTURE).getOrThrow(burnt), + new RandomSpreadStructurePlacement(80, 40, RandomSpreadType.LINEAR, burntSalt[i]))); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructureTypes.java b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructureTypes.java new file mode 100644 index 0000000..78245bd --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructureTypes.java @@ -0,0 +1,47 @@ +package com.pancake.surviving_the_aftermath.common.init; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.structure.BurntStructure; +import com.pancake.surviving_the_aftermath.common.structure.CityStructure; +import com.pancake.surviving_the_aftermath.common.structure.HouseOfSakura; +import com.pancake.surviving_the_aftermath.common.structure.NetherRaidStructure; +import com.pancake.surviving_the_aftermath.common.structure.expansion.*; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.Function; + +public class ModStructureTypes { + + public static final DeferredRegister> STRUCTURE_TYPES = DeferredRegister.create(Registries.STRUCTURE_TYPE.location(), SurvivingTheAftermath.MOD_ID); + public static final RegistryObject> HOUSE_OF_SAKURA = register("house_of_sakura", HouseOfSakura::new); + public static final RegistryObject> NETHER_RAID = register("nether_invasion_portal", NetherRaidStructure::new); + public static final RegistryObject> CITY = register("city", CityStructure::new); + public static final RegistryObject> CAMP = register("camo", CampStructure::new); + public static final RegistryObject> LOGS = register("logs", LogsStructure::new); + public static final RegistryObject> TENT = register("tent", TentStructure::new); + public static final RegistryObject> BRICK_WELL = register("brick_well", BrickWellStructure::new); + public static final RegistryObject> COBBLESTONE_PILE = register("cobblestone_pile", CobblestonePileStructure::new); + public static final RegistryObject> CONSTRUCTION_1 = register("construction1", (settings) -> new ConstructionStructure(settings, 1)); + public static final RegistryObject> CONSTRUCTION_2 = register("construction2", (settings) -> new ConstructionStructure(settings, 2)); + public static final RegistryObject> WAGON_CARGO_1 = register("wagon_cargo1", (settings) -> new WagonCargoStructure(settings, 1)); + public static final RegistryObject> WAGON_CARGO_2 = register("wagon_cargo2", (settings) -> new WagonCargoStructure(settings, 2)); + public static final RegistryObject> WAGON_CARGO_3 = register("wagon_cargo3", (settings) -> new WagonCargoStructure(settings, 3)); + public static final RegistryObject> WAGON_CARGO_4 = register("wagon_cargo4", (settings) -> new WagonCargoStructure(settings, 4)); + public static final RegistryObject> WAGON_CARGO_5 = register("wagon_cargo5", (settings) -> new WagonCargoStructure(settings, 5)); + public static final RegistryObject> WAGON_CARGO_6 = register("wagon_cargo6", (settings) -> new WagonCargoStructure(settings, 6)); + public static final RegistryObject> BURNT_1 = register("burnt_structure1", (settings) -> new BurntStructure(settings, 1)); + public static final RegistryObject> BURNT_2 = register("burnt_structure2", (settings) -> new BurntStructure(settings, 2)); + public static final RegistryObject> BURNT_3 = register("burnt_structure3", (settings) -> new BurntStructure(settings, 3)); + public static final RegistryObject> BURNT_4 = register("burnt_structure4", (settings) -> new BurntStructure(settings, 4)); + public static final RegistryObject> BURNT_5 = register("burnt_structure5", (settings) -> new BurntStructure(settings, 5)); + public static final RegistryObject> BURNT_6 = register("burnt_structure6", (settings) -> new BurntStructure(settings, 6)); + + private static RegistryObject> register(String name, Function function) { + return STRUCTURE_TYPES.register(name, () -> () -> Structure.simpleCodec(function)); + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructures.java b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructures.java new file mode 100644 index 0000000..8bf99ec --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModStructures.java @@ -0,0 +1,64 @@ +package com.pancake.surviving_the_aftermath.common.init; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.structure.BurntStructure; +import com.pancake.surviving_the_aftermath.common.structure.CityStructure; +import com.pancake.surviving_the_aftermath.common.structure.HouseOfSakura; +import com.pancake.surviving_the_aftermath.common.structure.NetherRaidStructure; +import com.pancake.surviving_the_aftermath.common.structure.expansion.*; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.TerrainAdjustment; + +import java.util.Map; + +public class ModStructures { + public static final ResourceKey HOUSE_OF_SAKURA = register("house_of_sakura"); + public static final ResourceKey NETHER_RAID = register("nether_invasion_portal"); + public static final ResourceKey CITY = register("city"); + public static final ResourceKey CAMP = register("camp"); + public static final ResourceKey LOGS = register("logs"); + public static final ResourceKey TENT = register("tent"); + public static final ResourceKey BRICK_WELL = register("brick_well"); + public static final ResourceKey CONSTRUCTION_1 = register("construction1"); + public static final ResourceKey CONSTRUCTION_2 = register("construction2"); + public static final ResourceKey COBBLESTONE_PILE = register("cobblestone_pile"); + + protected static ResourceKey register(String name) { + return ResourceKey.create(Registries.STRUCTURE, SurvivingTheAftermath.asResource(name)); + } + + public static void bootstrap(BootstapContext context) { + Structure.StructureSettings expansionBuildSettings = new Structure.StructureSettings( + context.lookup(Registries.BIOME).getOrThrow(ModTags.HAS_EXPANSION_BUILD), Map.of(), + GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.NONE); + Structure.StructureSettings burntStructureSettings = new Structure.StructureSettings( + context.lookup(Registries.BIOME).getOrThrow(ModTags.HAS_BURNT_STRUCTURE), Map.of(), + GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.NONE); + context.register(CITY, new CityStructure(new Structure.StructureSettings( + context.lookup(Registries.BIOME).getOrThrow(ModTags.HAS_CITY), Map.of(), + GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.BEARD_BOX))); + context.register(HOUSE_OF_SAKURA, new HouseOfSakura(new Structure.StructureSettings( + context.lookup(Registries.BIOME).getOrThrow(ModTags.HAS_HOUSE_OF_SAKURA), Map.of(), + GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.BEARD_THIN))); + context.register(NETHER_RAID, new NetherRaidStructure(new Structure.StructureSettings( + context.lookup(Registries.BIOME).getOrThrow(ModTags.HAS_NETHER_RAID), Map.of(), + GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.BEARD_THIN))); + context.register(CAMP, new CampStructure(expansionBuildSettings)); + context.register(LOGS, new LogsStructure(expansionBuildSettings)); + context.register(TENT, new TentStructure(expansionBuildSettings)); + context.register(BRICK_WELL, new BrickWellStructure(expansionBuildSettings)); + context.register(CONSTRUCTION_1, new ConstructionStructure(expansionBuildSettings, 1)); + context.register(CONSTRUCTION_2, new ConstructionStructure(expansionBuildSettings, 2)); + context.register(COBBLESTONE_PILE, new CobblestonePileStructure(expansionBuildSettings)); + for (int i = 1; i <= 6; i++) { + ResourceKey wagonCargo = register("wagon_cargo" + i); + ResourceKey burnt = register("burnt_structure" + i); + context.register(wagonCargo, new WagonCargoStructure(expansionBuildSettings, i)); + context.register(burnt, new BurntStructure(burntStructureSettings, i)); + } + } +} diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModTags.java b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModTags.java new file mode 100644 index 0000000..261cf75 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/init/ModTags.java @@ -0,0 +1,26 @@ +package com.pancake.surviving_the_aftermath.common.init; + + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.structure.Structure; +public class ModTags { + + public static final TagKey HAS_CITY = createTag(Registries.BIOME, "has_city"); + public static final TagKey HAS_HOUSE_OF_SAKURA = createTag(Registries.BIOME, "has_house_of_sakura"); + public static final TagKey HAS_NETHER_RAID = createTag(Registries.BIOME, "has_nether_raid"); + public static final TagKey HAS_EXPANSION_BUILD = createTag(Registries.BIOME, "has_expansion_build"); + public static final TagKey HAS_BURNT_STRUCTURE = createTag(Registries.BIOME, "has_burnt_structure"); + public static final TagKey NETHER_RAID = createTag(Registries.STRUCTURE, "nether_raid"); + public static final TagKey> NETHER_MOB = createTag(Registries.ENTITY_TYPE, "nether_mob"); + + private static TagKey createTag(ResourceKey> resourceKey, String name) { + return TagKey.create(resourceKey, SurvivingTheAftermath.asResource(name)); + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/level/biomes/ModBiomesMaker.java b/src/main/java/com/pancake/surviving_the_aftermath/common/level/biomes/ModBiomesMaker.java new file mode 100644 index 0000000..8e505ad --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/level/biomes/ModBiomesMaker.java @@ -0,0 +1,34 @@ +package com.pancake.surviving_the_aftermath.common.level.biomes; + +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.data.worldgen.BiomeDefaultFeatures; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.level.biome.*; + +public class ModBiomesMaker { + + public static Biome generateBarren(BiomeGenerationSettings.Builder builder) { + Biome.BiomeBuilder biomeBuilder = new Biome.BiomeBuilder(); + BiomeSpecialEffects.Builder effects = new BiomeSpecialEffects.Builder(); + MobSpawnSettings.Builder spawnInfo = new MobSpawnSettings.Builder(); + effects.waterColor(4159204).waterFogColor(329011).fogColor(12638463) + .skyColor(calculateSkyColor(2.0F)) + .ambientParticle(new AmbientParticleSettings(ParticleTypes.WHITE_ASH, 0.118093334F)); + spawnInfo.addSpawn(MobCategory.MONSTER, new MobSpawnSettings.SpawnerData( + EntityType.ZOMBIFIED_PIGLIN, 100, 4, 4)); + BiomeDefaultFeatures.commonSpawns(spawnInfo); + biomeBuilder.hasPrecipitation(true).temperature(0.8F).downfall(0.9F) + .specialEffects(effects.build()).mobSpawnSettings(spawnInfo.build()).generationSettings(builder.build()) + .temperatureAdjustment(Biome.TemperatureModifier.NONE).build(); + return biomeBuilder.build(); + } + + protected static int calculateSkyColor(float p_194844_) { + float $$1 = p_194844_ / 3.0F; + $$1 = Mth.clamp($$1, -1.0F, 1.0F); + return Mth.hsvToRgb(0.62222224F - $$1 * 0.05F, 0.5F + $$1 * 0.1F, 1.0F); + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/LevelConditionModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/LevelConditionModule.java index 410ade2..c91448c 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/LevelConditionModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/LevelConditionModule.java @@ -10,7 +10,5 @@ public abstract class LevelConditionModule implements IConditionModule { public LevelConditionModule() { } - public boolean checkCondition(Level level, BlockPos pos) { - return true; - } + public abstract boolean checkCondition(Level level, BlockPos pos); } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/PlayerConditionModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/PlayerConditionModule.java index de4c1e0..5c23fdc 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/PlayerConditionModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/PlayerConditionModule.java @@ -3,13 +3,14 @@ import com.mojang.serialization.Codec; import com.pancake.surviving_the_aftermath.api.module.IConditionModule; import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; public abstract class PlayerConditionModule implements IConditionModule { public PlayerConditionModule() { } - public boolean checkCondition(Player player) { - return true; - } + public abstract boolean checkCondition(@Nullable Player player); } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/StructureConditionModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/StructureConditionModule.java index 40633dd..e50f7d3 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/StructureConditionModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/StructureConditionModule.java @@ -1,7 +1,6 @@ package com.pancake.surviving_the_aftermath.common.module.condition; import com.mojang.serialization.Codec; -import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; import com.pancake.surviving_the_aftermath.api.module.IConditionModule; import com.pancake.surviving_the_aftermath.common.init.ModAftermathModule; import com.pancake.surviving_the_aftermath.util.RegistryUtil; @@ -12,7 +11,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; import net.minecraft.world.level.levelgen.structure.Structure; -import net.minecraftforge.registries.ForgeRegistries; +import org.jetbrains.annotations.NotNull; import java.util.Objects; @@ -31,13 +30,22 @@ public StructureConditionModule() { @Override public boolean checkCondition(Level level, BlockPos pos) { if (level instanceof ServerLevel serverLevel){ - ResourceKey key = RegistryUtil.keyStructure(structure); + ResourceKey key = getResourceKey(); return serverLevel.structureManager().getAllStructuresAt(pos) .containsKey(level.registryAccess().registryOrThrow(Registries.STRUCTURE).get(key)); } return false; } + @NotNull + public ResourceKey getResourceKey() { + return RegistryUtil.keyStructure(structure); + } + + public ResourceLocation getResourceLocation() { + return Objects.requireNonNull(ResourceLocation.tryParse(structure)); + } + @Override public Codec codec() { diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/WeatherConditionModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/WeatherConditionModule.java index d9c3851..88e617a 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/WeatherConditionModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/WeatherConditionModule.java @@ -37,4 +37,8 @@ public Codec codec() { public IConditionModule type() { return ModAftermathModule.WEATHER_CONDITION.get(); } + + public String getWeather() { + return weather; + } } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/XpConditionModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/XpConditionModule.java index 34dcfd1..e842aab 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/XpConditionModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/module/condition/XpConditionModule.java @@ -4,10 +4,13 @@ import com.pancake.surviving_the_aftermath.api.module.IConditionModule; import com.pancake.surviving_the_aftermath.common.init.ModAftermathModule; import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; public class XpConditionModule extends PlayerConditionModule{ public static final String IDENTIFIER = "xp_condition"; - public static final Codec CODEC = Codec.INT.fieldOf("xp").xmap(XpConditionModule::new, XpConditionModule::xp).codec(); + public static final Codec CODEC = Codec.INT.fieldOf("xp").xmap(XpConditionModule::new, XpConditionModule::getXp).codec(); public int xp; public XpConditionModule(int xp) { @@ -17,7 +20,8 @@ public XpConditionModule() { } @Override - public boolean checkCondition(Player player) { + public boolean checkCondition(@Nullable Player player) { + if (player == null) return false; return player.experienceLevel >= xp; } @@ -30,4 +34,8 @@ public Codec codec() { public IConditionModule type() { return ModAftermathModule.XP_CONDITION.get(); } + + public int getXp() { + return xp; + } } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/module/entity_info/EntityInfoModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/module/entity_info/EntityInfoModule.java index 81669c4..a797728 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/module/entity_info/EntityInfoModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/module/entity_info/EntityInfoModule.java @@ -1,5 +1,6 @@ package com.pancake.surviving_the_aftermath.common.module.entity_info; +import com.google.common.collect.Lists; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.pancake.surviving_the_aftermath.api.module.IAmountModule; @@ -7,7 +8,13 @@ import com.pancake.surviving_the_aftermath.common.init.ModAftermathModule; import com.pancake.surviving_the_aftermath.common.init.ModuleRegistry; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.util.LazyOptional; + +import java.util.List; public class EntityInfoModule implements IEntityInfoModule { public static final String IDENTIFIER = "entity_info"; @@ -26,6 +33,16 @@ public EntityInfoModule(EntityType entityType, IAmountModule amountModule) { public EntityInfoModule() { } + + @Override + public List> spawnEntity(Level level) { + List> arrayList = Lists.newArrayList(); + for (int i = 0; i < amountModule.getSpawnAmount(); i++) { + Entity entity = entityType.create(level); + arrayList.add(entity == null ? LazyOptional.empty() : LazyOptional.of(() -> entity)); + } + return arrayList; + } public EntityType getEntityType() { return entityType; } diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/module/entity_info/EntityInfoWithEquipmentModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/module/entity_info/EntityInfoWithEquipmentModule.java index b8f50a1..9d1410b 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/module/entity_info/EntityInfoWithEquipmentModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/module/entity_info/EntityInfoWithEquipmentModule.java @@ -9,8 +9,15 @@ import com.pancake.surviving_the_aftermath.common.init.ModuleRegistry; import com.pancake.surviving_the_aftermath.common.module.weighted.ItemWeightedModule; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.server.level.ServerLevel; import net.minecraft.util.random.WeightedEntry; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.util.LazyOptional; + +import java.util.List; public class EntityInfoWithEquipmentModule extends EntityInfoModule { @@ -35,6 +42,20 @@ public EntityInfoWithEquipmentModule(EntityType entityType, IAmountModule amo public EntityInfoWithEquipmentModule() { } + + @Override + public List> spawnEntity(Level level) { + List> arrayList = super.spawnEntity(level); + for (LazyOptional lazyOptional : arrayList) { + lazyOptional.ifPresent(entity -> { + if (entity instanceof Mob mob){ + equipment.getWeightedList().getRandomValue(level.random) + .ifPresent(item -> mob.equipItemIfPossible(item.getDefaultInstance())); + } + }); + } + return arrayList; + } @Override public Codec codec() { return CODEC; diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/raid/BaseRaid.java b/src/main/java/com/pancake/surviving_the_aftermath/common/raid/BaseRaid.java index 5409ec4..d81b097 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/raid/BaseRaid.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/raid/BaseRaid.java @@ -1,6 +1,7 @@ package com.pancake.surviving_the_aftermath.common.raid; import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; import com.pancake.surviving_the_aftermath.api.AftermathState; import com.pancake.surviving_the_aftermath.api.IAftermath; @@ -8,55 +9,80 @@ import com.pancake.surviving_the_aftermath.api.base.BaseAftermathModule; import com.pancake.surviving_the_aftermath.api.module.IAftermathModule; import com.pancake.surviving_the_aftermath.api.module.IEntityInfoModule; +import com.pancake.surviving_the_aftermath.common.init.ModAftermathModule; import com.pancake.surviving_the_aftermath.common.raid.api.IRaid; import com.pancake.surviving_the_aftermath.common.raid.module.BaseRaidModule; +import com.pancake.surviving_the_aftermath.util.CodecUtils; import com.pancake.surviving_the_aftermath.util.RandomUtils; import net.minecraft.core.BlockPos; import net.minecraft.nbt.StringTag; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraftforge.common.util.LazyOptional; +import javax.annotation.Nullable; import java.util.*; -public class BaseRaid extends BaseAftermath implements IRaid { +public class BaseRaid extends BaseAftermath implements IRaid { public static final String IDENTIFIER = "raid"; + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + CodecUtils.UUID_CODEC.fieldOf("uuid").forGetter(BaseRaid::getUUID), + CodecUtils.setOf(CodecUtils.UUID_CODEC).fieldOf("players").forGetter(BaseRaid::getPlayers), + CodecUtils.setOf(CodecUtils.UUID_CODEC).fieldOf("enemies").forGetter(BaseRaid::getEnemies), + CodecUtils.setOf(BlockPos.CODEC).fieldOf("spawn_pos").forGetter(BaseRaid::getSpawnPos), + BaseRaidModule.CODEC.fieldOf("module").forGetter(BaseRaid::getModule), + BlockPos.CODEC.fieldOf("center_pos").forGetter(BaseRaid::getCenterPos), + Codec.FLOAT.fieldOf("progress_percent").forGetter(BaseRaid::getProgressPercent), + Codec.INT.fieldOf("reward_time").forGetter(BaseRaid::getRewardTime), + Codec.INT.fieldOf("current_wave").forGetter(BaseRaid::getCurrentWave), + Codec.INT.fieldOf("total_enemy").forGetter(BaseRaid::getTotalEnemy) + ).apply(instance, BaseRaid::new)); + protected int currentWave = -1; protected int totalEnemy = 0; - protected BlockPos centerPos; - public BaseRaid(AftermathState state, Set players, Set enemies, BaseRaidModule module, float progressPercent, int currentWave, int totalEnemy, BlockPos centerPos) { - super(state, players, enemies, module, progressPercent); + + public BaseRaid(UUID uuid,Set players, Set enemies, Set spawnPos,BaseRaidModule module, BlockPos centerPos, float progressPercent, int rewardTime, int currentWave, int totalEnemy) { + super(players, enemies,spawnPos, module, centerPos, progressPercent, rewardTime); this.currentWave = currentWave; this.totalEnemy = totalEnemy; - this.centerPos = centerPos; } - public BaseRaid(Level level, BlockPos pos, Player player){ - super(level,pos,player); + + public BaseRaid(Level level, BlockPos pos){ + super(level,pos); } public BaseRaid() { } + + @Override public void tick() { super.tick(); -// if (state == AftermathState.CELEBRATING){ -// if (rewardTime <= 0){ -// end(); -// return; -// } -// spawnRewards(); -// rewardTime--; -// } + if (state == AftermathState.CELEBRATING){ + if (rewardTime <= 0){ + end(); + return; + } + spawnRewards(); + rewardTime--; + } } @Override - public boolean isCreate(Level level, BlockPos pos, Player player) { + public void ready() { + + } + + @Override + public boolean isCreate(Level level, BlockPos pos, @Nullable Player player) { boolean create = super.isCreate(level, pos, player); Map> aftermathMap = MANAGER.getAftermathMap(); boolean noneMatch = aftermathMap.values().stream() @@ -89,6 +115,55 @@ public boolean join(Entity entity) { return false; } + protected void checkNextWave(){ + if (enemies.isEmpty()){ + if(this.currentWave >= module.getWaves().size() - 1) { + } else { + currentWave++; + totalEnemy = 0; + } + } + } + + protected void spawnWave() { + if (level instanceof ServerLevel serverLevel){ + if (enemies.isEmpty() && state == AftermathState.ONGOING){ + module.getWaves().get(currentWave).forEach(this::spawnEntities); + } + enemies.removeIf(uuid -> serverLevel.getEntity(uuid) == null); + } + + } + + + protected List> spawnEntities(IEntityInfoModule module) { + if (players.isEmpty()) return Collections.emptyList(); + List> arrayList = Collections.emptyList(); + if (level instanceof ServerLevel serverLevel) { + arrayList = module.spawnEntity(serverLevel); + for (LazyOptional lazyOptional : arrayList) { + lazyOptional.ifPresent(entity -> { + if (entity instanceof Mob mob) { + setMobSpawn(serverLevel,mob); + + } + }); + } + } + return arrayList; + } + + private void setMobSpawn(ServerLevel serverLevel, Mob mob) { + mob.setPersistenceRequired(); + mob.setTarget(randomPlayersUnderAttack()); + + BlockPos blockPos = spawnPos.stream().findAny().orElse(centerPos); + mob.setPos(blockPos.getX(), blockPos.getY(), blockPos.getZ()); + + join(mob); + serverLevel.addFreshEntityWithPassengers(mob); + } + public int getCurrentWave() { return currentWave; } @@ -108,12 +183,17 @@ public int getRadius() { } @Override - public Codec> codec() { - return null; + public BaseRaidModule getModule() { + return (BaseRaidModule) super.getModule(); + } + + @Override + public Codec> codec() { + return CODEC; } @Override - public IAftermath type() { - return null; + public IAftermath type() { + return ModAftermathModule.BASE_RAID.get(); } } \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/raid/NetherRaid.java b/src/main/java/com/pancake/surviving_the_aftermath/common/raid/NetherRaid.java index 8fd7acf..06c809c 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/raid/NetherRaid.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/raid/NetherRaid.java @@ -4,32 +4,32 @@ import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; import com.pancake.surviving_the_aftermath.api.IAftermath; import com.pancake.surviving_the_aftermath.api.base.BaseAftermathModule; +import com.pancake.surviving_the_aftermath.api.module.IAftermathModule; import com.pancake.surviving_the_aftermath.common.raid.module.NetherRaidModule; -import net.minecraft.core.BlockPos; import net.minecraft.nbt.StringTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.LivingEntity; -public class NetherRaid extends BaseRaid { - public static final String IDENTIFIER = "nether_raid"; - - @Override - public Codec> codec() { - return null; - } - - @Override - public IAftermath type() { - return null; - } - - @Override - public ResourceLocation getRegistryName() { - return SurvivingTheAftermath.asResource(IDENTIFIER); - } - - @Override - public void insertTag(LivingEntity entity) { - entity.getPersistentData().put(IDENTIFIER, StringTag.valueOf("enemies")); - } +public class NetherRaid{ +// public static final String IDENTIFIER = "nether_raid"; +// +// @Override +// public Codec> codec() { +// return null; +// } +// +// @Override +// public IAftermath type() { +// return null; +// } +// +// @Override +// public ResourceLocation getRegistryName() { +// return SurvivingTheAftermath.asResource(IDENTIFIER); +// } +// +// @Override +// public void insertTag(LivingEntity entity) { +// entity.getPersistentData().put(IDENTIFIER, StringTag.valueOf("enemies")); +// } } \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/raid/module/BaseRaidModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/raid/module/BaseRaidModule.java index dc190c8..7aa319b 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/raid/module/BaseRaidModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/raid/module/BaseRaidModule.java @@ -1,21 +1,23 @@ package com.pancake.surviving_the_aftermath.common.raid.module; -import com.google.common.collect.Lists; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.pancake.surviving_the_aftermath.api.base.BaseAftermathModule; import com.pancake.surviving_the_aftermath.api.module.IAftermathModule; import com.pancake.surviving_the_aftermath.api.module.IConditionModule; import com.pancake.surviving_the_aftermath.api.module.IEntityInfoModule; -import com.pancake.surviving_the_aftermath.common.init.ModuleRegistry; +import com.pancake.surviving_the_aftermath.common.init.ModAftermathModule; import com.pancake.surviving_the_aftermath.common.module.weighted.ItemWeightedModule; import com.pancake.surviving_the_aftermath.common.raid.api.IRaidModule; import java.util.List; -import java.util.function.Function; -import java.util.stream.Collectors; -public abstract class BaseRaidModule extends BaseAftermathModule implements IRaidModule { +public class BaseRaidModule extends BaseAftermathModule implements IRaidModule { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + ItemWeightedModule.CODEC.fieldOf("rewards").forGetter(BaseRaidModule::getRewards), + Codec.list(IConditionModule.CODEC.get()).fieldOf("conditions").forGetter(BaseRaidModule::getConditions), + Codec.list(Codec.list(IEntityInfoModule.CODEC.get())).fieldOf("waves").forGetter(BaseRaidModule::getWaves) + ).apply(instance, BaseRaidModule::new)); protected List> waves ; public BaseRaidModule(ItemWeightedModule rewards, List conditions, List> waves) { @@ -26,6 +28,7 @@ public BaseRaidModule(ItemWeightedModule rewards, List conditi public BaseRaidModule() { } + @Override public List> getWaves() { return waves; @@ -35,4 +38,14 @@ public BaseRaidModule setWaves(List> waves) { this.waves = waves; return this; } + + @Override + public Codec codec() { + return CODEC; + } + + @Override + public IAftermathModule type() { + return ModAftermathModule.RAID_MODULE.get(); + } } \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/raid/module/NetherRaidModule.java b/src/main/java/com/pancake/surviving_the_aftermath/common/raid/module/NetherRaidModule.java index e00a849..db25432 100644 --- a/src/main/java/com/pancake/surviving_the_aftermath/common/raid/module/NetherRaidModule.java +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/raid/module/NetherRaidModule.java @@ -1,51 +1,48 @@ package com.pancake.surviving_the_aftermath.common.raid.module; -import com.google.common.collect.Lists; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.pancake.surviving_the_aftermath.api.module.IAftermathModule; import com.pancake.surviving_the_aftermath.api.module.IConditionModule; import com.pancake.surviving_the_aftermath.api.module.IEntityInfoModule; import com.pancake.surviving_the_aftermath.common.init.ModAftermathModule; -import com.pancake.surviving_the_aftermath.common.init.ModuleRegistry; import com.pancake.surviving_the_aftermath.common.module.weighted.ItemWeightedModule; -import com.pancake.surviving_the_aftermath.common.raid.NetherRaid; import java.util.List; public class NetherRaidModule extends BaseRaidModule { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - ItemWeightedModule.CODEC.fieldOf("rewards").forGetter(NetherRaidModule::getRewards), - Codec.list(IConditionModule.CODEC.get()).fieldOf("conditions").forGetter(NetherRaidModule::getConditions), - Codec.list(Codec.list(IEntityInfoModule.CODEC.get())).fieldOf("waves").forGetter(NetherRaidModule::getWaves), - Codec.INT.fieldOf("ready_time").forGetter(NetherRaidModule::getReadyTime) - ).apply(instance, NetherRaidModule::new)); - private int readyTime; - - public NetherRaidModule(ItemWeightedModule rewards, List conditions, List> waves, int readyTime) { - super(rewards, conditions, waves); - this.readyTime = readyTime; - } - - public NetherRaidModule() { - } - - @Override - public Codec codec() { - return CODEC; - } - - @Override - public IAftermathModule type() { - return ModAftermathModule.NETHER_RAID.get(); - } - - public int getReadyTime() { - return readyTime; - } - - public NetherRaidModule setReadyTime(int readyTime) { - this.readyTime = readyTime; - return this; - } +// public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( +// ItemWeightedModule.CODEC.fieldOf("rewards").forGetter(NetherRaidModule::getRewards), +// Codec.list(IConditionModule.CODEC.get()).fieldOf("conditions").forGetter(NetherRaidModule::getConditions), +// Codec.list(Codec.list(IEntityInfoModule.CODEC.get())).fieldOf("waves").forGetter(NetherRaidModule::getWaves), +// Codec.INT.fieldOf("ready_time").forGetter(NetherRaidModule::getReadyTime) +// ).apply(instance, NetherRaidModule::new)); +// private int readyTime; +// +// public NetherRaidModule(ItemWeightedModule rewards, List conditions, List> waves, int readyTime) { +// super(rewards, conditions, waves); +// this.readyTime = readyTime; +// } +// +// public NetherRaidModule() { +// } +// +// @Override +// public Codec codec() { +// return CODEC; +// } +// +// @Override +// public IAftermathModule type() { +// return ModAftermathModule.NETHER_RAID_MODULE.get(); +// } +// +// public int getReadyTime() { +// return readyTime; +// } +// +// public NetherRaidModule setReadyTime(int readyTime) { +// this.readyTime = readyTime; +// return this; +// } } \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/AbstractStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/AbstractStructure.java new file mode 100644 index 0000000..78c37f9 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/AbstractStructure.java @@ -0,0 +1,99 @@ +package com.pancake.surviving_the_aftermath.common.structure; + +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.Mirror; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.WorldgenRandom; +import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece; +import net.minecraft.world.level.levelgen.structure.pieces.PiecesContainer; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; +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.StructureTemplateManager; +import net.minecraft.world.level.storage.loot.BuiltInLootTables; + +import java.util.Optional; + +public abstract class AbstractStructure extends Structure { + + public AbstractStructure(StructureSettings settings) { + super(settings); + } + + @Override + protected Optional findGenerationPoint(GenerationContext context) { + return onTopOfChunkCenter(context, Heightmap.Types.WORLD_SURFACE_WG, (pieces) -> { + ChunkPos chunk = context.chunkPos(); + WorldgenRandom rand = context.random(); + int x = chunk.getMinBlockX(); + int z = chunk.getMinBlockZ(); + int y = context.chunkGenerator().getFirstOccupiedHeight( + x, z, Heightmap.Types.WORLD_SURFACE_WG, + context.heightAccessor(), context.randomState()); + BlockPos pos = new BlockPos(x, y, z); + Rotation rotation = Rotation.getRandom(rand); + pieces.addPiece(new Piece(this.pieceType(), context.structureTemplateManager(), this.location(), pos, rotation)); + }); + } + + @Override + public void afterPlace(WorldGenLevel pLevel, StructureManager pStructureManager, ChunkGenerator pChunkGenerator, + RandomSource pRandom, BoundingBox pBoundingBox, ChunkPos pChunkPos, PiecesContainer pPieces) { + BlockPos.betweenClosedStream(pBoundingBox).forEach(p -> { + if (pLevel.getBlockEntity(p) instanceof RandomizableContainerBlockEntity chest) { + chest.setLootTable(BuiltInLootTables.DESERT_PYRAMID, pRandom.nextLong()); + } + }); + } + + @Override + public abstract StructureType type(); + + public abstract StructurePieceType pieceType(); + + public abstract ResourceLocation location(); + + public static class Piece extends TemplateStructurePiece { + + public Piece(StructurePieceType type, StructureTemplateManager structureTemplateManager, ResourceLocation location, BlockPos templatePosition, Rotation rotation) { + super(type, 0, structureTemplateManager, location, location.toString(), makeSettings(rotation), templatePosition); + } + + public Piece(StructurePieceType type, StructureTemplateManager structureManager, CompoundTag tag) { + super(type, tag, structureManager, (location) -> makeSettings(Rotation.valueOf(tag.getString("rot")))); + } + + public Piece(StructurePieceType type, StructurePieceSerializationContext context, CompoundTag tag) { + this(type, context.structureTemplateManager(), tag); + } + + @Override + protected void handleDataMarker(String name, BlockPos pos, ServerLevelAccessor level, RandomSource random, BoundingBox box) {} + + @Override + protected void addAdditionalSaveData(StructurePieceSerializationContext context, CompoundTag tag) { + super.addAdditionalSaveData(context, tag); + tag.putString("rot", this.placeSettings.getRotation().name()); + } + + private static StructurePlaceSettings makeSettings(Rotation rotation) { + return new StructurePlaceSettings().setRotation(rotation).setMirror(Mirror.NONE).addProcessor(BlockIgnoreProcessor.STRUCTURE_AND_AIR); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/BurntStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/BurntStructure.java new file mode 100644 index 0000000..72775f5 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/BurntStructure.java @@ -0,0 +1,56 @@ +package com.pancake.surviving_the_aftermath.common.structure; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +import java.util.function.Supplier; + +@SuppressWarnings("unchecked") +public class BurntStructure extends AbstractStructure { + + private final int index; + + private static final Supplier>[] STRUCTURE_TYPES = new Supplier[] {null, + ModStructureTypes.BURNT_1, ModStructureTypes.BURNT_2, ModStructureTypes.BURNT_3, + ModStructureTypes.BURNT_4, ModStructureTypes.BURNT_5, ModStructureTypes.BURNT_6}; + + private static final Supplier[] STRUCTURE_PIECE_TYPES = new Supplier[] {null, + ModStructurePieceTypes.BURNT_1, ModStructurePieceTypes.BURNT_2, + ModStructurePieceTypes.BURNT_3, ModStructurePieceTypes.BURNT_4, + ModStructurePieceTypes.BURNT_5, ModStructurePieceTypes.BURNT_6}; + + public BurntStructure(StructureSettings settings, int index) { + super(settings); + this.index = index; + } + + @Override + public StructureType type() { + return STRUCTURE_TYPES[this.index].get(); + } + + @Override + public StructurePieceType pieceType() { + return STRUCTURE_PIECE_TYPES[this.index].get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("burnt_structure" + this.index); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag, int index) { + super(BurntStructure.STRUCTURE_PIECE_TYPES[index].get(), context, tag); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/CityStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/CityStructure.java new file mode 100644 index 0000000..39fc385 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/CityStructure.java @@ -0,0 +1,73 @@ +package com.pancake.surviving_the_aftermath.common.structure; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.npc.Villager; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.StructureManager; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +public class CityStructure extends AbstractStructure { + + public CityStructure(StructureSettings settings) { + super(settings); + } + + @Override + public StructureType type() { + return ModStructureTypes.CITY.get(); + } + + @Override + public StructurePieceType pieceType() { + return ModStructurePieceTypes.CITY.get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("city"); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag) { + super(ModStructurePieceTypes.CITY.get(), context.structureTemplateManager(), tag); + } + + @SuppressWarnings("deprecation") + @Override + public void postProcess(WorldGenLevel level, StructureManager structureManager, ChunkGenerator generator, + RandomSource rand, BoundingBox box, ChunkPos chunkPos, BlockPos pos) { + super.postProcess(level, structureManager, generator, rand, box, chunkPos, pos); + BlockPos spawnPos = new BlockPos(rand.nextInt(box.minX(), box.maxX()), pos.getY(), rand.nextInt(box.minZ(), box.maxZ())); + for (int y = spawnPos.getY(); y < box.maxY(); y++) { + BlockState state1 = this.getBlock(level, spawnPos.getX(), y, spawnPos.getZ(), box); + BlockState state2 = this.getBlock(level, spawnPos.getX(), y + 1, spawnPos.getZ(), box); + if (state1.isAir() && state2.isAir()) { + Villager villager = EntityType.VILLAGER.create(level.getLevel()); + villager.moveTo(spawnPos.getX(), y, spawnPos.getZ()); + BuiltInRegistries.VILLAGER_TYPE.getRandom(rand).ifPresent((profession) -> + villager.setVillagerData(villager.getVillagerData().setType(profession.value()))); + BuiltInRegistries.VILLAGER_PROFESSION.getRandom(rand).ifPresent((profession) -> + villager.setVillagerData(villager.getVillagerData().setProfession(profession.value()))); + level.addFreshEntity(villager); + break; + } + } + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/HouseOfSakura.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/HouseOfSakura.java new file mode 100644 index 0000000..4571663 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/HouseOfSakura.java @@ -0,0 +1,42 @@ +package com.pancake.surviving_the_aftermath.common.structure; + + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +public class HouseOfSakura extends AbstractStructure { + + public HouseOfSakura(StructureSettings settings) { + super(settings); + } + + @Override + public StructureType type() { + return ModStructureTypes.HOUSE_OF_SAKURA.get(); + } + + @Override + public StructurePieceType pieceType() { + return ModStructurePieceTypes.HOUSE_OF_SAKURA.get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("house_of_sakura"); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag) { + super(ModStructurePieceTypes.HOUSE_OF_SAKURA.get(), context.structureTemplateManager(), tag); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/NetherRaidStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/NetherRaidStructure.java new file mode 100644 index 0000000..10012f9 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/NetherRaidStructure.java @@ -0,0 +1,44 @@ +package com.pancake.surviving_the_aftermath.common.structure; + + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +public class NetherRaidStructure extends AbstractStructure { + + + public static final ResourceLocation STRUCTURE_TRANSFORMED = SurvivingTheAftermath.asResource("nether_invasion_portal_transformed"); + + public NetherRaidStructure(StructureSettings settings) { + super(settings); + } + + @Override + public StructureType type() { + return ModStructureTypes.NETHER_RAID.get(); + } + + @Override + public StructurePieceType pieceType() { + return ModStructurePieceTypes.NETHER_RAID.get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("nether_invasion_portal"); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag) { + super(ModStructurePieceTypes.NETHER_RAID.get(), context.structureTemplateManager(), tag); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/BrickWellStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/BrickWellStructure.java new file mode 100644 index 0000000..05b582c --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/BrickWellStructure.java @@ -0,0 +1,43 @@ +package com.pancake.surviving_the_aftermath.common.structure.expansion; + + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import com.pancake.surviving_the_aftermath.common.structure.AbstractStructure; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +public class BrickWellStructure extends AbstractStructure { + + public BrickWellStructure(StructureSettings settings) { + super(settings); + } + + @Override + public StructureType type() { + return ModStructureTypes.BRICK_WELL.get(); + } + + @Override + public StructurePieceType pieceType() { + return ModStructurePieceTypes.BRICK_WELL.get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("brick_well"); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag) { + super(ModStructurePieceTypes.BRICK_WELL.get(), context, tag); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/CampStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/CampStructure.java new file mode 100644 index 0000000..8936561 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/CampStructure.java @@ -0,0 +1,43 @@ +package com.pancake.surviving_the_aftermath.common.structure.expansion; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import com.pancake.surviving_the_aftermath.common.structure.AbstractStructure; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +public class CampStructure extends AbstractStructure { + + public CampStructure(StructureSettings settings) { + super(settings); + } + + @Override + public StructureType type() { + return ModStructureTypes.CAMP.get(); + } + + @Override + public StructurePieceType pieceType() { + return ModStructurePieceTypes.CAMP.get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("camp"); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag) { + super(ModStructurePieceTypes.CAMP.get(), context, tag); + } + + } + + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/CobblestonePileStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/CobblestonePileStructure.java new file mode 100644 index 0000000..d6d6546 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/CobblestonePileStructure.java @@ -0,0 +1,42 @@ +package com.pancake.surviving_the_aftermath.common.structure.expansion; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import com.pancake.surviving_the_aftermath.common.structure.AbstractStructure; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +public class CobblestonePileStructure extends AbstractStructure { + + public CobblestonePileStructure(StructureSettings settings) { + super(settings); + } + + @Override + public StructureType type() { + return ModStructureTypes.COBBLESTONE_PILE.get(); + } + + @Override + public StructurePieceType pieceType() { + return ModStructurePieceTypes.COBBLESTONE_PILE.get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("cobblestone_pile"); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag) { + super(ModStructurePieceTypes.COBBLESTONE_PILE.get(), context, tag); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/ConstructionStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/ConstructionStructure.java new file mode 100644 index 0000000..4f03914 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/ConstructionStructure.java @@ -0,0 +1,45 @@ +package com.pancake.surviving_the_aftermath.common.structure.expansion; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import com.pancake.surviving_the_aftermath.common.structure.AbstractStructure; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +public class ConstructionStructure extends AbstractStructure { + + private final int index; + + public ConstructionStructure(StructureSettings settings, int index) { + super(settings); + this.index = index; + } + + @Override + public StructureType type() { + return this.index == 1 ? ModStructureTypes.CONSTRUCTION_1.get() : ModStructureTypes.CONSTRUCTION_2.get(); + } + + @Override + public StructurePieceType pieceType() { + return this.index == 1 ? ModStructurePieceTypes.CONSTRUCTION_1.get() : ModStructurePieceTypes.CONSTRUCTION_2.get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("construction" + this.index); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag, int index) { + super(index == 1 ? ModStructurePieceTypes.CONSTRUCTION_1.get() : ModStructurePieceTypes.CONSTRUCTION_2.get(), context, tag); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/LogsStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/LogsStructure.java new file mode 100644 index 0000000..4a0964a --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/LogsStructure.java @@ -0,0 +1,42 @@ +package com.pancake.surviving_the_aftermath.common.structure.expansion; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import com.pancake.surviving_the_aftermath.common.structure.AbstractStructure; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +public class LogsStructure extends AbstractStructure { + + public LogsStructure(StructureSettings settings) { + super(settings); + } + + @Override + public StructureType type() { + return ModStructureTypes.LOGS.get(); + } + + @Override + public StructurePieceType pieceType() { + return ModStructurePieceTypes.LOGS.get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("logs"); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag) { + super(ModStructurePieceTypes.LOGS.get(), context, tag); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/TentStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/TentStructure.java new file mode 100644 index 0000000..030acce --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/TentStructure.java @@ -0,0 +1,42 @@ +package com.pancake.surviving_the_aftermath.common.structure.expansion; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import com.pancake.surviving_the_aftermath.common.structure.AbstractStructure; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +public class TentStructure extends AbstractStructure { + + public TentStructure(StructureSettings settings) { + super(settings); + } + + @Override + public StructureType type() { + return ModStructureTypes.TENT.get(); + } + + @Override + public StructurePieceType pieceType() { + return ModStructurePieceTypes.TENT.get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("tent"); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag) { + super(ModStructurePieceTypes.TENT.get(), context, tag); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/WagonCargoStructure.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/WagonCargoStructure.java new file mode 100644 index 0000000..45ab173 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/WagonCargoStructure.java @@ -0,0 +1,57 @@ +package com.pancake.surviving_the_aftermath.common.structure.expansion; + +import com.pancake.surviving_the_aftermath.SurvivingTheAftermath; +import com.pancake.surviving_the_aftermath.common.init.ModStructurePieceTypes; +import com.pancake.surviving_the_aftermath.common.init.ModStructureTypes; +import com.pancake.surviving_the_aftermath.common.structure.AbstractStructure; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceSerializationContext; +import net.minecraft.world.level.levelgen.structure.pieces.StructurePieceType; + +import java.util.function.Supplier; + +@SuppressWarnings("unchecked") +public class WagonCargoStructure extends AbstractStructure { + + private final int index; + + private static final Supplier>[] STRUCTURE_TYPES = new Supplier[] {null, + ModStructureTypes.WAGON_CARGO_1, ModStructureTypes.WAGON_CARGO_2, ModStructureTypes.WAGON_CARGO_3, + ModStructureTypes.WAGON_CARGO_4, ModStructureTypes.WAGON_CARGO_5, ModStructureTypes.WAGON_CARGO_6}; + + private static final Supplier[] STRUCTURE_PIECE_TYPES = new Supplier[] {null, + ModStructurePieceTypes.WAGON_CARGO_1, ModStructurePieceTypes.WAGON_CARGO_2, + ModStructurePieceTypes.WAGON_CARGO_3, ModStructurePieceTypes.WAGON_CARGO_4, + ModStructurePieceTypes.WAGON_CARGO_5, ModStructurePieceTypes.WAGON_CARGO_6}; + + public WagonCargoStructure(StructureSettings settings, int index) { + super(settings); + this.index = index; + } + + @Override + public StructureType type() { + return STRUCTURE_TYPES[this.index].get(); + } + + @Override + public StructurePieceType pieceType() { + return STRUCTURE_PIECE_TYPES[this.index].get(); + } + + @Override + public ResourceLocation location() { + return SurvivingTheAftermath.asResource("wagon_cargo" + this.index); + } + + public static class Piece extends AbstractStructure.Piece { + + public Piece(StructurePieceSerializationContext context, CompoundTag tag, int index) { + super(WagonCargoStructure.STRUCTURE_PIECE_TYPES[index].get(), context, tag); + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/package-info.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/package-info.java new file mode 100644 index 0000000..0cf39f9 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/expansion/package-info.java @@ -0,0 +1,9 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +@FieldsAreNonnullByDefault +package com.pancake.surviving_the_aftermath.common.structure.expansion; + +import net.minecraft.FieldsAreNonnullByDefault; +import net.minecraft.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/common/structure/package-info.java b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/package-info.java new file mode 100644 index 0000000..2e177de --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/common/structure/package-info.java @@ -0,0 +1,9 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +@FieldsAreNonnullByDefault +package com.pancake.surviving_the_aftermath.common.structure; + +import net.minecraft.FieldsAreNonnullByDefault; +import net.minecraft.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/com/pancake/surviving_the_aftermath/util/CodecUtils.java b/src/main/java/com/pancake/surviving_the_aftermath/util/CodecUtils.java new file mode 100644 index 0000000..f5d998c --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/util/CodecUtils.java @@ -0,0 +1,21 @@ +package com.pancake.surviving_the_aftermath.util; + + +import com.mojang.serialization.Codec; + + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +public class CodecUtils { + public static final Codec UUID_CODEC = Codec.STRING + .xmap(UUID::fromString, UUID::toString) + .fieldOf("uuid") + .codec(); + + //T + public static Codec> setOf(Codec codec) { + return Codec.list(codec).xmap(HashSet::new, ArrayList::new); + } +} diff --git a/src/main/java/com/pancake/surviving_the_aftermath/util/StructureUtils.java b/src/main/java/com/pancake/surviving_the_aftermath/util/StructureUtils.java new file mode 100644 index 0000000..7d73a65 --- /dev/null +++ b/src/main/java/com/pancake/surviving_the_aftermath/util/StructureUtils.java @@ -0,0 +1,62 @@ +package com.pancake.surviving_the_aftermath.util; + +import com.google.common.collect.Lists; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.properties.StructureMode; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureStart; +import net.minecraft.world.level.levelgen.structure.TemplateStructurePiece; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; + +import java.util.List; +import java.util.Objects; + +public class StructureUtils { + public static List findStructureStartingPoint(ServerLevel serverLevel, BlockPos pos, ResourceLocation location) { + List blockPosList = Lists.newArrayList(); + ResourceKey key = RegistryUtil.keyStructure(location.toString()); + StructureStart start = serverLevel.structureManager() + .getStructureAt(pos, Objects.requireNonNull(serverLevel.registryAccess().registryOrThrow(Registries.STRUCTURE).get(key))); + if (start != StructureStart.INVALID_START && !start.getPieces().isEmpty()) { + start.getPieces().forEach(piece -> { + if (piece instanceof TemplateStructurePiece templateStructurePiece) { + blockPosList.add(templateStructurePiece.templatePosition()); + } + }); + } + return blockPosList; + } + + //handleDataMarker + public static void handleDataMarker(ServerLevel serverLevel, BlockPos pos, ResourceLocation location,MetadataHandler metadataHandler) { + ResourceKey key = RegistryUtil.keyStructure(location.toString()); + StructureStart start = serverLevel.structureManager() + .getStructureAt(pos, Objects.requireNonNull(serverLevel.registryAccess().registryOrThrow(Registries.STRUCTURE).get(key))); + if (start != StructureStart.INVALID_START && !start.getPieces().isEmpty()) { + start.getPieces().stream() + .map(piece -> (TemplateStructurePiece) piece) + .forEach(piece -> { + StructureTemplate template = piece.template(); + List structureBlockInfos = template.filterBlocks(pos, piece.placeSettings(), Blocks.STRUCTURE_BLOCK); + structureBlockInfos.forEach(structureBlockInfo -> { + StructureMode structuremode = StructureMode.valueOf(structureBlockInfo.nbt().getString("mode")); + if (structuremode == StructureMode.DATA) { + String metadata = structureBlockInfo.nbt().getString("metadata"); + BlockPos metaPos = structureBlockInfo.pos(); + BlockPos startPos = piece.templatePosition(); + metadataHandler.handleMetadata(serverLevel,metadata,startPos,metaPos); + } + }); + }); + } + } + @FunctionalInterface + public interface MetadataHandler { + void handleMetadata(ServerLevel serverLevel, String metadata, BlockPos startPos,BlockPos metaPos); + } +} \ No newline at end of file diff --git a/src/main/resources/data/surviving_the_aftermath/structures/brick_well.nbt b/src/main/resources/data/surviving_the_aftermath/structures/brick_well.nbt new file mode 100644 index 0000000000000000000000000000000000000000..e61344b011d37f2f294555e376f2d4f6d49ddcfa GIT binary patch literal 565 zcmV-50?Pd#iwFP!00000|GkyLj+-zLh6e))kZyac)KyQtSL(Uvo~xdEjlAp-taUK5 zou=D2=v&vx0&!S7_O7Z}Ldf{{eE-ZCxdJF5Q|u3>05CrJ;ax(3oo1S$g2O0bamPjd zpei%@TteClHEx(j3c1o$5aprzTjqSPeXh9J zhFFP%b>q>5Y8YY>2Wy@e@vxRX<)}3tu9&w4WZ&r);p3KdSWDXIuUnzi<63Fa;rdQ8 za~Z*?dVf-#tyfU}kfKLjpftiM45c%_66+fiOsROI=WC= z(({~iW$d&Q`O}3Kj{H%3bJCjc|Jhb2q-E>6z1ZUwdf_>OXY816%pDvLQq~!rmw)W| zAQ=ih%%1SWgzS3AwA|t3=hj_|J>`7v!->x5Z>Au5bp6tGOIi1tdM~G& literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/burnt_structure1.nbt b/src/main/resources/data/surviving_the_aftermath/structures/burnt_structure1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..56d9495d96227e6ce61dcdb64f67f2840928cac2 GIT binary patch literal 3551 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/burnt_structure4.nbt b/src/main/resources/data/surviving_the_aftermath/structures/burnt_structure4.nbt new file mode 100644 index 0000000000000000000000000000000000000000..9398b32b900e957cc47fae91fdc41e1f2a66c3fd GIT binary patch literal 2033 zcmZ`%2~ZPP7zQc=!W0W_1C^sz39Ud_O(X=tI0YO>0#1uuPEM&rJh%cPpdbu|p)jo! zg_SGQbQ-EgVt{D@v}Ck$w)E#QAE+mVx_gh1 z)7hymTNo6u9d9Ln)5XP&&4_=&{N_oSlJv1FyZyt=7dnPw@ps zTJkN?=5Xr7N(JWm#X-Al1se=1Uy=B zCR~4j5~BnzkIH_vZuPD7JHt@v1)*g@)7$#x)sX4*fSRNUEf5lHK407RB`gdYRiu zI4CtDOQQG~U7rY|1p#cjoBrIBifL219}NsgK$jHtp)ZWM{ZUfFqrbp03DZJZQ)5{@^cctKmqxt;9rI$1l6~!yOJZr z)3spS*RbWMv$U=vN0FHmVXS39&LZx(N@fsf$h1Qzry+eUh1Td|ED2_sxctHET^t4Z zlQHV)V#-P6{f^juWZtaRNBlV{UJ2wUf)h{D1!TOC!y=q1jx6dIOowz{qC0DX_IZPt zSX!aE(+zCiICPZEiy%AiU02y2$E~{}D2>D*DhqvuzSm2Dv$uyC3F>6e13_@4Hj?G%>j_ zvVv9KecO!*o)!Ux?DHb{HZeFedf|jYd5_Z5C0m-5C9sLYW(sT$mW`;aGX*^O`_Q9M zah7l!fLCO$r4u6U3Nw`R9~dG4nP&m(6_>y>%*hSfXYa#$J)^Zy?w*m&z($Tc(c1*c zb*E`RPpjaPTBHl6doB5y51!~p{}4P36m`?W$+F>e!Jk}gJ1026G2 z0{U%x4D%9mq|+= z)Ve{vSxt-Lhjr&R2XradW}VmBuh-#y<7$g8>nO@4pjM#^M4O+W2b0Po)cB~P1A<;G zs)o}l{i;{P@r8XAmXB9z8g_Ky6Ypt8o{!DXFG3KbX~(cRK4d@|dyiP2?@GNo)*+S7 z4K$@JElVM_dQDY;hh6|P>^}@t1TAYW~ZMwf2<(n)-tU!;M!JUNj1E zMwV(N?g^1-H1|bI(r9X9!;sfn5rt;|V+S-eSovyyN7{weCSC)OUr%1E^@>Wfwd)uf UX}pF{yWXU~mdAD=1?%bk3m_HV_y7O^ literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/burnt_structure5.nbt b/src/main/resources/data/surviving_the_aftermath/structures/burnt_structure5.nbt new file mode 100644 index 0000000000000000000000000000000000000000..b6ddfe66599dff4ab3081fd2475c383fdcfaaecd GIT binary patch literal 517 zcmV+g0{Zy6L9f^gFulwpCZ%MvyoWDv1&H zw3_}w|GFT>fEeuDN=1sI!147x7$Wb83Q|}9HbO+hC%=7f3fh{huYGMC4M#zns5JdS@DW7DK7!M1n?5TO8_rj z@mfBI3V12trGS?LUJ7{8ZCyFx6_`|?z@+*FCe=M|WH@B2M3 z2D}*XV!(?5F9y6A@DjjF051W&1n?5TO8_qgycFD-k+O+(?zo9T*wKApz%AExsMTUCuY?vKW_t{G+u(EAA*FYc?Z z?swQD^KKdByuBLQ(e7JkThk4j^DRC8>W6lXJ)g~y@>AJ3(+BvM*3jl?pZj5B;KwQO zVx4>0&tms|h3a3jE9@ H^b7z1VzLNm literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/burnt_structure6.nbt b/src/main/resources/data/surviving_the_aftermath/structures/burnt_structure6.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a1554516d144ade47746f931779c01121bdc14eb GIT binary patch literal 511 zcmV86{ai=tbDl14HS zN+d|SX?la+x|AE)f})=xU<;-{zV~KCVDtk1NPnT@>o1j7kB z(Fy|-d7>F+m?xfLhP5X%b@2r+PRPS2^2{-OCG)t4C#a2>n^pVFVpc$jk{|oZtoLJGI`Qn9!e?(4Vo__|7we7bAFaLS3BT#V5V? z5Vg5aA^GaD`9CZ&`0%9lvux`hvN;cs7)C3D+aA$gs9A0YT$XUx$QBDLD*srB##GYc z%v>1e-vnlBghKDJ8(Z5Q#NR}N@bM~FTk#83C}RKJYJ;{LcmWf?r33Z~{fST46GkiP zj#wUY;e_%RpJ#{4_$i4_Kexh|!w*WVP;U8U~nm^+R002c~ B`7!_i literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/camp.nbt b/src/main/resources/data/surviving_the_aftermath/structures/camp.nbt new file mode 100644 index 0000000000000000000000000000000000000000..3a5b4d29a6d2b7aed59097afbe3dba154cb71880 GIT binary patch literal 2350 zcmdT^YfO`86n4poi&!A@!krF()G-1S1rgJXd zr)@3L%yl>%ax2uX2pv@0ZO|2|Qf7fKpAB>sO2yKaUfKJ#+#LP8AM1}d@8z85a?bgR zu6<{d{kPORF<9hF_Wx);Fj~O)c2m%;q~YBv&P3_a(j%q8*Jr=M(RR69*s{CgYTRc~ z+jlP#w$&`&CRT2H@9ny(#z1#6)%~qI7o{z?^jzZ^T4a*ea+zStZ0JkW}EmYcX;7))wNnKXA##X@nV2vH&Z5*U6WC&RjkZCMFwGM8*qp@WA zLtd6NxG99znjNZ<&DNxCuVZhWo(;vBh02?eU`at|rZS45@Mimc9BnYJHh8*I^13GRGPc=W z6QnZrvy`47rwgvi3DuZi)+8GIDRT!kH&lK2k?t?SiBJK_QirCxO9+oM^hOYXWHPs< zpmDr?V26n<$EvzrD4FTVL6^4Els#hhL|VPBn4r|g4C+eDP_k+{J9ND9BCKyAK2|5z z2Vr8HXbZI55qwQzy-F)P=94>1Sah}~Z$X9YqsNz#emS>j>V20I=Zi=By&ufWSYJEI zOYS-9fj1AdCR|s$p1sDtJkNvE%>zEU=dPYexL)XS_F4xj7bQQmJa3$%Esinqk_U~p z2P0kglJ6N^ov@BxynU`51H<`hHTuKR<+0*0S^|Y-l*mV8MV%lw39$G44(OuNfC3Dl zoA?}+TJ3mQomxo&`-tW3Pylxf|*BfipmhED^Dv>_n?w zUxPCjaEmh)V5~QGZWeqstBqcfQ=I9n3ja}mBdJIU2#D9HH?|aKdjH>kd$aasM6o9( zxCOlUuLTMTzZh;ZzH~QRMdCTQjUl3D4ZM2I{3MKDbnASexdY0)IGD$)fGpD`Y~M+L zlX>2tF^TS)#W|N0);ZnM57RT0v>2T{$B(R(+r+%IrKxtJkDG+=lUs46$9fmdnCpWA z$Wr?Actd@Hc7jTX^)o5v^;6}C8;BM$70rkIgwxN$1@KQ~=MbpSVIJXp6wa8>v^!}wL3Djj=evF}rxESAHzCX?+ z5u*%@d|q@>K$%sqpE64L4TVt(qkC#4UuOzGTVxxnw?ZUA2^+ed8De{4aTN`^cpb~z GwCNxIc(fP* literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/city.nbt b/src/main/resources/data/surviving_the_aftermath/structures/city.nbt new file mode 100644 index 0000000000000000000000000000000000000000..882412af4906808b5e964b2a8ba627d4a29d8279 GIT binary patch literal 348800 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 Dd5z29 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/construction2.nbt b/src/main/resources/data/surviving_the_aftermath/structures/construction2.nbt new file mode 100644 index 0000000000000000000000000000000000000000..91ca79d001ed329973edc4accd319ec87ecc3666 GIT binary patch literal 3486 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 Dd*U|1 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/logs.nbt b/src/main/resources/data/surviving_the_aftermath/structures/logs.nbt new file mode 100644 index 0000000000000000000000000000000000000000..5728f3e98e43aa382c88b21bf7994b3e67805459 GIT binary patch literal 543 zcmV+)0^t20iwFP!00000|E-tZYU3~vg-04m%@5suf_;&_-s{q;E(m)pjT?}+F&}D!w19Tan z%K}{%=(0eU1G*g0<$$hpPbEhIj0PA67y~dCU>v|)uP=<6Vax)fgd9D?e9hsR{k7zy zg`6qFKn?>r2FNi$jumpI>tltS>H0V!XWHe29O;=V;JKgY9$*+?YV%X`QG$;&V^g2$ z8Y;j?13p^tnPZmLM*}_#_%PtZfDZ#c2JkU}j{$rP;9~(FEBHuzur@yy@Ns~T6MW{F zrS)-u4_)T0w%>KdXJj#)_}7HoVDOQ$JEZ2nll5= z3^+63%z!fk&IWKcfU^Od4d845XA3x6z}X7U(|NXlvjv h|C6~rCsiDow!eJwzeCEgYl&{(=>ve9gLrKa000P_0%HIG literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/nether_invasion_portal.nbt b/src/main/resources/data/surviving_the_aftermath/structures/nether_invasion_portal.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a37ef427301afc07f3a6600b2f95df457ae0b284 GIT binary patch literal 40819 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

nI0O!lSCFhGnd(fE8$L>(=GhVosB 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 T+s3&6ujBs#Fyn785s(J}YA1ht literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/nether_invasion_portal_transformed.nbt b/src/main/resources/data/surviving_the_aftermath/structures/nether_invasion_portal_transformed.nbt new file mode 100644 index 0000000000000000000000000000000000000000..bc56bb2ff710f829cf534db610199537729cc85b GIT binary patch literal 40135 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 Vo|#ZKePK literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/tent.nbt b/src/main/resources/data/surviving_the_aftermath/structures/tent.nbt new file mode 100644 index 0000000000000000000000000000000000000000..87cf65a42beae4978798d9d6129373b5efa57db1 GIT binary patch literal 2338 zcmbW0dsNbC8poTmaaw0|kL(OK>ab&mHEa6o;Eoq6&aT+5MLAX;nehfXnWb4?CpBPf zTV0HD-5SLUvd7L5?__x?4MHh#y~H>ssf4VdcodOPxr6Kr&1q_O&z{b3_~YSupZCM} z`#jH!xbog6`^VZ@BR(d^e|+$-IhS$90MdmDZf*6w%BtpjM|NYsP36_6u^QIhM`B7D zw`ehYEDA^0riR}T^Hi4BJ>UCmySuAot!~=S>NZrj%UN|!t5R-o(EdHd&X|>Qepk?a z27J^c*3477;bHA}gZ+n0nsT_Obf|7-#VC29FWD{k?elfTRT7#Uj{DG&eI4&)eLlO8 zRzx-Puw;T41}a0)2VHP;j`bhh_D7m&g2Ld#v^#%>PF`ws#W4s~4lqxQK<3+5WBhUi zy5evgN&l?x$+r4%sEqm9tRr%D3(QdX1}lQ`;=gi$&kEPSS!erC zyx{TD(CgY-FwCpw8z`JRaCq6zNCb70tkBG4Lo{b{Y>Wco%oW z6FD^Ft#v{UIVUB+yX5lisa>*LM?H#j5~YfV+^19$8)l04(Q=M17ckDJkO?CZJ7hep z%wuN2!m1)3)z#G!KiXE0gQ6}q!f@9K)4xSCtN{fmK6Z*&w+uz*(s!XpPHS`P*Wi6Y z&{^IMYR0wHLof5V4%JDo=FJp|QO#FeTbPy)EPK zPE~`3**EEkSM>G43EbSrD0`2#!j!K%73URQ;Z~e#9$#KS;W}7$MDS&*M}JMoeYd@E z7n5?lT>6$FWHj(m!n`!zE2y(H3zM?W6nZmL{L zk~4w7g1Ic7UOX*b$PO}$nizbH3AIVvtq<(OV|*Wh-~3~?V|xgW zk}Ti!%SO~bQaJ) zo5ueofuXnvFfNebO{@PGqrEr_^ZP211zAf1DyrZd}<3sz2>oRf44o6-=Vl=B!+*eKAS zw@jT;gG+56*)F^m{$iXjPzUQ?hP1e6xA~L%IchEi!>=(Kh;^Y=2)6=xDw(ic$p&k) zaw-81i3;|hX`1+9=Oj*GwItt`p8*vuI#8?Nfc<;RluEBV1fBrrsvZEuf3sb-hrfjN zN`!kg;0yo}J?%gj)A1H?)glG1NJ&7jP;?eNp0$``#;hvwQ4d=;%oWU)exacv zkX_B$mQ3M>ldD&=6Ucd*6xJA7f>M$w=;d7gEZwNAyQ|kFlQ3z{l;_>zzcg$3tUB(} zxo$qWYAL}Y`NF&!Fs7-Orb|g1?mR&RMYq1_GCaDXw?1Id6{;EbQ`L${OwP-5Ad@$L zl3w0BE8*vpVrbj|Ap5X)=Zsi9x zY~N|roR%vsa@qWgl{5Ib1Eh_w$4&F{)IE#p4~1Wi9cGcS@jH?-&m1(0(CSX4_4=9+ zaj~~?$Aa|2(ies+^4gkK&SLb_;R#L3Ac9$RUm0zxXyyJZ!}P0SwmFeBH4OXZE;V@}9!si(!G$Fk!A#1?Dk%^Yg`O*wuTF4J2 zEKALV^1LQHT|azJ@kl1B4*mN&Z-Vpy6BZR1Y9)Gbf7hd#pBI?sGlpah7zWMQn7}~? z6fPFBMT!S_l7!b@!k;z#@k2x5N!8HvQH(Lp$|T;2Yl{w3YblSc@90kmd`}QIZTb%o C&+c~s literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo1.nbt b/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..1884af5e8fdb82e3e24b83b34f830513bda04b54 GIT binary patch literal 733 zcmV<30wVn%iwFP!00000|Gk&pPTMd5g&qI(Z|rKDH0@&VvFlw=yV`AKirYqnII@kZ z@dkVAIe=4BV&~8eDuoL8a?WSRPMakm3&LG}rx_unKW5?J{jnf(-TK_WP;Ny9|@&Tx9O^r5p<6Fd&BkIULA|OzFPLfi3}DQvq~ErgRS%BR*s6dCEru zJ`(VefDd`R_ET&A^fNcdOnt^tV9ihYR6th+bWxy-0yzxG8TJ^!l)5<3#euHKl;)5F zJ_7I&fR6xt1mGh99|`zKz()c;B)$X8)c#@&!vh?ct#{j`ZEv#cT~E8(EizyrYKSA-2yJh$ zx1Q71A*0y-$JQdH2>Rv!zxWVJ=Y-4%clA%r2qFD32?y_w8JX(V*S^+{^p6>ltH!MF z-8{VLW`uRd#gnRdFe02+UO%02jiDKa0yz}OVL%Q8ayY?0D)*hgMj^QG~L zOm2K4lN+DN(oVK9L#w%o7X+n9_c~ z^jRdBan75>eLj~%fgA?pFd&BmIg!cTS2@rnfH@UFS7dVcaB;=w+IlYeNWez|J`(UD zPjg>d^Ov8wDW>!pM}ak8@~MEX3h1Ih7X@+{kTdKtfXQ`npo;@tk;#oA2YdwJBLE)( z_z1v90zMM(k${f`d`Nr-n9}}Y1)s>2_E*WL0(>gKrviK^;6ni)3iwdKhXFne@L_-t z1AI8(!vP--_;A2S06qfn5rB^Xd?er_0UrtY$b`?NQ;qgs_h0Alri6c02TeX6>Q=9< z+WOBMTkFm8UN_zH;d?)c%-xw$wGDqG&c9jHY1{v&U`iIJP+=Rh+vyDvTh%xnPV_%I zO_(>`kn--F;yQa=>!oYd>N1V*RkI~>WxO|sMEImLCv8V>$gNt}?T(1nSicV;A+HS% z_Na&Y_vd<}?w8)GZez@|t9k72#S`Vi?Nzw6sS649ZtpMKhr+ji7KWLqt^1#K&Kz&6 zyLEIQ3jb+zCw03#siyhcvd7;JZJ(YkrLAtm&t1RRZ@A>wALN%KWXQ$&+3O~ pz9_H0YwK#$hTG~d@*Do!p&DTo007m+Tf6`O literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo3.nbt b/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo3.nbt new file mode 100644 index 0000000000000000000000000000000000000000..794912d8e2d3a5d422093f7d4f9531a9d5981874 GIT binary patch literal 703 zcmV;w0zmyAiwFP!00000|Gk*qZqqOrh8_R)k4YQ=65>uc<`{9rY2|iq8!e3^+f@a3 zz+K~Pa~j&(ekp8~vT4hc_kHrkN!QH@nGx>lpPCUu`fU<6-fuH9)vd36tsUuKGa^@w zSwFaW_@SE-))^NMs^Z3oa9(-+e8e?|W*7?OP#}i^ISk0*08>S$f-}mL&a1=>uMtxv zmICnB$0H31;lW6U^90B$%;}yt3v? z^NCDuK9R}ICo;MD2*4*YW1mTap#YQfk$_KR#y-;oGxnJ!n4HgJPr)ZLW1o3~p#W35 z-_Ly(31*!0Ch?rl^3ZN@8xo5bz;&W|1mwY7PBLN=? z_>kvoUt06$@3|?a^d3inHDB_nfUXMYqCgh~au|>^++zTf>*7Ec2f8AYn;{2$1mGh8 z9|8CXz()c;67Z3Lj|6;3{0=as`->HPB2&7*Ng%hG5&6?N;9tu~CiF;XwbR(}a1` z4Jq$WDXz1JwO+bLtWh!5;Kb z|KU_`)WgzS)!iF&aW+r=y?CNrxSa~8HgzGP-tPQ)`%w7q&%!YO+PeQ)=gi@@x?89F zSolxVoz(5}sG8<)%bxZQZJ#cd(nh!8>$YFwH=Oe85BVil(T$gtAGPz>ujz9_H0YwK#$hKK1d@*4)!`=eJC008S!TT}o5 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo4.nbt b/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo4.nbt new file mode 100644 index 0000000000000000000000000000000000000000..5fc8c8c10428790467f3a94092247e76ed0b3bbf GIT binary patch literal 703 zcmV;w0zmyAiwFP!00000|Gk*oZqqOTh8>@JVi!n&gm@FKxkg-ZTe+RvMor_$c2&U} z@YXonoQAHpe+pZrtlIMB|G)TqM6MdM z-n)7DrkfGg85b|A;=zb;UU~g=#WjXz7z*T2Acp}t49MXCQ$?qOGs=|itHcbi5mP0Y z3ScO}unbcHK9L#w&;&yPCg(!|pUC8VB9rrpOwMN*#}UI4%-Dw~n6ZyYFk>HiWzCny zCo;M5iA-*MB9j{*0r*5_>@!I)6ku{b67Y%4*k_tx#y+zIlk<7#DfmQY>@!a=6ktmG z{nBTVV8%Ib63_Wu4h3=;ki&o+4&+28_gv*bmjLEe09}#EJ;TKnpKI&6Wxkt2$`%_E5Ka zZPmtq?v96UU$-Qlx;vjzwGF=-&c9jHY1{vUU`iIJkZc>X-RgTHHmY$tTKWXQ$&+5l#z9_H0YwK#$hNtN-@*4^KZfIB)006CGQXT*R literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo5.nbt b/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo5.nbt new file mode 100644 index 0000000000000000000000000000000000000000..60a0ffb2c7e52c6e928a17450f0a11f0bde986ba GIT binary patch literal 712 zcmV;(0yq61iwFP!00000|Gk*oZrU&ah8>?cbiLX^n)W8U-u1Mr-6BH`L=ACd8!`3< zd+RxE9WsjTe{3yMTDAG||6hCvrE@}NguD8uW`vObn1qA($BayM>uXI=OcrYTIS6)9|afzWBh5|Vh$YDSZ19CXPRMDy6j54MBDlx-r#8e5U z0vHM~EW=cQPh`eEG{I1S$@x&gCo(yo$mDz?lk*wIam26$Gxp&LX6z#p%-Ba>So5Xv ziA-*MB9j}R$mGUH06vi!`%DrH1(=+V1biYh_L(M_vCk~Qb5l&|J&povzT{H@T@}zpfi4QA8jrMS-SS9;+ZwLDMbTh*+ITpI7qE)hQI%t71HFXURS>UKj!Ypmaf zkdW5~2fNop{fAS%QTGdPRd;91v%7ih@5K}4!fjQ!wW$jU^=9kO+lRt;e-?(Rsjd5; zbAL))ikOKGj!@O9I#{wr?z^#}PSR?(Hy$`9K4 u%d`6N**NF7%?oVX*HXx=?Ti8=H(!)j-?eqMX~T2&7x@hil;l8i6#xKB_g^Cb literal 0 HcmV?d00001 diff --git a/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo6.nbt b/src/main/resources/data/surviving_the_aftermath/structures/wagon_cargo6.nbt new file mode 100644 index 0000000000000000000000000000000000000000..e70716b9ceae21357872c801b3bc93b64ebaa2ed GIT binary patch literal 706 zcmV;z0zLg7iwFP!00000|Gk*oZrU&ah8>?ct#{j`ZEv#cT~E8(Ei%+V)DTCu5!&8h zZ#{?BA*0y-$JQdH2>Rv!zxWVJ=Y-4%clA%r2qFD32?y_w8JX(V*S^+{^p6>ltH!J! z+&sMKW`uRd#gnRdFe02+UO%02jiDKa0yz}OVL%Q8ayY?0D)*hgMj^QG~L zOm2K4lN+DN+DpU8}T<_U%ZOliMg z`YaO6IOk2`KA+2>Kn??P7?8t(oXF(vs~qSOz?=%8D>AuzxVYkTZ9SKKB;X?f9|`!7 zr@1e!`ODAT6jS<)qrjRk`BXqx1$0rMivl?e$Qkw+z~s6((8YnS$mGV513m)q5rB^X zd<5Vl0UrtYNWez|J|sQ^Olg0yf=^^h`>W(r0X`MrQvp5{@S%VY1$-#r!vG%!_%OhS z0X`h?;eZbZd^q4E03QMP2*5`GJ`(VefR6-xWWs0CsYZLR`>*qNQ^LQhy(S;`b*tA_ zZTx4ej?1;_I&GJy@BJh)cV|Y`HvEk^|7K0V`u`M6$>JC)Y-6@teNV(jHBN^U{f|x) z=1n)GygR43&K}l!=^C}VOyfJ%Y=~SL@6A3DKIzO++tC|xqt