Skip to content

Commit

Permalink
Migrate mithridantism to JSON
Browse files Browse the repository at this point in the history
Done via a generic module for granting effect immunity, so you can now make a modifier to make the player immune to any effect you wish easily
  • Loading branch information
KnightMiner committed May 5, 2024
1 parent b498ddc commit 587465c
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 37 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"type": "tconstruct:composable",
"level_display": "tconstruct:no_levels",
"modules": [
{
"type": "tconstruct:effect_immunity",
"effect": "minecraft:poison"
}
],
"tooltip_display": "always"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package slimeknights.tconstruct.library.modifiers.modules.armor;

import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
import net.minecraft.world.effect.MobEffect;
import slimeknights.mantle.data.loadable.Loadables;
import slimeknights.mantle.data.loadable.record.RecordLoadable;
import slimeknights.tconstruct.TConstruct;
import slimeknights.tconstruct.common.TinkerTags;
import slimeknights.tconstruct.library.modifiers.ModifierEntry;
import slimeknights.tconstruct.library.modifiers.ModifierHooks;
import slimeknights.tconstruct.library.modifiers.hook.armor.EquipmentChangeModifierHook;
import slimeknights.tconstruct.library.modifiers.modules.ModifierModule;
import slimeknights.tconstruct.library.modifiers.modules.technical.ArmorLevelModule;
import slimeknights.tconstruct.library.modifiers.modules.util.ModifierCondition;
import slimeknights.tconstruct.library.modifiers.modules.util.ModifierCondition.ConditionalModule;
import slimeknights.tconstruct.library.module.HookProvider;
import slimeknights.tconstruct.library.module.ModuleHook;
import slimeknights.tconstruct.library.tools.capability.TinkerDataCapability.ComputableDataKey;
import slimeknights.tconstruct.library.tools.context.EquipmentChangeContext;
import slimeknights.tconstruct.library.tools.nbt.IToolStackView;

import java.util.List;

/**
* Module for armor modifiers that makes the wearer immune to a mob effect
*/
public record EffectImmunityModule(MobEffect effect, ModifierCondition<IToolStackView> condition) implements ModifierModule, EquipmentChangeModifierHook, ConditionalModule<IToolStackView> {
private static final List<ModuleHook<?>> DEFAULT_HOOKS = HookProvider.<MobDisguiseModule>defaultHooks(ModifierHooks.EQUIPMENT_CHANGE);
public static final ComputableDataKey<Multiset<MobEffect>> EFFECT_IMMUNITY = TConstruct.createKey("effect_immunity", HashMultiset::create);
public static final RecordLoadable<EffectImmunityModule> LOADER = RecordLoadable.create(
Loadables.MOB_EFFECT.requiredField("effect", EffectImmunityModule::effect),
ModifierCondition.TOOL_FIELD,
EffectImmunityModule::new);

public EffectImmunityModule(MobEffect effect) {
this(effect, ModifierCondition.ANY_TOOL);
}

@Override
public RecordLoadable<EffectImmunityModule> getLoader() {
return LOADER;
}

@Override
public List<ModuleHook<?>> getDefaultHooks() {
return DEFAULT_HOOKS;
}

@Override
public void onEquip(IToolStackView tool, ModifierEntry modifier, EquipmentChangeContext context) {
if (!tool.isBroken() && ArmorLevelModule.validSlot(tool, context.getChangedSlot(), TinkerTags.Items.HELD_ARMOR) && condition.matches(tool, modifier)) {
context.getTinkerData().ifPresent(data -> data.computeIfAbsent(EFFECT_IMMUNITY).add(effect));
}
}

@Override
public void onUnequip(IToolStackView tool, ModifierEntry modifier, EquipmentChangeContext context) {
if (!tool.isBroken() && ArmorLevelModule.validSlot(tool, context.getChangedSlot(), TinkerTags.Items.HELD_ARMOR) && condition.matches(tool, modifier)) {
context.getTinkerData().ifPresent(data -> {
Multiset<MobEffect> effects = data.get(EFFECT_IMMUNITY);
if (effects != null) {
effects.remove(effect);
}
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
import slimeknights.tconstruct.library.modifiers.modules.ModifierModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.BlockDamageSourceModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.CoverGroundWalkerModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.EffectImmunityModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.MobDisguiseModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.ProtectionModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.ReplaceBlockWalkerModule;
Expand Down Expand Up @@ -223,7 +224,6 @@
import slimeknights.tconstruct.tools.modifiers.traits.skull.FirebreathModifier;
import slimeknights.tconstruct.tools.modifiers.traits.skull.FrosttouchModifier;
import slimeknights.tconstruct.tools.modifiers.traits.skull.GoldGuardModifier;
import slimeknights.tconstruct.tools.modifiers.traits.skull.MithridatismModifier;
import slimeknights.tconstruct.tools.modifiers.traits.skull.PlagueModifier;
import slimeknights.tconstruct.tools.modifiers.traits.skull.RevengeModifier;
import slimeknights.tconstruct.tools.modifiers.traits.skull.SelfDestructiveModifier;
Expand Down Expand Up @@ -465,7 +465,6 @@ public TinkerModifiers() {
public static final StaticModifier<FrosttouchModifier> frosttouch = MODIFIERS.register("frosttouch", FrosttouchModifier::new);
public static final StaticModifier<WitheredModifier> withered = MODIFIERS.register("withered", WitheredModifier::new);
public static final StaticModifier<BoonOfSssssModifier> boonOfSssss = MODIFIERS.register("boon_of_sssss", BoonOfSssssModifier::new);
public static final StaticModifier<MithridatismModifier> mithridatism = MODIFIERS.register("mithridatism", MithridatismModifier::new);
public static final StaticModifier<WildfireModifier> wildfire = MODIFIERS.register("wildfire", WildfireModifier::new);
public static final StaticModifier<PlagueModifier> plague = MODIFIERS.register("plague", PlagueModifier::new);
public static final StaticModifier<BreathtakingModifier> breathtaking = MODIFIERS.register("breathtaking", BreathtakingModifier::new);
Expand Down Expand Up @@ -585,6 +584,7 @@ void registerSerializers(RegisterEvent event) {

// modifier modules //
// armor
ModifierModule.LOADER.register(getResource("effect_immunity"), EffectImmunityModule.LOADER);
ModifierModule.LOADER.register(getResource("mob_disguise"), MobDisguiseModule.LOADER);
ModifierModule.LOADER.register(getResource("block_damage"), BlockDamageSourceModule.LOADER);
ModifierModule.LOADER.register(getResource("cover_ground"), CoverGroundWalkerModule.LOADER);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,9 @@ public class ModifierIds {
public static final ModifierId kinetic = id("kinetic");
public static final ModifierId flameBarrier = id("flame_barrier");

// traits - slimeskull
public static final ModifierId mithridatism = id("mithridatism");

// unused for now, will be reassigned later
public static final ModifierId raging = id("raging");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
import slimeknights.tconstruct.library.modifiers.impl.BasicModifier.TooltipDisplay;
import slimeknights.tconstruct.library.modifiers.modules.armor.BlockDamageSourceModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.CoverGroundWalkerModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.EffectImmunityModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.MobDisguiseModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.ProtectionModule;
import slimeknights.tconstruct.library.modifiers.modules.armor.ReplaceBlockWalkerModule;
Expand Down Expand Up @@ -538,6 +539,9 @@ protected void addModifiers() {
buildModifier(ModifierIds.recurrentProtection).addModule(new RecurrentProtectionModule(LevelingValue.eachLevel(1.25f)));
buildModifier(ModifierIds.flameBarrier).addModule(new FlameBarrierModule(LevelingValue.eachLevel(1.875f)));

// traits - slimeskull
buildModifier(ModifierIds.mithridatism).addModule(new EffectImmunityModule(MobEffects.POISON)).levelDisplay(ModifierLevelDisplay.NO_LEVELS);

// mob disguise
buildModifier(ModifierIds.creeperDisguise ).addModule(new MobDisguiseModule(EntityType.CREEPER));
buildModifier(ModifierIds.endermanDisguise ).addModule(new MobDisguiseModule(EntityType.ENDERMAN));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ protected void addMaterialTraits() {
addTraits(MaterialIds.venombone, SkullStats.ID, TinkerModifiers.frosttouch.getId(), ModifierIds.strayDisguise);
addTraits(MaterialIds.necroticBone, SkullStats.ID, TinkerModifiers.withered.getId(), ModifierIds.witherSkeletonDisguise);
addTraits(MaterialIds.string, SkullStats.ID, TinkerModifiers.boonOfSssss.getId(), ModifierIds.spiderDisguise);
addTraits(MaterialIds.darkthread, SkullStats.ID, TinkerModifiers.mithridatism.getId(), ModifierIds.caveSpiderDisguise);
addTraits(MaterialIds.darkthread, SkullStats.ID, ModifierIds.mithridatism, ModifierIds.caveSpiderDisguise);
addTraits(MaterialIds.rottenFlesh, SkullStats.ID, TinkerModifiers.wildfire.getId(), ModifierIds.zombieDisguise);
addTraits(MaterialIds.iron, SkullStats.ID, TinkerModifiers.plague.getId(), ModifierIds.huskDisguise);
addTraits(MaterialIds.copper, SkullStats.ID, TinkerModifiers.breathtaking.getId(), ModifierIds.drownedDisguise);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@
import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent;
import net.minecraftforge.event.entity.living.LivingFallEvent;
import net.minecraftforge.event.entity.living.LivingKnockBackEvent;
import net.minecraftforge.event.entity.living.MobEffectEvent;
import net.minecraftforge.eventbus.api.Event.Result;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
import slimeknights.tconstruct.TConstruct;
import slimeknights.tconstruct.library.modifiers.modules.armor.EffectImmunityModule;
import slimeknights.tconstruct.library.modifiers.modules.technical.ArmorStatModule;
import slimeknights.tconstruct.library.tools.capability.TinkerDataCapability;
import slimeknights.tconstruct.library.tools.capability.TinkerDataKeys;
Expand Down Expand Up @@ -51,4 +54,14 @@ public static void onLivingJump(LivingJumpEvent event) {
entity.setDeltaMovement(entity.getDeltaMovement().add(0, boost * 0.1, 0));
}
}

/** Prevents effects on the entity */
@SubscribeEvent
static void isPotionApplicable(MobEffectEvent.Applicable event) {
event.getEntity().getCapability(TinkerDataCapability.CAPABILITY).ifPresent(data -> {
if (data.computeIfAbsent(EffectImmunityModule.EFFECT_IMMUNITY).contains(event.getEffectInstance().getEffect())) {
event.setResult(Result.DENY);
}
});
}
}

This file was deleted.

0 comments on commit 587465c

Please sign in to comment.