Skip to content
This repository was archived by the owner on Feb 16, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ localizationkeys:
- key: effect.@modid.@registryname
mapto: effectName

field_exclusions: [onMobHurt, onMobRemoved, onAddedSound, particle]
field_exclusions: [particle]
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,67 @@
-->

<#-- @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 </#if>public class ${JavaModName}MobEffects {

public static final DeferredRegister<MobEffect> REGISTRY = DeferredRegister.create(ForgeRegistries.MOB_EFFECTS, ${JavaModName}.MODID);

<#list potioneffects as effect>
public static final RegistryObject<MobEffect> ${effect.getModElement().getRegistryNameUpper()} =
REGISTRY.register("${effect.getModElement().getRegistryName()}", () -> new ${effect.getModElement().getName()}MobEffect());
</#list>
}

<#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
</#list>
</#compress>
}
</#if>

<#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
</#list>
}
</#compress>
}
</#if>
}
<#-- @formatter:on -->
38 changes: 20 additions & 18 deletions src/main/resources/forge-1.20.1/templates/potioneffect.java.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -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/>
}
</#if>
</#if>
Expand Down Expand Up @@ -160,4 +146,20 @@ public class ${name}MobEffect extends MobEffect {
<#else>
<#return "MULTIPLY_TOTAL">
</#if>
</#function>
</#function>

<#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>
<#if hasProcedure(data.onStarted)>
<@procedureCode data.onStarted, {
"x": "entity.getX()",
"y": "entity.getY()",
"z": "entity.getZ()",
"world": "entity.level()",
"entity": "entity",
"amplifier": "amplifier"
}/>
</#if>
</#macro>