Skip to content

Commit

Permalink
i was drunk when i wrote this but it does work now
Browse files Browse the repository at this point in the history
  • Loading branch information
ryleu committed Sep 30, 2024
1 parent 33acf0e commit 1005721
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 20 deletions.
37 changes: 20 additions & 17 deletions src/main/java/me/ryleu/armornerf/ArmorNerf.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package me.ryleu.armornerf;

import me.ryleu.armornerf.formula.FlatToughnessFormula;
import me.ryleu.armornerf.formula.LargeToughnessFormula;
import me.ryleu.armornerf.formula.ToughnessDisabledFormula;
import me.ryleu.armornerf.formula.VanillaFormula;
import me.ryleu.armornerf.formula.*;
import net.fabricmc.api.ModInitializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -12,11 +9,12 @@

public class ArmorNerf implements ModInitializer {
public static final String MOD_ID = "armor-nerf";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
public static final me.ryleu.armornerf.ArmorNerfConfig CONFIG = me.ryleu.armornerf.ArmorNerfConfig.createAndLoad();

static ArmorFormula armorFormula = new VanillaFormula();
static HashMap<String, ArmorFormula> formulaRegistry = new HashMap<>();
private static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

private static ArmorFormula armorFormula = new VanillaFormula();
private static final HashMap<String, ArmorFormula> formulaRegistry = new HashMap<>();

public static ArmorFormula getToughnessFormula() {
return armorFormula;
Expand All @@ -28,7 +26,7 @@ public static ArmorFormula getToughnessFormula() {
* @return Whether it is registered
*/
public static boolean isRegistered(String id) {
return formulaRegistry == null || formulaRegistry.containsKey(id);
return formulaRegistry.containsKey(id);
}

/**
Expand All @@ -46,15 +44,20 @@ public void onInitialize() {
registerFormula("toughness_disabled", new ToughnessDisabledFormula());
registerFormula("flat_toughness", new FlatToughnessFormula());
registerFormula("large_toughness", new LargeToughnessFormula());
registerFormula("debug", new DebugFormula());

setArmorFormula(CONFIG.armorFormula());

CONFIG.subscribeToArmorFormula(this::setArmorFormula);
}

CONFIG.subscribeToArmorFormula((String newFormulaId) -> {
ArmorFormula newFormula = formulaRegistry.get(newFormulaId);
if (newFormula == null) {
CONFIG.armorFormula("toughness_disabled");
} else {
armorFormula = newFormula;
}
});
LOGGER.info("Armor and protection nerfed.");
private void setArmorFormula(String newFormulaId) {
ArmorFormula newFormula = formulaRegistry.get(newFormulaId);
if (newFormula == null) {
CONFIG.armorFormula("toughness_disabled");
} else {
LOGGER.info("Set formula to {}", newFormulaId);
armorFormula = newFormula;
}
}
}
3 changes: 2 additions & 1 deletion src/main/java/me/ryleu/armornerf/ConfigModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

import static me.ryleu.armornerf.ArmorNerf.MOD_ID;

@SuppressWarnings("unused")
@Modmenu(modId = MOD_ID)
@Config(name = MOD_ID, wrapperName = "ArmorNerfConfig")
public class ConfigModel {
@RangeConstraint(min = 0F, max = 1F)
public float armorPercentage = 0.4F;
public float armorPercentage = 0.5F;

// at 0.0625, full prot 4 would provide 100% damage reduction. realistically no one should be setting it that high
@RangeConstraint(min = 0F, max = 0.0625F)
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/me/ryleu/armornerf/formula/DebugFormula.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package me.ryleu.armornerf.formula;

import me.ryleu.armornerf.ArmorFormula;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.text.Text;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DebugFormula extends ArmorFormula {
private static final Logger LOGGER = LoggerFactory.getLogger(DebugFormula.class);

private final FlatToughnessFormula flatToughnessFormula = new FlatToughnessFormula();
private final LargeToughnessFormula largeToughnessFormula = new LargeToughnessFormula();
private final ToughnessDisabledFormula toughnessDisabledFormula = new ToughnessDisabledFormula();
private final VanillaFormula vanillaFormula = new VanillaFormula();

@Override
public float calculate(LivingEntity armorWearer, float damageAmount, DamageSource damageSource, float armor, float armorToughness) {
Text name = armorWearer.getCustomName();
LOGGER.debug(
"!![{},{},{},{},{},{}]",
name,
damageAmount,
flatToughnessFormula.calculate(armorWearer, damageAmount, damageSource, armor, armorToughness),
largeToughnessFormula.calculate(armorWearer, damageAmount, damageSource, armor, armorToughness),
toughnessDisabledFormula.calculate(armorWearer, damageAmount, damageSource, armor, armorToughness),
vanillaFormula.calculate(armorWearer, damageAmount, damageSource, armor, armorToughness)
);

return 0;
}

public DebugFormula() {
LOGGER.debug("!![name,none,flat,large,disabled,vanilla]");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public float calculate(LivingEntity armorWearer, float damageAmount, DamageSourc

float adjustedToughness = 2.0F + armorToughness / 4.0F;

// calculate armor toughness effectiveness reduction\
// calculate armor toughness effectiveness reduction
float armorValue = Math.max(armor - damageAmount / adjustedToughness, armor * 0.2F);

// whether to cap armor at a full bar -- will make many modded armors far more effective
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/me/ryleu/armornerf/mixin/DamageUtilMixin.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
package me.ryleu.armornerf.mixin;

import me.ryleu.armornerf.ArmorFormula;
import me.ryleu.armornerf.ArmorNerf;
import net.minecraft.entity.DamageUtil;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.util.math.MathHelper;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@SuppressWarnings("unused")
@Mixin(DamageUtil.class)
public class DamageUtilMixin {
@Unique
private static final Logger LOGGER = LoggerFactory.getLogger(DamageUtilMixin.class);

@Inject(
at = @At(value = "RETURN"),
method = "getDamageLeft(Lnet/minecraft/entity/LivingEntity;FLnet/minecraft/entity/damage/DamageSource;FF)F",
Expand All @@ -21,7 +28,8 @@ public class DamageUtilMixin {
private static void modifyGetDamageLeft(
LivingEntity armorWearer, float damageAmount, DamageSource damageSource, float armor, float armorToughness, CallbackInfoReturnable<Float> cir
) {
cir.setReturnValue(Math.max(0F, ArmorNerf.getToughnessFormula().calculate(armorWearer, damageAmount, damageSource, armor, armorToughness)));
ArmorFormula formula = ArmorNerf.getToughnessFormula();
cir.setReturnValue(Math.max(0F, formula.calculate(armorWearer, damageAmount, damageSource, armor, armorToughness)));
}

@Inject(
Expand Down

0 comments on commit 1005721

Please sign in to comment.