From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Encode42 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 ac151f2e519a3544f38b9c6ef87c41a2bf4e9c4c..c42e6e74075f9513d3b3f2006fb5117743289516 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -509,7 +509,7 @@ public class ServerPlayerGameMode { return interactionresultwrapper.getResult(); } else { 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 10dcb1623caa995922bba0a96f73907e05772e9c..d8fb8dc520ba0b88239c0d4c3f731c0567c422cd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -383,6 +383,8 @@ public class PurpurWorldConfig { public boolean playersSkipNight = true; public double playerCriticalDamageMultiplier = 1.5D; 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); @@ -406,6 +408,8 @@ public class PurpurWorldConfig { playersSkipNight = getBoolean("gameplay-mechanics.player.can-skip-night", playersSkipNight); playerCriticalDamageMultiplier = getDouble("gameplay-mechanics.player.critical-damage-multiplier", playerCriticalDamageMultiplier); 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); } public int snowballDamage = -1;