|
11 | 11 | import io.github.sefiraat.slimetinker.utils.ThemeUtils; |
12 | 12 | import io.github.sefiraat.slimetinker.utils.WorldUtils; |
13 | 13 | 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.*; |
20 | 15 | import org.bukkit.attribute.Attribute; |
21 | 16 | import org.bukkit.entity.EnderDragon; |
22 | 17 | import org.bukkit.entity.Enderman; |
@@ -157,34 +152,43 @@ public static void plateBrass(EventFriend friend) { |
157 | 152 | if (!(itemMeta instanceof Damageable)) { |
158 | 153 | return; |
159 | 154 | } |
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) |
161 | 165 | Damageable damagable = (Damageable) itemMeta; |
162 | 166 | int maxDurability = itemStack.getType().getMaxDurability(); |
163 | 167 | int damage = damagable.getDamage(); |
164 | 168 | float dmgPerc = ((float) damage) / ((float) maxDurability); |
165 | 169 |
|
166 | 170 | if (dmgPerc <= 0) { |
167 | | - friend.setDamageMod(friend.getDamageMod() + 0.25); |
| 171 | + friend.setDamageMod(friend.getDamageMod() * (1 - 0.125)); |
168 | 172 | } else if (dmgPerc <= 0.1) { |
169 | | - friend.setDamageMod(friend.getDamageMod() + 0.20); |
| 173 | + friend.setDamageMod(friend.getDamageMod() * (1 - 0.1)); |
170 | 174 | } else if (dmgPerc <= 0.2) { |
171 | | - friend.setDamageMod(friend.getDamageMod() + 0.15); |
| 175 | + friend.setDamageMod(friend.getDamageMod() * (1 - 0.075)); |
172 | 176 | } else if (dmgPerc <= 0.3) { |
173 | | - friend.setDamageMod(friend.getDamageMod() + 0.10); |
| 177 | + friend.setDamageMod(friend.getDamageMod() * (1 - 0.050)); |
174 | 178 | } else if (dmgPerc <= 0.4) { |
175 | | - friend.setDamageMod(friend.getDamageMod() + 0.05); |
| 179 | + friend.setDamageMod(friend.getDamageMod() * (1 - 0.025)); |
176 | 180 | } else if (dmgPerc <= 0.5) { |
177 | | - friend.setDamageMod(friend.getDamageMod() + 0.00); |
| 181 | +// friend.setDamageMod(friend.getDamageMod() + ); |
178 | 182 | } else if (dmgPerc <= 0.6) { |
179 | | - friend.setDamageMod(friend.getDamageMod() - 0.05); |
| 183 | + friend.setDamageMod(friend.getDamageMod() * (1 + 0.05)); |
180 | 184 | } else if (dmgPerc <= 0.7) { |
181 | | - friend.setDamageMod(friend.getDamageMod() - 0.10); |
| 185 | + friend.setDamageMod(friend.getDamageMod() * (1 + 0.10)); |
182 | 186 | } else if (dmgPerc <= 0.8) { |
183 | | - friend.setDamageMod(friend.getDamageMod() - 0.15); |
| 187 | + friend.setDamageMod(friend.getDamageMod() * (1 + 0.15)); |
184 | 188 | } else if (dmgPerc <= 0.9) { |
185 | | - friend.setDamageMod(friend.getDamageMod() - 0.20); |
| 189 | + friend.setDamageMod(friend.getDamageMod() * (1 + 0.20)); |
186 | 190 | } else if (dmgPerc <= 1) { |
187 | | - friend.setDamageMod(friend.getDamageMod() - 0.25); |
| 191 | + friend.setDamageMod(friend.getDamageMod() * (1 + 0.25)); |
188 | 192 | } |
189 | 193 | } |
190 | 194 |
|
@@ -639,12 +643,13 @@ public static void linksMagThor(EventFriend friend) { |
639 | 643 | public static void plateIridium(EventFriend friend) { |
640 | 644 | Player p = friend.getPlayer(); |
641 | 645 | 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) { |
643 | 648 | if (e.getType() == EntityType.GUARDIAN) { |
644 | 649 | return; |
645 | 650 | } |
646 | 651 |
|
647 | | - ((Mob) e).damage(friend.getInitialDamage() * 0.1, p); |
| 652 | + ((org.bukkit.entity.Damageable) e).damage(friend.getInitialDamage() * 0.1, p); |
648 | 653 | friend.setDamageMod(friend.getDamageMod() - 0.1); |
649 | 654 | } |
650 | 655 | } |
|
0 commit comments