Skip to content

Commit 0a09276

Browse files
authored
Merge pull request #94 from m1919810/fix/issue92
fix: issue92 93修复和相关数值平衡性调整
2 parents e93f4fd + 80ad349 commit 0a09276

File tree

3 files changed

+32
-24
lines changed

3 files changed

+32
-24
lines changed

src/main/java/io/github/sefiraat/slimetinker/events/PlayerDamagedEvents.java

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,7 @@
1111
import io.github.sefiraat.slimetinker.utils.ThemeUtils;
1212
import io.github.sefiraat.slimetinker.utils.WorldUtils;
1313
import io.github.thebusybiscuit.slimefun4.libraries.dough.data.persistent.PersistentDataAPI;
14-
import org.bukkit.Color;
15-
import org.bukkit.Effect;
16-
import org.bukkit.Location;
17-
import org.bukkit.Material;
18-
import org.bukkit.NamespacedKey;
19-
import org.bukkit.Particle;
14+
import org.bukkit.*;
2015
import org.bukkit.attribute.Attribute;
2116
import org.bukkit.entity.EnderDragon;
2217
import org.bukkit.entity.Enderman;
@@ -157,34 +152,43 @@ public static void plateBrass(EventFriend friend) {
157152
if (!(itemMeta instanceof Damageable)) {
158153
return;
159154
}
160-
155+
// fix issue # 93: nerf brass
156+
// its logic is wrongly coded , mismatching its description
157+
// And it is truly overpowered at current values
158+
// Note: getDamage() returns the durability already used
159+
// Imagine you have a set of brass plate armor each piece with only 1 / 10 durability
160+
// you will get total of -1 damageMod, which means the event will be cancelled and armor will not be damaged by the attack, and the player will be invulnerable
161+
// even if you only got 2/ 10 of durability, hold a carbon mesh bind tool will result in -1.13 damageMod
162+
// Note: tools with infinity rod and carbon mesh bind decrease damageMod to 1/2 (1 - 33%) = 0.33, if we provide more than 0.33 in add operation, the player will be invulnerable again. so we decide to use multiplication, which provide a maxinum of 0.125 reduce of damageMod per piece
163+
// we decided to cut it in half , letting it result in about -0.4 of CURRENT damageMod for a set of armor
164+
// Note: providing a total of (1 - 0.25)^4 = 0.3 damageMod multiplier is also too op, (you're granted the same dameg reduction as infinite rod = carbon mesh bind just by wearing armor)
161165
Damageable damagable = (Damageable) itemMeta;
162166
int maxDurability = itemStack.getType().getMaxDurability();
163167
int damage = damagable.getDamage();
164168
float dmgPerc = ((float) damage) / ((float) maxDurability);
165169

166170
if (dmgPerc <= 0) {
167-
friend.setDamageMod(friend.getDamageMod() + 0.25);
171+
friend.setDamageMod(friend.getDamageMod() * (1 - 0.125));
168172
} else if (dmgPerc <= 0.1) {
169-
friend.setDamageMod(friend.getDamageMod() + 0.20);
173+
friend.setDamageMod(friend.getDamageMod() * (1 - 0.1));
170174
} else if (dmgPerc <= 0.2) {
171-
friend.setDamageMod(friend.getDamageMod() + 0.15);
175+
friend.setDamageMod(friend.getDamageMod() * (1 - 0.075));
172176
} else if (dmgPerc <= 0.3) {
173-
friend.setDamageMod(friend.getDamageMod() + 0.10);
177+
friend.setDamageMod(friend.getDamageMod() * (1 - 0.050));
174178
} else if (dmgPerc <= 0.4) {
175-
friend.setDamageMod(friend.getDamageMod() + 0.05);
179+
friend.setDamageMod(friend.getDamageMod() * (1 - 0.025));
176180
} else if (dmgPerc <= 0.5) {
177-
friend.setDamageMod(friend.getDamageMod() + 0.00);
181+
// friend.setDamageMod(friend.getDamageMod() + );
178182
} else if (dmgPerc <= 0.6) {
179-
friend.setDamageMod(friend.getDamageMod() - 0.05);
183+
friend.setDamageMod(friend.getDamageMod() * (1 + 0.05));
180184
} else if (dmgPerc <= 0.7) {
181-
friend.setDamageMod(friend.getDamageMod() - 0.10);
185+
friend.setDamageMod(friend.getDamageMod() * (1 + 0.10));
182186
} else if (dmgPerc <= 0.8) {
183-
friend.setDamageMod(friend.getDamageMod() - 0.15);
187+
friend.setDamageMod(friend.getDamageMod() * (1 + 0.15));
184188
} else if (dmgPerc <= 0.9) {
185-
friend.setDamageMod(friend.getDamageMod() - 0.20);
189+
friend.setDamageMod(friend.getDamageMod() * (1 + 0.20));
186190
} else if (dmgPerc <= 1) {
187-
friend.setDamageMod(friend.getDamageMod() - 0.25);
191+
friend.setDamageMod(friend.getDamageMod() * (1 + 0.25));
188192
}
189193
}
190194

@@ -639,12 +643,13 @@ public static void linksMagThor(EventFriend friend) {
639643
public static void plateIridium(EventFriend friend) {
640644
Player p = friend.getPlayer();
641645
Entity e = friend.getDamagingEntity();
642-
if (e instanceof Mob) {
646+
//fix issue #92, damage from player should also be blocked
647+
if (e instanceof Mob || e instanceof Player) {
643648
if (e.getType() == EntityType.GUARDIAN) {
644649
return;
645650
}
646651

647-
((Mob) e).damage(friend.getInitialDamage() * 0.1, p);
652+
((org.bukkit.entity.Damageable) e).damage(friend.getInitialDamage() * 0.1, p);
648653
friend.setDamageMod(friend.getDamageMod() - 0.1);
649654
}
650655
}

src/main/java/io/github/sefiraat/slimetinker/items/tinkermaterials/setup/Traits.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -759,8 +759,9 @@ private Traits() {
759759
.setLore(
760760
"+200% 耐久消耗",
761761
"承受伤害将根据耐久度计算:",
762-
"耐久高于一半时减少承受伤害,满耐久度时最多减少25%",
763-
"耐久低于一半时增加承受伤害,1耐久度时最多增加25%"
762+
"耐久高于一半时减少承受伤害,满耐久度时最多减少12.5%",
763+
"耐久低于一半时增加承受伤害,1耐久度时最多增加25%",
764+
"每件护甲单独计算"
764765
)
765766
.addConsumer(TraitEventType.PLAYER_DAMAGED, PlayerDamagedEvents::plateBrass)
766767
.addConsumer(TraitEventType.DURABILITY, DurabilityEvents::plateBrass);

src/main/java/io/github/sefiraat/slimetinker/listeners/PlayerDamagedListener.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ public void onPlayerDamaged(EntityDamageEvent event) {
4949
// Settle
5050
settlePotionEffects(friend);
5151
event.setDamage(friend.getDamageOverride() == null ? event.getDamage() * friend.getDamageMod() : friend.getDamageOverride());
52-
if (friend.getDamageMod() == 0 || friend.isCancelEvent()) {
52+
// fix: issue #93 : damageMod < 0 should also be cancelled
53+
if (friend.getDamageMod() <= 0 || friend.isCancelEvent()) {
5354
event.setCancelled(true);
5455
}
5556
}
@@ -80,7 +81,8 @@ public void onPlayerDamagedByEntity(EntityDamageByEntityEvent event) {
8081
// Settle
8182
settlePotionEffects(friend);
8283
event.setDamage(friend.getDamageOverride() == null ? event.getDamage() * friend.getDamageMod() : friend.getDamageOverride());
83-
if (friend.getDamageMod() == 0 || friend.isCancelEvent()) {
84+
// fix: issue #93 : damageMod < 0 should also be cancelled
85+
if (friend.getDamageMod() <= 0 || friend.isCancelEvent()) {
8486
event.setCancelled(true);
8587
}
8688
}

0 commit comments

Comments
 (0)