Files
Purpur/patches/server/0197-Armor-click-equip-options.patch
Krakenied fff2015d52 Updated Upstream (Paper) (#1174)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@7b3b593 [ci skip] Update checkout action in workflow (#8510)
PaperMC/Paper@36869cc Fix new block data in EntityChangeBlockEvent for silverfish when mobGriefing isn't enabled (#8099)
PaperMC/Paper@2432233 Add allow server listing & text filtering client options (#7595)
PaperMC/Paper@954e6f0 Fix a bunch more forceDrops for dropping items (#8095)
PaperMC/Paper@32d95e9 Track projectile source for fireworks from dispensers (#8044)
PaperMC/Paper@0249750 Fix EntityArgument suggestion permissions to align with EntitySelector#checkPermissions (#8511)
PaperMC/Paper@8acb05d Make CommandSyntaxException implement ComponentMessageThrowable (#8513)
PaperMC/Paper@c264018 [ci skip] Undo modification to removed patches in latest commit (#8512)
PaperMC/Paper@304ab35 [ci skip] Remove old todo file
PaperMC/Paper@8a4b752 Fix wrong descriptor in ASMEventExecutorGenerator (#8506)
PaperMC/Paper@b743144 Fix MC-147659 (#8423)
PaperMC/Paper@aaf5e39 Deprecate unused VehicleEntityCollisionEvent methods (#8498)
2022-10-29 22:47:43 -07:00

82 lines
5.2 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Encode42 <me@encode42.dev>
Date: Mon, 28 Jun 2021 15:32:57 -0400
Subject: [PATCH] Armor click equip options
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
index 61a4219f286a81af3e108f83658838c2464fdec7..9f8995c559b500415ec8d214f7c164707046f6ac 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -482,7 +482,7 @@ public class ServerPlayerGameMode {
player.setItemInHand(hand, itemstack1);
}
- if (this.isCreative()) {
+ if (this.isCreative() && itemstack1 != ItemStack.EMPTY) { // Purpur
itemstack1.setCount(i);
if (itemstack1.isDamageableItem() && itemstack1.getDamageValue() != j) {
itemstack1.setDamageValue(j);
diff --git a/src/main/java/net/minecraft/world/item/ArmorItem.java b/src/main/java/net/minecraft/world/item/ArmorItem.java
index 014dd3aa8a7313d978d4781a1b7c6f532ff04962..feeb5fc192da4d7b11c26abf628dc9da2c593a85 100644
--- a/src/main/java/net/minecraft/world/item/ArmorItem.java
+++ b/src/main/java/net/minecraft/world/item/ArmorItem.java
@@ -145,7 +145,14 @@ public class ArmorItem extends Item implements Wearable {
}
itemstack.setCount(0);
- return InteractionResultHolder.sidedSuccess(itemstack, world.isClientSide());
+ // Purpur start
+ return InteractionResultHolder.success(world.purpurConfig.playerArmorSwappingCreativeMakesCopy ? itemstack : ItemStack.EMPTY);
+ } else if (world.purpurConfig.playerArmorSwapping && !net.minecraft.world.item.enchantment.EnchantmentHelper.hasBindingCurse(itemstack1)) {
+ user.setItemSlot(enumitemslot, itemstack);
+ user.awardStat(Stats.ITEM_USED.get(this));
+ user.level.playSound(null, user.getX(), user.getY(), user.getZ(), itemstack.getEquipSound(), net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F); // we have to force the sound, for whatever reason
+ return InteractionResultHolder.success(itemstack1);
+ // Purpur end
} else {
return InteractionResultHolder.fail(itemstack);
}
diff --git a/src/main/java/net/minecraft/world/item/ElytraItem.java b/src/main/java/net/minecraft/world/item/ElytraItem.java
index 42f79d418ec4e2dbeac9a217d9dc144cda2ef714..250c0e31825f772d3fee7a523f150cb25e8ae558 100644
--- a/src/main/java/net/minecraft/world/item/ElytraItem.java
+++ b/src/main/java/net/minecraft/world/item/ElytraItem.java
@@ -39,7 +39,14 @@ public class ElytraItem extends Item implements Wearable {
}
itemStack.setCount(0);
- return InteractionResultHolder.sidedSuccess(itemStack, world.isClientSide());
+ // Purpur start
+ return InteractionResultHolder.success(world.purpurConfig.playerArmorSwappingCreativeMakesCopy ? itemStack : ItemStack.EMPTY);
+ } else if (world.purpurConfig.playerArmorSwapping) {
+ user.setItemSlot(equipmentSlot, itemStack);
+ user.awardStat(Stats.ITEM_USED.get(this));
+ user.level.playSound(null, user.getX(), user.getY(), user.getZ(), itemStack.getEquipSound(), net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F); // we have to force the sound, for whatever reason
+ return InteractionResultHolder.success(itemStack2);
+ // Purpur end
} else {
return InteractionResultHolder.fail(itemStack);
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 81d9089d366a651062156eb73b57829ed397c8ed..a838a433646c7ba01e5861978319d85287441b78 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -393,6 +393,8 @@ public class PurpurWorldConfig {
public double playerCriticalDamageMultiplier = 1.5D;
public int playerBurpDelay = 10;
public boolean playerBurpWhenFull = false;
+ public boolean playerArmorSwapping = false;
+ public boolean playerArmorSwappingCreativeMakesCopy = true;
private void playerSettings() {
if (PurpurConfig.version < 19) {
boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer);
@@ -417,6 +419,8 @@ public class PurpurWorldConfig {
playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier);
playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay);
playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull);
+ playerArmorSwapping = getBoolean("gameplay-mechanics.player.armor-click-equip.allow-hot-swapping", playerArmorSwapping);
+ playerArmorSwappingCreativeMakesCopy = getBoolean("gameplay-mechanics.player.armor-click-equip.creative-makes-copy", playerArmorSwappingCreativeMakesCopy);
}
private static boolean projectileDespawnRateSettingsMigrated = false;