Skip to content

Commit

Permalink
Improve performance and add silver trim support (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
Bawnorton committed Aug 13, 2023
1 parent 958a44a commit 5384972
Show file tree
Hide file tree
Showing 20 changed files with 343 additions and 114 deletions.
2 changes: 0 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,6 @@ dependencies {

// mod compats
modCompileOnly("maven.modrinth:illager-invasion:${project.illager_invasion_version}")
modCompileOnly("maven.modrinth:puzzles-lib:${project.puzzles_lib_version}")
modCompileOnly("maven.modrinth:forge-config-api-port:${project.forge_config_api_port_version}")
modCompileOnly("maven.modrinth:friends-and-foes:${project.friends_and_foes_version}")
}

Expand Down
2 changes: 0 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,4 @@ archives_base_name=bettertrims
fabric_version=0.86.0+1.20.1
mixin_extras_version=0.2.0-beta.9
illager_invasion_version=v8.0.0-1.20.1-Fabric
puzzles_lib_version=v8.0.15-1.20.1-Fabric
forge_config_api_port_version=v8.0.0-1.20.1-Fabric
friends_and_foes_version=fabric-mc1.20.1-1.9.3
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.bawnorton.bettertrims.mixin.client;

import com.bawnorton.bettertrims.config.Config;
import com.bawnorton.bettertrims.effect.ArmorTrimEffects;
import com.bawnorton.bettertrims.extend.EntityExtender;
import com.bawnorton.bettertrims.util.NumberWrapper;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.client.render.BackgroundRenderer;
import net.minecraft.entity.Entity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
import org.spongepowered.asm.mixin.injection.Slice;

@Mixin(BackgroundRenderer.class)
public abstract class BackgroundRendererMixin {
@ModifyConstant(method = "render", constant = @Constant(floatValue = 0.0F, ordinal = 0), slice =
@Slice(
from = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/GameRenderer;getNightVisionStrength(Lnet/minecraft/entity/LivingEntity;F)F")
))
private static float modifyLight(float original, @Local Entity entity) {
NumberWrapper increase = NumberWrapper.of(0f);
if(entity instanceof EntityExtender extender && extender.betterTrims$shouldSilverApply()) {
ArmorTrimEffects.SILVER.apply(extender.betterTrims$getTrimmables(), stack -> increase.increment(Config.getInstance().silverNightBonus.improveVision));
}
return original + increase.getFloat();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.bawnorton.bettertrims.mixin.client;

import com.bawnorton.bettertrims.config.Config;
import com.bawnorton.bettertrims.effect.ArmorTrimEffects;
import com.bawnorton.bettertrims.extend.EntityExtender;
import com.bawnorton.bettertrims.util.NumberWrapper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.LightmapTextureManager;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.*;

@Mixin(LightmapTextureManager.class)
public abstract class LightmapTextureManagerMixin {
@Shadow @Final private MinecraftClient client;

@ModifyConstant(method = "update", constant = @Constant(floatValue = 0.0F, ordinal = 1), slice =
@Slice(
from = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/GameRenderer;getNightVisionStrength(Lnet/minecraft/entity/LivingEntity;F)F")
))
private float modifyLight(float original) {
NumberWrapper increase = NumberWrapper.of(0f);
if(client.player instanceof EntityExtender extender && extender.betterTrims$shouldSilverApply()) {
ArmorTrimEffects.SILVER.apply(extender.betterTrims$getTrimmables(), stack -> increase.increment(Config.getInstance().silverNightBonus.improveVision));
}
return original + increase.getFloat();
}
}
2 changes: 2 additions & 0 deletions src/client/resources/bettertrims.client.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
"package": "com.bawnorton.bettertrims.mixin.client",
"compatibilityLevel": "JAVA_17",
"client": [
"BackgroundRendererMixin",
"LightmapTextureManagerMixin"
],
"injectors": {
"defaultRequire": 1
Expand Down
37 changes: 37 additions & 0 deletions src/main/java/com/bawnorton/bettertrims/config/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ public class Config {
@Expose
@SerializedName("amethyst_potion_duration_modify_chance")
public Float amethystEffectChance;
@Expose
@SerializedName("silver_night_bonus")
public SilverBonus silverNightBonus;

private Config() {
}
Expand All @@ -61,6 +64,40 @@ public String toString() {
", diamondDamageReduction=" + diamondDamageReduction +
", lapisEnchantability=" + lapisEnchantability +
", amethystEffectChance=" + amethystEffectChance +
", silverNightBonus=" + silverNightBonus +
'}';
}

public static class SilverBonus {
@Expose
@SerializedName("movement_speed")
public Float movementSpeed;
@Expose
@SerializedName("jump_height")
public Float jumpHeight;
@Expose
@SerializedName("attack_damage")
public Float attackDamage;
@Expose
@SerializedName("attack_speed")
public Float attackSpeed;
@Expose
@SerializedName("damage_reduction")
public Float damageReduction;
@Expose
@SerializedName("improve_vision")
public Float improveVision;

@Override
public String toString() {
return "SilverBonus{" +
"movementSpeed=" + movementSpeed +
", jumpHeight=" + jumpHeight +
", attackDamage=" + attackDamage +
", attackSpeed=" + attackSpeed +
", damageReduction=" + damageReduction +
", improveVision=" + improveVision +
'}';
}
}
}
22 changes: 22 additions & 0 deletions src/main/java/com/bawnorton/bettertrims/config/ConfigManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,33 @@ public static void loadConfig() {
if (config.amethystEffectChance == null || config.amethystEffectChance < 0)
config.amethystEffectChance = 0.0625f;

validateSilverBonus(config);

Config.update(config);
save();
BetterTrims.LOGGER.info("Loaded config");
}

private static void validateSilverBonus(Config config) {
Config.SilverBonus silverBonus = config.silverNightBonus;
if(silverBonus == null) {
silverBonus = new Config.SilverBonus();
config.silverNightBonus = silverBonus;
}
if (silverBonus.movementSpeed == null || silverBonus.movementSpeed < 0)
silverBonus.movementSpeed = 0.05f;
if (silverBonus.jumpHeight == null || silverBonus.jumpHeight < 0)
silverBonus.jumpHeight = 0.05f;
if (silverBonus.attackDamage == null || silverBonus.attackDamage < 0)
silverBonus.attackDamage = 0.5f;
if (silverBonus.attackSpeed == null || silverBonus.attackSpeed < 0)
silverBonus.attackSpeed = 0.3f;
if (silverBonus.damageReduction == null || silverBonus.damageReduction < 0)
silverBonus.damageReduction = 0.03f;
if (silverBonus.improveVision == null || silverBonus.improveVision < 0)
silverBonus.improveVision = 0.25f;
}

private static Config load() {
Config config = Config.getInstance();
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,18 @@

import com.bawnorton.bettertrims.compat.Compat;
import com.bawnorton.bettertrims.compat.StackedTrimsCompat;
import com.bawnorton.bettertrims.util.RegexIdentifier;
import net.minecraft.item.ItemStack;
import net.minecraft.item.trim.ArmorTrimMaterial;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
import net.minecraft.registry.RegistryKey;
import net.minecraft.util.Identifier;

import java.util.List;

public class ArmorTrimEffect {
private final Identifier material;
private final RegexIdentifier material;

public ArmorTrimEffect(Identifier matieral) {
public ArmorTrimEffect(RegexIdentifier matieral) {
this.material = matieral;
}

Expand All @@ -30,9 +29,9 @@ public boolean appliesTo(ItemStack stack) {
if (Compat.isStackedTrimsLoaded()) {
List<Identifier> materials = StackedTrimsCompat.getTrimMaterials(stack);
if (materials == null) return false;
return materials.contains(material);
return material.matchesAny(materials);
}
return material.equals(getTrimMaterial(stack));
return material.matches(getTrimMaterial(stack));
}

public boolean appliesTo(Iterable<ItemStack> stacks) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.bawnorton.bettertrims.effect;

import com.bawnorton.bettertrims.util.RegexIdentifier;
import net.minecraft.item.trim.ArmorTrimMaterial;
import net.minecraft.item.trim.ArmorTrimMaterials;
import net.minecraft.registry.RegistryKey;
Expand All @@ -19,13 +20,14 @@ public abstract class ArmorTrimEffects {
public static final ArmorTrimEffect AMETHYST = of(ArmorTrimMaterials.AMETHYST);

// modded materials
public static final ArmorTrimEffect PLATINUM = of(new Identifier("illagerinvasion", "platinum"));
public static final ArmorTrimEffect PLATINUM = of(new RegexIdentifier(".*", "platinum"));
public static final ArmorTrimEffect SILVER = of(new RegexIdentifier(".*", "silver"));

private static ArmorTrimEffect of(RegistryKey<ArmorTrimMaterial> material) {
return of(material.getValue());
return of(new RegexIdentifier(".*", material.getValue().getPath()));
}

private static ArmorTrimEffect of(Identifier material) {
private static ArmorTrimEffect of(RegexIdentifier material) {
return new ArmorTrimEffect(material);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@

public interface EntityExtender {
Iterable<ItemStack> betterTrims$getTrimmables();
boolean betterTrims$shouldSilverApply();
}
36 changes: 24 additions & 12 deletions src/main/java/com/bawnorton/bettertrims/mixin/EntityMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import com.bawnorton.bettertrims.effect.ArmorTrimEffects;
import com.bawnorton.bettertrims.extend.EntityExtender;
import com.bawnorton.bettertrims.util.IterHelper;
import com.bawnorton.bettertrims.util.Wrapper;
import com.bawnorton.bettertrims.util.NumberWrapper;
import com.bawnorton.bettertrims.config.Config;
import net.minecraft.entity.Entity;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
Expand All @@ -16,6 +16,7 @@
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

import java.util.ArrayList;
import java.util.List;

@Mixin(Entity.class)
Expand All @@ -25,24 +26,35 @@ public abstract class EntityMixin implements EntityExtender {

@Shadow public abstract Iterable<ItemStack> getHandItems();

@Shadow public abstract World getWorld();

@Inject(method = "isFireImmune", at = @At("RETURN"), cancellable = true)
private void isFireImmune(CallbackInfoReturnable<Boolean> cir) {
Wrapper<Float> netheriteCount = Wrapper.of(0f);
ArmorTrimEffects.NETHERITE.apply(betterTrims$getTrimmables(), stack -> netheriteCount.set(netheriteCount.get() + Config.getInstance().netheriteFireResistance));
cir.setReturnValue(cir.getReturnValue() || netheriteCount.get() >= 0.99f);
NumberWrapper netheriteCount = NumberWrapper.of(0f);
ArmorTrimEffects.NETHERITE.apply(betterTrims$getTrimmables(), stack -> netheriteCount.increment(Config.getInstance().netheriteFireResistance));
cir.setReturnValue(cir.getReturnValue() || netheriteCount.getFloat() >= 0.99f);
}

@ModifyArg(method = "setOnFireFromLava", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;damage(Lnet/minecraft/entity/damage/DamageSource;F)Z"))
private float modifyDamage(float original) {
Wrapper<Float> netheriteCount = Wrapper.of(0f);
ArmorTrimEffects.NETHERITE.apply(betterTrims$getTrimmables(), stack -> netheriteCount.set(netheriteCount.get() + Config.getInstance().netheriteFireResistance));
return original * (1 - netheriteCount.get());
NumberWrapper netheriteCount = NumberWrapper.of(0f);
ArmorTrimEffects.NETHERITE.apply(betterTrims$getTrimmables(), stack -> netheriteCount.increment(Config.getInstance().netheriteFireResistance));
return original * (1 - netheriteCount.getFloat());
}

@Unique
public List<ItemStack> betterTrims$getTrimmables() {
List<ItemStack> equipped = new ArrayList<>();
for(ItemStack stack: getHandItems()) equipped.add(stack);
equipped.removeIf(stack -> stack.getItem() instanceof ArmorItem);
for(ItemStack stack: getArmorItems()) equipped.add(stack);
equipped.removeIf(ItemStack::isEmpty);
return equipped;
}

@Unique
public Iterable<ItemStack> betterTrims$getTrimmables() {
List<ItemStack> handItems = IterHelper.toList(getHandItems());
handItems.removeIf(stack -> stack.getItem() instanceof ArmorItem);
return IterHelper.combine(getArmorItems(), handItems);
public boolean betterTrims$shouldSilverApply() {
long time = getWorld().getTimeOfDay() % 24000;
return time >= 13000 && time <= 23000;
}
}
Loading

0 comments on commit 5384972

Please sign in to comment.