Skip to content

Commit 28a07c5

Browse files
committed
Optional Scaling Damage
Temperature and Thirst can be configured to increase their damage when neglected. Off by default.
1 parent 755e8a3 commit 28a07c5

File tree

10 files changed

+132
-23
lines changed

10 files changed

+132
-23
lines changed

src/main/java/com/charles445/simpledifficulty/api/temperature/ITemperatureCapability.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@ public interface ITemperatureCapability
1010
{
1111
public int getTemperatureLevel();
1212
public int getTemperatureTickTimer();
13+
public int getTemperatureDamageCounter();
1314
public ImmutableMap<String, TemporaryModifier> getTemporaryModifiers();
1415

1516
public void setTemperatureLevel(int temperature);
1617
public void setTemperatureTickTimer(int ticktimer);
1718
public void setTemporaryModifier(String name, float temperature, int duration);
19+
public void setTemperatureDamageCounter(int damagecounter);
1820

1921
public void addTemperatureLevel(int temperature);
2022
public void addTemperatureTickTimer(int ticktimer);
23+
public void addTemperatureDamageCounter(int damagecounter);
2124

2225
public void clearTemporaryModifiers();
2326

src/main/java/com/charles445/simpledifficulty/api/thirst/IThirstCapability.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,19 @@ public interface IThirstCapability
1010
public int getThirstLevel();
1111
public float getThirstSaturation();
1212
public int getThirstTickTimer();
13+
public int getThirstDamageCounter();
1314

1415
public void setThirstExhaustion(float exhaustion);
1516
public void setThirstLevel(int thirst);
1617
public void setThirstSaturation(float saturation);
1718
public void setThirstTickTimer(int ticktimer);
19+
public void setThirstDamageCounter(int damagecounter);
1820

1921
public void addThirstExhaustion(float exhaustion);
2022
public void addThirstLevel(int thirst);
2123
public void addThirstSaturation(float saturation);
2224
public void addThirstTickTimer(int ticktimer);
25+
public void addThirstDamageCounter(int damagecounter);
2326

2427
/**
2528
* Check whether the thirst level isn't maximum

src/main/java/com/charles445/simpledifficulty/capability/TemperatureCapability.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class TemperatureCapability implements ITemperatureCapability
2828
{
2929
private int temperature = 12;
3030
private int ticktimer = 0;
31+
private int damagecounter = 0;
3132

3233
private Map<String, TemporaryModifier> temporaryModifiers = new HashMap<String, TemporaryModifier>();
3334

@@ -51,6 +52,12 @@ public int getTemperatureTickTimer()
5152
{
5253
return ticktimer;
5354
}
55+
56+
@Override
57+
public int getTemperatureDamageCounter()
58+
{
59+
return damagecounter;
60+
}
5461

5562
@Override
5663
public void setTemperatureLevel(int temperature)
@@ -63,6 +70,12 @@ public void setTemperatureTickTimer(int ticktimer)
6370
{
6471
this.ticktimer=ticktimer;
6572
}
73+
74+
@Override
75+
public void setTemperatureDamageCounter(int damagecounter)
76+
{
77+
this.damagecounter = damagecounter;
78+
}
6679

6780
@Override
6881
public void addTemperatureLevel(int temperature)
@@ -75,6 +88,12 @@ public void addTemperatureTickTimer(int ticktimer)
7588
{
7689
this.setTemperatureTickTimer(this.getTemperatureTickTimer() + ticktimer);
7790
}
91+
92+
@Override
93+
public void addTemperatureDamageCounter(int damagecounter)
94+
{
95+
this.setTemperatureDamageCounter(this.getTemperatureDamageCounter() + damagecounter);
96+
}
7897

7998
@Override
8099
public void tickUpdate(EntityPlayer player, World world, TickEvent.Phase phase)
@@ -128,6 +147,8 @@ public void tickUpdate(EntityPlayer player, World world, TickEvent.Phase phase)
128147

129148
//Effects
130149

150+
boolean appliedEffect = false;
151+
131152
TemperatureEnum tempEnum = getTemperatureEnum();
132153
if(tempEnum==TemperatureEnum.BURNING)
133154
{
@@ -136,6 +157,7 @@ public void tickUpdate(EntityPlayer player, World world, TickEvent.Phase phase)
136157
//Hyperthermia
137158
player.removePotionEffect(SDPotions.hyperthermia);
138159
player.addPotionEffect(new PotionEffect(SDPotions.hyperthermia, 450, 0));
160+
appliedEffect = true;
139161
}
140162
}
141163
else if(tempEnum==TemperatureEnum.FREEZING)
@@ -145,6 +167,22 @@ else if(tempEnum==TemperatureEnum.FREEZING)
145167
//Hypothermia
146168
player.removePotionEffect(SDPotions.hypothermia);
147169
player.addPotionEffect(new PotionEffect(SDPotions.hypothermia, 450, 0));
170+
appliedEffect = true;
171+
}
172+
}
173+
174+
if(!appliedEffect)
175+
{
176+
if(this.getTemperatureDamageCounter() != 0)
177+
{
178+
//Test whether to reset the temperature damage counter
179+
boolean hasHypothermia = player.isPotionActive(SDPotions.hypothermia);
180+
boolean hasHyperthermia = player.isPotionActive(SDPotions.hyperthermia);
181+
if(!hasHypothermia && !hasHyperthermia)
182+
{
183+
//Reset the temperature damage counter
184+
this.setTemperatureDamageCounter(0);
185+
}
148186
}
149187
}
150188
}

src/main/java/com/charles445/simpledifficulty/capability/TemperatureStorage.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public class TemperatureStorage implements IStorage<ITemperatureCapability>
1818
private static final String temperatureLevel = "temperatureLevel";
1919
private static final String temperatureTickTimer = "temperatureTickTimer";
2020
private static final String temporaryModifiers = "temporaryModifiers";
21+
private static final String temperatureDamageCounter = "temperatureDamageCounter";
2122
private static final String NBT_name = "name";
2223
private static final String NBT_temperature = "temperature";
2324
private static final String NBT_duration = "duration";
@@ -42,6 +43,7 @@ public NBTBase writeNBT(Capability<ITemperatureCapability> capability, ITemperat
4243

4344
compound.setInteger(temperatureLevel, instance.getTemperatureLevel());
4445
compound.setInteger(temperatureTickTimer,instance.getTemperatureTickTimer());
46+
compound.setInteger(temperatureDamageCounter, instance.getTemperatureDamageCounter());
4547
compound.setTag(temporaryModifiers, temporaryList);
4648
return compound;
4749
}
@@ -57,6 +59,8 @@ public void readNBT(Capability<ITemperatureCapability> capability, ITemperatureC
5759
instance.setTemperatureLevel(compound.getInteger(temperatureLevel));
5860
if(compound.hasKey(temperatureTickTimer))
5961
instance.setTemperatureTickTimer(compound.getInteger(temperatureTickTimer));
62+
if(compound.hasKey(temperatureDamageCounter))
63+
instance.setTemperatureDamageCounter(compound.getInteger(temperatureDamageCounter));
6064
if(compound.hasKey(temporaryModifiers))
6165
{
6266
instance.clearTemporaryModifiers();

src/main/java/com/charles445/simpledifficulty/capability/ThirstCapability.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class ThirstCapability implements IThirstCapability
2525
private int thirst = 20;
2626
private float saturation = 0.0f;
2727
private int ticktimer = 0;
28+
private int damagecounter = 0;
2829

2930
//Unsaved data
3031
private int oldthirst = 0;
@@ -121,14 +122,17 @@ else if(DamageUtil.isModDangerous(world))
121122

122123
if(DamageUtil.isModDangerous(world) && DamageUtil.healthAboveDifficulty(world, player))
123124
{
124-
player.attackEntityFrom(SDDamageSources.DEHYDRATION, 1.0f);
125+
float thirstDamageToApply = 1.0f + (1.0f * (float)this.getThirstDamageCounter() * (float)ModConfig.server.thirst.thirstDamageScaling);
126+
player.attackEntityFrom(SDDamageSources.DEHYDRATION, thirstDamageToApply);
127+
this.addThirstDamageCounter(1);
125128
}
126129
}
127130
}
128131
else
129132
{
130133
//Reset the timer if not dying of thirst
131134
this.setThirstTickTimer(0);
135+
this.setThirstDamageCounter(0);
132136
}
133137

134138
//checkSprint(player);
@@ -179,6 +183,12 @@ public int getThirstTickTimer()
179183
{
180184
return ticktimer;
181185
}
186+
187+
@Override
188+
public int getThirstDamageCounter()
189+
{
190+
return damagecounter;
191+
}
182192

183193
@Override
184194
public void setThirstExhaustion(float exhaustion)
@@ -210,6 +220,12 @@ public void setThirstTickTimer(int ticktimer)
210220
{
211221
this.ticktimer=ticktimer;
212222
}
223+
224+
@Override
225+
public void setThirstDamageCounter(int damagecounter)
226+
{
227+
this.damagecounter = damagecounter;
228+
}
213229

214230
@Override
215231
public void addThirstExhaustion(float exhaustion)
@@ -235,6 +251,12 @@ public void addThirstTickTimer(int ticktimer)
235251
this.setThirstTickTimer(this.getThirstTickTimer() + ticktimer);
236252
}
237253

254+
@Override
255+
public void addThirstDamageCounter(int damagecounter)
256+
{
257+
this.setThirstDamageCounter(this.getThirstDamageCounter() + damagecounter);
258+
}
259+
238260
@Override
239261
public boolean isThirsty()
240262
{

src/main/java/com/charles445/simpledifficulty/capability/ThirstStorage.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class ThirstStorage implements IStorage<IThirstCapability>
1313
private static final String thirstLevel = "thirstLevel";
1414
private static final String thirstSaturation = "thirstSaturation";
1515
private static final String thirstTickTimer = "thirstTickTimer";
16+
private static final String thirstDamageCounter = "thirstDamageCounter";
1617

1718

1819
@Override
@@ -23,6 +24,7 @@ public NBTBase writeNBT(Capability<IThirstCapability> capability, IThirstCapabil
2324
compound.setInteger(thirstLevel, instance.getThirstLevel());
2425
compound.setFloat(thirstSaturation,instance.getThirstSaturation());
2526
compound.setInteger(thirstTickTimer,instance.getThirstTickTimer());
27+
compound.setInteger(thirstDamageCounter,instance.getThirstDamageCounter());
2628
return compound;
2729
}
2830

@@ -41,6 +43,8 @@ public void readNBT(Capability<IThirstCapability> capability, IThirstCapability
4143
instance.setThirstSaturation(compound.getFloat(thirstSaturation));
4244
if(compound.hasKey(thirstTickTimer))
4345
instance.setThirstTickTimer(compound.getInteger(thirstTickTimer));
46+
if(compound.hasKey(thirstDamageCounter))
47+
instance.setThirstDamageCounter(compound.getInteger(thirstDamageCounter));
4448
}
4549
}
4650

src/main/java/com/charles445/simpledifficulty/config/ModConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,11 @@ public class ConfigTemperature
266266
@Config.RangeDouble(min=0, max = 1000000)
267267
public double stackingTemperatureLimit = 3;
268268

269+
@Config.Comment("Temperature Damage Scaling - Extra damage from hyperthermia and hypothermia over time")
270+
@Config.Name("TemperatureDamageScaling")
271+
@Config.RangeDouble(min=0.0)
272+
public double temperatureDamageScaling = 0.0d;
273+
269274
}
270275
public class ConfigThirst
271276
{
@@ -346,6 +351,11 @@ public class ConfigThirst
346351
@Config.RangeDouble(min=0.0, max=1.0)
347352
public double thirstParasitesDamage = 0.2d;
348353

354+
@Config.Comment("Thirst Damage Scaling - Extra damage from thirst over time")
355+
@Config.Name("ThirstDamageScaling")
356+
@Config.RangeDouble(min=0.0)
357+
public double thirstDamageScaling = 0.0d;
358+
349359

350360
}
351361
}

src/main/java/com/charles445/simpledifficulty/potion/PotionHyperthermia.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.charles445.simpledifficulty.api.SDDamageSources;
44
import com.charles445.simpledifficulty.api.SDPotions;
5+
import com.charles445.simpledifficulty.config.ModConfig;
56
import com.charles445.simpledifficulty.util.DamageUtil;
67

78
import net.minecraft.entity.EntityLivingBase;
@@ -10,7 +11,7 @@
1011
import net.minecraft.util.ResourceLocation;
1112
import net.minecraft.world.World;
1213

13-
public class PotionHyperthermia extends PotionBase
14+
public class PotionHyperthermia extends PotionThermia
1415
{
1516
private final ResourceLocation texture;
1617

@@ -29,16 +30,8 @@ public ResourceLocation getTexture()
2930
}
3031

3132
@Override
32-
public void performEffect(EntityLivingBase entity, int amplifier)
33+
public void attackPlayer(EntityPlayer player, float damage)
3334
{
34-
if(entity instanceof EntityPlayer && !entity.isPotionActive(SDPotions.heat_resist))
35-
{
36-
World world = entity.getEntityWorld();
37-
EntityPlayer player = (EntityPlayer) entity;
38-
if(DamageUtil.isModDangerous(world) && DamageUtil.healthAboveDifficulty(world, player))
39-
{
40-
player.attackEntityFrom(SDDamageSources.HYPERTHERMIA, 0.5f);
41-
}
42-
}
35+
player.attackEntityFrom(SDDamageSources.HYPERTHERMIA, damage);
4336
}
4437
}

src/main/java/com/charles445/simpledifficulty/potion/PotionHypothermia.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import net.minecraft.util.ResourceLocation;
1111
import net.minecraft.world.World;
1212

13-
public class PotionHypothermia extends PotionBase
13+
public class PotionHypothermia extends PotionThermia
1414
{
1515
private final ResourceLocation texture;
1616

@@ -29,16 +29,8 @@ public ResourceLocation getTexture()
2929
}
3030

3131
@Override
32-
public void performEffect(EntityLivingBase entity, int amplifier)
32+
public void attackPlayer(EntityPlayer player, float damage)
3333
{
34-
if(entity instanceof EntityPlayer && !entity.isPotionActive(SDPotions.cold_resist))
35-
{
36-
World world = entity.getEntityWorld();
37-
EntityPlayer player = (EntityPlayer) entity;
38-
if(DamageUtil.isModDangerous(world) && DamageUtil.healthAboveDifficulty(world, player))
39-
{
40-
player.attackEntityFrom(SDDamageSources.HYPOTHERMIA, 0.5f);
41-
}
42-
}
34+
player.attackEntityFrom(SDDamageSources.HYPOTHERMIA, damage);
4335
}
4436
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.charles445.simpledifficulty.potion;
2+
3+
import com.charles445.simpledifficulty.api.SDCapabilities;
4+
import com.charles445.simpledifficulty.api.SDDamageSources;
5+
import com.charles445.simpledifficulty.api.SDPotions;
6+
import com.charles445.simpledifficulty.api.temperature.ITemperatureCapability;
7+
import com.charles445.simpledifficulty.config.ModConfig;
8+
import com.charles445.simpledifficulty.util.DamageUtil;
9+
10+
import net.minecraft.entity.EntityLivingBase;
11+
import net.minecraft.entity.player.EntityPlayer;
12+
import net.minecraft.util.ResourceLocation;
13+
import net.minecraft.world.World;
14+
15+
public abstract class PotionThermia extends PotionBase
16+
{
17+
public PotionThermia(boolean isBadEffect, int liquidColor)
18+
{
19+
super(isBadEffect, liquidColor);
20+
}
21+
22+
@Override
23+
public void performEffect(EntityLivingBase entity, int amplifier)
24+
{
25+
if(entity instanceof EntityPlayer && !entity.isPotionActive(SDPotions.heat_resist))
26+
{
27+
World world = entity.getEntityWorld();
28+
EntityPlayer player = (EntityPlayer) entity;
29+
if(DamageUtil.isModDangerous(world) && DamageUtil.healthAboveDifficulty(world, player))
30+
{
31+
ITemperatureCapability capability = SDCapabilities.getTemperatureData(player);
32+
float damage = 0.5f + (0.5f * (float)capability.getTemperatureDamageCounter() * (float)ModConfig.server.temperature.temperatureDamageScaling);
33+
attackPlayer(player, damage);
34+
capability.addTemperatureDamageCounter(1);
35+
}
36+
}
37+
}
38+
39+
public abstract void attackPlayer(EntityPlayer player, float damage);
40+
}

0 commit comments

Comments
 (0)