diff --git a/src/main/resources/forge-1.20.1/potioneffect.definition.yaml b/src/main/resources/forge-1.20.1/potioneffect.definition.yaml index 3e78006..5f19553 100644 --- a/src/main/resources/forge-1.20.1/potioneffect.definition.yaml +++ b/src/main/resources/forge-1.20.1/potioneffect.definition.yaml @@ -10,4 +10,4 @@ localizationkeys: - key: effect.@modid.@registryname mapto: effectName -field_exclusions: [onMobHurt, onMobRemoved, onAddedSound, particle] \ No newline at end of file +field_exclusions: [particle] \ No newline at end of file diff --git a/src/main/resources/forge-1.20.1/templates/elementinits/potioneffects.java.ftl b/src/main/resources/forge-1.20.1/templates/elementinits/potioneffects.java.ftl index a0a2de5..461d642 100644 --- a/src/main/resources/forge-1.20.1/templates/elementinits/potioneffects.java.ftl +++ b/src/main/resources/forge-1.20.1/templates/elementinits/potioneffects.java.ftl @@ -29,14 +29,16 @@ --> <#-- @formatter:off --> - +<#include "../procedures.java.ftl"> /* * MCreator note: This file will be REGENERATED on each build. */ package ${package}.init; -public class ${JavaModName}MobEffects { +<#assign mobHurt = potioneffects?filter(effect -> hasProcedure(effect.onMobHurt))> +<#assign mobRemoved = potioneffects?filter(effect -> hasProcedure(effect.onMobRemoved))> +<#if mobHurt?size != 0 || mobRemoved?size != 0>@Mod.EventBusSubscriber public class ${JavaModName}MobEffects { public static final DeferredRegister REGISTRY = DeferredRegister.create(ForgeRegistries.MOB_EFFECTS, ${JavaModName}.MODID); @@ -44,6 +46,50 @@ public class ${JavaModName}MobEffects { public static final RegistryObject ${effect.getModElement().getRegistryNameUpper()} = REGISTRY.register("${effect.getModElement().getRegistryName()}", () -> new ${effect.getModElement().getName()}MobEffect()); -} + <#if mobHurt?size != 0> + @SubscribeEvent public static void onMobHurt(LivingHurtEvent event) { + <#compress> + LivingEntity entity = event.getEntity(); + <#list mobHurt as effect> + if (entity.hasEffect(${JavaModName}MobEffects.${effect.getModElement().getRegistryNameUpper()}.get())) { + <@procedureCode effect.onMobHurt, { + "x": "entity.getX()", + "y": "entity.getY()", + "z": "entity.getZ()", + "world": "entity.level()", + "entity": "entity", + "amplifier": "entity.getEffect(" + JavaModName + "MobEffects." + effect.getModElement().getRegistryNameUpper() + ".get()).getAmplifier()", + "damagesource": "event.getSource()", + "damage": "event.getAmount()" + }/> + }<#sep>else + + + } + + + <#if mobRemoved?size != 0> + @SubscribeEvent public static void onMobRemoved(LivingDeathEvent event) { + <#compress> + LivingEntity entity = event.getEntity(); + Entity.RemovalReason reason = entity.getRemovalReason(); + if (reason != null && reason == Entity.RemovalReason.KILLED) { + <#list mobRemoved as effect> + if (entity.hasEffect(${JavaModName}MobEffects.${effect.getModElement().getRegistryNameUpper()}.get())) { + <@procedureCode effect.onMobRemoved, { + "x": "entity.getX()", + "y": "entity.getY()", + "z": "entity.getZ()", + "world": "entity.level()", + "entity": "entity", + "amplifier": "entity.getEffect(" + JavaModName + "MobEffects." + effect.getModElement().getRegistryNameUpper() + ".get()).getAmplifier()" + }/> + }<#sep>else + + } + + } + +} <#-- @formatter:on --> \ No newline at end of file diff --git a/src/main/resources/forge-1.20.1/templates/potioneffect.java.ftl b/src/main/resources/forge-1.20.1/templates/potioneffect.java.ftl index 4fb652e..b852d04 100644 --- a/src/main/resources/forge-1.20.1/templates/potioneffect.java.ftl +++ b/src/main/resources/forge-1.20.1/templates/potioneffect.java.ftl @@ -63,29 +63,15 @@ public class ${name}MobEffect extends MobEffect { - <#if hasProcedure(data.onStarted)> + <#if hasProcedure(data.onStarted) || (data.onAddedSound?has_content && data.onAddedSound.getMappedValue()?has_content)> <#if data.isInstant> @Override public void applyInstantenousEffect(Entity source, Entity indirectSource, LivingEntity entity, int amplifier, double health) { - <@procedureCode data.onStarted, { - "x": "entity.getX()", - "y": "entity.getY()", - "z": "entity.getZ()", - "world": "entity.level()", - "entity": "entity", - "amplifier": "amplifier" - }/> + <@startedContext/> } <#else> @Override public void addAttributeModifiers(LivingEntity entity, AttributeMap attributeMap, int amplifier) { super.addAttributeModifiers(entity, attributeMap, amplifier); - <@procedureCode data.onStarted, { - "x": "entity.getX()", - "y": "entity.getY()", - "z": "entity.getZ()", - "world": "entity.level()", - "entity": "entity", - "amplifier": "amplifier" - }/> + <@startedContext/> } @@ -160,4 +146,20 @@ public class ${name}MobEffect extends MobEffect { <#else> <#return "MULTIPLY_TOTAL"> - \ No newline at end of file + + +<#macro startedContext> +<#if data.onAddedSound?has_content && data.onAddedSound.getMappedValue()?has_content> + entity.level().playSound(null, entity.getX(), entity.getY(), entity.getZ(), ForgeRegistries.SOUND_EVENTS.getValue(ResourceLocation.parse("${data.onAddedSound}")), entity.getSoundSource(), 1.0F, 1.0F); + +<#if hasProcedure(data.onStarted)> + <@procedureCode data.onStarted, { + "x": "entity.getX()", + "y": "entity.getY()", + "z": "entity.getZ()", + "world": "entity.level()", + "entity": "entity", + "amplifier": "amplifier" + }/> + + \ No newline at end of file