mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
95 lines
5.2 KiB
Diff
95 lines
5.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: William Blake Galbreath <blake.galbreath@gmail.com>
|
|
Date: Sun, 14 Jul 2019 19:52:47 -0500
|
|
Subject: [PATCH] Mending mends most damages equipment first
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
|
|
index a30f9d57257e1de1641f4af1fa7afaea3f0fd37c..5fffe07176ece547a0224aefbf7660a33508b959 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java
|
|
@@ -319,7 +319,7 @@ public class ExperienceOrb extends Entity {
|
|
}
|
|
|
|
private int repairPlayerItems(Player player, int amount) {
|
|
- Entry<EquipmentSlot, ItemStack> entry = EnchantmentHelper.getRandomItemWith(Enchantments.MENDING, (LivingEntity) player, ItemStack::isDamaged);
|
|
+ Entry<EquipmentSlot, ItemStack> entry = level.purpurConfig.useBetterMending ? EnchantmentHelper.getMostDamagedEquipment(Enchantments.MENDING, player) : EnchantmentHelper.getRandomItemWith(Enchantments.MENDING, (LivingEntity) player, ItemStack::isDamaged); // Purpur
|
|
|
|
if (entry != null) {
|
|
ItemStack itemstack = (ItemStack) entry.getValue();
|
|
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
|
|
index f85e9fb13ddeb5c3260592e3cdfe958a14bd63f6..70d0fcd323f1ab54dec770eb6aee394ae356b67d 100644
|
|
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
|
|
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
|
|
@@ -511,6 +511,16 @@ public final class ItemStack {
|
|
return this.isDamageableItem() && this.getDamageValue() > 0;
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ public float getDamagePercent() {
|
|
+ if (isDamaged()) {
|
|
+ return (float) getDamageValue() / (float) getItem().getMaxDamage();
|
|
+ } else {
|
|
+ return 0F;
|
|
+ }
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
public int getDamageValue() {
|
|
return this.tag == null ? 0 : this.tag.getInt("Damage");
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java
|
|
index 069ce59faab5184ab9da8ca3fe1cebf7449cd7fe..b391b6f457b9a2df9d59eac46473576b809bd95e 100644
|
|
--- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java
|
|
+++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java
|
|
@@ -246,6 +246,29 @@ public class EnchantmentHelper {
|
|
return getItemEnchantmentLevel(Enchantments.CHANNELING, stack) > 0;
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ @Nullable
|
|
+ public static Entry<EquipmentSlot, ItemStack> getMostDamagedEquipment(Enchantment enchantment, LivingEntity entity) {
|
|
+ Map<EquipmentSlot, ItemStack> map = enchantment.getSlotItems(entity);
|
|
+ if (map.isEmpty()) {
|
|
+ return null;
|
|
+ }
|
|
+ Entry<EquipmentSlot, ItemStack> item = null;
|
|
+ float maxPercent = 0F;
|
|
+ for (Entry<EquipmentSlot, ItemStack> entry : map.entrySet()) {
|
|
+ ItemStack itemstack = entry.getValue();
|
|
+ if (!itemstack.isEmpty() && itemstack.isDamaged() && getItemEnchantmentLevel(enchantment, itemstack) > 0) {
|
|
+ float percent = itemstack.getDamagePercent();
|
|
+ if (item == null || percent > maxPercent) {
|
|
+ item = entry;
|
|
+ maxPercent = percent;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ return item;
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
public static @javax.annotation.Nonnull ItemStack getRandomEquippedItemWithEnchant(Enchantment enchantment, LivingEntity entityliving) {
|
|
Entry<EquipmentSlot, ItemStack> entry = getRandomItemWith(enchantment, entityliving);
|
|
return entry != null ? entry.getValue() : ItemStack.EMPTY;
|
|
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
index 3e0554e65c50f0edba3abeababbd07ffb398c5e3..9e881f8aedfbe2bd258e11b042ef03370b3b4718 100644
|
|
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
@@ -73,6 +73,7 @@ public class PurpurWorldConfig {
|
|
armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
|
|
}
|
|
|
|
+ public boolean useBetterMending = false;
|
|
public boolean boatEjectPlayersOnLand = false;
|
|
public boolean disableDropsOnCrammingDeath = false;
|
|
public boolean entitiesPickUpLootBypassMobGriefing = false;
|
|
@@ -81,6 +82,7 @@ public class PurpurWorldConfig {
|
|
public double voidDamageHeight = -64.0D;
|
|
public double voidDamageDealt = 4.0D;
|
|
private void miscGameplayMechanicsSettings() {
|
|
+ useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
|
|
boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand);
|
|
disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath);
|
|
entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing);
|