Skip to content

Commit 261fe06

Browse files
committed
More scaling damage options
1 parent 358ff2b commit 261fe06

File tree

7 files changed

+110
-9
lines changed

7 files changed

+110
-9
lines changed

src/main/java/jss/bugtorch/config/BugTorchConfig.java

+14
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,16 @@ public class BugTorchConfig {
8989
public static boolean potionParticlesAreClearForClientPlayer;
9090
public static float reduceLightningVolume;
9191
public static boolean removeEntityDuplicateExtendedPropertiesIdentifierSpam;
92+
public static float scaledDrowningDamageMaxHealthFlat;
9293
public static float scaledDrowningDamageMaxHealthMult;
94+
public static float scaledPoisonDamageMaxHealthFlat;
95+
public static float scaledPoisonDamageMaxHealthMult;
96+
public static float scaledStarvationDamageMaxHealthFlat;
9397
public static float scaledStarvationDamageMaxHealthMult;
98+
public static float scaledSuffocationDamageMaxHealthFlat;
9499
public static float scaledSuffocationDamageMaxHealthMult;
100+
public static float scaledWitherDamageMaxHealthFlat;
101+
public static float scaledWitherDamageMaxHealthMult;
95102

96103
//Mixin mod bugfixes
97104
public static boolean fixGanysSurfaceOpenTrapdoorBackTexture;
@@ -216,9 +223,16 @@ public static void loadBaseMixinConfig(File configFile) {
216223
potionParticlesAreClearForClientPlayer = config.getBoolean("potionParticlesAreClearForClientPlayer", categoryTweaks, false, "Potion particles coming off of the player entity you control are always clear.");
217224
reduceLightningVolume = config.getFloat("reduceLightningVolume", categoryTweaks, 10000f, 2f, 10000f, "Reduces lightning volume and effective range.\nSet to 10,000 to disable.");
218225
removeEntityDuplicateExtendedPropertiesIdentifierSpam = config.getBoolean("removeEntityDuplicateExtendedPropertiesIdentifierSpam", categoryTweaks, true, "Removes \"An attempt was made to register extended properties using an existing key\" log spam caused by some mods.");
226+
scaledDrowningDamageMaxHealthFlat = config.getFloat("scaledDrowningDamageMaxHealthFlat", categoryTweaks, 0f, 0f, 20000f, "Amount of flat player health to remove each drowning tick.\nSet to 0 to disable.");
219227
scaledDrowningDamageMaxHealthMult = config.getFloat("scaledDrowningDamageMaxHealthMult", categoryTweaks, 0f, 0f, 1f, "Portion of max player health to remove each drowning tick.\nSet to 0 to disable.");
228+
scaledPoisonDamageMaxHealthFlat = config.getFloat("scaledPoisonDamageMaxHealthFlat", categoryTweaks, 0f, 0f, 20000f, "Portion of max player health to remove each poison effect tick.\nSet to 0 to disable.");
229+
scaledPoisonDamageMaxHealthMult = config.getFloat("scaledPoisonDamageMaxHealthMult", categoryTweaks, 0f, 0f, 1f, "Portion of max player health to remove each poison effect tick.\nSet to 0 to disable.");
230+
scaledStarvationDamageMaxHealthFlat = config.getFloat("scaledStarvationDamageMaxHealthFlat", categoryTweaks, 0f, 0f, 20000f, "Amount of flat player health to remove each starvation tick.\nSet to 0 to disable.");
220231
scaledStarvationDamageMaxHealthMult = config.getFloat("scaledStarvationDamageMaxHealthMult", categoryTweaks, 0f, 0f, 1f, "Portion of max player health to remove each starvation tick.\nSet to 0 to disable.");
232+
scaledSuffocationDamageMaxHealthFlat = config.getFloat("scaledSuffocationDamageMaxHealthFlat", categoryTweaks, 0f, 0f, 20000f, "Portion of max player health to remove each suffocation tick.\nSet to 0 to disable.");
221233
scaledSuffocationDamageMaxHealthMult = config.getFloat("scaledSuffocationDamageMaxHealthMult", categoryTweaks, 0f, 0f, 1f, "Portion of max player health to remove each suffocation tick.\nSet to 0 to disable.");
234+
scaledWitherDamageMaxHealthFlat = config.getFloat("scaledWitherDamageMaxHealthFlat", categoryTweaks, 0f, 0f, 20000f, "Portion of max player health to remove each wither effect tick.\nSet to 0 to disable.");
235+
scaledWitherDamageMaxHealthMult = config.getFloat("scaledWitherDamageMaxHealthMult", categoryTweaks, 0f, 0f, 1f, "Portion of max player health to remove each wither effect tick.\nSet to 0 to disable.");
222236

223237
lanPortToUseForOverride = config.getInt("lanPortToUseForOverride", categoryTweaks, 25565, 1024 , 49151, "Port to use for lanPortOverride.");
224238

src/main/java/jss/bugtorch/mixinplugin/BugTorchEarlyMixins.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -204,15 +204,21 @@ public List<String> getMixins(Set<String> loadedCoreMods) {
204204
if(BugTorchConfig.removeEntityDuplicateExtendedPropertiesIdentifierSpam) {
205205
mixins.add("minecraft.logcleanup.MixinEntity");
206206
}
207-
if(BugTorchConfig.scaledDrowningDamageMaxHealthMult > 0f) {
207+
if(BugTorchConfig.scaledDrowningDamageMaxHealthFlat > 0f || BugTorchConfig.scaledDrowningDamageMaxHealthMult > 0f) {
208208
mixins.add("minecraft.tweaks.entitylivingbase.MixinScalingDrowningDamage");
209209
}
210-
if(BugTorchConfig.scaledStarvationDamageMaxHealthMult > 0f) {
210+
if(BugTorchConfig.scaledStarvationDamageMaxHealthFlat > 0f || BugTorchConfig.scaledStarvationDamageMaxHealthMult > 0f) {
211211
mixins.add("minecraft.tweaks.MixinFoodStats");
212212
}
213-
if(BugTorchConfig.scaledDrowningDamageMaxHealthMult > 0f) {
213+
if(BugTorchConfig.scaledDrowningDamageMaxHealthFlat > 0f || BugTorchConfig.scaledDrowningDamageMaxHealthMult > 0f) {
214214
mixins.add("minecraft.tweaks.entitylivingbase.MixinScalingSuffocationDamage");
215215
}
216+
if(BugTorchConfig.scaledPoisonDamageMaxHealthFlat > 0f || BugTorchConfig.scaledPoisonDamageMaxHealthMult > 0f) {
217+
mixins.add("minecraft.tweaks.potion.MixinsPotionPoison");
218+
}
219+
if(BugTorchConfig.scaledWitherDamageMaxHealthFlat > 0f || BugTorchConfig.scaledWitherDamageMaxHealthMult > 0f) {
220+
mixins.add("minecraft.tweaks.potion.MixinsPotionWither");
221+
}
216222

217223
return mixins;
218224
}

src/main/java/jss/bugtorch/mixins/early/minecraft/tweaks/MixinFoodStats.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,12 @@ public abstract class MixinFoodStats {
2323
target = "Lnet/minecraft/entity/player/EntityPlayer;attackEntityFrom(Lnet/minecraft/util/DamageSource;F)Z"
2424
)
2525
)
26-
private boolean starvationDamage(EntityPlayer player, DamageSource source, float damage) {
26+
private boolean bugTorch$scalingStarvationDamage(EntityPlayer player, DamageSource source, float damage) {
2727
float survivalThreshold = player.worldObj.difficultySetting == EnumDifficulty.HARD ? 0f : 1f;
28-
return player.attackEntityFrom(source, Math.min(player.getHealth() - survivalThreshold, BugTorchConfig.scaledStarvationDamageMaxHealthMult * player.getMaxHealth()));
28+
return player.attackEntityFrom(source, Math.min(
29+
BugTorchConfig.scaledStarvationDamageMaxHealthMult * player.getMaxHealth() + BugTorchConfig.scaledStarvationDamageMaxHealthFlat,
30+
player.getHealth() - survivalThreshold
31+
));
2932
}
3033

3134
}

src/main/java/jss/bugtorch/mixins/early/minecraft/tweaks/entitylivingbase/MixinScalingDrowningDamage.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@ public abstract class MixinScalingDrowningDamage {
2323
ordinal = 1
2424
)
2525
)
26-
private boolean scalingDrowningDamage(EntityLivingBase entity, DamageSource source, float damage) {
27-
return entity.attackEntityFrom(source, (entity instanceof EntityPlayer) ? BugTorchConfig.scaledDrowningDamageMaxHealthMult * entity.getMaxHealth() : damage);
26+
private boolean bugTorch$scalingDrowningDamage(EntityLivingBase entity, DamageSource source, float damage) {
27+
return entity.attackEntityFrom(source,
28+
(entity instanceof EntityPlayer)
29+
? BugTorchConfig.scaledDrowningDamageMaxHealthMult * entity.getMaxHealth() + BugTorchConfig.scaledDrowningDamageMaxHealthFlat
30+
: damage
31+
);
2832
}
2933

3034
}

src/main/java/jss/bugtorch/mixins/early/minecraft/tweaks/entitylivingbase/MixinScalingSuffocationDamage.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@ public abstract class MixinScalingSuffocationDamage {
2323
ordinal = 0
2424
)
2525
)
26-
private boolean scalingSuffocationDamage(EntityLivingBase entity, DamageSource source, float damage) {
27-
return entity.attackEntityFrom(source, (entity instanceof EntityPlayer) ? BugTorchConfig.scaledSuffocationDamageMaxHealthMult * entity.getMaxHealth() : damage);
26+
private boolean bugTorch$scalingSuffocationDamage(EntityLivingBase entity, DamageSource source, float damage) {
27+
return entity.attackEntityFrom(source,
28+
(entity instanceof EntityPlayer)
29+
? BugTorchConfig.scaledSuffocationDamageMaxHealthMult * entity.getMaxHealth() + BugTorchConfig.scaledSuffocationDamageMaxHealthFlat
30+
: damage);
2831
}
2932

3033
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package jss.bugtorch.mixins.early.minecraft.tweaks.potion;
2+
3+
import jss.bugtorch.config.BugTorchConfig;
4+
import net.minecraft.entity.EntityLivingBase;
5+
import net.minecraft.entity.player.EntityPlayer;
6+
import net.minecraft.potion.Potion;
7+
import net.minecraft.util.DamageSource;
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Redirect;
11+
12+
@Mixin(value = Potion.class)
13+
public class MixinsPotionPoison {
14+
15+
/**
16+
* @author jss2a98aj
17+
* @reason Makes poison effect damage scale with max health.
18+
*/
19+
@Redirect(
20+
method = "performEffect",
21+
at = @At(
22+
value = "INVOKE",
23+
target = "Lnet/minecraft/entity/EntityLivingBase;attackEntityFrom(Lnet/minecraft/util/DamageSource;F)Z",
24+
ordinal = 0
25+
)
26+
)
27+
private boolean bugTorch$scalingWitherEffectDamage(EntityLivingBase entity, DamageSource source, float damage) {
28+
return entity.attackEntityFrom(source,
29+
(entity instanceof EntityPlayer)
30+
? Math.min(
31+
BugTorchConfig.scaledPoisonDamageMaxHealthMult * entity.getMaxHealth() + BugTorchConfig.scaledPoisonDamageMaxHealthFlat,
32+
entity.getHealth() - 1f
33+
)
34+
: damage);
35+
}
36+
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package jss.bugtorch.mixins.early.minecraft.tweaks.potion;
2+
3+
import jss.bugtorch.config.BugTorchConfig;
4+
import net.minecraft.entity.EntityLivingBase;
5+
import net.minecraft.entity.player.EntityPlayer;
6+
import net.minecraft.potion.Potion;
7+
import net.minecraft.util.DamageSource;
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Redirect;
11+
12+
@Mixin(value = Potion.class)
13+
public class MixinsPotionWither {
14+
15+
/**
16+
* @author jss2a98aj
17+
* @reason Makes wither effect damage scale with max health.
18+
*/
19+
@Redirect(
20+
method = "performEffect",
21+
at = @At(
22+
value = "INVOKE",
23+
target = "Lnet/minecraft/entity/EntityLivingBase;attackEntityFrom(Lnet/minecraft/util/DamageSource;F)Z",
24+
ordinal = 1
25+
)
26+
)
27+
private boolean bugTorch$scalingWitherEffectDamage(EntityLivingBase entity, DamageSource source, float damage) {
28+
return entity.attackEntityFrom(source,
29+
(entity instanceof EntityPlayer)
30+
? BugTorchConfig.scaledWitherDamageMaxHealthMult * entity.getMaxHealth() + BugTorchConfig.scaledWitherDamageMaxHealthFlat
31+
: damage);
32+
}
33+
34+
}

0 commit comments

Comments
 (0)