diff --git a/.gitignore b/.gitignore index ed70cc5e..15167579 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ libs/* ._* /.apt_generated/ /Users/ + +src/references +.vscode/ \ No newline at end of file diff --git a/build.gradle b/build.gradle index 87737dad..44e860c9 100644 --- a/build.gradle +++ b/build.gradle @@ -1,74 +1,84 @@ plugins { + id 'java-library' id 'eclipse' id 'maven-publish' - id 'net.minecraftforge.gradle' version '(6.0,6.2)' - id 'org.parchmentmc.librarian.forgegradle' version '1.+' - id 'org.spongepowered.mixin' version '0.7.+' + id 'net.neoforged.moddev' version '2.0.107' + id 'idea' +} + +tasks.named('wrapper', Wrapper).configure { + distributionType = Wrapper.DistributionType.BIN } version = project.mod_version -group = project.maven_group // http://maven.apache.org/guides/mini/guide-naming-conventions.html -archivesBaseName = project.archives_base_name +group = project.mod_group_id -// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. -java.toolchain.languageVersion = JavaLanguageVersion.of(17) +base { + archivesName = project.mod_id +} + +// Mojang ships Java 21 to end users in 1.21.1, so mods should target Java 21. +java.toolchain.languageVersion = JavaLanguageVersion.of(21) println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" -minecraft { - - mappings channel: "${project.mappings_channel}", version: "${project.mappings_version}" - - // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. +neoForge { + // Specify the version of NeoForge to use. + version = project.neo_version + + parchment { + mappingsVersion = project.parchment_mappings_version + minecraftVersion = project.parchment_minecraft_version + } - accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + // Access Transformers are automatically detected + // accessTransformers = project.files('src/main/resources/META-INF/accesstransformer.cfg') // Default run configurations. - // These can be tweaked, removed, or duplicated as needed. runs { client { - args '--username', System.env.USERNAME, '--uuid', System.env.UUID - workingDirectory project.file('run') - - // Recommended logging data for a userdev environment - property 'forge.logging.markers', 'REGISTRIES' - - // Recommended logging level for the console - property 'forge.logging.console.level', 'debug' - - // Enable mixins - property 'mixin.env.remapRefMap', 'true' - property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" - - mods { - golems { - source sourceSets.main - } - } + client() + systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id } server { - workingDirectory project.file('run') + server() + programArgument '--nogui' + systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id + } - // Recommended logging data for a userdev environment - property 'forge.logging.markers', 'REGISTRIES' + gameTestServer { + type = "gameTestServer" + systemProperty 'neoforge.enabledGameTestNamespaces', project.mod_id + } - // Recommended logging level for the console - property 'forge.logging.console.level', 'debug' + data { + data() + programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath() + } - // Enable mixins - property 'mixin.env.remapRefMap', 'true' - property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" + // applies to all the run configs above + configureEach { + systemProperty 'forge.logging.markers', 'REGISTRIES' + logLevel = org.slf4j.event.Level.DEBUG + } + } - mods { - golems { - source sourceSets.main - } - } + mods { + "${mod_id}" { + sourceSet(sourceSets.main) } } } +// Include resources generated by data generators. +sourceSets.main.resources { srcDir 'src/generated/resources' } + +// Sets up a dependency configuration called 'localRuntime'. +configurations { + runtimeClasspath.extendsFrom localRuntime +} + repositories { maven { name "MMD" @@ -84,46 +94,35 @@ repositories { } dependencies { - // Forge - minecraft "net.minecraftforge:forge:${project.minecraft_version}-${project.forge_version}" - - // Mixin AP - annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' - // The One Probe - implementation fg.deobf("curse.maven:the-one-probe-${project.top_proj}:${project.top_file}") + implementation "curse.maven:the-one-probe-${project.top_proj}:${project.top_file}" // Jade - implementation fg.deobf("curse.maven:jade-${project.jade_proj}:${project.jade_file}") + implementation "curse.maven:jade-${project.jade_proj}:${project.jade_file}" } -// This block of code expands all the gradle properties in the specified resource targets. -// It copies them into the targets and expands all the defined properties. -def resourceTargets = ['META-INF/mods.toml', 'pack.mcmeta'] -def intoTargets = ["$rootDir/out/production/resources/", "$rootDir/out/production/${project.name}.main/", "$rootDir/bin/main/"] -def replaceProperties = [mod_id: mod_id, mod_name: mod_name, mod_version: mod_version, - mod_authors: mod_authors, mod_description: mod_description, - minecraft_version_range: minecraft_version_range, forge_version_range: forge_version_range, - loader_version_range: loader_version_range] -processResources { +// This block of code expands all declared replace properties in the specified resource targets. +var generateModMetadata = tasks.register("generateModMetadata", ProcessResources) { + var replaceProperties = [ + minecraft_version : minecraft_version, + minecraft_version_range: minecraft_version_range, + neo_version : neo_version, + loader_version_range : loader_version_range, + mod_id : mod_id, + mod_name : mod_name, + mod_license : mod_license, + mod_version : mod_version, + mod_authors : mod_authors, + mod_description : mod_description + ] inputs.properties replaceProperties - replaceProperties.put 'project', project - - filesMatching(resourceTargets) { - expand replaceProperties - } - - intoTargets.each { target -> - if (file(target).exists()) { - copy { - from(sourceSets.main.resources) { - include resourceTargets - expand replaceProperties - } - into target - } - } - } + expand replaceProperties + from "src/main/templates" + into "build/generated/sources/modMetadata" } +// Include the output of "generateModMetadata" as an input directory for the build +sourceSets.main.resources.srcDir generateModMetadata +// To avoid having to run "generateModMetadata" manually, make it run on every project reload +neoForge.ideSyncTask generateModMetadata // Example for how to get properties into the manifest for reading by the runtime.. jar { @@ -131,8 +130,8 @@ jar { attributes([ "Specification-Title": "Extra-Golems", "Specification-Vendor": "${mod_authors}", - "Specification-Version": "1", // We are version 1 of ourselves - "Implementation-Title": project.name, + "Specification-Version": "1", + "Implementation-Title": project.mod_id, "Implementation-Version": "${version}", "Implementation-Vendor" :"skyjay1", "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") @@ -140,48 +139,28 @@ jar { } } -// Example configuration to allow publishing using the maven-publish task -// we define a custom artifact that is sourced from the reobfJar output task -// and then declare that to be published -// Note you'll need to add a repository here -def reobfFile = file("$buildDir/reobfJar/output.jar") -def reobfArtifact = artifacts.add('default', reobfFile) { - type 'jar' - builtBy 'reobfJar' -} +// Example configuration to allow publishing using the maven-publish plugin publishing { publications { - mavenJava(MavenPublication) { - artifact reobfArtifact + register('mavenJava', MavenPublication) { + from components.java } } repositories { maven { - url "file:///${project.projectDir}/mcmodsrepo" + url "file://${project.projectDir}/mcmodsrepo" } } } -javadoc { - failOnError = false -} - -task deobfJar(type: Jar, dependsOn: 'jar') { - from "build/source/main" - archiveClassifier = "deobf" -} -artifacts { - archives deobfJar -} - -task javadocJar(type: Jar, dependsOn: 'javadoc') { - from "build/docs/javadoc" - archiveClassifier = "javadoc" -} -artifacts { - archives javadocJar -} - tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation } + +// IDEA no longer automatically downloads sources/javadoc jars for dependencies. +idea { + module { + downloadSources = true + downloadJavadoc = true + } +} diff --git a/gradle.properties b/gradle.properties index 5747c3e8..ecd8dadd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,27 +1,30 @@ # Sets default memory used for gradle commands. Can be overridden by user or command line properties. # This is required to provide enough memory for the Minecraft decompilation process. org.gradle.jvmargs=-Xmx4G -org.gradle.daemon=false -### based off of fabric's examplemod, which is in the public domain. +org.gradle.daemon=true +org.gradle.parallel=true +org.gradle.caching=true +org.gradle.configuration-cache=false + # Minecraft properties -minecraft_version=1.20.1 -minecraft_version_range=[1.20.1,) -mappings_channel=parchment -mappings_version=2023.09.03-1.20.1 +minecraft_version=1.21.1 +minecraft_version_range=[1.21.1] +parchment_minecraft_version=1.21.1 +parchment_mappings_version=2024.11.17 # Mod properties mod_name=Extra-Golems mod_id=golems -mod_version=20.1.0.2 -mod_authors="skyjay1 and the MMD Team" -mod_description="Adds dozens of golems with unique textures and abilities!" -maven_group=com.mcmoddev.golems -archives_base_name=extragolems +mod_version=21.1.0.0 +mod_license=zlib License +mod_authors=skyjay1 and the MMD Team +mod_description=Adds dozens of golems with unique textures and abilities! +mod_group_id=com.mcmoddev.golems + # Dependencies -forge_version=47.2.0 -forge_version_range=[47,) -loader_version_range=[47,) +neo_version=21.1.206 +loader_version_range=[1,) top_proj=245211 -top_file=4629624 +top_file=5836106 jade_proj=324717 -jade_file=4986594 +jade_file=6291517 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fae08049..d4081da4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index 4b201237..0116392c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,13 +1,9 @@ pluginManagement { repositories { gradlePluginPortal() - maven { url = 'https://maven.minecraftforge.net/' } - maven { url = 'https://maven.parchmentmc.org' } - maven { url = 'https://repo.spongepowered.org/repository/maven-public/' } - mavenCentral() - gradlePluginPortal() } } + plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0' } diff --git a/src/main/java/com/mcmoddev/golems/EGConfig.java b/src/main/java/com/mcmoddev/golems/EGConfig.java index 266d49d1..44cce504 100644 --- a/src/main/java/com/mcmoddev/golems/EGConfig.java +++ b/src/main/java/com/mcmoddev/golems/EGConfig.java @@ -1,7 +1,7 @@ package com.mcmoddev.golems; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; import java.time.LocalDateTime; import java.time.Month; @@ -9,14 +9,14 @@ public final class EGConfig { - private final ForgeConfigSpec.BooleanValue BEDROCK_GOLEM_CREATIVE_ONLY; - private final ForgeConfigSpec.BooleanValue PUMPKIN_BUILDS_GOLEMS; - private final ForgeConfigSpec.BooleanValue ENABLE_FRIENDLY_FIRE; - private final ForgeConfigSpec.BooleanValue ENABLE_USE_SPELL_ITEM; - private final ForgeConfigSpec.BooleanValue ENABLE_HEAL_GOLEMS; - private final ForgeConfigSpec.BooleanValue ENABLE_HOLIDAYS; - private final ForgeConfigSpec.IntValue VILLAGER_GOLEM_SPAWN_CHANCE; - private final ForgeConfigSpec.IntValue DEBUG_GOLEMS_PERMISSION_LEVEL; + private final ModConfigSpec.BooleanValue BEDROCK_GOLEM_CREATIVE_ONLY; + private final ModConfigSpec.BooleanValue PUMPKIN_BUILDS_GOLEMS; + private final ModConfigSpec.BooleanValue ENABLE_FRIENDLY_FIRE; + private final ModConfigSpec.BooleanValue ENABLE_USE_SPELL_ITEM; + private final ModConfigSpec.BooleanValue ENABLE_HEAL_GOLEMS; + private final ModConfigSpec.BooleanValue ENABLE_HOLIDAYS; + private final ModConfigSpec.IntValue VILLAGER_GOLEM_SPAWN_CHANCE; + private final ModConfigSpec.IntValue DEBUG_GOLEMS_PERMISSION_LEVEL; private boolean aprilFirst; private boolean halloween; @@ -31,7 +31,7 @@ public final class EGConfig { private int villagerGolemSpawnChance; private int debugGolemsPermissionLevel; - public EGConfig(final ForgeConfigSpec.Builder builder) { + public EGConfig(final ModConfigSpec.Builder builder) { // Global values builder.push("general"); BEDROCK_GOLEM_CREATIVE_ONLY = builder.comment("When true, only players in creative mode can use a Bedrock Golem spawn item") diff --git a/src/main/java/com/mcmoddev/golems/EGEvents.java b/src/main/java/com/mcmoddev/golems/EGEvents.java index c208f0d0..492eaf2a 100644 --- a/src/main/java/com/mcmoddev/golems/EGEvents.java +++ b/src/main/java/com/mcmoddev/golems/EGEvents.java @@ -19,10 +19,10 @@ import net.minecraft.tags.TagKey; import net.minecraft.util.RandomSource; import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.ai.memory.MemoryModuleType; import net.minecraft.world.entity.ai.sensing.GolemSensor; import net.minecraft.world.entity.npc.AbstractVillager; @@ -30,22 +30,22 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.phys.AABB; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.OnDatapackSyncEvent; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.entity.living.LivingChangeTargetEvent; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.entity.living.LivingHurtEvent; -import net.minecraftforge.event.entity.living.MobSpawnEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.level.BlockEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.event.server.ServerStoppingEvent; -import net.minecraftforge.eventbus.api.Event; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.network.PacketDistributor; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.EventHooks; +import net.neoforged.neoforge.event.OnDatapackSyncEvent; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.entity.living.LivingChangeTargetEvent; +import net.neoforged.neoforge.event.entity.living.LivingEvent; +import net.neoforged.neoforge.event.entity.living.LivingIncomingDamageEvent; +import net.neoforged.neoforge.event.entity.living.MobSpawnEvent; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.event.level.BlockEvent; +import net.neoforged.neoforge.event.server.ServerStartedEvent; +import net.neoforged.neoforge.event.server.ServerStoppingEvent; +import net.neoforged.bus.api.Event; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.network.PacketDistributor; import javax.annotation.Nullable; import java.util.List; @@ -53,18 +53,14 @@ public final class EGEvents { - public static void register() { - FMLJavaModLoadingContext.get().getModEventBus().register(ModHandler.class); - MinecraftForge.EVENT_BUS.register(ForgeHandler.class); - } - - public static class ModHandler { - + public static void register(IEventBus modEventBus) { + NeoForge.EVENT_BUS.register(ForgeHandler.class); } public static class ForgeHandler { - private static final TagKey VILLAGER_SUMMONABLE = TagKey.create(EGRegistry.Keys.GOLEM, new ResourceLocation(ExtraGolems.MODID, "villager_summonable")); + private static final TagKey VILLAGER_SUMMONABLE = TagKey.create(EGRegistry.Keys.GOLEM, + ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "villager_summonable")); @SubscribeEvent public static void onAddCommands(final RegisterCommandsEvent event) { @@ -84,7 +80,8 @@ public static void onServerStopping(final ServerStoppingEvent event) { @SubscribeEvent public static void onPlayerLoggedIn(final PlayerEvent.PlayerLoggedInEvent event) { // send packet to recalculate golem containers on the client - EGNetwork.CHANNEL.send(PacketDistributor.ALL.noArg(), new ClientBoundGolemContainerPacket(ClientBoundGolemContainerPacket.RESET_AND_POPULATE)); + PacketDistributor.sendToAllPlayers( + new ClientBoundGolemContainerPacket(ClientBoundGolemContainerPacket.RESET_AND_POPULATE)); } @SubscribeEvent @@ -93,7 +90,8 @@ public static void onSyncDatapacks(final OnDatapackSyncEvent event) { GolemContainer.reset(); GolemContainer.populate(event.getPlayerList().getServer().registryAccess()); // send packet to recalculate golem containers on the client - EGNetwork.CHANNEL.send(PacketDistributor.ALL.noArg(), new ClientBoundGolemContainerPacket(ClientBoundGolemContainerPacket.RESET_AND_POPULATE)); + PacketDistributor.sendToAllPlayers( + new ClientBoundGolemContainerPacket(ClientBoundGolemContainerPacket.RESET_AND_POPULATE)); } /** @@ -103,7 +101,8 @@ public static void onSyncDatapacks(final OnDatapackSyncEvent event) { @SubscribeEvent public static void onPlacePumpkin(final BlockEvent.EntityPlaceEvent event) { // if the config allows it, and the block is a CARVED pumpkin... - if (!event.isCanceled() && ExtraGolems.CONFIG.pumpkinBuildsGolems() && event.getPlacedBlock().is(Blocks.CARVED_PUMPKIN) + if (!event.isCanceled() && ExtraGolems.CONFIG.pumpkinBuildsGolems() + && event.getPlacedBlock().is(Blocks.CARVED_PUMPKIN) && event.getLevel() instanceof Level level) { // try to spawn an entity! GolemHeadBlock.trySpawnGolem(event.getEntity(), level, event.getPos()); @@ -112,14 +111,16 @@ public static void onPlacePumpkin(final BlockEvent.EntityPlaceEvent event) { /** * Prevents arrow-shooting golems from hurting villagers + * * @param event the living hurt event */ @SubscribeEvent - public static void onLivingHurt(final LivingHurtEvent event) { - if(event.getEntity() instanceof AbstractVillager && event.getSource().is(DamageTypes.MOB_PROJECTILE) + public static void onLivingHurt(final LivingIncomingDamageEvent event) { + if (event.getEntity() instanceof AbstractVillager && event.getSource().is(DamageTypes.MOB_PROJECTILE) && event.getSource().getEntity() instanceof IExtraGolem golem && golem.getContainer(event.getEntity().level().registryAccess()).isPresent() - && golem.getContainer(event.getEntity().level().registryAccess()).get().getBehaviors().hasActiveBehavior(ShootArrowsBehavior.class, golem)) { + && golem.getContainer(event.getEntity().level().registryAccess()).get().getBehaviors() + .hasActiveBehavior(ShootArrowsBehavior.class, golem)) { event.setCanceled(true); } } @@ -129,11 +130,14 @@ public static void onLivingHurt(final LivingHurtEvent event) { **/ @SubscribeEvent public static void onTargetEvent(final LivingChangeTargetEvent event) { - if (event.getEntity() instanceof Mob mob && event.getNewTarget() instanceof IExtraGolem target) { + if (event.getEntity() instanceof Mob mob + && event.getNewAboutToBeSetTarget() instanceof IExtraGolem target) { // resolve the golem container final Optional oContainer = target.getContainer(mob.level().registryAccess()); - if(oContainer.isPresent() && oContainer.get().getBehaviors().hasActiveBehavior(UseFuelBehavior.class, target) - && target.getBehaviorData(UseFuelBehaviorData.class).map(data -> !data.hasFuel()).orElse(false)) { + if (oContainer.isPresent() + && oContainer.get().getBehaviors().hasActiveBehavior(UseFuelBehavior.class, target) + && target.getBehaviorData(UseFuelBehaviorData.class).map(data -> !data.hasFuel()) + .orElse(false)) { event.setCanceled(true); mob.setLastHurtByMob(null); } @@ -141,14 +145,15 @@ public static void onTargetEvent(final LivingChangeTargetEvent event) { } @SubscribeEvent - public static void onVillagerTick(final LivingEvent.LivingTickEvent event) { + public static void onVillagerTick(final net.neoforged.neoforge.event.tick.EntityTickEvent.Post event) { // verify server side villager and tick count - if(event.getEntity().isEffectiveAi() + if (event.getEntity().isEffectiveAi() && event.getEntity() instanceof Villager villager && (villager.tickCount + villager.getId()) % 200 == 0 /* GolemSensor#GOLEM_SCAN_RATE */ && villager.getBrain().hasMemoryValue(MemoryModuleType.NEAREST_LIVING_ENTITIES)) { // load nearest entities list - Optional> oList = villager.getBrain().getMemory(MemoryModuleType.NEAREST_LIVING_ENTITIES); + Optional> oList = villager.getBrain() + .getMemory(MemoryModuleType.NEAREST_LIVING_ENTITIES); if (oList.isPresent()) { // check if extra golems are in the list // GolemSensor is hardcoded to only check Iron Golem entity type @@ -166,24 +171,27 @@ public static void onMobSummoned(final MobSpawnEvent.PositionCheck event) { final Mob entity = event.getEntity(); final BlockPos pos = entity.blockPosition(); final RandomSource random = entity.getRandom(); - if(event.getResult() != Event.Result.DENY && entity.getType() == EntityType.IRON_GOLEM + // In NeoForge 1.21+, use getResult() != FAIL to check if not already denied + if (event.getResult() != MobSpawnEvent.PositionCheck.Result.FAIL + && entity.getType() == EntityType.IRON_GOLEM && event.getSpawnType() == MobSpawnType.MOB_SUMMONED && ExtraGolems.CONFIG.villagerSummonChance() > 0 && event.getEntity().getRandom().nextInt(100) < ExtraGolems.CONFIG.villagerSummonChance()) { // determine material final ResourceLocation golemId = getGolemToSpawn(entity.level(), pos, random); - if(golemId != null) { + if (golemId != null) { // attempt to summon a golem GolemBase golem = GolemBase.create(event.getLevel().getLevel(), golemId); golem.copyPosition(entity); // fire spawn position check for the new entity - if(ForgeEventFactory.checkSpawnPosition(golem, event.getLevel(), MobSpawnType.MOB_SUMMONED)) { - // cancel the original event - event.setResult(Event.Result.DENY); + if (EventHooks.checkSpawnPosition(golem, event.getLevel(), MobSpawnType.MOB_SUMMONED)) { + // cancel the original event using NeoForge 1.21+ API + event.setResult(MobSpawnEvent.PositionCheck.Result.FAIL); // add the golem entity event.getLevel().addFreshEntityWithPassengers(golem); // finalize spawn (required to adjust current health to max health) - golem.finalizeSpawn(event.getLevel(), event.getLevel().getCurrentDifficultyAt(pos), MobSpawnType.MOB_SUMMONED, null, null); + golem.finalizeSpawn(event.getLevel(), event.getLevel().getCurrentDifficultyAt(pos), + MobSpawnType.MOB_SUMMONED, null); // locate nearby villagers AABB aabb = golem.getBoundingBox().inflate(16.0D, 16.0D, 16.0D); List nearbyVillagers = event.getLevel().getEntitiesOfClass(Villager.class, aabb); @@ -195,20 +203,23 @@ public static void onMobSummoned(final MobSpawnEvent.PositionCheck event) { } /** - * @param level the level - * @param pos an approximate block position for the entity + * @param level the level + * @param pos an approximate block position for the entity * @param random a random generator - * @return a random golem material from the config, or null empty material if the config is empty + * @return a random golem material from the config, or null empty material if + * the config is empty */ @Nullable - private static ResourceLocation getGolemToSpawn(final Level level, final BlockPos pos, final RandomSource random) { + private static ResourceLocation getGolemToSpawn(final Level level, final BlockPos pos, + final RandomSource random) { final Registry registry = level.registryAccess().registryOrThrow(EGRegistry.Keys.GOLEM); - final Optional> oHolder = registry.getOrCreateTag(VILLAGER_SUMMONABLE).getRandomElement(random); - if(oHolder.isEmpty()) { + final Optional> oHolder = registry.getOrCreateTag(VILLAGER_SUMMONABLE) + .getRandomElement(random); + if (oHolder.isEmpty()) { return null; } final Optional> oKey = oHolder.get().unwrapKey(); - if(oKey.isEmpty()) { + if (oKey.isEmpty()) { return null; } return oKey.get().location(); diff --git a/src/main/java/com/mcmoddev/golems/EGRegistry.java b/src/main/java/com/mcmoddev/golems/EGRegistry.java index eca9063b..c78c5bd2 100644 --- a/src/main/java/com/mcmoddev/golems/EGRegistry.java +++ b/src/main/java/com/mcmoddev/golems/EGRegistry.java @@ -58,6 +58,7 @@ import com.mcmoddev.golems.menu.GolemInventoryMenu; import com.mcmoddev.golems.util.SoundTypeRegistry; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.syncher.EntityDataSerializers; @@ -73,16 +74,15 @@ import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; -import net.minecraftforge.event.entity.EntityAttributeCreationEvent; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.registries.DataPackRegistryEvent; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.IForgeRegistry; -import net.minecraftforge.registries.RegistryBuilder; -import net.minecraftforge.registries.RegistryObject; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.neoforge.registries.DataPackRegistryEvent; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.neoforge.registries.NeoForgeRegistries; +import net.neoforged.neoforge.registries.RegistryBuilder; import java.util.function.Supplier; @@ -91,42 +91,55 @@ private EGRegistry() { // } - private static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, ExtraGolems.MODID); - private static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ExtraGolems.MODID); - private static final DeferredRegister> ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, ExtraGolems.MODID); - private static final DeferredRegister> MENU_TYPES = DeferredRegister.create(ForgeRegistries.MENU_TYPES, ExtraGolems.MODID); - private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), ExtraGolems.MODID); + private static final DeferredRegister BLOCKS = DeferredRegister.create(BuiltInRegistries.BLOCK, + ExtraGolems.MODID); + private static final DeferredRegister ITEMS = DeferredRegister.create(BuiltInRegistries.ITEM, + ExtraGolems.MODID); + private static final DeferredRegister> ENTITY_TYPES = DeferredRegister + .create(BuiltInRegistries.ENTITY_TYPE, ExtraGolems.MODID); + private static final DeferredRegister> MENU_TYPES = DeferredRegister.create(BuiltInRegistries.MENU, + ExtraGolems.MODID); + private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister + .create(BuiltInRegistries.CREATIVE_MODE_TAB, ExtraGolems.MODID); //// CUSTOM REGISTRIES //// public static final DeferredRegister GOLEM = DeferredRegister.create(Keys.GOLEM, ExtraGolems.MODID); public static final DeferredRegister MODEL = DeferredRegister.create(Keys.MODEL, ExtraGolems.MODID); - public static final DeferredRegister> BEHAVIOR_SERIALIZER = DeferredRegister.create(Keys.BEHAVIOR_SERIALIZER, ExtraGolems.MODID); - public static final Supplier>> BEHAVIOR_SERIALIZER_SUPPLIER = BEHAVIOR_SERIALIZER.makeRegistry(() -> new RegistryBuilder<>()); + public static final DeferredRegister> BEHAVIOR_SERIALIZER = DeferredRegister + .create(Keys.BEHAVIOR_SERIALIZER, ExtraGolems.MODID); + public static final Registry> BEHAVIOR_SERIALIZER_SUPPLIER = BEHAVIOR_SERIALIZER + .makeRegistry((net.neoforged.neoforge.registries.RegistryBuilder> builder) -> { + }); public static final DeferredRegister BEHAVIOR = DeferredRegister.create(Keys.BEHAVIOR, ExtraGolems.MODID); - public static final DeferredRegister BEHAVIOR_LIST = DeferredRegister.create(Keys.BEHAVIOR_LIST, ExtraGolems.MODID); - - public static final DeferredRegister> GOLEM_MODIFIER_SERIALIZER = DeferredRegister.create(Keys.MODIFIER_SERIALIZER, ExtraGolems.MODID); - public static final Supplier>> GOLEM_MODIFIER_SERIALIZER_SUPPLIER = GOLEM_MODIFIER_SERIALIZER.makeRegistry(() -> new RegistryBuilder<>()); - public static final DeferredRegister GOLEM_MODIFIER = DeferredRegister.create(Keys.MODIFIER, ExtraGolems.MODID); - public static final DeferredRegister GOLEM_MODIFIER_LIST = DeferredRegister.create(Keys.MODIFIER_LIST, ExtraGolems.MODID); - - public static void register() { + public static final DeferredRegister BEHAVIOR_LIST = DeferredRegister.create(Keys.BEHAVIOR_LIST, + ExtraGolems.MODID); + + public static final DeferredRegister> GOLEM_MODIFIER_SERIALIZER = DeferredRegister + .create(Keys.MODIFIER_SERIALIZER, ExtraGolems.MODID); + public static final Registry> GOLEM_MODIFIER_SERIALIZER_SUPPLIER = GOLEM_MODIFIER_SERIALIZER + .makeRegistry((net.neoforged.neoforge.registries.RegistryBuilder> builder) -> { + }); + public static final DeferredRegister GOLEM_MODIFIER = DeferredRegister.create(Keys.MODIFIER, + ExtraGolems.MODID); + public static final DeferredRegister GOLEM_MODIFIER_LIST = DeferredRegister.create(Keys.MODIFIER_LIST, + ExtraGolems.MODID); + + public static void register(IEventBus modEventBus) { // built in registries - EntityReg.register(); - BlockReg.register(); - ItemReg.register(); - CreativeTabReg.register(); - MenuReg.register(); + EntityReg.register(modEventBus); + BlockReg.register(modEventBus); + ItemReg.register(modEventBus); + CreativeTabReg.register(modEventBus); + MenuReg.register(modEventBus); // custom registries - GolemReg.register(); - ModelReg.register(); - BehaviorReg.register(); - GolemModifierReg.register(); + GolemReg.register(modEventBus); + ModelReg.register(modEventBus); + BehaviorReg.register(modEventBus); + GolemModifierReg.register(modEventBus); // non-registry registries SoundTypeRegistry.register(); - EntityDataSerializersReg.register(); - FMLJavaModLoadingContext.get().getModEventBus().addListener(EGRegistry::onNewDatapackRegistry); + modEventBus.addListener(EGRegistry::onNewDatapackRegistry); } private static void onNewDatapackRegistry(final DataPackRegistryEvent.NewRegistry event) { @@ -137,181 +150,220 @@ private static void onNewDatapackRegistry(final DataPackRegistryEvent.NewRegistr } public static final class BlockReg { - private static void register() { - BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus()); + private static void register(IEventBus modEventBus) { + BLOCKS.register(modEventBus); } - public static final RegistryObject GOLEM_HEAD = BLOCKS.register("golem_head", - () -> new GolemHeadBlock(Block.Properties.copy(Blocks.CARVED_PUMPKIN))); - public static final RegistryObject LIGHT_PROVIDER = BLOCKS.register("light_provider", + public static final DeferredHolder GOLEM_HEAD = BLOCKS.register("golem_head", + () -> new GolemHeadBlock(Block.Properties.ofFullCopy(Blocks.CARVED_PUMPKIN))); + public static final DeferredHolder LIGHT_PROVIDER = BLOCKS.register("light_provider", () -> new GlowBlock(Blocks.GLASS, 1.0F)); - public static final RegistryObject POWER_PROVIDER = BLOCKS.register("power_provider", + public static final DeferredHolder POWER_PROVIDER = BLOCKS.register("power_provider", () -> new PowerBlock(15)); } public static final class ItemReg { - private static void register() { - ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus()); + private static void register(IEventBus modEventBus) { + ITEMS.register(modEventBus); } - public static final RegistryObject GOLEM_SPELL = ITEMS.register("golem_spell", () -> new GolemSpellItem(new Item.Properties())); - public static final RegistryObject SPAWN_BEDROCK_GOLEM = ITEMS.register("spawn_bedrock_golem", () -> new SpawnGolemItem(new Item.Properties())); - public static final RegistryObject GUIDE_BOOK = ITEMS.register("guide_book", () -> new GuideBookItem(new Item.Properties().stacksTo(1))); + public static final DeferredHolder GOLEM_SPELL = ITEMS.register("golem_spell", + () -> new GolemSpellItem(new Item.Properties())); + public static final DeferredHolder SPAWN_BEDROCK_GOLEM = ITEMS + .register("spawn_bedrock_golem", () -> new SpawnGolemItem(new Item.Properties())); + public static final DeferredHolder GUIDE_BOOK = ITEMS.register("guide_book", + () -> new GuideBookItem(new Item.Properties().stacksTo(1))); - public static final RegistryObject GOLEM_HEAD = ITEMS.register("golem_head", () -> new GolemHeadItem(BlockReg.GOLEM_HEAD.get(), new Item.Properties())); + public static final DeferredHolder GOLEM_HEAD = ITEMS.register("golem_head", + () -> new GolemHeadItem(BlockReg.GOLEM_HEAD.get(), new Item.Properties())); } public static final class CreativeTabReg { - private static void register() { - CREATIVE_MODE_TABS.register(FMLJavaModLoadingContext.get().getModEventBus()); - FMLJavaModLoadingContext.get().getModEventBus().addListener(EGRegistry.CreativeTabReg::onBuildTabContents); + private static void register(IEventBus modEventBus) { + CREATIVE_MODE_TABS.register(modEventBus); + modEventBus.addListener(EGRegistry.CreativeTabReg::onBuildTabContents); } private static void onBuildTabContents(final BuildCreativeModeTabContentsEvent event) { - if(event.getTabKey().equals(CreativeModeTabs.TOOLS_AND_UTILITIES)) { - event.accept(ItemReg.GOLEM_SPELL); - event.accept(ItemReg.GUIDE_BOOK); - event.accept(ItemReg.GOLEM_HEAD); + if (event.getTabKey().equals(CreativeModeTabs.TOOLS_AND_UTILITIES)) { + event.accept(ItemReg.GOLEM_SPELL.get()); + event.accept(ItemReg.GUIDE_BOOK.get()); + event.accept(ItemReg.GOLEM_HEAD.get()); } - if(event.getTabKey().equals(CreativeModeTabs.FUNCTIONAL_BLOCKS)) { - event.accept(ItemReg.GOLEM_HEAD); + if (event.getTabKey().equals(CreativeModeTabs.FUNCTIONAL_BLOCKS)) { + event.accept(ItemReg.GOLEM_HEAD.get()); } - if(event.getTabKey().equals(CreativeModeTabs.NATURAL_BLOCKS)) { + if (event.getTabKey().equals(CreativeModeTabs.NATURAL_BLOCKS)) { // insert golem head item after jack o lantern - event.getEntries().putAfter(Items.JACK_O_LANTERN.getDefaultInstance(), ItemReg.GOLEM_HEAD.get().getDefaultInstance(), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + event.accept(ItemReg.GOLEM_HEAD.get()); } - if(event.getTabKey().equals(CreativeModeTabs.SPAWN_EGGS)) { - event.accept(ItemReg.SPAWN_BEDROCK_GOLEM); + if (event.getTabKey().equals(CreativeModeTabs.SPAWN_EGGS)) { + event.accept(ItemReg.SPAWN_BEDROCK_GOLEM.get()); } } } public static final class EntityReg { - private static void register() { - ENTITY_TYPES.register(FMLJavaModLoadingContext.get().getModEventBus()); - FMLJavaModLoadingContext.get().getModEventBus().addListener(EGRegistry.EntityReg::registerEntityAttributes); + private static void register(IEventBus modEventBus) { + ENTITY_TYPES.register(modEventBus); + modEventBus.addListener(EGRegistry.EntityReg::registerEntityAttributes); } public static void registerEntityAttributes(final EntityAttributeCreationEvent event) { event.put(GOLEM.get(), GolemBase.golemAttributes().build()); } - public static final RegistryObject> GOLEM = ENTITY_TYPES.register("golem", () -> - EntityType.Builder.of(GolemBase::new, MobCategory.MISC) + public static final DeferredHolder, EntityType> GOLEM = ENTITY_TYPES.register("golem", + () -> EntityType.Builder.of(GolemBase::new, MobCategory.MISC) .setTrackingRange(48).setUpdateInterval(3) .setShouldReceiveVelocityUpdates(true) .sized(1.4F, 2.7F) - .build("golem") - ); + .build("golem")); } public static final class MenuReg { - private static void register() { - MENU_TYPES.register(FMLJavaModLoadingContext.get().getModEventBus()); + private static void register(IEventBus modEventBus) { + MENU_TYPES.register(modEventBus); } - public static final RegistryObject> GOLEM_INVENTORY = MENU_TYPES.register("golem_inventory", - () -> new MenuType<>(GolemInventoryMenu::new, FeatureFlagSet.of())); + public static final DeferredHolder, MenuType> GOLEM_INVENTORY = MENU_TYPES + .register("golem_inventory", + () -> new MenuType<>(GolemInventoryMenu::new, FeatureFlagSet.of())); } public static final class GolemReg { - private static void register() { - GOLEM.register(FMLJavaModLoadingContext.get().getModEventBus()); + private static void register(IEventBus modEventBus) { + GOLEM.register(modEventBus); } } public static final class ModelReg { - private static void register() { - MODEL.register(FMLJavaModLoadingContext.get().getModEventBus()); + private static void register(IEventBus modEventBus) { + MODEL.register(modEventBus); } } public static final class BehaviorReg { - private static void register() { - BEHAVIOR_SERIALIZER.register(FMLJavaModLoadingContext.get().getModEventBus()); - BEHAVIOR.register(FMLJavaModLoadingContext.get().getModEventBus()); - BEHAVIOR_LIST.register(FMLJavaModLoadingContext.get().getModEventBus()); + private static void register(IEventBus modEventBus) { + BEHAVIOR_SERIALIZER.register(modEventBus); + BEHAVIOR.register(modEventBus); + BEHAVIOR_LIST.register(modEventBus); } // SERIALIZERS // - public static final RegistryObject> EFFECT = BEHAVIOR_SERIALIZER.register("effect", () -> EffectBehavior.CODEC); - public static final RegistryObject> AOE_DRY = BEHAVIOR_SERIALIZER.register("aoe_dry", () -> AoeDryBehavior.CODEC); - public static final RegistryObject> AOE_FREEZE = BEHAVIOR_SERIALIZER.register("aoe_freeze", () -> AoeFreezeBehavior.CODEC); - public static final RegistryObject> AOE_GROW = BEHAVIOR_SERIALIZER.register("aoe_grow", () -> AoeGrowBehavior.CODEC); - public static final RegistryObject> WEAR_BANNER = BEHAVIOR_SERIALIZER.register("wear_banner", () -> WearBannerBehavior.CODEC); - public static final RegistryObject> BURN_IN_SUN = BEHAVIOR_SERIALIZER.register("burn_in_sun", () -> BurnInSunBehavior.CODEC); - public static final RegistryObject> CRAFT_MENU = BEHAVIOR_SERIALIZER.register("craft_menu", () -> CraftMenuBehavior.CODEC); - public static final RegistryObject> EXPLODE = BEHAVIOR_SERIALIZER.register("explode", () -> ExplodeBehavior.CODEC); - public static final RegistryObject> FOLLOW = BEHAVIOR_SERIALIZER.register("follow", () -> FollowBehavior.CODEC); - public static final RegistryObject> ITEM_UPDATE_GOLEM = BEHAVIOR_SERIALIZER.register("item_update_golem", () -> ItemUpdateGolemBehavior.CODEC); - public static final RegistryObject> LIGHT = BEHAVIOR_SERIALIZER.register("light", () -> LightBehavior.CODEC); - public static final RegistryObject> PLACE = BEHAVIOR_SERIALIZER.register("place", () -> PlaceBlockBehavior.CODEC); - public static final RegistryObject> POWER = BEHAVIOR_SERIALIZER.register("power", () -> PowerBehavior.CODEC); - public static final RegistryObject> SHOOT_ARROWS = BEHAVIOR_SERIALIZER.register("shoot_arrows", () -> ShootArrowsBehavior.CODEC); - public static final RegistryObject> SHOOT_FIREBALLS = BEHAVIOR_SERIALIZER.register("shoot_fireballs", () -> ShootFireballsBehavior.CODEC); - public static final RegistryObject> SHOOT_SNOWBALLS = BEHAVIOR_SERIALIZER.register("shoot_snowballs", () -> ShootSnowballsBehavior.CODEC); - public static final RegistryObject> SHOOT_SHULKER_BULLETS = BEHAVIOR_SERIALIZER.register("shoot_shulker_bullets", () -> ShootShulkerBulletsBehavior.CODEC); - public static final RegistryObject> SPLIT = BEHAVIOR_SERIALIZER.register("split", () -> SplitBehavior.CODEC); - public static final RegistryObject> SET_FIRE = BEHAVIOR_SERIALIZER.register("set_fire", () -> SetFireBehavior.CODEC); - public static final RegistryObject> SUMMON = BEHAVIOR_SERIALIZER.register("summon", () -> SummonBehavior.CODEC); - public static final RegistryObject> TELEPORT = BEHAVIOR_SERIALIZER.register("teleport", () -> TeleportBehavior.CODEC); - public static final RegistryObject> TEMPT = BEHAVIOR_SERIALIZER.register("tempt", () -> TemptBehavior.CODEC); - public static final RegistryObject> UPDATE_GOLEM = BEHAVIOR_SERIALIZER.register("update_golem", () -> UpdateGolemBehavior.CODEC); - public static final RegistryObject> USE_FUEL = BEHAVIOR_SERIALIZER.register("use_fuel", () -> UseFuelBehavior.CODEC); + public static final DeferredHolder, MapCodec> EFFECT = BEHAVIOR_SERIALIZER + .register("effect", () -> EffectBehavior.CODEC); + public static final DeferredHolder, MapCodec> AOE_DRY = BEHAVIOR_SERIALIZER + .register("aoe_dry", () -> AoeDryBehavior.CODEC); + public static final DeferredHolder, MapCodec> AOE_FREEZE = BEHAVIOR_SERIALIZER + .register("aoe_freeze", () -> AoeFreezeBehavior.CODEC); + public static final DeferredHolder, MapCodec> AOE_GROW = BEHAVIOR_SERIALIZER + .register("aoe_grow", () -> AoeGrowBehavior.CODEC); + public static final DeferredHolder, MapCodec> WEAR_BANNER = BEHAVIOR_SERIALIZER + .register("wear_banner", () -> WearBannerBehavior.CODEC); + public static final DeferredHolder, MapCodec> BURN_IN_SUN = BEHAVIOR_SERIALIZER + .register("burn_in_sun", () -> BurnInSunBehavior.CODEC); + public static final DeferredHolder, MapCodec> CRAFT_MENU = BEHAVIOR_SERIALIZER + .register("craft_menu", () -> CraftMenuBehavior.CODEC); + public static final DeferredHolder, MapCodec> EXPLODE = BEHAVIOR_SERIALIZER + .register("explode", () -> ExplodeBehavior.CODEC); + public static final DeferredHolder, MapCodec> FOLLOW = BEHAVIOR_SERIALIZER + .register("follow", () -> FollowBehavior.CODEC); + public static final DeferredHolder, MapCodec> ITEM_UPDATE_GOLEM = BEHAVIOR_SERIALIZER + .register("item_update_golem", () -> ItemUpdateGolemBehavior.CODEC); + public static final DeferredHolder, MapCodec> LIGHT = BEHAVIOR_SERIALIZER + .register("light", () -> LightBehavior.CODEC); + public static final DeferredHolder, MapCodec> PLACE = BEHAVIOR_SERIALIZER + .register("place", () -> PlaceBlockBehavior.CODEC); + public static final DeferredHolder, MapCodec> POWER = BEHAVIOR_SERIALIZER + .register("power", () -> PowerBehavior.CODEC); + public static final DeferredHolder, MapCodec> SHOOT_ARROWS = BEHAVIOR_SERIALIZER + .register("shoot_arrows", () -> ShootArrowsBehavior.CODEC); + public static final DeferredHolder, MapCodec> SHOOT_FIREBALLS = BEHAVIOR_SERIALIZER + .register("shoot_fireballs", () -> ShootFireballsBehavior.CODEC); + public static final DeferredHolder, MapCodec> SHOOT_SNOWBALLS = BEHAVIOR_SERIALIZER + .register("shoot_snowballs", () -> ShootSnowballsBehavior.CODEC); + public static final DeferredHolder, MapCodec> SHOOT_SHULKER_BULLETS = BEHAVIOR_SERIALIZER + .register("shoot_shulker_bullets", () -> ShootShulkerBulletsBehavior.CODEC); + public static final DeferredHolder, MapCodec> SPLIT = BEHAVIOR_SERIALIZER + .register("split", () -> SplitBehavior.CODEC); + public static final DeferredHolder, MapCodec> SET_FIRE = BEHAVIOR_SERIALIZER + .register("set_fire", () -> SetFireBehavior.CODEC); + public static final DeferredHolder, MapCodec> SUMMON = BEHAVIOR_SERIALIZER + .register("summon", () -> SummonBehavior.CODEC); + public static final DeferredHolder, MapCodec> TELEPORT = BEHAVIOR_SERIALIZER + .register("teleport", () -> TeleportBehavior.CODEC); + public static final DeferredHolder, MapCodec> TEMPT = BEHAVIOR_SERIALIZER + .register("tempt", () -> TemptBehavior.CODEC); + public static final DeferredHolder, MapCodec> UPDATE_GOLEM = BEHAVIOR_SERIALIZER + .register("update_golem", () -> UpdateGolemBehavior.CODEC); + public static final DeferredHolder, MapCodec> USE_FUEL = BEHAVIOR_SERIALIZER + .register("use_fuel", () -> UseFuelBehavior.CODEC); } public static final class GolemModifierReg { - private static void register() { - GOLEM_MODIFIER_SERIALIZER.register(FMLJavaModLoadingContext.get().getModEventBus()); - GOLEM_MODIFIER.register(FMLJavaModLoadingContext.get().getModEventBus()); - GOLEM_MODIFIER_LIST.register(FMLJavaModLoadingContext.get().getModEventBus()); + private static void register(IEventBus modEventBus) { + GOLEM_MODIFIER_SERIALIZER.register(modEventBus); + GOLEM_MODIFIER.register(modEventBus); + GOLEM_MODIFIER_LIST.register(modEventBus); } // SERIALIZERS // // MODEL // - public static final RegistryObject> ADD_LAYERS = GOLEM_MODIFIER_SERIALIZER.register("add_layers", () -> AddLayersModifier.CODEC); - public static final RegistryObject> REMOVE_LAYERS = GOLEM_MODIFIER_SERIALIZER.register("remove_layers", () -> RemoveLayersModifier.CODEC); + public static final DeferredHolder, MapCodec> ADD_LAYERS = GOLEM_MODIFIER_SERIALIZER + .register("add_layers", () -> AddLayersModifier.CODEC); + public static final DeferredHolder, MapCodec> REMOVE_LAYERS = GOLEM_MODIFIER_SERIALIZER + .register("remove_layers", () -> RemoveLayersModifier.CODEC); // GOLEM // - public static final RegistryObject> ATTRIBUTES = GOLEM_MODIFIER_SERIALIZER.register("attributes", () -> AttributesModifier.CODEC); - public static final RegistryObject> VARIANTS = GOLEM_MODIFIER_SERIALIZER.register("variants", () -> VariantsModifier.CODEC); - public static final RegistryObject> HIDDEN = GOLEM_MODIFIER_SERIALIZER.register("hidden", () -> HiddenModifier.CODEC); - public static final RegistryObject> GROUP = GOLEM_MODIFIER_SERIALIZER.register("group", () -> GroupModifier.CODEC); - public static final RegistryObject> ADD_DESCRIPTION = GOLEM_MODIFIER_SERIALIZER.register("add_description", () -> AddDescriptionModifier.CODEC); - public static final RegistryObject> REMOVE_DESCRIPTION = GOLEM_MODIFIER_SERIALIZER.register("remove_description", () -> RemoveDescriptionModifier.CODEC); - public static final RegistryObject> PARTICLE = GOLEM_MODIFIER_SERIALIZER.register("particle", () -> ParticleModifier.CODEC); - public static final RegistryObject> ADD_REPAIR_ITEMS = GOLEM_MODIFIER_SERIALIZER.register("add_repair_items", () -> AddRepairItemsModifier.CODEC); - public static final RegistryObject> REMOVE_REPAIR_ITEMS = GOLEM_MODIFIER_SERIALIZER.register("remove_repair_items", () -> RemoveRepairItemsModifier.CODEC); - public static final RegistryObject> ADD_BLOCKS = GOLEM_MODIFIER_SERIALIZER.register("add_blocks", () -> AddBlocksModifier.CODEC); - public static final RegistryObject> REMOVE_BLOCKS = GOLEM_MODIFIER_SERIALIZER.register("remove_blocks", () -> RemoveBlocksModifier.CODEC); - public static final RegistryObject> ADD_BEHAVIOR = GOLEM_MODIFIER_SERIALIZER.register("add_behavior", () -> AddBehaviorModifier.CODEC); - public static final RegistryObject> REMOVE_BEHAVIOR = GOLEM_MODIFIER_SERIALIZER.register("remove_behavior", () -> RemoveBehaviorModifier.CODEC); + public static final DeferredHolder, MapCodec> ATTRIBUTES = GOLEM_MODIFIER_SERIALIZER + .register("attributes", () -> AttributesModifier.CODEC); + public static final DeferredHolder, MapCodec> VARIANTS = GOLEM_MODIFIER_SERIALIZER + .register("variants", () -> VariantsModifier.CODEC); + public static final DeferredHolder, MapCodec> HIDDEN = GOLEM_MODIFIER_SERIALIZER + .register("hidden", () -> HiddenModifier.CODEC); + public static final DeferredHolder, MapCodec> GROUP = GOLEM_MODIFIER_SERIALIZER + .register("group", () -> GroupModifier.CODEC); + public static final DeferredHolder, MapCodec> ADD_DESCRIPTION = GOLEM_MODIFIER_SERIALIZER + .register("add_description", () -> AddDescriptionModifier.CODEC); + public static final DeferredHolder, MapCodec> REMOVE_DESCRIPTION = GOLEM_MODIFIER_SERIALIZER + .register("remove_description", () -> RemoveDescriptionModifier.CODEC); + public static final DeferredHolder, MapCodec> PARTICLE = GOLEM_MODIFIER_SERIALIZER + .register("particle", () -> ParticleModifier.CODEC); + public static final DeferredHolder, MapCodec> ADD_REPAIR_ITEMS = GOLEM_MODIFIER_SERIALIZER + .register("add_repair_items", () -> AddRepairItemsModifier.CODEC); + public static final DeferredHolder, MapCodec> REMOVE_REPAIR_ITEMS = GOLEM_MODIFIER_SERIALIZER + .register("remove_repair_items", () -> RemoveRepairItemsModifier.CODEC); + public static final DeferredHolder, MapCodec> ADD_BLOCKS = GOLEM_MODIFIER_SERIALIZER + .register("add_blocks", () -> AddBlocksModifier.CODEC); + public static final DeferredHolder, MapCodec> REMOVE_BLOCKS = GOLEM_MODIFIER_SERIALIZER + .register("remove_blocks", () -> RemoveBlocksModifier.CODEC); + public static final DeferredHolder, MapCodec> ADD_BEHAVIOR = GOLEM_MODIFIER_SERIALIZER + .register("add_behavior", () -> AddBehaviorModifier.CODEC); + public static final DeferredHolder, MapCodec> REMOVE_BEHAVIOR = GOLEM_MODIFIER_SERIALIZER + .register("remove_behavior", () -> RemoveBehaviorModifier.CODEC); } - public static final class EntityDataSerializersReg { - private static void register() { - FMLJavaModLoadingContext.get().getModEventBus().addListener(EntityDataSerializersReg::onCommonSetup); - } - - private static void onCommonSetup(final FMLCommonSetupEvent event) { - event.enqueueWork(() -> EntityDataSerializers.registerSerializer(IExtraGolem.OPTIONAL_RESOURCE_LOCATION)); - } - } - - public static final class Keys { - public static final ResourceKey> GOLEM = ResourceKey.createRegistryKey(new ResourceLocation(ExtraGolems.MODID, "golem")); - public static final ResourceKey> MODEL = ResourceKey.createRegistryKey(new ResourceLocation(ExtraGolems.MODID, "model")); - - public static final ResourceKey>> BEHAVIOR_SERIALIZER = ResourceKey.createRegistryKey(new ResourceLocation(ExtraGolems.MODID, "behavior_serializer")); - public static final ResourceKey> BEHAVIOR = ResourceKey.createRegistryKey(new ResourceLocation(ExtraGolems.MODID, "behavior")); - public static final ResourceKey> BEHAVIOR_LIST = ResourceKey.createRegistryKey(new ResourceLocation(ExtraGolems.MODID, "behavior_list")); - - public static final ResourceKey>> MODIFIER_SERIALIZER = ResourceKey.createRegistryKey(new ResourceLocation(ExtraGolems.MODID, "modifier_serializer")); - public static final ResourceKey> MODIFIER = ResourceKey.createRegistryKey(new ResourceLocation(ExtraGolems.MODID, "modifier")); - public static final ResourceKey> MODIFIER_LIST = ResourceKey.createRegistryKey(new ResourceLocation(ExtraGolems.MODID, "golem_modifier")); - + public static final ResourceKey> GOLEM = ResourceKey + .createRegistryKey(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "golem")); + public static final ResourceKey> MODEL = ResourceKey + .createRegistryKey(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "model")); + + public static final ResourceKey>> BEHAVIOR_SERIALIZER = ResourceKey + .createRegistryKey(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "behavior_serializer")); + public static final ResourceKey> BEHAVIOR = ResourceKey + .createRegistryKey(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "behavior")); + public static final ResourceKey> BEHAVIOR_LIST = ResourceKey + .createRegistryKey(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "behavior_list")); + + public static final ResourceKey>> MODIFIER_SERIALIZER = ResourceKey + .createRegistryKey(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "modifier_serializer")); + public static final ResourceKey> MODIFIER = ResourceKey + .createRegistryKey(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "modifier")); + public static final ResourceKey> MODIFIER_LIST = ResourceKey + .createRegistryKey(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "golem_modifier")); } } diff --git a/src/main/java/com/mcmoddev/golems/ExtraGolems.java b/src/main/java/com/mcmoddev/golems/ExtraGolems.java index 5ca9807d..1e8bfd72 100644 --- a/src/main/java/com/mcmoddev/golems/ExtraGolems.java +++ b/src/main/java/com/mcmoddev/golems/ExtraGolems.java @@ -11,18 +11,19 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.InterModComms; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.config.ModConfigEvent; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.common.ModConfigSpec; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.fml.InterModComms; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.config.ModConfigEvent; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -35,27 +36,29 @@ public class ExtraGolems { public static final Logger LOGGER = LogManager.getFormatterLogger(ExtraGolems.MODID); - private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder(); + private static final ModConfigSpec.Builder BUILDER = new ModConfigSpec.Builder(); public static final EGConfig CONFIG = new EGConfig(BUILDER); - public static final ForgeConfigSpec SPEC = BUILDER.build(); + public static final ModConfigSpec SPEC = BUILDER.build(); - public ExtraGolems() { + public ExtraGolems(IEventBus modEventBus, ModContainer modContainer) { // register and load config - ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, SPEC); - FMLJavaModLoadingContext.get().getModEventBus().addListener(ExtraGolems::loadConfig); - FMLJavaModLoadingContext.get().getModEventBus().addListener(ExtraGolems::reloadConfig); + modContainer.registerConfig(ModConfig.Type.COMMON, SPEC); + modEventBus.addListener(ExtraGolems::loadConfig); + modEventBus.addListener(ExtraGolems::reloadConfig); // init network - EGNetwork.register(); + modEventBus.addListener(EGNetwork::register); // init registry - EGRegistry.register(); + EGRegistry.register(modEventBus); // register event handlers - EGEvents.register(); - FMLJavaModLoadingContext.get().getModEventBus().addListener(ExtraGolems::setup); - FMLJavaModLoadingContext.get().getModEventBus().addListener(ExtraGolems::enqueueIMC); + EGEvents.register(modEventBus); + modEventBus.addListener(ExtraGolems::setup); + modEventBus.addListener(ExtraGolems::enqueueIMC); // init addons - AddonLoader.register(); + AddonLoader.register(modEventBus); // register client event handlers - DistExecutor.safeRunWhenOn(Dist.CLIENT, () -> EGClientEvents::register); + if (FMLEnvironment.dist == Dist.CLIENT) { + EGClientEvents.register(modEventBus); + } } private static void setup(final FMLCommonSetupEvent event) { diff --git a/src/main/java/com/mcmoddev/golems/block/GlowBlock.java b/src/main/java/com/mcmoddev/golems/block/GlowBlock.java index 6fe54df9..1c33776e 100644 --- a/src/main/java/com/mcmoddev/golems/block/GlowBlock.java +++ b/src/main/java/com/mcmoddev/golems/block/GlowBlock.java @@ -20,7 +20,7 @@ public class GlowBlock extends UtilityBlock { public static final int UPDATE_TICKS = 6; public GlowBlock(final BlockBehaviour copy, final float defaultLight) { - super(Properties.copy(copy).randomTicks().lightLevel(state -> state.getValue(LIGHT_LEVEL)), UPDATE_TICKS); + super(Properties.ofFullCopy(copy).randomTicks().lightLevel(state -> state.getValue(LIGHT_LEVEL)), UPDATE_TICKS); int light = (int) (defaultLight * 15.0F); this.registerDefaultState(this.defaultBlockState().setValue(LIGHT_LEVEL, light)); } diff --git a/src/main/java/com/mcmoddev/golems/block/GolemHeadBlock.java b/src/main/java/com/mcmoddev/golems/block/GolemHeadBlock.java index b78b366b..b6c4dfa6 100644 --- a/src/main/java/com/mcmoddev/golems/block/GolemHeadBlock.java +++ b/src/main/java/com/mcmoddev/golems/block/GolemHeadBlock.java @@ -4,9 +4,10 @@ import com.mcmoddev.golems.ExtraGolems; import com.mcmoddev.golems.data.golem.Golem; import com.mcmoddev.golems.entity.GolemBase; +import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; -import net.minecraft.core.BlockSource; import net.minecraft.core.Direction; +import net.minecraft.core.dispenser.BlockSource; import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; import net.minecraft.core.dispenser.DispenseItemBehavior; import net.minecraft.core.dispenser.OptionalDispenseItemBehavior; @@ -37,11 +38,18 @@ public final class GolemHeadBlock extends HorizontalDirectionalBlock { + public static final MapCodec CODEC = simpleCodec(GolemHeadBlock::new); + public GolemHeadBlock(BlockBehaviour.Properties properties) { super(properties); this.registerDefaultState(this.getStateDefinition().any().setValue(FACING, Direction.NORTH)); } + @Override + protected MapCodec codec() { + return CODEC; + } + @Override public PushReaction getPistonPushReaction(BlockState blockState) { return PushReaction.NORMAL; @@ -74,9 +82,9 @@ public static void registerDispenserBehavior() { final DispenseItemBehavior carvedPumpkinBehavior = DispenserBlock.DISPENSER_REGISTRY.getOrDefault(Items.CARVED_PUMPKIN, new DefaultDispenseItemBehavior()); final DispenseItemBehavior wrappedBehavior = new OptionalDispenseItemBehavior() { protected ItemStack execute(BlockSource blockSource, ItemStack itemStack) { - final Level level = blockSource.getLevel(); - final Direction facing = blockSource.getBlockState().getValue(DispenserBlock.FACING); - final BlockPos blockpos = blockSource.getPos().relative(facing); + final Level level = blockSource.level(); + final Direction facing = blockSource.state().getValue(DispenserBlock.FACING); + final BlockPos blockpos = blockSource.pos().relative(facing); // check if the block can be placed if(level.isEmptyBlock(blockpos) && GolemHeadBlock.canSpawnGolem(level, blockpos)) { if (!level.isClientSide) { @@ -235,7 +243,7 @@ public static boolean trySpawnGolem(@Nullable final Entity placer, final Level l golem.moveTo(spawnX, spawnY, spawnZ, 0.0F, 0.0F); level.addFreshEntity(golem); if (level instanceof ServerLevel) { - golem.finalizeSpawn((ServerLevel) level, level.getCurrentDifficultyAt(headPos), MobSpawnType.MOB_SUMMONED, null, null); + golem.finalizeSpawn((ServerLevel) level, level.getCurrentDifficultyAt(headPos), MobSpawnType.MOB_SUMMONED, null); } if(isEastWest) { golem.onBuilt(stateBelow1, stateBelow2, stateArmEast, stateArmWest, placer); diff --git a/src/main/java/com/mcmoddev/golems/block/PowerBlock.java b/src/main/java/com/mcmoddev/golems/block/PowerBlock.java index f87d76ec..8bb5738e 100644 --- a/src/main/java/com/mcmoddev/golems/block/PowerBlock.java +++ b/src/main/java/com/mcmoddev/golems/block/PowerBlock.java @@ -21,7 +21,7 @@ public class PowerBlock extends UtilityBlock { public static final int UPDATE_TICKS = 4; public PowerBlock(final int powerLevel) { - super(Properties.copy(Blocks.GLASS).randomTicks(), UPDATE_TICKS); + super(Properties.ofFullCopy(Blocks.GLASS).randomTicks(), UPDATE_TICKS); this.registerDefaultState(this.defaultBlockState().setValue(POWER_LEVEL, powerLevel)); } diff --git a/src/main/java/com/mcmoddev/golems/block/UtilityBlock.java b/src/main/java/com/mcmoddev/golems/block/UtilityBlock.java index f0b3485f..153dfa2c 100644 --- a/src/main/java/com/mcmoddev/golems/block/UtilityBlock.java +++ b/src/main/java/com/mcmoddev/golems/block/UtilityBlock.java @@ -93,7 +93,7 @@ public VoxelShape getShape(final BlockState state, final BlockGetter level, fina } @Override - public ItemStack getCloneItemStack(final BlockGetter level, final BlockPos pos, final BlockState state) { + public ItemStack getCloneItemStack(final net.minecraft.world.level.LevelReader level, final BlockPos pos, final BlockState state) { return ItemStack.EMPTY; } diff --git a/src/main/java/com/mcmoddev/golems/client/EGClientEvents.java b/src/main/java/com/mcmoddev/golems/client/EGClientEvents.java index 7fbc8236..ff4cd5be 100644 --- a/src/main/java/com/mcmoddev/golems/client/EGClientEvents.java +++ b/src/main/java/com/mcmoddev/golems/client/EGClientEvents.java @@ -8,7 +8,6 @@ import com.mcmoddev.golems.client.menu.GuideBookScreen; import com.mcmoddev.golems.data.GolemContainer; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.server.packs.resources.ResourceManager; @@ -16,19 +15,20 @@ import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.client.event.ClientPlayerNetworkEvent; -import net.minecraftforge.client.event.EntityRenderersEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; +import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; public final class EGClientEvents { - public static void register() { - MinecraftForge.EVENT_BUS.register(EGClientEvents.ForgeHandler.class); - FMLJavaModLoadingContext.get().getModEventBus().register(EGClientEvents.ModHandler.class); + public static void register(IEventBus modEventBus) { + NeoForge.EVENT_BUS.register(EGClientEvents.ForgeHandler.class); + modEventBus.register(EGClientEvents.ModHandler.class); ModHandler.addResources(); } @@ -36,7 +36,12 @@ public static class ModHandler { @SubscribeEvent public static void setupClient(final FMLClientSetupEvent event) { - event.enqueueWork(() -> MenuScreens.register(EGRegistry.MenuReg.GOLEM_INVENTORY.get(), GolemInventoryScreen::new)); + // Screen registration moved to RegisterMenuScreensEvent + } + + @SubscribeEvent + public static void registerScreens(final RegisterMenuScreensEvent event) { + event.register(EGRegistry.MenuReg.GOLEM_INVENTORY.get(), GolemInventoryScreen::new); } @SubscribeEvent diff --git a/src/main/java/com/mcmoddev/golems/client/entity/GolemModel.java b/src/main/java/com/mcmoddev/golems/client/entity/GolemModel.java index cbfcb5e2..6de40e44 100644 --- a/src/main/java/com/mcmoddev/golems/client/entity/GolemModel.java +++ b/src/main/java/com/mcmoddev/golems/client/entity/GolemModel.java @@ -117,10 +117,10 @@ public ModelPart getKitty() { //// RENDER //// @Override - public void renderToBuffer(final PoseStack poseStack, final VertexConsumer vertexConsumer, final int packedLight, final int packedOverlay, final float red, - final float green, final float blue, final float alpha) { - // render with custom colors - super.renderToBuffer(poseStack, vertexConsumer, packedLight, packedOverlay, this.red, this.green, this.blue, alpha); + public void renderToBuffer(final PoseStack poseStack, final VertexConsumer vertexConsumer, final int packedLight, final int packedOverlay, final int color) { + // render with custom colors - convert RGB to packed color format + int packedColor = ((int)(this.red * 255) << 16) | ((int)(this.green * 255) << 8) | (int)(this.blue * 255) | (color & 0xFF000000); + super.renderToBuffer(poseStack, vertexConsumer, packedLight, packedOverlay, packedColor); } public void renderKittyLayer(final PoseStack poseStack, final VertexConsumer vertexConsumer, final int packedLight, final int packedOverlay) { @@ -136,7 +136,7 @@ public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float pa public void setupKittyAnim(T entity, float limbSwing, float limbSwingAmount, float partialTicks, float netHeadYaw, float headPitch) { // ears - this.ears.copyFrom(this.head); + this.ears.copyFrom(this.root().getChild("head")); // tail this.tail.y = 2.0F; this.tail.z = 4.0F; @@ -170,8 +170,8 @@ public void translateToHand(HumanoidArm hand, PoseStack matrixStack) { protected ModelPart getArmForSide(HumanoidArm side) { if (side == HumanoidArm.LEFT) { - return this.leftArm; + return this.root().getChild("left_arm"); } - return this.rightArm; + return this.root().getChild("right_arm"); } } diff --git a/src/main/java/com/mcmoddev/golems/client/entity/GolemRenderType.java b/src/main/java/com/mcmoddev/golems/client/entity/GolemRenderType.java index 99c7b6d3..da66e22b 100644 --- a/src/main/java/com/mcmoddev/golems/client/entity/GolemRenderType.java +++ b/src/main/java/com/mcmoddev/golems/client/entity/GolemRenderType.java @@ -27,7 +27,7 @@ public static void reloadDynamicTextureMap() { private static TextureStateShard getTextureState(final ResourceLocation texture, final ResourceLocation template) { // lazy-load the texture state - final ResourceLocation id = new ResourceLocation(texture.getNamespace(), "dynamic/" + template.getPath() + "/" + texture.getPath()); + final ResourceLocation id = ResourceLocation.fromNamespaceAndPath(texture.getNamespace(), "dynamic/" + template.getPath() + "/" + texture.getPath()); if (!dynamicTextureMap.containsKey(id)) { dynamicTextureMap.put(id, new DynamicTextureState(id, texture, template)); } @@ -72,7 +72,7 @@ public static RenderType getGolemOutline(final ResourceLocation texture, final R } // make dynamic outline type return create("golem_outline", - DefaultVertexFormat.POSITION_COLOR_TEX, VertexFormat.Mode.QUADS, 256, false, false, + DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP, VertexFormat.Mode.QUADS, 256, false, false, RenderType.CompositeState.builder() .setShaderState(RENDERTYPE_OUTLINE_SHADER) .setCullState(CullStateShard.NO_CULL) diff --git a/src/main/java/com/mcmoddev/golems/client/entity/GolemRenderer.java b/src/main/java/com/mcmoddev/golems/client/entity/GolemRenderer.java index 9ac87e56..22eef483 100644 --- a/src/main/java/com/mcmoddev/golems/client/entity/GolemRenderer.java +++ b/src/main/java/com/mcmoddev/golems/client/entity/GolemRenderer.java @@ -24,8 +24,8 @@ public class GolemRenderer extends MobRenderer> { - public static final ModelLayerLocation GOLEM_MODEL_RESOURCE = new ModelLayerLocation(new ResourceLocation(ExtraGolems.MODID, "golem"), "main"); - private static final ResourceLocation GOLEM_LOCATION = new ResourceLocation("textures/entity/iron_golem/iron_golem.png"); + public static final ModelLayerLocation GOLEM_MODEL_RESOURCE = new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "golem"), "main"); + private static final ResourceLocation GOLEM_LOCATION = ResourceLocation.parse("textures/entity/iron_golem/iron_golem.png"); /** * @param context the entity render manager @@ -41,9 +41,9 @@ public GolemRenderer(final EntityRendererProvider.Context context) { } @Override - protected void setupRotations(T entity, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTick) { + protected void setupRotations(T entity, PoseStack poseStack, float ageInTicks, float rotationYaw, float partialTick, float scale) { // set up parent rotations - super.setupRotations(entity, poseStack, ageInTicks, rotationYaw, partialTick); + super.setupRotations(entity, poseStack, ageInTicks, rotationYaw, partialTick, scale); // flip upside down if (ExtraGolems.CONFIG.aprilFirst()) { poseStack.translate(0.0F, entity.getBbHeight() + 0.1F, 0.0F); diff --git a/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemCrackinessLayer.java b/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemCrackinessLayer.java index 06e6393c..2c7afaef 100644 --- a/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemCrackinessLayer.java +++ b/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemCrackinessLayer.java @@ -1,6 +1,5 @@ package com.mcmoddev.golems.client.entity.layer; -import com.google.common.collect.ImmutableMap; import com.mcmoddev.golems.entity.GolemBase; import com.mcmoddev.golems.client.entity.GolemModel; import com.mojang.blaze3d.systems.RenderSystem; @@ -12,16 +11,13 @@ import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.animal.IronGolem; - -import java.util.Map; +import net.minecraft.util.Mth; public class GolemCrackinessLayer extends RenderLayer> { - private static final Map resourceLocations = ImmutableMap.of( - IronGolem.Crackiness.LOW, new ResourceLocation("textures/entity/iron_golem/iron_golem_crackiness_low.png"), - IronGolem.Crackiness.MEDIUM, new ResourceLocation("textures/entity/iron_golem/iron_golem_crackiness_medium.png"), - IronGolem.Crackiness.HIGH, new ResourceLocation("textures/entity/iron_golem/iron_golem_crackiness_high.png")); + private static final ResourceLocation LOW = ResourceLocation.parse("textures/entity/iron_golem/iron_golem_crackiness_low.png"); + private static final ResourceLocation MEDIUM = ResourceLocation.parse("textures/entity/iron_golem/iron_golem_crackiness_medium.png"); + private static final ResourceLocation HIGH = ResourceLocation.parse("textures/entity/iron_golem/iron_golem_crackiness_high.png"); public GolemCrackinessLayer(RenderLayerParent> ientityrenderer) { super(ientityrenderer); @@ -31,18 +27,29 @@ public GolemCrackinessLayer(RenderLayerParent> ientityrenderer) public void render(PoseStack stack, MultiBufferSource buffer, int packedLight, T entity, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) { if (!entity.isInvisible()) { - IronGolem.Crackiness irongolem$crackiness = entity.getCrackiness(); - if (irongolem$crackiness != IronGolem.Crackiness.NONE) { - ResourceLocation resourcelocation = resourceLocations.get(irongolem$crackiness); - VertexConsumer vertexconsumer = buffer.getBuffer(RenderType.entityTranslucent(resourcelocation)); + ResourceLocation crackinessTexture = getCrackinessTexture(entity); + if (crackinessTexture != null) { + VertexConsumer vertexconsumer = buffer.getBuffer(RenderType.entityTranslucent(crackinessTexture)); stack.pushPose(); RenderSystem.enableBlend(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 0.5F); - getParentModel().renderToBuffer(stack, vertexconsumer, packedLight, LivingEntityRenderer.getOverlayCoords(entity, 0.0F), 1.0F, 1.0F, 1.0F, 0.5F); + getParentModel().renderToBuffer(stack, vertexconsumer, packedLight, LivingEntityRenderer.getOverlayCoords(entity, 0.0F), 0x80FFFFFF); RenderSystem.disableBlend(); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); stack.popPose(); } } } + + private ResourceLocation getCrackinessTexture(T entity) { + float healthPercent = entity.getHealth() / entity.getMaxHealth(); + if (healthPercent < 0.25F) { + return HIGH; + } else if (healthPercent < 0.5F) { + return MEDIUM; + } else if (healthPercent < 0.75F) { + return LOW; + } + return null; + } } diff --git a/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemFlowerLayer.java b/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemFlowerLayer.java index 75cf9c90..303f45d1 100644 --- a/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemFlowerLayer.java +++ b/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemFlowerLayer.java @@ -33,7 +33,7 @@ public void render(PoseStack matrixStackIn, MultiBufferSource bufferIn, int pack matrixStackIn.mulPose(Axis.XP.rotationDegrees(-90.0F)); matrixStackIn.translate(-0.5D, -0.5D, -0.5D); Minecraft.getInstance().getBlockRenderer().renderSingleBlock(Blocks.POPPY.defaultBlockState(), matrixStackIn, bufferIn, - packedLightIn, OverlayTexture.NO_OVERLAY, net.minecraftforge.client.model.data.ModelData.EMPTY, RenderType.cutout()); + packedLightIn, OverlayTexture.NO_OVERLAY, net.neoforged.neoforge.client.model.data.ModelData.EMPTY, RenderType.cutout()); matrixStackIn.popPose(); } } diff --git a/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemKittyLayer.java b/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemKittyLayer.java index 90bd93ca..43ecaf2a 100644 --- a/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemKittyLayer.java +++ b/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemKittyLayer.java @@ -15,7 +15,7 @@ public class GolemKittyLayer extends RenderLayer> { - private static final ResourceLocation TEXTURE = new ResourceLocation(ExtraGolems.MODID, "textures/entity/golem/layer/kitty_layer.png"); + private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "textures/entity/golem/layer/kitty_layer.png"); public GolemKittyLayer(RenderLayerParent> ientityrenderer) { super(ientityrenderer); diff --git a/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemLayerListLayer.java b/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemLayerListLayer.java index 02def87d..00cf44e6 100644 --- a/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemLayerListLayer.java +++ b/src/main/java/com/mcmoddev/golems/client/entity/layer/GolemLayerListLayer.java @@ -112,7 +112,7 @@ protected static void renderTexture(G entity, GolemModel extends RenderLayer> { - private static final ResourceLocation BONE_SKELETON = new ResourceLocation(ExtraGolems.MODID, "textures/entity/golem/bone_skeleton.png"); - private static final ResourceLocation GANON = new ResourceLocation(ExtraGolems.MODID, "textures/entity/golem/ganon.png"); - private static final ResourceLocation COOKIE = new ResourceLocation(ExtraGolems.MODID, "textures/entity/golem/cookie.png"); - private static final ResourceLocation YETI = new ResourceLocation(ExtraGolems.MODID, "textures/entity/golem/yeti.png"); - private static final ResourceLocation HARAMBE = new ResourceLocation(ExtraGolems.MODID, "textures/entity/golem/harambe.png"); + private static final ResourceLocation BONE_SKELETON = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "textures/entity/golem/bone_skeleton.png"); + private static final ResourceLocation GANON = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "textures/entity/golem/ganon.png"); + private static final ResourceLocation COOKIE = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "textures/entity/golem/cookie.png"); + private static final ResourceLocation YETI = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "textures/entity/golem/yeti.png"); + private static final ResourceLocation HARAMBE = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "textures/entity/golem/harambe.png"); /** * Renders all layers in the golem {@link LayerList} @@ -46,7 +46,7 @@ public void render(PoseStack poseStack, MultiBufferSource bufferSource, int pack } // prepare to render getParentModel().resetColor(); - renderColoredCutoutModel(getParentModel(), override.get(), poseStack, bufferSource, packedLight, entity, 1.0F, 1.0F, 1.0F); + renderColoredCutoutModel(getParentModel(), override.get(), poseStack, bufferSource, packedLight, entity, 0xFFFFFFFF); } public static Optional getOverrideTexture(final G entity) { diff --git a/src/main/java/com/mcmoddev/golems/client/menu/GolemInventoryScreen.java b/src/main/java/com/mcmoddev/golems/client/menu/GolemInventoryScreen.java index 3dfccb63..6e0609e2 100644 --- a/src/main/java/com/mcmoddev/golems/client/menu/GolemInventoryScreen.java +++ b/src/main/java/com/mcmoddev/golems/client/menu/GolemInventoryScreen.java @@ -9,7 +9,7 @@ public class GolemInventoryScreen extends AbstractContainerScreen { - public static final ResourceLocation BG_TEXTURE = new ResourceLocation("minecraft:textures/gui/container/dispenser.png"); + public static final ResourceLocation BG_TEXTURE = ResourceLocation.parse("minecraft:textures/gui/container/dispenser.png"); public GolemInventoryScreen(GolemInventoryMenu cont, Inventory pInv, Component title) { super(cont, pInv, title); @@ -23,7 +23,7 @@ protected void init() { @Override public void render(GuiGraphics matrix, int x, int y, float f) { - this.renderBackground(matrix); + this.renderBackground(matrix, x, y, f); super.render(matrix, x, y, f); this.renderTooltip(matrix, x, y); } diff --git a/src/main/java/com/mcmoddev/golems/client/menu/GuideBookScreen.java b/src/main/java/com/mcmoddev/golems/client/menu/GuideBookScreen.java index d641f7c9..29a5b84a 100644 --- a/src/main/java/com/mcmoddev/golems/client/menu/GuideBookScreen.java +++ b/src/main/java/com/mcmoddev/golems/client/menu/GuideBookScreen.java @@ -22,8 +22,10 @@ public class GuideBookScreen extends Screen implements IBookScreen { - public static final ResourceLocation TEXTURE = new ResourceLocation(ExtraGolems.MODID, "textures/gui/guide_book.png"); - public static final ResourceLocation CONTENTS = new ResourceLocation(ExtraGolems.MODID, "textures/gui/guide_book_contents.png"); + public static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, + "textures/gui/guide_book.png"); + public static final ResourceLocation CONTENTS = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, + "textures/gui/guide_book_contents.png"); protected int imageWidth; protected int imageHeight; @@ -65,21 +67,24 @@ protected void init() { // add Done button final int doneButtonWidth = 98; - this.doneButton = this.addRenderableWidget(Button.builder(Component.translatable("gui.done"), b -> this.minecraft.setScreen(null)) - .pos(this.x + (this.imageWidth - doneButtonWidth) / 2, this.y + this.imageHeight + 8) - .size(98, 20) - .build()); + this.doneButton = this.addRenderableWidget( + Button.builder(Component.translatable("gui.done"), b -> this.minecraft.setScreen(null)) + .pos(this.x + (this.imageWidth - doneButtonWidth) / 2, this.y + this.imageHeight + 8) + .size(98, 20) + .build()); // prepare to add previous and next page buttons final int arrowWidth = 18; final int arrowHeight = 10; final int arrowY = this.y + this.imageHeight - arrowHeight - 12; // add Previous Page button - this.prevPageButton = this.addRenderableWidget(new ImageButton(this.x + 12, arrowY, arrowWidth, arrowHeight, - 22, 168, arrowHeight, TEXTURE, b -> addPage(-2))); + this.prevPageButton = this + .addRenderableWidget(new SimpleImageButton(this.x + 12, arrowY, arrowWidth, arrowHeight, + 22, 168, arrowHeight, TEXTURE, b -> addPage(-2))); // add Next Page button - this.nextPageButton = this.addRenderableWidget(new ImageButton(this.x + this.imageWidth - arrowWidth - 12, arrowY, arrowWidth, arrowHeight, - 0, 168, arrowHeight, TEXTURE, b -> addPage(2))); + this.nextPageButton = this.addRenderableWidget( + new SimpleImageButton(this.x + this.imageWidth - arrowWidth - 12, arrowY, arrowWidth, arrowHeight, + 0, 168, arrowHeight, TEXTURE, b -> addPage(2))); // create guide book guideBook = new GuideBook(this, this.groups, this.x, this.y, 128, 164); @@ -100,19 +105,28 @@ public boolean isPauseScreen() { return false; } + /** + * Override to disable the blur effect that was added in Minecraft 1.21 + * Without this override, the screen content appears blurry + */ + @Override + protected void renderBlurredBackground(float partialTick) { + // Do nothing - this prevents the blur effect from being applied + } + //// RENDER //// @Override public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - // draw background - renderBackground(graphics); + // draw transparent background without blur effect + renderTransparentBackground(graphics); graphics.blit(TEXTURE, this.x, this.y, 0, 0, this.imageWidth, this.imageHeight); // calculate ticks open final float ticksOpen = this.ticksOpen + partialTicks; // render open pages - if(this.guideBook != null) { + if (this.guideBook != null) { this.guideBook.getPage(this.page).render(this, graphics, ticksOpen); this.guideBook.getPage(this.page + 1).render(this, graphics, ticksOpen); } @@ -182,26 +196,55 @@ public void addPage(final int amount) { //// SCROLL //// @Override - public boolean mouseScrolled(double mouseX, double mouseY, double amount) { - if(guideBook != null && guideBook.getPage(page) instanceof ScrollButton.IScrollProvider provider && provider.getScrollButton() != null) { - return provider.getScrollButton().mouseScrolled(mouseX, mouseY, amount); + public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { + if (guideBook != null && guideBook.getPage(page) instanceof ScrollButton.IScrollProvider provider + && provider.getScrollButton() != null) { + return provider.getScrollButton().mouseScrolled(mouseX, mouseY, scrollX, scrollY); } - if(guideBook != null && guideBook.getPage(page + 1) instanceof ScrollButton.IScrollProvider provider && provider.getScrollButton() != null) { - return provider.getScrollButton().mouseScrolled(mouseX, mouseY, amount); + if (guideBook != null && guideBook.getPage(page + 1) instanceof ScrollButton.IScrollProvider provider + && provider.getScrollButton() != null) { + return provider.getScrollButton().mouseScrolled(mouseX, mouseY, scrollX, scrollY); } - return super.mouseScrolled(mouseX, mouseY, amount); + return super.mouseScrolled(mouseX, mouseY, scrollX, scrollY); } @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) { - if(guideBook != null && guideBook.getPage(page) instanceof ScrollButton.IScrollProvider provider && provider.getScrollButton().isDragging()) { + if (guideBook != null && guideBook.getPage(page) instanceof ScrollButton.IScrollProvider provider + && provider.getScrollButton().isDragging()) { provider.getScrollButton().onDrag(mouseX, mouseY, dragX, dragY); return true; } - if(guideBook != null && guideBook.getPage(page + 1) instanceof ScrollButton.IScrollProvider provider && provider.getScrollButton().isDragging()) { + if (guideBook != null && guideBook.getPage(page + 1) instanceof ScrollButton.IScrollProvider provider + && provider.getScrollButton().isDragging()) { provider.getScrollButton().onDrag(mouseX, mouseY, dragX, dragY); return true; } return super.mouseDragged(mouseX, mouseY, button, dragX, dragY); } + + private static class SimpleImageButton extends Button { + private final ResourceLocation texture; + private final int u; + private final int v; + private final int dv; + + public SimpleImageButton(int x, int y, int width, int height, int u, int v, int dv, ResourceLocation texture, + OnPress onPress) { + super(x, y, width, height, Component.empty(), onPress, DEFAULT_NARRATION); + this.texture = texture; + this.u = u; + this.v = v; + this.dv = dv; + } + + @Override + public void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + int vOffset = this.v; + if (this.isHoveredOrFocused()) { + vOffset += this.dv; + } + guiGraphics.blit(this.texture, this.getX(), this.getY(), this.u, vOffset, this.width, this.height); + } + } } diff --git a/src/main/java/com/mcmoddev/golems/client/menu/button/ScrollButton.java b/src/main/java/com/mcmoddev/golems/client/menu/button/ScrollButton.java index 9459afc7..2f9d928e 100644 --- a/src/main/java/com/mcmoddev/golems/client/menu/button/ScrollButton.java +++ b/src/main/java/com/mcmoddev/golems/client/menu/button/ScrollButton.java @@ -72,9 +72,9 @@ public void onDrag(double mouseX, double mouseY, double dragX, double dragY) { } @Override - public boolean mouseScrolled(double mouseX, double mouseY, double amount) { + public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { if(isActive()) { - float scrollPercent = Mth.clamp(this.scrollPercent - (float) amount * scrollAmountMultiplier, 0.0F, 1.0F); + float scrollPercent = Mth.clamp(this.scrollPercent - (float) scrollY * scrollAmountMultiplier, 0.0F, 1.0F); setScrollPercent(scrollPercent); return true; } diff --git a/src/main/java/com/mcmoddev/golems/client/menu/button/TableOfContentsButton.java b/src/main/java/com/mcmoddev/golems/client/menu/button/TableOfContentsButton.java index 0892c27f..cc9994d1 100644 --- a/src/main/java/com/mcmoddev/golems/client/menu/button/TableOfContentsButton.java +++ b/src/main/java/com/mcmoddev/golems/client/menu/button/TableOfContentsButton.java @@ -6,7 +6,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.components.ImageButton; +import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -16,11 +16,15 @@ /** * Displays an {@link ItemStack} and message on an {@link ImageButton} */ -public class TableOfContentsButton extends ImageButton { +public class TableOfContentsButton extends Button { protected final IBookScreen parent; protected final Font font; protected final int margin; + protected final ResourceLocation texture; + protected final int u; + protected final int v; + protected final int dv; protected ITableOfContentsEntry entry; protected Component tooltip; @@ -30,13 +34,41 @@ public TableOfContentsButton(final IBookScreen parent, final Font font, final int x, final int y, final int width, final int height, int margin, final ResourceLocation texture, final int u, final int v, final int dv, final OnPress onPress) { - super(x, y, width, height, u, v, dv, texture, onPress); + super(x, y, width, height, Component.empty(), onPress, DEFAULT_NARRATION); this.parent = parent; this.font = font; this.margin = margin; + this.texture = texture; + this.u = u; + this.v = v; + this.dv = dv; this.index = 0; } + @Override + public void renderWidget(final GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + // draw the button background + int vOffset = this.v; + if (this.isHoveredOrFocused()) { + vOffset += this.dv; + } + graphics.blit(this.texture, this.getX(), this.getY(), this.u, vOffset, this.width, this.height); + + // determine index + int index = (int) (this.parent.getTicksOpen() / 30L); + // draw the block itemstack + int posX = this.getX() + 3; + int posY = this.getY() + (height - 16) / 2; + ItemStack itemStack = this.entry.getItem(index); + graphics.renderItem(itemStack, posX, posY); + // draw the message + int maxWidth = (this.width - 18 - 2 * 2); + posX += 18; + posY = this.getY() + 1 + (this.height - font.wordWrapHeight(getMessage(), maxWidth)) / 2; + graphics.drawWordWrap(font, getMessage(), posX, posY, maxWidth, 0); + //graphics.drawString(font, getMessage(), posX, posY, 0, false); + } + public void setEntry(final ITableOfContentsEntry entry, final int index) { this.entry = entry; this.index = index; @@ -61,22 +93,4 @@ public void setEntry(final ITableOfContentsEntry entry, final int index) { public int getIndex() { return index; } - - @Override - public void renderWidget(final GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.renderWidget(graphics, mouseX, mouseY, partialTicks); - // determine index - int index = (int) (this.parent.getTicksOpen() / 30L); - // draw the block itemstack - int posX = this.getX() + 3; - int posY = this.getY() + (height - 16) / 2; - ItemStack itemStack = this.entry.getItem(index); - graphics.renderItem(itemStack, posX, posY); - // draw the message - int maxWidth = (this.width - 18 - 2 * 2); - posX += 18; - posY = this.getY() + 1 + (this.height - font.wordWrapHeight(getMessage(), maxWidth)) / 2; - graphics.drawWordWrap(font, getMessage(), posX, posY, maxWidth, 0); - //graphics.drawString(font, getMessage(), posX, posY, 0, false); - } } diff --git a/src/main/java/com/mcmoddev/golems/client/menu/guide_book/GuideBook.java b/src/main/java/com/mcmoddev/golems/client/menu/guide_book/GuideBook.java index 96f9a24d..54c4a7d5 100644 --- a/src/main/java/com/mcmoddev/golems/client/menu/guide_book/GuideBook.java +++ b/src/main/java/com/mcmoddev/golems/client/menu/guide_book/GuideBook.java @@ -52,8 +52,8 @@ public class GuideBook { protected static final Component BUILD_HEAD_BODY = Component.literal("\n\n\n\n") .append(Component.translatable(PREFIX + "recipe_head.recipe", BUILD_HEAD_TITLE)); - protected static final ResourceLocation SPELL_RECIPE = new ResourceLocation(ExtraGolems.MODID, "golem_spell"); - protected static final ResourceLocation HEAD_RECIPE = new ResourceLocation(ExtraGolems.MODID, "golem_head"); + protected static final ResourceLocation SPELL_RECIPE = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "golem_spell"); + protected static final ResourceLocation HEAD_RECIPE = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "golem_head"); private final int x; private final int y; @@ -256,7 +256,7 @@ private static void debugSpawnGolem(final GuideBookGroup group) { // determine golem(s) to spawn final List list = group.getList().stream().map(GuideBookEntry::getId).toList(); // send packet to server - EGNetwork.CHANNEL.sendToServer(new ServerBoundSpawnGolemPacket(list)); + net.neoforged.neoforge.network.PacketDistributor.sendToServer(new ServerBoundSpawnGolemPacket(list)); } private static void debugSpawnGolem(final GuideBookEntry entry) { @@ -265,12 +265,12 @@ private static void debugSpawnGolem(final GuideBookEntry entry) { return; } // send packet to server - EGNetwork.CHANNEL.sendToServer(new ServerBoundSpawnGolemPacket(ImmutableList.of(entry.getId()))); + net.neoforged.neoforge.network.PacketDistributor.sendToServer(new ServerBoundSpawnGolemPacket(ImmutableList.of(entry.getId()))); } private static Optional loadRecipe(final RecipeManager recipeManager, final ResourceLocation recipe) { - final Optional> oRecipe = recipeManager.byKey(recipe); - if(oRecipe.isPresent() && oRecipe.get() instanceof CraftingRecipe craftingRecipe && craftingRecipe.canCraftInDimensions(2, 2)) { + final Optional> oRecipe = recipeManager.byKey(recipe); + if(oRecipe.isPresent() && oRecipe.get().value() instanceof CraftingRecipe craftingRecipe && craftingRecipe.canCraftInDimensions(2, 2)) { return Optional.of(craftingRecipe); } return Optional.empty(); diff --git a/src/main/java/com/mcmoddev/golems/client/menu/guide_book/GuideBookEntry.java b/src/main/java/com/mcmoddev/golems/client/menu/guide_book/GuideBookEntry.java index 6a593448..fb7ba56c 100644 --- a/src/main/java/com/mcmoddev/golems/client/menu/guide_book/GuideBookEntry.java +++ b/src/main/java/com/mcmoddev/golems/client/menu/guide_book/GuideBookEntry.java @@ -29,7 +29,8 @@ public class GuideBookEntry implements ITableOfContentsEntry { public static final Comparator SORT_BY_NAME = Comparator.comparing(o -> o.getTitle().getString()); - public static final Comparator SORT_BY_NAMESPACE = Comparator.comparing(o -> o.getId().getNamespace()); + public static final Comparator SORT_BY_NAMESPACE = Comparator + .comparing(o -> o.getId().getNamespace()); private final ResourceLocation id; private final GolemContainer container; @@ -51,7 +52,8 @@ public GuideBookEntry(final RegistryAccess registryAccess, final GolemContainer // collect blocks final GolemBuildingBlocks buildingBlocks = container.getGolem().getBlocks(); final Collection blocks = new HashSet<>(); - if(container.getGolem().getGroup() != null && !buildingBlocks.getBlocks().containsKey(GolemPart.ALL) && buildingBlocks.getBlocks().containsKey(GolemPart.BODY)) { + if (container.getGolem().getGroup() != null && !buildingBlocks.getBlocks().containsKey(GolemPart.ALL) + && buildingBlocks.getBlocks().containsKey(GolemPart.BODY)) { // only show body blocks if there are any. // this ensures that golems in groups do not appear to have identical blocks // when the only difference is the body block, which is often the case. @@ -60,10 +62,13 @@ public GuideBookEntry(final RegistryAccess registryAccess, final GolemContainer // otherwise, show all blocks blocks.addAll(buildingBlocks.get()); } - // create item stacks + // create item stacks (skip blocks that don't have an item form) final ImmutableList.Builder builder = ImmutableList.builder(); - for(Block b : blocks) { - builder.add(new ItemStack(b)); + for (Block b : blocks) { + ItemStack stack = new ItemStack(b); + if (!stack.isEmpty()) { + builder.add(stack); + } } this.items = builder.build(); // collect descriptions @@ -143,8 +148,10 @@ public Component getDescription() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof GuideBookEntry)) return false; + if (this == o) + return true; + if (!(o instanceof GuideBookEntry)) + return false; GuideBookEntry that = (GuideBookEntry) o; return id.equals(that.id); } diff --git a/src/main/java/com/mcmoddev/golems/data/GolemContainer.java b/src/main/java/com/mcmoddev/golems/data/GolemContainer.java index d9259be9..9539f425 100644 --- a/src/main/java/com/mcmoddev/golems/data/GolemContainer.java +++ b/src/main/java/com/mcmoddev/golems/data/GolemContainer.java @@ -14,10 +14,11 @@ import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.TooltipFlag; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.util.thread.EffectiveSide; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.fml.util.thread.EffectiveSide; import org.jetbrains.annotations.ApiStatus; import java.util.ArrayList; @@ -27,6 +28,8 @@ import java.util.List; import java.util.Map; +import net.minecraft.core.HolderLookup; + /** * Contains the ID and values of a {@link Golem} after applying {@link ModifierList}s * for the given ID @@ -44,21 +47,20 @@ public class GolemContainer { /** The loot table ID **/ private final ResourceLocation lootTable; - private GolemContainer(final RegistryAccess registryAccess, final ResourceLocation id) { + private GolemContainer(final HolderLookup.Provider registryAccess, final ResourceLocation id) { this.id = id; // load golem - final Registry golemRegistry = registryAccess.registryOrThrow(EGRegistry.Keys.GOLEM); - final Golem wrapped = golemRegistry.getOptional(id).orElseThrow(); - this.holder = golemRegistry.wrapAsHolder(wrapped); + final HolderLookup.RegistryLookup golemRegistry = registryAccess.lookupOrThrow(EGRegistry.Keys.GOLEM); + final Holder wrapped = golemRegistry.get(ResourceKey.create(EGRegistry.Keys.GOLEM, id)).orElseThrow(); + this.holder = wrapped; // load modifiers final Map> modifiers = new EnumMap<>(Priority.class); - registryAccess.registryOrThrow(EGRegistry.Keys.MODIFIER_LIST).entrySet() - .stream() - .filter(entry -> id.equals(entry.getValue().getTarget())) - .map(Map.Entry::getValue) + registryAccess.lookupOrThrow(EGRegistry.Keys.MODIFIER_LIST).listElements() + .filter(entry -> id.equals(entry.value().getTarget())) + .map(Holder::value) .forEach(list -> modifiers.computeIfAbsent(list.getPriority(), p -> new ArrayList<>()).add(list)); // initialize builders - final Golem.Builder builder = Golem.Builder.from(registryAccess, wrapped); + final Golem.Builder builder = Golem.Builder.from(registryAccess, wrapped.value()); // add default behaviors builder.behaviors(b -> b.add(WearBannerBehavior.ANY)); // apply each modifier in order of priority @@ -149,7 +151,7 @@ private static Map getRegistry(final boolean i * @param id the {@link Golem} ID * @return the cached {@link GolemContainer} */ - public static GolemContainer getOrCreate(final RegistryAccess registryAccess, final ResourceLocation id) { + public static GolemContainer getOrCreate(final HolderLookup.Provider registryAccess, final ResourceLocation id) { // get existing entry final Map registry = getRegistry(EffectiveSide.get().isClient()); final GolemContainer entry = registry.get(id); diff --git a/src/main/java/com/mcmoddev/golems/data/ResourcePair.java b/src/main/java/com/mcmoddev/golems/data/ResourcePair.java index edeef7b4..b6f2c467 100644 --- a/src/main/java/com/mcmoddev/golems/data/ResourcePair.java +++ b/src/main/java/com/mcmoddev/golems/data/ResourcePair.java @@ -12,7 +12,7 @@ */ public final class ResourcePair { - public static final ResourcePair EMPTY = new ResourcePair(new ResourceLocation("empty"), false); + public static final ResourcePair EMPTY = new ResourcePair(ResourceLocation.parse("empty"), false); public static final Codec CODEC = Codec.STRING.comapFlatMap(ResourcePair::read, ResourcePair::toString).stable(); @@ -62,10 +62,10 @@ public static DataResult read(String string) { ResourceLocation res; boolean dyn; if (string.length() > 0 && string.charAt(0) == '#') { - res = new ResourceLocation(string.substring(1)); + res = ResourceLocation.parse(string.substring(1)); dyn = true; } else { - res = new ResourceLocation(string); + res = ResourceLocation.parse(string); dyn = false; } return DataResult.success(new ResourcePair(res, dyn)); diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/AbstractShootBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/AbstractShootBehavior.java index 561c8d37..e575ba5a 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/AbstractShootBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/AbstractShootBehavior.java @@ -8,6 +8,7 @@ import com.mcmoddev.golems.util.EGCodecUtils; import com.mojang.datafixers.Products; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.nbt.CompoundTag; @@ -28,7 +29,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.network.NetworkHooks; import org.jetbrains.annotations.Nullable; import javax.annotation.concurrent.Immutable; @@ -40,7 +40,7 @@ public abstract class AbstractShootBehavior extends Behavior { /** The follow range modifier to allow the entity to detect enemies from a distance **/ - public static final AttributeModifier RANGED_FOLLOW_BONUS = new AttributeModifier("Ranged follow bonus", 8.0F, AttributeModifier.Operation.ADDITION); + public static final AttributeModifier RANGED_FOLLOW_BONUS = new AttributeModifier(net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(com.mcmoddev.golems.ExtraGolems.MODID, "ranged_follow_bonus"), 8.0F, AttributeModifier.Operation.ADD_VALUE); /** True to consume ammo when shooting **/ private final boolean consume; @@ -122,7 +122,7 @@ protected boolean hasAmmo(final IExtraGolem entity) { */ protected boolean openMenu(final IExtraGolem entity, final ServerPlayer player) { final Mob mob = entity.asMob(); - NetworkHooks.openScreen(player, new SimpleMenuProvider( + player.openMenu(new SimpleMenuProvider( (windowId, inventory, menuPlayer) -> new GolemInventoryMenu(windowId, inventory, entity.getInventory(), entity, ContainerLevelAccess.create(mob.level(), mob.blockPosition())), mob.getName())); return true; @@ -134,7 +134,7 @@ protected boolean openMenu(final IExtraGolem entity, final ServerPlayer player) public void onRegisterGoals(final IExtraGolem entity) { // modify follow range AttributeInstance followRange = entity.asMob().getAttribute(Attributes.FOLLOW_RANGE); - if(!followRange.hasModifier(RANGED_FOLLOW_BONUS)) { + if(!followRange.hasModifier(RANGED_FOLLOW_BONUS.id())) { followRange.addPermanentModifier(RANGED_FOLLOW_BONUS); } // register move to item goal @@ -148,7 +148,7 @@ public void onRegisterGoals(final IExtraGolem entity) { public void onActuallyHurt(final IExtraGolem entity, final DamageSource source, final float amount) { final Mob mob = entity.asMob(); // if it's an arrow or other projectile, set the attacker as revenge target - if (source.isIndirect() && source.getEntity() instanceof LivingEntity) { + if (source.getEntity() != source.getDirectEntity() && source.getEntity() instanceof LivingEntity) { mob.setTarget((LivingEntity) source.getEntity()); } updateCombatTask(entity, isInRangeToAttack(entity, mob.getTarget())); diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/AoeBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/AoeBehavior.java index f78498a1..532c80bf 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/AoeBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/AoeBehavior.java @@ -7,12 +7,13 @@ import com.mcmoddev.golems.util.AoeMapper; import com.mojang.datafixers.Products; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.Event; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.bus.api.Event; import javax.annotation.concurrent.Immutable; import java.util.Objects; @@ -64,12 +65,12 @@ protected static Products.P5, M @Override public void onTick(IExtraGolem entity) { - if(entity.asMob().tickCount % this.interval != 0) { + if(((net.minecraft.world.entity.Entity)entity).tickCount % this.interval != 0) { return; } - final GolemModifyBlocksEvent event = new GolemModifyBlocksEvent(entity.asMob(), entity.asMob().blockPosition(), getRadius(), getShape(), getMapper()); + final GolemModifyBlocksEvent event = new GolemModifyBlocksEvent(entity, ((net.minecraft.world.entity.Entity)entity).blockPosition(), getRadius(), getShape(), getMapper()); // verify the event was not canceled or denied - if (!MinecraftForge.EVENT_BUS.post(event) && event.getResult() != Event.Result.DENY) { + if (!NeoForge.EVENT_BUS.post(event).isCanceled() && event.getResult() != GolemModifyBlocksEvent.Result.DENY) { // Apply the mapper to each position in the shape for(BlockPos pos : event.getShape().createPositions(event.getCenter(), event.getRadius())) { // verify position is not in blacklist diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/AoeDryBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/AoeDryBehavior.java index d5e53597..6f912479 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/AoeDryBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/AoeDryBehavior.java @@ -6,6 +6,7 @@ import com.mcmoddev.golems.data.behavior.util.TooltipPredicate; import com.mcmoddev.golems.util.AoeMapper; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -31,7 +32,7 @@ @Immutable public class AoeDryBehavior extends AoeBehavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStartAoe(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStartAoe(instance) .apply(instance, AoeDryBehavior::new)); public AoeDryBehavior(MinMaxBounds.Ints variant, TooltipPredicate tooltipPredicate, int radius, int interval, AoeShape shape) { @@ -48,7 +49,7 @@ public AoeMapper getMapper() { //// GETTERS //// @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.AOE_DRY.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/AoeFreezeBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/AoeFreezeBehavior.java index b3efa4d0..9118ad3d 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/AoeFreezeBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/AoeFreezeBehavior.java @@ -6,6 +6,7 @@ import com.mcmoddev.golems.data.behavior.util.TooltipPredicate; import com.mcmoddev.golems.util.AoeMapper; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -30,7 +31,7 @@ @Immutable public class AoeFreezeBehavior extends AoeBehavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStartAoe(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStartAoe(instance) .and(Codec.BOOL.optionalFieldOf("frosted", false).forGetter(AoeFreezeBehavior::useFrostedIce)) .apply(instance, AoeFreezeBehavior::new)); @@ -60,7 +61,7 @@ public boolean useFrostedIce() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.AOE_FREEZE.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/AoeGrowBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/AoeGrowBehavior.java index 7b1dbd90..c0a6058a 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/AoeGrowBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/AoeGrowBehavior.java @@ -6,6 +6,7 @@ import com.mcmoddev.golems.data.behavior.util.TooltipPredicate; import com.mcmoddev.golems.util.AoeMapper; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -30,7 +31,7 @@ public class AoeGrowBehavior extends AoeBehavior { private static final IntProvider DEFAULT_AMOUNT = UniformInt.of(2, 5); - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStartAoe(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStartAoe(instance) .and(Codec.doubleRange(0.0D, 1.0D).optionalFieldOf("chance", 0.05D).forGetter(AoeGrowBehavior::getChance)) .and(IntProvider.NON_NEGATIVE_CODEC.optionalFieldOf("amount", DEFAULT_AMOUNT).forGetter(AoeGrowBehavior::getAmount)) .apply(instance, AoeGrowBehavior::new)); @@ -67,7 +68,7 @@ public IntProvider getAmount() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.AOE_GROW.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/Behavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/Behavior.java index 77259863..cc8b09b1 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/Behavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/Behavior.java @@ -11,6 +11,7 @@ import com.mcmoddev.golems.util.EGComponentUtils; import com.mojang.datafixers.Products; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.core.RegistryAccess; @@ -40,8 +41,9 @@ @Immutable public abstract class Behavior implements IVariantPredicate { - public static final Codec DIRECT_CODEC = ExtraCodecs.lazyInitializedCodec(() -> EGRegistry.BEHAVIOR_SERIALIZER_SUPPLIER.get().getCodec()) - .dispatch(Behavior::getCodec, Function.identity()); + public static final Codec DIRECT_CODEC = Codec + .lazyInitialized(() -> EGRegistry.BEHAVIOR_SERIALIZER_SUPPLIER.byNameCodec()) + .dispatch("type", Behavior::getCodec, codec -> codec); public static final String PREFIX = "golem.description.behavior."; @@ -69,9 +71,9 @@ public TooltipPredicate getTooltipPredicate() { } /** - * @return the {@link Codec} for this behavior + * @return the {@link MapCodec} for this behavior (changed from Codec in 1.21+) */ - public abstract Codec getCodec(); + public abstract MapCodec getCodec(); //// METHODS //// @@ -80,28 +82,32 @@ public TooltipPredicate getTooltipPredicate() { * * @param entity the Golem */ - public void onAttachData(final IExtraGolem entity) { } + public void onAttachData(final IExtraGolem entity) { + } /** * Called when the Golem registers goals * * @param entity the Golem */ - public void onRegisterGoals(final IExtraGolem entity) { } + public void onRegisterGoals(final IExtraGolem entity) { + } /** * Called when any synched data is updated * * @param entity the Golem */ - public void onSyncedDataUpdated(final IExtraGolem entity, final EntityDataAccessor key) { } + public void onSyncedDataUpdated(final IExtraGolem entity, final EntityDataAccessor key) { + } /** * Called when the Golem update method is called * * @param entity the Golem */ - public void onTick(final IExtraGolem entity) { } + public void onTick(final IExtraGolem entity) { + } /** * Called after the entity attack target changes @@ -109,7 +115,8 @@ public void onTick(final IExtraGolem entity) { } * @param entity the Golem * @param target the updated attack target */ - public void onTarget(final IExtraGolem entity, final @Nullable LivingEntity target) { } + public void onTarget(final IExtraGolem entity, final @Nullable LivingEntity target) { + } /** * Called when the Golem attacks an entity @@ -117,7 +124,8 @@ public void onTarget(final IExtraGolem entity, final @Nullable LivingEntity targ * @param entity the Golem * @param target the entity that was hurt */ - public void onAttack(final IExtraGolem entity, final Entity target) { } + public void onAttack(final IExtraGolem entity, final Entity target) { + } /** * Called when the Golem performs a ranged attack on an entity @@ -125,7 +133,8 @@ public void onAttack(final IExtraGolem entity, final Entity target) { } * @param entity the Golem * @param target the entity that was hurt */ - public void onRangedAttack(final IExtraGolem entity, final LivingEntity target, final float distanceFactor) { } + public void onRangedAttack(final IExtraGolem entity, final LivingEntity target, final float distanceFactor) { + } /** * Called when the entity is hurt @@ -134,24 +143,27 @@ public void onRangedAttack(final IExtraGolem entity, final LivingEntity target, * @param source the source of the damage * @param amount the amount of damage */ - public void onActuallyHurt(final IExtraGolem entity, final DamageSource source, final float amount) { } + public void onActuallyHurt(final IExtraGolem entity, final DamageSource source, final float amount) { + } /** * Called when a player interacts and the interaction was not already consumed * * @param entity the entity * @param player the Player - * @param hand the Player's hand + * @param hand the Player's hand */ - public void onMobInteract(final IExtraGolem entity, final Player player, final InteractionHand hand) { } + public void onMobInteract(final IExtraGolem entity, final Player player, final InteractionHand hand) { + } /** * Called when the entity is struck by lightning * - * @param entity the entity + * @param entity the entity * @param lightningBolt the Lightning Bolt entity */ - public void onStruckByLightning(final IExtraGolem entity, final LightningBolt lightningBolt) { } + public void onStruckByLightning(final IExtraGolem entity, final LightningBolt lightningBolt) { + } /** * Called when the entity dies, before it is marked as removed @@ -159,7 +171,8 @@ public void onStruckByLightning(final IExtraGolem entity, final LightningBolt li * @param entity the entity * @param source the DamageSource that killed the entity */ - public void onDie(final IExtraGolem entity, final DamageSource source) { } + public void onDie(final IExtraGolem entity, final DamageSource source) { + } /** * Called after reading additional data from NBT @@ -167,7 +180,8 @@ public void onDie(final IExtraGolem entity, final DamageSource source) { } * @param entity the entity * @param tag the entity NBT tag */ - public void onWriteData(final IExtraGolem entity, final CompoundTag tag) { } + public void onWriteData(final IExtraGolem entity, final CompoundTag tag) { + } /** * Called after writing additional data to NBT @@ -175,7 +189,8 @@ public void onWriteData(final IExtraGolem entity, final CompoundTag tag) { } * @param entity the entity * @param tag the entity NBT tag */ - public void onReadData(final IExtraGolem entity, final CompoundTag tag) { } + public void onReadData(final IExtraGolem entity, final CompoundTag tag) { + } /** * @param registryAccess the registry access @@ -189,16 +204,16 @@ public List createDescriptions(RegistryAccess registryAccess) { * Called when building the Guide Book to add descriptions * * @param registryAccess the registry access - * @param list the current description list - * @param tooltipFlag the tooltip flag + * @param list the current description list + * @param tooltipFlag the tooltip flag */ public void onAddDescriptions(RegistryAccess registryAccess, List list, TooltipFlag tooltipFlag) { // load descriptions - if(this.descriptions.isEmpty()) { + if (this.descriptions.isEmpty()) { this.descriptions.addAll(createDescriptions(registryAccess)); } // test tooltip predicate and add descriptions - if(getTooltipPredicate().test(tooltipFlag)) { + if (getTooltipPredicate().test(tooltipFlag)) { list.addAll(this.descriptions); } } @@ -207,8 +222,10 @@ public void onAddDescriptions(RegistryAccess registryAccess, List lis @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Behavior)) return false; + if (this == o) + return true; + if (!(o instanceof Behavior)) + return false; Behavior behavior = (Behavior) o; return variant.equals(behavior.variant); } @@ -222,36 +239,48 @@ public int hashCode() { /** * Simplifies codec creation, especially if no other fields are added + * * @param instance the record codec builder with additional parameters, if any */ - protected static Products.P2, MinMaxBounds.Ints, TooltipPredicate> codecStart(RecordCodecBuilder.Instance instance) { + protected static Products.P2, MinMaxBounds.Ints, TooltipPredicate> codecStart( + RecordCodecBuilder.Instance instance) { return instance.group( - EGCodecUtils.MIN_MAX_INTS_CODEC.optionalFieldOf("variant", MinMaxBounds.Ints.ANY).forGetter(Behavior::getVariantBounds), - TooltipPredicate.CODEC.optionalFieldOf("tooltip", TooltipPredicate.NORMAL).forGetter(Behavior::getTooltipPredicate)); + EGCodecUtils.MIN_MAX_INTS_CODEC.optionalFieldOf("variant", MinMaxBounds.Ints.ANY) + .forGetter(Behavior::getVariantBounds), + TooltipPredicate.CODEC.optionalFieldOf("tooltip", TooltipPredicate.NORMAL) + .forGetter(Behavior::getTooltipPredicate)); } /** - * @param trigger a trigger type, where {@link TriggerType#TICK} will be ignored - * @param predicates a list of world predicates, where {@link GolemPredicate#ALWAYS} and {@link GolemPredicate#NEVER} will be ignored - * @return a single component combining the trigger type and world predicates, if any apply + * @param trigger a trigger type, where {@link TriggerType#TICK} will be + * ignored + * @param predicates a list of world predicates, where + * {@link GolemPredicate#ALWAYS} and + * {@link GolemPredicate#NEVER} will be ignored + * @return a single component combining the trigger type and world predicates, + * if any apply */ - protected static Optional createTriggerAndPredicateDescription(final TriggerType trigger, final List predicates) { + protected static Optional createTriggerAndPredicateDescription(final TriggerType trigger, + final List predicates) { // create filtered list of predicates, ignoring ALWAYS and NEVER final List filteredPredicates = predicates.stream() .filter(p -> p != GolemPredicate.ALWAYS && p != GolemPredicate.NEVER) .collect(ImmutableList.toImmutableList()); // create component from predicates list - final Optional oPredicates = EGComponentUtils.combineWithAnd(filteredPredicates, GolemPredicate::getDescriptionId); + final Optional oPredicates = EGComponentUtils.combineWithAnd(filteredPredicates, + GolemPredicate::getDescriptionId); // create component from trigger - final Optional oTrigger = trigger == TriggerType.TICK ? Optional.empty() : Optional.of(Component.translatable(trigger.getDescriptionId())); + final Optional oTrigger = trigger == TriggerType.TICK ? Optional.empty() + : Optional.of(Component.translatable(trigger.getDescriptionId())); // use either component, or combine both - if(oPredicates.isPresent() && oTrigger.isPresent()) { - return Optional.of(Component.translatable("golem.description.predicate.multiple", oTrigger.get(), oPredicates.get())); - } else if(oPredicates.isPresent()) { + if (oPredicates.isPresent() && oTrigger.isPresent()) { + return Optional.of( + Component.translatable("golem.description.predicate.multiple", oTrigger.get(), oPredicates.get())); + } else if (oPredicates.isPresent()) { return oPredicates; - } else if(oTrigger.isPresent()) { + } else if (oTrigger.isPresent()) { return oTrigger; } return Optional.empty(); @@ -259,7 +288,7 @@ protected static Optional createTriggerAndPredicateDescription(final protected static boolean removeGoal(final Mob entity, final Class goalToRemove) { final List goalsToRemove = new ArrayList<>(); - entity.goalSelector.availableGoals.forEach(g -> { + entity.goalSelector.getAvailableGoals().forEach(g -> { if (g.getGoal().getClass() == goalToRemove) { goalsToRemove.add(g.getGoal()); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/BehaviorList.java b/src/main/java/com/mcmoddev/golems/data/behavior/BehaviorList.java index 2f498977..26271661 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/BehaviorList.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/BehaviorList.java @@ -9,6 +9,7 @@ import com.mcmoddev.golems.util.EGCodecUtils; import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess; diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/BurnInSunBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/BurnInSunBehavior.java index e3ff62fe..fddc0c7b 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/BurnInSunBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/BurnInSunBehavior.java @@ -5,6 +5,7 @@ import com.mcmoddev.golems.data.behavior.util.TooltipPredicate; import com.mcmoddev.golems.entity.IExtraGolem; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -27,7 +28,7 @@ @Immutable public class BurnInSunBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(Codec.doubleRange(0.0D, 1.0D).optionalFieldOf("chance", 0.25D).forGetter(BurnInSunBehavior::getChance)) .apply(instance, BurnInSunBehavior::new)); @@ -46,7 +47,7 @@ public double getChance() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.BURN_IN_SUN.get(); } @@ -65,7 +66,7 @@ public void onTick(IExtraGolem entity) { final Mob mob = entity.asMob(); // set on fire if(entity.isSunBurnTickAccessor() && mob.getRandom().nextFloat() < chance && mob.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { - mob.setSecondsOnFire(3); + mob.igniteForSeconds(3); } } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/CraftMenuBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/CraftMenuBehavior.java index a16f92a1..1e24252c 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/CraftMenuBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/CraftMenuBehavior.java @@ -6,6 +6,7 @@ import com.mcmoddev.golems.entity.IExtraGolem; import com.mcmoddev.golems.menu.GolemCraftingMenu; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -18,7 +19,6 @@ import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.ContainerLevelAccess; -import net.minecraftforge.network.NetworkHooks; import javax.annotation.concurrent.Immutable; import java.util.List; @@ -30,7 +30,7 @@ @Immutable public class CraftMenuBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .apply(instance, CraftMenuBehavior::new)); public CraftMenuBehavior(MinMaxBounds.Ints variant, TooltipPredicate tooltipPredicate) { @@ -40,7 +40,7 @@ public CraftMenuBehavior(MinMaxBounds.Ints variant, TooltipPredicate tooltipPred //// GETTERS //// @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.CRAFT_MENU.get(); } @@ -56,7 +56,7 @@ public void onMobInteract(final IExtraGolem entity, final Player player, final I entity.setPlayerInMenu(player); // display crafting grid by sending request to server final Mob mob = entity.asMob(); - NetworkHooks.openScreen((ServerPlayer) player, new SimpleMenuProvider( + ((ServerPlayer) player).openMenu(new SimpleMenuProvider( (windowId, inv, menuPlayer) -> new GolemCraftingMenu(windowId, inv, entity, ContainerLevelAccess.create(mob.level(), mob.blockPosition())), mob.getName())); player.awardStat(Stats.INTERACT_WITH_CRAFTING_TABLE); diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/EffectBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/EffectBehavior.java index 636748ff..10423b1d 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/EffectBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/EffectBehavior.java @@ -10,6 +10,7 @@ import com.mcmoddev.golems.util.EGCodecUtils; import com.mcmoddev.golems.util.PredicateUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -30,7 +31,7 @@ @Immutable public class EffectBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(TargetedMobEffects.CODEC.fieldOf("apply").forGetter(EffectBehavior::getTargetedMobEffects)) .and(TriggerType.CODEC.optionalFieldOf("trigger", TriggerType.TICK).forGetter(EffectBehavior::getTrigger)) .and(EGCodecUtils.listOrElementCodec(GolemPredicate.CODEC).optionalFieldOf("predicate", ImmutableList.of(GolemPredicate.ALWAYS)).forGetter(EffectBehavior::getPredicates)) @@ -76,7 +77,7 @@ public double getChance() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.EFFECT.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/ExplodeBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/ExplodeBehavior.java index 754a819a..09e324c5 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/ExplodeBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/ExplodeBehavior.java @@ -6,6 +6,7 @@ import com.mcmoddev.golems.data.behavior.util.TooltipPredicate; import com.mcmoddev.golems.entity.IExtraGolem; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -18,6 +19,7 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.tags.ItemTags; import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.entity.Entity; @@ -39,7 +41,7 @@ @Immutable public class ExplodeBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(Codec.doubleRange(0.0D, 127.0D).optionalFieldOf("radius", 2.0D).forGetter(ExplodeBehavior::getRadius)) .and(Codec.intRange(0, Integer.MAX_VALUE).optionalFieldOf("fuse", 60).forGetter(ExplodeBehavior::getMinFuse)) .and(Codec.doubleRange(0.0D, 1.0D).optionalFieldOf("hurt_chance", 0.0D).forGetter(ExplodeBehavior::getChanceOnHurt)) @@ -82,7 +84,7 @@ public double getChanceOnAttack() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.EXPLODE.get(); } @@ -148,9 +150,9 @@ public void onMobInteract(final IExtraGolem entity, final Player player, final I mob.level().playSound(player, pos.x, pos.y, pos.z, sound, mob.getSoundSource(), 1.0F, mob.getRandom().nextFloat() * 0.4F + 0.8F); player.swing(hand); - mob.setSecondsOnFire(Math.floorDiv(getMinFuse(), 20)); + mob.igniteForSeconds(Math.floorDiv(getMinFuse(), 20)); entity.getBehaviorData(ExplodeBehaviorData.class).ifPresent(data -> data.lightFuse()); - itemstack.hurtAndBreak(1, player, c -> c.broadcastBreakEvent(hand)); + itemstack.hurtAndBreak(1, player, hand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND); } } @@ -165,13 +167,13 @@ public List createDescriptions(RegistryAccess registryAccess) { @Override public void onWriteData(final IExtraGolem entity, final CompoundTag tag) { - entity.getBehaviorData(ExplodeBehaviorData.class).ifPresent(data -> tag.put(KEY_EXPLOSION_HELPER, data.serializeNBT())); + entity.getBehaviorData(ExplodeBehaviorData.class).ifPresent(data -> tag.put(KEY_EXPLOSION_HELPER, data.serializeNBT(((net.minecraft.world.entity.Entity)entity).level().registryAccess()))); } @Override public void onReadData(final IExtraGolem entity, final CompoundTag tag) { - entity.getBehaviorData(ExplodeBehaviorData.class).ifPresent(data -> data.deserializeNBT(tag.getCompound(KEY_EXPLOSION_HELPER))); + entity.getBehaviorData(ExplodeBehaviorData.class).ifPresent(data -> data.deserializeNBT(((net.minecraft.world.entity.Entity)entity).level().registryAccess(), tag.getCompound(KEY_EXPLOSION_HELPER))); } //// EQUALITY //// diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/FollowBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/FollowBehavior.java index 4a8479de..356ce4f7 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/FollowBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/FollowBehavior.java @@ -6,13 +6,14 @@ import com.mcmoddev.golems.entity.IExtraGolem; import com.mcmoddev.golems.entity.goal.FollowGoal; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.EntityType; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.concurrent.Immutable; import java.util.List; @@ -25,8 +26,8 @@ @Immutable public class FollowBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) - .and(ForgeRegistries.ENTITY_TYPES.getCodec().fieldOf("entity").forGetter(FollowBehavior::getEntity)) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) + .and(BuiltInRegistries.ENTITY_TYPE.byNameCodec().fieldOf("entity").forGetter(FollowBehavior::getEntity)) .and(Codec.INT.optionalFieldOf("priority", 2).forGetter(FollowBehavior::getPriority)) .apply(instance, FollowBehavior::new)); @@ -52,7 +53,7 @@ public int getPriority() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.FOLLOW.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/ItemUpdateGolemBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/ItemUpdateGolemBehavior.java index a695f607..f66f3a62 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/ItemUpdateGolemBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/ItemUpdateGolemBehavior.java @@ -13,6 +13,7 @@ import com.mcmoddev.golems.util.EGComponentUtils; import com.mcmoddev.golems.util.PredicateUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -30,7 +31,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @@ -47,7 +48,7 @@ @Immutable public class ItemUpdateGolemBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( EGCodecUtils.MIN_MAX_INTS_CODEC.optionalFieldOf("variant", MinMaxBounds.Ints.ANY).forGetter(Behavior::getVariantBounds), TooltipPredicate.CODEC.optionalFieldOf("tooltip", TooltipPredicate.NORMAL).forGetter(Behavior::getTooltipPredicate), UpdateTarget.CODEC.fieldOf("apply").forGetter(ItemUpdateGolemBehavior::getApply), @@ -56,7 +57,7 @@ public class ItemUpdateGolemBehavior extends Behavior { EGCodecUtils.listOrElementCodec(GolemPredicate.CODEC).optionalFieldOf("predicate", ImmutableList.of(GolemPredicate.ALWAYS)).forGetter(ItemUpdateGolemBehavior::getPredicates), Codec.BOOL.optionalFieldOf("consume", false).forGetter(ItemUpdateGolemBehavior::consume), Codec.doubleRange(0.0D, 1.0D).optionalFieldOf("chance", 1.0D).forGetter(ItemUpdateGolemBehavior::getChance), - ForgeRegistries.SOUND_EVENTS.getCodec().optionalFieldOf("sound").forGetter(o -> Optional.ofNullable(o.sound)), + BuiltInRegistries.SOUND_EVENT.byNameCodec().optionalFieldOf("sound").forGetter(o -> Optional.ofNullable(o.sound)), ParticleTypes.CODEC.optionalFieldOf("particle").forGetter(o -> Optional.ofNullable(o.particle)) ).apply(instance, ItemUpdateGolemBehavior::new)); @@ -131,7 +132,7 @@ public ParticleOptions getParticle() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.ITEM_UPDATE_GOLEM.get(); } @@ -182,7 +183,7 @@ public List createDescriptions(RegistryAccess registryAccess) { if(this.displayNameKey != null && !this.displayNameKey.isEmpty()) { itemName = Component.translatable(this.displayNameKey); } else if(!this.item.isEmpty()) { - final Item randomItem = this.item.get(BuiltInRegistries.ITEM).get(0).get(); + final Item randomItem = this.item.get(BuiltInRegistries.ITEM).get(0).value(); itemName = randomItem.getDescription(); } else { itemName = Component.translatable(PREFIX + "item_update_golem.empty_hand"); diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/LightBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/LightBehavior.java index 3c4ae013..dc219ac7 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/LightBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/LightBehavior.java @@ -7,6 +7,7 @@ import com.mcmoddev.golems.data.behavior.util.TooltipPredicate; import com.mcmoddev.golems.entity.IExtraGolem; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -20,7 +21,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.concurrent.Immutable; import java.util.List; @@ -32,9 +33,9 @@ @Immutable public class LightBehavior extends Behavior { - private static final TagKey CANNOT_SUPPORT = ForgeRegistries.BLOCKS.tags().createTagKey(new ResourceLocation(ExtraGolems.MODID, "cannot_support_utility_blocks")); + private static final TagKey CANNOT_SUPPORT = TagKey.create(BuiltInRegistries.BLOCK.key(), ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "cannot_support_utility_blocks")); - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(Codec.intRange(1, Integer.MAX_VALUE).optionalFieldOf("interval", 4).forGetter(LightBehavior::getInterval)) .and(Codec.intRange(0, 15).optionalFieldOf("light", 15).forGetter(LightBehavior::getLightLevel)) .apply(instance, LightBehavior::new)); @@ -61,7 +62,7 @@ public int getLightLevel() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.LIGHT.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/PlaceBlockBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/PlaceBlockBehavior.java index 867c28c8..4e8e026d 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/PlaceBlockBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/PlaceBlockBehavior.java @@ -12,6 +12,7 @@ import com.mcmoddev.golems.util.EGCodecUtils; import com.mcmoddev.golems.util.PredicateUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.Util; @@ -42,7 +43,7 @@ @Immutable public class PlaceBlockBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( EGCodecUtils.MIN_MAX_INTS_CODEC.optionalFieldOf("variant", MinMaxBounds.Ints.ANY).forGetter(Behavior::getVariantBounds), TooltipPredicate.CODEC.optionalFieldOf("tooltip", TooltipPredicate.NORMAL).forGetter(Behavior::getTooltipPredicate), TriggerType.CODEC.optionalFieldOf("trigger", TriggerType.TICK).forGetter(PlaceBlockBehavior::getTrigger), @@ -122,7 +123,7 @@ public boolean mustSurvive() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.PLACE.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/PowerBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/PowerBehavior.java index 8e448f7b..cb56e62d 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/PowerBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/PowerBehavior.java @@ -7,6 +7,7 @@ import com.mcmoddev.golems.data.behavior.util.TooltipPredicate; import com.mcmoddev.golems.entity.IExtraGolem; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -20,7 +21,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.concurrent.Immutable; import java.util.List; @@ -32,9 +33,9 @@ @Immutable public class PowerBehavior extends Behavior { - private static final TagKey CANNOT_SUPPORT = ForgeRegistries.BLOCKS.tags().createTagKey(new ResourceLocation(ExtraGolems.MODID, "cannot_support_utility_blocks")); + private static final TagKey CANNOT_SUPPORT = TagKey.create(BuiltInRegistries.BLOCK.key(), ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "cannot_support_utility_blocks")); - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(Codec.intRange(1, Integer.MAX_VALUE).optionalFieldOf("interval", 4).forGetter(PowerBehavior::getInterval)) .and(Codec.intRange(0, 15).optionalFieldOf("power", 15).forGetter(PowerBehavior::getPowerLevel)) .apply(instance, PowerBehavior::new)); @@ -61,7 +62,7 @@ public int getPowerLevel() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.POWER.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/SetFireBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/SetFireBehavior.java index 9f2fd818..1461a55d 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/SetFireBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/SetFireBehavior.java @@ -11,6 +11,7 @@ import com.mcmoddev.golems.util.EGCodecUtils; import com.mcmoddev.golems.util.PredicateUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.core.RegistryAccess; @@ -34,7 +35,7 @@ @Immutable public class SetFireBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(IntProvider.NON_NEGATIVE_CODEC.optionalFieldOf("seconds", ConstantInt.of(3)).forGetter(SetFireBehavior::getSeconds)) .and(TargetType.CODEC.fieldOf("target").forGetter(SetFireBehavior::getTarget)) .and(TriggerType.CODEC.fieldOf("trigger").forGetter(SetFireBehavior::getTrigger)) @@ -96,7 +97,7 @@ public double getChance() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.SET_FIRE.get(); } @@ -153,16 +154,16 @@ protected boolean setFire(final GolemBase self) { condition, self, self.getBoundingBox().inflate(radius)); // apply to each entity in list for (LivingEntity entity : targets) { - entity.setSecondsOnFire(seconds.sample(self.getRandom())); + entity.igniteForSeconds(seconds.sample(self.getRandom())); } return !targets.isEmpty(); case SELF: - self.setSecondsOnFire(seconds.sample(self.getRandom())); + self.igniteForSeconds(seconds.sample(self.getRandom())); return true; case ENEMY: LivingEntity target = self.getTarget(); if(target != null) { - target.setSecondsOnFire(seconds.sample(self.getRandom())); + target.igniteForSeconds(seconds.sample(self.getRandom())); } return target != null; diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/ShootArrowsBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/ShootArrowsBehavior.java index 5c5615ea..a9318e4d 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/ShootArrowsBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/ShootArrowsBehavior.java @@ -7,6 +7,7 @@ import com.mcmoddev.golems.entity.IExtraGolem; import com.mcmoddev.golems.entity.goal.MoveToItemGoal; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -36,7 +37,7 @@ @Immutable public class ShootArrowsBehavior extends AbstractShootBehavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> shootCodecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> shootCodecStart(instance) .and(Codec.doubleRange(0.0D, 100.0D).optionalFieldOf("damage", 2.0D).forGetter(ShootArrowsBehavior::getDamage)) .apply(instance, ShootArrowsBehavior::new)); @@ -63,7 +64,7 @@ public double getDamage(final IExtraGolem entity) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.SHOOT_ARROWS.get(); } @@ -92,7 +93,7 @@ protected boolean performRangedAttack(IExtraGolem entity, LivingEntity target, f return false; } // make an arrow out of the inventory - AbstractArrow arrow = ProjectileUtil.getMobArrow(mob, itemstack, distanceFactor); + AbstractArrow arrow = ProjectileUtil.getMobArrow(mob, itemstack, distanceFactor, null); arrow.setPos(mob.getX(), mob.getY() + mob.getBbHeight() * 0.55F, mob.getZ()); double d0 = target.getX() - mob.getX(); double d1 = target.getY(1.0D / 3.0D) - arrow.getY(); diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/ShootFireballsBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/ShootFireballsBehavior.java index 257089e2..fd05b277 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/ShootFireballsBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/ShootFireballsBehavior.java @@ -7,6 +7,7 @@ import com.mcmoddev.golems.entity.IExtraGolem; import com.mcmoddev.golems.entity.goal.MoveToItemGoal; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -33,7 +34,7 @@ @Immutable public class ShootFireballsBehavior extends AbstractShootBehavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> shootCodecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> shootCodecStart(instance) .apply(instance, ShootFireballsBehavior::new)); public ShootFireballsBehavior(MinMaxBounds.Ints variant, TooltipPredicate tooltipPredicate, boolean consume, int attackInterval) { @@ -43,7 +44,7 @@ public ShootFireballsBehavior(MinMaxBounds.Ints variant, TooltipPredicate toolti //// GETTERS //// @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.SHOOT_FIREBALLS.get(); } @@ -72,7 +73,7 @@ protected boolean performRangedAttack(IExtraGolem entity, LivingEntity target, f return false; } // create fireball - SmallFireball fireball = new SmallFireball(mob.level(), mob, 0, 0, 0); + SmallFireball fireball = new SmallFireball(mob.level(), mob, new Vec3(0, 0, 0)); fireball.setPos(mob.getX(), mob.getY(0.6F), mob.getZ()); // determine position and distance final double targetY = target.getEyeY() - 1.1D; diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/ShootShulkerBulletsBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/ShootShulkerBulletsBehavior.java index 27266f4c..5c5b547b 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/ShootShulkerBulletsBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/ShootShulkerBulletsBehavior.java @@ -7,6 +7,7 @@ import com.mcmoddev.golems.entity.IExtraGolem; import com.mcmoddev.golems.entity.goal.MoveToItemGoal; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -35,7 +36,7 @@ @Immutable public class ShootShulkerBulletsBehavior extends AbstractShootBehavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(Codec.intRange(1, 100).optionalFieldOf("attack_interval", 30).forGetter(AbstractShootBehavior::getAttackInterval)) .apply(instance, ShootShulkerBulletsBehavior::new)); @@ -47,7 +48,7 @@ public ShootShulkerBulletsBehavior(MinMaxBounds.Ints variant, TooltipPredicate t //// GETTERS //// @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.SHOOT_SHULKER_BULLETS.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/ShootSnowballsBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/ShootSnowballsBehavior.java index eac73322..3ca5eae4 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/ShootSnowballsBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/ShootSnowballsBehavior.java @@ -7,6 +7,7 @@ import com.mcmoddev.golems.entity.IExtraGolem; import com.mcmoddev.golems.entity.goal.MoveToItemGoal; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -32,7 +33,7 @@ @Immutable public class ShootSnowballsBehavior extends AbstractShootBehavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> shootCodecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> shootCodecStart(instance) .apply(instance, ShootSnowballsBehavior::new)); public ShootSnowballsBehavior(MinMaxBounds.Ints variant, TooltipPredicate tooltipPredicate, boolean consume, int attackInterval) { @@ -42,7 +43,7 @@ public ShootSnowballsBehavior(MinMaxBounds.Ints variant, TooltipPredicate toolti //// GETTERS //// @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.SHOOT_SNOWBALLS.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/SplitBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/SplitBehavior.java index 912e9e3f..c4aae4c5 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/SplitBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/SplitBehavior.java @@ -6,6 +6,7 @@ import com.mcmoddev.golems.entity.GolemBase; import com.mcmoddev.golems.entity.IExtraGolem; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -24,7 +25,7 @@ public class SplitBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(Codec.intRange(1, 255).optionalFieldOf("children", 2).forGetter(SplitBehavior::getChildren)) .apply(instance, SplitBehavior::new)); @@ -43,7 +44,7 @@ public int getChildren() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.SPLIT.get(); } @@ -80,7 +81,7 @@ protected Collection attemptAddChildren(final IExtraGolem entity, fin mob.setInvulnerable(mob.isInvulnerable()); // spawn the mob serverLevel.addFreshEntityWithPassengers(child); - child.finalizeSpawn(serverLevel, diff, MobSpawnType.MOB_SUMMONED, null, null); + child.finalizeSpawn(serverLevel, diff, MobSpawnType.MOB_SUMMONED, null); // add to the list children.add(child); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/SummonBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/SummonBehavior.java index b152a6bb..7fc8b21a 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/SummonBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/SummonBehavior.java @@ -13,6 +13,7 @@ import com.mcmoddev.golems.util.PredicateUtils; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -31,8 +32,8 @@ import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.NeutralMob; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.event.EventHooks; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @@ -47,10 +48,10 @@ @Immutable public class SummonBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( EGCodecUtils.MIN_MAX_INTS_CODEC.optionalFieldOf("variant", MinMaxBounds.Ints.ANY).forGetter(Behavior::getVariantBounds), TooltipPredicate.CODEC.optionalFieldOf("tooltip", TooltipPredicate.NORMAL).forGetter(Behavior::getTooltipPredicate), - ForgeRegistries.ENTITY_TYPES.getCodec().fieldOf("entity").forGetter(SummonBehavior::getEntity), + BuiltInRegistries.ENTITY_TYPE.byNameCodec().fieldOf("entity").forGetter(SummonBehavior::getEntity), Codec.STRING.optionalFieldOf("display_name").forGetter(o -> Optional.ofNullable(o.displayNameKey)), Codec.STRING.optionalFieldOf("nbt", "{}").forGetter(SummonBehavior::getNbt), Codec.intRange(0, 255).optionalFieldOf("amount", 1).forGetter(SummonBehavior::getAmount), @@ -99,7 +100,7 @@ public SummonBehavior(MinMaxBounds.Ints variant, TooltipPredicate tooltipPredica CompoundTag tag; try { tag = TagParser.parseTag(this.nbt); - tag.putString("id", ForgeRegistries.ENTITY_TYPES.getKey(this.entity).toString()); + tag.putString("id", BuiltInRegistries.ENTITY_TYPE.getKey(this.entity).toString()); } catch (CommandSyntaxException e) { ExtraGolems.LOGGER.error(this.getClass().getSimpleName() + " failed to parse NBT from '" + this.nbt + "'"); tag = new CompoundTag(); @@ -151,7 +152,7 @@ public double getChance() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.SUMMON.get(); } @@ -243,7 +244,7 @@ protected boolean summonEntity(final GolemBase self) { level.addFreshEntityWithPassengers(e); // post process if(e instanceof Mob mob) { - ForgeEventFactory.onFinalizeSpawn(mob, level, level.getCurrentDifficultyAt(BlockPos.containing(pos)), MobSpawnType.MOB_SUMMONED, null, null); + EventHooks.finalizeMobSpawn(mob, level, level.getCurrentDifficultyAt(BlockPos.containing(pos)), MobSpawnType.MOB_SUMMONED, null); mob.setTarget(target); } if(target != null && e instanceof NeutralMob mob) { diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/TeleportBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/TeleportBehavior.java index 4cab7bf7..e497bbb1 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/TeleportBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/TeleportBehavior.java @@ -5,6 +5,7 @@ import com.mcmoddev.golems.data.behavior.util.TooltipPredicate; import com.mcmoddev.golems.entity.IExtraGolem; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -17,8 +18,8 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.EntityTeleportEvent; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.entity.EntityTeleportEvent; import javax.annotation.concurrent.Immutable; import java.util.List; @@ -31,7 +32,7 @@ @Immutable public class TeleportBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(Codec.doubleRange(0.0D, 128.0D).optionalFieldOf("radius", 0.0D).forGetter(TeleportBehavior::getRadius)) .and(Codec.doubleRange(0.0D, 1.0D).optionalFieldOf("idle_chance", 0.0D).forGetter(TeleportBehavior::getChanceOnIdle)) .and(Codec.doubleRange(0.0D, 1.0D).optionalFieldOf("hurt_chance", 0.0D).forGetter(TeleportBehavior::getChanceOnHurt)) @@ -74,7 +75,7 @@ public double getChanceOnTarget() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.TELEPORT.get(); } @@ -108,7 +109,7 @@ public void onTick(IExtraGolem entity) { @Override public void onActuallyHurt(final IExtraGolem entity, final DamageSource source, final float amount) { final Mob mob = entity.asMob(); - if (source.isIndirect()) { + if (source.getEntity() != source.getDirectEntity()) { // if damage was projectile, remember the indirect entity and set as target if (source.getEntity() instanceof LivingEntity) { LivingEntity target = (LivingEntity) source.getEntity(); @@ -187,7 +188,7 @@ private boolean attemptTeleportTo(final Mob mob, final double x, final double y, // create vent final EntityTeleportEvent event = new EntityTeleportEvent.EnderEntity(mob, x, y, z); // fire event - if (MinecraftForge.EVENT_BUS.post(event)) { + if (NeoForge.EVENT_BUS.post(event).isCanceled()) { return false; } Vec3 target = event.getTarget(); diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/TemptBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/TemptBehavior.java index 47a51ace..97b60654 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/TemptBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/TemptBehavior.java @@ -7,6 +7,7 @@ import com.mcmoddev.golems.util.DeferredHolderSet; import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -20,7 +21,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; import javax.annotation.concurrent.Immutable; import java.util.List; @@ -33,8 +34,8 @@ @Immutable public class TemptBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) - .and(DeferredHolderSet.codec(ForgeRegistries.ITEMS.getRegistryKey()).fieldOf("item").forGetter(TemptBehavior::getItems)) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) + .and(DeferredHolderSet.codec(BuiltInRegistries.ITEM.key()).fieldOf("item").forGetter(TemptBehavior::getItems)) .and(Codec.STRING.optionalFieldOf("display_name", "").forGetter(TemptBehavior::getDisplayNameKey)) .apply(instance, TemptBehavior::new)); @@ -59,7 +60,7 @@ public String getDisplayNameKey() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.TEMPT.get(); } @@ -70,7 +71,7 @@ public void onRegisterGoals(final IExtraGolem entity) { // TODO adjust tempt goal to account for entity variant // resolve holder set and convert to ingredient final HolderSet holderSet = items.get(BuiltInRegistries.ITEM); - Ingredient ingredient = holderSet.unwrap().map(Ingredient::of, list -> Ingredient.of(list.stream().map(Holder::get).toArray(Item[]::new))); + Ingredient ingredient = holderSet.unwrap().map(Ingredient::of, list -> Ingredient.of(list.stream().map(Holder::value).toArray(Item[]::new))); entity.asMob().goalSelector.addGoal(1, new TemptGoal(entity.asMob(), 0.75D, ingredient, false)); } @@ -86,7 +87,7 @@ public List createDescriptions(RegistryAccess registryAccess) { name = Component.literal("#" + value.left().get().location().toString()).withStyle(ChatFormatting.DARK_GRAY); } else if(value.right().isPresent()) { // create name from first item - Item randomItem = value.right().get().get(0).get(); + Item randomItem = value.right().get().get(0).value(); name = randomItem.getDescription().copy().withStyle(ChatFormatting.LIGHT_PURPLE); } else { // create empty name diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/UpdateGolemBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/UpdateGolemBehavior.java index cefb2111..17a88b86 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/UpdateGolemBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/UpdateGolemBehavior.java @@ -12,6 +12,7 @@ import com.mcmoddev.golems.util.EGCodecUtils; import com.mcmoddev.golems.util.PredicateUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -37,7 +38,7 @@ @Immutable public class UpdateGolemBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(UpdateTarget.CODEC.fieldOf("apply").forGetter(UpdateGolemBehavior::getApply)) .and(TriggerType.CODEC.optionalFieldOf("trigger", TriggerType.TICK).forGetter(UpdateGolemBehavior::getTrigger)) .and(EGCodecUtils.listOrElementCodec(GolemPredicate.CODEC).optionalFieldOf("predicate", ImmutableList.of(GolemPredicate.ALWAYS)).forGetter(UpdateGolemBehavior::getPredicates)) @@ -83,7 +84,7 @@ public double getChance() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.UPDATE_GOLEM.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/UseFuelBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/UseFuelBehavior.java index a3734beb..e165aed2 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/UseFuelBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/UseFuelBehavior.java @@ -9,6 +9,7 @@ import com.mcmoddev.golems.entity.goal.LookAtWhenActiveGoal; import com.mcmoddev.golems.entity.goal.LookRandomlyWhenActiveGoal; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -30,7 +31,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.RecipeType; -import net.minecraftforge.common.ForgeHooks; +import net.neoforged.neoforge.common.extensions.IItemExtension; import javax.annotation.concurrent.Immutable; import java.util.List; @@ -44,7 +45,7 @@ @Immutable public class UseFuelBehavior extends Behavior { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .and(Codec.intRange(1, Integer.MAX_VALUE).fieldOf("max_fuel").forGetter(UseFuelBehavior::getMaxFuel)) .and(Codec.intRange(1, Integer.MAX_VALUE).fieldOf("burn_time").forGetter(UseFuelBehavior::getBurnTime)) .apply(instance, UseFuelBehavior::new)); @@ -71,7 +72,7 @@ public int getBurnTime() { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.USE_FUEL.get(); } @@ -121,12 +122,12 @@ public List createDescriptions(RegistryAccess registryAccess) { @Override public void onWriteData(final IExtraGolem entity, final CompoundTag tag) { - entity.getBehaviorData(UseFuelBehaviorData.class).ifPresent(helper -> tag.put(KEY_FUEL_HELPER, helper.serializeNBT())); + entity.getBehaviorData(UseFuelBehaviorData.class).ifPresent(helper -> tag.put(KEY_FUEL_HELPER, helper.serializeNBT(((net.minecraft.world.entity.Entity)entity).level().registryAccess()))); } @Override public void onReadData(final IExtraGolem entity, final CompoundTag tag) { - entity.getBehaviorData(UseFuelBehaviorData.class).ifPresent(helper -> helper.deserializeNBT(tag.getCompound(KEY_FUEL_HELPER))); + entity.getBehaviorData(UseFuelBehaviorData.class).ifPresent(helper -> helper.deserializeNBT(((net.minecraft.world.entity.Entity)entity).level().registryAccess(), tag.getCompound(KEY_FUEL_HELPER))); } //// HELPER METHODS //// @@ -148,7 +149,7 @@ protected boolean processInteractFuel(final IExtraGolem entity, final Player pla final UseFuelBehaviorData data = oData.get(); ItemStack stack = player.getItemInHand(hand); final Mob mob = entity.asMob(); - int burnTime = ForgeHooks.getBurnTime(stack, RecipeType.SMELTING) * (player.isCrouching() ? stack.getCount() : 1); + int burnTime = stack.getBurnTime(RecipeType.SMELTING) * (player.isCrouching() ? stack.getCount() : 1); if (burnTime > 0 && (data.getFuel() + burnTime) <= getMaxFuel()) { if (player.isCrouching()) { // take entire ItemStack diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/WearBannerBehavior.java b/src/main/java/com/mcmoddev/golems/data/behavior/WearBannerBehavior.java index 64797b0f..2615e07a 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/WearBannerBehavior.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/WearBannerBehavior.java @@ -5,6 +5,7 @@ import com.mcmoddev.golems.entity.GolemBase; import com.mcmoddev.golems.entity.IExtraGolem; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.tags.ItemTags; @@ -25,7 +26,7 @@ public class WearBannerBehavior extends Behavior { public static final WearBannerBehavior ANY = new WearBannerBehavior(MinMaxBounds.Ints.ANY, TooltipPredicate.HIDDEN); - public static final Codec CODEC = RecordCodecBuilder.create(instance -> codecStart(instance) + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> codecStart(instance) .apply(instance, WearBannerBehavior::new)); public WearBannerBehavior(MinMaxBounds.Ints variant, TooltipPredicate tooltipPredicate) { @@ -35,7 +36,7 @@ public WearBannerBehavior(MinMaxBounds.Ints variant, TooltipPredicate tooltipPre //// GETTERS //// @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.BehaviorReg.WEAR_BANNER.get(); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/data/ExplodeBehaviorData.java b/src/main/java/com/mcmoddev/golems/data/behavior/data/ExplodeBehaviorData.java index 322d94eb..91e670ed 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/data/ExplodeBehaviorData.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/data/ExplodeBehaviorData.java @@ -156,7 +156,7 @@ public float getFusePercentage() { private static final String KEY_FUSE_LIT = "FuseLit"; @Override - public CompoundTag serializeNBT() { + public CompoundTag serializeNBT(net.minecraft.core.HolderLookup.Provider provider) { final CompoundTag tag = new CompoundTag(); tag.putInt(KEY_FUSE, fuse); tag.putBoolean(KEY_FUSE_LIT, fuseLit); @@ -164,7 +164,7 @@ public CompoundTag serializeNBT() { } @Override - public void deserializeNBT(CompoundTag tag) { + public void deserializeNBT(net.minecraft.core.HolderLookup.Provider provider, CompoundTag tag) { this.fuse = tag.getInt(KEY_FUSE); this.fuseLit = tag.getBoolean(KEY_FUSE_LIT); } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/data/IBehaviorData.java b/src/main/java/com/mcmoddev/golems/data/behavior/data/IBehaviorData.java index e3de0d33..b91916c8 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/data/IBehaviorData.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/data/IBehaviorData.java @@ -2,7 +2,7 @@ import com.mcmoddev.golems.entity.IExtraGolem; import net.minecraft.nbt.CompoundTag; -import net.minecraftforge.common.util.INBTSerializable; +import net.neoforged.neoforge.common.util.INBTSerializable; /** * {@link com.mcmoddev.golems.data.behavior.Behavior}s can attach this to an diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/data/ShootBehaviorData.java b/src/main/java/com/mcmoddev/golems/data/behavior/data/ShootBehaviorData.java index 937c177b..c76a39fd 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/data/ShootBehaviorData.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/data/ShootBehaviorData.java @@ -44,12 +44,12 @@ public int getAmmo() { //// NBT //// @Override - public CompoundTag serializeNBT() { + public CompoundTag serializeNBT(net.minecraft.core.HolderLookup.Provider provider) { return new CompoundTag(); } @Override - public void deserializeNBT(CompoundTag tag) { + public void deserializeNBT(net.minecraft.core.HolderLookup.Provider provider, CompoundTag tag) { // do nothing } } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/data/UseFuelBehaviorData.java b/src/main/java/com/mcmoddev/golems/data/behavior/data/UseFuelBehaviorData.java index 27686d28..bd325f76 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/data/UseFuelBehaviorData.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/data/UseFuelBehaviorData.java @@ -72,14 +72,14 @@ public int getFuel() { private static final String KEY_FUEL = "Fuel"; @Override - public CompoundTag serializeNBT() { + public CompoundTag serializeNBT(net.minecraft.core.HolderLookup.Provider provider) { final CompoundTag tag = new CompoundTag(); tag.putInt(KEY_FUEL, entity.getFuel()); return tag; } @Override - public void deserializeNBT(CompoundTag tag) { + public void deserializeNBT(net.minecraft.core.HolderLookup.Provider provider, CompoundTag tag) { entity.setFuel(tag.getInt(KEY_FUEL)); } } diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/util/AoeShape.java b/src/main/java/com/mcmoddev/golems/data/behavior/util/AoeShape.java index 84f15629..ba02b2a6 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/util/AoeShape.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/util/AoeShape.java @@ -2,6 +2,7 @@ import com.google.common.collect.Iterables; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.util.StringRepresentable; import net.minecraft.world.phys.Vec3; diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/util/GolemPredicate.java b/src/main/java/com/mcmoddev/golems/data/behavior/util/GolemPredicate.java index 80a7bb20..6e088be3 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/util/GolemPredicate.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/util/GolemPredicate.java @@ -5,6 +5,7 @@ import com.mcmoddev.golems.data.behavior.data.UseFuelBehaviorData; import com.mcmoddev.golems.entity.IExtraGolem; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.util.StringRepresentable; import java.util.function.Predicate; diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/util/TargetType.java b/src/main/java/com/mcmoddev/golems/data/behavior/util/TargetType.java index 6b5271c3..ec125902 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/util/TargetType.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/util/TargetType.java @@ -1,6 +1,7 @@ package com.mcmoddev.golems.data.behavior.util; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.util.StringRepresentable; public enum TargetType implements StringRepresentable { diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/util/TargetedMobEffects.java b/src/main/java/com/mcmoddev/golems/data/behavior/util/TargetedMobEffects.java index e1639dfb..9aa4751f 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/util/TargetedMobEffects.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/util/TargetedMobEffects.java @@ -3,6 +3,7 @@ import com.mcmoddev.golems.entity.IExtraGolem; import com.mcmoddev.golems.util.EGCodecUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.Util; import net.minecraft.util.valueproviders.ConstantInt; diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/util/TooltipPredicate.java b/src/main/java/com/mcmoddev/golems/data/behavior/util/TooltipPredicate.java index 01b5f82c..dd537ab4 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/util/TooltipPredicate.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/util/TooltipPredicate.java @@ -1,6 +1,7 @@ package com.mcmoddev.golems.data.behavior.util; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.util.StringRepresentable; import net.minecraft.world.item.TooltipFlag; diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/util/TriggerType.java b/src/main/java/com/mcmoddev/golems/data/behavior/util/TriggerType.java index fe5ec20b..cf6d176e 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/util/TriggerType.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/util/TriggerType.java @@ -1,6 +1,7 @@ package com.mcmoddev.golems.data.behavior.util; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.util.StringRepresentable; public enum TriggerType implements StringRepresentable { diff --git a/src/main/java/com/mcmoddev/golems/data/behavior/util/UpdateTarget.java b/src/main/java/com/mcmoddev/golems/data/behavior/util/UpdateTarget.java index 9ebe25d6..1425502f 100644 --- a/src/main/java/com/mcmoddev/golems/data/behavior/util/UpdateTarget.java +++ b/src/main/java/com/mcmoddev/golems/data/behavior/util/UpdateTarget.java @@ -2,6 +2,7 @@ import com.mcmoddev.golems.entity.IExtraGolem; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.valueproviders.IntProvider; diff --git a/src/main/java/com/mcmoddev/golems/data/golem/Attributes.java b/src/main/java/com/mcmoddev/golems/data/golem/Attributes.java index 24cb7ba8..fb112c44 100644 --- a/src/main/java/com/mcmoddev/golems/data/golem/Attributes.java +++ b/src/main/java/com/mcmoddev/golems/data/golem/Attributes.java @@ -25,7 +25,7 @@ import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.block.SoundType; -import net.minecraft.world.level.pathfinder.BlockPathTypes; +import net.minecraft.world.level.pathfinder.PathType; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @@ -82,7 +82,7 @@ public class Attributes { private final @Nullable Double knockbackResistance; private final @Nullable Double armor; private final @Nullable Double attackKnockback; - private final Supplier> attributeBaseValues = Suppliers.memoize(this::createAttributeMap); + private final Supplier, Double>> attributeBaseValues = Suppliers.memoize(this::createAttributeMap); private final @Nullable DeferredHolderSet potionIgnore; private final @Nullable DeferredHolderSet damageImmune; @@ -132,8 +132,8 @@ private Attributes(Optional health, Optional attack, Optional createAttributeMap() { - return ImmutableMap.builder() + private Map, Double> createAttributeMap() { + return ImmutableMap., Double>builder() .put(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH, this.getHealth()) .put(net.minecraft.world.entity.ai.attributes.Attributes.MOVEMENT_SPEED, this.getSpeed()) .put(net.minecraft.world.entity.ai.attributes.Attributes.KNOCKBACK_RESISTANCE, this.getKnockbackResistance()) @@ -143,7 +143,7 @@ private Map createAttributeMap() { .build(); } - public Map getAttributeMap() { + public Map, Double> getAttributeMap() { return this.attributeBaseValues.get(); } @@ -292,7 +292,7 @@ public SoundType getSoundType() { //// HELPER METHODS //// /** - * Updates {@link PathfinderMob#setPathfindingMalus(BlockPathTypes, float)} + * Updates {@link PathfinderMob#setPathfindingMalus(PathType, float)} * values based on the attributes * @param mob the entity */ @@ -300,19 +300,19 @@ public void updatePathfinding(final PathfinderMob mob) { final RegistryAccess registryAccess = mob.level().registryAccess(); // water damage if(isWeakTo(registryAccess, ImmutableSet.of(DamageTypes.DROWN))) { - mob.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); + mob.setPathfindingMalus(PathType.WATER, -1.0F); } else { - mob.setPathfindingMalus(BlockPathTypes.WATER, 8.0F); + mob.setPathfindingMalus(PathType.WATER, 8.0F); } // fire damage if(isInvulnerable() || isImmuneTo(registryAccess, ImmutableSet.of(DamageTypes.IN_FIRE, DamageTypes.ON_FIRE))) { - mob.setPathfindingMalus(BlockPathTypes.LAVA, 8.0F); - mob.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, 0.0F); - mob.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, 0.0F); + mob.setPathfindingMalus(PathType.LAVA, 8.0F); + mob.setPathfindingMalus(PathType.DAMAGE_FIRE, 0.0F); + mob.setPathfindingMalus(PathType.DANGER_FIRE, 0.0F); } else { - mob.setPathfindingMalus(BlockPathTypes.LAVA, -1.0F); - mob.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, -1.0F); - mob.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, -1.0F); + mob.setPathfindingMalus(PathType.LAVA, -1.0F); + mob.setPathfindingMalus(PathType.DAMAGE_FIRE, -1.0F); + mob.setPathfindingMalus(PathType.DANGER_FIRE, -1.0F); } } diff --git a/src/main/java/com/mcmoddev/golems/data/golem/BuildingBlocks.java b/src/main/java/com/mcmoddev/golems/data/golem/BuildingBlocks.java index 2ea1e08f..b229f913 100644 --- a/src/main/java/com/mcmoddev/golems/data/golem/BuildingBlocks.java +++ b/src/main/java/com/mcmoddev/golems/data/golem/BuildingBlocks.java @@ -7,7 +7,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.level.block.Block; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.HolderSet; import javax.annotation.concurrent.Immutable; import java.util.ArrayList; @@ -39,9 +40,9 @@ public BuildingBlocks(List list) { // parse list final ImmutableList.Builder> tagMapBuilder = ImmutableList.builder(); final ImmutableList.Builder blockMapBuilder = ImmutableList.builder(); - for(ResourcePair entry : list) { - if(entry.flag()) { - tagMapBuilder.add(ForgeRegistries.BLOCKS.tags().createTagKey(entry.resource())); + for (ResourcePair entry : list) { + if (entry.flag()) { + tagMapBuilder.add(TagKey.create(BuiltInRegistries.BLOCK.key(), entry.resource())); } else { blockMapBuilder.add(entry.resource()); } @@ -54,17 +55,19 @@ public BuildingBlocks(List list) { //// SUPPLIER //// public Collection get() { - if(this.cachedBlocks.isEmpty() && !(this.tagList.isEmpty() && this.blockList.isEmpty())) { + if (this.cachedBlocks.isEmpty() && !(this.tagList.isEmpty() && this.blockList.isEmpty())) { // add blocks by ID - for(ResourceLocation id : blockList) { - if(ForgeRegistries.BLOCKS.containsKey(id)) { - this.cachedBlocks.add(ForgeRegistries.BLOCKS.getValue(id)); + for (ResourceLocation id : blockList) { + if (BuiltInRegistries.BLOCK.containsKey(id)) { + this.cachedBlocks.add(BuiltInRegistries.BLOCK.get(id)); } } - // add blocks by tag - for(TagKey tagKey : tagList) { - for(Block block : ForgeRegistries.BLOCKS.tags().getTag(tagKey)) { - this.cachedBlocks.add(block); + // add blocks by tag - iterate registered blocks and check tag membership + for (TagKey tagKey : tagList) { + for (Block block : BuiltInRegistries.BLOCK) { + if (block.builtInRegistryHolder().is(tagKey)) { + this.cachedBlocks.add(block); + } } } } @@ -79,8 +82,18 @@ public Collection get() { */ @Override public boolean test(final Block block) { - final Collection blocks = this.get(); - return !blocks.isEmpty() && blocks.contains(block); + // check if block is in block list + ResourceLocation blockId = BuiltInRegistries.BLOCK.getKey(block); + if (blockList.contains(blockId)) { + return true; + } + // check if block belongs to any tag + for (TagKey tagKey : tagList) { + if (block.builtInRegistryHolder().is(tagKey)) { + return true; + } + } + return false; } //// GETTERS //// @@ -101,8 +114,10 @@ public List getBlockList() { @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof BuildingBlocks)) return false; + if (this == o) + return true; + if (!(o instanceof BuildingBlocks)) + return false; BuildingBlocks that = (BuildingBlocks) o; return list.equals(that.list); } @@ -112,7 +127,6 @@ public int hashCode() { return Objects.hash(list); } - //// CLASSES //// public static class Builder { diff --git a/src/main/java/com/mcmoddev/golems/data/golem/Golem.java b/src/main/java/com/mcmoddev/golems/data/golem/Golem.java index 7a601d8b..351b1358 100644 --- a/src/main/java/com/mcmoddev/golems/data/golem/Golem.java +++ b/src/main/java/com/mcmoddev/golems/data/golem/Golem.java @@ -10,6 +10,7 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleTypes; @@ -29,8 +30,10 @@ @Immutable public class Golem { - public static Golem EMPTY = new Golem(Optional.empty(), Optional.of(Attributes.EMPTY), GolemBuildingBlocks.EMPTY, RepairItems.EMPTY, 1, true, - Optional.empty(), Either.right(LayerList.EMPTY), Either.right(BehaviorList.EMPTY), Optional.empty(), ImmutableList.of()); + public static Golem EMPTY = new Golem(Optional.empty(), Optional.of(Attributes.EMPTY), GolemBuildingBlocks.EMPTY, + RepairItems.EMPTY, 1, true, + Optional.empty(), Either.right(LayerList.EMPTY), Either.right(BehaviorList.EMPTY), Optional.empty(), + ImmutableList.of()); public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( ResourceLocation.CODEC.optionalFieldOf("parent").forGetter(o -> Optional.ofNullable(o.parent)), @@ -40,11 +43,14 @@ public class Golem { Codec.intRange(1, 127).optionalFieldOf("variants", 1).forGetter(Golem::getVariants), Codec.BOOL.optionalFieldOf("hidden", false).forGetter(Golem::isHidden), ParticleTypes.CODEC.optionalFieldOf("particle").forGetter(o -> Optional.ofNullable(o.particle)), - Codec.either(ResourceLocation.CODEC, LayerList.CODEC).optionalFieldOf("model", Either.right(LayerList.EMPTY)).forGetter(Golem::getLayers), - Codec.either(ResourceLocation.CODEC, BehaviorList.CODEC).optionalFieldOf("brain", Either.right(BehaviorList.EMPTY)).forGetter(Golem::getBehaviors), + Codec.either(ResourceLocation.CODEC, LayerList.CODEC) + .optionalFieldOf("model", Either.right(LayerList.EMPTY)).forGetter(Golem::getLayers), + Codec.either(ResourceLocation.CODEC, BehaviorList.CODEC) + .optionalFieldOf("brain", Either.right(BehaviorList.EMPTY)).forGetter(Golem::getBehaviors), ResourceLocation.CODEC.optionalFieldOf("group").forGetter(o -> Optional.ofNullable(o.group)), - EGCodecUtils.listOrElementCodec(Codec.STRING).optionalFieldOf("description", ImmutableList.of()).forGetter(o -> o.rawDescriptions) - ).apply(instance, Golem::new)); + EGCodecUtils.listOrElementCodec(Codec.STRING).optionalFieldOf("description", ImmutableList.of()) + .forGetter(o -> o.rawDescriptions)) + .apply(instance, Golem::new)); /** The ID of the parent Golem to copy settings, optional **/ private final @Nullable ResourceLocation parent; @@ -72,14 +78,15 @@ public class Golem { private final List descriptions; public Golem(Optional parent, Optional attributes, - GolemBuildingBlocks blocks, RepairItems repairItems, - int variants, boolean hidden, Optional particle, - Either layers, Either behaviors, - Optional group, List rawDescriptions) { + GolemBuildingBlocks blocks, RepairItems repairItems, + int variants, boolean hidden, Optional particle, + Either layers, Either behaviors, + Optional group, List rawDescriptions) { this.parent = parent.orElse(null); this.attributes = attributes.orElse(null); - if(parent.isEmpty() && attributes.isEmpty()) { - throw new IllegalArgumentException("Failed to parse Golem because both 'parent' and 'attributes' are undefined!"); + if (parent.isEmpty() && attributes.isEmpty()) { + throw new IllegalArgumentException( + "Failed to parse Golem because both 'parent' and 'attributes' are undefined!"); } this.blocks = blocks; this.repairItems = repairItems; @@ -95,13 +102,19 @@ public Golem(Optional parent, Optional attributes, //// GETTERS //// - /** @return the ID of the parent for the {@link Golem}, may be null only when {@link #getAttributes()} is defined **/ + /** + * @return the ID of the parent for the {@link Golem}, may be null only when + * {@link #getAttributes()} is defined + **/ @Nullable public ResourceLocation getParent() { return parent; } - /** @return the {@link Attributes} for the {@link Golem}, may be null only when {@link #getParent()} is defined **/ + /** + * @return the {@link Attributes} for the {@link Golem}, may be null only when + * {@link #getParent()} is defined + **/ @Nullable public Attributes getAttributes() { return attributes; @@ -145,8 +158,9 @@ public Either getLayers() { * @param registryAccess the registry access * @return the resolved {@link LayerList} from the registry or direct definition */ - public LayerList getLayers(final RegistryAccess registryAccess) { - return layers.map(id -> registryAccess.registryOrThrow(EGRegistry.Keys.MODEL).get(id), Function.identity()); + public LayerList getLayers(final HolderLookup.Provider registryAccess) { + return layers.map(id -> registryAccess.lookupOrThrow(EGRegistry.Keys.MODEL) + .get(ResourceKey.create(EGRegistry.Keys.MODEL, id)).orElseThrow().value(), Function.identity()); } /** @return Either the ID or direct definition of the {@link BehaviorList} **/ @@ -156,19 +170,29 @@ public Either getBehaviors() { /** * @param registryAccess the registry access - * @return the resolved {@link BehaviorList} from the registry or direct definition + * @return the resolved {@link BehaviorList} from the registry or direct + * definition */ - public BehaviorList getBehaviors(final RegistryAccess registryAccess) { - return behaviors.map(id -> registryAccess.registryOrThrow(EGRegistry.Keys.BEHAVIOR_LIST).get(id), Function.identity()); + public BehaviorList getBehaviors(final HolderLookup.Provider registryAccess) { + return behaviors.map( + id -> registryAccess.lookupOrThrow(EGRegistry.Keys.BEHAVIOR_LIST) + .get(ResourceKey.create(EGRegistry.Keys.BEHAVIOR_LIST, id)).orElseThrow().value(), + Function.identity()); } - /** @return the group ID of the {@link Golem}, used by the Guide Book UI. May be null. **/ + /** + * @return the group ID of the {@link Golem}, used by the Guide Book UI. May be + * null. + **/ @Nullable public ResourceLocation getGroup() { return group; } - /** @return A list of text components to append to the description list, may be empty **/ + /** + * @return A list of text components to append to the description list, may be + * empty + **/ public List getDescriptions() { return descriptions; } @@ -176,7 +200,7 @@ public List getDescriptions() { //// BUILDER //// public static class Builder { - private final RegistryAccess registryAccess; + private final HolderLookup.Provider registryAccess; private ResourceLocation parent; private Attributes.Builder attributes; private GolemBuildingBlocks.Builder blocks; @@ -191,7 +215,7 @@ public static class Builder { //// CONSTRUCTOR //// - private Builder(final RegistryAccess registryAccess) { + private Builder(final HolderLookup.Provider registryAccess) { this.registryAccess = registryAccess; this.blocks = new GolemBuildingBlocks.Builder(); this.attributes = new Attributes.Builder(); @@ -201,15 +225,15 @@ private Builder(final RegistryAccess registryAccess) { this.descriptions = new ArrayList<>(); } - public static Builder from(final RegistryAccess registryAccess, final Golem golem) { + public static Builder from(final HolderLookup.Provider registryAccess, final Golem golem) { final Builder builder; final Golem parent; // check if the golem has a parent final boolean hasParent = golem.getParent() != null; - if(hasParent) { + if (hasParent) { // load parent recursively final ResourceKey parentId = ResourceKey.create(EGRegistry.Keys.GOLEM, golem.getParent()); - parent = registryAccess.registryOrThrow(EGRegistry.Keys.GOLEM).getOrThrow(parentId); + parent = registryAccess.lookupOrThrow(EGRegistry.Keys.GOLEM).getOrThrow(parentId).value(); // create builder from the parent recursively builder = from(registryAccess, parent); } else { @@ -218,7 +242,7 @@ public static Builder from(final RegistryAccess registryAccess, final Golem gole builder = new Golem.Builder(registryAccess); } // apply settings from parent - if(hasParent) { + if (hasParent) { builder.parent = golem.getParent(); builder.attributes(b -> b.copy(parent.getAttributes())) .blocks(new GolemBuildingBlocks.Builder(parent.getBlocks())) @@ -232,52 +256,54 @@ public static Builder from(final RegistryAccess registryAccess, final Golem gole .descriptions(parent.rawDescriptions); } // attributes (merges parent) - if(golem.getAttributes() != null) { + if (golem.getAttributes() != null) { builder.attributes(b -> b.copy(golem.getAttributes())); } // blocks (replaces parent) - if(!hasParent || !golem.getBlocks().getBlocks().isEmpty()) { + if (!hasParent || !golem.getBlocks().getBlocks().isEmpty()) { builder.blocks(b -> b.copy(golem.getBlocks())); } // repair items (replaces parent) - if(!hasParent || !golem.getRepairItems().getMap().isEmpty()) { + if (!hasParent || !golem.getRepairItems().getMap().isEmpty()) { builder.repairItems(b -> { b.clear(); b.addAll(golem.getRepairItems().getMap()); }); } // variants (replaces parent) - if(!hasParent || golem.getVariants() != parent.getVariants()) { + if (!hasParent || golem.getVariants() != parent.getVariants()) { builder.variants(golem.getVariants()); } // hidden (replaces parent) - if(!hasParent || golem.isHidden() != parent.isHidden()) { + if (!hasParent || golem.isHidden() != parent.isHidden()) { builder.hidden(golem.isHidden()); } // particle (replaces parent) - if(golem.getParticle() != null) { + if (golem.getParticle() != null) { builder.particle(golem.getParticle()); } // model (replaces parent) - if(!hasParent || !golem.getLayers(registryAccess).getLayers().isEmpty()) { + if (!hasParent || !golem.getLayers(registryAccess).getLayers().isEmpty()) { builder.layers(b -> { b.clear(); b.addAll(golem.getLayers(registryAccess).getLayers()); }); } - // behaviors (replaces parent), only when a BehaviorList ID is specified or the BehaviorList direct definition is not empty - if(!hasParent || golem.getBehaviors().left().isPresent() || (golem.getBehaviors().right().isPresent() && !golem.getBehaviors().right().get().getBehaviors().isEmpty())) { + // behaviors (replaces parent), only when a BehaviorList ID is specified or the + // BehaviorList direct definition is not empty + if (!hasParent || golem.getBehaviors().left().isPresent() || (golem.getBehaviors().right().isPresent() + && !golem.getBehaviors().right().get().getBehaviors().isEmpty())) { builder.behaviors(b -> { b.clear(); b.addAll(golem.getBehaviors(registryAccess).getBehaviors()); }); } // group (replaces parent) - if(golem.getGroup() != null) { + if (golem.getGroup() != null) { builder.group(golem.getGroup()); } // descriptions (replaces parent) - if(!golem.rawDescriptions.isEmpty()) { + if (!golem.rawDescriptions.isEmpty()) { builder.descriptions(golem.rawDescriptions); } return builder; @@ -286,7 +312,7 @@ public static Builder from(final RegistryAccess registryAccess, final Golem gole //// GETTERS //// /** @return the registry access **/ - public RegistryAccess getRegistryAccess() { + public HolderLookup.Provider getRegistryAccess() { return this.registryAccess; } @@ -303,7 +329,8 @@ public Builder attributes(final Consumer action) { /** * @param attributes the new builder to use. - * Warning: this causes previous calls to {@link #attributes(Consumer)} to be rendered useless. + * Warning: this causes previous calls to + * {@link #attributes(Consumer)} to be rendered useless. * @return the builder instance * @see #attributes(Consumer) */ @@ -323,7 +350,8 @@ public Builder blocks(final Consumer action) { /** * @param blocks the new builder to use. - * Warning: this causes previous calls to {@link #blocks(Consumer)} to be rendered useless. + * Warning: this causes previous calls to + * {@link #blocks(Consumer)} to be rendered useless. * @return the builder instance * @see #blocks(Consumer) */ @@ -343,7 +371,8 @@ public Builder repairItems(final Consumer action) { /** * @param repairItems the new builder to use. - * Warning: this causes previous calls to {@link #repairItems(Consumer)} to be rendered useless. + * Warning: this causes previous calls to + * {@link #repairItems(Consumer)} to be rendered useless. * @return the builder instance * @see #repairItems(Consumer) */ @@ -399,7 +428,8 @@ public Builder layers(final Consumer action) { /** * @param layers the new builder to use. - * Warning: this causes previous calls to {@link #layers(Consumer)} to be ignored. + * Warning: this causes previous calls to + * {@link #layers(Consumer)} to be ignored. * @return the builder instance * @see #layers(Consumer) */ @@ -419,7 +449,8 @@ public Builder behaviors(final Consumer action) { /** * @param behaviors the new builder to use. - * Warning: this causes previous calls to {@link #behaviors(Consumer)} to be ignored. + * Warning: this causes previous calls to + * {@link #behaviors(Consumer)} to be ignored. * @return the builder instance * @see #behaviors(Consumer) */ @@ -439,7 +470,8 @@ public Builder group(final ResourceLocation group) { /** * @param descriptions a new list of descriptions to use. - * Warning: this causes previous calls to {@link #descriptions(Consumer)} to be ignored. + * Warning: this causes previous calls to + * {@link #descriptions(Consumer)} to be ignored. * @return the builder instance */ public Builder descriptions(final List descriptions) { @@ -463,7 +495,8 @@ public Builder descriptions(final Consumer> action) { public Golem build() { return new Golem(Optional.ofNullable(parent), Optional.of(attributes.build()), blocks.build(), repairItems.build(), variants, hidden, Optional.ofNullable(particle), - Either.right(layers.build()), Either.right(behaviors.build()), Optional.ofNullable(group), descriptions); + Either.right(layers.build()), Either.right(behaviors.build()), Optional.ofNullable(group), + descriptions); } } } diff --git a/src/main/java/com/mcmoddev/golems/data/golem/RepairItems.java b/src/main/java/com/mcmoddev/golems/data/golem/RepairItems.java index 139c280f..9c8ef67f 100644 --- a/src/main/java/com/mcmoddev/golems/data/golem/RepairItems.java +++ b/src/main/java/com/mcmoddev/golems/data/golem/RepairItems.java @@ -7,8 +7,8 @@ import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.tags.IReverseTag; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.HolderSet; import javax.annotation.concurrent.Immutable; import java.util.HashMap; @@ -38,7 +38,7 @@ public RepairItems(Map map) { final ImmutableMap.Builder itemMapBuilder = ImmutableMap.builder(); for(Map.Entry entry : map.entrySet()) { if(entry.getKey().flag()) { - tagMapBuilder.put(ForgeRegistries.ITEMS.tags().createTagKey(entry.getKey().resource()), entry.getValue()); + tagMapBuilder.put(TagKey.create(BuiltInRegistries.ITEM.key(), entry.getKey().resource()), entry.getValue()); } else { itemMapBuilder.put(entry.getKey().resource(), entry.getValue()); } @@ -67,17 +67,14 @@ public Map getItemMap() { */ public double getRepairAmount(final ItemStack itemStack) { // resolve id - final ResourceLocation itemId = ForgeRegistries.ITEMS.getKey(itemStack.getItem()); + final ResourceLocation itemId = BuiltInRegistries.ITEM.getKey(itemStack.getItem()); if(this.itemMap.containsKey(itemId)) { return this.itemMap.get(itemId); } - // resolve reverse tag - final Optional> reverseTag = ForgeRegistries.ITEMS.tags().getReverseTag(itemStack.getItem()); - if(reverseTag.isPresent()) { - for(TagKey tagKey : reverseTag.get().getTagKeys().toList()) { - if(this.tagMap.containsKey(tagKey)) { - return this.tagMap.get(tagKey); - } + // resolve tags + for(TagKey tagKey : this.tagMap.keySet()) { + if(itemStack.is(tagKey)) { + return this.tagMap.get(tagKey); } } return 0.0D; diff --git a/src/main/java/com/mcmoddev/golems/data/model/Layer.java b/src/main/java/com/mcmoddev/golems/data/model/Layer.java index 6d292b1d..e1f87dd1 100644 --- a/src/main/java/com/mcmoddev/golems/data/model/Layer.java +++ b/src/main/java/com/mcmoddev/golems/data/model/Layer.java @@ -17,7 +17,7 @@ @Immutable public class Layer implements IVariantPredicate { - public static final Layer RAINBOW = new Layer.Builder(new ResourcePair(new ResourceLocation(ExtraGolems.MODID, "rainbow_vines"), true)).build(); + public static final Layer RAINBOW = new Layer.Builder(new ResourcePair(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "rainbow_vines"), true)).build(); public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( ResourcePair.CODEC.fieldOf("texture").forGetter(o -> o.rawTexture), @@ -44,12 +44,12 @@ public Layer(ResourcePair texture, Optional template, boolean RenderTypes renderType, MinMaxBounds.Ints variant) { this.rawTexture = texture; if(texture.flag()) { - this.texture = new ResourcePair(new ResourceLocation(texture.resource().getNamespace(), "textures/entity/golem/" + texture.resource().getPath() + ".png"), texture.flag()); + this.texture = new ResourcePair(ResourceLocation.fromNamespaceAndPath(texture.resource().getNamespace(), "textures/entity/golem/" + texture.resource().getPath() + ".png"), texture.flag()); } else { - this.texture = new ResourcePair(new ResourceLocation(texture.resource().getNamespace(), "textures/block/" + texture.resource().getPath() + ".png"), texture.flag()); + this.texture = new ResourcePair(ResourceLocation.fromNamespaceAndPath(texture.resource().getNamespace(), "textures/block/" + texture.resource().getPath() + ".png"), texture.flag()); } this.rawTemplate = template.orElse(null); - this.template = template.map(id -> new ResourceLocation(id.getNamespace(), "textures/entity/golem/" + id.getPath() + ".png")).orElse(null); + this.template = template.map(id -> ResourceLocation.fromNamespaceAndPath(id.getNamespace(), "textures/entity/golem/" + id.getPath() + ".png")).orElse(null); this.emissive = emissive; this.color = color; this.colors = Vec3.fromRGB24(color); diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/Modifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/Modifier.java index faad01e7..628d12a0 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/Modifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/Modifier.java @@ -3,7 +3,7 @@ import com.mcmoddev.golems.EGRegistry; import com.mcmoddev.golems.data.golem.Golem; import com.mojang.serialization.Codec; -import net.minecraft.util.ExtraCodecs; +import com.mojang.serialization.MapCodec; import javax.annotation.concurrent.Immutable; import java.util.function.Function; @@ -11,10 +11,11 @@ @Immutable public abstract class Modifier { - public static final Codec DIRECT_CODEC = ExtraCodecs.lazyInitializedCodec(() -> EGRegistry.GOLEM_MODIFIER_SERIALIZER_SUPPLIER.get().getCodec()) - .dispatch(Modifier::getCodec, Function.identity()); + public static final Codec DIRECT_CODEC = Codec + .lazyInitialized(() -> EGRegistry.GOLEM_MODIFIER_SERIALIZER_SUPPLIER.byNameCodec()) + .dispatch("type", Modifier::getCodec, codec -> codec); public abstract void apply(final Golem.Builder builder); - public abstract Codec getCodec(); + public abstract MapCodec getCodec(); } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/ModifierList.java b/src/main/java/com/mcmoddev/golems/data/modifier/ModifierList.java index 4729d4c4..5cdef06f 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/ModifierList.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/ModifierList.java @@ -3,6 +3,7 @@ import com.mcmoddev.golems.EGRegistry; import com.mcmoddev.golems.util.EGCodecUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.Holder; import net.minecraft.resources.RegistryFileCodec; diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/Priority.java b/src/main/java/com/mcmoddev/golems/data/modifier/Priority.java index ce7c4d86..325495d6 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/Priority.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/Priority.java @@ -10,6 +10,7 @@ public enum Priority implements StringRepresentable { LOW("low"), LOWEST("lowest"); + // Note: This should be Codec, not MapCodec, for enums public static final Codec CODEC = StringRepresentable.fromEnum(Priority::values); private String name; diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddBehaviorModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddBehaviorModifier.java index 84ce8f96..b1898a1e 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddBehaviorModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddBehaviorModifier.java @@ -9,14 +9,13 @@ import com.mcmoddev.golems.util.EGCodecUtils; import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; -import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; import java.util.List; -import java.util.Optional; /** * Adds all of the given behaviors to the {@link BehaviorList.Builder} @@ -25,12 +24,13 @@ @Immutable public class AddBehaviorModifier extends Modifier { - private static final Codec>> EITHER_CODEC = Codec.either(ResourceLocation.CODEC, EGCodecUtils.listOrElementCodec(Behavior.DIRECT_CODEC)); + private static final Codec>> EITHER_CODEC = Codec + .either(ResourceLocation.CODEC, EGCodecUtils.listOrElementCodec(Behavior.DIRECT_CODEC)); - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( EITHER_CODEC.fieldOf("behavior").forGetter(AddBehaviorModifier::getBehaviors), - Codec.BOOL.optionalFieldOf("replace", false).forGetter(AddBehaviorModifier::replace) - ).apply(instance, AddBehaviorModifier::new)); + Codec.BOOL.optionalFieldOf("replace", false).forGetter(AddBehaviorModifier::replace)) + .apply(instance, AddBehaviorModifier::new)); private final Either> behaviors; private final boolean replace; @@ -55,22 +55,25 @@ public boolean replace() { @Override public void apply(Golem.Builder builder) { builder.behaviors(b -> { - if(replace()) { + if (replace()) { b.clear(); } // add elements from getBehaviors().ifLeft(id -> { - final Registry registry = builder.getRegistryAccess().registryOrThrow(EGRegistry.Keys.BEHAVIOR_LIST); - registry.getOptional(id).ifPresentOrElse( - behaviorList -> b.addAll(behaviorList.getBehaviors()), - () -> ExtraGolems.LOGGER.error("Failed to apply AddBehaviorModifier; missing BehaviorList with ID " + id)); + final ResourceKey key = ResourceKey.create(EGRegistry.Keys.BEHAVIOR_LIST, id); + builder.getRegistryAccess().lookup(EGRegistry.Keys.BEHAVIOR_LIST) + .flatMap(registry -> registry.get(key)) + .ifPresentOrElse( + holder -> b.addAll(holder.value().getBehaviors()), + () -> ExtraGolems.LOGGER.error( + "Failed to apply AddBehaviorModifier; missing BehaviorList with ID " + id)); }); getBehaviors().ifRight(b::addAll); }); } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.ADD_BEHAVIOR.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddBlocksModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddBlocksModifier.java index c343490e..56daa750 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddBlocksModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddBlocksModifier.java @@ -8,6 +8,7 @@ import com.mcmoddev.golems.util.EGCodecUtils; import com.mcmoddev.golems.data.ResourcePair; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import javax.annotation.concurrent.Immutable; @@ -19,7 +20,7 @@ @Immutable public class AddBlocksModifier extends Modifier { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( EGCodecUtils.listOrElementCodec(ResourcePair.CODEC).fieldOf("blocks").forGetter(AddBlocksModifier::getBlocks), GolemPart.CODEC.optionalFieldOf("part", GolemPart.ALL).forGetter(AddBlocksModifier::getPart), Codec.BOOL.optionalFieldOf("replace", false).forGetter(AddBlocksModifier::replace) @@ -62,7 +63,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.ADD_BLOCKS.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddDescriptionModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddDescriptionModifier.java index db81624b..eeca0a25 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddDescriptionModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddDescriptionModifier.java @@ -5,6 +5,7 @@ import com.mcmoddev.golems.data.modifier.Modifier; import com.mcmoddev.golems.util.EGCodecUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import javax.annotation.concurrent.Immutable; @@ -16,7 +17,7 @@ @Immutable public class AddDescriptionModifier extends Modifier { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( EGCodecUtils.listOrElementCodec(Codec.STRING).fieldOf("descriptions").forGetter(AddDescriptionModifier::getDescriptions), Codec.BOOL.optionalFieldOf("replace", false).forGetter(AddDescriptionModifier::replace) ).apply(instance, AddDescriptionModifier::new)); @@ -52,7 +53,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.ADD_DESCRIPTION.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddRepairItemsModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddRepairItemsModifier.java index 27db570a..968dff71 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddRepairItemsModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AddRepairItemsModifier.java @@ -6,6 +6,7 @@ import com.mcmoddev.golems.data.modifier.Modifier; import com.mcmoddev.golems.data.ResourcePair; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import javax.annotation.concurrent.Immutable; @@ -17,7 +18,7 @@ @Immutable public class AddRepairItemsModifier extends Modifier { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( Codec.unboundedMap(ResourcePair.CODEC, Codec.DOUBLE).fieldOf("repair_items").forGetter(AddRepairItemsModifier::getRepairItems), Codec.BOOL.optionalFieldOf("replace", false).forGetter(AddRepairItemsModifier::replace) ).apply(instance, AddRepairItemsModifier::new)); @@ -53,7 +54,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.ADD_REPAIR_ITEMS.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AttributesModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AttributesModifier.java index cda49cd7..f941b955 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/AttributesModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/AttributesModifier.java @@ -4,19 +4,21 @@ import com.mcmoddev.golems.data.golem.Attributes; import com.mcmoddev.golems.data.golem.Golem; import com.mcmoddev.golems.data.modifier.Modifier; -import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import javax.annotation.concurrent.Immutable; /** - * Merges the given {@link Attributes} with the existing ones by replacing values with the ones specified here, if any + * Merges the given {@link Attributes} with the existing ones by replacing + * values with the ones specified here, if any */ @Immutable public class AttributesModifier extends Modifier { - public static final Codec CODEC = Attributes.CODEC.xmap(AttributesModifier::new, AttributesModifier::getAttributes) - .fieldOf("attributes").codec(); - + public static final MapCodec CODEC = Attributes.CODEC + .xmap(AttributesModifier::new, AttributesModifier::getAttributes) + .fieldOf("attributes"); + private final Attributes attributes; public AttributesModifier(Attributes attributes) { @@ -30,14 +32,14 @@ public Attributes getAttributes() { } //// METHODS //// - + @Override public void apply(Golem.Builder builder) { builder.attributes(b -> b.copy(getAttributes())); } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.ATTRIBUTES.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/GroupModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/GroupModifier.java index e786e600..2c9ab7e1 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/GroupModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/GroupModifier.java @@ -3,7 +3,7 @@ import com.mcmoddev.golems.EGRegistry; import com.mcmoddev.golems.data.golem.Golem; import com.mcmoddev.golems.data.modifier.Modifier; -import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.resources.ResourceLocation; import javax.annotation.concurrent.Immutable; @@ -14,9 +14,9 @@ @Immutable public class GroupModifier extends Modifier { - public static final Codec CODEC = ResourceLocation.CODEC + public static final MapCodec CODEC = ResourceLocation.CODEC .xmap(GroupModifier::new, GroupModifier::getGroup) - .fieldOf("group").codec(); + .fieldOf("group"); private final ResourceLocation group; @@ -38,7 +38,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.GROUP.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/HiddenModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/HiddenModifier.java index d387decc..0a0fda0e 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/HiddenModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/HiddenModifier.java @@ -4,6 +4,7 @@ import com.mcmoddev.golems.data.golem.Golem; import com.mcmoddev.golems.data.modifier.Modifier; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import javax.annotation.concurrent.Immutable; @@ -13,9 +14,9 @@ @Immutable public class HiddenModifier extends Modifier { - public static final Codec CODEC = Codec.BOOL + public static final MapCodec CODEC = Codec.BOOL .xmap(HiddenModifier::new, HiddenModifier::isHidden) - .fieldOf("hidden").codec(); + .fieldOf("hidden"); private final boolean hidden; @@ -37,7 +38,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.HIDDEN.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/ParticleModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/ParticleModifier.java index 1418acf7..4fdf1bfd 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/ParticleModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/ParticleModifier.java @@ -3,21 +3,21 @@ import com.mcmoddev.golems.EGRegistry; import com.mcmoddev.golems.data.golem.Golem; import com.mcmoddev.golems.data.modifier.Modifier; -import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleTypes; import javax.annotation.concurrent.Immutable; /** - * Sets the group of the golem + * Sets the particle of the golem */ @Immutable public class ParticleModifier extends Modifier { - public static final Codec CODEC = ParticleTypes.CODEC + public static final MapCodec CODEC = ParticleTypes.CODEC .xmap(ParticleModifier::new, ParticleModifier::getParticle) - .fieldOf("particle").codec(); + .fieldOf("particle"); private final ParticleOptions particle; @@ -39,7 +39,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.PARTICLE.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveBehaviorModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveBehaviorModifier.java index adf548fe..3cc74963 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveBehaviorModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveBehaviorModifier.java @@ -9,6 +9,7 @@ import com.mcmoddev.golems.util.EGCodecUtils; import com.mcmoddev.golems.util.PredicateUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.resources.ResourceLocation; @@ -28,9 +29,9 @@ @Immutable public class RemoveBehaviorModifier extends Modifier { - public static final Codec CODEC = EGCodecUtils.listOrElementCodec(RemovePredicate.CODEC) + public static final MapCodec CODEC = EGCodecUtils.listOrElementCodec(RemovePredicate.CODEC) .xmap(RemoveBehaviorModifier::new, RemoveBehaviorModifier::getPredicates) - .fieldOf("predicate").codec(); + .fieldOf("predicate"); private final List predicates; private final Predicate predicate; @@ -54,7 +55,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.REMOVE_BEHAVIOR.get(); } @@ -62,17 +63,20 @@ public Codec getCodec() { public static class RemovePredicate implements Predicate { + // Note: This needs to be Codec, not MapCodec, for use in listOrElementCodec public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( ResourceLocation.CODEC.optionalFieldOf("type").forGetter(o -> Optional.ofNullable(o.type)), - EGCodecUtils.MIN_MAX_INTS_CODEC.optionalFieldOf("variant", MinMaxBounds.Ints.ANY).forGetter(o -> o.variant), - TooltipPredicate.CODEC.optionalFieldOf("tooltip").forGetter(o -> Optional.ofNullable(o.tooltip)) - ).apply(instance, RemovePredicate::new)); + EGCodecUtils.MIN_MAX_INTS_CODEC.optionalFieldOf("variant", MinMaxBounds.Ints.ANY) + .forGetter(o -> o.variant), + TooltipPredicate.CODEC.optionalFieldOf("tooltip").forGetter(o -> Optional.ofNullable(o.tooltip))) + .apply(instance, RemovePredicate::new)); private final @Nullable ResourceLocation type; private final MinMaxBounds.Ints variant; private final @Nullable TooltipPredicate tooltip; - public RemovePredicate(Optional type, MinMaxBounds.Ints variant, Optional tooltip) { + public RemovePredicate(Optional type, MinMaxBounds.Ints variant, + Optional tooltip) { this.type = type.orElse(null); this.variant = variant; this.tooltip = tooltip.orElse(null); @@ -81,16 +85,17 @@ public RemovePredicate(Optional type, MinMaxBounds.Ints varian @Override public boolean test(Behavior behavior) { // test type - if(type != null && !this.type.equals(EGRegistry.BEHAVIOR_SERIALIZER_SUPPLIER.get().getKey(behavior.getCodec()))) { + if (type != null + && !this.type.equals(EGRegistry.BEHAVIOR_SERIALIZER_SUPPLIER.getKey(behavior.getCodec()))) { return false; } // test tooltip - if(tooltip != null && tooltip != behavior.getTooltipPredicate()) { + if (tooltip != null && tooltip != behavior.getTooltipPredicate()) { return false; } // test variant final MinMaxBounds.Ints bounds = behavior.getVariantBounds(); - if(!Objects.equals(bounds.getMin(), variant.getMin()) || !Objects.equals(bounds.getMax(), variant.getMax())) { + if (!Objects.equals(bounds.min(), variant.min()) || !Objects.equals(bounds.max(), variant.max())) { return false; } // all checks passed diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveBlocksModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveBlocksModifier.java index 9195cc83..da4e9beb 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveBlocksModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveBlocksModifier.java @@ -9,6 +9,7 @@ import com.mcmoddev.golems.util.PredicateUtils; import com.mcmoddev.golems.data.ResourcePair; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import javax.annotation.concurrent.Immutable; @@ -16,16 +17,19 @@ import java.util.function.Predicate; /** - * Removes entries in the {@link com.mcmoddev.golems.data.golem.BuildingBlocks.Builder} + * Removes entries in the + * {@link com.mcmoddev.golems.data.golem.BuildingBlocks.Builder} * that pass any of the given {@link RemovePredicate}s */ @Immutable public class RemoveBlocksModifier extends Modifier { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - EGCodecUtils.listOrElementCodec(RemovePredicate.CODEC).optionalFieldOf("predicate", ImmutableList.of()).forGetter(RemoveBlocksModifier::getPredicates), - EGCodecUtils.listOrElementCodec(GolemPart.CODEC).optionalFieldOf("part", ImmutableList.of(GolemPart.ALL)).forGetter(RemoveBlocksModifier::getPart) - ).apply(instance, RemoveBlocksModifier::new)); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + EGCodecUtils.listOrElementCodec(RemovePredicate.CODEC).optionalFieldOf("predicate", ImmutableList.of()) + .forGetter(RemoveBlocksModifier::getPredicates), + EGCodecUtils.listOrElementCodec(GolemPart.CODEC).optionalFieldOf("part", ImmutableList.of(GolemPart.ALL)) + .forGetter(RemoveBlocksModifier::getPart)) + .apply(instance, RemoveBlocksModifier::new)); private final List predicates; private final List part; @@ -39,7 +43,10 @@ public RemoveBlocksModifier(List predicates, List pa //// GETTERS //// - /** @return The predicates to test ResourcePair entries. If this list is empty, all entries will be removed. **/ + /** + * @return The predicates to test ResourcePair entries. If this list is empty, + * all entries will be removed. + **/ public List getPredicates() { return predicates; } @@ -53,13 +60,13 @@ public List getPart() { @Override public void apply(Golem.Builder builder) { - for(GolemPart p : part) { + for (GolemPart p : part) { builder.blocks(b -> b.apply(p, o -> o.remove(predicate))); } } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.REMOVE_BLOCKS.get(); } @@ -67,7 +74,9 @@ public Codec getCodec() { public static class RemovePredicate implements Predicate { - public static final Codec CODEC = ResourcePair.CODEC.xmap(RemovePredicate::new, o -> o.resource); + // Note: This should be Codec, not MapCodec, as it's used in listOrElementCodec + public static final Codec CODEC = ResourcePair.CODEC.xmap(RemovePredicate::new, + o -> o.resource); private final ResourcePair resource; diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveDescriptionModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveDescriptionModifier.java index 65be6bc7..76d7186c 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveDescriptionModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveDescriptionModifier.java @@ -9,6 +9,7 @@ import com.mcmoddev.golems.util.EGComponentUtils; import com.mcmoddev.golems.util.PredicateUtils; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import javax.annotation.concurrent.Immutable; @@ -24,9 +25,12 @@ @Immutable public class RemoveDescriptionModifier extends Modifier { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - EGCodecUtils.listOrElementCodec(RemovePredicate.CODEC).optionalFieldOf("predicate", ImmutableList.of()).forGetter(RemoveDescriptionModifier::getPredicates) - ).apply(instance, RemoveDescriptionModifier::new)); + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance + .group( + EGCodecUtils.listOrElementCodec(RemovePredicate.CODEC) + .optionalFieldOf("predicate", ImmutableList.of()) + .forGetter(RemoveDescriptionModifier::getPredicates)) + .apply(instance, RemoveDescriptionModifier::new)); private final List predicates; private final Predicate predicate; @@ -38,7 +42,10 @@ public RemoveDescriptionModifier(List predicates) { //// GETTERS //// - /** @return The predicates to test String entries after removing formatting codes. If this list is empty, all entries will be removed. **/ + /** + * @return The predicates to test String entries after removing formatting + * codes. If this list is empty, all entries will be removed. + **/ public List getPredicates() { return predicates; } @@ -51,7 +58,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.REMOVE_DESCRIPTION.get(); } @@ -59,9 +66,13 @@ public Codec getCodec() { public static class RemovePredicate implements Predicate { + // Note: This needs to be Codec, not MapCodec, for use in listOrElementCodec public static final Codec CODEC = Codec.STRING.xmap(RemovePredicate::new, o -> o.regex); - /** The regex to test a string to remove. Formatting codes are removed before testing. **/ + /** + * The regex to test a string to remove. Formatting codes are removed before + * testing. + **/ private final String regex; private final Pattern pattern; diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveRepairItemsModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveRepairItemsModifier.java index e1308b1e..990f84b0 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveRepairItemsModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/RemoveRepairItemsModifier.java @@ -7,6 +7,7 @@ import com.mcmoddev.golems.util.PredicateUtils; import com.mcmoddev.golems.data.ResourcePair; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.MinMaxBounds; @@ -18,15 +19,17 @@ import java.util.function.Predicate; /** - * Removes all repair item entries from the {@link com.mcmoddev.golems.data.golem.RepairItems.Builder} + * Removes all repair item entries from the + * {@link com.mcmoddev.golems.data.golem.RepairItems.Builder} * that pass any of the given {@link RemovePredicate}s */ @Immutable public class RemoveRepairItemsModifier extends Modifier { - public static final Codec CODEC = EGCodecUtils.listOrElementCodec(RemovePredicate.CODEC) + public static final MapCodec CODEC = EGCodecUtils + .listOrElementCodec(RemovePredicate.CODEC) .xmap(RemoveRepairItemsModifier::new, RemoveRepairItemsModifier::getPredicates) - .fieldOf("predicate").codec(); + .fieldOf("predicate"); private final List predicates; private final Predicate> predicate; @@ -50,7 +53,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.REMOVE_REPAIR_ITEMS.get(); } @@ -58,10 +61,12 @@ public Codec getCodec() { public static class RemovePredicate implements Predicate> { + // Note: This needs to be Codec, not MapCodec, for use in listOrElementCodec public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( ResourcePair.CODEC.optionalFieldOf("item").forGetter(o -> Optional.ofNullable(o.resourcePair)), - EGCodecUtils.MIN_MAX_DOUBLES_CODEC.optionalFieldOf("amount").forGetter(o -> Optional.ofNullable(o.values)) - ).apply(instance, RemovePredicate::new)); + EGCodecUtils.MIN_MAX_DOUBLES_CODEC.optionalFieldOf("amount") + .forGetter(o -> Optional.ofNullable(o.values))) + .apply(instance, RemovePredicate::new)); private final @Nullable ResourcePair resourcePair; private final @Nullable MinMaxBounds.Doubles values; @@ -73,10 +78,10 @@ public RemovePredicate(Optional resourcePair, Optional entry) { - if(this.resourcePair != null && !this.resourcePair.equals(entry.getKey())) { + if (this.resourcePair != null && !this.resourcePair.equals(entry.getKey())) { return false; } - if(this.values != null && !this.values.matches(entry.getValue())) { + if (this.values != null && !this.values.matches(entry.getValue())) { return false; } // all checks passed diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/golem/VariantsModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/golem/VariantsModifier.java index be9a2fa2..d21a4149 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/golem/VariantsModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/golem/VariantsModifier.java @@ -4,6 +4,7 @@ import com.mcmoddev.golems.data.golem.Golem; import com.mcmoddev.golems.data.modifier.Modifier; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import javax.annotation.concurrent.Immutable; @@ -14,7 +15,7 @@ @Immutable public class VariantsModifier extends Modifier { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( Codec.INT.fieldOf("amount").forGetter(VariantsModifier::getAmount), Codec.BOOL.optionalFieldOf("replace", false).forGetter(VariantsModifier::replace) ).apply(instance, VariantsModifier::new)); @@ -49,7 +50,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.VARIANTS.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/model/AddLayersModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/model/AddLayersModifier.java index efbee85f..9c853494 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/model/AddLayersModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/model/AddLayersModifier.java @@ -7,8 +7,7 @@ import com.mcmoddev.golems.data.modifier.Modifier; import com.mcmoddev.golems.util.EGCodecUtils; import com.mojang.datafixers.util.Either; -import com.mojang.serialization.Codec; -import net.minecraft.core.Holder; +import com.mojang.serialization.MapCodec; import net.minecraft.resources.ResourceLocation; import javax.annotation.concurrent.Immutable; @@ -20,9 +19,9 @@ @Immutable public class AddLayersModifier extends Modifier { - public static final Codec CODEC = EGCodecUtils.listOrElementCodec(LayerList.LAYER_OR_ID_CODEC) + public static final MapCodec CODEC = EGCodecUtils.listOrElementCodec(LayerList.LAYER_OR_ID_CODEC) .xmap(AddLayersModifier::new, AddLayersModifier::getLayers) - .fieldOf("layers").codec(); + .fieldOf("layers"); private final List> layers; @@ -44,7 +43,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.ADD_LAYERS.get(); } } diff --git a/src/main/java/com/mcmoddev/golems/data/modifier/model/RemoveLayersModifier.java b/src/main/java/com/mcmoddev/golems/data/modifier/model/RemoveLayersModifier.java index 1bfe8964..1a403e48 100644 --- a/src/main/java/com/mcmoddev/golems/data/modifier/model/RemoveLayersModifier.java +++ b/src/main/java/com/mcmoddev/golems/data/modifier/model/RemoveLayersModifier.java @@ -10,6 +10,7 @@ import com.mcmoddev.golems.data.ResourcePair; import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.resources.ResourceLocation; @@ -20,14 +21,15 @@ import java.util.function.Predicate; /** - * Removes all layers from the {@link LayerList.Builder} that pass any of the given {@link RemovePredicate}s + * Removes all layers from the {@link LayerList.Builder} that pass any of the + * given {@link RemovePredicate}s */ @Immutable public class RemoveLayersModifier extends Modifier { - public static final Codec CODEC = RemovePredicate.CODEC + public static final MapCodec CODEC = RemovePredicate.CODEC .xmap(RemoveLayersModifier::new, RemoveLayersModifier::getPredicate) - .fieldOf("predicate").codec(); + .fieldOf("predicate"); private final RemovePredicate predicate; @@ -49,7 +51,7 @@ public void apply(Golem.Builder builder) { } @Override - public Codec getCodec() { + public MapCodec getCodec() { return EGRegistry.GolemModifierReg.REMOVE_LAYERS.get(); } @@ -57,6 +59,7 @@ public Codec getCodec() { public static class RemovePredicate implements Predicate> { + // Note: This needs to be Codec, not MapCodec public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( ResourceLocation.CODEC.optionalFieldOf("model").forGetter(o -> Optional.ofNullable(o.model)), ResourcePair.CODEC.optionalFieldOf("texture").forGetter(o -> Optional.ofNullable(o.texture)), @@ -64,8 +67,9 @@ public static class RemovePredicate implements Predicate Optional.ofNullable(o.emissive)), Codec.BOOL.optionalFieldOf("use_biome_color").forGetter(o -> Optional.ofNullable(o.useBiomeColor)), RenderTypes.CODEC.optionalFieldOf("render_type").forGetter(o -> Optional.ofNullable(o.renderType)), - EGCodecUtils.MIN_MAX_INTS_CODEC.optionalFieldOf("variant").forGetter(o -> Optional.ofNullable(o.variant)) - ).apply(instance, RemovePredicate::new)); + EGCodecUtils.MIN_MAX_INTS_CODEC.optionalFieldOf("variant") + .forGetter(o -> Optional.ofNullable(o.variant))) + .apply(instance, RemovePredicate::new)); private final @Nullable ResourceLocation model; private final @Nullable ResourcePair texture; @@ -75,8 +79,10 @@ public static class RemovePredicate implements Predicate model, Optional texture, Optional template, Optional emissive, - Optional useBiomeColor, Optional renderType, Optional variant) { + public RemovePredicate(Optional model, Optional texture, + Optional template, Optional emissive, + Optional useBiomeColor, Optional renderType, + Optional variant) { this.model = model.orElse(null); this.texture = texture.orElse(null); this.template = template.orElse(null); @@ -89,30 +95,30 @@ public RemovePredicate(Optional model, Optional @Override public boolean test(Either either) { // check model - if(either.right().isPresent()) { + if (either.right().isPresent()) { return this.model != null && this.model.equals(either.right().get()); } // check layer - if(either.left().isEmpty()) { + if (either.left().isEmpty()) { return false; } final Layer layer = either.left().get(); - if(texture != null && !texture.equals(layer.getRawTexture())) { + if (texture != null && !texture.equals(layer.getRawTexture())) { return false; } - if(template != null && !template.equals(layer.getRawTemplate())) { + if (template != null && !template.equals(layer.getRawTemplate())) { return false; } - if(emissive != null && emissive != layer.isEmissive()) { + if (emissive != null && emissive != layer.isEmissive()) { return false; } - if(useBiomeColor != null && useBiomeColor != layer.useBiomeColor()) { + if (useBiomeColor != null && useBiomeColor != layer.useBiomeColor()) { return false; } - if(renderType != null && renderType != layer.getRenderType()) { + if (renderType != null && renderType != layer.getRenderType()) { return false; } - if(variant != null && !testMinMaxBounds(variant, layer.getVariantBounds())) { + if (variant != null && !testMinMaxBounds(variant, layer.getVariantBounds())) { return false; } // all checks passed @@ -121,22 +127,22 @@ public boolean test(Either either) { /** * @param predicate the bounds to check if they are in the range - * @param bounds the range + * @param bounds the range * @return true if the predicate is ANY, */ private boolean testMinMaxBounds(final MinMaxBounds.Ints predicate, final MinMaxBounds.Ints bounds) { - if(predicate.isAny() || bounds.isAny()) { + if (predicate.isAny() || bounds.isAny()) { return true; } // TODO test to make sure this works - if(bounds.getMin() != null && bounds.getMax() != null - && (predicate.matches(bounds.getMin()) || predicate.matches(bounds.getMax()))) { + if (bounds.min().orElse(null) != null && bounds.max().orElse(null) != null + && (predicate.matches(bounds.min().orElse(null)) || predicate.matches(bounds.max().orElse(null)))) { return true; } - if(bounds.getMin() != null && predicate.matches(bounds.getMin())) { + if (bounds.min().orElse(null) != null && predicate.matches(bounds.min().orElse(null))) { return true; } - if(bounds.getMax() != null && predicate.matches(bounds.getMax())) { + if (bounds.max().orElse(null) != null && predicate.matches(bounds.max().orElse(null))) { return true; } return false; diff --git a/src/main/java/com/mcmoddev/golems/entity/GolemBase.java b/src/main/java/com/mcmoddev/golems/entity/GolemBase.java index 33006396..2895b129 100644 --- a/src/main/java/com/mcmoddev/golems/entity/GolemBase.java +++ b/src/main/java/com/mcmoddev/golems/entity/GolemBase.java @@ -66,10 +66,9 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.SoundType; -import net.minecraft.world.level.pathfinder.BlockPathTypes; +import net.minecraft.world.level.pathfinder.PathType; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.network.NetworkHooks; import javax.annotation.Nullable; import java.util.HashMap; @@ -85,16 +84,30 @@ public class GolemBase extends IronGolem implements IExtraGolem { // SYNCED ENTITY DATA // - private static final EntityDataAccessor> GOLEM = SynchedEntityData.defineId(GolemBase.class, IExtraGolem.OPTIONAL_RESOURCE_LOCATION); - private static final EntityDataAccessor CHILD = SynchedEntityData.defineId(GolemBase.class, EntityDataSerializers.BOOLEAN); - private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(GolemBase.class, EntityDataSerializers.BYTE); - private static final EntityDataAccessor FUEL = SynchedEntityData.defineId(GolemBase.class, EntityDataSerializers.INT); - private static final EntityDataAccessor AMMO = SynchedEntityData.defineId(GolemBase.class, EntityDataSerializers.INT); + // Use String instead of Optional to avoid custom serializer + // registration issues + // Empty string means no golem ID is set + private static final EntityDataAccessor GOLEM = SynchedEntityData.defineId(GolemBase.class, + EntityDataSerializers.STRING); + private static final EntityDataAccessor CHILD = SynchedEntityData.defineId(GolemBase.class, + EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(GolemBase.class, + EntityDataSerializers.BYTE); + private static final EntityDataAccessor FUEL = SynchedEntityData.defineId(GolemBase.class, + EntityDataSerializers.INT); + private static final EntityDataAccessor AMMO = SynchedEntityData.defineId(GolemBase.class, + EntityDataSerializers.INT); // ATTRIBUTE MODIFIERS // - private static final AttributeModifier BABY_GOLEM_HEALTH_DEBUFF = new AttributeModifier("Baby golem health debuff", -0.375D, AttributeModifier.Operation.MULTIPLY_BASE); - private static final AttributeModifier BABY_GOLEM_ATTACK_DEBUFF = new AttributeModifier("Baby golem attack debuff", -0.625D, AttributeModifier.Operation.MULTIPLY_BASE); - private static final AttributeModifier BABY_GOLEM_KNOCKBACK_DEBUFF = new AttributeModifier("Baby golem knockback debuff", -1.0D, AttributeModifier.Operation.MULTIPLY_BASE); + private static final AttributeModifier BABY_GOLEM_HEALTH_DEBUFF = new AttributeModifier( + ResourceLocation.fromNamespaceAndPath("golems", "baby_health"), -0.375D, + AttributeModifier.Operation.ADD_MULTIPLIED_BASE); + private static final AttributeModifier BABY_GOLEM_ATTACK_DEBUFF = new AttributeModifier( + ResourceLocation.fromNamespaceAndPath("golems", "baby_attack"), -0.625D, + AttributeModifier.Operation.ADD_MULTIPLIED_BASE); + private static final AttributeModifier BABY_GOLEM_KNOCKBACK_DEBUFF = new AttributeModifier( + ResourceLocation.fromNamespaceAndPath("golems", "baby_knockback"), -1.0D, + AttributeModifier.Operation.ADD_MULTIPLIED_BASE); // KEYS // private static final String KEY_CHILD = "IsChild"; @@ -152,7 +165,8 @@ public static AttributeSupplier.Builder golemAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, com.mcmoddev.golems.data.golem.Attributes.EMPTY.getHealth()) .add(Attributes.MOVEMENT_SPEED, com.mcmoddev.golems.data.golem.Attributes.EMPTY.getSpeed()) - .add(Attributes.KNOCKBACK_RESISTANCE, com.mcmoddev.golems.data.golem.Attributes.EMPTY.getKnockbackResistance()) + .add(Attributes.KNOCKBACK_RESISTANCE, + com.mcmoddev.golems.data.golem.Attributes.EMPTY.getKnockbackResistance()) .add(Attributes.ATTACK_KNOCKBACK, com.mcmoddev.golems.data.golem.Attributes.EMPTY.getAttackKnockback()) .add(Attributes.ARMOR, com.mcmoddev.golems.data.golem.Attributes.EMPTY.getArmor()) .add(Attributes.ATTACK_DAMAGE, com.mcmoddev.golems.data.golem.Attributes.EMPTY.getAttack()); @@ -170,12 +184,16 @@ public GolemBase asMob() { **/ @Override public Optional getGolemId() { - return this.getEntityData().get(GOLEM); + String idStr = this.getEntityData().get(GOLEM); + if (idStr == null || idStr.isEmpty()) { + return Optional.empty(); + } + return Optional.of(ResourceLocation.parse(idStr)); } @Override public Optional getContainer(RegistryAccess registryAccess) { - if(null == this.cachedContainer) { + if (null == this.cachedContainer) { this.cachedContainer = IExtraGolem.super.getContainer(registryAccess).orElse(null); } return Optional.ofNullable(this.cachedContainer); @@ -183,6 +201,7 @@ public Optional getContainer(RegistryAccess registryAccess) { /** * Gets or loads the cached {@link GolemContainer} + * * @return the value of {@link #getContainer(RegistryAccess)} **/ public Optional getContainer() { @@ -193,17 +212,17 @@ public Optional getContainer() { public void setGolemId(final @Nullable ResourceLocation id) { // clear cached container clearCachedGolemContainer(); - if(level().isClientSide()) { + if (level().isClientSide()) { return; } - // update ID - this.getEntityData().set(GOLEM, Optional.ofNullable(id)); - if(null == id) { + // update ID (store as string, empty string for null) + this.getEntityData().set(GOLEM, id != null ? id.toString() : ""); + if (null == id) { return; } // load container final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { // log error message when failing to load ExtraGolems.LOGGER.error("Failed to load golem container for '" + id + "'"); return; @@ -218,16 +237,17 @@ public void setGolemId(final @Nullable ResourceLocation id) { // update attribute modifiers if (this.isBaby()) { // add debuffs - EGAttributeUtils.safeAddModifier(this.getAttribute(Attributes.MAX_HEALTH), BABY_GOLEM_HEALTH_DEBUFF); - EGAttributeUtils.safeAddModifier(this.getAttribute(Attributes.ATTACK_DAMAGE), BABY_GOLEM_ATTACK_DEBUFF); - EGAttributeUtils.safeAddModifier(this.getAttribute(Attributes.KNOCKBACK_RESISTANCE), BABY_GOLEM_KNOCKBACK_DEBUFF); - this.setMaxUpStep(0.6F); + EGAttributeUtils.safeAddModifier(this.getAttribute(Attributes.KNOCKBACK_RESISTANCE), + BABY_GOLEM_KNOCKBACK_DEBUFF); + this.getAttribute(Attributes.STEP_HEIGHT).setBaseValue(0.6); } else { // remove debuffs EGAttributeUtils.safeRemoveModifier(this.getAttribute(Attributes.MAX_HEALTH), BABY_GOLEM_HEALTH_DEBUFF); - EGAttributeUtils.safeRemoveModifier(this.getAttribute(Attributes.ATTACK_DAMAGE), BABY_GOLEM_ATTACK_DEBUFF); - EGAttributeUtils.safeRemoveModifier(this.getAttribute(Attributes.KNOCKBACK_RESISTANCE), BABY_GOLEM_KNOCKBACK_DEBUFF); - this.setMaxUpStep(1.0F); + EGAttributeUtils.safeRemoveModifier(this.getAttribute(Attributes.ATTACK_DAMAGE), + BABY_GOLEM_ATTACK_DEBUFF); + EGAttributeUtils.safeRemoveModifier(this.getAttribute(Attributes.KNOCKBACK_RESISTANCE), + BABY_GOLEM_KNOCKBACK_DEBUFF); + this.getAttribute(Attributes.STEP_HEIGHT).setBaseValue(1.0); } } // initialize goals and behaviors @@ -243,9 +263,9 @@ public void setGolemId(final @Nullable ResourceLocation id) { break; case SWIM: // advanced swimming AI - setMaxUpStep(1.0f); + this.getAttribute(Attributes.STEP_HEIGHT).setBaseValue(1.0); moveControl = new SwimmingMovementController(this); - setPathfindingMalus(BlockPathTypes.WATER, 0.0F); + setPathfindingMalus(PathType.WATER, 0.0F); goalSelector.addGoal(1, new GoToWaterGoal(this, 14, 1.0D)); goalSelector.addGoal(4, new RandomSwimmingGoal(this, 0.8F, 200)); goalSelector.addGoal(5, new SwimUpGoal(this, 1.0D, level().getSeaLevel() + 1)); @@ -316,13 +336,13 @@ public int getFuel() { //// SYNCHED DATA //// @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.getEntityData().define(GOLEM, Optional.empty()); - this.getEntityData().define(CHILD, Boolean.FALSE); - this.getEntityData().define(VARIANT, (byte) 0); - this.getEntityData().define(FUEL, 0); - this.getEntityData().define(AMMO, 0); + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(GOLEM, ""); + builder.define(CHILD, Boolean.FALSE); + builder.define(VARIANT, (byte) 0); + builder.define(FUEL, 0); + builder.define(AMMO, 0); } @Override @@ -340,7 +360,7 @@ public void onSyncedDataUpdated(final EntityDataAccessor key) { this.setGolemId(getGolemId().orElse(null)); } // update behaviors - if(isEffectiveAi()) { + if (isEffectiveAi()) { oContainer.ifPresent(container -> container.getBehaviors().forEach(b -> b.onSyncedDataUpdated(this, key))); } } @@ -356,10 +376,11 @@ public Map, IBehaviorData> getBehaviorData() { @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor serverLevel, DifficultyInstance difficulty, - MobSpawnType mobSpawnType, @Nullable SpawnGroupData spawnGroupData, @Nullable CompoundTag tag) { + MobSpawnType mobSpawnType, @Nullable SpawnGroupData spawnGroupData) { this.setHealth(this.getMaxHealth()); - getContainer(serverLevel.registryAccess()).ifPresent(c -> this.setInvulnerable(c.getAttributes().isInvulnerable())); - return super.finalizeSpawn(serverLevel, difficulty, mobSpawnType, spawnGroupData, tag); + getContainer(serverLevel.registryAccess()) + .ifPresent(c -> this.setInvulnerable(c.getAttributes().isInvulnerable())); + return super.finalizeSpawn(serverLevel, difficulty, mobSpawnType, spawnGroupData); } @Override @@ -372,7 +393,8 @@ public boolean canAttackType(final EntityType type) { if (type == EntityType.PLAYER && this.isPlayerCreated()) { return ExtraGolems.CONFIG.enableFriendlyFire(); } - if (type == EntityType.VILLAGER || type == EGRegistry.EntityReg.GOLEM.get() || type == EntityType.IRON_GOLEM || type == EntityType.SNOW_GOLEM) { + if (type == EntityType.VILLAGER || type == EGRegistry.EntityReg.GOLEM.get() || type == EntityType.IRON_GOLEM + || type == EntityType.SNOW_GOLEM) { return false; } return super.canAttackType(type); @@ -381,7 +403,7 @@ public boolean canAttackType(final EntityType type) { @Override public ItemStack getPickedResult(final HitResult ray) { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return ItemStack.EMPTY; } return oContainer.get().getGolem().getBlocks().getPickResult(); @@ -390,7 +412,7 @@ public ItemStack getPickedResult(final HitResult ray) { @Override public float getLightLevelDependentMagicValue() { final int powerLevel = this.getPowerLevel(); - if(powerLevel > 0) { + if (powerLevel > 0) { return powerLevel / 15.0F; } return super.getLightLevelDependentMagicValue(); @@ -399,19 +421,19 @@ public float getLightLevelDependentMagicValue() { @Override protected Component getTypeName() { final Optional container = getContainer(level().registryAccess()); - if(container.isPresent()) { + if (container.isPresent()) { return container.get().getTypeName(); } return super.getTypeName(); } @Override - protected ResourceLocation getDefaultLootTable() { + protected ResourceKey getDefaultLootTable() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return super.getDefaultLootTable(); } - return oContainer.get().getLootTable(); + return ResourceKey.create(net.minecraft.core.registries.Registries.LOOT_TABLE, oContainer.get().getLootTable()); } @Override @@ -433,7 +455,7 @@ public void setBaby(final boolean isChild) { @Override public boolean dampensVibrations() { final Optional oContainer = getContainer(); - if(oContainer.isPresent() && oContainer.get().getAttributes().occludes()) { + if (oContainer.isPresent() && oContainer.get().getAttributes().occludes()) { return true; } return super.dampensVibrations(); @@ -448,14 +470,16 @@ public int getLightLevel() { public int calculateLightLevel() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return 0; } // collect light behaviors - final List behaviors = oContainer.get().getBehaviors().getActiveBehaviors(LightBehavior.class, this); - // determine max value from all collected light behaviors (defaults to zero if the list is empty) + final List behaviors = oContainer.get().getBehaviors().getActiveBehaviors(LightBehavior.class, + this); + // determine max value from all collected light behaviors (defaults to zero if + // the list is empty) int max = 0; - for(LightBehavior b : behaviors) { + for (LightBehavior b : behaviors) { max = Math.max(max, b.getLightLevel()); } return max; @@ -470,14 +494,16 @@ public int getPowerLevel() { protected int calculatePowerLevel() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return 0; } // collect power behaviors - final List behaviors = oContainer.get().getBehaviors().getActiveBehaviors(PowerBehavior.class, this); - // determine max value from all collected power behaviors (defaults to zero if the list is empty) + final List behaviors = oContainer.get().getBehaviors().getActiveBehaviors(PowerBehavior.class, + this); + // determine max value from all collected power behaviors (defaults to zero if + // the list is empty) int max = 0; - for(PowerBehavior b : behaviors) { + for (PowerBehavior b : behaviors) { max = Math.max(max, b.getPowerLevel()); } return max; @@ -490,16 +516,18 @@ public void customServerAiStep() { super.customServerAiStep(); // process golem container final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return; } final GolemContainer container = oContainer.get(); // take damage from water - if(this.isInWaterRainOrBubble() && container.getAttributes().isWeakTo(level().registryAccess(), ImmutableSet.of(DamageTypes.DROWN))) { + if (this.isInWaterRainOrBubble() + && container.getAttributes().isWeakTo(level().registryAccess(), ImmutableSet.of(DamageTypes.DROWN))) { this.hurt(this.damageSources().drown(), 1.0F); } // take damage from heat - if(this.level().getBiome(this.blockPosition()).is(BiomeTags.SNOW_GOLEM_MELTS) && container.getAttributes().isWeakTo(level().registryAccess(), ImmutableSet.of(DamageTypes.IN_FIRE, DamageTypes.ON_FIRE))) { + if (this.level().getBiome(this.blockPosition()).is(BiomeTags.SNOW_GOLEM_MELTS) && container.getAttributes() + .isWeakTo(level().registryAccess(), ImmutableSet.of(DamageTypes.IN_FIRE, DamageTypes.ON_FIRE))) { this.hurt(this.damageSources().onFire(), 1.0F); } // update behaviors @@ -518,9 +546,12 @@ public void tick() { // spawn golem container particles getContainer().ifPresent(container -> { final ParticleOptions options = container.getGolem().getParticle(); - if(options != null) { - this.level().addParticle(options, getX() + getRandom().nextDouble() - 0.5D, getY() + (getRandom().nextDouble() * getEyeHeight()), getZ() + getRandom().nextDouble() - 0.5D, - 0.1D * (getRandom().nextDouble() - 0.5D), 0.1D * (getRandom().nextDouble() - 0.5D), 0.1D * (getRandom().nextDouble() - 0.5D)); + if (options != null) { + this.level().addParticle(options, getX() + getRandom().nextDouble() - 0.5D, + getY() + (getRandom().nextDouble() * getEyeHeight()), + getZ() + getRandom().nextDouble() - 0.5D, + 0.1D * (getRandom().nextDouble() - 0.5D), 0.1D * (getRandom().nextDouble() - 0.5D), + 0.1D * (getRandom().nextDouble() - 0.5D)); } }); } @@ -531,24 +562,25 @@ public void tick() { @Override public boolean canBeAffected(MobEffectInstance pEffectInstance) { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return super.canBeAffected(pEffectInstance); } - return !oContainer.get().getAttributes().ignores(level().registryAccess(), pEffectInstance.getEffect()); + return !oContainer.get().getAttributes().ignores(level().registryAccess(), pEffectInstance.getEffect().value()); } @Override public boolean isInvulnerableTo(DamageSource pSource) { - if(super.isInvulnerableTo(pSource)) { + if (super.isInvulnerableTo(pSource)) { return true; } final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return false; } final RegistryAccess registryAccess = level().registryAccess(); final Optional> oTypeKey = pSource.typeHolder().unwrapKey(); - if(oTypeKey.isPresent() && oContainer.get().getAttributes().isImmuneTo(registryAccess, ImmutableSet.of(oTypeKey.get()))) { + if (oTypeKey.isPresent() + && oContainer.get().getAttributes().isImmuneTo(registryAccess, ImmutableSet.of(oTypeKey.get()))) { return true; } return false; @@ -557,18 +589,12 @@ public boolean isInvulnerableTo(DamageSource pSource) { @Override public boolean causeFallDamage(float distance, float damageMultiplier, DamageSource source) { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return super.causeFallDamage(distance, damageMultiplier, source); } // process weak to fall damage - if(oContainer.get().getAttributes().isWeakTo(level().registryAccess(), ImmutableSet.of(DamageTypes.FALL))) { - // this code is copied from the super.super.causeFallDamage method since IronGolem overrides it to do nothing - float[] ret = net.minecraftforge.common.ForgeHooks.onLivingFall(this, distance, damageMultiplier); - if (ret == null) return false; - distance = ret[0]; - damageMultiplier = ret[1]; - - boolean flag = super.causeFallDamage(distance, damageMultiplier, source); + if (oContainer.get().getAttributes().isWeakTo(level().registryAccess(), ImmutableSet.of(DamageTypes.FALL))) { + // golem is weak to fall damage, apply fall damage like LivingEntity int i = this.calculateFallDamage(distance, damageMultiplier); if (i > 0) { SoundEvent sound = i > 4 ? this.getFallSounds().big() : this.getFallSounds().small(); @@ -576,44 +602,47 @@ public boolean causeFallDamage(float distance, float damageMultiplier, DamageSou this.playBlockFallSound(); this.hurt(this.damageSources().fall(), (float) i); return true; - } else { - return flag; } + return false; } + // golem is not weak to fall damage (default behavior like IronGolem) return false; } @Override public boolean canFreeze() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return super.canFreeze(); } - return !oContainer.get().getAttributes().isImmuneTo(level().registryAccess(), ImmutableSet.of(DamageTypes.FREEZE)); + return !oContainer.get().getAttributes().isImmuneTo(level().registryAccess(), + ImmutableSet.of(DamageTypes.FREEZE)); } @Override public boolean fireImmune() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return super.fireImmune(); } - return oContainer.get().getAttributes().isImmuneTo(level().registryAccess(), ImmutableSet.of(DamageTypes.IN_FIRE, DamageTypes.ON_FIRE)); + return oContainer.get().getAttributes().isImmuneTo(level().registryAccess(), + ImmutableSet.of(DamageTypes.IN_FIRE, DamageTypes.ON_FIRE)); } @Override - public boolean ignoreExplosion() { + public boolean ignoreExplosion(net.minecraft.world.level.Explosion explosion) { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { - return super.ignoreExplosion(); + if (oContainer.isEmpty()) { + return super.ignoreExplosion(explosion); } - return oContainer.get().getAttributes().isImmuneTo(level().registryAccess(), ImmutableSet.of(DamageTypes.EXPLOSION, DamageTypes.PLAYER_EXPLOSION)); + return oContainer.get().getAttributes().isImmuneTo(level().registryAccess(), + ImmutableSet.of(DamageTypes.EXPLOSION, DamageTypes.PLAYER_EXPLOSION)); } @Override public boolean isSensitiveToWater() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return super.isSensitiveToWater(); } return oContainer.get().getAttributes().isWeakTo(level().registryAccess(), ImmutableSet.of(DamageTypes.DROWN)); @@ -626,8 +655,9 @@ public void setTarget(@Nullable LivingEntity pTarget) { final LivingEntity oldTarget = this.getTarget(); super.setTarget(pTarget); // notify behaviors of target change - if(isEffectiveAi() && !Objects.equals(oldTarget, this.getTarget())) { - getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this).forEach(b -> b.onTarget(this, pTarget))); + if (isEffectiveAi() && !Objects.equals(oldTarget, this.getTarget())) { + getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this) + .forEach(b -> b.onTarget(this, pTarget))); } } @@ -646,7 +676,7 @@ public boolean doHurtTarget(Entity target) { target.setDeltaMovement(target.getDeltaMovement().add(dX, knockback / 2, dZ)); } // allow behaviors to process doHurtTarget - if(isEffectiveAi()){ + if (isEffectiveAi()) { container.getBehaviors().getActiveBehaviors(this).forEach(b -> b.onAttack(this, target)); } }); @@ -659,24 +689,27 @@ public boolean doHurtTarget(Entity target) { protected void actuallyHurt(DamageSource source, float amount) { super.actuallyHurt(source, amount); // allow behaviors to process actuallyHurt - if(isEffectiveAi()) { - getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this).forEach(b -> b.onActuallyHurt(this, source, amount))); + if (isEffectiveAi()) { + getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this) + .forEach(b -> b.onActuallyHurt(this, source, amount))); } } @Override public void thunderHit(ServerLevel pLevel, LightningBolt pLightning) { super.thunderHit(pLevel, pLightning); - if(isEffectiveAi()) { - getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this).forEach(b -> b.onStruckByLightning(this, pLightning))); + if (isEffectiveAi()) { + getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this) + .forEach(b -> b.onStruckByLightning(this, pLightning))); } } @Override public void die(final DamageSource source) { // allow behaviors to process die - if(isEffectiveAi()) { - getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this).forEach(b -> b.onDie(this, source))); + if (isEffectiveAi()) { + getContainer().ifPresent( + container -> container.getBehaviors().getActiveBehaviors(this).forEach(b -> b.onDie(this, source))); } super.die(source); } @@ -690,8 +723,9 @@ protected InteractionResult mobInteract(final Player player, final InteractionHa return InteractionResult.CONSUME; } // Allow behaviors to process mobInteract - if(isEffectiveAi()) { - getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this).forEach(b -> b.onMobInteract(this, player, hand))); + if (isEffectiveAi()) { + getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this) + .forEach(b -> b.onMobInteract(this, player, hand))); } return super.mobInteract(player, hand); } @@ -699,13 +733,14 @@ protected InteractionResult mobInteract(final Player player, final InteractionHa /** * Called when the player uses an item that can repair this entity * - * @param player the player using the item - * @param hand the player hand - * @param stack the item being used + * @param player the player using the item + * @param hand the player hand + * @param stack the item being used * @param repairAmount the amount of health this item will restore * @return true if the item was consumed */ - protected boolean processRepair(final Player player, final InteractionHand hand, final ItemStack stack, final float repairAmount) { + protected boolean processRepair(final Player player, final InteractionHand hand, final ItemStack stack, + final float repairAmount) { if (ExtraGolems.CONFIG.enableHealGolems() && this.getHealth() < this.getMaxHealth()) { heal(repairAmount); // update stack size/item @@ -724,7 +759,8 @@ protected boolean processRepair(final Player player, final InteractionHand hand, } // spawn particles and play sound final Vec3 pos = this.position(); - SpawnGolemItem.spawnParticles(this.level(), pos.x, pos.y + this.getBbHeight() / 2.0D, pos.z, 0.15D, ParticleTypes.INSTANT_EFFECT, 30); + SpawnGolemItem.spawnParticles(this.level(), pos.x, pos.y + this.getBbHeight() / 2.0D, pos.z, 0.15D, + ParticleTypes.INSTANT_EFFECT, 30); this.playSound(SoundEvents.STONE_PLACE, 0.85F, 1.1F + random.nextFloat() * 0.2F); return true; } @@ -733,14 +769,16 @@ protected boolean processRepair(final Player player, final InteractionHand hand, /** * @param itemStack the ItemStack being used to repair the entity - * @return the amount by which this item should repair the entity, in half-hearts, between 0 and 64.0 + * @return the amount by which this item should repair the entity, in + * half-hearts, between 0 and 64.0 **/ public float getRepairAmount(final ItemStack itemStack) { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return 0.0F; } - float amount = (float) (this.getMaxHealth() * oContainer.get().getGolem().getRepairItems().getRepairAmount(itemStack)); + float amount = (float) (this.getMaxHealth() + * oContainer.get().getGolem().getRepairItems().getRepairAmount(itemStack)); if (this.isBaby()) { amount *= 1.75F; } @@ -767,7 +805,8 @@ public Player getPlayerInMenu() { /** * @param distance the maximum distance from the player to this entity - * @return true if the player with an open menu exists and is within the given distance + * @return true if the player with an open menu exists and is within the given + * distance */ public boolean isPlayerInRangeForMenu(final double distance) { return this.playerInMenu != null && this.position().closerThan(this.playerInMenu.position(), distance); @@ -784,11 +823,19 @@ public void readAdditionalSaveData(final CompoundTag tag) { this.setBaby(tag.getBoolean(KEY_CHILD)); // load inventory setupInventory(); - readInventoryFromTag(tag); + this.readInventory(tag, level().registryAccess()); // allow behaviors to process readData this.getContainer().ifPresent(container -> container.getBehaviors().forEach(b -> b.onReadData(this, tag))); } + public void readInventory(CompoundTag tag, net.minecraft.core.HolderLookup.Provider registries) { + this.getInventory().fromTag(tag.getList("Inventory", 10), registries); + } + + public void writeInventory(CompoundTag tag, net.minecraft.core.HolderLookup.Provider registries) { + tag.put("Inventory", this.getInventory().createTag(registries)); + } + @Override public void addAdditionalSaveData(final CompoundTag tag) { super.addAdditionalSaveData(tag); @@ -797,17 +844,14 @@ public void addAdditionalSaveData(final CompoundTag tag) { // save baby flag tag.putBoolean(KEY_CHILD, this.isBaby()); // save inventory - writeInventoryToTag(tag); + this.writeInventory(tag, level().registryAccess()); // allow behaviors to process writeData this.getContainer().ifPresent(container -> container.getBehaviors().forEach(b -> b.onWriteData(this, tag))); } //// SPAWN DATA //// - @Override - public Packet getAddEntityPacket() { - return NetworkHooks.getEntitySpawningPacket(this); - } + // getAddEntityPacket is no longer needed in MC 1.21+ //// SOUNDS //// @@ -831,7 +875,7 @@ protected SoundEvent getDeathSound() { **/ public final SoundType getSoundType() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return SoundType.STONE; } return oContainer.get().getAttributes().getSoundType(); @@ -842,7 +886,7 @@ public final SoundType getSoundType() { @Override public int getVariantCount() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return 1; } return oContainer.get().getGolem().getVariants(); @@ -851,7 +895,7 @@ public int getVariantCount() { @Override public void setVariant(int variant) { if (variant >= 0 && !level().isClientSide()) { - this.getEntityData().set(VARIANT, (byte)variant); + this.getEntityData().set(VARIANT, (byte) variant); this.wantsToPickup = calculateWantsToPickup(); } this.lightLevel = calculateLightLevel(); @@ -867,22 +911,23 @@ public int getVariant() { @Override public void performRangedAttack(LivingEntity target, float distanceFactor) { - this.getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this).forEach(b -> b.onRangedAttack(this, target, distanceFactor))); + this.getContainer().ifPresent(container -> container.getBehaviors().getActiveBehaviors(this) + .forEach(b -> b.onRangedAttack(this, target, distanceFactor))); } //// INVENTORY //// protected Predicate calculateWantsToPickup() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return (itemStack) -> false; } Predicate predicate = null; // iterate behaviors - for(Behavior b : oContainer.get().getBehaviors().getActiveBehaviors(this)) { - if(b instanceof AbstractShootBehavior behavior) { + for (Behavior b : oContainer.get().getBehaviors().getActiveBehaviors(this)) { + if (b instanceof AbstractShootBehavior behavior) { // update predicate - if(predicate == null) { + if (predicate == null) { predicate = (itemStack) -> behavior.consume() && behavior.isAmmo(itemStack); } else { predicate = predicate.and((itemStack) -> behavior.consume() && behavior.isAmmo(itemStack)); @@ -890,7 +935,7 @@ protected Predicate calculateWantsToPickup() { } } // check nonnull - if(predicate != null) { + if (predicate != null) { return predicate; } // never pickup @@ -919,16 +964,16 @@ public void setupInventory() { @Override public boolean wantsToPickUp(ItemStack stack) { - if(stack.isEmpty()) { + if (stack.isEmpty()) { return false; } // resolve container final Optional oContainer = getContainer(); - if(oContainer.isEmpty()) { + if (oContainer.isEmpty()) { return false; } // resolve behaviors - if(isEffectiveAi() && !wantsToPickup.test(stack)) { + if (isEffectiveAi() && !wantsToPickup.test(stack)) { return false; } // validate inventory @@ -964,7 +1009,7 @@ public boolean canHoldItem(ItemStack item) { @Override public void containerChanged(Container container) { - if(container == this.inventory) { + if (container == this.inventory) { this.isInventoryChanged = true; } } @@ -995,7 +1040,7 @@ public void travel(final Vec3 vec) { @Override public void updateSwimming() { final Optional oContainer = getContainer(); - if(oContainer.isEmpty() || oContainer.get().getAttributes().getSwimAbility() != SwimAbility.SWIM) { + if (oContainer.isEmpty() || oContainer.get().getAttributes().getSwimAbility() != SwimAbility.SWIM) { super.updateSwimming(); return; } @@ -1018,13 +1063,15 @@ public boolean isPushedByFluid() { public void setSwimmingUp(boolean isSwimmingUp) { final Optional oContainer = getContainer(); - final boolean canSwim = oContainer.isPresent() && oContainer.get().getAttributes().getSwimAbility() == SwimAbility.SWIM; + final boolean canSwim = oContainer.isPresent() + && oContainer.get().getAttributes().getSwimAbility() == SwimAbility.SWIM; this.swimmingUp = canSwim && isSwimmingUp; } public boolean isSwimmingUp() { final Optional oContainer = getContainer(); - final boolean canSwim = oContainer.isPresent() && oContainer.get().getAttributes().getSwimAbility() == SwimAbility.SWIM; + final boolean canSwim = oContainer.isPresent() + && oContainer.get().getAttributes().getSwimAbility() == SwimAbility.SWIM; if (!canSwim) { return false; } @@ -1069,7 +1116,8 @@ public void tick() { float f2 = Mth.lerp(0.125F, this.golem.getSpeed(), f1); this.golem.setSpeed(f2); this.golem.setDeltaMovement( - this.golem.getDeltaMovement().add((double) f2 * d0 * 0.005D, (double) f2 * d1 * 0.1D, (double) f2 * d2 * 0.005D)); + this.golem.getDeltaMovement().add((double) f2 * d0 * 0.005D, (double) f2 * d1 * 0.1D, + (double) f2 * d2 * 0.005D)); } else { if (!this.golem.onGround()) { this.golem.setDeltaMovement(this.golem.getDeltaMovement().add(0.0D, -0.008D, 0.0D)); diff --git a/src/main/java/com/mcmoddev/golems/entity/IExtraGolem.java b/src/main/java/com/mcmoddev/golems/entity/IExtraGolem.java index 18555f73..bf965d0c 100644 --- a/src/main/java/com/mcmoddev/golems/entity/IExtraGolem.java +++ b/src/main/java/com/mcmoddev/golems/entity/IExtraGolem.java @@ -5,7 +5,7 @@ import net.minecraft.core.RegistryAccess; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; -import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.syncher.EntityDataSerializer; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.ContainerListener; @@ -22,8 +22,6 @@ public interface IExtraGolem extends IVariantProvider, ILightProvider, IPowerProvider, IInventoryProvider, ContainerListener, RangedAttackMob { - public static final EntityDataSerializer> OPTIONAL_RESOURCE_LOCATION = EntityDataSerializer.optional(FriendlyByteBuf::writeResourceLocation, FriendlyByteBuf::readResourceLocation); - //// ENTITY //// /** @@ -59,7 +57,7 @@ public interface IExtraGolem extends IVariantProvider, ILightProvider, IPowerPro default Optional getContainer(final RegistryAccess registryAccess) { // load variant ID final Optional oId = getGolemId(); - if(oId.isEmpty()) { + if (oId.isEmpty()) { return Optional.empty(); } // all checks passed @@ -87,7 +85,7 @@ default Optional getContainer(final RegistryAccess registryAcces /** * @param data the behavior data - * @param the behavior data class + * @param the behavior data class */ default void attachBehaviorData(final T data) { getBehaviorData().put(data.getClass(), data); @@ -95,11 +93,11 @@ default void attachBehaviorData(final T data) { /** * @param clazz the behavior data class - * @param the behavior data class + * @param the behavior data class * @return the behavior data for the given class, if any */ default Optional getBehaviorData(final Class clazz) { - return Optional.ofNullable((T)getBehaviorData().get(clazz)); + return Optional.ofNullable((T) getBehaviorData().get(clazz)); } //// GOLEM //// @@ -112,13 +110,15 @@ default Optional getBehaviorData(final Class cla /** * Called after construction when a entity is built by a player * - * @param body the body block - * @param legs the legs block - * @param arm1 the first arm block - * @param arm2 the second arm block + * @param body the body block + * @param legs the legs block + * @param arm1 the first arm block + * @param arm2 the second arm block * @param player the player who built the entity, if any */ - default void onBuilt(final BlockState body, final BlockState legs, final BlockState arm1, final BlockState arm2, @Nullable Entity player) {} + default void onBuilt(final BlockState body, final BlockState legs, final BlockState arm1, final BlockState arm2, + @Nullable Entity player) { + } //// NBT //// @@ -130,12 +130,12 @@ default void writeContainer(CompoundTag pCompound) { default void readContainer(CompoundTag pCompound) { // read golem ID - if(pCompound.contains(KEY_GOLEM_ID, Tag.TAG_STRING)) { - setGolemId(new ResourceLocation(pCompound.getString(KEY_GOLEM_ID))); + if (pCompound.contains(KEY_GOLEM_ID, Tag.TAG_STRING)) { + setGolemId(ResourceLocation.parse(pCompound.getString(KEY_GOLEM_ID))); } // read legacy golem ID - if(pCompound.contains("Material", Tag.TAG_STRING)) { - setGolemId(new ResourceLocation(pCompound.getString("Material"))); + if (pCompound.contains("Material", Tag.TAG_STRING)) { + setGolemId(ResourceLocation.parse(pCompound.getString("Material"))); } } } diff --git a/src/main/java/com/mcmoddev/golems/entity/goal/FollowGoal.java b/src/main/java/com/mcmoddev/golems/entity/goal/FollowGoal.java index 3d2151ba..8f5bd288 100644 --- a/src/main/java/com/mcmoddev/golems/entity/goal/FollowGoal.java +++ b/src/main/java/com/mcmoddev/golems/entity/goal/FollowGoal.java @@ -6,7 +6,7 @@ import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.navigation.PathNavigation; -import net.minecraft.world.level.pathfinder.BlockPathTypes; +import net.minecraft.world.level.pathfinder.PathType; import java.util.EnumSet; import java.util.List; @@ -86,15 +86,15 @@ public boolean canContinueToUse() { @Override public void start() { this.timeToRecalcPath = 0; - this.oldWaterCost = this.entity.getPathfindingMalus(BlockPathTypes.WATER); - this.entity.setPathfindingMalus(BlockPathTypes.WATER, 0.0F); + this.oldWaterCost = this.entity.getPathfindingMalus(PathType.WATER); + this.entity.setPathfindingMalus(PathType.WATER, 0.0F); } @Override public void stop() { this.followingEntity = null; this.navigation.stop(); - this.entity.setPathfindingMalus(BlockPathTypes.WATER, this.oldWaterCost); + this.entity.setPathfindingMalus(PathType.WATER, this.oldWaterCost); } @Override diff --git a/src/main/java/com/mcmoddev/golems/integration/AddonLoader.java b/src/main/java/com/mcmoddev/golems/integration/AddonLoader.java index 1281ce2d..8d3b37c5 100644 --- a/src/main/java/com/mcmoddev/golems/integration/AddonLoader.java +++ b/src/main/java/com/mcmoddev/golems/integration/AddonLoader.java @@ -7,10 +7,13 @@ import net.minecraft.server.packs.repository.Pack; import net.minecraft.server.packs.repository.PackSource; import net.minecraft.world.flag.FeatureFlagSet; -import net.minecraftforge.event.AddPackFindersEvent; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.resource.PathPackResources; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.event.AddPackFindersEvent; +import java.util.Optional; +import net.minecraft.server.packs.PackLocationInfo; +import net.minecraft.server.packs.PackSelectionConfig; +import net.neoforged.fml.ModList; +import net.neoforged.neoforge.server.ServerLifecycleHooks; import java.nio.file.Path; @@ -47,12 +50,12 @@ public final class AddonLoader { /** * Called from FMLCommonSetupEvent to determine which mods are loaded */ - public static void register() { + public static void register(IEventBus modEventBus) { isQuarkLoaded = ModList.get().isLoaded(QUARK); isMekanismLoaded = ModList.get().isLoaded(MEKANISM); isBiomesOPlentyLoaded = ModList.get().isLoaded(BIOMESOPLENTY); isThermalLoaded = ModList.get().isLoaded(THERMAL); - FMLJavaModLoadingContext.get().getModEventBus().addListener(AddonLoader::onAddPackFinders); + modEventBus.addListener(AddonLoader::onAddPackFinders); } /** @return true if Quark is present **/ @@ -107,13 +110,24 @@ private static void registerAddon(final AddPackFindersEvent event, final String // create pack data final String packId = ExtraGolems.MODID + ":" + packName; final Component packTitle = Component.literal(packName); + final Path path = ModList.get().getModFileById(ExtraGolems.MODID).getFile().findResource("/" + packName); - final Pack.Info info = new Pack.Info(packTitle, SharedConstants.DATA_PACK_FORMAT, FeatureFlagSet.of()); // create the pack - Pack pack = Pack.create(packId, packTitle, true, s -> new PathPackResources(packName, false, path), info, - PackType.SERVER_DATA, Pack.Position.TOP, true, PackSource.DEFAULT); + PackLocationInfo info = new PackLocationInfo(packId, packTitle, PackSource.DEFAULT, Optional.empty()); + Pack pack = Pack.readMetaAndCreate(info, new Pack.ResourcesSupplier() { + @Override + public net.minecraft.server.packs.PackResources openPrimary(PackLocationInfo info) { + return new net.minecraft.server.packs.PathPackResources(info, path); + } + @Override + public net.minecraft.server.packs.PackResources openFull(PackLocationInfo info, Pack.Metadata metadata) { + return new net.minecraft.server.packs.PathPackResources(info, path); + } + }, PackType.SERVER_DATA, new PackSelectionConfig(false, Pack.Position.TOP, false)); // consume the pack - packConsumer.accept(pack); + if (pack != null) { + packConsumer.accept(pack); + } }); } diff --git a/src/main/java/com/mcmoddev/golems/integration/JadeDescriptionManager.java b/src/main/java/com/mcmoddev/golems/integration/JadeDescriptionManager.java index 790e51d2..3b65ebf0 100644 --- a/src/main/java/com/mcmoddev/golems/integration/JadeDescriptionManager.java +++ b/src/main/java/com/mcmoddev/golems/integration/JadeDescriptionManager.java @@ -27,8 +27,8 @@ @WailaPlugin public class JadeDescriptionManager implements IWailaPlugin { - private static final ResourceLocation CONFIG_FG_COLOR = new ResourceLocation(ExtraGolems.MODID, "fg_color"); - private static final ResourceLocation CONFIG_SHOW_ICON = new ResourceLocation(ExtraGolems.MODID, "show_icon"); + private static final ResourceLocation CONFIG_FG_COLOR = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "fg_color"); + private static final ResourceLocation CONFIG_SHOW_ICON = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "show_icon"); @Override public void register(IWailaCommonRegistration registration) { @@ -44,7 +44,7 @@ public void registerClient(IWailaClientRegistration registration) { private static class EntityProvider extends GolemDescriptionManager implements IEntityComponentProvider { - private static final ResourceLocation UID = new ResourceLocation(ExtraGolems.MODID, "jade_entity_provider"); + private static final ResourceLocation UID = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "jade_entity_provider"); @Override public void appendTooltip(ITooltip iTooltip, EntityAccessor entityAccessor, IPluginConfig iPluginConfig) { @@ -61,7 +61,7 @@ public void appendTooltip(ITooltip iTooltip, EntityAccessor entityAccessor, IPlu // create elements final List lines = getEntityDescription(entity, oContainer.get()); for(Component line : lines) { - iTooltip.add(iTooltip.getElementHelper().text(Component.literal(line.getString()).withStyle(fgColor))); + iTooltip.add(Component.literal(line.getString()).withStyle(fgColor)); } } } diff --git a/src/main/java/com/mcmoddev/golems/item/GolemSpellItem.java b/src/main/java/com/mcmoddev/golems/item/GolemSpellItem.java index b71ef0c1..7722e1ad 100644 --- a/src/main/java/com/mcmoddev/golems/item/GolemSpellItem.java +++ b/src/main/java/com/mcmoddev/golems/item/GolemSpellItem.java @@ -5,8 +5,8 @@ import com.mcmoddev.golems.block.GolemHeadBlock; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; -import net.minecraft.core.BlockSource; import net.minecraft.core.Direction; +import net.minecraft.core.dispenser.BlockSource; import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; import net.minecraft.core.dispenser.DispenseItemBehavior; import net.minecraft.network.chat.Component; @@ -32,8 +32,8 @@ public static void registerDispenserBehavior() { final DispenseItemBehavior behavior = new DefaultDispenseItemBehavior() { @Override protected ItemStack execute(BlockSource blockSource, ItemStack itemStack) { - final Level level = blockSource.getLevel(); - final BlockPos blockPos = blockSource.getPos().relative(blockSource.getBlockState().getValue(DispenserBlock.FACING)); + final Level level = blockSource.level(); + final BlockPos blockPos = blockSource.pos().relative(blockSource.state().getValue(DispenserBlock.FACING)); final BlockState blockState = level.getBlockState(blockPos); if (ExtraGolems.CONFIG.enableUseSpellItem() && blockState.is(Blocks.CARVED_PUMPKIN)) { final Direction facing = blockState.getValue(CarvedPumpkinBlock.FACING); diff --git a/src/main/java/com/mcmoddev/golems/item/SpawnGolemItem.java b/src/main/java/com/mcmoddev/golems/item/SpawnGolemItem.java index 5c92956f..4cd8151b 100644 --- a/src/main/java/com/mcmoddev/golems/item/SpawnGolemItem.java +++ b/src/main/java/com/mcmoddev/golems/item/SpawnGolemItem.java @@ -31,7 +31,7 @@ public final class SpawnGolemItem extends Item { - public static final ResourceLocation BEDROCK_GOLEM = new ResourceLocation(ExtraGolems.MODID, "bedrock"); + public static final ResourceLocation BEDROCK_GOLEM = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "bedrock"); public SpawnGolemItem(final Item.Properties properties) { super(properties); @@ -64,7 +64,7 @@ public InteractionResult useOn(UseOnContext context) { final GolemBase entity = GolemBase.create(level, BEDROCK_GOLEM); entity.moveTo(spawnPos.getX(), spawnPos.getY(), spawnPos.getZ()); level.addFreshEntity(entity); - entity.finalizeSpawn((ServerLevel) level, level.getCurrentDifficultyAt(spawnPos), MobSpawnType.SPAWN_EGG, null, null); + entity.finalizeSpawn((ServerLevel) level, level.getCurrentDifficultyAt(spawnPos), MobSpawnType.SPAWN_EGG, null); entity.setInvulnerable(true); } // spawn the entity! @@ -110,9 +110,9 @@ public static void spawnParticles(final Level world, final double x, final doubl } @Override - public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, TooltipFlag flag) { - if(level != null) { - final GolemContainer container = GolemContainer.getOrCreate(level.registryAccess(), BEDROCK_GOLEM); + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag flag) { + if(context.registries() != null) { + final GolemContainer container = GolemContainer.getOrCreate(context.registries(), BEDROCK_GOLEM); final Component name = container.getTypeName(); tooltip.add(Component.translatable(getDescriptionId() + ".tooltip", name)); } diff --git a/src/main/java/com/mcmoddev/golems/network/ClientBoundGolemContainerPacket.java b/src/main/java/com/mcmoddev/golems/network/ClientBoundGolemContainerPacket.java index 6c1960d8..57d83955 100644 --- a/src/main/java/com/mcmoddev/golems/network/ClientBoundGolemContainerPacket.java +++ b/src/main/java/com/mcmoddev/golems/network/ClientBoundGolemContainerPacket.java @@ -6,68 +6,49 @@ package com.mcmoddev.golems.network; +import com.mcmoddev.golems.ExtraGolems; import com.mcmoddev.golems.client.ClientUtils; import com.mcmoddev.golems.data.GolemContainer; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.network.NetworkEvent; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.network.handling.IPayloadContext; -import java.util.function.Supplier; - -public class ClientBoundGolemContainerPacket { +public record ClientBoundGolemContainerPacket(byte action) implements CustomPacketPayload { public static final byte RESET = (byte) 1; public static final byte POPULATE = (byte) 2; public static final byte RESET_AND_POPULATE = RESET | POPULATE; - private final byte action; + public static final CustomPacketPayload.Type TYPE = + new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "golem_container")); - public ClientBoundGolemContainerPacket(byte action) { - this.action = action; - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.BYTE, + ClientBoundGolemContainerPacket::action, + ClientBoundGolemContainerPacket::new + ); + @Override + public CustomPacketPayload.Type type() { + return TYPE; + } /** - * Reads the raw packet data from the data stream. - * - * @param buf the PacketBuffer - * @return a new instance of the packet based on the PacketBuffer - */ - public static ClientBoundGolemContainerPacket fromBytes(final FriendlyByteBuf buf) { - final byte action = buf.readByte(); - return new ClientBoundGolemContainerPacket(action); - } - - /** - * Writes the raw packet data to the data stream. - * - * @param msg the packet - * @param buf the PacketBuffer - */ - public static void toBytes(final ClientBoundGolemContainerPacket msg, final FriendlyByteBuf buf) { - buf.writeByte(msg.action); - } - - /** - * Handles the packet when it is received. - * - * @param message the packet - * @param contextSupplier the NetworkEvent.Context supplier - */ - public static void handlePacket(final ClientBoundGolemContainerPacket message, final Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - if (context.getDirection().getReceptionSide() == LogicalSide.CLIENT) { - context.enqueueWork(() -> { - // reset golem containers - if((message.action & RESET) > 0) { - GolemContainer.reset(); - } - // populate golem containers - if((message.action & POPULATE) > 0) { - ClientUtils.getClientRegistryAccess().ifPresent(GolemContainer::populate); - } - }); - } - context.setPacketHandled(true); - } + * Handles the packet when it is received. + */ + public static void handlePacket(final ClientBoundGolemContainerPacket message, final IPayloadContext context) { + context.enqueueWork(() -> { + // reset golem containers + if((message.action & RESET) > 0) { + GolemContainer.reset(); + } + // populate golem containers + if((message.action & POPULATE) > 0) { + ClientUtils.getClientRegistryAccess().ifPresent(GolemContainer::populate); + } + }); + } } diff --git a/src/main/java/com/mcmoddev/golems/network/EGNetwork.java b/src/main/java/com/mcmoddev/golems/network/EGNetwork.java index d7257769..db7c1814 100644 --- a/src/main/java/com/mcmoddev/golems/network/EGNetwork.java +++ b/src/main/java/com/mcmoddev/golems/network/EGNetwork.java @@ -2,20 +2,16 @@ import com.mcmoddev.golems.ExtraGolems; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.simple.SimpleChannel; - -import java.util.Optional; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; public final class EGNetwork { private static final String PROTOCOL_VERSION = "5"; - public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel(new ResourceLocation(ExtraGolems.MODID, "channel"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals); - - public static void register() { - int messageId = 0; - CHANNEL.registerMessage(messageId++, ServerBoundSpawnGolemPacket.class, ServerBoundSpawnGolemPacket::toBytes, ServerBoundSpawnGolemPacket::fromBytes, ServerBoundSpawnGolemPacket::handlePacket, Optional.of(NetworkDirection.PLAY_TO_SERVER)); - CHANNEL.registerMessage(messageId++, ClientBoundGolemContainerPacket.class, ClientBoundGolemContainerPacket::toBytes, ClientBoundGolemContainerPacket::fromBytes, ClientBoundGolemContainerPacket::handlePacket, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); + + public static void register(final RegisterPayloadHandlersEvent event) { + final PayloadRegistrar registrar = event.registrar(ExtraGolems.MODID).versioned(PROTOCOL_VERSION); + registrar.playToServer(ServerBoundSpawnGolemPacket.TYPE, ServerBoundSpawnGolemPacket.STREAM_CODEC, ServerBoundSpawnGolemPacket::handlePacket); + registrar.playToClient(ClientBoundGolemContainerPacket.TYPE, ClientBoundGolemContainerPacket.STREAM_CODEC, ClientBoundGolemContainerPacket::handlePacket); } } diff --git a/src/main/java/com/mcmoddev/golems/network/ServerBoundSpawnGolemPacket.java b/src/main/java/com/mcmoddev/golems/network/ServerBoundSpawnGolemPacket.java index 526a11fa..ce7ce128 100644 --- a/src/main/java/com/mcmoddev/golems/network/ServerBoundSpawnGolemPacket.java +++ b/src/main/java/com/mcmoddev/golems/network/ServerBoundSpawnGolemPacket.java @@ -12,104 +12,75 @@ import com.mcmoddev.golems.ExtraGolems; import com.mcmoddev.golems.data.golem.Golem; import com.mcmoddev.golems.entity.GolemBase; +import io.netty.buffer.ByteBuf; import net.minecraft.core.Registry; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraftforge.fml.LogicalSide; -import net.minecraftforge.network.NetworkEvent; +import net.neoforged.neoforge.network.handling.IPayloadContext; import java.util.ArrayList; import java.util.List; -import java.util.function.Supplier; -public class ServerBoundSpawnGolemPacket { +public record ServerBoundSpawnGolemPacket(List ids) implements CustomPacketPayload { - private List ids; + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>( + ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, "spawn_golem")); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ResourceLocation.STREAM_CODEC.apply(ByteBufCodecs.list()), + ServerBoundSpawnGolemPacket::ids, + ServerBoundSpawnGolemPacket::new); public ServerBoundSpawnGolemPacket(ResourceLocation id) { this(ImmutableList.of(id)); } - public ServerBoundSpawnGolemPacket(List ids) { - this.ids = ImmutableList.copyOf(ids); - } - - /** - * Reads the raw packet data from the data stream. - * - * @param buf the PacketBuffer - * @return a new instance of the packet based on the PacketBuffer - */ - public static ServerBoundSpawnGolemPacket fromBytes(final FriendlyByteBuf buf) { - // read number of entries - final int count = buf.readInt(); - // create list - final List list = new ArrayList<>(count); - // read each entry - for(int i = 0; i < count; i++) { - list.add(buf.readResourceLocation()); - } - return new ServerBoundSpawnGolemPacket(list); - } - - /** - * Writes the raw packet data to the data stream. - * - * @param msg the packet - * @param buf the PacketBuffer - */ - public static void toBytes(final ServerBoundSpawnGolemPacket msg, final FriendlyByteBuf buf) { - // write number of entries - buf.writeInt(msg.ids.size()); - // write each entry - for(ResourceLocation id : msg.ids) { - buf.writeResourceLocation(id); - } + @Override + public CustomPacketPayload.Type type() { + return TYPE; } /** * Handles the packet when it is received. - * - * @param message the packet - * @param contextSupplier the NetworkEvent.Context supplier */ - public static void handlePacket(final ServerBoundSpawnGolemPacket message, final Supplier contextSupplier) { - NetworkEvent.Context context = contextSupplier.get(); - if (context.getDirection().getReceptionSide() == LogicalSide.SERVER && context.getSender() != null) { - context.enqueueWork(() -> { - // validate player - final ServerPlayer player = context.getSender(); - // validate permissions - if(!player.hasPermissions(ExtraGolems.CONFIG.debugPermissionLevel())) { - return; - } - // validate item - if(!(player.getMainHandItem().is(EGRegistry.ItemReg.GUIDE_BOOK.get()) || player.getOffhandItem().is(EGRegistry.ItemReg.GUIDE_BOOK.get()))) { - return; - } - // iterate list - for(ResourceLocation id : message.ids) { - // validate golem ID - final Registry registry = player.level().registryAccess().registryOrThrow(EGRegistry.Keys.GOLEM); - if(!registry.keySet().contains(id)) { - return; - } - // create a golem at this position - final GolemBase golem = GolemBase.create(player.level(), id); - golem.setPlayerCreated(true); - golem.copyPosition(player); - // spawn the golem - player.level().addFreshEntity(golem); - golem.finalizeSpawn((ServerLevelAccessor) player.level(), player.level().getCurrentDifficultyAt(player.blockPosition()), MobSpawnType.MOB_SUMMONED, null, null); - // send feedback - player.displayClientMessage(Component.translatable("command.golem.success", id, (int) player.getX(), (int) player.getY(), (int) player.getZ()), false); - } - }); - } - context.setPacketHandled(true); + public static void handlePacket(final ServerBoundSpawnGolemPacket message, final IPayloadContext context) { + context.enqueueWork(() -> { + // validate player + final ServerPlayer player = (ServerPlayer) context.player(); + // validate permissions + if (!player.hasPermissions(ExtraGolems.CONFIG.debugPermissionLevel())) { + return; + } + // validate item + if (!(player.getMainHandItem().is(EGRegistry.ItemReg.GUIDE_BOOK.get()) + || player.getOffhandItem().is(EGRegistry.ItemReg.GUIDE_BOOK.get()))) { + return; + } + // iterate list + for (ResourceLocation id : message.ids) { + // validate golem ID + final Registry registry = player.level().registryAccess().registryOrThrow(EGRegistry.Keys.GOLEM); + if (!registry.keySet().contains(id)) { + return; + } + // create a golem at this position + final GolemBase golem = GolemBase.create(player.level(), id); + golem.setPlayerCreated(true); + golem.copyPosition(player); + // spawn the golem + player.level().addFreshEntity(golem); + golem.finalizeSpawn((ServerLevelAccessor) player.level(), + player.level().getCurrentDifficultyAt(player.blockPosition()), MobSpawnType.MOB_SUMMONED, null); + // send feedback + player.displayClientMessage(Component.translatable("command.golem.success", id, (int) player.getX(), + (int) player.getY(), (int) player.getZ()), false); + } + }); } } diff --git a/src/main/java/com/mcmoddev/golems/network/SummonGolemCommand.java b/src/main/java/com/mcmoddev/golems/network/SummonGolemCommand.java index 75c8e0fe..9dbc98cf 100644 --- a/src/main/java/com/mcmoddev/golems/network/SummonGolemCommand.java +++ b/src/main/java/com/mcmoddev/golems/network/SummonGolemCommand.java @@ -59,7 +59,7 @@ public static void register(CommandDispatcher commandSource) private static int summonGolem(CommandSourceStack source, ResourceLocation id, BlockPos pos, CompoundTag tag) throws CommandSyntaxException { // hard-coded namespace support if ("minecraft".equals(id.getNamespace())) { - id = new ResourceLocation(ExtraGolems.MODID, id.getPath()); + id = ResourceLocation.fromNamespaceAndPath(ExtraGolems.MODID, id.getPath()); } // validate the id final Registry registry = source.registryAccess().registryOrThrow(EGRegistry.Keys.GOLEM); @@ -72,7 +72,7 @@ private static int summonGolem(CommandSourceStack source, ResourceLocation id, B entity.load(tag); entity.moveTo(pos.getX() + 0.5D, pos.getY(), pos.getZ() + 0.5D); source.getLevel().addFreshEntity(entity); - entity.finalizeSpawn(source.getLevel(), source.getLevel().getCurrentDifficultyAt(pos), MobSpawnType.COMMAND, null, tag); + entity.finalizeSpawn(source.getLevel(), source.getLevel().getCurrentDifficultyAt(pos), MobSpawnType.COMMAND, null); ResourceLocation finalId = id; source.sendSuccess(() -> Component.translatable("command.golem.success", finalId, pos.getX(), pos.getY(), pos.getZ()), true); return 1; diff --git a/src/main/java/com/mcmoddev/golems/util/DeferredBlockState.java b/src/main/java/com/mcmoddev/golems/util/DeferredBlockState.java index 3437f874..7f159a80 100644 --- a/src/main/java/com/mcmoddev/golems/util/DeferredBlockState.java +++ b/src/main/java/com/mcmoddev/golems/util/DeferredBlockState.java @@ -14,7 +14,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.Property; -import net.minecraftforge.registries.ForgeRegistries; +import net.minecraft.core.registries.BuiltInRegistries; import java.util.Map; import java.util.Optional; @@ -65,7 +65,7 @@ public Map getProperties() { public BlockState get() { if(null == blockState) { // resolve block state - final Block block = ForgeRegistries.BLOCKS.getValue(this.block); + final Block block = BuiltInRegistries.BLOCK.get(this.block); if(null == block) { throw new RuntimeException("[ExtraGolems.DeferredBlockState] Unknown block with ID '" + this.block.toString() + "'"); } diff --git a/src/main/java/com/mcmoddev/golems/util/EGAttributeUtils.java b/src/main/java/com/mcmoddev/golems/util/EGAttributeUtils.java index 284032de..d2ba701d 100644 --- a/src/main/java/com/mcmoddev/golems/util/EGAttributeUtils.java +++ b/src/main/java/com/mcmoddev/golems/util/EGAttributeUtils.java @@ -1,5 +1,6 @@ package com.mcmoddev.golems.util; +import net.minecraft.core.Holder; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.AttributeMap; @@ -17,9 +18,9 @@ public final class EGAttributeUtils { * @param attributeMap the attribute map instance to modify * @param baseValues a map of attributes and base values to assign **/ - public static void setBaseValues(final AttributeMap attributeMap, final Map baseValues) { + public static void setBaseValues(final AttributeMap attributeMap, final Map, Double> baseValues) { // iterate map entries - for(Map.Entry entry : baseValues.entrySet()) { + for(Map.Entry, Double> entry : baseValues.entrySet()) { // verify attribute exists if(!attributeMap.hasAttribute(entry.getKey())) { continue; @@ -35,7 +36,7 @@ public static void setBaseValues(final AttributeMap attributeMap, final Map ITEM_OR_STACK_CODEC = Codec.either(ForgeRegistries.ITEMS.getCodec(), ItemStack.CODEC) + public static final Codec ITEM_OR_STACK_CODEC = Codec.either(BuiltInRegistries.ITEM.byNameCodec(), ItemStack.CODEC) .xmap(either -> either.map(ItemStack::new, Function.identity()), - stack -> stack.getCount() == 1 && !stack.hasTag() + stack -> stack.getCount() == 1 && stack.getComponentsPatch().isEmpty() ? Either.left(stack.getItem()) : Either.right(stack)); @@ -33,8 +33,8 @@ public class EGCodecUtils { /** {@link MinMaxBounds.Ints} codec **/ public static final Codec MIN_MAX_INTS_DIRECT_CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.INT.optionalFieldOf("min").forGetter(o -> Optional.ofNullable(o.getMin())), - Codec.INT.optionalFieldOf("max").forGetter(o -> Optional.ofNullable(o.getMax())) + Codec.INT.optionalFieldOf("min").forGetter(MinMaxBounds.Ints::min), + Codec.INT.optionalFieldOf("max").forGetter(MinMaxBounds.Ints::max) ).apply(instance, (p1, p2) -> { if(p1.isPresent() && p2.isEmpty()) return MinMaxBounds.Ints.atLeast(p1.get()); if(p1.isEmpty() && p2.isPresent()) return MinMaxBounds.Ints.atMost(p2.get()); @@ -44,12 +44,12 @@ public class EGCodecUtils { /** {@link MinMaxBounds.Ints} or {@link Codec#INT} codec **/ public static final Codec MIN_MAX_INTS_CODEC = Codec.either(Codec.INT, MIN_MAX_INTS_DIRECT_CODEC) .xmap(either -> either.map(MinMaxBounds.Ints::exactly, Function.identity()), - o -> (o.getMin() != null && o.getMax() != null && o.getMin().equals(o.getMax())) ? Either.left(o.getMin()) : Either.right(o)); + o -> (o.min().isPresent() && o.max().isPresent() && o.min().equals(o.max())) ? Either.left(o.min().get()) : Either.right(o)); /** {@link MinMaxBounds.Ints} codec **/ public static final Codec MIN_MAX_DOUBLES_DIRECT_CODEC = RecordCodecBuilder.create(instance -> instance.group( - Codec.DOUBLE.optionalFieldOf("min").forGetter(o -> Optional.ofNullable(o.getMin())), - Codec.DOUBLE.optionalFieldOf("max").forGetter(o -> Optional.ofNullable(o.getMax())) + Codec.DOUBLE.optionalFieldOf("min").forGetter(MinMaxBounds.Doubles::min), + Codec.DOUBLE.optionalFieldOf("max").forGetter(MinMaxBounds.Doubles::max) ).apply(instance, (p1, p2) -> { if(p1.isPresent() && p2.isEmpty()) return MinMaxBounds.Doubles.atLeast(p1.get()); if(p1.isEmpty() && p2.isPresent()) return MinMaxBounds.Doubles.atMost(p2.get()); @@ -59,11 +59,11 @@ public class EGCodecUtils { /** {@link MinMaxBounds.Doubles} or {@link Codec#DOUBLE} codec **/ public static final Codec MIN_MAX_DOUBLES_CODEC = Codec.either(Codec.DOUBLE, MIN_MAX_DOUBLES_DIRECT_CODEC) .xmap(either -> either.map(MinMaxBounds.Doubles::exactly, Function.identity()), - o -> (o.getMin() != null && o.getMax() != null && o.getMin().equals(o.getMax())) ? Either.left(o.getMin()) : Either.right(o)); + o -> (o.min().isPresent() && o.max().isPresent() && o.min().equals(o.max())) ? Either.left(o.min().get()) : Either.right(o)); /** {@link MobEffectInstance} codec **/ public static final Codec MOB_EFFECT_INSTANCE_CODEC = RecordCodecBuilder.create(instance -> instance.group( - ForgeRegistries.MOB_EFFECTS.getCodec().fieldOf("id").forGetter(MobEffectInstance::getEffect), + BuiltInRegistries.MOB_EFFECT.holderByNameCodec().fieldOf("id").forGetter(MobEffectInstance::getEffect), Codec.INT.optionalFieldOf("duration", 0).forGetter(MobEffectInstance::getDuration), Codec.INT.optionalFieldOf("amplifier", 0).forGetter(MobEffectInstance::getAmplifier), Codec.BOOL.optionalFieldOf("ambient", false).forGetter(MobEffectInstance::isAmbient), @@ -121,9 +121,9 @@ private static Codec hexIntCodec() { */ public static Codec boundedIntCodec(final int min, final int max) { Function> function = (instance) -> { - if (instance.getMin() != null && instance.getMin() < min) { + if (instance.min().isPresent() && instance.min().get() < min) { return DataResult.error(() -> "Value too low. minimum " + min + "; provided [" + instance + "]"); - } else if(instance.getMax() != null && instance.getMax() > max) { + } else if(instance.max().isPresent() && instance.max().get() > max) { return DataResult.error(() -> "Value too high. maximum " + max + "; provided [" + instance + "]"); } else { return DataResult.success(instance); diff --git a/src/main/java/com/mcmoddev/golems/util/GolemModifyBlocksEvent.java b/src/main/java/com/mcmoddev/golems/util/GolemModifyBlocksEvent.java index 326dc736..5918bd08 100644 --- a/src/main/java/com/mcmoddev/golems/util/GolemModifyBlocksEvent.java +++ b/src/main/java/com/mcmoddev/golems/util/GolemModifyBlocksEvent.java @@ -2,12 +2,12 @@ import com.mcmoddev.golems.data.behavior.util.AoeShape; import com.mcmoddev.golems.entity.IExtraGolem; -import com.mcmoddev.golems.util.AoeMapper; import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.eventbus.api.Cancelable; +import net.neoforged.neoforge.event.entity.living.LivingEvent; +import net.neoforged.bus.api.ICancellableEvent; +import net.minecraft.world.entity.LivingEntity; import java.util.Collection; import java.util.HashSet; @@ -17,8 +17,13 @@ * This event exists for other mods or addons to handle and modify * when the entity modifies a large number of blocks */ -@Cancelable -public final class GolemModifyBlocksEvent extends LivingEvent { +public final class GolemModifyBlocksEvent extends LivingEvent implements ICancellableEvent { + + public enum Result { + DENY, + DEFAULT, + ALLOW + } private Set blacklist; private AoeMapper aoeMapper; @@ -32,7 +37,7 @@ public final class GolemModifyBlocksEvent extends LivingEvent { private int updateFlag; public GolemModifyBlocksEvent(final IExtraGolem golem, final BlockPos center, final int radius, final AoeShape shape, final AoeMapper aoeMapper) { - super(golem.asMob()); + super((LivingEntity)golem); this.setResult(Result.ALLOW); this.blacklist = new HashSet<>(); this.entity = golem; @@ -51,6 +56,16 @@ public IExtraGolem getGolem() { return entity; } + private Result result = Result.DEFAULT; + + public Result getResult() { + return result; + } + + public void setResult(Result result) { + this.result = result; + } + public AoeMapper getMapper() { return this.aoeMapper; } diff --git a/src/main/java/com/mcmoddev/golems/util/SoundTypeRegistry.java b/src/main/java/com/mcmoddev/golems/util/SoundTypeRegistry.java index cae905d4..a634100f 100644 --- a/src/main/java/com/mcmoddev/golems/util/SoundTypeRegistry.java +++ b/src/main/java/com/mcmoddev/golems/util/SoundTypeRegistry.java @@ -124,7 +124,7 @@ public static void register() { } public static SoundType register(final String id, final SoundType soundType) { - return register(new ResourceLocation(id), soundType); + return register(ResourceLocation.parse(id), soundType); } public static SoundType register(final ResourceLocation id, final SoundType soundType) { diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml deleted file mode 100644 index 144bc8d0..00000000 --- a/src/main/resources/META-INF/mods.toml +++ /dev/null @@ -1,49 +0,0 @@ -modLoader="javafml" -loaderVersion="[47,)" -license="zlib License" -issueTrackerURL="https://github.com/MinecraftModDevelopmentMods/Extra-Golems/issues" - -[[mods]] - modId="golems" - version="20.1.0.2" - displayName="Extra Golems" - credits="TheGlitch76, jriwanek, AtelierAmber, and translators - Thanks!" - authors="skyjay1 and the MMD Team" - description='''Adds dozens of golems with unique textures and abilities!''' - logoFile="golem_logo.png" -[[dependencies.golems]] - modId="forge" - mandatory=true - versionRange="[47,)" - ordering="NONE" - side="BOTH" -[[dependencies.golems]] - modId="theoneprobe" - mandatory=false - versionRange="[1.20.1-10.0.1,)" - ordering="NONE" - side="BOTH" -[[dependencies.golems]] - modId="jade" - mandatory=false - versionRange="[11.7.1,)" - ordering="NONE" - side="CLIENT" -[[dependencies.golems]] - modId="quark" - mandatory=false - versionRange="[4.0-433,)" - ordering="NONE" - side="BOTH" -[[dependencies.golems]] - modId="biomesoplenty" - mandatory=false - versionRange="[1.20.1-18.0.0.598,)" - ordering="NONE" - side="BOTH" -[[dependencies.golems]] - modId="thermal" - mandatory=false - versionRange="[11.0.0,)" - ordering="NONE" - side="BOTH" diff --git a/src/main/resources/assets/golems/lang/ja_jp.json b/src/main/resources/assets/golems/lang/ja_jp.json new file mode 100644 index 00000000..6a390dfb --- /dev/null +++ b/src/main/resources/assets/golems/lang/ja_jp.json @@ -0,0 +1,509 @@ +{ + "_comment": "Items and Blocks used by this mod", + "item.golems.golem_spell": "ゴーレム呪文", + "item.golems.spawn_bedrock_golem": "岩盤ゴーレムをスポーン", + "item.golems.spawn_bedrock_golem.tooltip": "%1$sを召喚するために使用\n既存の%1$sに使用すると\n削除できます", + "block.golems.golem_head": "ゴーレムの頭", + "_comment": "These will only show up in something like JEI", + "block.golems.light_provider": "動的ゴーレム光源", + "block.golems.power_provider": "動的ゴーレム電源", + "_comment": "Extra Golems", + "entity.golems.golem.acacia_log": "アカシアの原木ゴーレム", + "entity.golems.golem.amethyst": "アメジストゴーレム", + "entity.golems.golem.ancient_debris": "古代の残骸ゴーレム", + "entity.golems.golem.andesite": "磨かれた安山岩ゴーレム", + "entity.golems.golem.bamboo_wood": "竹ゴーレム", + "entity.golems.golem.basalt": "磨かれた玄武岩ゴーレム", + "entity.golems.golem.bedrock": "岩盤ゴーレム", + "entity.golems.golem.birch_log": "シラカバの原木ゴーレム", + "entity.golems.golem.blackstone": "磨かれたブラックストーンゴーレム", + "entity.golems.golem.black_concrete": "黒色のコンクリートゴーレム", + "entity.golems.golem.black_glazed_terracotta": "黒色の彩釉テラコッタゴーレム", + "entity.golems.golem.black_stained_glass": "黒色の色付きガラスゴーレム", + "entity.golems.golem.black_terracotta": "黒色のテラコッタゴーレム", + "entity.golems.golem.black_wool": "黒色の羊毛ゴーレム", + "entity.golems.golem.blue_concrete": "青色のコンクリートゴーレム", + "entity.golems.golem.blue_glazed_terracotta": "青色の彩釉テラコッタゴーレム", + "entity.golems.golem.blue_stained_glass": "青色の色付きガラスゴーレム", + "entity.golems.golem.blue_terracotta": "青色のテラコッタゴーレム", + "entity.golems.golem.blue_wool": "青色の羊毛ゴーレム", + "entity.golems.golem.bone": "骨ゴーレム", + "entity.golems.golem.bookshelf": "司書ゴーレム", + "entity.golems.golem.brain_coral": "脳サンゴゴーレム", + "entity.golems.golem.brick": "レンガゴーレム", + "entity.golems.golem.brown_concrete": "茶色のコンクリートゴーレム", + "entity.golems.golem.brown_glazed_terracotta": "茶色の彩釉テラコッタゴーレム", + "entity.golems.golem.brown_mushroom": "茶色のキノコゴーレム", + "entity.golems.golem.brown_stained_glass": "茶色の色付きガラスゴーレム", + "entity.golems.golem.brown_terracotta": "茶色のテラコッタゴーレム", + "entity.golems.golem.brown_wool": "茶色の羊毛ゴーレム", + "entity.golems.golem.bubble_coral": "ミズタマサンゴゴーレム", + "entity.golems.golem.charcoal": "木炭ゴーレム", + "entity.golems.golem.cherry_log": "サクラの原木ゴーレム", + "entity.golems.golem.clay": "粘土ゴーレム", + "entity.golems.golem.coal": "石炭ゴーレム", + "entity.golems.golem.copper": "銅ゴーレム", + "entity.golems.golem.crafting": "作業台ゴーレム", + "entity.golems.golem.crimson_stem": "真紅の幹ゴーレム", + "entity.golems.golem.crying_obsidian": "泣く黒曜石ゴーレム", + "entity.golems.golem.cyan_concrete": "青緑色のコンクリートゴーレム", + "entity.golems.golem.cyan_glazed_terracotta": "青緑色の彩釉テラコッタゴーレム", + "entity.golems.golem.cyan_stained_glass": "青緑色の色付きガラスゴーレム", + "entity.golems.golem.cyan_terracotta": "青緑色のテラコッタゴーレム", + "entity.golems.golem.cyan_wool": "青緑色の羊毛ゴーレム", + "entity.golems.golem.dark_oak_log": "ダークオークの原木ゴーレム", + "entity.golems.golem.dead_brain_coral": "死んだ脳サンゴゴーレム", + "entity.golems.golem.dead_bubble_coral": "死んだミズタマサンゴゴーレム", + "entity.golems.golem.dead_fire_coral": "死んだ火サンゴゴーレム", + "entity.golems.golem.dead_horn_coral": "死んだツノサンゴゴーレム", + "entity.golems.golem.dead_tube_coral": "死んだチューブサンゴゴーレム", + "entity.golems.golem.deepslate": "磨かれた深層岩ゴーレム", + "entity.golems.golem.diamond": "ダイヤモンドゴーレム", + "entity.golems.golem.diorite": "磨かれた閃緑岩ゴーレム", + "entity.golems.golem.dispenser": "ディスペンサーゴーレム", + "entity.golems.golem.dried_kelp": "乾燥した昆布ゴーレム", + "entity.golems.golem.emerald": "エメラルドゴーレム", + "entity.golems.golem.end_stone": "エンドストーンゴーレム", + "entity.golems.golem.exposed_copper": "風化した銅ゴーレム", + "entity.golems.golem.fire_coral": "火サンゴゴーレム", + "entity.golems.golem.furnace": "かまどゴーレム", + "entity.golems.golem.glass": "ガラスゴーレム", + "entity.golems.golem.glowstone": "グロウストーンゴーレム", + "entity.golems.golem.gold": "金ゴーレム", + "entity.golems.golem.granite": "磨かれた花崗岩ゴーレム", + "entity.golems.golem.gray_concrete": "灰色のコンクリートゴーレム", + "entity.golems.golem.gray_glazed_terracotta": "灰色の彩釉テラコッタゴーレム", + "entity.golems.golem.gray_stained_glass": "灰色の色付きガラスゴーレム", + "entity.golems.golem.gray_terracotta": "灰色のテラコッタゴーレム", + "entity.golems.golem.gray_wool": "灰色の羊毛ゴーレム", + "entity.golems.golem.green_concrete": "緑色のコンクリートゴーレム", + "entity.golems.golem.green_glazed_terracotta": "緑色の彩釉テラコッタゴーレム", + "entity.golems.golem.green_stained_glass": "緑色の色付きガラスゴーレム", + "entity.golems.golem.green_terracotta": "緑色のテラコッタゴーレム", + "entity.golems.golem.green_wool": "緑色の羊毛ゴーレム", + "entity.golems.golem.hay": "干し草ゴーレム", + "entity.golems.golem.honey": "ハチミツゴーレム", + "entity.golems.golem.honeycomb": "ハニカムゴーレム", + "entity.golems.golem.horn_coral": "ツノサンゴゴーレム", + "entity.golems.golem.ice": "氷ゴーレム", + "entity.golems.golem.jungle_log": "ジャングルの原木ゴーレム", + "entity.golems.golem.lapis": "ラピスラズリゴーレム", + "entity.golems.golem.leaves": "葉ゴーレム", + "entity.golems.golem.light_blue_concrete": "空色のコンクリートゴーレム", + "entity.golems.golem.light_blue_glazed_terracotta": "空色の彩釉テラコッタゴーレム", + "entity.golems.golem.light_blue_stained_glass": "空色の色付きガラスゴーレム", + "entity.golems.golem.light_blue_terracotta": "空色のテラコッタゴーレム", + "entity.golems.golem.light_blue_wool": "空色の羊毛ゴーレム", + "entity.golems.golem.light_gray_concrete": "薄灰色のコンクリートゴーレム", + "entity.golems.golem.light_gray_glazed_terracotta": "薄灰色の彩釉テラコッタゴーレム", + "entity.golems.golem.light_gray_stained_glass": "薄灰色の色付きガラスゴーレム", + "entity.golems.golem.light_gray_terracotta": "薄灰色のテラコッタゴーレム", + "entity.golems.golem.light_gray_wool": "薄灰色の羊毛ゴーレム", + "entity.golems.golem.lime_concrete": "黄緑色のコンクリートゴーレム", + "entity.golems.golem.lime_glazed_terracotta": "黄緑色の彩釉テラコッタゴーレム", + "entity.golems.golem.lime_stained_glass": "黄緑色の色付きガラスゴーレム", + "entity.golems.golem.lime_terracotta": "黄緑色のテラコッタゴーレム", + "entity.golems.golem.lime_wool": "黄緑色の羊毛ゴーレム", + "entity.golems.golem.magenta_concrete": "赤紫色のコンクリートゴーレム", + "entity.golems.golem.magenta_glazed_terracotta": "赤紫色の彩釉テラコッタゴーレム", + "entity.golems.golem.magenta_stained_glass": "赤紫色の色付きガラスゴーレム", + "entity.golems.golem.magenta_terracotta": "赤紫色のテラコッタゴーレム", + "entity.golems.golem.magenta_wool": "赤紫色の羊毛ゴーレム", + "entity.golems.golem.magma": "マグマゴーレム", + "entity.golems.golem.mangrove_log": "マングローブの原木ゴーレム", + "entity.golems.golem.mangrove_roots": "マングローブの根ゴーレム", + "entity.golems.golem.melon": "スイカゴーレム", + "entity.golems.golem.moss": "苔ゴーレム", + "entity.golems.golem.mud": "泥ゴーレム", + "entity.golems.golem.muddy_mangrove_roots": "泥だらけのマングローブの根ゴーレム", + "entity.golems.golem.netherite": "ネザライトゴーレム", + "entity.golems.golem.nether_brick": "ネザーレンガゴーレム", + "entity.golems.golem.nether_wart": "ネザーウォートゴーレム", + "entity.golems.golem.oak_log": "オークの原木ゴーレム", + "entity.golems.golem.obsidian": "黒曜石ゴーレム", + "entity.golems.golem.ochre_froglight": "黄土色のカエルライトゴーレム", + "entity.golems.golem.orange_concrete": "橙色のコンクリートゴーレム", + "entity.golems.golem.orange_glazed_terracotta": "橙色の彩釉テラコッタゴーレム", + "entity.golems.golem.orange_stained_glass": "橙色の色付きガラスゴーレム", + "entity.golems.golem.orange_terracotta": "橙色のテラコッタゴーレム", + "entity.golems.golem.orange_wool": "橙色の羊毛ゴーレム", + "entity.golems.golem.oxidized_copper": "酸化した銅ゴーレム", + "entity.golems.golem.packed_mud": "固めた泥ゴーレム", + "entity.golems.golem.pearlescent_froglight": "真珠色のカエルライトゴーレム", + "entity.golems.golem.pink_concrete": "桃色のコンクリートゴーレム", + "entity.golems.golem.pink_glazed_terracotta": "桃色の彩釉テラコッタゴーレム", + "entity.golems.golem.pink_stained_glass": "桃色の色付きガラスゴーレム", + "entity.golems.golem.pink_terracotta": "桃色のテラコッタゴーレム", + "entity.golems.golem.pink_wool": "桃色の羊毛ゴーレム", + "entity.golems.golem.prismarine": "プリズマリンゴーレム", + "entity.golems.golem.purple_concrete": "紫色のコンクリートゴーレム", + "entity.golems.golem.purple_glazed_terracotta": "紫色の彩釉テラコッタゴーレム", + "entity.golems.golem.purple_stained_glass": "紫色の色付きガラスゴーレム", + "entity.golems.golem.purple_terracotta": "紫色のテラコッタゴーレム", + "entity.golems.golem.purple_wool": "紫色の羊毛ゴーレム", + "entity.golems.golem.purpur": "プルプァゴーレム", + "entity.golems.golem.quartz": "クォーツゴーレム", + "entity.golems.golem.raw_copper": "銅の原石ゴーレム", + "entity.golems.golem.raw_gold": "金の原石ゴーレム", + "entity.golems.golem.raw_iron": "鉄の原石ゴーレム", + "entity.golems.golem.redstone": "レッドストーンゴーレム", + "entity.golems.golem.redstone_lamp": "レッドストーンランプゴーレム", + "entity.golems.golem.red_concrete": "赤色のコンクリートゴーレム", + "entity.golems.golem.red_glazed_terracotta": "赤色の彩釉テラコッタゴーレム", + "entity.golems.golem.red_mushroom": "赤色のキノコゴーレム", + "entity.golems.golem.red_nether_brick": "赤いネザーレンガゴーレム", + "entity.golems.golem.red_sandstone": "赤い砂岩ゴーレム", + "entity.golems.golem.red_stained_glass": "赤色の色付きガラスゴーレム", + "entity.golems.golem.red_terracotta": "赤色のテラコッタゴーレム", + "entity.golems.golem.red_wool": "赤色の羊毛ゴーレム", + "entity.golems.golem.sandstone": "砂岩ゴーレム", + "entity.golems.golem.sculk": "スカルクゴーレム", + "entity.golems.golem.sculk_catalyst": "スカルクカタリストゴーレム", + "entity.golems.golem.sea_lantern": "シーランタンゴーレム", + "entity.golems.golem.shroomlight": "シュルームライトゴーレム", + "entity.golems.golem.slime": "スライムゴーレム", + "entity.golems.golem.smooth_stone": "滑らかな石ゴーレム", + "entity.golems.golem.sponge": "スポンジゴーレム", + "entity.golems.golem.spruce_log": "トウヒの原木ゴーレム", + "entity.golems.golem.stripped_acacia_log": "樹皮を剥いだアカシアの原木ゴーレム", + "entity.golems.golem.stripped_bamboo_wood": "樹皮を剥いだ竹ゴーレム", + "entity.golems.golem.stripped_birch_log": "樹皮を剥いだシラカバの原木ゴーレム", + "entity.golems.golem.stripped_cherry_log": "樹皮を剥いだサクラの原木ゴーレム", + "entity.golems.golem.stripped_crimson_stem": "樹皮を剥いだ真紅の幹ゴーレム", + "entity.golems.golem.stripped_dark_oak_log": "樹皮を剥いだダークオークの原木ゴーレム", + "entity.golems.golem.stripped_jungle_log": "樹皮を剥いだジャングルの原木ゴーレム", + "entity.golems.golem.stripped_mangrove_log": "樹皮を剥いだマングローブの原木ゴーレム", + "entity.golems.golem.stripped_oak_log": "樹皮を剥いだオークの原木ゴーレム", + "entity.golems.golem.stripped_spruce_log": "樹皮を剥いだトウヒの原木ゴーレム", + "entity.golems.golem.stripped_warped_stem": "樹皮を剥いだ歪んだ幹ゴーレム", + "entity.golems.golem.terracotta": "テラコッタゴーレム", + "entity.golems.golem.tinted_glass": "遮光ガラスゴーレム", + "entity.golems.golem.tnt": "TNTゴーレム", + "entity.golems.golem.tube_coral": "チューブサンゴゴーレム", + "entity.golems.golem.verdant_froglight": "新緑色のカエルライトゴーレム", + "entity.golems.golem.warped_stem": "歪んだ幹ゴーレム", + "entity.golems.golem.warped_wart": "歪んだウォートゴーレム", + "entity.golems.golem.waxed_copper": "ワックスを塗った銅ゴーレム", + "entity.golems.golem.waxed_exposed_copper": "ワックスを塗った風化した銅ゴーレム", + "entity.golems.golem.waxed_oxidized_copper": "ワックスを塗った酸化した銅ゴーレム", + "entity.golems.golem.waxed_weathered_copper": "ワックスを塗った錆びた銅ゴーレム", + "entity.golems.golem.weathered_copper": "錆びた銅ゴーレム", + "entity.golems.golem.white_concrete": "白色のコンクリートゴーレム", + "entity.golems.golem.white_glazed_terracotta": "白色の彩釉テラコッタゴーレム", + "entity.golems.golem.white_stained_glass": "白色の色付きガラスゴーレム", + "entity.golems.golem.white_terracotta": "白色のテラコッタゴーレム", + "entity.golems.golem.white_wool": "白色の羊毛ゴーレム", + "entity.golems.golem.yellow_concrete": "黄色のコンクリートゴーレム", + "entity.golems.golem.yellow_glazed_terracotta": "黄色の彩釉テラコッタゴーレム", + "entity.golems.golem.yellow_stained_glass": "黄色の色付きガラスゴーレム", + "entity.golems.golem.yellow_terracotta": "黄色のテラコッタゴーレム", + "entity.golems.golem.yellow_wool": "黄色の羊毛ゴーレム", + "_comment": "Extra Golems Groups", + "entity.golems.golem.group.bamboo": "竹", + "entity.golems.golem.group.bookshelf": "本棚", + "entity.golems.golem.group.coal": "石炭", + "entity.golems.golem.group.concrete": "コンクリート", + "entity.golems.golem.group.copper": "銅", + "entity.golems.golem.group.coral": "サンゴ", + "entity.golems.golem.group.crafting": "作業台", + "entity.golems.golem.group.explosive": "爆発物", + "entity.golems.golem.group.froglight": "カエルライト", + "entity.golems.golem.group.furnace": "かまど", + "entity.golems.golem.group.glass": "ガラス", + "entity.golems.golem.group.glazed_terracotta": "彩釉テラコッタ", + "entity.golems.golem.group.ice": "氷", + "entity.golems.golem.group.leaves": "葉", + "entity.golems.golem.group.log": "原木", + "entity.golems.golem.group.moss": "苔", + "entity.golems.golem.group.mushroom": "キノコ", + "entity.golems.golem.group.nether_brick": "ネザーレンガ", + "entity.golems.golem.group.nether_wart": "ネザーウォート", + "entity.golems.golem.group.obsidian": "黒曜石", + "entity.golems.golem.group.raw_ore": "原石", + "entity.golems.golem.group.roots": "根", + "entity.golems.golem.group.sandstone": "砂岩", + "entity.golems.golem.group.slime": "スライム", + "entity.golems.golem.group.stem": "幹", + "entity.golems.golem.group.stone": "石", + "entity.golems.golem.group.terracotta": "テラコッタ", + "entity.golems.golem.group.wool": "羊毛", + "_comment": "Extra Golems Addon Groups", + "entity.golems.golem.group.aluminum": "アルミニウム", + "entity.golems.golem.group.bronze": "青銅", + "entity.golems.golem.group.fluorite": "蛍石", + "entity.golems.golem.group.lead": "鉛", + "entity.golems.golem.group.nickel": "ニッケル", + "entity.golems.golem.group.silver": "銀", + "entity.golems.golem.group.steel": "鋼鉄", + "entity.golems.golem.group.tin": "錫", + "_comment": "Mekanism", + "entity.mekanism.golem.bronze": "青銅ゴーレム", + "entity.mekanism.golem.fluorite": "蛍石ゴーレム", + "entity.mekanism.golem.lead": "鉛ゴーレム", + "entity.mekanism.golem.osmium": "オスミウムゴーレム", + "entity.mekanism.golem.raw_lead": "鉛の原石ゴーレム", + "entity.mekanism.golem.raw_osmium": "オスミウムの原石ゴーレム", + "entity.mekanism.golem.raw_tin": "錫の原石ゴーレム", + "entity.mekanism.golem.raw_uranium": "ウランの原石ゴーレム", + "entity.mekanism.golem.refined_glowstone": "精製されたグロウストーンゴーレム", + "entity.mekanism.golem.refined_obsidian": "精製された黒曜石ゴーレム", + "entity.mekanism.golem.salt": "塩ゴーレム", + "entity.mekanism.golem.steel": "鋼鉄ゴーレム", + "entity.mekanism.golem.tin": "錫ゴーレム", + "entity.mekanism.golem.uranium": "ウランゴーレム", + "_comment": "Biomes O Plenty", + "entity.biomesoplenty.golem.black_sandstone": "黒い砂岩ゴーレム", + "entity.biomesoplenty.golem.brimstone_brick": "硫黄レンガゴーレム", + "entity.biomesoplenty.golem.dead_log": "枯れ木の原木ゴーレム", + "entity.biomesoplenty.golem.fir_log": "モミの原木ゴーレム", + "entity.biomesoplenty.golem.flesh": "肉ゴーレム", + "entity.biomesoplenty.golem.glowing_moss": "光る苔ゴーレム", + "entity.biomesoplenty.golem.glowshroom": "光るキノコゴーレム", + "entity.biomesoplenty.golem.hellbark_log": "ヘルバークゴーレム", + "entity.biomesoplenty.golem.jacaranda_log": "ジャカランダの原木ゴーレム", + "entity.biomesoplenty.golem.magic_log": "マジックの原木ゴーレム", + "entity.biomesoplenty.golem.mahogany_log": "マホガニーの原木ゴーレム", + "entity.biomesoplenty.golem.orange_sandstone": "橙色の砂岩ゴーレム", + "entity.biomesoplenty.golem.palm_log": "ヤシの原木ゴーレム", + "entity.biomesoplenty.golem.porous_flesh": "多孔性の肉ゴーレム", + "entity.biomesoplenty.golem.redwood_log": "レッドウッドの原木ゴーレム", + "entity.biomesoplenty.golem.stripped_dead_log": "樹皮を剥いだ枯れ木の原木ゴーレム", + "entity.biomesoplenty.golem.stripped_fir_log": "樹皮を剥いだモミの原木ゴーレム", + "entity.biomesoplenty.golem.stripped_hellbark_log": "樹皮を剥いだヘルバークゴーレム", + "entity.biomesoplenty.golem.stripped_jacaranda_log": "樹皮を剥いだジャカランダの原木ゴーレム", + "entity.biomesoplenty.golem.stripped_magic_log": "樹皮を剥いだマジックの原木ゴーレム", + "entity.biomesoplenty.golem.stripped_mahogany_log": "樹皮を剥いだマホガニーの原木ゴーレム", + "entity.biomesoplenty.golem.stripped_palm_log": "樹皮を剥いだヤシの原木ゴーレム", + "entity.biomesoplenty.golem.stripped_redwood_log": "樹皮を剥いだレッドウッドの原木ゴーレム", + "entity.biomesoplenty.golem.stripped_umbran_log": "樹皮を剥いだアンブランの原木ゴーレム", + "entity.biomesoplenty.golem.stripped_willow_log": "樹皮を剥いだヤナギの原木ゴーレム", + "entity.biomesoplenty.golem.toadstool": "毒キノコゴーレム", + "entity.biomesoplenty.golem.umbran_log": "アンブランの原木ゴーレム", + "entity.biomesoplenty.golem.white_sandstone": "白い砂岩ゴーレム", + "entity.biomesoplenty.golem.willow_log": "ヤナギの原木ゴーレム", + "_comment": "Biomes O Plenty Groups", + "entity.biomesoplenty.golem.group.flesh": "肉", + "_comment": "Thermal Series", + "entity.thermal.golem.apatite": "アパタイトゴーレム", + "entity.thermal.golem.bitumen": "瀝青ゴーレム", + "entity.thermal.golem.black_rockwool": "黒色のロックウールゴーレム", + "entity.thermal.golem.blue_rockwool": "青色のロックウールゴーレム", + "entity.thermal.golem.bronze": "青銅ゴーレム", + "entity.thermal.golem.brown_rockwool": "茶色のロックウールゴーレム", + "entity.thermal.golem.cinnabar": "辰砂ゴーレム", + "entity.thermal.golem.coal_coke": "コークス炭ゴーレム", + "entity.thermal.golem.constantan": "コンスタンタンゴーレム", + "entity.thermal.golem.cured_rubber": "加硫ゴムゴーレム", + "entity.thermal.golem.cyan_rockwool": "青緑色のロックウールゴーレム", + "entity.thermal.golem.disruption_explosive": "破壊爆薬ゴーレム", + "entity.thermal.golem.electrum": "エレクトラムゴーレム", + "entity.thermal.golem.enderium": "エンデリウムゴーレム", + "entity.thermal.golem.enderium_glass": "エンデリウムガラスゴーレム", + "entity.thermal.golem.fulminating_explosive": "爆鳴爆薬ゴーレム", + "entity.thermal.golem.glacial_explosive": "氷河爆薬ゴーレム", + "entity.thermal.golem.gray_rockwool": "灰色のロックウールゴーレム", + "entity.thermal.golem.green_rockwool": "緑色のロックウールゴーレム", + "entity.thermal.golem.gunpowder": "火薬ゴーレム", + "entity.thermal.golem.hardened_glass": "硬化ガラスゴーレム", + "entity.thermal.golem.inferno_explosive": "地獄爆薬ゴーレム", + "entity.thermal.golem.invar": "インバーゴーレム", + "entity.thermal.golem.lead": "鉛ゴーレム", + "entity.thermal.golem.light_blue_rockwool": "空色のロックウールゴーレム", + "entity.thermal.golem.light_gray_rockwool": "薄灰色のロックウールゴーレム", + "entity.thermal.golem.lime_rockwool": "黄緑色のロックウールゴーレム", + "entity.thermal.golem.lumium": "ルミウムゴーレム", + "entity.thermal.golem.lumium_glass": "ルミウムガラスゴーレム", + "entity.thermal.golem.magenta_rockwool": "赤紫色のロックウールゴーレム", + "entity.thermal.golem.nickel": "ニッケルゴーレム", + "entity.thermal.golem.niter": "硝石ゴーレム", + "entity.thermal.golem.nuclear_explosive": "核爆薬ゴーレム", + "entity.thermal.golem.orange_rockwool": "橙色のロックウールゴーレム", + "entity.thermal.golem.pink_rockwool": "桃色のロックウールゴーレム", + "entity.thermal.golem.pnt": "PNTゴーレム", + "entity.thermal.golem.purple_rockwool": "紫色のロックウールゴーレム", + "entity.thermal.golem.radiant_explosive": "放射爆薬ゴーレム", + "entity.thermal.golem.raw_lead": "鉛の原石ゴーレム", + "entity.thermal.golem.raw_nickel": "ニッケルの原石ゴーレム", + "entity.thermal.golem.raw_silver": "銀の原石ゴーレム", + "entity.thermal.golem.raw_tin": "錫の原石ゴーレム", + "entity.thermal.golem.redstone_explosive": "レッドストーン爆薬ゴーレム", + "entity.thermal.golem.red_rockwool": "赤色のロックウールゴーレム", + "entity.thermal.golem.rich_slag": "豊富なスラグゴーレム", + "entity.thermal.golem.rosin": "ロジンゴーレム", + "entity.thermal.golem.rubber": "ゴムゴーレム", + "entity.thermal.golem.rubberwood_log": "ゴムの木の原木ゴーレム", + "entity.thermal.golem.ruby": "ルビーゴーレム", + "entity.thermal.golem.sapphire": "サファイアゴーレム", + "entity.thermal.golem.sawdust": "おがくずゴーレム", + "entity.thermal.golem.signalum": "シグナルムゴーレム", + "entity.thermal.golem.signalum_glass": "シグナルムガラスゴーレム", + "entity.thermal.golem.silver": "銀ゴーレム", + "entity.thermal.golem.slag": "スラグゴーレム", + "entity.thermal.golem.slime_explosive": "スライム爆薬ゴーレム", + "entity.thermal.golem.stripped_rubberwood_log": "樹皮を剥いだゴムの木の原木ゴーレム", + "entity.thermal.golem.sulfur": "硫黄ゴーレム", + "entity.thermal.golem.tar": "タールゴーレム", + "entity.thermal.golem.tectonic_explosive": "地殻爆薬ゴーレム", + "entity.thermal.golem.tin": "錫ゴーレム", + "entity.thermal.golem.white_rockwool": "白色のロックウールゴーレム", + "entity.thermal.golem.yellow_rockwool": "黄色のロックウールゴーレム", + "_comment": "Thermal Series Groups", + "entity.thermal.golem.group.rockwool": "ロックウール", + "entity.thermal.golem.group.rubber": "ゴム", + "entity.thermal.golem.group.slag": "スラグ", + "_comment": "Quark", + "entity.quark.golem.ashen_log": "灰の原木ゴーレム", + "entity.quark.golem.azalea_log": "ツツジの原木ゴーレム", + "entity.quark.golem.black_corundum": "黒コランダムゴーレム", + "entity.quark.golem.black_framed_glass": "黒色の枠付きガラスゴーレム", + "entity.quark.golem.blaze_lantern": "ブレイズランタンゴーレム", + "entity.quark.golem.blaze_mesh": "ブレイズメッシュゴーレム", + "entity.quark.golem.blue_corundum": "青コランダムゴーレム", + "entity.quark.golem.blue_framed_glass": "青色の枠付きガラスゴーレム", + "entity.quark.golem.brown_framed_glass": "茶色の枠付きガラスゴーレム", + "entity.quark.golem.calcite": "磨かれた方解石ゴーレム", + "entity.quark.golem.charcoal": "木炭ゴーレム", + "entity.quark.golem.cyan_framed_glass": "青緑色の枠付きガラスゴーレム", + "entity.quark.golem.dripstone": "磨かれた鍾乳石ゴーレム", + "entity.quark.golem.duskbound": "夕闇ゴーレム", + "entity.quark.golem.duskbound_lantern": "夕闇ランタンゴーレム", + "entity.quark.golem.framed_glass": "枠付きガラスゴーレム", + "entity.quark.golem.glow_shroom": "光るキノコゴーレム", + "entity.quark.golem.gray_framed_glass": "灰色の枠付きガラスゴーレム", + "entity.quark.golem.green_corundum": "緑コランダムゴーレム", + "entity.quark.golem.green_framed_glass": "緑色の枠付きガラスゴーレム", + "entity.quark.golem.indigo_corundum": "藍色コランダムゴーレム", + "entity.quark.golem.iron_plate": "鉄板ゴーレム", + "entity.quark.golem.jasper": "磨かれた碧玉ゴーレム", + "entity.quark.golem.light_blue_framed_glass": "空色の枠付きガラスゴーレム", + "entity.quark.golem.light_gray_framed_glass": "薄灰色の枠付きガラスゴーレム", + "entity.quark.golem.limestone": "磨かれた石灰岩ゴーレム", + "entity.quark.golem.lime_framed_glass": "黄緑色の枠付きガラスゴーレム", + "entity.quark.golem.magenta_framed_glass": "赤紫色の枠付きガラスゴーレム", + "entity.quark.golem.midori": "緑ゴーレム", + "entity.quark.golem.myalite": "ミヤライトゴーレム", + "entity.quark.golem.orange_corundum": "橙コランダムゴーレム", + "entity.quark.golem.orange_framed_glass": "橙色の枠付きガラスゴーレム", + "entity.quark.golem.permafrost": "永久凍土ゴーレム", + "entity.quark.golem.pink_framed_glass": "桃色の枠付きガラスゴーレム", + "entity.quark.golem.purple_framed_glass": "紫色の枠付きガラスゴーレム", + "entity.quark.golem.red_corundum": "赤コランダムゴーレム", + "entity.quark.golem.red_framed_glass": "赤色の枠付きガラスゴーレム", + "entity.quark.golem.rusty_iron_plate": "錆びた鉄板ゴーレム", + "entity.quark.golem.shale": "磨かれた頁岩ゴーレム", + "entity.quark.golem.soul_sandstone": "ソウル砂岩ゴーレム", + "entity.quark.golem.stripped_ashen_log": "樹皮を剥いだ灰の原木ゴーレム", + "entity.quark.golem.stripped_azalea_log": "樹皮を剥いだツツジの原木ゴーレム", + "entity.quark.golem.stripped_trumpet_log": "樹皮を剥いだトランペットの原木ゴーレム", + "entity.quark.golem.sturdy_stone": "頑丈な石ゴーレム", + "entity.quark.golem.thatch": "わらゴーレム", + "entity.quark.golem.trumpet_log": "トランペットの原木ゴーレム", + "entity.quark.golem.tuff": "磨かれた凝灰岩ゴーレム", + "entity.quark.golem.violet_corundum": "菫色コランダムゴーレム", + "entity.quark.golem.white_corundum": "白コランダムゴーレム", + "entity.quark.golem.white_framed_glass": "白色の枠付きガラスゴーレム", + "entity.quark.golem.yellow_corundum": "黄色コランダムゴーレム", + "entity.quark.golem.yellow_framed_glass": "黄色の枠付きガラスゴーレム", + "_comment": "Quark Groups", + "entity.quark.golem.group.corundum": "コランダム", + "entity.quark.golem.group.framed_glass": "枠付きガラス", + "entity.quark.golem.group.iron_plate": "鉄板", + "_comment": "Golem Descriptions", + "golem.description.attack": "攻撃:%1$s", + "golem.description.attack.icon": "\u2694", + "golem.description.axe": "斧", + "golem.description.flowers": "花", + "golem.description.fuel": "燃料:%1$s", + "golem.description.group": "グループ:%1$s", + "golem.description.health": "体力:%1$s", + "golem.description.health.icon": "\u2764", + "golem.description.invulnerable": "無敵!", + "golem.description.knockback": "巨大なノックバック攻撃!", + "golem.description.occludes": "振動を遮断", + "golem.description.swim": "上級水泳者!", + "golem.description.sticky": "&6粘着性!", + "golem.description.toggle_light": "インタラクトで光を切り替え", + "golem.description.behavior.aoe_dry": "水を吸収", + "golem.description.behavior.aoe_freeze": "水を凍らせ、溶岩を冷却", + "golem.description.behavior.aoe_grow": "近くの作物を成長させる", + "golem.description.arrows": "矢:%1$s", + "golem.description.fireballs": "火球:%1$s", + "golem.description.snowballs": "雪玉:%1$s", + "golem.description.behavior.burn_in_sun": "日光で燃える", + "golem.description.behavior.crafting_menu": "インタラクトで作業台メニューを開く", + "golem.description.behavior.effect.single": "%2$sに%1$sを適用", + "golem.description.behavior.effect.single.predicate": "%3$sの時、%2$sに%1$sを適用", + "golem.description.behavior.effect.multiple": "%1$sにポーション効果を適用", + "golem.description.behavior.effect.multiple.predicate": "%2$sの時、%1$sにポーション効果を適用", + "golem.description.behavior.explode": "注意:ランダムに爆発する可能性があります!", + "golem.description.behavior.follow": "%1$sを追跡", + "golem.description.behavior.item_update_golem.empty_hand": "素手", + "golem.description.behavior.item_update_golem.golem": "%1$sを使用して%2$sに変換", + "golem.description.behavior.item_update_golem.golem.predicate": "%3$sの時、%1$sを使用して%2$sに変換", + "golem.description.behavior.item_update_golem.variant": "%1$sを使用してバリアントを変更", + "golem.description.behavior.item_update_golem.variant.predicate": "%2$sの時、%1$sを使用してバリアントを変更", + "golem.description.behavior.light": "光を提供", + "golem.description.behavior.place": "%1$sを設置", + "golem.description.behavior.place.predicate": "%2$sの時、%1$sを設置", + "golem.description.behavior.power": "レッドストーン電力を提供", + "golem.description.behavior.set_fire": "%1$sに火をつける", + "golem.description.behavior.set_fire.predicate": "%2$sの時、%1$sに火をつける", + "golem.description.behavior.split_on_death": "%1$sに分裂!", + "golem.description.behavior.shoot_arrows": "矢を発射!", + "golem.description.behavior.shoot.refill": "(右クリックで補充)", + "golem.description.behavior.shoot_fireballs": "火球を発射!", + "golem.description.behavior.shoot_shulker_bullets": "シュルカーの弾を発射!", + "golem.description.behavior.shoot_snowballs": "雪玉を発射!", + "golem.description.behavior.summon": "%1$sを召喚", + "golem.description.behavior.summon.predicate": "%2$sの時、%1$sを召喚", + "golem.description.behavior.teleport": "ランダムにテレポート", + "golem.description.behavior.tempt": "%1$sで誘惑", + "golem.description.behavior.update_golem.golem": "%1$sに変換", + "golem.description.behavior.update_golem.golem.predicate": "%2$sの時、%1$sに変換", + "golem.description.behavior.update_golem.variant": "バリアントを変更", + "golem.description.behavior.update_golem.variant.predicate": "%1$sの時、バリアントを変更", + "golem.description.behavior.use_fuel": "燃料を消費", + "golem.description.target_type.self": "自身", + "golem.description.target_type.enemy": "敵", + "golem.description.target_type.area": "近くの生物", + "golem.description.predicates.and": "%1$sかつ%2$s", + "golem.description.predicates.or": "%1$sまたは%2$s", + "golem.description.golem_predicate.wet": "濡れている", + "golem.description.golem_predicate.dry": "乾いている", + "golem.description.golem_predicate.fuel": "燃料がある", + "golem.description.golem_predicate.fuel_empty": "燃料がない", + "golem.description.golem_predicate.arrows": "ゴーレムのインベントリに矢がある", + "golem.description.golem_predicate.arrows_empty": "ゴーレムのインベントリに矢がない", + "golem.description.golem_predicate.fuse_lit": "導火線が点火されている", + "golem.description.golem_predicate.fuse_unlit": "導火線が点火されていない", + "golem.description.golem_predicate.baby": "ゴーレムが子供", + "golem.description.golem_predicate.adult": "ゴーレムが子供ではない", + "golem.description.golem_predicate.day": "昼間", + "golem.description.golem_predicate.night": "夜間", + "golem.description.golem_predicate.clear": "天気が晴れ", + "golem.description.golem_predicate.rain": "天気が雨", + "golem.description.golem_predicate.thunder": "天気が雷雨", + "golem.description.trigger.hurt": "負傷", + "golem.description.trigger.attack": "攻撃中", + "golem.description.trigger.lightning": "雷に打たれた", + "golem.description.trigger.target": "戦闘開始", + "golem.description.trigger.death": "死亡", + "_comment": "Commands", + "command.golem.invalid_id": "無効なゴーレムタイプ%1$s", + "command.golem.success": "(%2$s, %3$s, %4$s)にタイプ\"%1$s\"のゴーレムを召喚しました", + "_comment": "Guide Book", + "item.golems.guide_book": "エクストラゴーレムガイド", + "item.golems.guide_book.page.intro1": "エクストラゴーレムへようこそ!このガイドは、あなた自身のゴーレム軍団を作るのに役立ちます。", + "item.golems.guide_book.page.intro2": "ページをめくって始めましょう!", + "item.golems.guide_book.page.contents.title": "目次", + "item.golems.guide_book.page.recipe_spell.recipe": "まず、%1$sをクラフトします。%2$sに使用するか、クラフト材料として使用できます", + "item.golems.guide_book.page.recipe_head.recipe": "次に、%1$sをクラフトします。ブロックの上に置いてゴーレムを生き返らせましょう!", + "item.golems.guide_book.page.build_golem.title": "ゴーレムの作り方", + "item.golems.guide_book.page.build_golem.howto1": "2つのブロックを、1つを他の上に積み重ねて置きます。", + "item.golems.guide_book.page.build_golem.howto2": "上部ブロックの反対側にさらに2つのブロックを置きます。", + "item.golems.guide_book.page.build_golem.howto3": "中央のブロックの上に%1$sを置けば完成です!", + "_comment": "Jade", + "config.jade.plugin_golems.jade_entity_provider": "エクストラゴーレム", + "config.jade.plugin_golems.fg_color": "前景色", + "config.jade.plugin_golems.show_icon": "アイコンを表示" +} diff --git a/src/main/resources/assets/golems/lang/zh_cn.json b/src/main/resources/assets/golems/lang/zh_cn.json index e36b9f66..b8ec1d85 100644 --- a/src/main/resources/assets/golems/lang/zh_cn.json +++ b/src/main/resources/assets/golems/lang/zh_cn.json @@ -1,493 +1,509 @@ { - "item.golems.golem_spell": "\u5080\u5121\u7b26\u5492", - "item.golems.spawn_bedrock_golem": "\u751f\u6210 \u57fa\u5ca9\u5080\u5121", - "item.golems.spawn_bedrock_golem.tooltip": "\u7528\u6765\u751f\u6210%s", - "block.golems.golem_head": "\u5080\u5121\u5934\u9885", - "block.golems.light_provider": "\u52a8\u6001\u5080\u5121\u5149\u6e90", - "block.golems.power_provider": "\u52a8\u6001\u5080\u5121\u52a8\u529b\u6e90", - "entity.golems.golem.acacia_log": "Acacia Log Golem", - "entity.golems.golem.amethyst": "Amethyst Golem", - "entity.golems.golem.ancient_debris": "Ancient Debris Golem", - "entity.golems.golem.andesite": "\u78e8\u5236\u5b89\u5c71\u5ca9\u5080\u5121", - "entity.golems.golem.bamboo_wood": "Bamboo Golem", - "entity.golems.golem.basalt": "\u78e8\u5236\u7384\u6b66\u5ca9\u5080\u5121", - "entity.golems.golem.bedrock": "\u57fa\u5ca9\u5080\u5121", - "entity.golems.golem.birch_log": "Birch Log Golem", - "entity.golems.golem.blackstone": "\u78e8\u5236\u9ed1\u77f3\u5080\u5121", - "entity.golems.golem.black_concrete": "Black Concrete Golem", - "entity.golems.golem.black_glazed_terracotta": "Black Glazed Terracotta Golem", - "entity.golems.golem.black_stained_glass": "Black Stained Glass Golem", - "entity.golems.golem.black_terracotta": "Black Terracotta Golem", - "entity.golems.golem.black_wool": "Black Wool Golem", - "entity.golems.golem.blue_concrete": "Blue Concrete Golem", - "entity.golems.golem.blue_glazed_terracotta": "Blue Glazed Terracotta Golem", - "entity.golems.golem.blue_stained_glass": "Blue Stained Glass Golem", - "entity.golems.golem.blue_terracotta": "Blue Terracotta Golem", - "entity.golems.golem.blue_wool": "Blue Wool Golem", - "entity.golems.golem.bone": "\u9aa8\u5934\u5080\u5121", - "entity.golems.golem.bookshelf": "\u4e66\u67b6\u5080\u5121", - "entity.golems.golem.brain_coral": "Brain Coral Golem", - "entity.golems.golem.brick": "Brick Golem", - "entity.golems.golem.brown_concrete": "Brown Concrete Golem", - "entity.golems.golem.brown_glazed_terracotta": "Brown Glazed Terracotta Golem", - "entity.golems.golem.brown_mushroom": "Brown Mushroom Golem", - "entity.golems.golem.brown_stained_glass": "Brown Stained Glass Golem", - "entity.golems.golem.brown_terracotta": "Brown Terracotta Golem", - "entity.golems.golem.brown_wool": "Brown Wool Golem", - "entity.golems.golem.bubble_coral": "Bubble Coral Golem", - "entity.golems.golem.charcoal": "Charcoal Golem", - "entity.golems.golem.cherry_log": "Cherry Log Golem", - "entity.golems.golem.clay": "\u7c98\u571f\u5080\u5121", - "entity.golems.golem.coal": "\u7164\u70ad\u5080\u5121", - "entity.golems.golem.copper": "Copper Golem", - "entity.golems.golem.crafting": "\u5de5\u4f5c\u53f0\u5080\u5121", - "entity.golems.golem.crimson_stem": "\u7eef\u7ea2\u83cc\u67c4\u5080\u5121", - "entity.golems.golem.crying_obsidian": "\u54ed\u6ce3\u7684\u9ed1\u66dc\u77f3\u5080\u5121", - "entity.golems.golem.cyan_concrete": "Cyan Concrete Golem", - "entity.golems.golem.cyan_glazed_terracotta": "Cyan Glazed Terracotta Golem", - "entity.golems.golem.cyan_stained_glass": "Cyan Stained Glass Golem", - "entity.golems.golem.cyan_terracotta": "Cyan Terracotta Golem", - "entity.golems.golem.cyan_wool": "Cyan Wool Golem", - "entity.golems.golem.dark_oak_log": "Dark Oak Log Golem", - "entity.golems.golem.dead_brain_coral": "Dead Brain Coral Golem", - "entity.golems.golem.dead_bubble_coral": "Dead Bubble Coral Golem", - "entity.golems.golem.dead_fire_coral": "Dead Fire Coral Golem", - "entity.golems.golem.dead_horn_coral": "Dead Horn Coral Golem", - "entity.golems.golem.dead_tube_coral": "Dead Tube Coral Golem", - "entity.golems.golem.deepslate": "Polished Deepslate Golem", - "entity.golems.golem.diamond": "\u94bb\u77f3\u5080\u5121", - "entity.golems.golem.diorite": "\u78e8\u5236\u95ea\u957f\u5ca9\u5080\u5121", - "entity.golems.golem.dispenser": "\u53d1\u5c04\u5668\u5080\u5121", - "entity.golems.golem.dried_kelp": "Dried Kelp Golem", - "entity.golems.golem.emerald": "\u7eff\u5b9d\u77f3\u5080\u5121", - "entity.golems.golem.end_stone": "\u672b\u5730\u77f3\u5080\u5121", - "entity.golems.golem.exposed_copper": "Exposed Copper Golem", - "entity.golems.golem.fire_coral": "Fire Coral Golem", - "entity.golems.golem.furnace": "\u7089\u5080\u5121", - "entity.golems.golem.glass": "\u73bb\u7483\u5080\u5121", - "entity.golems.golem.glowstone": "\u8424\u77f3\u5080\u5121", - "entity.golems.golem.gold": "\u91d1\u5080\u5121", - "entity.golems.golem.granite": "\u78e8\u5236\u82b1\u5c97\u5ca9\u5080\u5121", - "entity.golems.golem.gray_concrete": "Gray Concrete Golem", - "entity.golems.golem.gray_glazed_terracotta": "Gray Glazed Terracotta Golem", - "entity.golems.golem.gray_stained_glass": "Gray Stained Glass Golem", - "entity.golems.golem.gray_terracotta": "Gray Terracotta Golem", - "entity.golems.golem.gray_wool": "Gray Wool Golem", - "entity.golems.golem.green_concrete": "Green Concrete Golem", - "entity.golems.golem.green_glazed_terracotta": "Green Glazed Terracotta Golem", - "entity.golems.golem.green_stained_glass": "Green Stained Glass Golem", - "entity.golems.golem.green_terracotta": "Green Terracotta Golem", - "entity.golems.golem.green_wool": "Green Wool Golem", - "entity.golems.golem.hay": "Straw Golem", - "entity.golems.golem.honey": "\u8702\u871c\u5080\u5121", - "entity.golems.golem.honeycomb": "\u871c\u813e\u5080\u5121", - "entity.golems.golem.horn_coral": "Horn Coral Golem", - "entity.golems.golem.ice": "\u51b0\u5080\u5121", - "entity.golems.golem.jungle_log": "Jungle Log Golem", - "entity.golems.golem.lapis": "\u9752\u91d1\u77f3\u5080\u5121", - "entity.golems.golem.leaves": "\u6811\u53f6\u5080\u5121", - "entity.golems.golem.light_blue_concrete": "Light Blue Concrete Golem", - "entity.golems.golem.light_blue_glazed_terracotta": "Light Blue Glazed Terracotta Golem", - "entity.golems.golem.light_blue_stained_glass": "Light Blue Stained Glass Golem", - "entity.golems.golem.light_blue_terracotta": "Light Blue Terracotta Golem", - "entity.golems.golem.light_blue_wool": "Light Blue Wool Golem", - "entity.golems.golem.light_gray_concrete": "Light Gray Concrete Golem", - "entity.golems.golem.light_gray_glazed_terracotta": "Light Gray Glazed Terracotta Golem", - "entity.golems.golem.light_gray_stained_glass": "Light Gray Stained Glass Golem", - "entity.golems.golem.light_gray_terracotta": "Light Gray Terracotta Golem", - "entity.golems.golem.light_gray_wool": "Light Gray Wool Golem", - "entity.golems.golem.lime_concrete": "Lime Concrete Golem", - "entity.golems.golem.lime_glazed_terracotta": "Lime Glazed Terracotta Golem", - "entity.golems.golem.lime_stained_glass": "Lime Stained Glass Golem", - "entity.golems.golem.lime_terracotta": "Lime Terracotta Golem", - "entity.golems.golem.lime_wool": "Lime Wool Golem", - "entity.golems.golem.magenta_concrete": "Magenta Concrete Golem", - "entity.golems.golem.magenta_glazed_terracotta": "Magenta Glazed Terracotta Golem", - "entity.golems.golem.magenta_stained_glass": "Magenta Stained Glass Golem", - "entity.golems.golem.magenta_terracotta": "Magenta Terracotta Golem", - "entity.golems.golem.magenta_wool": "Magenta Wool Golem", - "entity.golems.golem.magma": "\u5ca9\u6d46\u5757\u5080\u5121", - "entity.golems.golem.mangrove_log": "Mangrove Log Golem", - "entity.golems.golem.mangrove_roots": "Mangrove Roots Golem", - "entity.golems.golem.melon": "\u897f\u74dc\u5080\u5121", - "entity.golems.golem.moss": "Moss Golem", - "entity.golems.golem.mud": "Muddy Golem", - "entity.golems.golem.muddy_mangrove_roots": "Muddy Mangrove Roots Golem", - "entity.golems.golem.netherite": "\u4e0b\u754c\u5408\u91d1\u5080\u5121", - "entity.golems.golem.nether_brick": "\u5730\u72f1\u7816\u5080\u5121", - "entity.golems.golem.nether_wart": "\u4e0b\u754c\u75a3\u5080\u5121", - "entity.golems.golem.oak_log": "Oak Log Golem", - "entity.golems.golem.obsidian": "\u9ed1\u66dc\u77f3\u5080\u5121", - "entity.golems.golem.ochre_froglight": "Ochre Froglight Golem", - "entity.golems.golem.orange_concrete": "Orange Concrete Golem", - "entity.golems.golem.orange_glazed_terracotta": "Orange Glazed Terracotta Golem", - "entity.golems.golem.orange_stained_glass": "Orange Stained Glass Golem", - "entity.golems.golem.orange_terracotta": "Orange Terracotta Golem", - "entity.golems.golem.orange_wool": "Orange Wool Golem", - "entity.golems.golem.oxidized_copper": "Oxidized Copper Golem", - "entity.golems.golem.packed_mud": "Packed Mud Golem", - "entity.golems.golem.pearlescent_froglight": "Pearlescent Froglight Golem", - "entity.golems.golem.pink_concrete": "Pink Concrete Golem", - "entity.golems.golem.pink_glazed_terracotta": "Pink Glazed Terracotta Golem", - "entity.golems.golem.pink_stained_glass": "Pink Stained Glass Golem", - "entity.golems.golem.pink_terracotta": "Pink Terracotta Golem", - "entity.golems.golem.pink_wool": "Pink Wool Golem", - "entity.golems.golem.prismarine": "\u6d77\u6676\u77f3\u5080\u5121", - "entity.golems.golem.purple_concrete": "Purple Concrete Golem", - "entity.golems.golem.purple_glazed_terracotta": "Purple Glazed Terracotta Golem", - "entity.golems.golem.purple_stained_glass": "Purple Stained Glass Golem", - "entity.golems.golem.purple_terracotta": "Purple Terracotta Golem", - "entity.golems.golem.purple_wool": "Purple Wool Golem", - "entity.golems.golem.purpur": "\u7d2b\u73c0\u5757\u5080\u5121", - "entity.golems.golem.quartz": "\u77f3\u82f1\u5080\u5121", - "entity.golems.golem.raw_copper": "Raw Copper Golem", - "entity.golems.golem.raw_gold": "Raw Gold Golem", - "entity.golems.golem.raw_iron": "Raw Iron Golem", - "entity.golems.golem.redstone": "\u7ea2\u77f3\u5080\u5121", - "entity.golems.golem.redstone_lamp": "\u7ea2\u77f3\u706f\u5080\u5121", - "entity.golems.golem.red_concrete": "Red Concrete Golem", - "entity.golems.golem.red_glazed_terracotta": "Red Glazed Terracotta Golem", - "entity.golems.golem.red_mushroom": "Red Mushroom Golem", - "entity.golems.golem.red_nether_brick": "Red Nether Brick Golem", - "entity.golems.golem.red_sandstone": "\u7ea2\u7802\u5ca9\u5080\u5121", - "entity.golems.golem.red_stained_glass": "Red Stained Glass Golem", - "entity.golems.golem.red_terracotta": "Red Terracotta Golem", - "entity.golems.golem.red_wool": "Red Wool Golem", - "entity.golems.golem.sandstone": "\u7802\u5ca9\u5080\u5121", - "entity.golems.golem.sculk": "Sculk Golem", - "entity.golems.golem.sculk_catalyst": "Sculk Catalyst Golem", - "entity.golems.golem.sea_lantern": "\u6d77\u6676\u706f\u5080\u5121", - "entity.golems.golem.shroomlight": "\u83cc\u5149\u4f53\u5080\u5121", - "entity.golems.golem.slime": "\u7c98\u6db2\u5757\u5080\u5121", - "entity.golems.golem.smooth_stone": "\u5e73\u6ed1\u77f3\u5934\u5080\u5121", - "entity.golems.golem.sponge": "\u6d77\u7ef5\u5080\u5121", - "entity.golems.golem.spruce_log": "Spruce Log Golem", - "entity.golems.golem.stripped_acacia_log": "Stripped Acacia Log Golem", - "entity.golems.golem.stripped_bamboo_wood": "Stripped Bamboo Golem", - "entity.golems.golem.stripped_birch_log": "Stripped Birch Log Golem", - "entity.golems.golem.stripped_cherry_log": "Stripped Cherry Log Golem", - "entity.golems.golem.stripped_crimson_stem": "Stripped Crimson Stem Golem", - "entity.golems.golem.stripped_dark_oak_log": "Stripped Dark Oak Log Golem", - "entity.golems.golem.stripped_jungle_log": "Stripped Jungle Log Golem", - "entity.golems.golem.stripped_mangrove_log": "Stripped Mangrove Log Golem", - "entity.golems.golem.stripped_oak_log": "Stripped Oak Log Golem", - "entity.golems.golem.stripped_spruce_log": "Stripped Spruce Log Golem", - "entity.golems.golem.stripped_warped_stem": "Stripped Warped Stem Golem", - "entity.golems.golem.terracotta": "\u9676\u74e6\u5080\u5121", - "entity.golems.golem.tinted_glass": "Tinted Glass Golem", - "entity.golems.golem.tnt": "TNT\u5080\u5121", - "entity.golems.golem.tube_coral": "Tube Coral Golem", - "entity.golems.golem.verdant_froglight": "Verdant Froglight Golem", - "entity.golems.golem.warped_stem": "\u8be1\u5f02\u83cc\u67c4\u5080\u5121", - "entity.golems.golem.warped_wart": "Warped Wart Golem", - "entity.golems.golem.waxed_copper": "Waxed Copper Golem", - "entity.golems.golem.waxed_exposed_copper": "Waxed Exposed Copper Golem", - "entity.golems.golem.waxed_oxidized_copper": "Waxed Oxidized Copper Golem", - "entity.golems.golem.waxed_weathered_copper": "Waxed Weathered Copper Golem", - "entity.golems.golem.weathered_copper": "Weathered Copper Golem", - "entity.golems.golem.white_concrete": "White Concrete Golem", - "entity.golems.golem.white_glazed_terracotta": "White Glazed Terracotta Golem", - "entity.golems.golem.white_stained_glass": "White Stained Glass Golem", - "entity.golems.golem.white_terracotta": "White Terracotta Golem", - "entity.golems.golem.white_wool": "White Wool Golem", - "entity.golems.golem.yellow_concrete": "Yellow Concrete Golem", - "entity.golems.golem.yellow_glazed_terracotta": "Yellow Glazed Terracotta Golem", - "entity.golems.golem.yellow_stained_glass": "Yellow Stained Glass Golem", - "entity.golems.golem.yellow_terracotta": "Yellow Terracotta Golem", - "entity.golems.golem.yellow_wool": "Yellow Wool Golem", - "entity.golems.golem.group.bamboo": "Bamboo", - "entity.golems.golem.group.bookshelf": "Bookshelf", - "entity.golems.golem.group.coal": "Coal", - "entity.golems.golem.group.concrete": "\u6df7\u51dd\u571f", - "entity.golems.golem.group.copper": "Copper", - "entity.golems.golem.group.coral": "Coral", - "entity.golems.golem.group.crafting": "Crafting", - "entity.golems.golem.group.explosive": "Explosive", - "entity.golems.golem.group.froglight": "Froglight", - "entity.golems.golem.group.furnace": "Furnace", - "entity.golems.golem.group.glass": "Glass", - "entity.golems.golem.group.glazed_terracotta": "Glazed Terracotta", - "entity.golems.golem.group.ice": "Ice", - "entity.golems.golem.group.leaves": "Leaves", - "entity.golems.golem.group.log": "Log", - "entity.golems.golem.group.moss": "Moss", - "entity.golems.golem.group.mushroom": "Mushroom", - "entity.golems.golem.group.nether_brick": "Nether Brick", - "entity.golems.golem.group.nether_wart": "Nether Wart", - "entity.golems.golem.group.obsidian": "Obsidian", - "entity.golems.golem.group.raw_ore": "Raw Ore", - "entity.golems.golem.group.roots": "Roots", - "entity.golems.golem.group.sandstone": "Sandstone", - "entity.golems.golem.group.slime": "Slime", - "entity.golems.golem.group.stem": "Stem", - "entity.golems.golem.group.stone": "Stone", - "entity.golems.golem.group.terracotta": "Terracotta", - "entity.golems.golem.group.wool": "Wool", - "entity.golems.golem.group.aluminum": "Aluminum", - "entity.golems.golem.group.bronze": "Bronze", - "entity.golems.golem.group.fluorite": "Fluorite", - "entity.golems.golem.group.lead": "Lead", - "entity.golems.golem.group.nickel": "Nickel", - "entity.golems.golem.group.silver": "Silver", - "entity.golems.golem.group.steel": "Steel", - "entity.golems.golem.group.tin": "Tin", - "entity.mekanism.golem.bronze": "Bronze Golem", - "entity.mekanism.golem.fluorite": "Fluorite Golem", - "entity.mekanism.golem.lead": "Lead Golem", - "entity.mekanism.golem.osmium": "Osmium Golem", - "entity.mekanism.golem.raw_lead": "Raw Lead Golem", - "entity.mekanism.golem.raw_osmium": "Raw Osmium Golem", - "entity.mekanism.golem.raw_tin": "Raw Tin Golem", - "entity.mekanism.golem.raw_uranium": "Raw Uranium Golem", - "entity.mekanism.golem.refined_glowstone": "Refined Glowstone Golem", - "entity.mekanism.golem.refined_obsidian": "Refined Obsidian Golem", - "entity.mekanism.golem.salt": "Salt Golem", - "entity.mekanism.golem.steel": "Steel Golem", - "entity.mekanism.golem.tin": "Tin Golem", - "entity.mekanism.golem.uranium": "Uranium Golem", - "entity.biomesoplenty.golem.black_sandstone": "Black Sandstone Golem", - "entity.biomesoplenty.golem.brimstone_brick": "Brimstone Brick Golem", - "entity.biomesoplenty.golem.dead_log": "Dead Log Golem", - "entity.biomesoplenty.golem.fir_log": "Fir Log Golem", - "entity.biomesoplenty.golem.flesh": "Flesh Golem", - "entity.biomesoplenty.golem.glowing_moss": "Glowing Moss Golem", - "entity.biomesoplenty.golem.glowshroom": "Glowshroom Golem", - "entity.biomesoplenty.golem.hellbark_log": "Hellbark Golem", - "entity.biomesoplenty.golem.jacaranda_log": "Jacaranda Log Golem", - "entity.biomesoplenty.golem.magic_log": "Magic Log Golem", - "entity.biomesoplenty.golem.mahogany_log": "Mahogany Log Golem", - "entity.biomesoplenty.golem.orange_sandstone": "Orange Sandstone Golem", - "entity.biomesoplenty.golem.palm_log": "Palm Log Golem", - "entity.biomesoplenty.golem.porous_flesh": "Porous Flesh Golem", - "entity.biomesoplenty.golem.redwood_log": "Redwood Log Golem", - "entity.biomesoplenty.golem.stripped_dead_log": "Stripped Dead Log Golem", - "entity.biomesoplenty.golem.stripped_fir_log": "Stripped Fir Log Golem", - "entity.biomesoplenty.golem.stripped_hellbark_log": "Stripped Hellbark Golem", - "entity.biomesoplenty.golem.stripped_jacaranda_log": "Stripped Jacaranda Log Golem", - "entity.biomesoplenty.golem.stripped_magic_log": "Stripped Magic Log Golem", - "entity.biomesoplenty.golem.stripped_mahogany_log": "Stripped Mahogany Log Golem", - "entity.biomesoplenty.golem.stripped_palm_log": "Stripped Palm Log Golem", - "entity.biomesoplenty.golem.stripped_redwood_log": "Stripped Redwood Log Golem", - "entity.biomesoplenty.golem.stripped_umbran_log": "Stripped Umbran Log Golem", - "entity.biomesoplenty.golem.stripped_willow_log": "Stripped Willow Log Golem", - "entity.biomesoplenty.golem.toadstool": "Toadstool Golem", - "entity.biomesoplenty.golem.umbran_log": "Umbran Log Golem", - "entity.biomesoplenty.golem.white_sandstone": "White Sandstone Golem", - "entity.biomesoplenty.golem.willow_log": "Willow Log Golem", - "entity.biomesoplenty.golem.group.flesh": "Flesh", - "entity.thermal.golem.apatite": "Apatite Golem", - "entity.thermal.golem.bitumen": "Bitumen Golem", - "entity.thermal.golem.black_rockwool": "Black Rockwool Golem", - "entity.thermal.golem.blue_rockwool": "Blue Rockwool Golem", - "entity.thermal.golem.bronze": "Bronze Golem", - "entity.thermal.golem.brown_rockwool": "Brown Rockwool Golem", - "entity.thermal.golem.cinnabar": "Cinnabar Golem", - "entity.thermal.golem.coal_coke": "Coal Coke Golem", - "entity.thermal.golem.constantan": "Constantan Golem", - "entity.thermal.golem.cured_rubber": "Cured Rubber Golem", - "entity.thermal.golem.cyan_rockwool": "Cyan Rockwool Golem", - "entity.thermal.golem.disruption_explosive": "Disruption Explosive Golem", - "entity.thermal.golem.electrum": "Electrum Golem", - "entity.thermal.golem.enderium": "Enderium Golem", - "entity.thermal.golem.enderium_glass": "Enderium Glass Golem", - "entity.thermal.golem.fulminating_explosive": "Fulminating Explosive Golem", - "entity.thermal.golem.glacial_explosive": "Glacial Explosive Golem", - "entity.thermal.golem.gray_rockwool": "Gray Rockwool Golem", - "entity.thermal.golem.green_rockwool": "Green Rockwool Golem", - "entity.thermal.golem.gunpowder": "Gunpowder Golem", - "entity.thermal.golem.hardened_glass": "Hardened Glass Golem", - "entity.thermal.golem.inferno_explosive": "Inferno Explosive Golem", - "entity.thermal.golem.invar": "Invar Golem", - "entity.thermal.golem.lead": "Lead Golem", - "entity.thermal.golem.light_blue_rockwool": "Light Blue Rockwool Golem", - "entity.thermal.golem.light_gray_rockwool": "Light Gray Rockwool Golem", - "entity.thermal.golem.lime_rockwool": "Lime Rockwool Golem", - "entity.thermal.golem.lumium": "Lumium Golem", - "entity.thermal.golem.lumium_glass": "Lumium Glass Golem", - "entity.thermal.golem.magenta_rockwool": "Magenta Rockwool Golem", - "entity.thermal.golem.nickel": "Nickel Golem", - "entity.thermal.golem.niter": "Niter Golem", - "entity.thermal.golem.nuclear_explosive": "Nuclear Explosive Golem", - "entity.thermal.golem.orange_rockwool": "Orange Rockwool Golem", - "entity.thermal.golem.pink_rockwool": "Pink Rockwool Golem", - "entity.thermal.golem.pnt": "PNT Golem", - "entity.thermal.golem.purple_rockwool": "Purple Rockwool Golem", - "entity.thermal.golem.radiant_explosive": "Radiant Explosive Golem", - "entity.thermal.golem.raw_lead": "Raw Lead Golem", - "entity.thermal.golem.raw_nickel": "Raw Nickel Golem", - "entity.thermal.golem.raw_silver": "Raw Silver Golem", - "entity.thermal.golem.raw_tin": "Raw Tin Golem", - "entity.thermal.golem.redstone_explosive": "Redstone Explosive Golem", - "entity.thermal.golem.red_rockwool": "Red Rockwool Golem", - "entity.thermal.golem.rich_slag": "Rich Slag Golem", - "entity.thermal.golem.rosin": "Rosin Golem", - "entity.thermal.golem.rubber": "Rubber Golem", - "entity.thermal.golem.rubberwood_log": "Rubberwood Log Golem", - "entity.thermal.golem.ruby": "Ruby Golem", - "entity.thermal.golem.sapphire": "Sapphire Golem", - "entity.thermal.golem.sawdust": "Sawdust Golem", - "entity.thermal.golem.signalum": "Signalum Golem", - "entity.thermal.golem.signalum_glass": "Signalum Glass Golem", - "entity.thermal.golem.silver": "Silver Golem", - "entity.thermal.golem.slag": "Slag Golem", - "entity.thermal.golem.slime_explosive": "Slime Explosive Golem", - "entity.thermal.golem.stripped_rubberwood_log": "Stripped Rubberwood Log Golem", - "entity.thermal.golem.sulfur": "Sulfur Golem", - "entity.thermal.golem.tar": "Tar Golem", - "entity.thermal.golem.tectonic_explosive": "Tectonic Explosive Golem", - "entity.thermal.golem.tin": "Tin Golem", - "entity.thermal.golem.white_rockwool": "White Rockwool Golem", - "entity.thermal.golem.yellow_rockwool": "Yellow Rockwool Golem", - "entity.thermal.golem.group.rockwool": "Rockwool", - "entity.thermal.golem.group.rubber": "Rubber", - "entity.thermal.golem.group.slag": "Slag", - "entity.quark.golem.ashen_log": "Ashen Log Golem", - "entity.quark.golem.azalea_log": "Azalea Log Golem", - "entity.quark.golem.black_corundum": "Black Corundum Golem", - "entity.quark.golem.black_framed_glass": "Black Framed Glass Golem", - "entity.quark.golem.blaze_lantern": "Blaze Lantern Golem", - "entity.quark.golem.blaze_mesh": "Blaze Mesh Golem", - "entity.quark.golem.blue_corundum": "Blue Corundum Golem", - "entity.quark.golem.blue_framed_glass": "Blue Framed Glass Golem", - "entity.quark.golem.brown_framed_glass": "Brown Framed Glass Golem", - "entity.quark.golem.calcite": "Polished Calcite Golem", - "entity.quark.golem.charcoal": "Charcoal Golem", - "entity.quark.golem.cyan_framed_glass": "Cyan Framed Glass Golem", - "entity.quark.golem.dripstone": "Polished Dripstone Golem", - "entity.quark.golem.duskbound": "Duskbound Golem", - "entity.quark.golem.duskbound_lantern": "Duskbound Lantern Golem", - "entity.quark.golem.framed_glass": "Framed Glass Golem", - "entity.quark.golem.glow_shroom": "Glow Shroom Golem", - "entity.quark.golem.gray_framed_glass": "Gray Framed Glass Golem", - "entity.quark.golem.green_corundum": "Green Corundum Golem", - "entity.quark.golem.green_framed_glass": "Green Framed Glass Golem", - "entity.quark.golem.indigo_corundum": "Indigo Corundum Golem", - "entity.quark.golem.iron_plate": "Iron Plate Golem", - "entity.quark.golem.jasper": "Polished Jasper Golem", - "entity.quark.golem.light_blue_framed_glass": "Light Blue Framed Glass Golem", - "entity.quark.golem.light_gray_framed_glass": "Light Gray Framed Glass Golem", - "entity.quark.golem.limestone": "Polished Limestone Golem", - "entity.quark.golem.lime_framed_glass": "Lime Framed Glass Golem", - "entity.quark.golem.magenta_framed_glass": "Magenta Framed Glass Golem", - "entity.quark.golem.midori": "Midori Golem", - "entity.quark.golem.myalite": "Myalite Golem", - "entity.quark.golem.orange_corundum": "Orange Corundum Golem", - "entity.quark.golem.orange_framed_glass": "Orange Framed Glass Golem", - "entity.quark.golem.permafrost": "Permafrost Golem", - "entity.quark.golem.pink_framed_glass": "Pink Framed Glass Golem", - "entity.quark.golem.purple_framed_glass": "Purple Framed Glass Golem", - "entity.quark.golem.red_corundum": "Red Corundum Golem", - "entity.quark.golem.red_framed_glass": "Red Framed Glass Golem", - "entity.quark.golem.rusty_iron_plate": "Rusty Iron Plate Golem", - "entity.quark.golem.shale": "Polished Shale Golem", - "entity.quark.golem.soul_sandstone": "Soul Sandstone Golem", - "entity.quark.golem.stripped_ashen_log": "Stripped Ashen Log Golem", - "entity.quark.golem.stripped_azalea_log": "Stripped Azalea Log Golem", - "entity.quark.golem.stripped_trumpet_log": "Stripped Trumpet Log Golem", - "entity.quark.golem.sturdy_stone": "Sturdy Stone Golem", - "entity.quark.golem.thatch": "Thatch Golem", - "entity.quark.golem.trumpet_log": "Trumpet Log Golem", - "entity.quark.golem.tuff": "Polished Tuff Golem", - "entity.quark.golem.violet_corundum": "Violet Corundum Golem", - "entity.quark.golem.white_corundum": "White Corundum Golem", - "entity.quark.golem.white_framed_glass": "White Framed Glass Golem", - "entity.quark.golem.yellow_corundum": "Yellow Corundum Golem", - "entity.quark.golem.yellow_framed_glass": "Yellow Framed Glass Golem", - "entity.quark.golem.group.corundum": "Corundum", - "entity.quark.golem.group.framed_glass": "Framed Glass", - "entity.quark.golem.group.iron_plate": "Iron Plate", - "golem.description.attack": "\u653b\u51fb\u529b", - "golem.description.attack.icon": "\u2694", - "golem.description.axe": "an axe", - "golem.description.flowers": "flowers", - "golem.description.fuel": "\u71c3\u6599: %1$s", - "golem.description.group": "Group: %1$s", - "golem.description.health": "\u751f\u547d\u503c", - "golem.description.health.icon": "\u2764", - "golem.description.invulnerable": "\u575a\u4e0d\u53ef\u6467\u7684!", - "golem.description.knockback": "\u5177\u6709\u5927\u8303\u56f4\u7684\u51fb\u9000\u80fd\u529b", - "golem.description.occludes": "Occludes vibrations", - "golem.description.swim": "\u53ef\u4ee5\u6e38\u6cf3\uff01", - "golem.description.sticky": "\u7c98\u7a20\u7684\uff01", - "golem.description.toggle_light": "Interact to toggle light", - "golem.description.behavior.aoe_dry": "Absorbs water", - "golem.description.behavior.aoe_freeze": "Freezes water and cools lava", - "golem.description.behavior.aoe_grow": "Grows nearby crops", - "golem.description.arrows": "\u7bad\u77e2: %1$s", - "golem.description.fireballs": "Fireballs: %1$s", - "golem.description.snowballs": "Snowballs: %1$s", - "golem.description.behavior.burn_in_sun": "Burns in daylight", - "golem.description.behavior.crafting_menu": "Interact to open a crafting menu", - "golem.description.behavior.effect.single": "Applies %1$s to %2$s", - "golem.description.behavior.effect.single.predicate": "Applies %1$s to %2$s when %3$s", - "golem.description.behavior.effect.multiple": "Applies potion effects to %1$s", - "golem.description.behavior.effect.multiple.predicate": "Applies potion effects to %1$s when %2$s", - "golem.description.behavior.explode": "Caution: May explode randomly!", - "golem.description.behavior.follow": "Follows %1$s", - "golem.description.behavior.item_update_golem.empty_hand": "empty hand", - "golem.description.behavior.item_update_golem.golem": "Use %1$s to convert to %2$s", - "golem.description.behavior.item_update_golem.golem.predicate": "Use %1$s to convert to %2$s when %3$s", - "golem.description.behavior.item_update_golem.variant": "Use %1$s to change variant", - "golem.description.behavior.item_update_golem.variant.predicate": "Use %1$s to change variant when %2$s", - "golem.description.behavior.light": "Provides light", - "golem.description.behavior.place": "Places %1$s", - "golem.description.behavior.place.predicate": "Places %1$s when %2$s", - "golem.description.behavior.power": "Provides redstone power", - "golem.description.behavior.set_fire": "Lights %1$s on fire", - "golem.description.behavior.set_fire.predicate": "Lights %1$s on fire when %2$s", - "golem.description.behavior.split_on_death": "Splits in %1$s!", - "golem.description.behavior.shoot_arrows": "Shoots arrows!", - "golem.description.behavior.shoot.refill": "\uff08\u53f3\u952e\u91cd\u65b0\u88c5\u586b\u7bad\u77e2\uff09", - "golem.description.behavior.shoot_fireballs": "Shoots fireballs!", - "golem.description.behavior.shoot_shulker_bullets": "Shoots shulker bullets!", - "golem.description.behavior.shoot_snowballs": "Shoots snowballs!", - "golem.description.behavior.summon": "Summons %1$s", - "golem.description.behavior.summon.predicate": "Summons %1$s when %2$s", - "golem.description.behavior.teleport": "Teleports randomly", - "golem.description.behavior.tempt": "Tempt with %1$s", - "golem.description.behavior.update_golem.golem": "Converts to %1$s", - "golem.description.behavior.update_golem.golem.predicate": "Converts to %1$s when %2$s", - "golem.description.behavior.update_golem.variant": "Changes variant", - "golem.description.behavior.update_golem.variant.predicate": "Changes variant when %1$s", - "golem.description.behavior.use_fuel": "\u6d88\u8017\u71c3\u6599", - "golem.description.target_type.self": "self", - "golem.description.target_type.enemy": "enemy", - "golem.description.target_type.area": "nearby creatures", - "golem.description.predicates.and": "%1$s and %2$s", - "golem.description.predicates.or": "%1$s or %2$s", - "golem.description.golem_predicate.wet": "wet", - "golem.description.golem_predicate.dry": "dry", - "golem.description.golem_predicate.fuel": "fueled", - "golem.description.golem_predicate.fuel_empty": "not fueled", - "golem.description.golem_predicate.arrows": "golem has arrows in inventory", - "golem.description.golem_predicate.arrows_empty": "golem has no arrows in inventory", - "golem.description.golem_predicate.fuse_lit": "fuse is lit", - "golem.description.golem_predicate.fuse_unlit": "fuse is not lit", - "golem.description.golem_predicate.baby": "golem is a baby", - "golem.description.golem_predicate.adult": "golem is not a baby", - "golem.description.golem_predicate.day": "daytime", - "golem.description.golem_predicate.night": "nighttime", - "golem.description.golem_predicate.clear": "weather is clear", - "golem.description.golem_predicate.rain": "weather is rainy", - "golem.description.golem_predicate.thunder": "weather is thundering", - "golem.description.trigger.hurt": "hurt", - "golem.description.trigger.attack": "attacking", - "golem.description.trigger.lightning": "struck by lightning", - "golem.description.trigger.target": "combat starts", - "golem.description.trigger.death": "dead", - "command.golem.invalid_id": "Invalid golem type %1$s", - "command.golem.success": "Summoned golem with type \"%1$s\" at (%2$s, %3$s, %4$s)", - "item.golems.guide_book": "\u66f4\u591a\u5080\u5121\u6307\u5357", - "item.golems.guide_book.page.intro1": "\u6b22\u8fce\u6765\u5230\u66f4\u591a\u5080\u5121! \u672c\u7bc7\u6307\u5f15\u4f1a\u5e2e\u52a9\u4f60\u5236\u9020\u81ea\u5df1\u7684\u5080\u5121\u5927\u519b\u3002", - "item.golems.guide_book.page.intro2": "\u7ffb\u8fc7\u8fd9\u4e00\u9875\u5f00\u59cb\uff01", - "item.golems.guide_book.page.contents.title": "\u76ee\u5f55", - "item.golems.guide_book.page.recipe_spell.recipe": "\u7b80\u5355!\u4f60\u53ea\u9700\u8981 1 %2$s, 1 %3$s, 1 %4$s, \u548c 1 %5$s \u5373\u53ef\u5236\u4f5c %1$s\uff01", - "item.golems.guide_book.page.recipe_head.recipe": "\u66f4\u7b80\u5355!\u4f60\u53ea\u9700\u8981 %2$s \u548c 1 %3$s\uff0c\u5373\u53ef\u5236\u4f5c %1$s\uff01", - "item.golems.guide_book.page.build_golem.title": "\u600e\u4e48\u53bb\u5236\u9020\u4e00\u4e2a\u5080\u5121", - "item.golems.guide_book.page.build_golem.howto1": "\u653e\u7f6e2\u4e2a\u65b9\u5757\uff0c\u4e00\u4e2a\u53e0\u5728\u53e6\u4e00\u4e2a\u4e4b\u4e0a\u3002", - "item.golems.guide_book.page.build_golem.howto2": "\u5728\u9876\u90e8\u65b9\u5757\u7684\u76f8\u5bf9\u7684\u4e24\u4fa7\u518d\u653e\u7f6e\u53e6\u5916\u4e24\u4e2a\u65b9\u5757", - "item.golems.guide_book.page.build_golem.howto3": "\u5c06%s\u653e\u7f6e\u5728\u4e2d\u95f4\u65b9\u5757\u7684\u9876\u90e8\u5373\u53ef\u5b8c\u6210\u642d\u5efa\uff01", - "config.jade.plugin_golems.jade_entity_provider": "Extra Golems", - "config.jade.plugin_golems.fg_color": "FG Color", - "config.jade.plugin_golems.show_icon": "Show Icon" -} \ No newline at end of file + "_comment": "Items and Blocks used by this mod", + "item.golems.golem_spell": "傀儡法术", + "item.golems.spawn_bedrock_golem": "生成基岩傀儡", + "item.golems.spawn_bedrock_golem.tooltip": "使用以生成%1$s\n对已存在的%1$s使用\n可以移除它", + "block.golems.golem_head": "傀儡头颅", + "_comment": "These will only show up in something like JEI", + "block.golems.light_provider": "动态傀儡光源", + "block.golems.power_provider": "动态傀儡能量源", + "_comment": "Extra Golems", + "entity.golems.golem.acacia_log": "金合欢原木傀儡", + "entity.golems.golem.amethyst": "紫水晶傀儡", + "entity.golems.golem.ancient_debris": "远古残骸傀儡", + "entity.golems.golem.andesite": "磨制安山岩傀儡", + "entity.golems.golem.bamboo_wood": "竹木傀儡", + "entity.golems.golem.basalt": "磨制玄武岩傀儡", + "entity.golems.golem.bedrock": "基岩傀儡", + "entity.golems.golem.birch_log": "白桦原木傀儡", + "entity.golems.golem.blackstone": "磨制黑石傀儡", + "entity.golems.golem.black_concrete": "黑色混凝土傀儡", + "entity.golems.golem.black_glazed_terracotta": "黑色带釉陶瓦傀儡", + "entity.golems.golem.black_stained_glass": "黑色染色玻璃傀儡", + "entity.golems.golem.black_terracotta": "黑色陶瓦傀儡", + "entity.golems.golem.black_wool": "黑色羊毛傀儡", + "entity.golems.golem.blue_concrete": "蓝色混凝土傀儡", + "entity.golems.golem.blue_glazed_terracotta": "蓝色带釉陶瓦傀儡", + "entity.golems.golem.blue_stained_glass": "蓝色染色玻璃傀儡", + "entity.golems.golem.blue_terracotta": "蓝色陶瓦傀儡", + "entity.golems.golem.blue_wool": "蓝色羊毛傀儡", + "entity.golems.golem.bone": "骨头傀儡", + "entity.golems.golem.bookshelf": "图书管理员傀儡", + "entity.golems.golem.brain_coral": "脑纹珊瑚傀儡", + "entity.golems.golem.brick": "红砖傀儡", + "entity.golems.golem.brown_concrete": "棕色混凝土傀儡", + "entity.golems.golem.brown_glazed_terracotta": "棕色带釉陶瓦傀儡", + "entity.golems.golem.brown_mushroom": "棕色蘑菇傀儡", + "entity.golems.golem.brown_stained_glass": "棕色染色玻璃傀儡", + "entity.golems.golem.brown_terracotta": "棕色陶瓦傀儡", + "entity.golems.golem.brown_wool": "棕色羊毛傀儡", + "entity.golems.golem.bubble_coral": "气泡珊瑚傀儡", + "entity.golems.golem.charcoal": "木炭傀儡", + "entity.golems.golem.cherry_log": "樱花原木傀儡", + "entity.golems.golem.clay": "粘土傀儡", + "entity.golems.golem.coal": "煤炭傀儡", + "entity.golems.golem.copper": "铜傀儡", + "entity.golems.golem.crafting": "工作台傀儡", + "entity.golems.golem.crimson_stem": "绯红菌柄傀儡", + "entity.golems.golem.crying_obsidian": "哭泣的黑曜石傀儡", + "entity.golems.golem.cyan_concrete": "青色混凝土傀儡", + "entity.golems.golem.cyan_glazed_terracotta": "青色带釉陶瓦傀儡", + "entity.golems.golem.cyan_stained_glass": "青色染色玻璃傀儡", + "entity.golems.golem.cyan_terracotta": "青色陶瓦傀儡", + "entity.golems.golem.cyan_wool": "青色羊毛傀儡", + "entity.golems.golem.dark_oak_log": "深色橡木原木傀儡", + "entity.golems.golem.dead_brain_coral": "失活的脑纹珊瑚傀儡", + "entity.golems.golem.dead_bubble_coral": "失活的气泡珊瑚傀儡", + "entity.golems.golem.dead_fire_coral": "失活的火珊瑚傀儡", + "entity.golems.golem.dead_horn_coral": "失活的鹿角珊瑚傀儡", + "entity.golems.golem.dead_tube_coral": "失活的管珊瑚傀儡", + "entity.golems.golem.deepslate": "磨制深板岩傀儡", + "entity.golems.golem.diamond": "钻石傀儡", + "entity.golems.golem.diorite": "磨制闪长岩傀儡", + "entity.golems.golem.dispenser": "发射器傀儡", + "entity.golems.golem.dried_kelp": "干海带傀儡", + "entity.golems.golem.emerald": "绿宝石傀儡", + "entity.golems.golem.end_stone": "末地石傀儡", + "entity.golems.golem.exposed_copper": "斑驳的铜傀儡", + "entity.golems.golem.fire_coral": "火珊瑚傀儡", + "entity.golems.golem.furnace": "熔炉傀儡", + "entity.golems.golem.glass": "玻璃傀儡", + "entity.golems.golem.glowstone": "荧石傀儡", + "entity.golems.golem.gold": "金傀儡", + "entity.golems.golem.granite": "磨制花岗岩傀儡", + "entity.golems.golem.gray_concrete": "灰色混凝土傀儡", + "entity.golems.golem.gray_glazed_terracotta": "灰色带釉陶瓦傀儡", + "entity.golems.golem.gray_stained_glass": "灰色染色玻璃傀儡", + "entity.golems.golem.gray_terracotta": "灰色陶瓦傀儡", + "entity.golems.golem.gray_wool": "灰色羊毛傀儡", + "entity.golems.golem.green_concrete": "绿色混凝土傀儡", + "entity.golems.golem.green_glazed_terracotta": "绿色带釉陶瓦傀儡", + "entity.golems.golem.green_stained_glass": "绿色染色玻璃傀儡", + "entity.golems.golem.green_terracotta": "绿色陶瓦傀儡", + "entity.golems.golem.green_wool": "绿色羊毛傀儡", + "entity.golems.golem.hay": "稻草傀儡", + "entity.golems.golem.honey": "蜂蜜傀儡", + "entity.golems.golem.honeycomb": "蜜脾傀儡", + "entity.golems.golem.horn_coral": "鹿角珊瑚傀儡", + "entity.golems.golem.ice": "冰傀儡", + "entity.golems.golem.jungle_log": "丛林原木傀儡", + "entity.golems.golem.lapis": "青金石傀儡", + "entity.golems.golem.leaves": "树叶傀儡", + "entity.golems.golem.light_blue_concrete": "淡蓝色混凝土傀儡", + "entity.golems.golem.light_blue_glazed_terracotta": "淡蓝色带釉陶瓦傀儡", + "entity.golems.golem.light_blue_stained_glass": "淡蓝色染色玻璃傀儡", + "entity.golems.golem.light_blue_terracotta": "淡蓝色陶瓦傀儡", + "entity.golems.golem.light_blue_wool": "淡蓝色羊毛傀儡", + "entity.golems.golem.light_gray_concrete": "淡灰色混凝土傀儡", + "entity.golems.golem.light_gray_glazed_terracotta": "淡灰色带釉陶瓦傀儡", + "entity.golems.golem.light_gray_stained_glass": "淡灰色染色玻璃傀儡", + "entity.golems.golem.light_gray_terracotta": "淡灰色陶瓦傀儡", + "entity.golems.golem.light_gray_wool": "淡灰色羊毛傀儡", + "entity.golems.golem.lime_concrete": "黄绿色混凝土傀儡", + "entity.golems.golem.lime_glazed_terracotta": "黄绿色带釉陶瓦傀儡", + "entity.golems.golem.lime_stained_glass": "黄绿色染色玻璃傀儡", + "entity.golems.golem.lime_terracotta": "黄绿色陶瓦傀儡", + "entity.golems.golem.lime_wool": "黄绿色羊毛傀儡", + "entity.golems.golem.magenta_concrete": "品红色混凝土傀儡", + "entity.golems.golem.magenta_glazed_terracotta": "品红色带釉陶瓦傀儡", + "entity.golems.golem.magenta_stained_glass": "品红色染色玻璃傀儡", + "entity.golems.golem.magenta_terracotta": "品红色陶瓦傀儡", + "entity.golems.golem.magenta_wool": "品红色羊毛傀儡", + "entity.golems.golem.magma": "岩浆傀儡", + "entity.golems.golem.mangrove_log": "红树原木傀儡", + "entity.golems.golem.mangrove_roots": "红树根傀儡", + "entity.golems.golem.melon": "西瓜傀儡", + "entity.golems.golem.moss": "苔藓傀儡", + "entity.golems.golem.mud": "泥巴傀儡", + "entity.golems.golem.muddy_mangrove_roots": "沾泥的红树根傀儡", + "entity.golems.golem.netherite": "下界合金傀儡", + "entity.golems.golem.nether_brick": "下界砖傀儡", + "entity.golems.golem.nether_wart": "下界疣傀儡", + "entity.golems.golem.oak_log": "橡木原木傀儡", + "entity.golems.golem.obsidian": "黑曜石傀儡", + "entity.golems.golem.ochre_froglight": "赭黄蛙明灯傀儡", + "entity.golems.golem.orange_concrete": "橙色混凝土傀儡", + "entity.golems.golem.orange_glazed_terracotta": "橙色带釉陶瓦傀儡", + "entity.golems.golem.orange_stained_glass": "橙色染色玻璃傀儡", + "entity.golems.golem.orange_terracotta": "橙色陶瓦傀儡", + "entity.golems.golem.orange_wool": "橙色羊毛傀儡", + "entity.golems.golem.oxidized_copper": "氧化的铜傀儡", + "entity.golems.golem.packed_mud": "泥坯傀儡", + "entity.golems.golem.pearlescent_froglight": "珠光蛙明灯傀儡", + "entity.golems.golem.pink_concrete": "粉红色混凝土傀儡", + "entity.golems.golem.pink_glazed_terracotta": "粉红色带釉陶瓦傀儡", + "entity.golems.golem.pink_stained_glass": "粉红色染色玻璃傀儡", + "entity.golems.golem.pink_terracotta": "粉红色陶瓦傀儡", + "entity.golems.golem.pink_wool": "粉红色羊毛傀儡", + "entity.golems.golem.prismarine": "海晶石傀儡", + "entity.golems.golem.purple_concrete": "紫色混凝土傀儡", + "entity.golems.golem.purple_glazed_terracotta": "紫色带釉陶瓦傀儡", + "entity.golems.golem.purple_stained_glass": "紫色染色玻璃傀儡", + "entity.golems.golem.purple_terracotta": "紫色陶瓦傀儡", + "entity.golems.golem.purple_wool": "紫色羊毛傀儡", + "entity.golems.golem.purpur": "紫珀傀儡", + "entity.golems.golem.quartz": "石英傀儡", + "entity.golems.golem.raw_copper": "粗铜傀儡", + "entity.golems.golem.raw_gold": "粗金傀儡", + "entity.golems.golem.raw_iron": "粗铁傀儡", + "entity.golems.golem.redstone": "红石傀儡", + "entity.golems.golem.redstone_lamp": "红石灯傀儡", + "entity.golems.golem.red_concrete": "红色混凝土傀儡", + "entity.golems.golem.red_glazed_terracotta": "红色带釉陶瓦傀儡", + "entity.golems.golem.red_mushroom": "红色蘑菇傀儡", + "entity.golems.golem.red_nether_brick": "红色下界砖傀儡", + "entity.golems.golem.red_sandstone": "红砂岩傀儡", + "entity.golems.golem.red_stained_glass": "红色染色玻璃傀儡", + "entity.golems.golem.red_terracotta": "红色陶瓦傀儡", + "entity.golems.golem.red_wool": "红色羊毛傀儡", + "entity.golems.golem.sandstone": "砂岩傀儡", + "entity.golems.golem.sculk": "幽匿傀儡", + "entity.golems.golem.sculk_catalyst": "幽匿催发体傀儡", + "entity.golems.golem.sea_lantern": "海晶灯傀儡", + "entity.golems.golem.shroomlight": "菌光体傀儡", + "entity.golems.golem.slime": "史莱姆傀儡", + "entity.golems.golem.smooth_stone": "平滑石头傀儡", + "entity.golems.golem.sponge": "海绵傀儡", + "entity.golems.golem.spruce_log": "云杉原木傀儡", + "entity.golems.golem.stripped_acacia_log": "去皮金合欢原木傀儡", + "entity.golems.golem.stripped_bamboo_wood": "去皮竹木傀儡", + "entity.golems.golem.stripped_birch_log": "去皮白桦原木傀儡", + "entity.golems.golem.stripped_cherry_log": "去皮樱花原木傀儡", + "entity.golems.golem.stripped_crimson_stem": "去皮绯红菌柄傀儡", + "entity.golems.golem.stripped_dark_oak_log": "去皮深色橡木原木傀儡", + "entity.golems.golem.stripped_jungle_log": "去皮丛林原木傀儡", + "entity.golems.golem.stripped_mangrove_log": "去皮红树原木傀儡", + "entity.golems.golem.stripped_oak_log": "去皮橡木原木傀儡", + "entity.golems.golem.stripped_spruce_log": "去皮云杉原木傀儡", + "entity.golems.golem.stripped_warped_stem": "去皮诡异菌柄傀儡", + "entity.golems.golem.terracotta": "陶瓦傀儡", + "entity.golems.golem.tinted_glass": "遮光玻璃傀儡", + "entity.golems.golem.tnt": "TNT傀儡", + "entity.golems.golem.tube_coral": "管珊瑚傀儡", + "entity.golems.golem.verdant_froglight": "青翠蛙明灯傀儡", + "entity.golems.golem.warped_stem": "诡异菌柄傀儡", + "entity.golems.golem.warped_wart": "诡异疣傀儡", + "entity.golems.golem.waxed_copper": "涂蜡铜傀儡", + "entity.golems.golem.waxed_exposed_copper": "涂蜡斑驳的铜傀儡", + "entity.golems.golem.waxed_oxidized_copper": "涂蜡氧化的铜傀儡", + "entity.golems.golem.waxed_weathered_copper": "涂蜡锈蚀的铜傀儡", + "entity.golems.golem.weathered_copper": "锈蚀的铜傀儡", + "entity.golems.golem.white_concrete": "白色混凝土傀儡", + "entity.golems.golem.white_glazed_terracotta": "白色带釉陶瓦傀儡", + "entity.golems.golem.white_stained_glass": "白色染色玻璃傀儡", + "entity.golems.golem.white_terracotta": "白色陶瓦傀儡", + "entity.golems.golem.white_wool": "白色羊毛傀儡", + "entity.golems.golem.yellow_concrete": "黄色混凝土傀儡", + "entity.golems.golem.yellow_glazed_terracotta": "黄色带釉陶瓦傀儡", + "entity.golems.golem.yellow_stained_glass": "黄色染色玻璃傀儡", + "entity.golems.golem.yellow_terracotta": "黄色陶瓦傀儡", + "entity.golems.golem.yellow_wool": "黄色羊毛傀儡", + "_comment": "Extra Golems Groups", + "entity.golems.golem.group.bamboo": "竹木", + "entity.golems.golem.group.bookshelf": "书架", + "entity.golems.golem.group.coal": "煤炭", + "entity.golems.golem.group.concrete": "混凝土", + "entity.golems.golem.group.copper": "铜", + "entity.golems.golem.group.coral": "珊瑚", + "entity.golems.golem.group.crafting": "工作台", + "entity.golems.golem.group.explosive": "爆炸物", + "entity.golems.golem.group.froglight": "蛙明灯", + "entity.golems.golem.group.furnace": "熔炉", + "entity.golems.golem.group.glass": "玻璃", + "entity.golems.golem.group.glazed_terracotta": "带釉陶瓦", + "entity.golems.golem.group.ice": "冰", + "entity.golems.golem.group.leaves": "树叶", + "entity.golems.golem.group.log": "原木", + "entity.golems.golem.group.moss": "苔藓", + "entity.golems.golem.group.mushroom": "蘑菇", + "entity.golems.golem.group.nether_brick": "下界砖", + "entity.golems.golem.group.nether_wart": "下界疣", + "entity.golems.golem.group.obsidian": "黑曜石", + "entity.golems.golem.group.raw_ore": "粗矿", + "entity.golems.golem.group.roots": "根", + "entity.golems.golem.group.sandstone": "砂岩", + "entity.golems.golem.group.slime": "史莱姆", + "entity.golems.golem.group.stem": "菌柄", + "entity.golems.golem.group.stone": "石头", + "entity.golems.golem.group.terracotta": "陶瓦", + "entity.golems.golem.group.wool": "羊毛", + "_comment": "Extra Golems Addon Groups", + "entity.golems.golem.group.aluminum": "铝", + "entity.golems.golem.group.bronze": "青铜", + "entity.golems.golem.group.fluorite": "萤石", + "entity.golems.golem.group.lead": "铅", + "entity.golems.golem.group.nickel": "镍", + "entity.golems.golem.group.silver": "银", + "entity.golems.golem.group.steel": "钢", + "entity.golems.golem.group.tin": "锡", + "_comment": "Mekanism", + "entity.mekanism.golem.bronze": "青铜傀儡", + "entity.mekanism.golem.fluorite": "萤石傀儡", + "entity.mekanism.golem.lead": "铅傀儡", + "entity.mekanism.golem.osmium": "锇傀儡", + "entity.mekanism.golem.raw_lead": "粗铅傀儡", + "entity.mekanism.golem.raw_osmium": "粗锇傀儡", + "entity.mekanism.golem.raw_tin": "粗锡傀儡", + "entity.mekanism.golem.raw_uranium": "粗铀傀儡", + "entity.mekanism.golem.refined_glowstone": "精炼荧石傀儡", + "entity.mekanism.golem.refined_obsidian": "精炼黑曜石傀儡", + "entity.mekanism.golem.salt": "盐傀儡", + "entity.mekanism.golem.steel": "钢傀儡", + "entity.mekanism.golem.tin": "锡傀儡", + "entity.mekanism.golem.uranium": "铀傀儡", + "_comment": "Biomes O Plenty", + "entity.biomesoplenty.golem.black_sandstone": "黑砂岩傀儡", + "entity.biomesoplenty.golem.brimstone_brick": "硫磺砖傀儡", + "entity.biomesoplenty.golem.dead_log": "枯木原木傀儡", + "entity.biomesoplenty.golem.fir_log": "冷杉原木傀儡", + "entity.biomesoplenty.golem.flesh": "血肉傀儡", + "entity.biomesoplenty.golem.glowing_moss": "发光苔藓傀儡", + "entity.biomesoplenty.golem.glowshroom": "发光蘑菇傀儡", + "entity.biomesoplenty.golem.hellbark_log": "地狱皮傀儡", + "entity.biomesoplenty.golem.jacaranda_log": "蓝花楹原木傀儡", + "entity.biomesoplenty.golem.magic_log": "魔法原木傀儡", + "entity.biomesoplenty.golem.mahogany_log": "桃花心木原木傀儡", + "entity.biomesoplenty.golem.orange_sandstone": "橙色砂岩傀儡", + "entity.biomesoplenty.golem.palm_log": "棕榈原木傀儡", + "entity.biomesoplenty.golem.porous_flesh": "多孔血肉傀儡", + "entity.biomesoplenty.golem.redwood_log": "红木原木傀儡", + "entity.biomesoplenty.golem.stripped_dead_log": "去皮枯木原木傀儡", + "entity.biomesoplenty.golem.stripped_fir_log": "去皮冷杉原木傀儡", + "entity.biomesoplenty.golem.stripped_hellbark_log": "去皮地狱皮傀儡", + "entity.biomesoplenty.golem.stripped_jacaranda_log": "去皮蓝花楹原木傀儡", + "entity.biomesoplenty.golem.stripped_magic_log": "去皮魔法原木傀儡", + "entity.biomesoplenty.golem.stripped_mahogany_log": "去皮桃花心木原木傀儡", + "entity.biomesoplenty.golem.stripped_palm_log": "去皮棕榈原木傀儡", + "entity.biomesoplenty.golem.stripped_redwood_log": "去皮红木原木傀儡", + "entity.biomesoplenty.golem.stripped_umbran_log": "去皮暗影原木傀儡", + "entity.biomesoplenty.golem.stripped_willow_log": "去皮柳木原木傀儡", + "entity.biomesoplenty.golem.toadstool": "毒蕈傀儡", + "entity.biomesoplenty.golem.umbran_log": "暗影原木傀儡", + "entity.biomesoplenty.golem.white_sandstone": "白色砂岩傀儡", + "entity.biomesoplenty.golem.willow_log": "柳木原木傀儡", + "_comment": "Biomes O Plenty Groups", + "entity.biomesoplenty.golem.group.flesh": "血肉", + "_comment": "Thermal Series", + "entity.thermal.golem.apatite": "磷灰石傀儡", + "entity.thermal.golem.bitumen": "沥青傀儡", + "entity.thermal.golem.black_rockwool": "黑色岩棉傀儡", + "entity.thermal.golem.blue_rockwool": "蓝色岩棉傀儡", + "entity.thermal.golem.bronze": "青铜傀儡", + "entity.thermal.golem.brown_rockwool": "棕色岩棉傀儡", + "entity.thermal.golem.cinnabar": "朱砂傀儡", + "entity.thermal.golem.coal_coke": "焦煤傀儡", + "entity.thermal.golem.constantan": "康铜傀儡", + "entity.thermal.golem.cured_rubber": "硫化橡胶傀儡", + "entity.thermal.golem.cyan_rockwool": "青色岩棉傀儡", + "entity.thermal.golem.disruption_explosive": "扰乱炸药傀儡", + "entity.thermal.golem.electrum": "琥珀金傀儡", + "entity.thermal.golem.enderium": "末影傀儡", + "entity.thermal.golem.enderium_glass": "末影玻璃傀儡", + "entity.thermal.golem.fulminating_explosive": "爆裂炸药傀儡", + "entity.thermal.golem.glacial_explosive": "冰川炸药傀儡", + "entity.thermal.golem.gray_rockwool": "灰色岩棉傀儡", + "entity.thermal.golem.green_rockwool": "绿色岩棉傀儡", + "entity.thermal.golem.gunpowder": "火药傀儡", + "entity.thermal.golem.hardened_glass": "硬化玻璃傀儡", + "entity.thermal.golem.inferno_explosive": "地狱炸药傀儡", + "entity.thermal.golem.invar": "殷钢傀儡", + "entity.thermal.golem.lead": "铅傀儡", + "entity.thermal.golem.light_blue_rockwool": "淡蓝色岩棉傀儡", + "entity.thermal.golem.light_gray_rockwool": "淡灰色岩棉傀儡", + "entity.thermal.golem.lime_rockwool": "黄绿色岩棉傀儡", + "entity.thermal.golem.lumium": "流明傀儡", + "entity.thermal.golem.lumium_glass": "流明玻璃傀儡", + "entity.thermal.golem.magenta_rockwool": "品红色岩棉傀儡", + "entity.thermal.golem.nickel": "镍傀儡", + "entity.thermal.golem.niter": "硝石傀儡", + "entity.thermal.golem.nuclear_explosive": "核子炸药傀儡", + "entity.thermal.golem.orange_rockwool": "橙色岩棉傀儡", + "entity.thermal.golem.pink_rockwool": "粉红色岩棉傀儡", + "entity.thermal.golem.pnt": "PNT傀儡", + "entity.thermal.golem.purple_rockwool": "紫色岩棉傀儡", + "entity.thermal.golem.radiant_explosive": "辐射炸药傀儡", + "entity.thermal.golem.raw_lead": "粗铅傀儡", + "entity.thermal.golem.raw_nickel": "粗镍傀儡", + "entity.thermal.golem.raw_silver": "粗银傀儡", + "entity.thermal.golem.raw_tin": "粗锡傀儡", + "entity.thermal.golem.redstone_explosive": "红石炸药傀儡", + "entity.thermal.golem.red_rockwool": "红色岩棉傀儡", + "entity.thermal.golem.rich_slag": "富渣傀儡", + "entity.thermal.golem.rosin": "松香傀儡", + "entity.thermal.golem.rubber": "橡胶傀儡", + "entity.thermal.golem.rubberwood_log": "橡胶木原木傀儡", + "entity.thermal.golem.ruby": "红宝石傀儡", + "entity.thermal.golem.sapphire": "蓝宝石傀儡", + "entity.thermal.golem.sawdust": "锯末傀儡", + "entity.thermal.golem.signalum": "信素傀儡", + "entity.thermal.golem.signalum_glass": "信素玻璃傀儡", + "entity.thermal.golem.silver": "银傀儡", + "entity.thermal.golem.slag": "炉渣傀儡", + "entity.thermal.golem.slime_explosive": "史莱姆炸药傀儡", + "entity.thermal.golem.stripped_rubberwood_log": "去皮橡胶木原木傀儡", + "entity.thermal.golem.sulfur": "硫磺傀儡", + "entity.thermal.golem.tar": "焦油傀儡", + "entity.thermal.golem.tectonic_explosive": "地壳炸药傀儡", + "entity.thermal.golem.tin": "锡傀儡", + "entity.thermal.golem.white_rockwool": "白色岩棉傀儡", + "entity.thermal.golem.yellow_rockwool": "黄色岩棉傀儡", + "_comment": "Thermal Series Groups", + "entity.thermal.golem.group.rockwool": "岩棉", + "entity.thermal.golem.group.rubber": "橡胶", + "entity.thermal.golem.group.slag": "炉渣", + "_comment": "Quark", + "entity.quark.golem.ashen_log": "灰烬原木傀儡", + "entity.quark.golem.azalea_log": "杜鹃原木傀儡", + "entity.quark.golem.black_corundum": "黑刚玉傀儡", + "entity.quark.golem.black_framed_glass": "黑色镶框玻璃傀儡", + "entity.quark.golem.blaze_lantern": "烈焰灯笼傀儡", + "entity.quark.golem.blaze_mesh": "烈焰网傀儡", + "entity.quark.golem.blue_corundum": "蓝刚玉傀儡", + "entity.quark.golem.blue_framed_glass": "蓝色镶框玻璃傀儡", + "entity.quark.golem.brown_framed_glass": "棕色镶框玻璃傀儡", + "entity.quark.golem.calcite": "磨制方解石傀儡", + "entity.quark.golem.charcoal": "木炭傀儡", + "entity.quark.golem.cyan_framed_glass": "青色镶框玻璃傀儡", + "entity.quark.golem.dripstone": "磨制滴水石傀儡", + "entity.quark.golem.duskbound": "暮缚傀儡", + "entity.quark.golem.duskbound_lantern": "暮缚灯笼傀儡", + "entity.quark.golem.framed_glass": "镶框玻璃傀儡", + "entity.quark.golem.glow_shroom": "荧光蘑菇傀儡", + "entity.quark.golem.gray_framed_glass": "灰色镶框玻璃傀儡", + "entity.quark.golem.green_corundum": "绿刚玉傀儡", + "entity.quark.golem.green_framed_glass": "绿色镶框玻璃傀儡", + "entity.quark.golem.indigo_corundum": "靛青刚玉傀儡", + "entity.quark.golem.iron_plate": "铁板傀儡", + "entity.quark.golem.jasper": "磨制碧玉傀儡", + "entity.quark.golem.light_blue_framed_glass": "淡蓝色镶框玻璃傀儡", + "entity.quark.golem.light_gray_framed_glass": "淡灰色镶框玻璃傀儡", + "entity.quark.golem.limestone": "磨制石灰石傀儡", + "entity.quark.golem.lime_framed_glass": "黄绿色镶框玻璃傀儡", + "entity.quark.golem.magenta_framed_glass": "品红色镶框玻璃傀儡", + "entity.quark.golem.midori": "翠绿傀儡", + "entity.quark.golem.myalite": "紫晶石傀儡", + "entity.quark.golem.orange_corundum": "橙刚玉傀儡", + "entity.quark.golem.orange_framed_glass": "橙色镶框玻璃傀儡", + "entity.quark.golem.permafrost": "永冻土傀儡", + "entity.quark.golem.pink_framed_glass": "粉红色镶框玻璃傀儡", + "entity.quark.golem.purple_framed_glass": "紫色镶框玻璃傀儡", + "entity.quark.golem.red_corundum": "红刚玉傀儡", + "entity.quark.golem.red_framed_glass": "红色镶框玻璃傀儡", + "entity.quark.golem.rusty_iron_plate": "锈蚀铁板傀儡", + "entity.quark.golem.shale": "磨制页岩傀儡", + "entity.quark.golem.soul_sandstone": "灵魂砂岩傀儡", + "entity.quark.golem.stripped_ashen_log": "去皮灰烬原木傀儡", + "entity.quark.golem.stripped_azalea_log": "去皮杜鹃原木傀儡", + "entity.quark.golem.stripped_trumpet_log": "去皮喇叭花原木傀儡", + "entity.quark.golem.sturdy_stone": "坚固石头傀儡", + "entity.quark.golem.thatch": "茅草傀儡", + "entity.quark.golem.trumpet_log": "喇叭花原木傀儡", + "entity.quark.golem.tuff": "磨制凝灰岩傀儡", + "entity.quark.golem.violet_corundum": "紫罗兰刚玉傀儡", + "entity.quark.golem.white_corundum": "白刚玉傀儡", + "entity.quark.golem.white_framed_glass": "白色镶框玻璃傀儡", + "entity.quark.golem.yellow_corundum": "黄刚玉傀儡", + "entity.quark.golem.yellow_framed_glass": "黄色镶框玻璃傀儡", + "_comment": "Quark Groups", + "entity.quark.golem.group.corundum": "刚玉", + "entity.quark.golem.group.framed_glass": "镶框玻璃", + "entity.quark.golem.group.iron_plate": "铁板", + "_comment": "Golem Descriptions", + "golem.description.attack": "攻击:%1$s", + "golem.description.attack.icon": "\u2694", + "golem.description.axe": "斧头", + "golem.description.flowers": "花朵", + "golem.description.fuel": "燃料:%1$s", + "golem.description.group": "组别:%1$s", + "golem.description.health": "生命值:%1$s", + "golem.description.health.icon": "\u2764", + "golem.description.invulnerable": "无敌!", + "golem.description.knockback": "巨大击退攻击!", + "golem.description.occludes": "遮挡振动", + "golem.description.swim": "高级游泳者!", + "golem.description.sticky": "&6粘性!", + "golem.description.toggle_light": "交互以切换光源", + "golem.description.behavior.aoe_dry": "吸收水", + "golem.description.behavior.aoe_freeze": "冻结水并冷却熔岩", + "golem.description.behavior.aoe_grow": "生长附近的作物", + "golem.description.arrows": "箭矢:%1$s", + "golem.description.fireballs": "火球:%1$s", + "golem.description.snowballs": "雪球:%1$s", + "golem.description.behavior.burn_in_sun": "在阳光下燃烧", + "golem.description.behavior.crafting_menu": "交互以打开工作台界面", + "golem.description.behavior.effect.single": "对%2$s施加%1$s", + "golem.description.behavior.effect.single.predicate": "当%3$s时对%2$s施加%1$s", + "golem.description.behavior.effect.multiple": "对%1$s施加药水效果", + "golem.description.behavior.effect.multiple.predicate": "当%2$s时对%1$s施加药水效果", + "golem.description.behavior.explode": "警告:可能随机爆炸!", + "golem.description.behavior.follow": "跟随%1$s", + "golem.description.behavior.item_update_golem.empty_hand": "空手", + "golem.description.behavior.item_update_golem.golem": "使用%1$s转化为%2$s", + "golem.description.behavior.item_update_golem.golem.predicate": "当%3$s时使用%1$s转化为%2$s", + "golem.description.behavior.item_update_golem.variant": "使用%1$s改变变种", + "golem.description.behavior.item_update_golem.variant.predicate": "当%2$s时使用%1$s改变变种", + "golem.description.behavior.light": "提供光源", + "golem.description.behavior.place": "放置%1$s", + "golem.description.behavior.place.predicate": "当%2$s时放置%1$s", + "golem.description.behavior.power": "提供红石能量", + "golem.description.behavior.set_fire": "点燃%1$s", + "golem.description.behavior.set_fire.predicate": "当%2$s时点燃%1$s", + "golem.description.behavior.split_on_death": "分裂为%1$s!", + "golem.description.behavior.shoot_arrows": "发射箭矢!", + "golem.description.behavior.shoot.refill": "(右键以补充)", + "golem.description.behavior.shoot_fireballs": "发射火球!", + "golem.description.behavior.shoot_shulker_bullets": "发射潜影弹!", + "golem.description.behavior.shoot_snowballs": "发射雪球!", + "golem.description.behavior.summon": "召唤%1$s", + "golem.description.behavior.summon.predicate": "当%2$s时召唤%1$s", + "golem.description.behavior.teleport": "随机传送", + "golem.description.behavior.tempt": "用%1$s诱惑", + "golem.description.behavior.update_golem.golem": "转化为%1$s", + "golem.description.behavior.update_golem.golem.predicate": "当%2$s时转化为%1$s", + "golem.description.behavior.update_golem.variant": "改变变种", + "golem.description.behavior.update_golem.variant.predicate": "当%1$s时改变变种", + "golem.description.behavior.use_fuel": "消耗燃料", + "golem.description.target_type.self": "自身", + "golem.description.target_type.enemy": "敌人", + "golem.description.target_type.area": "附近生物", + "golem.description.predicates.and": "%1$s且%2$s", + "golem.description.predicates.or": "%1$s或%2$s", + "golem.description.golem_predicate.wet": "潮湿", + "golem.description.golem_predicate.dry": "干燥", + "golem.description.golem_predicate.fuel": "有燃料", + "golem.description.golem_predicate.fuel_empty": "无燃料", + "golem.description.golem_predicate.arrows": "傀儡物品栏中有箭矢", + "golem.description.golem_predicate.arrows_empty": "傀儡物品栏中无箭矢", + "golem.description.golem_predicate.fuse_lit": "引信已点燃", + "golem.description.golem_predicate.fuse_unlit": "引信未点燃", + "golem.description.golem_predicate.baby": "傀儡是幼年", + "golem.description.golem_predicate.adult": "傀儡不是幼年", + "golem.description.golem_predicate.day": "白天", + "golem.description.golem_predicate.night": "夜晚", + "golem.description.golem_predicate.clear": "天气晴朗", + "golem.description.golem_predicate.rain": "下雨", + "golem.description.golem_predicate.thunder": "雷暴", + "golem.description.trigger.hurt": "受伤", + "golem.description.trigger.attack": "攻击中", + "golem.description.trigger.lightning": "被雷击中", + "golem.description.trigger.target": "战斗开始", + "golem.description.trigger.death": "死亡", + "_comment": "Commands", + "command.golem.invalid_id": "无效的傀儡类型%1$s", + "command.golem.success": "在(%2$s, %3$s, %4$s)召唤了类型为\"%1$s\"的傀儡", + "_comment": "Guide Book", + "item.golems.guide_book": "额外傀儡指南", + "item.golems.guide_book.page.intro1": "欢迎来到额外傀儡!本指南将帮助你建立自己的傀儡军队。", + "item.golems.guide_book.page.intro2": "翻页开始吧!", + "item.golems.guide_book.page.contents.title": "目录", + "item.golems.guide_book.page.recipe_spell.recipe": "首先,合成一个%1$s。你可以对%2$s使用它或作为合成材料", + "item.golems.guide_book.page.recipe_head.recipe": "接下来,合成一个%1$s。将它放在方块顶部让你的傀儡复活!", + "item.golems.guide_book.page.build_golem.title": "如何建造傀儡", + "item.golems.guide_book.page.build_golem.howto1": "放置2个方块,一个在另一个上面。", + "item.golems.guide_book.page.build_golem.howto2": "在顶部方块的相对两侧再放置2个方块。", + "item.golems.guide_book.page.build_golem.howto3": "在中间方块顶部放置一个%1$s,你就完成了!", + "_comment": "Jade", + "config.jade.plugin_golems.jade_entity_provider": "额外傀儡", + "config.jade.plugin_golems.fg_color": "前景颜色", + "config.jade.plugin_golems.show_icon": "显示图标" +} diff --git a/src/main/resources/data/c/tags/block/colored_terracotta.json b/src/main/resources/data/c/tags/block/colored_terracotta.json new file mode 100644 index 00000000..28aebd40 --- /dev/null +++ b/src/main/resources/data/c/tags/block/colored_terracotta.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "#c:terracotta/white", + "#c:terracotta/orange", + "#c:terracotta/magenta", + "#c:terracotta/light_blue", + "#c:terracotta/yellow", + "#c:terracotta/lime", + "#c:terracotta/pink", + "#c:terracotta/gray", + "#c:terracotta/light_gray", + "#c:terracotta/cyan", + "#c:terracotta/purple", + "#c:terracotta/blue", + "#c:terracotta/brown", + "#c:terracotta/green", + "#c:terracotta/red", + "#c:terracotta/black" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/concrete.json b/src/main/resources/data/c/tags/block/concrete.json new file mode 100644 index 00000000..741af497 --- /dev/null +++ b/src/main/resources/data/c/tags/block/concrete.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "#c:concrete/white", + "#c:concrete/orange", + "#c:concrete/magenta", + "#c:concrete/light_blue", + "#c:concrete/yellow", + "#c:concrete/lime", + "#c:concrete/pink", + "#c:concrete/gray", + "#c:concrete/light_gray", + "#c:concrete/cyan", + "#c:concrete/purple", + "#c:concrete/blue", + "#c:concrete/brown", + "#c:concrete/green", + "#c:concrete/red", + "#c:concrete/black" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/concrete/black.json b/src/main/resources/data/c/tags/block/concrete/black.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/black.json rename to src/main/resources/data/c/tags/block/concrete/black.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/blue.json b/src/main/resources/data/c/tags/block/concrete/blue.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/blue.json rename to src/main/resources/data/c/tags/block/concrete/blue.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/brown.json b/src/main/resources/data/c/tags/block/concrete/brown.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/brown.json rename to src/main/resources/data/c/tags/block/concrete/brown.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/cyan.json b/src/main/resources/data/c/tags/block/concrete/cyan.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/cyan.json rename to src/main/resources/data/c/tags/block/concrete/cyan.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/gray.json b/src/main/resources/data/c/tags/block/concrete/gray.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/gray.json rename to src/main/resources/data/c/tags/block/concrete/gray.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/green.json b/src/main/resources/data/c/tags/block/concrete/green.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/green.json rename to src/main/resources/data/c/tags/block/concrete/green.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/light_blue.json b/src/main/resources/data/c/tags/block/concrete/light_blue.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/light_blue.json rename to src/main/resources/data/c/tags/block/concrete/light_blue.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/light_gray.json b/src/main/resources/data/c/tags/block/concrete/light_gray.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/light_gray.json rename to src/main/resources/data/c/tags/block/concrete/light_gray.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/lime.json b/src/main/resources/data/c/tags/block/concrete/lime.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/lime.json rename to src/main/resources/data/c/tags/block/concrete/lime.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/magenta.json b/src/main/resources/data/c/tags/block/concrete/magenta.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/magenta.json rename to src/main/resources/data/c/tags/block/concrete/magenta.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/orange.json b/src/main/resources/data/c/tags/block/concrete/orange.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/orange.json rename to src/main/resources/data/c/tags/block/concrete/orange.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/pink.json b/src/main/resources/data/c/tags/block/concrete/pink.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/pink.json rename to src/main/resources/data/c/tags/block/concrete/pink.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/purple.json b/src/main/resources/data/c/tags/block/concrete/purple.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/purple.json rename to src/main/resources/data/c/tags/block/concrete/purple.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/red.json b/src/main/resources/data/c/tags/block/concrete/red.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/red.json rename to src/main/resources/data/c/tags/block/concrete/red.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/white.json b/src/main/resources/data/c/tags/block/concrete/white.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/white.json rename to src/main/resources/data/c/tags/block/concrete/white.json diff --git a/src/main/resources/data/forge/tags/blocks/concrete/yellow.json b/src/main/resources/data/c/tags/block/concrete/yellow.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/concrete/yellow.json rename to src/main/resources/data/c/tags/block/concrete/yellow.json diff --git a/src/main/resources/data/forge/tags/blocks/dead_coral_blocks.json b/src/main/resources/data/c/tags/block/dead_coral_blocks.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/dead_coral_blocks.json rename to src/main/resources/data/c/tags/block/dead_coral_blocks.json diff --git a/src/main/resources/data/c/tags/block/glass_blocks.json b/src/main/resources/data/c/tags/block/glass_blocks.json new file mode 100644 index 00000000..bb2f0b09 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks.json @@ -0,0 +1,23 @@ +{ + "replace": false, + "values": [ + "#c:glass_blocks/colorless", + "#c:glass_blocks/tinted", + "#c:glass_blocks/white", + "#c:glass_blocks/orange", + "#c:glass_blocks/magenta", + "#c:glass_blocks/light_blue", + "#c:glass_blocks/yellow", + "#c:glass_blocks/lime", + "#c:glass_blocks/pink", + "#c:glass_blocks/gray", + "#c:glass_blocks/light_gray", + "#c:glass_blocks/cyan", + "#c:glass_blocks/purple", + "#c:glass_blocks/blue", + "#c:glass_blocks/brown", + "#c:glass_blocks/green", + "#c:glass_blocks/red", + "#c:glass_blocks/black" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/black.json b/src/main/resources/data/c/tags/block/glass_blocks/black.json new file mode 100644 index 00000000..dcf8ddac --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/black.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:black_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/blue.json b/src/main/resources/data/c/tags/block/glass_blocks/blue.json new file mode 100644 index 00000000..7946691e --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/blue.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:blue_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/brown.json b/src/main/resources/data/c/tags/block/glass_blocks/brown.json new file mode 100644 index 00000000..cef2713c --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/brown.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:brown_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/colorless.json b/src/main/resources/data/c/tags/block/glass_blocks/colorless.json new file mode 100644 index 00000000..334b376e --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/colorless.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/cyan.json b/src/main/resources/data/c/tags/block/glass_blocks/cyan.json new file mode 100644 index 00000000..c635cba3 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/cyan.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:cyan_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/gray.json b/src/main/resources/data/c/tags/block/glass_blocks/gray.json new file mode 100644 index 00000000..d116f8d8 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/gray.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:gray_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/green.json b/src/main/resources/data/c/tags/block/glass_blocks/green.json new file mode 100644 index 00000000..0552e2f8 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/green.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:green_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/light_blue.json b/src/main/resources/data/c/tags/block/glass_blocks/light_blue.json new file mode 100644 index 00000000..fb9f13c2 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/light_blue.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:light_blue_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/light_gray.json b/src/main/resources/data/c/tags/block/glass_blocks/light_gray.json new file mode 100644 index 00000000..d1abaa0e --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/light_gray.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:light_gray_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/lime.json b/src/main/resources/data/c/tags/block/glass_blocks/lime.json new file mode 100644 index 00000000..eeef3adc --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/lime.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:lime_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/magenta.json b/src/main/resources/data/c/tags/block/glass_blocks/magenta.json new file mode 100644 index 00000000..5c747095 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/magenta.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:magenta_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/orange.json b/src/main/resources/data/c/tags/block/glass_blocks/orange.json new file mode 100644 index 00000000..f4a63a21 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/orange.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:orange_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/pink.json b/src/main/resources/data/c/tags/block/glass_blocks/pink.json new file mode 100644 index 00000000..ebfc47b3 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/pink.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:pink_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/purple.json b/src/main/resources/data/c/tags/block/glass_blocks/purple.json new file mode 100644 index 00000000..cf1fa6c2 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/purple.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:purple_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/red.json b/src/main/resources/data/c/tags/block/glass_blocks/red.json new file mode 100644 index 00000000..d3b49850 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/red.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:red_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/tinted.json b/src/main/resources/data/c/tags/block/glass_blocks/tinted.json new file mode 100644 index 00000000..1ce5ce5f --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/tinted.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:tinted_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/white.json b/src/main/resources/data/c/tags/block/glass_blocks/white.json new file mode 100644 index 00000000..33f58ee8 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/white.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:white_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/block/glass_blocks/yellow.json b/src/main/resources/data/c/tags/block/glass_blocks/yellow.json new file mode 100644 index 00000000..4f06e1f2 --- /dev/null +++ b/src/main/resources/data/c/tags/block/glass_blocks/yellow.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "minecraft:yellow_stained_glass" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/prismarine.json b/src/main/resources/data/c/tags/block/prismarine.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/prismarine.json rename to src/main/resources/data/c/tags/block/prismarine.json diff --git a/src/main/resources/data/forge/tags/blocks/quartz.json b/src/main/resources/data/c/tags/block/quartz.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/quartz.json rename to src/main/resources/data/c/tags/block/quartz.json diff --git a/src/main/resources/data/forge/tags/blocks/red_sandstone.json b/src/main/resources/data/c/tags/block/red_sandstone.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/red_sandstone.json rename to src/main/resources/data/c/tags/block/red_sandstone.json diff --git a/src/main/resources/data/forge/tags/blocks/sandstone.json b/src/main/resources/data/c/tags/block/sandstone.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/sandstone.json rename to src/main/resources/data/c/tags/block/sandstone.json diff --git a/src/main/resources/data/c/tags/block/storage_blocks/any_copper.json b/src/main/resources/data/c/tags/block/storage_blocks/any_copper.json new file mode 100644 index 00000000..92684152 --- /dev/null +++ b/src/main/resources/data/c/tags/block/storage_blocks/any_copper.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#c:storage_blocks/waxed_copper", + "#c:storage_blocks/unwaxed_copper" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/storage_blocks/unwaxed_copper.json b/src/main/resources/data/c/tags/block/storage_blocks/unwaxed_copper.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/storage_blocks/unwaxed_copper.json rename to src/main/resources/data/c/tags/block/storage_blocks/unwaxed_copper.json diff --git a/src/main/resources/data/forge/tags/blocks/storage_blocks/waxed_copper.json b/src/main/resources/data/c/tags/block/storage_blocks/waxed_copper.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/storage_blocks/waxed_copper.json rename to src/main/resources/data/c/tags/block/storage_blocks/waxed_copper.json diff --git a/src/main/resources/data/c/tags/block/terracotta.json b/src/main/resources/data/c/tags/block/terracotta.json new file mode 100644 index 00000000..f9d7d402 --- /dev/null +++ b/src/main/resources/data/c/tags/block/terracotta.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#c:colored_terracotta", + "#c:terracotta/colorless" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/black.json b/src/main/resources/data/c/tags/block/terracotta/black.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/black.json rename to src/main/resources/data/c/tags/block/terracotta/black.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/blue.json b/src/main/resources/data/c/tags/block/terracotta/blue.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/blue.json rename to src/main/resources/data/c/tags/block/terracotta/blue.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/brown.json b/src/main/resources/data/c/tags/block/terracotta/brown.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/brown.json rename to src/main/resources/data/c/tags/block/terracotta/brown.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/colorless.json b/src/main/resources/data/c/tags/block/terracotta/colorless.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/colorless.json rename to src/main/resources/data/c/tags/block/terracotta/colorless.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/cyan.json b/src/main/resources/data/c/tags/block/terracotta/cyan.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/cyan.json rename to src/main/resources/data/c/tags/block/terracotta/cyan.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/gray.json b/src/main/resources/data/c/tags/block/terracotta/gray.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/gray.json rename to src/main/resources/data/c/tags/block/terracotta/gray.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/green.json b/src/main/resources/data/c/tags/block/terracotta/green.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/green.json rename to src/main/resources/data/c/tags/block/terracotta/green.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/light_blue.json b/src/main/resources/data/c/tags/block/terracotta/light_blue.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/light_blue.json rename to src/main/resources/data/c/tags/block/terracotta/light_blue.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/light_gray.json b/src/main/resources/data/c/tags/block/terracotta/light_gray.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/light_gray.json rename to src/main/resources/data/c/tags/block/terracotta/light_gray.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/lime.json b/src/main/resources/data/c/tags/block/terracotta/lime.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/lime.json rename to src/main/resources/data/c/tags/block/terracotta/lime.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/magenta.json b/src/main/resources/data/c/tags/block/terracotta/magenta.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/magenta.json rename to src/main/resources/data/c/tags/block/terracotta/magenta.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/orange.json b/src/main/resources/data/c/tags/block/terracotta/orange.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/orange.json rename to src/main/resources/data/c/tags/block/terracotta/orange.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/pink.json b/src/main/resources/data/c/tags/block/terracotta/pink.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/pink.json rename to src/main/resources/data/c/tags/block/terracotta/pink.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/purple.json b/src/main/resources/data/c/tags/block/terracotta/purple.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/purple.json rename to src/main/resources/data/c/tags/block/terracotta/purple.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/red.json b/src/main/resources/data/c/tags/block/terracotta/red.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/red.json rename to src/main/resources/data/c/tags/block/terracotta/red.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/white.json b/src/main/resources/data/c/tags/block/terracotta/white.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/white.json rename to src/main/resources/data/c/tags/block/terracotta/white.json diff --git a/src/main/resources/data/forge/tags/blocks/terracotta/yellow.json b/src/main/resources/data/c/tags/block/terracotta/yellow.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/terracotta/yellow.json rename to src/main/resources/data/c/tags/block/terracotta/yellow.json diff --git a/src/main/resources/data/forge/tags/blocks/workbench.json b/src/main/resources/data/c/tags/block/workbench.json similarity index 100% rename from src/main/resources/data/forge/tags/blocks/workbench.json rename to src/main/resources/data/c/tags/block/workbench.json diff --git a/src/main/resources/data/c/tags/item/books.json b/src/main/resources/data/c/tags/item/books.json new file mode 100644 index 00000000..5f6e9cf3 --- /dev/null +++ b/src/main/resources/data/c/tags/item/books.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "golems:guide_book" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/item/colored_terracotta.json b/src/main/resources/data/c/tags/item/colored_terracotta.json new file mode 100644 index 00000000..28aebd40 --- /dev/null +++ b/src/main/resources/data/c/tags/item/colored_terracotta.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "#c:terracotta/white", + "#c:terracotta/orange", + "#c:terracotta/magenta", + "#c:terracotta/light_blue", + "#c:terracotta/yellow", + "#c:terracotta/lime", + "#c:terracotta/pink", + "#c:terracotta/gray", + "#c:terracotta/light_gray", + "#c:terracotta/cyan", + "#c:terracotta/purple", + "#c:terracotta/blue", + "#c:terracotta/brown", + "#c:terracotta/green", + "#c:terracotta/red", + "#c:terracotta/black" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/c/tags/item/concrete.json b/src/main/resources/data/c/tags/item/concrete.json new file mode 100644 index 00000000..741af497 --- /dev/null +++ b/src/main/resources/data/c/tags/item/concrete.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "#c:concrete/white", + "#c:concrete/orange", + "#c:concrete/magenta", + "#c:concrete/light_blue", + "#c:concrete/yellow", + "#c:concrete/lime", + "#c:concrete/pink", + "#c:concrete/gray", + "#c:concrete/light_gray", + "#c:concrete/cyan", + "#c:concrete/purple", + "#c:concrete/blue", + "#c:concrete/brown", + "#c:concrete/green", + "#c:concrete/red", + "#c:concrete/black" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/concrete/black.json b/src/main/resources/data/c/tags/item/concrete/black.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/black.json rename to src/main/resources/data/c/tags/item/concrete/black.json diff --git a/src/main/resources/data/forge/tags/items/concrete/blue.json b/src/main/resources/data/c/tags/item/concrete/blue.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/blue.json rename to src/main/resources/data/c/tags/item/concrete/blue.json diff --git a/src/main/resources/data/forge/tags/items/concrete/brown.json b/src/main/resources/data/c/tags/item/concrete/brown.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/brown.json rename to src/main/resources/data/c/tags/item/concrete/brown.json diff --git a/src/main/resources/data/forge/tags/items/concrete/cyan.json b/src/main/resources/data/c/tags/item/concrete/cyan.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/cyan.json rename to src/main/resources/data/c/tags/item/concrete/cyan.json diff --git a/src/main/resources/data/forge/tags/items/concrete/gray.json b/src/main/resources/data/c/tags/item/concrete/gray.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/gray.json rename to src/main/resources/data/c/tags/item/concrete/gray.json diff --git a/src/main/resources/data/forge/tags/items/concrete/green.json b/src/main/resources/data/c/tags/item/concrete/green.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/green.json rename to src/main/resources/data/c/tags/item/concrete/green.json diff --git a/src/main/resources/data/forge/tags/items/concrete/light_blue.json b/src/main/resources/data/c/tags/item/concrete/light_blue.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/light_blue.json rename to src/main/resources/data/c/tags/item/concrete/light_blue.json diff --git a/src/main/resources/data/forge/tags/items/concrete/light_gray.json b/src/main/resources/data/c/tags/item/concrete/light_gray.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/light_gray.json rename to src/main/resources/data/c/tags/item/concrete/light_gray.json diff --git a/src/main/resources/data/forge/tags/items/concrete/lime.json b/src/main/resources/data/c/tags/item/concrete/lime.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/lime.json rename to src/main/resources/data/c/tags/item/concrete/lime.json diff --git a/src/main/resources/data/forge/tags/items/concrete/magenta.json b/src/main/resources/data/c/tags/item/concrete/magenta.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/magenta.json rename to src/main/resources/data/c/tags/item/concrete/magenta.json diff --git a/src/main/resources/data/forge/tags/items/concrete/orange.json b/src/main/resources/data/c/tags/item/concrete/orange.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/orange.json rename to src/main/resources/data/c/tags/item/concrete/orange.json diff --git a/src/main/resources/data/forge/tags/items/concrete/pink.json b/src/main/resources/data/c/tags/item/concrete/pink.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/pink.json rename to src/main/resources/data/c/tags/item/concrete/pink.json diff --git a/src/main/resources/data/forge/tags/items/concrete/purple.json b/src/main/resources/data/c/tags/item/concrete/purple.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/purple.json rename to src/main/resources/data/c/tags/item/concrete/purple.json diff --git a/src/main/resources/data/forge/tags/items/concrete/red.json b/src/main/resources/data/c/tags/item/concrete/red.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/red.json rename to src/main/resources/data/c/tags/item/concrete/red.json diff --git a/src/main/resources/data/forge/tags/items/concrete/white.json b/src/main/resources/data/c/tags/item/concrete/white.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/white.json rename to src/main/resources/data/c/tags/item/concrete/white.json diff --git a/src/main/resources/data/forge/tags/items/concrete/yellow.json b/src/main/resources/data/c/tags/item/concrete/yellow.json similarity index 100% rename from src/main/resources/data/forge/tags/items/concrete/yellow.json rename to src/main/resources/data/c/tags/item/concrete/yellow.json diff --git a/src/main/resources/data/forge/tags/items/dead_coral_block.json b/src/main/resources/data/c/tags/item/dead_coral_block.json similarity index 100% rename from src/main/resources/data/forge/tags/items/dead_coral_block.json rename to src/main/resources/data/c/tags/item/dead_coral_block.json diff --git a/src/main/resources/data/forge/tags/items/gems/amethyst.json b/src/main/resources/data/c/tags/item/gems/amethyst.json similarity index 100% rename from src/main/resources/data/forge/tags/items/gems/amethyst.json rename to src/main/resources/data/c/tags/item/gems/amethyst.json diff --git a/src/main/resources/data/forge/tags/items/prismarine.json b/src/main/resources/data/c/tags/item/prismarine.json similarity index 100% rename from src/main/resources/data/forge/tags/items/prismarine.json rename to src/main/resources/data/c/tags/item/prismarine.json diff --git a/src/main/resources/data/forge/tags/items/quartz.json b/src/main/resources/data/c/tags/item/quartz.json similarity index 100% rename from src/main/resources/data/forge/tags/items/quartz.json rename to src/main/resources/data/c/tags/item/quartz.json diff --git a/src/main/resources/data/forge/tags/items/red_sandstone.json b/src/main/resources/data/c/tags/item/red_sandstone.json similarity index 100% rename from src/main/resources/data/forge/tags/items/red_sandstone.json rename to src/main/resources/data/c/tags/item/red_sandstone.json diff --git a/src/main/resources/data/forge/tags/items/sandstone.json b/src/main/resources/data/c/tags/item/sandstone.json similarity index 100% rename from src/main/resources/data/forge/tags/items/sandstone.json rename to src/main/resources/data/c/tags/item/sandstone.json diff --git a/src/main/resources/data/c/tags/item/terracotta.json b/src/main/resources/data/c/tags/item/terracotta.json new file mode 100644 index 00000000..f9d7d402 --- /dev/null +++ b/src/main/resources/data/c/tags/item/terracotta.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#c:colored_terracotta", + "#c:terracotta/colorless" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/terracotta/black.json b/src/main/resources/data/c/tags/item/terracotta/black.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/black.json rename to src/main/resources/data/c/tags/item/terracotta/black.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/blue.json b/src/main/resources/data/c/tags/item/terracotta/blue.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/blue.json rename to src/main/resources/data/c/tags/item/terracotta/blue.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/brown.json b/src/main/resources/data/c/tags/item/terracotta/brown.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/brown.json rename to src/main/resources/data/c/tags/item/terracotta/brown.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/colorless.json b/src/main/resources/data/c/tags/item/terracotta/colorless.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/colorless.json rename to src/main/resources/data/c/tags/item/terracotta/colorless.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/cyan.json b/src/main/resources/data/c/tags/item/terracotta/cyan.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/cyan.json rename to src/main/resources/data/c/tags/item/terracotta/cyan.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/gray.json b/src/main/resources/data/c/tags/item/terracotta/gray.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/gray.json rename to src/main/resources/data/c/tags/item/terracotta/gray.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/green.json b/src/main/resources/data/c/tags/item/terracotta/green.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/green.json rename to src/main/resources/data/c/tags/item/terracotta/green.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/light_blue.json b/src/main/resources/data/c/tags/item/terracotta/light_blue.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/light_blue.json rename to src/main/resources/data/c/tags/item/terracotta/light_blue.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/light_gray.json b/src/main/resources/data/c/tags/item/terracotta/light_gray.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/light_gray.json rename to src/main/resources/data/c/tags/item/terracotta/light_gray.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/lime.json b/src/main/resources/data/c/tags/item/terracotta/lime.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/lime.json rename to src/main/resources/data/c/tags/item/terracotta/lime.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/magenta.json b/src/main/resources/data/c/tags/item/terracotta/magenta.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/magenta.json rename to src/main/resources/data/c/tags/item/terracotta/magenta.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/orange.json b/src/main/resources/data/c/tags/item/terracotta/orange.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/orange.json rename to src/main/resources/data/c/tags/item/terracotta/orange.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/pink.json b/src/main/resources/data/c/tags/item/terracotta/pink.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/pink.json rename to src/main/resources/data/c/tags/item/terracotta/pink.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/purple.json b/src/main/resources/data/c/tags/item/terracotta/purple.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/purple.json rename to src/main/resources/data/c/tags/item/terracotta/purple.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/red.json b/src/main/resources/data/c/tags/item/terracotta/red.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/red.json rename to src/main/resources/data/c/tags/item/terracotta/red.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/white.json b/src/main/resources/data/c/tags/item/terracotta/white.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/white.json rename to src/main/resources/data/c/tags/item/terracotta/white.json diff --git a/src/main/resources/data/forge/tags/items/terracotta/yellow.json b/src/main/resources/data/c/tags/item/terracotta/yellow.json similarity index 100% rename from src/main/resources/data/forge/tags/items/terracotta/yellow.json rename to src/main/resources/data/c/tags/item/terracotta/yellow.json diff --git a/src/main/resources/data/forge/tags/items/workbench.json b/src/main/resources/data/c/tags/item/workbench.json similarity index 100% rename from src/main/resources/data/forge/tags/items/workbench.json rename to src/main/resources/data/c/tags/item/workbench.json diff --git a/src/main/resources/data/forge/tags/blocks/colored_terracotta.json b/src/main/resources/data/forge/tags/blocks/colored_terracotta.json deleted file mode 100644 index 0a1bb6d8..00000000 --- a/src/main/resources/data/forge/tags/blocks/colored_terracotta.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "replace": false, - "values": [ - "#forge:terracotta/white", - "#forge:terracotta/orange", - "#forge:terracotta/magenta", - "#forge:terracotta/light_blue", - "#forge:terracotta/yellow", - "#forge:terracotta/lime", - "#forge:terracotta/pink", - "#forge:terracotta/gray", - "#forge:terracotta/light_gray", - "#forge:terracotta/cyan", - "#forge:terracotta/purple", - "#forge:terracotta/blue", - "#forge:terracotta/brown", - "#forge:terracotta/green", - "#forge:terracotta/red", - "#forge:terracotta/black" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/concrete.json b/src/main/resources/data/forge/tags/blocks/concrete.json deleted file mode 100644 index 391b8ace..00000000 --- a/src/main/resources/data/forge/tags/blocks/concrete.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "replace": false, - "values": [ - "#forge:concrete/white", - "#forge:concrete/orange", - "#forge:concrete/magenta", - "#forge:concrete/light_blue", - "#forge:concrete/yellow", - "#forge:concrete/lime", - "#forge:concrete/pink", - "#forge:concrete/gray", - "#forge:concrete/light_gray", - "#forge:concrete/cyan", - "#forge:concrete/purple", - "#forge:concrete/blue", - "#forge:concrete/brown", - "#forge:concrete/green", - "#forge:concrete/red", - "#forge:concrete/black" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/storage_blocks/any_copper.json b/src/main/resources/data/forge/tags/blocks/storage_blocks/any_copper.json deleted file mode 100644 index 5cfae8c0..00000000 --- a/src/main/resources/data/forge/tags/blocks/storage_blocks/any_copper.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "#forge:storage_blocks/waxed_copper", - "#forge:storage_blocks/unwaxed_copper" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/blocks/terracotta.json b/src/main/resources/data/forge/tags/blocks/terracotta.json deleted file mode 100644 index 5ae97e57..00000000 --- a/src/main/resources/data/forge/tags/blocks/terracotta.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "#forge:colored_terracotta", - "#forge:terracotta/colorless" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/books.json b/src/main/resources/data/forge/tags/items/books.json deleted file mode 100644 index b64edf0f..00000000 --- a/src/main/resources/data/forge/tags/items/books.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": "false", - "values": [ - "golems:guide_book" - ] -} diff --git a/src/main/resources/data/forge/tags/items/colored_terracotta.json b/src/main/resources/data/forge/tags/items/colored_terracotta.json deleted file mode 100644 index 0a1bb6d8..00000000 --- a/src/main/resources/data/forge/tags/items/colored_terracotta.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "replace": false, - "values": [ - "#forge:terracotta/white", - "#forge:terracotta/orange", - "#forge:terracotta/magenta", - "#forge:terracotta/light_blue", - "#forge:terracotta/yellow", - "#forge:terracotta/lime", - "#forge:terracotta/pink", - "#forge:terracotta/gray", - "#forge:terracotta/light_gray", - "#forge:terracotta/cyan", - "#forge:terracotta/purple", - "#forge:terracotta/blue", - "#forge:terracotta/brown", - "#forge:terracotta/green", - "#forge:terracotta/red", - "#forge:terracotta/black" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/concrete.json b/src/main/resources/data/forge/tags/items/concrete.json deleted file mode 100644 index 391b8ace..00000000 --- a/src/main/resources/data/forge/tags/items/concrete.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "replace": false, - "values": [ - "#forge:concrete/white", - "#forge:concrete/orange", - "#forge:concrete/magenta", - "#forge:concrete/light_blue", - "#forge:concrete/yellow", - "#forge:concrete/lime", - "#forge:concrete/pink", - "#forge:concrete/gray", - "#forge:concrete/light_gray", - "#forge:concrete/cyan", - "#forge:concrete/purple", - "#forge:concrete/blue", - "#forge:concrete/brown", - "#forge:concrete/green", - "#forge:concrete/red", - "#forge:concrete/black" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/forge/tags/items/terracotta.json b/src/main/resources/data/forge/tags/items/terracotta.json deleted file mode 100644 index 5ae97e57..00000000 --- a/src/main/resources/data/forge/tags/items/terracotta.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "#forge:colored_terracotta", - "#forge:terracotta/colorless" - ] -} \ No newline at end of file diff --git a/src/main/resources/data/golems/golems/golem/acacia_log.json b/src/main/resources/data/golems/golems/golem/acacia_log.json index e5b426b5..79a2813e 100644 --- a/src/main/resources/data/golems/golems/golem/acacia_log.json +++ b/src/main/resources/data/golems/golems/golem/acacia_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#minecraft:acacia_logs" - }, - "model": "golems:acacia_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:acacia_log", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_acacia_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#minecraft:acacia_logs" + }, + "model": "golems:acacia_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:acacia_log", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_acacia_log" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/amethyst.json b/src/main/resources/data/golems/golems/golem/amethyst.json index 5be396dd..d8783886 100644 --- a/src/main/resources/data/golems/golems/golem/amethyst.json +++ b/src/main/resources/data/golems/golems/golem/amethyst.json @@ -1,34 +1,34 @@ { - "attributes": { - "health": 38.0, - "attack": 12.5, - "weak": [ - "minecraft:fall" - ], - "sound": "minecraft:amethyst" - }, - "hidden": false, - "blocks": { - "all": "#forge:storage_blocks/amethyst" - }, - "repair_items": { - "#forge:storage_blocks/amethyst": 0.5, - "#forge:gems/amethyst": 0.15 - }, - "model": "golems:amethyst", - "brain": { - "behaviors": [ - { - "type": "golems:summon", - "trigger": "hurt", - "target": "self", - "position": "self", - "radius": 0.5, - "chance": 0.166, - "display_name": "item.minecraft.amethyst_shard", - "entity": "minecraft:item", - "nbt": "{Item:{id:\"minecraft:amethyst_shard\",Count:1}}" - } - ] - } -} + "attributes": { + "health": 38.0, + "attack": 12.5, + "weak": [ + "minecraft:fall" + ], + "sound": "minecraft:amethyst" + }, + "hidden": false, + "blocks": { + "all": "minecraft:amethyst_block" + }, + "repair_items": { + "minecraft:amethyst_block": 0.5, + "minecraft:amethyst_shard": 0.15 + }, + "model": "golems:amethyst", + "brain": { + "behaviors": [ + { + "type": "golems:summon", + "trigger": "hurt", + "target": "self", + "position": "self", + "radius": 0.5, + "chance": 0.166, + "display_name": "item.minecraft.amethyst_shard", + "entity": "minecraft:item", + "nbt": "{Item:{id:\"minecraft:amethyst_shard\",Count:1}}" + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/golems/golems/golem/bamboo_wood.json b/src/main/resources/data/golems/golems/golem/bamboo_wood.json index cf940af4..15bddee0 100644 --- a/src/main/resources/data/golems/golems/golem/bamboo_wood.json +++ b/src/main/resources/data/golems/golems/golem/bamboo_wood.json @@ -1,42 +1,42 @@ { - "attributes": { - "health": 18.0, - "attack": 5.0, - "speed": 0.28, - "knockback_resistance": 0.2, - "swim_ability": "float", - "sound": "minecraft:bamboo_wood" - }, - "group": "golems:bamboo", - "hidden": false, - "blocks": { - "arms": "#minecraft:bamboo_blocks", - "legs": "#minecraft:bamboo_blocks", - "body": "minecraft:bamboo_block" - }, - "repair_items": { - "#minecraft:bamboo_blocks": 0.5, - "minecraft:bamboo": 0.1 - }, - "model": "golems:bamboo_wood", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:bamboo_block", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_bamboo_wood" - } - } - ] - } + "attributes": { + "health": 18.0, + "attack": 5.0, + "speed": 0.28, + "knockback_resistance": 0.2, + "swim_ability": "float", + "sound": "minecraft:bamboo_wood" + }, + "group": "golems:bamboo", + "hidden": false, + "blocks": { + "arms": "#minecraft:bamboo_blocks", + "legs": "#minecraft:bamboo_blocks", + "body": "minecraft:bamboo_block" + }, + "repair_items": { + "#minecraft:bamboo_blocks": 0.5, + "minecraft:bamboo": 0.1 + }, + "model": "golems:bamboo_wood", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:bamboo_block", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_bamboo_wood" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/birch_log.json b/src/main/resources/data/golems/golems/golem/birch_log.json index 962738fd..51e76edc 100644 --- a/src/main/resources/data/golems/golems/golem/birch_log.json +++ b/src/main/resources/data/golems/golems/golem/birch_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#minecraft:birch_logs" - }, - "model": "golems:birch_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:birch_log", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_birch_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#minecraft:birch_logs" + }, + "model": "golems:birch_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:birch_log", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_birch_log" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/black_concrete.json b/src/main/resources/data/golems/golems/golem/black_concrete.json index 1a4cba21..4f4bf462 100644 --- a/src/main/resources/data/golems/golems/golem/black_concrete.json +++ b/src/main/resources/data/golems/golems/golem/black_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:black_concrete" }, "model": "golems:black_concrete" diff --git a/src/main/resources/data/golems/golems/golem/black_stained_glass.json b/src/main/resources/data/golems/golems/golem/black_stained_glass.json index 06c96ddd..2d2c4429 100644 --- a/src/main/resources/data/golems/golems/golem/black_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/black_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/black" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/black" }, "model": "golems:black_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/black_terracotta.json b/src/main/resources/data/golems/golems/golem/black_terracotta.json index ffff5b0e..d84f187c 100644 --- a/src/main/resources/data/golems/golems/golem/black_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/black_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/black" + "all": "#c:terracotta/black" }, "model": "golems:black_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/blue_concrete.json b/src/main/resources/data/golems/golems/golem/blue_concrete.json index 6c3ef39c..44bdfd29 100644 --- a/src/main/resources/data/golems/golems/golem/blue_concrete.json +++ b/src/main/resources/data/golems/golems/golem/blue_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:blue_concrete" }, "model": "golems:blue_concrete" diff --git a/src/main/resources/data/golems/golems/golem/blue_stained_glass.json b/src/main/resources/data/golems/golems/golem/blue_stained_glass.json index 4e77b65c..12afaaeb 100644 --- a/src/main/resources/data/golems/golems/golem/blue_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/blue_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/blue" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/blue" }, "model": "golems:blue_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/blue_terracotta.json b/src/main/resources/data/golems/golems/golem/blue_terracotta.json index f3b870cc..16b28ec3 100644 --- a/src/main/resources/data/golems/golems/golem/blue_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/blue_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/blue" + "all": "#c:terracotta/blue" }, "model": "golems:blue_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/bone.json b/src/main/resources/data/golems/golems/golem/bone.json index 5e25f5e2..933ecfbd 100644 --- a/src/main/resources/data/golems/golems/golem/bone.json +++ b/src/main/resources/data/golems/golems/golem/bone.json @@ -12,7 +12,7 @@ }, "repair_items": { "minecraft:bone_block": 0.5, - "#forge:bones": 0.25, + "#c:bones": 0.25, "minecraft:bone_meal": 0.08 }, "model": "golems:bone", diff --git a/src/main/resources/data/golems/golems/golem/bookshelf.json b/src/main/resources/data/golems/golems/golem/bookshelf.json index d1129fe4..e3a96886 100644 --- a/src/main/resources/data/golems/golems/golem/bookshelf.json +++ b/src/main/resources/data/golems/golems/golem/bookshelf.json @@ -11,7 +11,7 @@ "all": "minecraft:bookshelf" }, "repair_items": { - "#forge:bookshelves": 0.5, + "#c:bookshelves": 0.5, "minecraft:book": 0.15, "#minecraft:planks": 0.15 }, diff --git a/src/main/resources/data/golems/golems/golem/brain_coral.json b/src/main/resources/data/golems/golems/golem/brain_coral.json index 403e478d..ca6af861 100644 --- a/src/main/resources/data/golems/golems/golem/brain_coral.json +++ b/src/main/resources/data/golems/golems/golem/brain_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:brain_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/brick.json b/src/main/resources/data/golems/golems/golem/brick.json index 2e8cd7da..42090ff6 100644 --- a/src/main/resources/data/golems/golems/golem/brick.json +++ b/src/main/resources/data/golems/golems/golem/brick.json @@ -10,7 +10,7 @@ }, "repair_items": { "minecraft:bricks": 0.5, - "#forge:ingots/brick": 0.5 + "#c:ingots/brick": 0.5 }, "model": "golems:brick", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/brown_concrete.json b/src/main/resources/data/golems/golems/golem/brown_concrete.json index 7787798e..ef9cd2f1 100644 --- a/src/main/resources/data/golems/golems/golem/brown_concrete.json +++ b/src/main/resources/data/golems/golems/golem/brown_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:brown_concrete" }, "model": "golems:brown_concrete" diff --git a/src/main/resources/data/golems/golems/golem/brown_stained_glass.json b/src/main/resources/data/golems/golems/golem/brown_stained_glass.json index 4252f6b7..c70897fc 100644 --- a/src/main/resources/data/golems/golems/golem/brown_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/brown_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/brown" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/brown" }, "model": "golems:brown_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/brown_terracotta.json b/src/main/resources/data/golems/golems/golem/brown_terracotta.json index 63a3fbf4..cd80f1f4 100644 --- a/src/main/resources/data/golems/golems/golem/brown_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/brown_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/brown" + "all": "#c:terracotta/brown" }, "model": "golems:brown_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/bubble_coral.json b/src/main/resources/data/golems/golems/golem/bubble_coral.json index 9979275a..9de4a4a9 100644 --- a/src/main/resources/data/golems/golems/golem/bubble_coral.json +++ b/src/main/resources/data/golems/golems/golem/bubble_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:bubble_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/cherry_log.json b/src/main/resources/data/golems/golems/golem/cherry_log.json index daa58c60..fc1d681b 100644 --- a/src/main/resources/data/golems/golems/golem/cherry_log.json +++ b/src/main/resources/data/golems/golems/golem/cherry_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#minecraft:cherry_logs" - }, - "model": "golems:cherry_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:cherry_log", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_cherry_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#minecraft:cherry_logs" + }, + "model": "golems:cherry_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:cherry_log", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_cherry_log" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/coal.json b/src/main/resources/data/golems/golems/golem/coal.json index 032ed4d5..8feea992 100644 --- a/src/main/resources/data/golems/golems/golem/coal.json +++ b/src/main/resources/data/golems/golems/golem/coal.json @@ -8,10 +8,10 @@ }, "group": "golems:coal", "blocks": { - "all": "#forge:storage_blocks/coal" + "all": "#c:storage_blocks/coal" }, "repair_items": { - "#forge:storage_blocks/coal": 0.5, + "#c:storage_blocks/coal": 0.5, "#minecraft:coals": 0.1 }, "brain": { diff --git a/src/main/resources/data/golems/golems/golem/copper.json b/src/main/resources/data/golems/golems/golem/copper.json index dd12e8ab..19fee4bb 100644 --- a/src/main/resources/data/golems/golems/golem/copper.json +++ b/src/main/resources/data/golems/golems/golem/copper.json @@ -2,8 +2,8 @@ "parent": "golems:generic_copper", "hidden": false, "blocks": { - "arms": "#forge:storage_blocks/copper", - "legs": "#forge:storage_blocks/copper", + "arms": "#c:storage_blocks/copper", + "legs": "#c:storage_blocks/copper", "body": "minecraft:copper_block" }, "model": "golems:copper", diff --git a/src/main/resources/data/golems/golems/golem/crafting.json b/src/main/resources/data/golems/golems/golem/crafting.json index e6ca4551..b1c37681 100644 --- a/src/main/resources/data/golems/golems/golem/crafting.json +++ b/src/main/resources/data/golems/golems/golem/crafting.json @@ -8,10 +8,10 @@ }, "group": "golems:crafting", "blocks": { - "all": "#forge:workbench" + "all": "#c:workbench" }, "repair_items": { - "#forge:workbench": 0.5, + "#c:workbench": 0.5, "#minecraft:planks": 0.15 }, "model": "golems:crafting", diff --git a/src/main/resources/data/golems/golems/golem/crimson_stem.json b/src/main/resources/data/golems/golems/golem/crimson_stem.json index f0776470..4ffae0e0 100644 --- a/src/main/resources/data/golems/golems/golem/crimson_stem.json +++ b/src/main/resources/data/golems/golems/golem/crimson_stem.json @@ -1,43 +1,43 @@ { - "parent": "golems:generic_stem", - "group": "golems:stem", - "hidden": false, - "blocks": { - "all": "#minecraft:crimson_stems" - }, - "repair_items": { - "#minecraft:crimson_stems": 0.5, - "minecraft:crimson_fungus": 0.15 - }, - "model": "golems:crimson_stem", - "brain": { - "behaviors": [ - { - "type": "golems:place", - "trigger": "tick", - "position": "self", - "chance": 0.00071, - "must_survive": false, - "block": { - "Name": "minecraft:crimson_fungus" - } - }, - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:crimson_stem", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_crimson_stem" - } - } - ] - } + "parent": "golems:generic_stem", + "group": "golems:stem", + "hidden": false, + "blocks": { + "all": "#minecraft:crimson_stems" + }, + "repair_items": { + "#minecraft:crimson_stems": 0.5, + "minecraft:crimson_fungus": 0.15 + }, + "model": "golems:crimson_stem", + "brain": { + "behaviors": [ + { + "type": "golems:place", + "trigger": "tick", + "position": "self", + "chance": 0.00071, + "must_survive": false, + "block": { + "Name": "minecraft:crimson_fungus" + } + }, + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:crimson_stem", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_crimson_stem" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/cyan_concrete.json b/src/main/resources/data/golems/golems/golem/cyan_concrete.json index 83ba4d60..55fd7ae3 100644 --- a/src/main/resources/data/golems/golems/golem/cyan_concrete.json +++ b/src/main/resources/data/golems/golems/golem/cyan_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:cyan_concrete" }, "model": "golems:cyan_concrete" diff --git a/src/main/resources/data/golems/golems/golem/cyan_stained_glass.json b/src/main/resources/data/golems/golems/golem/cyan_stained_glass.json index 1471ee86..e510956a 100644 --- a/src/main/resources/data/golems/golems/golem/cyan_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/cyan_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/cyan" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/cyan" }, "model": "golems:cyan_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/cyan_terracotta.json b/src/main/resources/data/golems/golems/golem/cyan_terracotta.json index 41efb678..40f2e00c 100644 --- a/src/main/resources/data/golems/golems/golem/cyan_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/cyan_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/cyan" + "all": "#c:terracotta/cyan" }, "model": "golems:cyan_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/dark_oak_log.json b/src/main/resources/data/golems/golems/golem/dark_oak_log.json index 3b72e1fa..25c2986c 100644 --- a/src/main/resources/data/golems/golems/golem/dark_oak_log.json +++ b/src/main/resources/data/golems/golems/golem/dark_oak_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#minecraft:dark_oak_logs" - }, - "model": "golems:dark_oak_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:dark_oak_log", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_dark_oak_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#minecraft:dark_oak_logs" + }, + "model": "golems:dark_oak_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:dark_oak_log", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_dark_oak_log" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/dead_brain_coral.json b/src/main/resources/data/golems/golems/golem/dead_brain_coral.json index 75c5fe75..8493acc9 100644 --- a/src/main/resources/data/golems/golems/golem/dead_brain_coral.json +++ b/src/main/resources/data/golems/golems/golem/dead_brain_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:dead_brain_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/dead_bubble_coral.json b/src/main/resources/data/golems/golems/golem/dead_bubble_coral.json index 259c2628..0d27014b 100644 --- a/src/main/resources/data/golems/golems/golem/dead_bubble_coral.json +++ b/src/main/resources/data/golems/golems/golem/dead_bubble_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:dead_bubble_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/dead_fire_coral.json b/src/main/resources/data/golems/golems/golem/dead_fire_coral.json index a55669c4..5ed20dfd 100644 --- a/src/main/resources/data/golems/golems/golem/dead_fire_coral.json +++ b/src/main/resources/data/golems/golems/golem/dead_fire_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:dead_fire_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/dead_horn_coral.json b/src/main/resources/data/golems/golems/golem/dead_horn_coral.json index 2ef54f29..b5534d7e 100644 --- a/src/main/resources/data/golems/golems/golem/dead_horn_coral.json +++ b/src/main/resources/data/golems/golems/golem/dead_horn_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:dead_horn_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/dead_tube_coral.json b/src/main/resources/data/golems/golems/golem/dead_tube_coral.json index f10b6665..b1b75880 100644 --- a/src/main/resources/data/golems/golems/golem/dead_tube_coral.json +++ b/src/main/resources/data/golems/golems/golem/dead_tube_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:dead_tube_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/diamond.json b/src/main/resources/data/golems/golems/golem/diamond.json index a04524f8..091ee269 100644 --- a/src/main/resources/data/golems/golems/golem/diamond.json +++ b/src/main/resources/data/golems/golems/golem/diamond.json @@ -6,11 +6,11 @@ "armor": 4.0 }, "blocks": { - "all": "#forge:storage_blocks/diamond" + "all": "#c:storage_blocks/diamond" }, "repair_items": { - "#forge:storage_blocks/diamond": 0.5, - "#forge:gems/diamond": 0.1 + "#c:storage_blocks/diamond": 0.5, + "#c:gems/diamond": 0.1 }, "model": "golems:diamond", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/emerald.json b/src/main/resources/data/golems/golems/golem/emerald.json index 58d257e5..1d3e1959 100644 --- a/src/main/resources/data/golems/golems/golem/emerald.json +++ b/src/main/resources/data/golems/golems/golem/emerald.json @@ -6,11 +6,11 @@ "armor": 3.5 }, "blocks": { - "all": "#forge:storage_blocks/emerald" + "all": "#c:storage_blocks/emerald" }, "repair_items": { - "#forge:storage_blocks/emerald": 0.5, - "#forge:gems/emerald": 0.1 + "#c:storage_blocks/emerald": 0.5, + "#c:gems/emerald": 0.1 }, "model": "golems:emerald", "brain": { diff --git a/src/main/resources/data/golems/golems/golem/end_stone.json b/src/main/resources/data/golems/golems/golem/end_stone.json index e0e30820..4ea658fe 100644 --- a/src/main/resources/data/golems/golems/golem/end_stone.json +++ b/src/main/resources/data/golems/golems/golem/end_stone.json @@ -12,12 +12,12 @@ }, "blocks": { "all": [ - "#forge:end_stones", + "#c:end_stones", "minecraft:end_stone_bricks" ] }, "repair_items": { - "#forge:end_stones": 0.5, + "#c:end_stones": 0.5, "minecraft:end_stone_bricks": 0.5 }, "model": "golems:end_stone", diff --git a/src/main/resources/data/golems/golems/golem/exposed_copper.json b/src/main/resources/data/golems/golems/golem/exposed_copper.json index 247580b1..302c61b6 100644 --- a/src/main/resources/data/golems/golems/golem/exposed_copper.json +++ b/src/main/resources/data/golems/golems/golem/exposed_copper.json @@ -2,8 +2,8 @@ "parent": "golems:generic_copper", "hidden": false, "blocks": { - "arms": "#forge:storage_blocks/copper", - "legs": "#forge:storage_blocks/copper", + "arms": "#c:storage_blocks/copper", + "legs": "#c:storage_blocks/copper", "body": "minecraft:exposed_copper" }, "model": "golems:exposed_copper", diff --git a/src/main/resources/data/golems/golems/golem/fire_coral.json b/src/main/resources/data/golems/golems/golem/fire_coral.json index a9fe7886..3c1dfa95 100644 --- a/src/main/resources/data/golems/golems/golem/fire_coral.json +++ b/src/main/resources/data/golems/golems/golem/fire_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:fire_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/generic_concrete.json b/src/main/resources/data/golems/golems/golem/generic_concrete.json index 35975964..7660ae6f 100644 --- a/src/main/resources/data/golems/golems/golem/generic_concrete.json +++ b/src/main/resources/data/golems/golems/golem/generic_concrete.json @@ -8,7 +8,7 @@ "group": "golems:concrete", "hidden": true, "repair_items": { - "#forge:concrete": 0.5 + "#c:concrete": 0.5 }, "brain": "golems:empty" } diff --git a/src/main/resources/data/golems/golems/golem/generic_copper.json b/src/main/resources/data/golems/golems/golem/generic_copper.json index 6df42fe1..cb7a1c44 100644 --- a/src/main/resources/data/golems/golems/golem/generic_copper.json +++ b/src/main/resources/data/golems/golems/golem/generic_copper.json @@ -10,7 +10,7 @@ "group": "golems:copper", "hidden": true, "repair_items": { - "#forge:storage_blocks/copper": 0.5, + "#c:storage_blocks/copper": 0.5, "minecraft:copper_ingot": 0.15 }, "model": "golems:copper", diff --git a/src/main/resources/data/golems/golems/golem/generic_coral.json b/src/main/resources/data/golems/golems/golem/generic_coral.json index 1ad718ed..3da4dd97 100644 --- a/src/main/resources/data/golems/golems/golem/generic_coral.json +++ b/src/main/resources/data/golems/golems/golem/generic_coral.json @@ -10,7 +10,7 @@ "hidden": true, "repair_items": { "#minecraft:coral_blocks": 0.5, - "#forge:dead_coral_blocks": 0.25 + "#c:dead_coral_blocks": 0.25 }, "brain": "golems:empty" } diff --git a/src/main/resources/data/golems/golems/golem/generic_dead_coral.json b/src/main/resources/data/golems/golems/golem/generic_dead_coral.json index f951bcb1..405acc3e 100644 --- a/src/main/resources/data/golems/golems/golem/generic_dead_coral.json +++ b/src/main/resources/data/golems/golems/golem/generic_dead_coral.json @@ -9,7 +9,7 @@ "hidden": true, "repair_items": { "#minecraft:coral_blocks": 0.5, - "#forge:dead_coral_blocks": 0.25 + "#c:dead_coral_blocks": 0.25 }, "brain": "golems:empty" } diff --git a/src/main/resources/data/golems/golems/golem/generic_glazed_terracotta.json b/src/main/resources/data/golems/golems/golem/generic_glazed_terracotta.json index 00aec854..6fddf621 100644 --- a/src/main/resources/data/golems/golems/golem/generic_glazed_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/generic_glazed_terracotta.json @@ -8,7 +8,7 @@ "group": "golems:glazed_terracotta", "hidden": true, "repair_items": { - "#forge:terracotta": 0.5 + "#c:terracotta": 0.5 }, "brain": "golems:empty" } diff --git a/src/main/resources/data/golems/golems/golem/generic_wool.json b/src/main/resources/data/golems/golems/golem/generic_wool.json index 27bca54e..3b61cac7 100644 --- a/src/main/resources/data/golems/golems/golem/generic_wool.json +++ b/src/main/resources/data/golems/golems/golem/generic_wool.json @@ -15,7 +15,7 @@ "hidden": true, "repair_items": { "#minecraft:wool": 0.5, - "#forge:string": 0.1 + "#c:string": 0.1 }, "brain": "golems:empty" } diff --git a/src/main/resources/data/golems/golems/golem/glass.json b/src/main/resources/data/golems/golems/golem/glass.json index 0e46d251..f9d5fce7 100644 --- a/src/main/resources/data/golems/golems/golem/glass.json +++ b/src/main/resources/data/golems/golems/golem/glass.json @@ -10,13 +10,13 @@ }, "group": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/colorless" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/colorless" }, "repair_items": { - "#forge:glass": 0.5, - "#forge:glass_panes": 0.15 + "#c:glass_blocks": 0.5, + "#c:glass_panes": 0.15 }, "model": "golems:glass", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/glowstone.json b/src/main/resources/data/golems/golems/golem/glowstone.json index 33dc868a..e267089f 100644 --- a/src/main/resources/data/golems/golems/golem/glowstone.json +++ b/src/main/resources/data/golems/golems/golem/glowstone.json @@ -17,7 +17,7 @@ }, "repair_items": { "minecraft:glowstone": 0.5, - "#forge:dusts/glowstone": 0.15 + "#c:dusts/glowstone": 0.15 }, "model": "golems:glowstone", "brain": { diff --git a/src/main/resources/data/golems/golems/golem/gold.json b/src/main/resources/data/golems/golems/golem/gold.json index 9e02989f..b6472063 100644 --- a/src/main/resources/data/golems/golems/golem/gold.json +++ b/src/main/resources/data/golems/golems/golem/gold.json @@ -8,12 +8,12 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/gold" + "all": "#c:storage_blocks/gold" }, "repair_items": { - "#forge:storage_blocks/gold": 0.5, - "#forge:ingots/gold": 0.1, - "#forge:nuggets/gold": 0.05 + "#c:storage_blocks/gold": 0.5, + "#c:ingots/gold": 0.1, + "#c:nuggets/gold": 0.05 }, "model": "golems:gold", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/gray_concrete.json b/src/main/resources/data/golems/golems/golem/gray_concrete.json index 9191dbe7..5005b504 100644 --- a/src/main/resources/data/golems/golems/golem/gray_concrete.json +++ b/src/main/resources/data/golems/golems/golem/gray_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:gray_concrete" }, "model": "golems:gray_concrete" diff --git a/src/main/resources/data/golems/golems/golem/gray_stained_glass.json b/src/main/resources/data/golems/golems/golem/gray_stained_glass.json index 723291a5..a85f1799 100644 --- a/src/main/resources/data/golems/golems/golem/gray_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/gray_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/gray" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/gray" }, "model": "golems:gray_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/gray_terracotta.json b/src/main/resources/data/golems/golems/golem/gray_terracotta.json index 3fbebc0a..e720dd71 100644 --- a/src/main/resources/data/golems/golems/golem/gray_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/gray_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/gray" + "all": "#c:terracotta/gray" }, "model": "golems:gray_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/green_concrete.json b/src/main/resources/data/golems/golems/golem/green_concrete.json index f8e82b67..f80ed482 100644 --- a/src/main/resources/data/golems/golems/golem/green_concrete.json +++ b/src/main/resources/data/golems/golems/golem/green_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:green_concrete" }, "model": "golems:green_concrete" diff --git a/src/main/resources/data/golems/golems/golem/green_stained_glass.json b/src/main/resources/data/golems/golems/golem/green_stained_glass.json index db815fe4..8845d939 100644 --- a/src/main/resources/data/golems/golems/golem/green_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/green_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/green" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/green" }, "model": "golems:green_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/green_terracotta.json b/src/main/resources/data/golems/golems/golem/green_terracotta.json index 4599632e..c55924c1 100644 --- a/src/main/resources/data/golems/golems/golem/green_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/green_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/green" + "all": "#c:terracotta/green" }, "model": "golems:green_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/hay.json b/src/main/resources/data/golems/golems/golem/hay.json index 39d34715..0c27493e 100644 --- a/src/main/resources/data/golems/golems/golem/hay.json +++ b/src/main/resources/data/golems/golems/golem/hay.json @@ -12,7 +12,7 @@ }, "repair_items": { "minecraft:hay_block": 0.5, - "#forge:crops/wheat": 0.1 + "#c:crops/wheat": 0.1 }, "model": "golems:hay", "brain": { diff --git a/src/main/resources/data/golems/golems/golem/horn_coral.json b/src/main/resources/data/golems/golems/golem/horn_coral.json index 9ade9075..de58fc1d 100644 --- a/src/main/resources/data/golems/golems/golem/horn_coral.json +++ b/src/main/resources/data/golems/golems/golem/horn_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:horn_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/jungle_log.json b/src/main/resources/data/golems/golems/golem/jungle_log.json index 278bdc77..a79111b7 100644 --- a/src/main/resources/data/golems/golems/golem/jungle_log.json +++ b/src/main/resources/data/golems/golems/golem/jungle_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#minecraft:jungle_logs" - }, - "model": "golems:jungle_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:jungle_log", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_jungle_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#minecraft:jungle_logs" + }, + "model": "golems:jungle_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:jungle_log", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_jungle_log" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/lapis.json b/src/main/resources/data/golems/golems/golem/lapis.json index b3bb9f57..623c8f80 100644 --- a/src/main/resources/data/golems/golems/golem/lapis.json +++ b/src/main/resources/data/golems/golems/golem/lapis.json @@ -5,11 +5,11 @@ "speed": 0.28 }, "blocks": { - "all": "#forge:storage_blocks/lapis" + "all": "#c:storage_blocks/lapis" }, "repair_items": { - "#forge:storage_blocks/lapis": 0.5, - "#forge:gems/lapis": 0.1 + "#c:storage_blocks/lapis": 0.5, + "#c:gems/lapis": 0.1 }, "model": "golems:lapis", "brain": { diff --git a/src/main/resources/data/golems/golems/golem/leaves.json b/src/main/resources/data/golems/golems/golem/leaves.json index 2d2c38df..9cd79bcd 100644 --- a/src/main/resources/data/golems/golems/golem/leaves.json +++ b/src/main/resources/data/golems/golems/golem/leaves.json @@ -13,7 +13,7 @@ }, "repair_items": { "#minecraft:leaves": 0.5, - "#forge:rods/wooden": 0.1 + "#c:rods/wooden": 0.1 }, "model": "golems:leaves", "brain": "golems:leaves" diff --git a/src/main/resources/data/golems/golems/golem/light_blue_concrete.json b/src/main/resources/data/golems/golems/golem/light_blue_concrete.json index 9703b1a1..5dc22a24 100644 --- a/src/main/resources/data/golems/golems/golem/light_blue_concrete.json +++ b/src/main/resources/data/golems/golems/golem/light_blue_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:light_blue_concrete" }, "model": "golems:light_blue_concrete" diff --git a/src/main/resources/data/golems/golems/golem/light_blue_stained_glass.json b/src/main/resources/data/golems/golems/golem/light_blue_stained_glass.json index 2507b145..23c1ca43 100644 --- a/src/main/resources/data/golems/golems/golem/light_blue_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/light_blue_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/light_blue" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/light_blue" }, "model": "golems:light_blue_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/light_blue_terracotta.json b/src/main/resources/data/golems/golems/golem/light_blue_terracotta.json index f894b0b9..89cb42c8 100644 --- a/src/main/resources/data/golems/golems/golem/light_blue_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/light_blue_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/light_blue" + "all": "#c:terracotta/light_blue" }, "model": "golems:light_blue_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/light_gray_concrete.json b/src/main/resources/data/golems/golems/golem/light_gray_concrete.json index 56257ab2..d490af56 100644 --- a/src/main/resources/data/golems/golems/golem/light_gray_concrete.json +++ b/src/main/resources/data/golems/golems/golem/light_gray_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:light_gray_concrete" }, "model": "golems:light_gray_concrete" diff --git a/src/main/resources/data/golems/golems/golem/light_gray_stained_glass.json b/src/main/resources/data/golems/golems/golem/light_gray_stained_glass.json index 3b36a723..e6faf1f3 100644 --- a/src/main/resources/data/golems/golems/golem/light_gray_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/light_gray_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/light_gray" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/light_gray" }, "model": "golems:light_gray_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/light_gray_terracotta.json b/src/main/resources/data/golems/golems/golem/light_gray_terracotta.json index fbde8f9e..cac9a192 100644 --- a/src/main/resources/data/golems/golems/golem/light_gray_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/light_gray_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/light_gray" + "all": "#c:terracotta/light_gray" }, "model": "golems:light_gray_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/lime_concrete.json b/src/main/resources/data/golems/golems/golem/lime_concrete.json index 8282c58c..58cb8a69 100644 --- a/src/main/resources/data/golems/golems/golem/lime_concrete.json +++ b/src/main/resources/data/golems/golems/golem/lime_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:lime_concrete" }, "model": "golems:lime_concrete" diff --git a/src/main/resources/data/golems/golems/golem/lime_stained_glass.json b/src/main/resources/data/golems/golems/golem/lime_stained_glass.json index 50745215..65a7d70b 100644 --- a/src/main/resources/data/golems/golems/golem/lime_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/lime_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/lime" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/lime" }, "model": "golems:lime_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/lime_terracotta.json b/src/main/resources/data/golems/golems/golem/lime_terracotta.json index 310aa2b6..bec7e60c 100644 --- a/src/main/resources/data/golems/golems/golem/lime_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/lime_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/lime" + "all": "#c:terracotta/lime" }, "model": "golems:lime_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/magenta_concrete.json b/src/main/resources/data/golems/golems/golem/magenta_concrete.json index dd66c48c..0556ad3c 100644 --- a/src/main/resources/data/golems/golems/golem/magenta_concrete.json +++ b/src/main/resources/data/golems/golems/golem/magenta_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:magenta_concrete" }, "model": "golems:magenta_concrete" diff --git a/src/main/resources/data/golems/golems/golem/magenta_stained_glass.json b/src/main/resources/data/golems/golems/golem/magenta_stained_glass.json index 83371db1..7b69f3c9 100644 --- a/src/main/resources/data/golems/golems/golem/magenta_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/magenta_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/magenta" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/magenta" }, "model": "golems:magenta_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/magenta_terracotta.json b/src/main/resources/data/golems/golems/golem/magenta_terracotta.json index 44164833..9a16ed6c 100644 --- a/src/main/resources/data/golems/golems/golem/magenta_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/magenta_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/magenta" + "all": "#c:terracotta/magenta" }, "model": "golems:magenta_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/mangrove_log.json b/src/main/resources/data/golems/golems/golem/mangrove_log.json index 9be913ab..2ba4bf3f 100644 --- a/src/main/resources/data/golems/golems/golem/mangrove_log.json +++ b/src/main/resources/data/golems/golems/golem/mangrove_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#minecraft:mangrove_logs" - }, - "model": "golems:mangrove_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:mangrove_log", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_mangrove_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#minecraft:mangrove_logs" + }, + "model": "golems:mangrove_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:mangrove_log", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_mangrove_log" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/mangrove_roots.json b/src/main/resources/data/golems/golems/golem/mangrove_roots.json index fbffdacb..8f46c43a 100644 --- a/src/main/resources/data/golems/golems/golem/mangrove_roots.json +++ b/src/main/resources/data/golems/golems/golem/mangrove_roots.json @@ -21,7 +21,7 @@ }, "repair_items": { "minecraft:mangrove_roots": 0.5, - "#forge:rods/wooden": 0.1 + "#c:rods/wooden": 0.1 }, "model": "golems:mangrove_roots", "brain": "golems:roots" diff --git a/src/main/resources/data/golems/golems/golem/muddy_mangrove_roots.json b/src/main/resources/data/golems/golems/golem/muddy_mangrove_roots.json index 369edcdc..520c8316 100644 --- a/src/main/resources/data/golems/golems/golem/muddy_mangrove_roots.json +++ b/src/main/resources/data/golems/golems/golem/muddy_mangrove_roots.json @@ -18,7 +18,7 @@ "minecraft:mangrove_roots": 0.5, "minecraft:muddy_mangrove_roots": 0.5, "minecraft:mud": 0.25, - "#forge:rods/wooden": 0.1 + "#c:rods/wooden": 0.1 }, "model": "golems:muddy_mangrove_roots" } diff --git a/src/main/resources/data/golems/golems/golem/nether_brick.json b/src/main/resources/data/golems/golems/golem/nether_brick.json index 24a538b7..d64b8eac 100644 --- a/src/main/resources/data/golems/golems/golem/nether_brick.json +++ b/src/main/resources/data/golems/golems/golem/nether_brick.json @@ -35,7 +35,7 @@ "minecraft:red_nether_bricks": 0.5, "minecraft:cracked_nether_bricks": 0.5, "minecraft:chiseled_nether_bricks": 0.5, - "#forge:ingots/nether_brick": 0.15 + "#c:ingots/nether_brick": 0.15 }, "model": "golems:nether_brick", "brain": { diff --git a/src/main/resources/data/golems/golems/golem/netherite.json b/src/main/resources/data/golems/golems/golem/netherite.json index cd4d9f14..8afebc26 100644 --- a/src/main/resources/data/golems/golems/golem/netherite.json +++ b/src/main/resources/data/golems/golems/golem/netherite.json @@ -13,11 +13,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/netherite" + "all": "#c:storage_blocks/netherite" }, "repair_items": { - "#forge:storage_blocks/netherite": 1.0, - "#forge:ingots/netherite": 0.5 + "#c:storage_blocks/netherite": 1.0, + "#c:ingots/netherite": 0.5 }, "model": "golems:netherite", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/oak_log.json b/src/main/resources/data/golems/golems/golem/oak_log.json index 307cb94d..c78a8122 100644 --- a/src/main/resources/data/golems/golems/golem/oak_log.json +++ b/src/main/resources/data/golems/golems/golem/oak_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#minecraft:oak_logs" - }, - "model": "golems:oak_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:oak_log", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_oak_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#minecraft:oak_logs" + }, + "model": "golems:oak_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:oak_log", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_oak_log" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/ochre_froglight.json b/src/main/resources/data/golems/golems/golem/ochre_froglight.json index e03630a5..6460d0c3 100644 --- a/src/main/resources/data/golems/golems/golem/ochre_froglight.json +++ b/src/main/resources/data/golems/golems/golem/ochre_froglight.json @@ -16,7 +16,7 @@ }, "repair_items": { "minecraft:ochre_froglight": 0.5, - "#forge:slimeballs": 0.15 + "#c:slimeballs": 0.15 }, "model": "golems:ochre_froglight" } diff --git a/src/main/resources/data/golems/golems/golem/orange_concrete.json b/src/main/resources/data/golems/golems/golem/orange_concrete.json index 3dee8f6e..3ac689d3 100644 --- a/src/main/resources/data/golems/golems/golem/orange_concrete.json +++ b/src/main/resources/data/golems/golems/golem/orange_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:orange_concrete" }, "model": "golems:orange_concrete" diff --git a/src/main/resources/data/golems/golems/golem/orange_stained_glass.json b/src/main/resources/data/golems/golems/golem/orange_stained_glass.json index cf0138da..e1646216 100644 --- a/src/main/resources/data/golems/golems/golem/orange_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/orange_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/orange" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/orange" }, "model": "golems:orange_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/orange_terracotta.json b/src/main/resources/data/golems/golems/golem/orange_terracotta.json index 4d7f617c..a7434322 100644 --- a/src/main/resources/data/golems/golems/golem/orange_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/orange_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/orange" + "all": "#c:terracotta/orange" }, "model": "golems:orange_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/oxidized_copper.json b/src/main/resources/data/golems/golems/golem/oxidized_copper.json index f76ca682..3bf34311 100644 --- a/src/main/resources/data/golems/golems/golem/oxidized_copper.json +++ b/src/main/resources/data/golems/golems/golem/oxidized_copper.json @@ -2,8 +2,8 @@ "parent": "golems:generic_copper", "hidden": false, "blocks": { - "arms": "#forge:storage_blocks/copper", - "legs": "#forge:storage_blocks/copper", + "arms": "#c:storage_blocks/copper", + "legs": "#c:storage_blocks/copper", "body": "minecraft:oxidized_copper" }, "model": "golems:oxidized_copper", diff --git a/src/main/resources/data/golems/golems/golem/pearlescent_froglight.json b/src/main/resources/data/golems/golems/golem/pearlescent_froglight.json index f2dea5ae..2dcccca4 100644 --- a/src/main/resources/data/golems/golems/golem/pearlescent_froglight.json +++ b/src/main/resources/data/golems/golems/golem/pearlescent_froglight.json @@ -16,7 +16,7 @@ }, "repair_items": { "minecraft:pearlescent_froglight": 0.5, - "#forge:slimeballs": 0.15 + "#c:slimeballs": 0.15 }, "model": "golems:pearlescent_froglight" } diff --git a/src/main/resources/data/golems/golems/golem/pink_concrete.json b/src/main/resources/data/golems/golems/golem/pink_concrete.json index 7c6e8374..6a5d1222 100644 --- a/src/main/resources/data/golems/golems/golem/pink_concrete.json +++ b/src/main/resources/data/golems/golems/golem/pink_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:pink_concrete" }, "model": "golems:pink_concrete" diff --git a/src/main/resources/data/golems/golems/golem/pink_stained_glass.json b/src/main/resources/data/golems/golems/golem/pink_stained_glass.json index facd9919..281a174a 100644 --- a/src/main/resources/data/golems/golems/golem/pink_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/pink_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/pink" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/pink" }, "model": "golems:pink_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/pink_terracotta.json b/src/main/resources/data/golems/golems/golem/pink_terracotta.json index 7f87053f..dcd2fc79 100644 --- a/src/main/resources/data/golems/golems/golem/pink_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/pink_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/pink" + "all": "#c:terracotta/pink" }, "model": "golems:pink_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/prismarine.json b/src/main/resources/data/golems/golems/golem/prismarine.json index 47988304..c6ceec33 100644 --- a/src/main/resources/data/golems/golems/golem/prismarine.json +++ b/src/main/resources/data/golems/golems/golem/prismarine.json @@ -6,12 +6,12 @@ "swim_ability": "swim" }, "blocks": { - "all": "#forge:prismarine" + "all": "#c:prismarine" }, "repair_items": { - "#forge:prismarine": 0.5, - "#forge:gems/prismarine": 0.1, - "#forge:dusts/prismarine": 0.1 + "#c:prismarine": 0.5, + "#c:gems/prismarine": 0.1, + "#c:dusts/prismarine": 0.1 }, "model": "golems:prismarine", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/purple_concrete.json b/src/main/resources/data/golems/golems/golem/purple_concrete.json index dd69d8dc..1fbf29f6 100644 --- a/src/main/resources/data/golems/golems/golem/purple_concrete.json +++ b/src/main/resources/data/golems/golems/golem/purple_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:purple_concrete" }, "model": "golems:purple_concrete" diff --git a/src/main/resources/data/golems/golems/golem/purple_stained_glass.json b/src/main/resources/data/golems/golems/golem/purple_stained_glass.json index 8fa32d08..e754be7d 100644 --- a/src/main/resources/data/golems/golems/golem/purple_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/purple_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/purple" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/purple" }, "model": "golems:purple_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/purple_terracotta.json b/src/main/resources/data/golems/golems/golem/purple_terracotta.json index cbe082eb..4bbcc5eb 100644 --- a/src/main/resources/data/golems/golems/golem/purple_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/purple_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/purple" + "all": "#c:terracotta/purple" }, "model": "golems:purple_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/quartz.json b/src/main/resources/data/golems/golems/golem/quartz.json index 74725d97..2758404d 100644 --- a/src/main/resources/data/golems/golems/golem/quartz.json +++ b/src/main/resources/data/golems/golems/golem/quartz.json @@ -6,11 +6,11 @@ "knockback_resistance": 0.6 }, "blocks": { - "all": "#forge:quartz" + "all": "#c:quartz" }, "repair_items": { - "#forge:quartz": 0.5, - "#forge:gems/quartz": 0.15 + "#c:quartz": 0.5, + "#c:gems/quartz": 0.15 }, "model": "golems:quartz", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/raw_copper.json b/src/main/resources/data/golems/golems/golem/raw_copper.json index eb60404e..1a4b7b2f 100644 --- a/src/main/resources/data/golems/golems/golem/raw_copper.json +++ b/src/main/resources/data/golems/golems/golem/raw_copper.json @@ -8,12 +8,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_copper" + "all": "#c:storage_blocks/raw_copper" }, "repair_items": { - "#forge:storage_blocks/raw_copper": 0.5, - "#forge:raw_materials/copper": 0.1, - "#forge:ingots/copper": 0.25 + "#c:storage_blocks/raw_copper": 0.5, + "#c:raw_materials/copper": 0.1, + "#c:ingots/copper": 0.25 }, "model": "golems:raw_copper", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/raw_gold.json b/src/main/resources/data/golems/golems/golem/raw_gold.json index b23ec9d8..6f41a051 100644 --- a/src/main/resources/data/golems/golems/golem/raw_gold.json +++ b/src/main/resources/data/golems/golems/golem/raw_gold.json @@ -8,12 +8,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_gold" + "all": "#c:storage_blocks/raw_gold" }, "repair_items": { - "#forge:storage_blocks/raw_gold": 0.5, - "#forge:raw_materials/gold": 0.1, - "#forge:ingots/gold": 0.25 + "#c:storage_blocks/raw_gold": 0.5, + "#c:raw_materials/gold": 0.1, + "#c:ingots/gold": 0.25 }, "model": "golems:raw_gold", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/raw_iron.json b/src/main/resources/data/golems/golems/golem/raw_iron.json index d825e11e..bbb2ff31 100644 --- a/src/main/resources/data/golems/golems/golem/raw_iron.json +++ b/src/main/resources/data/golems/golems/golem/raw_iron.json @@ -8,12 +8,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_iron" + "all": "#c:storage_blocks/raw_iron" }, "repair_items": { - "#forge:storage_blocks/raw_iron": 0.5, - "#forge:raw_materials/iron": 0.1, - "#forge:ingots/iron": 0.25 + "#c:storage_blocks/raw_iron": 0.5, + "#c:raw_materials/iron": 0.1, + "#c:ingots/iron": 0.25 }, "model": "golems:raw_iron", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/red_concrete.json b/src/main/resources/data/golems/golems/golem/red_concrete.json index 1ad00a46..2ec6746d 100644 --- a/src/main/resources/data/golems/golems/golem/red_concrete.json +++ b/src/main/resources/data/golems/golems/golem/red_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:red_concrete" }, "model": "golems:red_concrete" diff --git a/src/main/resources/data/golems/golems/golem/red_stained_glass.json b/src/main/resources/data/golems/golems/golem/red_stained_glass.json index d3828f4a..4d1a7c19 100644 --- a/src/main/resources/data/golems/golems/golem/red_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/red_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/red" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/red" }, "model": "golems:red_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/red_terracotta.json b/src/main/resources/data/golems/golems/golem/red_terracotta.json index 0d56f62e..9965dbc2 100644 --- a/src/main/resources/data/golems/golems/golem/red_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/red_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/red" + "all": "#c:terracotta/red" }, "model": "golems:red_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/redstone.json b/src/main/resources/data/golems/golems/golem/redstone.json index 7224b690..705232c5 100644 --- a/src/main/resources/data/golems/golems/golem/redstone.json +++ b/src/main/resources/data/golems/golems/golem/redstone.json @@ -5,11 +5,11 @@ "knockback_resistance": 0.1 }, "blocks": { - "all": "#forge:storage_blocks/redstone" + "all": "#c:storage_blocks/redstone" }, "repair_items": { - "#forge:storage_blocks/redstone": 0.5, - "#forge:dusts/redstone": 0.15 + "#c:storage_blocks/redstone": 0.5, + "#c:dusts/redstone": 0.15 }, "model": "golems:redstone", "brain": { diff --git a/src/main/resources/data/golems/golems/golem/redstone_lamp.json b/src/main/resources/data/golems/golems/golem/redstone_lamp.json index b80c4186..46310df3 100644 --- a/src/main/resources/data/golems/golems/golem/redstone_lamp.json +++ b/src/main/resources/data/golems/golems/golem/redstone_lamp.json @@ -10,8 +10,8 @@ }, "repair_items": { "minecraft:redstone_lamp": 0.5, - "#forge:dusts/redstone": 0.15, - "#forge:dusts/glowstone": 0.15 + "#c:dusts/redstone": 0.15, + "#c:dusts/glowstone": 0.15 }, "variants": 2, "model": "golems:redstone_lamp", diff --git a/src/main/resources/data/golems/golems/golem/sandstone.json b/src/main/resources/data/golems/golems/golem/sandstone.json index 36c47441..77c01233 100644 --- a/src/main/resources/data/golems/golems/golem/sandstone.json +++ b/src/main/resources/data/golems/golems/golem/sandstone.json @@ -18,8 +18,8 @@ ] }, "repair_items": { - "#forge:sandstone": 0.5, - "#forge:sand": 0.15 + "#c:sandstone": 0.5, + "#c:sand": 0.15 }, "model": "golems:sandstone", "brain": "golems:empty", diff --git a/src/main/resources/data/golems/golems/golem/sea_lantern.json b/src/main/resources/data/golems/golems/golem/sea_lantern.json index afb9e246..75c1b68c 100644 --- a/src/main/resources/data/golems/golems/golem/sea_lantern.json +++ b/src/main/resources/data/golems/golems/golem/sea_lantern.json @@ -14,8 +14,8 @@ }, "repair_items": { "minecraft:sea_lantern": 0.5, - "#forge:gems/prismarine": 0.15, - "#forge:dusts/prismarine": 0.15 + "#c:gems/prismarine": 0.15, + "#c:dusts/prismarine": 0.15 }, "model": "golems:sea_lantern", "brain": { diff --git a/src/main/resources/data/golems/golems/golem/slime.json b/src/main/resources/data/golems/golems/golem/slime.json index 0c7bca3b..ec9eb30f 100644 --- a/src/main/resources/data/golems/golems/golem/slime.json +++ b/src/main/resources/data/golems/golems/golem/slime.json @@ -13,7 +13,7 @@ }, "repair_items": { "minecraft:slime_block": 0.5, - "#forge:slimeballs": 0.15 + "#c:slimeballs": 0.15 }, "model": "golems:slime", "brain": { diff --git a/src/main/resources/data/golems/golems/golem/spruce_log.json b/src/main/resources/data/golems/golems/golem/spruce_log.json index 1e597f03..1bb1e843 100644 --- a/src/main/resources/data/golems/golems/golem/spruce_log.json +++ b/src/main/resources/data/golems/golems/golem/spruce_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#minecraft:spruce_logs" - }, - "model": "golems:spruce_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:spruce_log", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_spruce_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#minecraft:spruce_logs" + }, + "model": "golems:spruce_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:spruce_log", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_spruce_log" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/terracotta.json b/src/main/resources/data/golems/golems/golem/terracotta.json index 19e61080..e7f1b7fa 100644 --- a/src/main/resources/data/golems/golems/golem/terracotta.json +++ b/src/main/resources/data/golems/golems/golem/terracotta.json @@ -7,10 +7,10 @@ }, "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/colorless" + "all": "#c:terracotta/colorless" }, "repair_items": { - "#forge:terracotta": 0.5 + "#c:terracotta": 0.5 }, "model": "golems:terracotta", "brain": "golems:empty" diff --git a/src/main/resources/data/golems/golems/golem/tinted_glass.json b/src/main/resources/data/golems/golems/golem/tinted_glass.json index 74d3a50f..c2e5dcd7 100644 --- a/src/main/resources/data/golems/golems/golem/tinted_glass.json +++ b/src/main/resources/data/golems/golems/golem/tinted_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/tinted" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/tinted" }, "model": "golems:tinted_glass" } diff --git a/src/main/resources/data/golems/golems/golem/tnt.json b/src/main/resources/data/golems/golems/golem/tnt.json index d18980a9..bc9abca8 100644 --- a/src/main/resources/data/golems/golems/golem/tnt.json +++ b/src/main/resources/data/golems/golems/golem/tnt.json @@ -11,8 +11,8 @@ }, "repair_items": { "minecraft:tnt": 0.5, - "#forge:gunpowder": 0.15, - "#forge:sand": 0.15 + "#c:gunpowder": 0.15, + "#c:sand": 0.15 }, "model": "golems:tnt", "brain": "golems:tnt" diff --git a/src/main/resources/data/golems/golems/golem/tube_coral.json b/src/main/resources/data/golems/golems/golem/tube_coral.json index 52f2513b..f9c87348 100644 --- a/src/main/resources/data/golems/golems/golem/tube_coral.json +++ b/src/main/resources/data/golems/golems/golem/tube_coral.json @@ -4,11 +4,11 @@ "blocks": { "arms": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "legs": [ "#minecraft:coral_blocks", - "#forge:dead_coral_blocks" + "#c:dead_coral_blocks" ], "body": "minecraft:tube_coral_block" }, diff --git a/src/main/resources/data/golems/golems/golem/verdant_froglight.json b/src/main/resources/data/golems/golems/golem/verdant_froglight.json index 5ff4ac4c..a228e7f6 100644 --- a/src/main/resources/data/golems/golems/golem/verdant_froglight.json +++ b/src/main/resources/data/golems/golems/golem/verdant_froglight.json @@ -16,7 +16,7 @@ }, "repair_items": { "minecraft:verdant_froglight": 0.5, - "#forge:slimeballs": 0.15 + "#c:slimeballs": 0.15 }, "model": "golems:verdant_froglight" } diff --git a/src/main/resources/data/golems/golems/golem/warped_stem.json b/src/main/resources/data/golems/golems/golem/warped_stem.json index 4cc16985..0a31ea4e 100644 --- a/src/main/resources/data/golems/golems/golem/warped_stem.json +++ b/src/main/resources/data/golems/golems/golem/warped_stem.json @@ -1,43 +1,43 @@ { - "parent": "golems:generic_stem", - "group": "golems:stem", - "hidden": false, - "blocks": { - "all": "#minecraft:warped_stems" - }, - "repair_items": { - "#minecraft:warped_stems": 0.5, - "minecraft:warped_fungus": 0.15 - }, - "model": "golems:warped_stem", - "brain": { - "behaviors": [ - { - "type": "golems:place", - "trigger": "tick", - "position": "self", - "chance": 0.00062, - "must_survive": false, - "block": { - "Name": "minecraft:warped_fungus" - } - }, - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "minecraft:warped_stem", - "Count": 1 - } - }, - "apply": { - "golem": "golems:stripped_warped_stem" - } - } - ] - } + "parent": "golems:generic_stem", + "group": "golems:stem", + "hidden": false, + "blocks": { + "all": "#minecraft:warped_stems" + }, + "repair_items": { + "#minecraft:warped_stems": 0.5, + "minecraft:warped_fungus": 0.15 + }, + "model": "golems:warped_stem", + "brain": { + "behaviors": [ + { + "type": "golems:place", + "trigger": "tick", + "position": "self", + "chance": 0.00062, + "must_survive": false, + "block": { + "Name": "minecraft:warped_fungus" + } + }, + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "minecraft:warped_stem", + "count": 1 + } + }, + "apply": { + "golem": "golems:stripped_warped_stem" + } + } + ] + } } diff --git a/src/main/resources/data/golems/golems/golem/waxed_copper.json b/src/main/resources/data/golems/golems/golem/waxed_copper.json index 4e9c9868..e3f833a0 100644 --- a/src/main/resources/data/golems/golems/golem/waxed_copper.json +++ b/src/main/resources/data/golems/golems/golem/waxed_copper.json @@ -2,8 +2,8 @@ "parent": "golems:generic_copper", "hidden": false, "blocks": { - "arms": "#forge:storage_blocks/copper", - "legs": "#forge:storage_blocks/copper", + "arms": "#c:storage_blocks/copper", + "legs": "#c:storage_blocks/copper", "body": "minecraft:waxed_copper_block" }, "model": "golems:copper", diff --git a/src/main/resources/data/golems/golems/golem/waxed_exposed_copper.json b/src/main/resources/data/golems/golems/golem/waxed_exposed_copper.json index 7de68cf7..a9057779 100644 --- a/src/main/resources/data/golems/golems/golem/waxed_exposed_copper.json +++ b/src/main/resources/data/golems/golems/golem/waxed_exposed_copper.json @@ -2,8 +2,8 @@ "parent": "golems:generic_copper", "hidden": false, "blocks": { - "arms": "#forge:storage_blocks/copper", - "legs": "#forge:storage_blocks/copper", + "arms": "#c:storage_blocks/copper", + "legs": "#c:storage_blocks/copper", "body": "minecraft:waxed_exposed_copper" }, "model": "golems:exposed_copper", diff --git a/src/main/resources/data/golems/golems/golem/waxed_oxidized_copper.json b/src/main/resources/data/golems/golems/golem/waxed_oxidized_copper.json index 95c2e950..5fc63ed0 100644 --- a/src/main/resources/data/golems/golems/golem/waxed_oxidized_copper.json +++ b/src/main/resources/data/golems/golems/golem/waxed_oxidized_copper.json @@ -2,8 +2,8 @@ "parent": "golems:generic_copper", "hidden": false, "blocks": { - "arms": "#forge:storage_blocks/copper", - "legs": "#forge:storage_blocks/copper", + "arms": "#c:storage_blocks/copper", + "legs": "#c:storage_blocks/copper", "body": "minecraft:waxed_oxidized_copper" }, "model": "golems:oxidized_copper", diff --git a/src/main/resources/data/golems/golems/golem/waxed_weathered_copper.json b/src/main/resources/data/golems/golems/golem/waxed_weathered_copper.json index b00d2fcc..2a20cdee 100644 --- a/src/main/resources/data/golems/golems/golem/waxed_weathered_copper.json +++ b/src/main/resources/data/golems/golems/golem/waxed_weathered_copper.json @@ -2,8 +2,8 @@ "parent": "golems:generic_copper", "hidden": false, "blocks": { - "arms": "#forge:storage_blocks/copper", - "legs": "#forge:storage_blocks/copper", + "arms": "#c:storage_blocks/copper", + "legs": "#c:storage_blocks/copper", "body": "minecraft:waxed_weathered_copper" }, "model": "golems:weathered_copper", diff --git a/src/main/resources/data/golems/golems/golem/weathered_copper.json b/src/main/resources/data/golems/golems/golem/weathered_copper.json index 6fb062ae..4e0dbcb9 100644 --- a/src/main/resources/data/golems/golems/golem/weathered_copper.json +++ b/src/main/resources/data/golems/golems/golem/weathered_copper.json @@ -2,8 +2,8 @@ "parent": "golems:generic_copper", "hidden": false, "blocks": { - "arms": "#forge:storage_blocks/copper", - "legs": "#forge:storage_blocks/copper", + "arms": "#c:storage_blocks/copper", + "legs": "#c:storage_blocks/copper", "body": "minecraft:weathered_copper" }, "model": "golems:weathered_copper", diff --git a/src/main/resources/data/golems/golems/golem/white_concrete.json b/src/main/resources/data/golems/golems/golem/white_concrete.json index 9d73a07d..16ec8a76 100644 --- a/src/main/resources/data/golems/golems/golem/white_concrete.json +++ b/src/main/resources/data/golems/golems/golem/white_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:white_concrete" }, "model": "golems:white_concrete" diff --git a/src/main/resources/data/golems/golems/golem/white_stained_glass.json b/src/main/resources/data/golems/golems/golem/white_stained_glass.json index f58b2ab3..10b3b976 100644 --- a/src/main/resources/data/golems/golems/golem/white_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/white_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/white" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/white" }, "model": "golems:white_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/white_terracotta.json b/src/main/resources/data/golems/golems/golem/white_terracotta.json index 22d3abda..e4144c5f 100644 --- a/src/main/resources/data/golems/golems/golem/white_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/white_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/white" + "all": "#c:terracotta/white" }, "model": "golems:white_terracotta" } diff --git a/src/main/resources/data/golems/golems/golem/yellow_concrete.json b/src/main/resources/data/golems/golems/golem/yellow_concrete.json index c26aaca2..f7fc252c 100644 --- a/src/main/resources/data/golems/golems/golem/yellow_concrete.json +++ b/src/main/resources/data/golems/golems/golem/yellow_concrete.json @@ -2,8 +2,8 @@ "parent": "golems:generic_concrete", "hidden": false, "blocks": { - "arms": "#forge:concrete", - "legs": "#forge:concrete", + "arms": "#c:concrete", + "legs": "#c:concrete", "body": "minecraft:yellow_concrete" }, "model": "golems:yellow_concrete" diff --git a/src/main/resources/data/golems/golems/golem/yellow_stained_glass.json b/src/main/resources/data/golems/golems/golem/yellow_stained_glass.json index 1b7fcb2b..5e8369f1 100644 --- a/src/main/resources/data/golems/golems/golem/yellow_stained_glass.json +++ b/src/main/resources/data/golems/golems/golem/yellow_stained_glass.json @@ -1,9 +1,9 @@ { "parent": "golems:glass", "blocks": { - "arms": "#forge:glass", - "legs": "#forge:glass", - "body": "#forge:glass/yellow" + "arms": "#c:glass_blocks", + "legs": "#c:glass_blocks", + "body": "#c:glass_blocks/yellow" }, "model": "golems:yellow_stained_glass" } diff --git a/src/main/resources/data/golems/golems/golem/yellow_terracotta.json b/src/main/resources/data/golems/golems/golem/yellow_terracotta.json index 9b9a4110..a265ff2d 100644 --- a/src/main/resources/data/golems/golems/golem/yellow_terracotta.json +++ b/src/main/resources/data/golems/golems/golem/yellow_terracotta.json @@ -2,7 +2,7 @@ "parent": "golems:terracotta", "group": "golems:terracotta", "blocks": { - "all": "#forge:terracotta/yellow" + "all": "#c:terracotta/yellow" }, "model": "golems:yellow_terracotta" } diff --git a/src/main/resources/data/golems/recipe/golem_head.json b/src/main/resources/data/golems/recipe/golem_head.json new file mode 100644 index 00000000..a2150d54 --- /dev/null +++ b/src/main/resources/data/golems/recipe/golem_head.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { "item": "minecraft:carved_pumpkin" }, + { "item": "golems:golem_spell" } + ], + "result": { + "id": "golems:golem_head" + } +} diff --git a/src/main/resources/data/golems/recipe/golem_spell.json b/src/main/resources/data/golems/recipe/golem_spell.json new file mode 100644 index 00000000..9a1ca32d --- /dev/null +++ b/src/main/resources/data/golems/recipe/golem_spell.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { "item": "minecraft:feather" }, + { "item": "minecraft:redstone" }, + { "item": "minecraft:paper" }, + { "item": "minecraft:ink_sac" } + ], + "result": { + "id": "golems:golem_spell", + "count": 3 + } +} diff --git a/src/main/resources/data/golems/recipe/guide_book.json b/src/main/resources/data/golems/recipe/guide_book.json new file mode 100644 index 00000000..04e8b79b --- /dev/null +++ b/src/main/resources/data/golems/recipe/guide_book.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { "item": "minecraft:book" }, + [ + { "item": "minecraft:pumpkin" }, + { "item": "minecraft:carved_pumpkin" } + ] + ], + "result": { + "id": "golems:guide_book" + } +} diff --git a/src/main/resources/data/golems/recipes/golem_head.json b/src/main/resources/data/golems/recipes/golem_head.json deleted file mode 100644 index 0e68e58f..00000000 --- a/src/main/resources/data/golems/recipes/golem_head.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { "item": "minecraft:carved_pumpkin" }, - { "item": "golems:golem_spell" } - ], - "result": { - "item": "golems:golem_head" - } -} diff --git a/src/main/resources/data/golems/recipes/golem_spell.json b/src/main/resources/data/golems/recipes/golem_spell.json deleted file mode 100644 index 01913927..00000000 --- a/src/main/resources/data/golems/recipes/golem_spell.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { "item": "minecraft:feather" }, - { "item": "minecraft:redstone" }, - { "item": "minecraft:paper" }, - { "item": "minecraft:ink_sac" } - ], - "result": { - "item": "golems:golem_spell", - "count": 3 - } -} diff --git a/src/main/resources/data/golems/recipes/guide_book.json b/src/main/resources/data/golems/recipes/guide_book.json deleted file mode 100644 index efe8d8ef..00000000 --- a/src/main/resources/data/golems/recipes/guide_book.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "crafting_shapeless", - "ingredients": [ - { "item": "minecraft:book" }, - [ - { "item": "minecraft:pumpkin" }, - { "item": "minecraft:carved_pumpkin" } - ] - ], - "result": { - "item": "golems:guide_book" - } -} diff --git a/src/main/resources/data/golems/tags/blocks/cannot_support_utility_blocks.json b/src/main/resources/data/golems/tags/block/cannot_support_utility_blocks.json similarity index 100% rename from src/main/resources/data/golems/tags/blocks/cannot_support_utility_blocks.json rename to src/main/resources/data/golems/tags/block/cannot_support_utility_blocks.json diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/dead_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/dead_log.json index 452a2190..41ab7db1 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/dead_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/dead_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#biomesoplenty:dead_logs" - }, - "model": "biomesoplenty:dead_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:dead_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_dead_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#biomesoplenty:dead_logs" + }, + "model": "biomesoplenty:dead_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:dead_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_dead_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/fir_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/fir_log.json index 64bd681d..4d247e08 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/fir_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/fir_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#biomesoplenty:fir_logs" - }, - "model": "biomesoplenty:fir_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:fir_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_fir_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#biomesoplenty:fir_logs" + }, + "model": "biomesoplenty:fir_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:fir_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_fir_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/hellbark_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/hellbark_log.json index 2e436dbb..11954904 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/hellbark_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/hellbark_log.json @@ -1,34 +1,31 @@ { - "parent": "golems:generic_log", - "attributes": { - "immune": [ - "minecraft:in_fire", - "minecraft:on_fire" - ] - }, - "hidden": false, - "blocks": { - "all": "#biomesoplenty:hellbark_logs" - }, - "model": "biomesoplenty:hellbark_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:hellbark_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_hellbark_log" - } - } - ] - } + "parent": "golems:generic_log", + "attributes": { + "immune": ["minecraft:in_fire", "minecraft:on_fire"] + }, + "hidden": false, + "blocks": { + "all": "#biomesoplenty:hellbark_logs" + }, + "model": "biomesoplenty:hellbark_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:hellbark_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_hellbark_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/jacaranda_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/jacaranda_log.json index cc786661..29282087 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/jacaranda_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/jacaranda_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#biomesoplenty:jacaranda_logs" - }, - "model": "biomesoplenty:jacaranda_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:jacaranda_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_jacaranda_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#biomesoplenty:jacaranda_logs" + }, + "model": "biomesoplenty:jacaranda_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:jacaranda_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_jacaranda_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/magic_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/magic_log.json index 60283897..7abde84e 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/magic_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/magic_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#biomesoplenty:magic_logs" - }, - "model": "biomesoplenty:magic_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:magic_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_magic_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#biomesoplenty:magic_logs" + }, + "model": "biomesoplenty:magic_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:magic_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_magic_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/mahogany_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/mahogany_log.json index 4ca86692..06616a9c 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/mahogany_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/mahogany_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#biomesoplenty:mahogany_logs" - }, - "model": "biomesoplenty:mahogany_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:mahogany_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_mahogany_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#biomesoplenty:mahogany_logs" + }, + "model": "biomesoplenty:mahogany_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:mahogany_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_mahogany_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/palm_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/palm_log.json index e6cfc4f1..9961dfbc 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/palm_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/palm_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#biomesoplenty:palm_logs" - }, - "model": "biomesoplenty:palm_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:palm_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_palm_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#biomesoplenty:palm_logs" + }, + "model": "biomesoplenty:palm_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:palm_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_palm_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/redwood_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/redwood_log.json index 305f8a0f..21593b9b 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/redwood_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/redwood_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#biomesoplenty:redwood_logs" - }, - "model": "biomesoplenty:redwood_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:redwood_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_redwood_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#biomesoplenty:redwood_logs" + }, + "model": "biomesoplenty:redwood_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:redwood_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_redwood_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/toadstool.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/toadstool.json index a73d380c..94204fa2 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/toadstool.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/toadstool.json @@ -1,47 +1,39 @@ { - "parent": "golems:generic_mushroom", - "group": "golems:mushroom", - "hidden": false, - "blocks": { - "arms": [ - "minecraft:mushroom_stem", - "biomesoplenty:toadstool_block" - ], - "legs": [ - "minecraft:mushroom_stem", - "biomesoplenty:toadstool_block" - ], - "body": "biomesoplenty:toadstool_block" - }, - "repair_items": { - "minecraft:mushroom_stem": 0.5, - "biomesoplenty:toadstool_block": 0.5, - "biomesoplenty:toadstool": 0.15 - }, - "model": "biomesoplenty:toadstool", - "brain": { - "behavior": [ - { - "type": "golems:effect", - "trigger": "tick", - "predicate": [ - "night" - ], - "chance": 0.0125, - "apply": { - "target": "self", - "effect": { - "id": "minecraft:regeneration", - "duration": 300 - } - } - }, - { - "type": "golems:place", - "chance": 0.009, - "display_name": "block.biomesoplenty.toadstool", - "block": "biomesoplenty:toadstool" - } - ] - } + "parent": "golems:generic_mushroom", + "group": "golems:mushroom", + "hidden": false, + "blocks": { + "arms": ["minecraft:mushroom_stem", "biomesoplenty:toadstool_block"], + "legs": ["minecraft:mushroom_stem", "biomesoplenty:toadstool_block"], + "body": "biomesoplenty:toadstool_block" + }, + "repair_items": { + "minecraft:mushroom_stem": 0.5, + "biomesoplenty:toadstool_block": 0.5, + "biomesoplenty:toadstool": 0.15 + }, + "model": "biomesoplenty:toadstool", + "brain": { + "behaviors": [ + { + "type": "golems:effect", + "trigger": "tick", + "predicate": ["night"], + "chance": 0.0125, + "apply": { + "target": "self", + "effect": { + "id": "minecraft:regeneration", + "duration": 300 + } + } + }, + { + "type": "golems:place", + "chance": 0.009, + "display_name": "block.biomesoplenty.toadstool", + "block": "biomesoplenty:toadstool" + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/umbran_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/umbran_log.json index 0521b3a5..efbbcb1f 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/umbran_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/umbran_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#biomesoplenty:umbran_logs" - }, - "model": "biomesoplenty:umbran_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:umbran_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_umbran_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#biomesoplenty:umbran_logs" + }, + "model": "biomesoplenty:umbran_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:umbran_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_umbran_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/willow_log.json b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/willow_log.json index a9225b1b..68d44f2b 100644 --- a/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/willow_log.json +++ b/src/main/resources/golems_addon_biomesoplenty/data/biomesoplenty/golems/golem/willow_log.json @@ -1,30 +1,30 @@ { - "parent": "golems:generic_log", - "hidden": false, - "blocks": { - "arms": "#minecraft:logs_that_burn", - "legs": "#minecraft:logs_that_burn", - "body": "#biomesoplenty:willow_logs" - }, - "model": "biomesoplenty:willow_log", - "brain": { - "behaviors": [ - { - "type": "golems:item_update_golem", - "item": "#minecraft:axes", - "display_name": "golem.description.axe", - "sound": "minecraft:item.axe.strip", - "particle": { - "type": "minecraft:item", - "value": { - "id": "biomesoplenty:willow_log", - "Count": 1 - } - }, - "apply": { - "golem": "biomesoplenty:stripped_willow_log" - } - } - ] - } + "parent": "golems:generic_log", + "hidden": false, + "blocks": { + "arms": "#minecraft:logs_that_burn", + "legs": "#minecraft:logs_that_burn", + "body": "#biomesoplenty:willow_logs" + }, + "model": "biomesoplenty:willow_log", + "brain": { + "behaviors": [ + { + "type": "golems:item_update_golem", + "item": "#minecraft:axes", + "display_name": "golem.description.axe", + "sound": "minecraft:item.axe.strip", + "particle": { + "type": "minecraft:item", + "item": { + "id": "biomesoplenty:willow_log", + "Count": 1 + } + }, + "apply": { + "golem": "biomesoplenty:stripped_willow_log" + } + } + ] + } } diff --git a/src/main/resources/golems_addon_mekanism/data/golems/golems/golem/charcoal.json b/src/main/resources/golems_addon_mekanism/data/golems/golems/golem/charcoal.json index 2782576b..0b1831bf 100644 --- a/src/main/resources/golems_addon_mekanism/data/golems/golems/golem/charcoal.json +++ b/src/main/resources/golems_addon_mekanism/data/golems/golems/golem/charcoal.json @@ -2,7 +2,7 @@ "parent": "golems:coal", "group": "golems:coal", "blocks": { - "all": "#forge:storage_blocks/charcoal" + "all": "#c:storage_blocks/charcoal" }, "model": "golems:charcoal" } diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/bronze.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/bronze.json index f9fce213..36b57d4f 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/bronze.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/bronze.json @@ -7,11 +7,11 @@ }, "group": "golems:bronze", "blocks": { - "all": "#forge:storage_blocks/bronze" + "all": "#c:storage_blocks/bronze" }, "repair_items": { - "#forge:storage_blocks/bronze": 0.5, - "#forge:ingots/bronze": 0.15 + "#c:storage_blocks/bronze": 0.5, + "#c:ingots/bronze": 0.15 }, "model": "mekanism:bronze", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/fluorite.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/fluorite.json index 9d7e04e1..5b5ec0d0 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/fluorite.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/fluorite.json @@ -5,11 +5,11 @@ }, "group": "golems:fluorite", "blocks": { - "all": "#forge:storage_blocks/fluorite" + "all": "#c:storage_blocks/fluorite" }, "repair_items": { - "#forge:storage_blocks/fluorite": 0.5, - "#forge:gems/fluorite": 0.15 + "#c:storage_blocks/fluorite": 0.5, + "#c:gems/fluorite": 0.15 }, "model": "mekanism:fluorite", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/lead.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/lead.json index f833c94f..bf707764 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/lead.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/lead.json @@ -9,11 +9,11 @@ }, "group": "golems:lead", "blocks": { - "all": "#forge:storage_blocks/lead" + "all": "#c:storage_blocks/lead" }, "repair_items": { - "#forge:storage_blocks/lead": 0.5, - "#forge:ingots/lead": 0.15 + "#c:storage_blocks/lead": 0.5, + "#c:ingots/lead": 0.15 }, "model": "mekanism:lead", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/osmium.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/osmium.json index 41e093d9..6eadab3d 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/osmium.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/osmium.json @@ -8,11 +8,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/osmium" + "all": "#c:storage_blocks/osmium" }, "repair_items": { - "#forge:storage_blocks/osmium": 0.5, - "#forge:ingots/osmium": 0.15 + "#c:storage_blocks/osmium": 0.5, + "#c:ingots/osmium": 0.15 }, "model": "mekanism:osmium", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_lead.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_lead.json index f5efbe19..822e2174 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_lead.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_lead.json @@ -8,12 +8,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_lead" + "all": "#c:storage_blocks/raw_lead" }, "repair_items": { - "#forge:storage_blocks/raw_lead": 0.5, - "#forge:ingots/lead": 0.25, - "#forge:raw_materials/lead": 0.15 + "#c:storage_blocks/raw_lead": 0.5, + "#c:ingots/lead": 0.25, + "#c:raw_materials/lead": 0.15 }, "model": "mekanism:raw_lead", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_osmium.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_osmium.json index 80ebdd5f..713efbc1 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_osmium.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_osmium.json @@ -8,12 +8,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_osmium" + "all": "#c:storage_blocks/raw_osmium" }, "repair_items": { - "#forge:storage_blocks/raw_osmium": 0.5, - "#forge:ingots/osmium": 0.25, - "#forge:raw_materials/osmium": 0.15 + "#c:storage_blocks/raw_osmium": 0.5, + "#c:ingots/osmium": 0.25, + "#c:raw_materials/osmium": 0.15 }, "model": "mekanism:raw_osmium", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_tin.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_tin.json index c4aabd31..d61fc422 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_tin.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_tin.json @@ -7,12 +7,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_tin" + "all": "#c:storage_blocks/raw_tin" }, "repair_items": { - "#forge:storage_blocks/raw_tin": 0.5, - "#forge:ingots/tin": 0.25, - "#forge:raw_materials/tin": 0.15 + "#c:storage_blocks/raw_tin": 0.5, + "#c:ingots/tin": 0.25, + "#c:raw_materials/tin": 0.15 }, "model": "mekanism:raw_tin", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_uranium.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_uranium.json index 44f3480d..a680ab2a 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_uranium.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/raw_uranium.json @@ -10,12 +10,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_uranium" + "all": "#c:storage_blocks/raw_uranium" }, "repair_items": { - "#forge:storage_blocks/raw_uranium": 0.5, - "#forge:ingots/uranium": 0.25, - "#forge:raw_materials/uranium": 0.15 + "#c:storage_blocks/raw_uranium": 0.5, + "#c:ingots/uranium": 0.25, + "#c:raw_materials/uranium": 0.15 }, "model": "mekanism:raw_uranium", "brain": { diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/refined_glowstone.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/refined_glowstone.json index 387d06ac..510280ad 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/refined_glowstone.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/refined_glowstone.json @@ -9,11 +9,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/refined_glowstone" + "all": "#c:storage_blocks/refined_glowstone" }, "repair_items": { - "#forge:storage_blocks/refined_glowstone": 0.5, - "#forge:ingots/refined_glowstone": 0.15 + "#c:storage_blocks/refined_glowstone": 0.5, + "#c:ingots/refined_glowstone": 0.15 }, "model": "mekanism:refined_glowstone", "brain": { diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/refined_obsidian.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/refined_obsidian.json index e4ca2cfb..cb032f1c 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/refined_obsidian.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/refined_obsidian.json @@ -14,13 +14,13 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/refined_obsidian" + "all": "#c:storage_blocks/refined_obsidian" }, "repair_items": { "minecraft:obsidian": 0.15, "minecraft:crying_obsidian": 0.1, - "#forge:storage_blocks/refined_obsidian": 0.5, - "#forge:ingots/refined_obsidian": 0.15 + "#c:storage_blocks/refined_obsidian": 0.5, + "#c:ingots/refined_obsidian": 0.15 }, "model": "mekanism:refined_obsidian", "brain": { diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/salt.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/salt.json index e84d2a48..a042470a 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/salt.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/salt.json @@ -11,7 +11,7 @@ }, "repair_items": { "mekanism:block_salt": 0.5, - "#forge:dusts/salt": 0.15 + "#c:dusts/salt": 0.15 }, "model": "mekanism:salt", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/steel.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/steel.json index 1f900c33..7909a627 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/steel.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/steel.json @@ -7,11 +7,11 @@ }, "group": "golems:steel", "blocks": { - "all": "#forge:storage_blocks/steel" + "all": "#c:storage_blocks/steel" }, "repair_items": { - "#forge:storage_blocks/steel": 0.5, - "#forge:ingots/steel": 0.15 + "#c:storage_blocks/steel": 0.5, + "#c:ingots/steel": 0.15 }, "model": "mekanism:steel", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/tin.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/tin.json index 3c896723..dc618c72 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/tin.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/tin.json @@ -7,11 +7,11 @@ }, "group": "golems:tin", "blocks": { - "all": "#forge:storage_blocks/tin" + "all": "#c:storage_blocks/tin" }, "repair_items": { - "#forge:storage_blocks/tin": 0.5, - "#forge:ingots/tin": 0.15 + "#c:storage_blocks/tin": 0.5, + "#c:ingots/tin": 0.15 }, "model": "mekanism:tin", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/uranium.json b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/uranium.json index 6e460dd5..7ce69bcb 100644 --- a/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/uranium.json +++ b/src/main/resources/golems_addon_mekanism/data/mekanism/golems/golem/uranium.json @@ -10,11 +10,11 @@ }, "group": "golems:ore", "blocks": { - "all": "#forge:storage_blocks/uranium" + "all": "#c:storage_blocks/uranium" }, "repair_items": { - "#forge:storage_blocks/uranium": 0.5, - "#forge:ingots/uranium": 0.25 + "#c:storage_blocks/uranium": 0.5, + "#c:ingots/uranium": 0.25 }, "model": "mekanism:uranium", "brain": { diff --git a/src/main/resources/golems_addon_quark/data/golems/golems/golem/charcoal.json b/src/main/resources/golems_addon_quark/data/golems/golems/golem/charcoal.json index 2782576b..0b1831bf 100644 --- a/src/main/resources/golems_addon_quark/data/golems/golems/golem/charcoal.json +++ b/src/main/resources/golems_addon_quark/data/golems/golems/golem/charcoal.json @@ -2,7 +2,7 @@ "parent": "golems:coal", "group": "golems:coal", "blocks": { - "all": "#forge:storage_blocks/charcoal" + "all": "#c:storage_blocks/charcoal" }, "model": "golems:charcoal" } diff --git a/src/main/resources/golems_addon_quark/data/quark/golems/golem/blaze_lantern.json b/src/main/resources/golems_addon_quark/data/quark/golems/golem/blaze_lantern.json index 73bd0149..fac9b397 100644 --- a/src/main/resources/golems_addon_quark/data/quark/golems/golem/blaze_lantern.json +++ b/src/main/resources/golems_addon_quark/data/quark/golems/golem/blaze_lantern.json @@ -18,8 +18,8 @@ }, "repair_items": { "quark:blaze_lantern": 0.5, - "#forge:dusts/blaze_powder": 0.1, - "#forge:rods/blaze": 0.25 + "#c:dusts/blaze_powder": 0.1, + "#c:rods/blaze": 0.25 }, "model": "quark:blaze_lantern", "brain": { diff --git a/src/main/resources/golems_addon_quark/data/quark/golems/golem/framed_glass.json b/src/main/resources/golems_addon_quark/data/quark/golems/golem/framed_glass.json index 61d10986..5da30d9b 100644 --- a/src/main/resources/golems_addon_quark/data/quark/golems/golem/framed_glass.json +++ b/src/main/resources/golems_addon_quark/data/quark/golems/golem/framed_glass.json @@ -13,9 +13,9 @@ "repair_items": { "#quark:framed_glass": 0.5, "#quark:framed_glass_panes": 0.15, - "#forge:glass": 0.35, - "#forge:glass_panes": 0.1, - "#forge:ingots/iron": 0.05 + "#c:glass_blocks": 0.35, + "#c:glass_panes": 0.1, + "#c:ingots/iron": 0.05 }, "model": "quark:framed_glass" } diff --git a/src/main/resources/golems_addon_quark/data/quark/golems/golem/thatch.json b/src/main/resources/golems_addon_quark/data/quark/golems/golem/thatch.json index 115412c2..54119deb 100644 --- a/src/main/resources/golems_addon_quark/data/quark/golems/golem/thatch.json +++ b/src/main/resources/golems_addon_quark/data/quark/golems/golem/thatch.json @@ -13,7 +13,7 @@ "repair_items": { "quark:thatch": 0.5, "minecraft:hay_block": 0.4, - "#forge:crops/wheat": 0.1 + "#c:crops/wheat": 0.1 }, "model": "quark:thatch", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/golems/golems/golem/charcoal.json b/src/main/resources/golems_addon_thermal/data/golems/golems/golem/charcoal.json index 2782576b..0b1831bf 100644 --- a/src/main/resources/golems_addon_thermal/data/golems/golems/golem/charcoal.json +++ b/src/main/resources/golems_addon_thermal/data/golems/golems/golem/charcoal.json @@ -2,7 +2,7 @@ "parent": "golems:coal", "group": "golems:coal", "blocks": { - "all": "#forge:storage_blocks/charcoal" + "all": "#c:storage_blocks/charcoal" }, "model": "golems:charcoal" } diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/apatite.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/apatite.json index 333025c4..87c41b4a 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/apatite.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/apatite.json @@ -6,11 +6,11 @@ "sound": "minecraft:glass" }, "blocks": { - "all": "#forge:storage_blocks/apatite" + "all": "#c:storage_blocks/apatite" }, "repair_items": { - "#forge:storage_blocks/apatite": 0.5, - "#forge:gems/apatite": 0.15 + "#c:storage_blocks/apatite": 0.5, + "#c:gems/apatite": 0.15 }, "model": "thermal:apatite", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/bitumen.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/bitumen.json index 431b901e..5d946944 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/bitumen.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/bitumen.json @@ -4,11 +4,11 @@ "attack": 5.6 }, "blocks": { - "all": "#forge:storage_blocks/bitumen" + "all": "#c:storage_blocks/bitumen" }, "repair_items": { - "#forge:storage_blocks/bitumen": 0.5, - "#forge:bitumen": 0.15 + "#c:storage_blocks/bitumen": 0.5, + "#c:bitumen": 0.15 }, "model": "thermal:bitumen", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/bronze.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/bronze.json index ad5d3d9e..e95246ab 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/bronze.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/bronze.json @@ -7,11 +7,11 @@ }, "group": "golems:bronze", "blocks": { - "all": "#forge:storage_blocks/bronze" + "all": "#c:storage_blocks/bronze" }, "repair_items": { - "#forge:storage_blocks/bronze": 0.5, - "#forge:ingots/bronze": 0.15 + "#c:storage_blocks/bronze": 0.5, + "#c:ingots/bronze": 0.15 }, "model": "thermal:bronze", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/cinnabar.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/cinnabar.json index 78100397..6ff9fc31 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/cinnabar.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/cinnabar.json @@ -6,11 +6,11 @@ "sound": "minecraft:glass" }, "blocks": { - "all": "#forge:storage_blocks/cinnabar" + "all": "#c:storage_blocks/cinnabar" }, "repair_items": { - "#forge:storage_blocks/cinnabar": 0.5, - "#forge:gems/cinnabar": 0.15 + "#c:storage_blocks/cinnabar": 0.5, + "#c:gems/cinnabar": 0.15 }, "model": "thermal:cinnabar", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/coal_coke.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/coal_coke.json index 5576218a..abe38880 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/coal_coke.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/coal_coke.json @@ -2,7 +2,7 @@ "parent": "golems:coal", "group": "golems:coal", "blocks": { - "all": "#forge:storage_blocks/coal_coke" + "all": "#c:storage_blocks/coal_coke" }, "model": "thermal:coal_coke" } diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/constantan.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/constantan.json index 3ea4c6c7..2383ac5b 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/constantan.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/constantan.json @@ -6,11 +6,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/constantan" + "all": "#c:storage_blocks/constantan" }, "repair_items": { - "#forge:storage_blocks/constantan": 0.5, - "#forge:ingots/constantan": 0.15 + "#c:storage_blocks/constantan": 0.5, + "#c:ingots/constantan": 0.15 }, "model": "thermal:constantan", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/disruption_explosive.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/disruption_explosive.json index d0432cf5..b9a711db 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/disruption_explosive.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/disruption_explosive.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:ender_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:disruption_explosive", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/electrum.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/electrum.json index cbee729d..d53b0650 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/electrum.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/electrum.json @@ -7,11 +7,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/electrum" + "all": "#c:storage_blocks/electrum" }, "repair_items": { - "#forge:storage_blocks/electrum": 0.5, - "#forge:ingots/electrum": 0.15 + "#c:storage_blocks/electrum": 0.5, + "#c:ingots/electrum": 0.15 }, "model": "thermal:electrum", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/enderium.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/enderium.json index df32507f..38ab8e3a 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/enderium.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/enderium.json @@ -6,11 +6,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/enderium" + "all": "#c:storage_blocks/enderium" }, "repair_items": { - "#forge:storage_blocks/enderium": 0.5, - "#forge:ingots/enderium": 0.15 + "#c:storage_blocks/enderium": 0.5, + "#c:ingots/enderium": 0.15 }, "model": "thermal:enderium", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/enderium_glass.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/enderium_glass.json index 23654d38..c45893c6 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/enderium_glass.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/enderium_glass.json @@ -15,7 +15,7 @@ }, "repair_items": { "thermal:enderium_glass": 0.5, - "#forge:glass": 0.15 + "#c:glass_blocks": 0.15 }, "model": "thermal:enderium_glass", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/fulminating_explosive.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/fulminating_explosive.json index dd382aa3..0f032e5d 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/fulminating_explosive.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/fulminating_explosive.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:lightning_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:fulminating_explosive", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/generic_rockwool.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/generic_rockwool.json index 56325dfc..6fa5f7c0 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/generic_rockwool.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/generic_rockwool.json @@ -14,7 +14,7 @@ "hidden": true, "repair_items": { "#thermal:rockwool": 0.5, - "#forge:slag": 0.15 + "#c:slag": 0.15 }, "brain": "golems:empty" } diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/glacial_explosive.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/glacial_explosive.json index b5f3f3dd..a4b1985d 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/glacial_explosive.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/glacial_explosive.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:ice_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:glacial_explosive", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/gunpowder.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/gunpowder.json index 3c0aa01f..9f2204ae 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/gunpowder.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/gunpowder.json @@ -6,11 +6,11 @@ "swim_ability": "float" }, "blocks": { - "all": "#forge:storage_blocks/gunpowder" + "all": "#c:storage_blocks/gunpowder" }, "repair_items": { - "#forge:storage_blocks/gunpowder": 0.5, - "#forge:gunpowder": 0.15 + "#c:storage_blocks/gunpowder": 0.5, + "#c:gunpowder": 0.15 }, "model": "thermal:gunpowder", "brain": "golems:tnt" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/hardened_glass.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/hardened_glass.json index 30fcf455..e4fb3133 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/hardened_glass.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/hardened_glass.json @@ -10,7 +10,7 @@ }, "repair_items": { "thermal:obsidian_glass": 0.5, - "#forge:glass": 0.15 + "#c:glass_blocks": 0.15 }, "model": "thermal:hardened_glass", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/inferno_explosive.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/inferno_explosive.json index 0fbfcf16..0b8dd458 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/inferno_explosive.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/inferno_explosive.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:fire_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:inferno_explosive", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/invar.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/invar.json index 5e561f18..3adf460d 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/invar.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/invar.json @@ -6,11 +6,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/invar" + "all": "#c:storage_blocks/invar" }, "repair_items": { - "#forge:storage_blocks/invar": 0.5, - "#forge:ingots/invar": 0.15 + "#c:storage_blocks/invar": 0.5, + "#c:ingots/invar": 0.15 }, "model": "thermal:invar", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lead.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lead.json index 32e0c221..e539e6f0 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lead.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lead.json @@ -9,11 +9,11 @@ }, "group": "golems:lead", "blocks": { - "all": "#forge:storage_blocks/lead" + "all": "#c:storage_blocks/lead" }, "repair_items": { - "#forge:storage_blocks/lead": 0.5, - "#forge:ingots/lead": 0.15 + "#c:storage_blocks/lead": 0.5, + "#c:ingots/lead": 0.15 }, "model": "thermal:lead", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lumium.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lumium.json index b12b090f..5427ca6c 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lumium.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lumium.json @@ -6,11 +6,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/lumium" + "all": "#c:storage_blocks/lumium" }, "repair_items": { - "#forge:storage_blocks/lumium": 0.5, - "#forge:ingots/lumium": 0.15 + "#c:storage_blocks/lumium": 0.5, + "#c:ingots/lumium": 0.15 }, "model": "thermal:lumium", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lumium_glass.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lumium_glass.json index d7d3836c..45aef3bb 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lumium_glass.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/lumium_glass.json @@ -13,7 +13,7 @@ }, "repair_items": { "thermal:lumium_glass": 0.5, - "#forge:glass": 0.15 + "#c:glass_blocks": 0.15 }, "model": "thermal:lumium_glass", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/nickel.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/nickel.json index 03767490..e3836a07 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/nickel.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/nickel.json @@ -6,11 +6,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/nickel" + "all": "#c:storage_blocks/nickel" }, "repair_items": { - "#forge:storage_blocks/nickel": 0.5, - "#forge:ingots/nickel": 0.15 + "#c:storage_blocks/nickel": 0.5, + "#c:ingots/nickel": 0.15 }, "model": "thermal:nickel", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/niter.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/niter.json index 953eb146..a1ab9f8a 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/niter.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/niter.json @@ -5,11 +5,11 @@ "knockback_resistance": 0.8 }, "blocks": { - "all": "#forge:storage_blocks/niter" + "all": "#c:storage_blocks/niter" }, "repair_items": { - "#forge:storage_blocks/niter": 0.5, - "#forge:gems/niter": 0.15 + "#c:storage_blocks/niter": 0.5, + "#c:gems/niter": 0.15 }, "model": "thermal:niter", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/nuclear_explosive.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/nuclear_explosive.json index 7e45b7e2..361fa6a9 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/nuclear_explosive.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/nuclear_explosive.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:nuke_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:nuclear_explosive", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/pnt.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/pnt.json index e7239757..ab0065a1 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/pnt.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/pnt.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:phyto_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:pnt", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/radiant_explosive.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/radiant_explosive.json index 8f8a6d12..1bac1a44 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/radiant_explosive.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/radiant_explosive.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:glowstone_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:radiant_explosive", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_lead.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_lead.json index b3f8e4ca..ac379c8c 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_lead.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_lead.json @@ -8,12 +8,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_lead" + "all": "#c:storage_blocks/raw_lead" }, "repair_items": { - "#forge:storage_blocks/raw_lead": 0.5, - "#forge:ingots/lead": 0.25, - "#forge:raw_materials/lead": 0.15 + "#c:storage_blocks/raw_lead": 0.5, + "#c:ingots/lead": 0.25, + "#c:raw_materials/lead": 0.15 }, "model": "thermal:raw_lead", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_nickel.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_nickel.json index e567e5ac..ad302f35 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_nickel.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_nickel.json @@ -7,12 +7,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_nickel" + "all": "#c:storage_blocks/raw_nickel" }, "repair_items": { - "#forge:storage_blocks/raw_nickel": 0.5, - "#forge:ingots/nickel": 0.25, - "#forge:raw_materials/nickel": 0.15 + "#c:storage_blocks/raw_nickel": 0.5, + "#c:ingots/nickel": 0.25, + "#c:raw_materials/nickel": 0.15 }, "model": "thermal:raw_nickel", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_silver.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_silver.json index 188aa36d..c03d0389 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_silver.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_silver.json @@ -10,12 +10,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_silver" + "all": "#c:storage_blocks/raw_silver" }, "repair_items": { - "#forge:storage_blocks/raw_silver": 0.5, - "#forge:ingots/silver": 0.25, - "#forge:raw_materials/silver": 0.15 + "#c:storage_blocks/raw_silver": 0.5, + "#c:ingots/silver": 0.25, + "#c:raw_materials/silver": 0.15 }, "model": "thermal:raw_silver", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_tin.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_tin.json index 3110818c..4f87e4fc 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_tin.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/raw_tin.json @@ -7,12 +7,12 @@ }, "group": "golems:raw_ore", "blocks": { - "all": "#forge:storage_blocks/raw_tin" + "all": "#c:storage_blocks/raw_tin" }, "repair_items": { - "#forge:storage_blocks/raw_tin": 0.5, - "#forge:ingots/tin": 0.25, - "#forge:raw_materials/tin": 0.15 + "#c:storage_blocks/raw_tin": 0.5, + "#c:ingots/tin": 0.25, + "#c:raw_materials/tin": 0.15 }, "model": "thermal:raw_tin", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/redstone_explosive.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/redstone_explosive.json index 5c0e556d..f3625f8e 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/redstone_explosive.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/redstone_explosive.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:redstone_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:redstone_explosive", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/ruby.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/ruby.json index 215e958a..f80c0989 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/ruby.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/ruby.json @@ -8,11 +8,11 @@ "sound": "minecraft:glass" }, "blocks": { - "all": "#forge:storage_blocks/ruby" + "all": "#c:storage_blocks/ruby" }, "repair_items": { - "#forge:storage_blocks/ruby": 0.5, - "#forge:gems/ruby": 0.15 + "#c:storage_blocks/ruby": 0.5, + "#c:gems/ruby": 0.15 }, "model": "thermal:ruby", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/sapphire.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/sapphire.json index 542f0233..fabcaebc 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/sapphire.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/sapphire.json @@ -8,11 +8,11 @@ "sound": "minecraft:glass" }, "blocks": { - "all": "#forge:storage_blocks/sapphire" + "all": "#c:storage_blocks/sapphire" }, "repair_items": { - "#forge:storage_blocks/sapphire": 0.5, - "#forge:gems/sapphire": 0.15 + "#c:storage_blocks/sapphire": 0.5, + "#c:gems/sapphire": 0.15 }, "model": "thermal:sapphire", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/signalum.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/signalum.json index 75cddc60..1ceede4e 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/signalum.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/signalum.json @@ -6,11 +6,11 @@ "sound": "minecraft:metal" }, "blocks": { - "all": "#forge:storage_blocks/signalum" + "all": "#c:storage_blocks/signalum" }, "repair_items": { - "#forge:storage_blocks/signalum": 0.5, - "#forge:ingots/signalum": 0.15 + "#c:storage_blocks/signalum": 0.5, + "#c:ingots/signalum": 0.15 }, "model": "thermal:signalum", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/signalum_glass.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/signalum_glass.json index 28d6e7b1..90ba7900 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/signalum_glass.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/signalum_glass.json @@ -15,7 +15,7 @@ }, "repair_items": { "thermal:signalum_glass": 0.5, - "#forge:glass": 0.15 + "#c:glass_blocks": 0.15 }, "model": "thermal:signalum_glass", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/silver.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/silver.json index f9a1fc79..b23ea6a3 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/silver.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/silver.json @@ -10,11 +10,11 @@ }, "group": "golems:silver", "blocks": { - "all": "#forge:storage_blocks/silver" + "all": "#c:storage_blocks/silver" }, "repair_items": { - "#forge:storage_blocks/silver": 0.5, - "#forge:ingots/silver": 0.15 + "#c:storage_blocks/silver": 0.5, + "#c:ingots/silver": 0.15 }, "model": "thermal:silver", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/slag.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/slag.json index 87f3886e..6f869412 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/slag.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/slag.json @@ -7,11 +7,11 @@ }, "group": "thermal:slag", "blocks": { - "all": "#forge:storage_blocks/slag" + "all": "#c:storage_blocks/slag" }, "repair_items": { - "#forge:storage_blocks/slag": 0.5, - "#forge:slag": 0.15 + "#c:storage_blocks/slag": 0.5, + "#c:slag": 0.15 }, "model": "thermal:slag", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/slime_explosive.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/slime_explosive.json index 46f775f9..a689dde9 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/slime_explosive.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/slime_explosive.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:fire_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:slime_explosive", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/sulfur.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/sulfur.json index 5c9f008a..f900dc6b 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/sulfur.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/sulfur.json @@ -5,11 +5,11 @@ "knockback_resistance": 0.8 }, "blocks": { - "all": "#forge:storage_blocks/sulfur" + "all": "#c:storage_blocks/sulfur" }, "repair_items": { - "#forge:storage_blocks/sulfur": 0.5, - "#forge:gems/sulfur": 0.15 + "#c:storage_blocks/sulfur": 0.5, + "#c:gems/sulfur": 0.15 }, "model": "thermal:sulfur", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tar.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tar.json index c8f75199..bc7ed4f4 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tar.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tar.json @@ -5,11 +5,11 @@ "speed": 0.19 }, "blocks": { - "all": "#forge:storage_blocks/tar" + "all": "#c:storage_blocks/tar" }, "repair_items": { - "#forge:storage_blocks/tar": 0.5, - "#forge:tar": 0.15 + "#c:storage_blocks/tar": 0.5, + "#c:tar": 0.15 }, "model": "thermal:tar", "brain": "golems:empty" diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tectonic_explosive.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tectonic_explosive.json index 3a6f7998..c7e5b89f 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tectonic_explosive.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tectonic_explosive.json @@ -6,7 +6,7 @@ }, "repair_items": { "thermal:earth_tnt": 0.5, - "#forge:gunpowder": 0.15 + "#c:gunpowder": 0.15 }, "model": "thermal:tectonic_explosive", "brain": { diff --git a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tin.json b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tin.json index 014cebc9..a8155121 100644 --- a/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tin.json +++ b/src/main/resources/golems_addon_thermal/data/thermal/golems/golem/tin.json @@ -7,11 +7,11 @@ }, "group": "golems:tin", "blocks": { - "all": "#forge:storage_blocks/tin" + "all": "#c:storage_blocks/tin" }, "repair_items": { - "#forge:storage_blocks/tin": 0.5, - "#forge:ingots/tin": 0.15 + "#c:storage_blocks/tin": 0.5, + "#c:ingots/tin": 0.15 }, "model": "thermal:tin", "brain": "golems:empty" diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index d9f7c5f5..18b6fba9 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,6 +1,10 @@ { "pack": { - "pack_format": 15, - "description": "Extra Golems" + "pack_format": 34, + "description": "Extra Golems", + "supported_formats": { + "min_inclusive": 34, + "max_inclusive": 48 + } } } diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml new file mode 100644 index 00000000..e60ab0c0 --- /dev/null +++ b/src/main/templates/META-INF/neoforge.mods.toml @@ -0,0 +1,84 @@ +# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml +modLoader="javafml" + +# A version range to match for said mod loader - for regular FML @Mod it will be the FML version. +loaderVersion="${loader_version_range}" + +# The license for your mod. +license="${mod_license}" + +# A URL to refer people to when problems occur with this mod +issueTrackerURL="https://github.com/MinecraftModDevelopmentMods/Extra-Golems/issues" + +# A list of mods - how many allowed here is determined by the individual mod loader +[[mods]] + # The modid of the mod + modId="${mod_id}" + + # The version number of the mod + version="${mod_version}" + + # A display name for the mod + displayName="${mod_name}" + + # A file name (in the root of the mod JAR) containing a logo for display + logoFile="golem_logo.png" + + # A text field displayed in the mod UI + credits="TheGlitch76, jriwanek, AtelierAmber, and translators - Thanks!" + + # A text field displayed in the mod UI + authors="${mod_authors}" + + # The description text for the mod (multi line!) + description='''${mod_description}''' + +# A dependency - use the . to indicate dependency for a specific modid. +[[dependencies.${mod_id}]] + modId="neoforge" + type="required" + versionRange="[${neo_version},)" + ordering="NONE" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="minecraft" + type="required" + versionRange="${minecraft_version_range}" + ordering="NONE" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="theoneprobe" + type="optional" + versionRange="[1.21_neo-12.0.0,)" + ordering="NONE" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="jade" + type="optional" + versionRange="[15.0.0,)" + ordering="NONE" + side="CLIENT" + +[[dependencies.${mod_id}]] + modId="quark" + type="optional" + versionRange="[4.0-433,)" + ordering="NONE" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="biomesoplenty" + type="optional" + versionRange="[1.21.1-21.0.0.0,)" + ordering="NONE" + side="BOTH" + +[[dependencies.${mod_id}]] + modId="thermal" + type="optional" + versionRange="[11.0.0,)" + ordering="NONE" + side="BOTH"