mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 08:27:43 +01:00
161 lines
11 KiB
Diff
161 lines
11 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: BillyGalbreath <Blake.Galbreath@Gmail.com>
|
|
Date: Mon, 3 Jan 2022 00:06:51 -0600
|
|
Subject: [PATCH] Shears can have looting enchantment
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
|
|
index a024c697a65bbab27408da1d6a75e531d9719b47..e4fab82b369f2c2ea0d8c8acd814d06140d551fc 100644
|
|
--- a/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
|
|
+++ b/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java
|
|
@@ -105,7 +105,7 @@ public class ShearsDispenseItemBehavior extends OptionalDispenseItemBehavior {
|
|
if (ishearable.readyForShearing()) {
|
|
// CraftBukkit start
|
|
// Paper start - Add drops to shear events
|
|
- org.bukkit.event.block.BlockShearEntityEvent event = CraftEventFactory.callBlockShearEntityEvent(entityliving, bukkitBlock, craftItem, ishearable.generateDefaultDrops());
|
|
+ org.bukkit.event.block.BlockShearEntityEvent event = CraftEventFactory.callBlockShearEntityEvent(entityliving, bukkitBlock, craftItem, ishearable.generateDefaultDrops(net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.LOOTING, CraftItemStack.asNMSCopy(craftItem)))); // Purpur
|
|
if (event.isCancelled()) {
|
|
// Paper end - Add drops to shear events
|
|
continue;
|
|
diff --git a/src/main/java/net/minecraft/world/entity/Shearable.java b/src/main/java/net/minecraft/world/entity/Shearable.java
|
|
index 2ee48ac3b665db2b02bcb1a30ec972d43a3725b0..59e8f5431ce5026209e1428b5fa5b5485dcfebc7 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/Shearable.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/Shearable.java
|
|
@@ -8,7 +8,7 @@ public interface Shearable {
|
|
|
|
boolean readyForShearing();
|
|
// Paper start - custom shear drops; ensure all implementing entities override this
|
|
- default java.util.List<net.minecraft.world.item.ItemStack> generateDefaultDrops() {
|
|
+ default java.util.List<net.minecraft.world.item.ItemStack> generateDefaultDrops(int looting) { // Purpur
|
|
return java.util.Collections.emptyList();
|
|
}
|
|
// Paper end - custom shear drops
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
|
|
index 06fac8dae42451f912c2db14d792461cee3dba83..a7c95199234231db14faa4a07953bcde57d9861d 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java
|
|
@@ -161,7 +161,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder<Mushroo
|
|
} else if (itemstack.is(Items.SHEARS) && this.readyForShearing()) {
|
|
// CraftBukkit start
|
|
// Paper start - custom shear drops
|
|
- java.util.List<ItemStack> drops = this.generateDefaultDrops();
|
|
+ java.util.List<ItemStack> drops = this.generateDefaultDrops(net.minecraft.world.item.enchantment.EnchantmentHelper.getMobLooting(player)); // Purpur
|
|
org.bukkit.event.player.PlayerShearEntityEvent event = CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand, drops);
|
|
if (event != null) {
|
|
if (event.isCancelled()) {
|
|
@@ -209,13 +209,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder<Mushroo
|
|
@Override
|
|
public void shear(SoundSource shearedSoundCategory) {
|
|
// Paper start - custom shear drops
|
|
- this.shear(shearedSoundCategory, this.generateDefaultDrops());
|
|
+ this.shear(shearedSoundCategory, this.generateDefaultDrops(0)); // Purpur
|
|
}
|
|
|
|
@Override
|
|
- public java.util.List<ItemStack> generateDefaultDrops() {
|
|
+ public java.util.List<ItemStack> generateDefaultDrops(int looting) { // Purpur
|
|
java.util.List<ItemStack> dropEntities = new java.util.ArrayList<>(5);
|
|
- for (int i = 0; i < 5; ++i) {
|
|
+ for (int i = 0; i < 5 + (org.purpurmc.purpur.PurpurConfig.allowShearsLooting ? looting : 0); ++i) { // Purpur
|
|
dropEntities.add(new ItemStack(this.getVariant().getBlockState().getBlock()));
|
|
}
|
|
return dropEntities;
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
|
|
index 9e617b3f1ec4eac5f83bdf19a3563cdc81b008d8..6b1244d3957e7f62c96ffd34692b8916337839fd 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java
|
|
@@ -297,7 +297,7 @@ public class Sheep extends Animal implements Shearable {
|
|
if (!this.level().isClientSide && this.readyForShearing()) {
|
|
// CraftBukkit start
|
|
// Paper start - custom shear drops
|
|
- java.util.List<ItemStack> drops = this.generateDefaultDrops();
|
|
+ java.util.List<ItemStack> drops = this.generateDefaultDrops(net.minecraft.world.item.enchantment.EnchantmentHelper.getMobLooting(player)); // Purpur
|
|
org.bukkit.event.player.PlayerShearEntityEvent event = CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand, drops);
|
|
if (event != null) {
|
|
if (event.isCancelled()) {
|
|
@@ -322,12 +322,13 @@ public class Sheep extends Animal implements Shearable {
|
|
@Override
|
|
public void shear(SoundSource shearedSoundCategory) {
|
|
// Paper start - custom shear drops
|
|
- this.shear(shearedSoundCategory, this.generateDefaultDrops());
|
|
+ this.shear(shearedSoundCategory, this.generateDefaultDrops(0)); // Purpur
|
|
}
|
|
|
|
@Override
|
|
- public java.util.List<ItemStack> generateDefaultDrops() {
|
|
+ public java.util.List<ItemStack> generateDefaultDrops(int looting) { // Purpur
|
|
int count = 1 + this.random.nextInt(3);
|
|
+ if (org.purpurmc.purpur.PurpurConfig.allowShearsLooting) count += looting; // Purpur
|
|
java.util.List<ItemStack> dropEntities = new java.util.ArrayList<>(count);
|
|
for (int j = 0; j < count; ++j) {
|
|
dropEntities.add(new ItemStack(Sheep.ITEM_BY_DYE.get(this.getColor())));
|
|
diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
|
|
index 69cdccca01fe7d10e6d958e16d91efe08f699505..3b74931ae4e3a869d8db38c119e57b44af887859 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java
|
|
@@ -189,7 +189,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
|
|
if (itemstack.is(Items.SHEARS) && this.readyForShearing()) {
|
|
// CraftBukkit start
|
|
// Paper start - custom shear drops
|
|
- java.util.List<ItemStack> drops = this.generateDefaultDrops();
|
|
+ java.util.List<ItemStack> drops = this.generateDefaultDrops(net.minecraft.world.item.enchantment.EnchantmentHelper.getMobLooting(player)); // Purpur
|
|
org.bukkit.event.player.PlayerShearEntityEvent event = CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand, drops);
|
|
if (event != null) {
|
|
if (event.isCancelled()) {
|
|
@@ -222,11 +222,20 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
|
|
@Override
|
|
public void shear(SoundSource shearedSoundCategory) {
|
|
// Paper start - custom shear drops
|
|
- this.shear(shearedSoundCategory, this.generateDefaultDrops());
|
|
+ this.shear(shearedSoundCategory, this.generateDefaultDrops(0)); // Purpur
|
|
}
|
|
|
|
@Override
|
|
- public java.util.List<ItemStack> generateDefaultDrops() {
|
|
+ // Purpur start
|
|
+ public java.util.List<ItemStack> generateDefaultDrops(int looting) {
|
|
+ if (org.purpurmc.purpur.PurpurConfig.allowShearsLooting) {
|
|
+ java.util.ArrayList<ItemStack> list = new java.util.ArrayList<>();
|
|
+ for (int i = 0; i < 1 + looting; i++) {
|
|
+ list.add(new ItemStack(Items.CARVED_PUMPKIN));
|
|
+ }
|
|
+ return java.util.Collections.unmodifiableList(list);
|
|
+ }
|
|
+ // Purpur end
|
|
return java.util.Collections.singletonList(new ItemStack(Items.CARVED_PUMPKIN));
|
|
}
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/monster/Bogged.java b/src/main/java/net/minecraft/world/entity/monster/Bogged.java
|
|
index ebec95ca146591f170d9e31bbc774e88806269a2..fed6e686c29ad0117731a80294e6725f41d8bf77 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/monster/Bogged.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/monster/Bogged.java
|
|
@@ -181,7 +181,7 @@ public class Bogged extends AbstractSkeleton implements Shearable {
|
|
|
|
// Paper start - shear drops API
|
|
@Override
|
|
- public java.util.List<ItemStack> generateDefaultDrops() {
|
|
+ public java.util.List<ItemStack> generateDefaultDrops(int looting) { // Purpur
|
|
final java.util.List<ItemStack> drops = new java.util.ArrayList<>();
|
|
this.generateShearedMushrooms(drops::add);
|
|
return drops;
|
|
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
index 15d6e06c21643eb57386e3f0c0e89fcb7ac77c4b..9f128a6a76ee2297e8efdf9371d74fc7998328ce 100644
|
|
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
@@ -391,6 +391,7 @@ public class PurpurConfig {
|
|
|
|
public static boolean allowInfinityMending = false;
|
|
public static boolean allowCrossbowInfinity = true;
|
|
+ public static boolean allowShearsLooting = false;
|
|
public static boolean allowUnsafeEnchants = false;
|
|
public static boolean allowInapplicableEnchants = true;
|
|
public static boolean allowIncompatibleEnchants = true;
|
|
@@ -413,6 +414,7 @@ public class PurpurConfig {
|
|
}
|
|
allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending);
|
|
allowCrossbowInfinity = getBoolean("settings.enchantment.allow-infinity-on-crossbow", allowCrossbowInfinity);
|
|
+ allowShearsLooting = getBoolean("settings.enchantment.allow-looting-on-shears", allowShearsLooting);
|
|
allowUnsafeEnchants = getBoolean("settings.enchantment.anvil.allow-unsafe-enchants", allowUnsafeEnchants);
|
|
allowInapplicableEnchants = getBoolean("settings.enchantment.anvil.allow-inapplicable-enchants", allowInapplicableEnchants);
|
|
allowIncompatibleEnchants = getBoolean("settings.enchantment.anvil.allow-incompatible-enchants", allowIncompatibleEnchants);
|