Skip to content

Commit dd22eee

Browse files
BillyGalbreathgranny
authored andcommitted
Configurable ravager griefable blocks list
1 parent 4b00f67 commit dd22eee

5 files changed

Lines changed: 45 additions & 73 deletions

File tree

patches/server/0136-Configurable-ravager-griefable-blocks-list.patch

Lines changed: 0 additions & 68 deletions
This file was deleted.

purpur-server/minecraft-patches/features/0016-Add-mobGriefing-bypass-to-everything-affected.patch

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ index f6221829d213f103ffed9acbf9c6bc954ab6d539..a9303429be73841480f81a8a6687787e
157157
int alternativeTarget = Mth.floor(this.getBbWidth() / 2.0F + 1.0F);
158158
int floor = Mth.floor(this.getBbHeight());
159159
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
160-
index c845481aa48c4c0d670058866351e1c9f5a35fc6..7434c7bad021e474bf0ecbd1cb28a38b92f3586e 100644
160+
index 3fd2aed0cd425bee1211d1e56ded137501b6b25c..5decb422dbe94c7e8ff777bd11e2c33f0618978d 100644
161161
--- a/net/minecraft/world/entity/monster/EnderMan.java
162162
+++ b/net/minecraft/world/entity/monster/EnderMan.java
163163
@@ -515,7 +515,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -192,7 +192,7 @@ index d3d7e11a12af404d83e81888a9a633dfb93412ec..91574baf7ca095eae909e8e7225ad500
192192
} else {
193193
List<Sheep> nearbyEntities = serverLevel.getNearbyEntities(
194194
diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java
195-
index acfb473c0a085ed516ff25ebac366700c28c1ac0..e55dd03e881f622e9ca759dd1810a84af0e1861d 100644
195+
index 55ddffbea1b86fa0fd5c5f435a5f7633702c3e5b..b83886f2533026550759c823e1e11930665fc5bd 100644
196196
--- a/net/minecraft/world/entity/monster/Ravager.java
197197
+++ b/net/minecraft/world/entity/monster/Ravager.java
198198
@@ -174,7 +174,7 @@ public class Ravager extends Raider {
@@ -307,15 +307,15 @@ index 8270d76a753bfd26a4c8ef6610bee5c24ee59cfe..c06b589e669b055a26f662df60070d59
307307
return true;
308308
} else if (this.mob.getCurrentRaid().isOver()) {
309309
diff --git a/net/minecraft/world/level/block/CropBlock.java b/net/minecraft/world/level/block/CropBlock.java
310-
index bc0969f40814094e42a860a72314fccd1a66fabe..b4230c95f07020c5f848962d93fdf6bf454ae231 100644
310+
index 78597e2cb78d15846e24bf45d5b56d21dbf1b4a3..861c669e59a1c286fd03fbed41ab47cfc27cdb6b 100644
311311
--- a/net/minecraft/world/level/block/CropBlock.java
312312
+++ b/net/minecraft/world/level/block/CropBlock.java
313313
@@ -182,7 +182,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock {
314314
@Override
315315
protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) {
316316
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
317-
- if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit
318-
+ if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.purpurConfig.ravagerBypassMobGriefing == !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Purpur - Add mobGriefing bypass to everything affected
317+
- if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && serverLevel.purpurConfig.ravagerGriefableBlocks.contains(serverLevel.getBlockState(pos).getBlock()) && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Purpur - Configurable ravager griefable blocks list
318+
+ if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && serverLevel.purpurConfig.ravagerGriefableBlocks.contains(serverLevel.getBlockState(pos).getBlock()) && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.purpurConfig.ravagerBypassMobGriefing == !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Purpur - Configurable ravager griefable blocks list // Purpur - Add mobGriefing bypass to everything affected
319319
serverLevel.destroyBlock(pos, true, entity);
320320
}
321321

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--- a/net/minecraft/world/entity/monster/Ravager.java
2+
+++ b/net/minecraft/world/entity/monster/Ravager.java
3+
@@ -150,7 +_,7 @@
4+
)) {
5+
BlockState blockState = serverLevel.getBlockState(blockPos);
6+
Block block = blockState.getBlock();
7+
- if (block instanceof LeavesBlock) {
8+
+ if (this.level().purpurConfig.ravagerGriefableBlocks.contains(block)) { // Purpur - Configurable ravager griefable blocks list
9+
// CraftBukkit start
10+
if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockPos, blockState.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state
11+
continue;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--- a/net/minecraft/world/level/block/CropBlock.java
2+
+++ b/net/minecraft/world/level/block/CropBlock.java
3+
@@ -182,7 +_,7 @@
4+
@Override
5+
protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) {
6+
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
7+
- if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit
8+
+ if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && serverLevel.purpurConfig.ravagerGriefableBlocks.contains(serverLevel.getBlockState(pos).getBlock()) && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Purpur - Configurable ravager griefable blocks list
9+
serverLevel.destroyBlock(pos, true, entity);
10+
}
11+

purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,6 +1775,7 @@ private void rabbitSettings() {
17751775
public double ravagerScale = 1.0D;
17761776
public boolean ravagerBypassMobGriefing = false;
17771777
public boolean ravagerTakeDamageFromWater = false;
1778+
public List<Block> ravagerGriefableBlocks = new ArrayList<>();
17781779
private void ravagerSettings() {
17791780
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
17801781
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
@@ -1788,6 +1789,23 @@ private void ravagerSettings() {
17881789
ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D);
17891790
ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing);
17901791
ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater);
1792+
getList("mobs.ravager.griefable-blocks", new ArrayList<String>(){{
1793+
add("minecraft:oak_leaves");
1794+
add("minecraft:spruce_leaves");
1795+
add("minecraft:birch_leaves");
1796+
add("minecraft:jungle_leaves");
1797+
add("minecraft:acacia_leaves");
1798+
add("minecraft:dark_oak_leaves");
1799+
add("minecraft:beetroots");
1800+
add("minecraft:carrots");
1801+
add("minecraft:potatoes");
1802+
add("minecraft:wheat");
1803+
}}).forEach(key -> {
1804+
Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key.toString()));
1805+
if (!block.defaultBlockState().isAir()) {
1806+
ravagerGriefableBlocks.add(block);
1807+
}
1808+
});
17911809
}
17921810

17931811
public boolean salmonRidable = false;

0 commit comments

Comments
 (0)