diff --git a/src/generated/resources/assets/anvilcraft/lang/en_ud.json b/src/generated/resources/assets/anvilcraft/lang/en_ud.json index 415c22698a..45d6aecf87 100644 --- a/src/generated/resources/assets/anvilcraft/lang/en_ud.json +++ b/src/generated/resources/assets/anvilcraft/lang/en_ud.json @@ -63,6 +63,8 @@ "advancements.anvilcraft.mining_void.title": "pᴉoʌ ᵷuᴉuᴉW", "advancements.anvilcraft.networking.description": "ǝꞁod uoᴉssᴉɯsuɐɹʇ ǝɔɐꞁd puɐ ʇɟɐɹƆ", "advancements.anvilcraft.networking.title": "ᵷuᴉʞɹoʍʇǝN", + "advancements.anvilcraft.new_cycle.description": "ꞁᴉʌuⱯ ᵷuᴉᵷɹoℲ ꞁɐᴉʇsǝꞁǝƆ ǝɥʇ ɯoɹɟ ɹɐǝddɐsᴉp uoᴉʇɐzᴉꞁᴉʌᴉɔ ɐ ssǝuʇᴉM", + "advancements.anvilcraft.new_cycle.title": "ǝꞁɔʎƆ ʍǝN Ɐ", "advancements.anvilcraft.new_matter.description": "ɹǝʇʇɐɯ ǝʌᴉʇɐᵷǝu ɹo ɹǝʇʇɐɯ ǝsɐɥdᴉʇꞁnɯ 'ɯnᴉuɐɹn ʇɟɐɹɔ oʇ uoᴉsᴉꞁꞁoɔ ꞁᴉʌuɐ ᵷuᴉs∩", "advancements.anvilcraft.new_matter.title": "ɹǝʇʇɐW ʍǝN", "advancements.anvilcraft.noble_metal.description": "ꞁǝǝʇs ꞁɐʎoɹ ᵷuᴉʇꞁǝɯS", @@ -1099,6 +1101,7 @@ "item.anvilcraft.chocolate_black": "ǝʇɐꞁoɔoɥƆ ʞɹɐᗡ", "item.anvilcraft.chocolate_white": "ǝʇɐꞁoɔoɥƆ ǝʇᴉɥM", "item.anvilcraft.circuit_board": "pɹɐoᗺ ʇᴉnɔɹᴉƆ", + "item.anvilcraft.civilization_catalyst": "ʇsʎꞁɐʇɐƆ uoᴉʇɐzᴉꞁᴉʌᴉƆ", "item.anvilcraft.cocoa_butter": "ɹǝʇʇnᗺ ɐoɔoƆ", "item.anvilcraft.cocoa_liquor": "ɹonbᴉꞀ ɐoɔoƆ", "item.anvilcraft.cocoa_powder": "ɹǝpʍoԀ ɐoɔoƆ", @@ -1626,6 +1629,9 @@ "screen.anvilcraft.cfa.megastructure.matter_decompressor": "ɹossǝɹdɯoɔǝᗡ ɹǝʇʇɐW", "screen.anvilcraft.cfa.megastructure.matter_decompressor.description": "ɹǝsɐꞁ ɐɯɯɐᵷ ɥʇᴉʍ pꞁǝᴉɟ ꞁɐuoᴉʇɐʇᴉʌɐɹᵷ ɔᴉʇoxǝ ǝɥʇ ᵷuᴉʇɐʌᴉʇɔɐ ʎq sǝꞁoɥ ʞɔɐꞁq ɟo uozᴉɹoɥ ʇuǝʌǝ ǝɥʇ uᴉɥʇᴉʍ ɹo sɹɐʇs uoɹʇnǝu ɟo ɹoᴉɹǝʇuᴉ ǝɥʇ ɯoɹɟ ɹǝʇʇɐɯ ʇɔɐɹʇxƎ", "screen.anvilcraft.cfa.megastructure.matter_decompressor.usage": "ɹ§ǝuoNㄥ§\n:sʇɔǝɟɟƎ ǝpᴉS\n———————\nɹ§ǝdʎʇ ʎpoq ꞁɐᴉʇsǝꞁǝɔ uo pǝsɐq ɹǝʇʇɐɯ ᵷuᴉpuodsǝɹɹoɔ sʇndʇnOɟ§\nɹ§[ʇuI ᵷoꞀ]ǝ§\n:sʇndʇnO\n———————\nɹ§(ʎɔuǝᴉɔᴉɟɟǝ ʞɹoʍ ɹǝɥᵷᴉɥ sǝpᴉʌoɹd ꞁǝʌǝꞁ ɥɔɐǝ)ɟ§ɹ§ +⥝˙ʌꞀ ɹǝsɐꞀ ɐɯɯɐ⅁p§\nɹ§[ʇuI ɹsꞀ]ɔ§\n:sǝɹᴉnbǝᴚ", + "screen.anvilcraft.cfa.megastructure.monolith_deployer": "ɹǝʎoꞁdǝᗡ ɥʇᴉꞁouoW", + "screen.anvilcraft.cfa.megastructure.monolith_deployer.description": "uoᴉʇnꞁoʌǝ sʇᴉ ǝʇɐɹǝꞁǝɔɔɐ ʎꞁʇɥᵷᴉꞁs puɐ ʇǝuɐꞁd ǝɥʇ oʇuo sɥʇᴉꞁouoɯ ʇɔǝɾoɹԀ", + "screen.anvilcraft.cfa.megastructure.monolith_deployer.usage": "ɹ§pǝɯnsuoɔ sᴉ ɹǝʎoꞁdǝp ǝɥ⟘ɟ§\nɹ§ɹɐǝddɐsᴉp oʇ ǝɔuɐɥ% c0ϛ ɐ puɐ ʇǝuɐꞁd puɐꞁǝʇsɐʍ ɐ ǝɯoɔǝq oʇ ǝɔuɐɥ% c0ϛ ɐ ǝʌɐɥ suoᴉʇɐzᴉꞁᴉʌᴉɔ ǝʌᴉʇᴉɯᴉɹd ᵷuᴉʇsᴉxƎɟ§\nɹ§sǝɔɹnosǝɹ ꞁɐɔᴉᵷoꞁoᴉq ɥʇᴉʍ ʇǝuɐꞁd ɐ uo uoᴉʇɐzᴉꞁᴉʌᴉɔ ǝʌᴉʇᴉɯᴉɹd ɐ sǝʇɐǝɹƆɟ§\n:spuoɔǝs 0⥝ ɹǝʇɟɐ sʇɔǝɟɟƎ\n———————\nɹ§uoᴉʇɐzᴉꞁᴉʌᴉɔ ǝʌᴉʇᴉɯᴉɹd ɐ ɹo 'sǝɔɹnosǝɹ ɯǝʇᴉ ꞁɐɔᴉᵷoꞁoᴉq ɟo sǝdʎʇ Ɛ ʇsɐǝꞁ ʇɐ ɥʇᴉʍ ʇǝuɐꞁd ʎʞɔoᴚɟ§\n:sǝɹᴉnbǝᴚ", "screen.anvilcraft.cfa.megastructure.penrose_sphere": "ǝɹǝɥdS ǝsoɹuǝԀ", "screen.anvilcraft.cfa.megastructure.penrose_sphere.description": "ʎᵷɹǝuǝ ɹǝsɐꞁ ǝɔuɐɥuǝ oʇ ǝꞁoɥ ʞɔɐꞁq ɐ ɟo uoᴉʇɐʇoɹ pǝǝds-ɥᵷᴉɥ ǝɥʇ ʎq pǝʇɐɹǝuǝᵷ ǝɹǝɥdsoᵷɹǝ ǝɥʇ ǝzᴉꞁᴉʇ∩", "screen.anvilcraft.cfa.megastructure.penrose_sphere.usage": "ɹ§ǝuoNㄥ§\n:sʇɔǝɟɟƎ ǝpᴉS\n———————\nɹ§(ǝpᴉs ǝɯɐs ǝɥʇ uo ʇnduᴉ ǝɥʇ ǝʇᴉsoddo sᴉ ǝɔɐɟɹǝʇuᴉ ʇndʇno)ɟ§ɹ§ =˙ʌꞀ ɹǝsɐꞀ ɐɯɯɐ⅁p§\nɹ§[ʇuI ɹsꞀ]ɔ§\n:sʇndʇnO\n———————\nɹ§(ⱯℲƆ ǝɥʇ ɟo ɹǝʇuǝɔ ǝpᴉs ǝɥʇ uo ǝq ʇouuɐɔ)ɟ§ɹ§ +⥝˙ʌꞀ ɹǝsɐꞀɔ§\nɹ§[ʇuI ɹsꞀ]ɔ§\n:sǝɹᴉnbǝᴚ", diff --git a/src/generated/resources/assets/anvilcraft/lang/en_us.json b/src/generated/resources/assets/anvilcraft/lang/en_us.json index 21e561cd8d..552adec99c 100644 --- a/src/generated/resources/assets/anvilcraft/lang/en_us.json +++ b/src/generated/resources/assets/anvilcraft/lang/en_us.json @@ -63,6 +63,8 @@ "advancements.anvilcraft.mining_void.title": "Mining void", "advancements.anvilcraft.networking.description": "Craft and place transmission pole", "advancements.anvilcraft.networking.title": "Networking", + "advancements.anvilcraft.new_cycle.description": "Witness a civilization disappear from the Celestial Forging Anvil", + "advancements.anvilcraft.new_cycle.title": "A New Cycle", "advancements.anvilcraft.new_matter.description": "Using anvil collision to craft uranium, multiphase matter or negative matter", "advancements.anvilcraft.new_matter.title": "New Matter", "advancements.anvilcraft.noble_metal.description": "Smelting royal steel", @@ -1099,6 +1101,7 @@ "item.anvilcraft.chocolate_black": "Dark Chocolate", "item.anvilcraft.chocolate_white": "White Chocolate", "item.anvilcraft.circuit_board": "Circuit Board", + "item.anvilcraft.civilization_catalyst": "Civilization Catalyst", "item.anvilcraft.cocoa_butter": "Cocoa Butter", "item.anvilcraft.cocoa_liquor": "Cocoa Liquor", "item.anvilcraft.cocoa_powder": "Cocoa Powder", @@ -1626,6 +1629,9 @@ "screen.anvilcraft.cfa.megastructure.matter_decompressor": "Matter Decompressor", "screen.anvilcraft.cfa.megastructure.matter_decompressor.description": "Extract matter from the interior of neutron stars or within the event horizon of black holes by activating the exotic gravitational field with gamma laser", "screen.anvilcraft.cfa.megastructure.matter_decompressor.usage": "Requires:\n§c[Lsr Int]§r\n§dGamma Laser Lv.1+ §r§f(each level provides higher work efficiency)§r\n———————\nOutputs:\n§e[Log Int]§r\n§fOutputs corresponding matter based on celestial body type§r\n———————\nSide Effects:\n§7None§r", + "screen.anvilcraft.cfa.megastructure.monolith_deployer": "Monolith Deployer", + "screen.anvilcraft.cfa.megastructure.monolith_deployer.description": "Project monoliths onto the planet and slightly accelerate its evolution", + "screen.anvilcraft.cfa.megastructure.monolith_deployer.usage": "Requires:\n§fRocky planet with at least 3 types of biological item resources, or a primitive civilization§r\n———————\nEffects after 10 seconds:\n§fCreates a primitive civilization on a planet with biological resources§r\n§fExisting primitive civilizations have a 50% chance to become a wasteland planet and a 50% chance to disappear§r\n§fThe deployer is consumed§r", "screen.anvilcraft.cfa.megastructure.penrose_sphere": "Penrose Sphere", "screen.anvilcraft.cfa.megastructure.penrose_sphere.description": "Utilize the ergosphere generated by the high-speed rotation of a black hole to enhance laser energy", "screen.anvilcraft.cfa.megastructure.penrose_sphere.usage": "Requires:\n§c[Lsr Int]§r\n§cLaser Lv.1+ §r§f(cannot be on the side center of the CFA)§r\n———————\nOutputs:\n§c[Lsr Int]§r\n§dGamma Laser Lv.= §r§f(output interface is opposite the input on the same side)§r\n———————\nSide Effects:\n§7None§r", diff --git a/src/generated/resources/assets/anvilcraft/models/item/civilization_catalyst.json b/src/generated/resources/assets/anvilcraft/models/item/civilization_catalyst.json new file mode 100644 index 0000000000..caee28a2d0 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft/models/item/civilization_catalyst.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "anvilcraft:item/civilization_catalyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/anvilcraft/new_cycle.json b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/new_cycle.json new file mode 100644 index 0000000000..f70dbf1820 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/anvilcraft/new_cycle.json @@ -0,0 +1,31 @@ +{ + "parent": "anvilcraft:anvilcraft/the_start", + "criteria": { + "new_cycle": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "description": { + "translate": "advancements.anvilcraft.new_cycle.description" + }, + "frame": "challenge", + "hidden": true, + "icon": { + "count": 1, + "id": "anvilcraft:civilization_catalyst" + }, + "title": { + "translate": "advancements.anvilcraft.new_cycle.title" + } + }, + "requirements": [ + [ + "new_cycle" + ] + ], + "rewards": { + "experience": 1395 + }, + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/charger_charging/magnet_block_from_ferrite_core_magnet_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/charger_charging/magnet_block_from_ferrite_core_magnet_block.json new file mode 100644 index 0000000000..b715ef13eb --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/charger_charging/magnet_block_from_ferrite_core_magnet_block.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:charger_charging/magnet_block_from_ferrite_core_magnet_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:charger_charging/magnet_block_from_ferrite_core_magnet_block" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/misc/civilization_catalyst.json b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/civilization_catalyst.json new file mode 100644 index 0000000000..9d86c87d58 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/misc/civilization_catalyst.json @@ -0,0 +1,54 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_corrupted_beacon": { + "conditions": { + "items": [ + { + "items": "anvilcraft:corrupted_beacon" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_legacy_essence": { + "conditions": { + "items": [ + { + "items": "anvilcraft:legacy_essence" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_monolith": { + "conditions": { + "items": [ + { + "items": "anvilcraft:monolith" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:civilization_catalyst" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_monolith", + "has_legacy_essence", + "has_corrupted_beacon" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:civilization_catalyst" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/hollow_magnet_block_from_magnet_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/hollow_magnet_block_from_magnet_block.json new file mode 100644 index 0000000000..ca7d1ae59e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/hollow_magnet_block_from_magnet_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_magnet_block": { + "conditions": { + "items": [ + { + "items": "anvilcraft:magnet_block" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:hollow_magnet_block_from_magnet_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_magnet_block" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:hollow_magnet_block_from_magnet_block" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/magnet_block_from_hollow_magnet_block.json b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/magnet_block_from_hollow_magnet_block.json new file mode 100644 index 0000000000..9584888d22 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/advancement/recipes/redstone/magnet_block_from_hollow_magnet_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_hollow_magnet_block": { + "conditions": { + "items": [ + { + "items": "anvilcraft:hollow_magnet_block" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft:magnet_block_from_hollow_magnet_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_hollow_magnet_block" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft:magnet_block_from_hollow_magnet_block" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/charger_charging/magnet_block_from_ferrite_core_magnet_block.json b/src/generated/resources/data/anvilcraft/recipe/charger_charging/magnet_block_from_ferrite_core_magnet_block.json new file mode 100644 index 0000000000..55b155c337 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/charger_charging/magnet_block_from_ferrite_core_magnet_block.json @@ -0,0 +1,12 @@ +{ + "type": "anvilcraft:charger_charging", + "ingredient": { + "item": "anvilcraft:ferrite_core_magnet_block" + }, + "power": -4, + "result": { + "count": 1, + "id": "anvilcraft:magnet_block" + }, + "time": 40 +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/civilization_catalyst.json b/src/generated/resources/data/anvilcraft/recipe/civilization_catalyst.json new file mode 100644 index 0000000000..2930a66c9e --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/civilization_catalyst.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "anvilcraft:corrupted_beacon" + }, + "E": { + "item": "anvilcraft:legacy_essence" + }, + "M": { + "item": "anvilcraft:monolith" + } + }, + "pattern": [ + "MEM", + "MBM", + "MEM" + ], + "result": { + "count": 4, + "id": "anvilcraft:civilization_catalyst" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/hollow_magnet_block_from_magnet_block.json b/src/generated/resources/data/anvilcraft/recipe/hollow_magnet_block_from_magnet_block.json new file mode 100644 index 0000000000..b0669b6823 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/hollow_magnet_block_from_magnet_block.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "A": { + "item": "anvilcraft:magnet_block" + } + }, + "pattern": [ + "AAA", + "A A", + "AAA" + ], + "result": { + "count": 9, + "id": "anvilcraft:hollow_magnet_block" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft/recipe/magnet_block_from_hollow_magnet_block.json b/src/generated/resources/data/anvilcraft/recipe/magnet_block_from_hollow_magnet_block.json new file mode 100644 index 0000000000..91e279fab8 --- /dev/null +++ b/src/generated/resources/data/anvilcraft/recipe/magnet_block_from_hollow_magnet_block.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "A": { + "item": "anvilcraft:hollow_magnet_block" + } + }, + "pattern": [ + "AAA", + "AAA", + "AAA" + ], + "result": { + "count": 8, + "id": "anvilcraft:magnet_block" + } +} \ No newline at end of file diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java index 6ea2d64455..f4dc51fb3a 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java @@ -1290,6 +1290,25 @@ public void addToSearchHistory(CelestialBodyData data, @Nullable PlanetaryResour this.searchHistoryController.add(data, resources); } + /** Applies a monolith outcome and invalidates its previous resource snapshot in search history. */ + public void completeMonolithDeployment(@Nullable PlanetaryResourceSet resources) { + if (this.level == null || this.level.isClientSide() || this.celestialBodyData == null) return; + CelestialBodyData body = this.celestialBodyData; + this.clearMegastructure(); + this.searchHistoryController.remove(body); + this.planetaryResourceSet = resources; + if (resources == null) { + this.celestialBodyData = null; + this.stellarMass = 0; + this.locked = false; + this.removeGravitySource(); + } else { + this.addToSearchHistory(body, resources); + } + this.setChanged(); + this.level.sendBlockUpdated(this.worldPosition, this.getBlockState(), this.getBlockState(), Block.UPDATE_CLIENTS); + } + public void clearSearchHistory() { this.searchHistoryController.clear(); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaMegastructureManager.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaMegastructureManager.java index 0b9ff5266a..58ff6d44ab 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaMegastructureManager.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CfaMegastructureManager.java @@ -15,6 +15,7 @@ import dev.dubhe.anvilcraft.block.entity.megastructure.IMegastructureHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.MagnetarCoilHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.MatterDecompressorHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.MonolithDeployerHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.PenroseSphereHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.TempleHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.WormholeStabilizerHandler; @@ -78,6 +79,7 @@ private void registerLegacyHandlers() { this.registerLegacy(new WormholeStabilizerHandler()); this.registerLegacy(new EcoStationHandler()); this.registerLegacy(new TempleHandler()); + this.registerLegacy(new MonolithDeployerHandler()); this.registerLegacy(new AcceleratorHandler()); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialSearchHistory.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialSearchHistory.java index 18ee0c45e1..6c061b7ce7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialSearchHistory.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/CelestialSearchHistory.java @@ -41,6 +41,13 @@ public void add( this.resetBrowsing(); } + /** Removes stale versions of a transformed or vanished body without discarding other discoveries. */ + public void remove(CelestialBodyData body) { + CompoundTag identity = body.toTag(); + this.entries.removeIf(entry -> entry.body().toTag().equals(identity)); + this.resetBrowsing(); + } + public boolean hasPrevious() { return this.entries.size() > 1 && this.browseIndex < this.entries.size(); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceGenerator.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceGenerator.java index 023615a961..aacca69bfa 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceGenerator.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/celestial/PlanetResourceGenerator.java @@ -123,6 +123,32 @@ public static PlanetaryResourceSet generate( return set; } + /** Advances existing life, preserving all resources if the target recipe is unavailable. */ + public static PlanetaryResourceSet advanceCivilization(PlanetaryResourceSet current, Level level, long seed) { + PlanetaryResourceSet result = new PlanetaryResourceSet(); + current.getMinerals().forEach(result::addMineral); + current.getFluids().forEach(result::addFluid); + RandomSource random = RandomSource.create(seed); + PlanetResourceRecipe.Category category = current.hasCivilization() + ? PlanetResourceRecipe.Category.WASTELAND : PlanetResourceRecipe.Category.OFFERING; + PlanetResourceRecipe recipe = level.getRecipeManager() + .getAllRecipesFor(ModRecipeTypes.PLANET_RESOURCE_TYPE.get()).stream() + .map(RecipeHolder::value) + .filter(candidate -> candidate.category() == category) + .findFirst().orElse(null); + if (recipe == null) return current; + if (current.hasCivilization()) { + if (recipe.wastelandData() == null) return current; + result.setWasteland(); + generateWasteland(result, recipe.wastelandData(), random); + } else { + if (recipe.offeringData() == null) return current; + result.setHasCivilization(); + generateOfferings(result, recipe.offeringData(), random); + } + return result; + } + /// === 矿物 === private static void generateMinerals( @@ -284,7 +310,16 @@ private static boolean tryCivilization( if (ageAnvilCount < od.ageMin() || ageAnvilCount > od.ageMax()) return false; if (random.nextInt(100) >= od.civilizationChance()) return false; - for (PlanetResourceRecipe.WeightedEntry entry : od.entries()) { + generateOfferings(set, od, random); + return true; + } + + private static void generateOfferings( + PlanetaryResourceSet set, + PlanetResourceRecipe.OfferingData data, + RandomSource random + ) { + for (PlanetResourceRecipe.WeightedEntry entry : data.entries()) { ResourceLocation id = entry.select(random); // Keep accepting the old 1.21 pseudo entries when an existing // datapack has not yet been regenerated to the nested-choice form. @@ -302,7 +337,6 @@ private static boolean tryCivilization( set.addOffering(new PlanetaryResourceSet.WeightedItemStack(id, entry.weight())); } } - return true; } /// === 生物资源(调用方已确认存在生命) === @@ -400,7 +434,15 @@ private static void tryWasteland( if (random.nextInt(100) >= wd.wastelandChance()) return; set.setWasteland(); - for (PlanetResourceRecipe.WeightedEntry entry : wd.entries()) { + generateWasteland(set, wd, random); + } + + private static void generateWasteland( + PlanetaryResourceSet set, + PlanetResourceRecipe.WastelandData data, + RandomSource random + ) { + for (PlanetResourceRecipe.WeightedEntry entry : data.entries()) { set.addWastelandItem(new PlanetaryResourceSet.WeightedItemStack( entry.select(random), entry.weight() )); diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/MonolithDeployerHandler.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/MonolithDeployerHandler.java new file mode 100644 index 0000000000..92a4b12c31 --- /dev/null +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/megastructure/MonolithDeployerHandler.java @@ -0,0 +1,89 @@ +package dev.dubhe.anvilcraft.block.entity.megastructure; + +import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.block.entity.CelestialForgingAnvilBlockEntity; +import dev.dubhe.anvilcraft.block.entity.celestial.CelestialBodyData; +import dev.dubhe.anvilcraft.block.entity.celestial.PlanetResourceGenerator; +import dev.dubhe.anvilcraft.block.entity.celestial.PlanetaryResourceSet; +import dev.dubhe.anvilcraft.block.entity.celestial.RockyPlanetData; +import dev.dubhe.anvilcraft.block.entity.celestial.SpecialCelestialBodyData; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; + +import javax.annotation.Nullable; + +/** Projects a monolith onto a planet, advancing its civilization after ten seconds. */ +public class MonolithDeployerHandler extends BaseMegastructureHandler { + private static final int DEPLOYMENT_TICKS = 200; + private static final int ADVANCEMENT_RADIUS = 16; + private int ticksRemaining; + + @Override + public String name() { + return "monolith_deployer"; + } + + public static boolean canDeploy(@Nullable PlanetaryResourceSet resources) { + return resources != null && !resources.isWasteland() + && (resources.hasCivilization() || resources.getBiologicalItems().stream() + .filter(entry -> entry.weight() > 0) + .map(PlanetaryResourceSet.WeightedItemStack::itemId) + .distinct().count() >= 3); + } + + @Override + public void onBuild(CelestialForgingAnvilBlockEntity be) { + this.ticksRemaining = DEPLOYMENT_TICKS; + be.setChanged(); + } + + @Override + public void onClear(CelestialForgingAnvilBlockEntity be) { + this.ticksRemaining = 0; + } + + @Override + public void serverTick(CelestialForgingAnvilBlockEntity be) { + if (!(be.getLevel() instanceof ServerLevel level) || this.ticksRemaining <= 0) return; + this.ticksRemaining--; + be.setChanged(); + if (this.ticksRemaining > 0) return; + PlanetaryResourceSet resources = be.getPlanetaryResourceSet(); + CelestialBodyData body = be.getCelestialBodyData(); + boolean planet = body instanceof RockyPlanetData + || body instanceof SpecialCelestialBodyData special && !special.isErrorPlanet(); + if (!planet || !canDeploy(resources)) { + be.clearMegastructure(); + level.sendBlockUpdated(be.getBlockPos(), be.getBlockState(), be.getBlockState(), 3); + return; + } + if (resources.hasCivilization() && level.getRandom().nextBoolean()) { + be.completeMonolithDeployment(null); + awardNewCycle(be, level); + } else { + be.completeMonolithDeployment(PlanetResourceGenerator.advanceCivilization(resources, level, level.getRandom().nextLong())); + } + } + + private static void awardNewCycle(CelestialForgingAnvilBlockEntity be, ServerLevel level) { + AdvancementHolder advancement = level.getServer().getAdvancements().get(AnvilCraft.of("anvilcraft/new_cycle")); + if (advancement == null) return; + for (ServerPlayer player : level.getPlayers(player -> player.distanceToSqr(be.getBlockPos().getCenter()) + <= ADVANCEMENT_RADIUS * ADVANCEMENT_RADIUS)) { + player.getAdvancements().award(advancement, "new_cycle"); + } + } + + @Override + public void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { + tag.putInt("monolithDeploymentTicks", this.ticksRemaining); + } + + @Override + public void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { + this.ticksRemaining = Math.clamp(tag.getInt("monolithDeploymentTicks"), 0, DEPLOYMENT_TICKS); + } +} diff --git a/src/main/java/dev/dubhe/anvilcraft/data/advancement/AnvilCraftAdvancement.java b/src/main/java/dev/dubhe/anvilcraft/data/advancement/AnvilCraftAdvancement.java index 206e526cea..d2feda6baf 100644 --- a/src/main/java/dev/dubhe/anvilcraft/data/advancement/AnvilCraftAdvancement.java +++ b/src/main/java/dev/dubhe/anvilcraft/data/advancement/AnvilCraftAdvancement.java @@ -10,6 +10,9 @@ import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.init.item.ModItems; import dev.dubhe.anvilcraft.init.loot.ModLootTables; +import net.minecraft.advancements.AdvancementRewards; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.advancements.critereon.ImpossibleTrigger; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Items; @@ -431,5 +434,10 @@ public static void init(RegistrumAdvancementProvider provider) { .challenge(ModBlocks.CELESTIAL_FORGING_ANVIL, "the_start") .hasItems("has_celestial_forging_anvil", ModBlocks.CELESTIAL_FORGING_ANVIL) .save("the_start"); + industrialLine.next() + .challenge(ModItems.CIVILIZATION_CATALYST, "new_cycle", true) + .addCriterion("new_cycle", CriteriaTriggers.IMPOSSIBLE.createCriterion(new ImpossibleTrigger.TriggerInstance())) + .rewards(AdvancementRewards.Builder.experience(1395)) + .save("new_cycle"); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/data/lang/AdvancementLang.java b/src/main/java/dev/dubhe/anvilcraft/data/lang/AdvancementLang.java index 0a45ae3e3f..7d285a7705 100644 --- a/src/main/java/dev/dubhe/anvilcraft/data/lang/AdvancementLang.java +++ b/src/main/java/dev/dubhe/anvilcraft/data/lang/AdvancementLang.java @@ -156,6 +156,9 @@ public static void init(RegistrumLangProvider provider) { provider.add("advancements.anvilcraft.the_start.title", "The start"); provider.add("advancements.anvilcraft.the_start.description", "Obtain celestial forging anvil"); + provider.add("advancements.anvilcraft.new_cycle.title", "A New Cycle"); + provider.add("advancements.anvilcraft.new_cycle.description", "Witness a civilization disappear from the Celestial Forging Anvil"); + provider.add("advancements.anvilcraft.nuclear_power_10a.title", "Nuclear power, piece of cake!"); provider.add("advancements.anvilcraft.nuclear_power_10a.description", "Using heat collector to collect overheated blocks' heat"); diff --git a/src/main/java/dev/dubhe/anvilcraft/data/lang/ScreenLang.java b/src/main/java/dev/dubhe/anvilcraft/data/lang/ScreenLang.java index 59dc4bdd19..95c4c53d15 100644 --- a/src/main/java/dev/dubhe/anvilcraft/data/lang/ScreenLang.java +++ b/src/main/java/dev/dubhe/anvilcraft/data/lang/ScreenLang.java @@ -510,6 +510,7 @@ public static void init(RegistrumLangProvider provider) { provider.add("screen.anvilcraft.cfa.megastructure.planet_exctractor", "Planet Exctractor"); // 行星抽取器 provider.add("screen.anvilcraft.cfa.megastructure.eco_station", "Ecological Station"); // 生态站 provider.add("screen.anvilcraft.cfa.megastructure.temple", "Temple"); // 神庙 + provider.add("screen.anvilcraft.cfa.megastructure.monolith_deployer", "Monolith Deployer"); // 石碑投放器 provider.add("screen.anvilcraft.cfa.megastructure.giant_planet_exctractor", "Giant Planet Exctractor"); // 巨行星抽取器 provider.add("screen.anvilcraft.cfa.megastructure.dyson_sphere_brown_dwarf", "Brown Dwarf Dyson Sphere"); // 戴森球(褐矮星) provider.add("screen.anvilcraft.cfa.megastructure.stellar_ring_collider", "Stellar Ring Collider"); // 星环对撞机 @@ -526,6 +527,7 @@ public static void init(RegistrumLangProvider provider) { provider.add("screen.anvilcraft.cfa.megastructure.planet_exctractor.description", "Extracting fluid resources from the planet, and this may damage the planet's ecology"); provider.add("screen.anvilcraft.cfa.megastructure.eco_station.description", "Cultivate creatures on the planet and harvest biological resources"); provider.add("screen.anvilcraft.cfa.megastructure.temple.description", "Bestow blessings or mete out punishments to inferior civilization, and reap the resources they offer in homage"); + provider.add("screen.anvilcraft.cfa.megastructure.monolith_deployer.description", "Project monoliths onto the planet and slightly accelerate its evolution"); provider.add("screen.anvilcraft.cfa.megastructure.giant_planet_exctractor.description", "Extracting resources from the atmosphere of giant planet. In addition to gases and liquids, solid products may also be produced"); provider.add("screen.anvilcraft.cfa.megastructure.dyson_sphere_brown_dwarf.description", "Collecting a brown dwarf's energy to generate power; primordial matter can amplify the output and eventually turn it into a red dwarf"); provider.add("screen.anvilcraft.cfa.megastructure.stellar_ring_collider.description", "Utilizing the gravitational and magnetic fields of star to accelerate the anvil to higher speeds or to frequently impact and manufacture items in batches"); @@ -597,6 +599,16 @@ public static void init(RegistrumLangProvider provider) { Side Effects: §7None§r""" ); + provider.add("screen.anvilcraft.cfa.megastructure.monolith_deployer.usage", + """ + Requires: + §fRocky planet with at least 3 types of biological item resources, or a primitive civilization§r + ——————— + Effects after 10 seconds: + §fCreates a primitive civilization on a planet with biological resources§r + §fExisting primitive civilizations have a 50% chance to become a wasteland planet and a 50% chance to disappear§r + §fThe deployer is consumed§r""" + ); provider.add("screen.anvilcraft.cfa.megastructure.giant_planet_exctractor.usage", """ Requires: diff --git a/src/main/java/dev/dubhe/anvilcraft/data/recipe/ChargerChargingRecipeLoader.java b/src/main/java/dev/dubhe/anvilcraft/data/recipe/ChargerChargingRecipeLoader.java index 66fec9267f..ffcfd03d97 100644 --- a/src/main/java/dev/dubhe/anvilcraft/data/recipe/ChargerChargingRecipeLoader.java +++ b/src/main/java/dev/dubhe/anvilcraft/data/recipe/ChargerChargingRecipeLoader.java @@ -1,6 +1,7 @@ package dev.dubhe.anvilcraft.data.recipe; import dev.anvilcraft.lib.v2.registrum.providers.RegistrumRecipeProvider; +import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.init.item.ModItemTags; import dev.dubhe.anvilcraft.init.item.ModItems; @@ -21,6 +22,12 @@ public static void init(RegistrumRecipeProvider provider) { .power(-20) .time(20 * 4) .save(provider); + ChargerChargingRecipe.builder() + .requires(ModBlocks.FERRITE_CORE_MAGNET_BLOCK) + .result(ModBlocks.MAGNET_BLOCK) + .power(-4) + .time(20 * 2) + .save(provider, AnvilCraft.of("charger_charging/magnet_block_from_ferrite_core_magnet_block")); ChargerChargingRecipe.builder() .requires(ModItems.CAPACITOR_EMPTY) .result(ModItems.CAPACITOR) diff --git a/src/main/java/dev/dubhe/anvilcraft/data/recipe/RegistrumBlockRecipeLoader.java b/src/main/java/dev/dubhe/anvilcraft/data/recipe/RegistrumBlockRecipeLoader.java index ef1c5bf3e5..a97bc1985d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/data/recipe/RegistrumBlockRecipeLoader.java +++ b/src/main/java/dev/dubhe/anvilcraft/data/recipe/RegistrumBlockRecipeLoader.java @@ -267,6 +267,13 @@ public static void magnetBlock(DataGenContext ctx, R .define('A', ModItems.MAGNET_INGOT) .unlockedBy("hasitem", RegistrumRecipeProvider.has(ModItems.MAGNET_INGOT)) .save(provider); + ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, ctx.get(), 8) + .pattern("AAA") + .pattern("AAA") + .pattern("AAA") + .define('A', ModBlocks.HOLLOW_MAGNET_BLOCK) + .unlockedBy("has_hollow_magnet_block", RegistrumRecipeProvider.has(ModBlocks.HOLLOW_MAGNET_BLOCK)) + .save(provider, AnvilCraft.of("magnet_block_from_hollow_magnet_block")); } public static void hollowMagnetBlock(DataGenContext ctx, RegistrumRecipeProvider provider) { @@ -277,6 +284,13 @@ public static void hollowMagnetBlock(DataGenContext .define('A', ModItems.MAGNET_INGOT) .unlockedBy("hasitem", RegistrumRecipeProvider.has(ModItems.MAGNET_INGOT)) .save(provider); + ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, ctx.get(), 9) + .pattern("AAA") + .pattern("A A") + .pattern("AAA") + .define('A', ModBlocks.MAGNET_BLOCK) + .unlockedBy("has_magnet_block", RegistrumRecipeProvider.has(ModBlocks.MAGNET_BLOCK)) + .save(provider, AnvilCraft.of("hollow_magnet_block_from_magnet_block")); } public static void ferriteCoreMagnetBlock(DataGenContext ctx, RegistrumRecipeProvider provider) { diff --git a/src/main/java/dev/dubhe/anvilcraft/data/recipe/RegistrumItemRecipeLoader.java b/src/main/java/dev/dubhe/anvilcraft/data/recipe/RegistrumItemRecipeLoader.java index 9cb4f181cb..05d0aab55e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/data/recipe/RegistrumItemRecipeLoader.java +++ b/src/main/java/dev/dubhe/anvilcraft/data/recipe/RegistrumItemRecipeLoader.java @@ -1647,6 +1647,20 @@ public static void stellarEvolutionAcceleratorComponent( .save(provider); } + public static void civilizationCatalyst(DataGenContext ctx, RegistrumRecipeProvider provider) { + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ctx.get(), 4) + .pattern("MEM") + .pattern("MBM") + .pattern("MEM") + .define('M', ModBlocks.MONOLITH) + .define('E', ModItems.LEGACY_ESSENCE) + .define('B', ModBlocks.CORRUPTED_BEACON) + .unlockedBy(AnvilCraftDatagen.hasItem(ModBlocks.MONOLITH), AnvilCraftDatagen.has(ModBlocks.MONOLITH)) + .unlockedBy(AnvilCraftDatagen.hasItem(ModItems.LEGACY_ESSENCE), AnvilCraftDatagen.has(ModItems.LEGACY_ESSENCE)) + .unlockedBy(AnvilCraftDatagen.hasItem(ModBlocks.CORRUPTED_BEACON), AnvilCraftDatagen.has(ModBlocks.CORRUPTED_BEACON)) + .save(provider); + } + public static void checkValve(DataGenContext ctx, RegistrumRecipeProvider provider) { ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, ctx.get()) .requires(ModItems.PIPE) diff --git a/src/main/java/dev/dubhe/anvilcraft/init/ModMegastructures.java b/src/main/java/dev/dubhe/anvilcraft/init/ModMegastructures.java index 181ba38180..8c2d4873e7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/init/ModMegastructures.java +++ b/src/main/java/dev/dubhe/anvilcraft/init/ModMegastructures.java @@ -19,6 +19,7 @@ import dev.dubhe.anvilcraft.block.entity.megastructure.GiantExtractorHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.MagnetarCoilHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.MatterDecompressorHandler; +import dev.dubhe.anvilcraft.block.entity.megastructure.MonolithDeployerHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.PenroseSphereHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.TempleHandler; import dev.dubhe.anvilcraft.block.entity.megastructure.WormholeStabilizerHandler; @@ -84,6 +85,17 @@ && isEcoStationEligible(context.resources())) .handler(TempleHandler::new) .build() ); + public static final DeferredHolder MONOLITH_DEPLOYER = register( + "monolith_deployer", + id -> Megastructure.builder(id, "monolith_deployer") + .prerequisite(context -> isPlanet(context) && !isErrorPlanet(context) + && MonolithDeployerHandler.canDeploy(context.resources())) + .ring(1) + .model(1, ringModel(1, "monolith")) + .material(ModItems.CIVILIZATION_CATALYST.get(), 1) + .handler(MonolithDeployerHandler::new) + .build() + ); public static final DeferredHolder GIANT_PLANET_EXTRACTOR = register( "giant_planet_exctractor", id -> Megastructure.builder(id, "giant_planet_exctractor") diff --git a/src/main/java/dev/dubhe/anvilcraft/init/item/ModItems.java b/src/main/java/dev/dubhe/anvilcraft/init/item/ModItems.java index 545bdcc244..b1de5c8468 100644 --- a/src/main/java/dev/dubhe/anvilcraft/init/item/ModItems.java +++ b/src/main/java/dev/dubhe/anvilcraft/init/item/ModItems.java @@ -1269,6 +1269,11 @@ private static ItemEntry createBigAmuletItem(String type, Resour .lang("Legacy Essence") .register(); + public static final ItemEntry CIVILIZATION_CATALYST = REGISTRUM.item("civilization_catalyst", Item::new) + .lang("Civilization Catalyst") + .recipe(RegistrumItemRecipeLoader::civilizationCatalyst) + .register(); + public static final ItemEntry EXP_BUCKET = REGISTRUM.item("exp_bucket", ModItems.bucket(() -> ModFluids.EXP_FLUID)) .tag(ModItemTags.EXP_BUCKETS, Tags.Items.BUCKETS) .lang("EXP Bucket") diff --git a/src/main/java/dev/dubhe/anvilcraft/init/item/tabs/Ingredients.java b/src/main/java/dev/dubhe/anvilcraft/init/item/tabs/Ingredients.java index 273b544597..ad33f049b2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/init/item/tabs/Ingredients.java +++ b/src/main/java/dev/dubhe/anvilcraft/init/item/tabs/Ingredients.java @@ -89,6 +89,7 @@ public void accept() { this.plain(ModItems.STELLAR_RING_COMPONENT); this.plain(ModItems.MAGNETAR_COIL_COMPONENT); this.plain(ModItems.STELLAR_EVOLUTION_ACCELERATOR_COMPONENT); + this.plain(ModItems.CIVILIZATION_CATALYST); // Void matter and neutronium. this.plain(ModItems.VOID_MATTER); diff --git a/src/main/java/dev/dubhe/anvilcraft/init/item/tabs/ItemsSections.java b/src/main/java/dev/dubhe/anvilcraft/init/item/tabs/ItemsSections.java index 9bb2a80f74..9721f0d4de 100644 --- a/src/main/java/dev/dubhe/anvilcraft/init/item/tabs/ItemsSections.java +++ b/src/main/java/dev/dubhe/anvilcraft/init/item/tabs/ItemsSections.java @@ -265,6 +265,7 @@ public void accept() { content.accept(ModItems.STELLAR_RING_COMPONENT); content.accept(ModItems.MAGNETAR_COIL_COMPONENT); content.accept(ModItems.STELLAR_EVOLUTION_ACCELERATOR_COMPONENT); + content.accept(ModItems.CIVILIZATION_CATALYST); } ); sections.section( diff --git a/src/main/resources/assets/anvilcraft/lang/zh_cn.json b/src/main/resources/assets/anvilcraft/lang/zh_cn.json index 582f85bb56..8e237ad245 100644 --- a/src/main/resources/assets/anvilcraft/lang/zh_cn.json +++ b/src/main/resources/assets/anvilcraft/lang/zh_cn.json @@ -715,6 +715,7 @@ "item.anvilcraft.lead_ingot": "铅锭", "item.anvilcraft.lead_nugget": "铅粒", "item.anvilcraft.legacy_essence": "传承精华", + "item.anvilcraft.civilization_catalyst": "文明催化器", "item.anvilcraft.levitation_powder": "飘浮粉", "item.anvilcraft.light_blue_cement_bucket": "淡蓝色水泥桶", "item.anvilcraft.light_gray_cement_bucket": "淡灰色水泥桶", @@ -1731,6 +1732,7 @@ "screen.anvilcraft.cfa.megastructure.stellar_evolution_accelerator": "恒星演化加速器", "screen.anvilcraft.cfa.megastructure.stellar_ring_collider": "星环对撞机", "screen.anvilcraft.cfa.megastructure.temple": "神殿", + "screen.anvilcraft.cfa.megastructure.monolith_deployer": "石碑投放器", "screen.anvilcraft.cfa.megastructure.wormhole_stabilizer": "虫洞稳定器", "screen.anvilcraft.cfa.missing_amplifier.line1": " ", "screen.anvilcraft.cfa.missing_amplifier.line2": "缺少增幅器,天体状态暂无法同步", @@ -1826,6 +1828,7 @@ "screen.anvilcraft.cfa.megastructure.stellar_evolution_accelerator.description": "加速恒星演化直到它走到生命尽头,有可能触发超新星爆炸诞生极端天体", "screen.anvilcraft.cfa.megastructure.stellar_ring_collider.description": "借助恒星的引力和磁场将铁砧加速到更高的速度或更频繁地批量撞击制造物品", "screen.anvilcraft.cfa.megastructure.temple.description": "给低等文明降下恩赐或天罚,收获其供奉的资源", + "screen.anvilcraft.cfa.megastructure.monolith_deployer.description": "向星球投射石碑,并稍微加速其演化", "screen.anvilcraft.cfa.megastructure.wormhole_stabilizer.description": "借助负物质稳定黑洞能量,可在多个完全相同的黑洞之间搭建虫洞,实现物质与能量的传输", "screen.anvilcraft.cfa.seed_slot.description": "消耗所有放入的物品,若消耗特定物品,将搜索到隐秘的天体", "screen.anvilcraft.cfa.seed_slot.title": "种子物品", @@ -1848,6 +1851,7 @@ "screen.anvilcraft.cfa.megastructure.stellar_evolution_accelerator.usage": "需求:\n§7无§r\n———————\n产出:\n§a[电力功率]§r\n§f加速期间戴森球会无限发电§r\n———————\n副作用:\n§f恒星演化到终点会成为白矮星,或是发生超新星爆发产生中子星或黑洞", "screen.anvilcraft.cfa.megastructure.stellar_ring_collider.usage": "需求:\n§e[物流接口]§r\n§f对撞原料与铁砧§r\n§a[电力功率]§r\n§f4000 kW§r\n———————\n产出:\n§e[物流接口]§r\n§f撞击加工产物§r\n———————\n副作用:\n§7无§r", "screen.anvilcraft.cfa.megastructure.temple.usage": "需求:\n§e[物流接口]§r\n§f神赐与天罚§r\n———————\n产出:\n§e[物流接口]§r\n§f初级文明供奉§r\n———————\n副作用:\n§7无§r", + "screen.anvilcraft.cfa.megastructure.monolith_deployer.usage": "需求:\n§f具有至少3种生物掉落物资源,或已有原始文明的岩石行星§r\n———————\n10秒后生效:\n§f使具有生物资源的星球产生原始文明§r\n§f已有原始文明的星球有50%概率成为废土星球,50%概率消失§r\n§f石碑投放器在生效后消失§r", "screen.anvilcraft.cfa.megastructure.wormhole_stabilizer.usage": "需求:\n§f全同黑洞§r\n———————\n产出:\n§f建立虫洞连接§r\n———————\n副作用:\n§7无§r", "anvilcraft.configuration.gravitational_lens": "渲染引力透镜效果", "anvilcraft.configuration.gravitational_lens.button": "展开二级菜单", @@ -1917,6 +1921,8 @@ "advancements.anvilcraft.the_end.title": "结束了?", "advancements.anvilcraft.the_start.description": "获得锻星砧", "advancements.anvilcraft.the_start.title": "开始了", + "advancements.anvilcraft.new_cycle.description": "见证一个文明从锻星砧中消失", + "advancements.anvilcraft.new_cycle.title": "新轮回", "advancements.anvilcraft.void_generate_energy.description": "使用虚空能收集器发电", "advancements.anvilcraft.void_generate_energy.title": "当其无,有能之用", "advancements.anvilcraft.water_flows_downhill.description": "用流体管道连接高低不同的两个流体容器",