diff --git a/patches/server/0185-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0185-Configurable-ravager-griefable-blocks-list.patch new file mode 100644 index 000000000..e03fc84c0 --- /dev/null +++ b/patches/server/0185-Configurable-ravager-griefable-blocks-list.patch @@ -0,0 +1,67 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Wed, 17 Mar 2021 14:54:43 -0500 +Subject: [PATCH] Configurable ravager griefable blocks list + + +diff --git a/src/main/java/net/minecraft/server/BlockCrops.java b/src/main/java/net/minecraft/server/BlockCrops.java +index d49c309d7c31b3be0a21544ba23c0fd663f3317b..0fd8f9c6c77900fd4f46a439bae6a34487678c49 100644 +--- a/src/main/java/net/minecraft/server/BlockCrops.java ++++ b/src/main/java/net/minecraft/server/BlockCrops.java +@@ -144,7 +144,7 @@ public class BlockCrops extends BlockPlant implements IBlockFragilePlantElement + + @Override + public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Entity entity) { +- if (entity instanceof EntityRavager && !CraftEventFactory.callEntityChangeBlockEvent(entity, blockposition, Blocks.AIR.getBlockData(), (!world.purpurConfig.ravagerBypassMobGriefing && !world.getGameRules().getBoolean(GameRules.MOB_GRIEFING))).isCancelled()) { // CraftBukkit // Purpur ++ if (entity instanceof EntityRavager && world.purpurConfig.ravagerGriefableBlocks.contains(world.getType(blockposition).getBlock()) && !CraftEventFactory.callEntityChangeBlockEvent(entity, blockposition, Blocks.AIR.getBlockData(), (!world.purpurConfig.ravagerBypassMobGriefing && !world.getGameRules().getBoolean(GameRules.MOB_GRIEFING))).isCancelled()) { // CraftBukkit // Purpur + world.a(blockposition, true, entity); + } + +diff --git a/src/main/java/net/minecraft/server/EntityRavager.java b/src/main/java/net/minecraft/server/EntityRavager.java +index 3606440e41ab3193fadebb455c0967dbc0ccbb63..e6d3f705f499d07158b15b2a65235d5c2ff0a4fe 100644 +--- a/src/main/java/net/minecraft/server/EntityRavager.java ++++ b/src/main/java/net/minecraft/server/EntityRavager.java +@@ -147,7 +147,7 @@ public class EntityRavager extends EntityRaider { + IBlockData iblockdata = this.world.getType(blockposition); + Block block = iblockdata.getBlock(); + +- if (block instanceof BlockLeaves && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, Blocks.AIR.getBlockData()).isCancelled()) { // CraftBukkit ++ if (world.purpurConfig.ravagerGriefableBlocks.contains(block) && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, Blocks.AIR.getBlockData()).isCancelled()) { // CraftBukkit // Purpur + flag = this.world.a(blockposition, true, this) || flag; + } + } +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 4968223d4711e6fea414ee7fba4904f5fc35c074..0200fe21c16449312cf286b5da862528292a1d75 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -1404,6 +1404,7 @@ public class PurpurWorldConfig { + public boolean ravagerRidableInWater = false; + public boolean ravagerBypassMobGriefing = false; + public double ravagerMaxHealth = 100.0D; ++ public List ravagerGriefableBlocks = new ArrayList<>(); + private void ravagerSettings() { + ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); + ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); +@@ -1414,6 +1415,22 @@ public class PurpurWorldConfig { + set("mobs.ravager.attributes.max_health", oldValue); + } + ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); ++ getList("mobs.ravager.griefable-blocks", new ArrayList(){{ ++ add("minecraft:oak_leaves"); ++ add("minecraft:spruce_leaves"); ++ add("minecraft:birch_leaves"); ++ add("minecraft:jungle_leaves"); ++ add("minecraft:acacia_leaves"); ++ add("minecraft:dark_oak_leaves"); ++ add("minecraft:leaves"); ++ add("minecraft:leaves"); ++ add("minecraft:leaves"); ++ }}).forEach(key -> { ++ Block block = IRegistry.BLOCK.get(new MinecraftKey(key.toString())); ++ if (!block.getBlockData().isAir()) { ++ ravagerGriefableBlocks.add(block); ++ } ++ }); + } + + public boolean salmonRidable = false;