mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Configurable ravager griefable blocks list
This commit is contained in:
committed by
granny
parent
b24d5884b5
commit
8ce515aec4
@@ -1,68 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
||||||
Date: Wed, 17 Mar 2021 14:54:43 -0500
|
|
||||||
Subject: [PATCH] Configurable ravager griefable blocks list
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java
|
|
||||||
index 39081629685e3c7cd109626d1d61ce24b6afb860..7fb2af68c101dc12e60f120da1bb5c1efd20d164 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/Ravager.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/Ravager.java
|
|
||||||
@@ -198,7 +198,7 @@ public class Ravager extends Raider {
|
|
||||||
BlockState iblockdata = worldserver.getBlockState(blockposition);
|
|
||||||
Block block = iblockdata.getBlock();
|
|
||||||
|
|
||||||
- if (block instanceof LeavesBlock) {
|
|
||||||
+ if (this.level().purpurConfig.ravagerGriefableBlocks.contains(block)) { // Purpur - Configurable ravager griefable blocks list
|
|
||||||
// CraftBukkit start
|
|
||||||
if (!CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state
|
|
||||||
continue;
|
|
||||||
diff --git a/net/minecraft/world/level/block/CropBlock.java b/net/minecraft/world/level/block/CropBlock.java
|
|
||||||
index e1cfad4834fdee910bf261a60e2b76678a0fec6d..00a06146e119a47eeaf66d240b8dd84e38498676 100644
|
|
||||||
--- a/net/minecraft/world/level/block/CropBlock.java
|
|
||||||
+++ b/net/minecraft/world/level/block/CropBlock.java
|
|
||||||
@@ -180,7 +180,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock {
|
|
||||||
protected void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) {
|
|
||||||
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
|
|
||||||
if (world instanceof ServerLevel worldserver) {
|
|
||||||
- if (entity instanceof Ravager && CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !world.purpurConfig.ravagerBypassMobGriefing == !worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
+ if (entity instanceof Ravager && world.purpurConfig.ravagerGriefableBlocks.contains(world.getBlockState(pos).getBlock()) && CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !world.purpurConfig.ravagerBypassMobGriefing == !worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Purpur - Add mobGriefing bypass to everything affected // Purpur - Configurable ravager griefable blocks list
|
|
||||||
worldserver.destroyBlock(pos, true, entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
index 36262ccf9c5d308230ad112078d14a78f41243bd..99a1c69938be124ad6fd1ae9a96024cc9fafd62c 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -1783,6 +1783,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double ravagerScale = 1.0D;
|
|
||||||
public boolean ravagerBypassMobGriefing = false;
|
|
||||||
public boolean ravagerTakeDamageFromWater = false;
|
|
||||||
+ public List<Block> ravagerGriefableBlocks = new ArrayList<>();
|
|
||||||
private void ravagerSettings() {
|
|
||||||
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
|
|
||||||
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
|
|
||||||
@@ -1796,6 +1797,23 @@ public class PurpurWorldConfig {
|
|
||||||
ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D);
|
|
||||||
ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing);
|
|
||||||
ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater);
|
|
||||||
+ getList("mobs.ravager.griefable-blocks", new ArrayList<String>(){{
|
|
||||||
+ 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:beetroots");
|
|
||||||
+ add("minecraft:carrots");
|
|
||||||
+ add("minecraft:potatoes");
|
|
||||||
+ add("minecraft:wheat");
|
|
||||||
+ }}).forEach(key -> {
|
|
||||||
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key.toString()));
|
|
||||||
+ if (!block.defaultBlockState().isAir()) {
|
|
||||||
+ ravagerGriefableBlocks.add(block);
|
|
||||||
+ }
|
|
||||||
+ });
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean salmonRidable = false;
|
|
||||||
@@ -157,7 +157,7 @@ index f6221829d213f103ffed9acbf9c6bc954ab6d539..a9303429be73841480f81a8a6687787e
|
|||||||
int alternativeTarget = Mth.floor(this.getBbWidth() / 2.0F + 1.0F);
|
int alternativeTarget = Mth.floor(this.getBbWidth() / 2.0F + 1.0F);
|
||||||
int floor = Mth.floor(this.getBbHeight());
|
int floor = Mth.floor(this.getBbHeight());
|
||||||
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
|
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
|
||||||
index c845481aa48c4c0d670058866351e1c9f5a35fc6..7434c7bad021e474bf0ecbd1cb28a38b92f3586e 100644
|
index 3fd2aed0cd425bee1211d1e56ded137501b6b25c..5decb422dbe94c7e8ff777bd11e2c33f0618978d 100644
|
||||||
--- a/net/minecraft/world/entity/monster/EnderMan.java
|
--- a/net/minecraft/world/entity/monster/EnderMan.java
|
||||||
+++ b/net/minecraft/world/entity/monster/EnderMan.java
|
+++ b/net/minecraft/world/entity/monster/EnderMan.java
|
||||||
@@ -515,7 +515,7 @@ public class EnderMan extends Monster implements NeutralMob {
|
@@ -515,7 +515,7 @@ public class EnderMan extends Monster implements NeutralMob {
|
||||||
@@ -192,7 +192,7 @@ index d3d7e11a12af404d83e81888a9a633dfb93412ec..91574baf7ca095eae909e8e7225ad500
|
|||||||
} else {
|
} else {
|
||||||
List<Sheep> nearbyEntities = serverLevel.getNearbyEntities(
|
List<Sheep> nearbyEntities = serverLevel.getNearbyEntities(
|
||||||
diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java
|
diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java
|
||||||
index acfb473c0a085ed516ff25ebac366700c28c1ac0..e55dd03e881f622e9ca759dd1810a84af0e1861d 100644
|
index 55ddffbea1b86fa0fd5c5f435a5f7633702c3e5b..b83886f2533026550759c823e1e11930665fc5bd 100644
|
||||||
--- a/net/minecraft/world/entity/monster/Ravager.java
|
--- a/net/minecraft/world/entity/monster/Ravager.java
|
||||||
+++ b/net/minecraft/world/entity/monster/Ravager.java
|
+++ b/net/minecraft/world/entity/monster/Ravager.java
|
||||||
@@ -174,7 +174,7 @@ public class Ravager extends Raider {
|
@@ -174,7 +174,7 @@ public class Ravager extends Raider {
|
||||||
@@ -307,15 +307,15 @@ index 8270d76a753bfd26a4c8ef6610bee5c24ee59cfe..c06b589e669b055a26f662df60070d59
|
|||||||
return true;
|
return true;
|
||||||
} else if (this.mob.getCurrentRaid().isOver()) {
|
} else if (this.mob.getCurrentRaid().isOver()) {
|
||||||
diff --git a/net/minecraft/world/level/block/CropBlock.java b/net/minecraft/world/level/block/CropBlock.java
|
diff --git a/net/minecraft/world/level/block/CropBlock.java b/net/minecraft/world/level/block/CropBlock.java
|
||||||
index bc0969f40814094e42a860a72314fccd1a66fabe..b4230c95f07020c5f848962d93fdf6bf454ae231 100644
|
index 78597e2cb78d15846e24bf45d5b56d21dbf1b4a3..861c669e59a1c286fd03fbed41ab47cfc27cdb6b 100644
|
||||||
--- a/net/minecraft/world/level/block/CropBlock.java
|
--- a/net/minecraft/world/level/block/CropBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/CropBlock.java
|
+++ b/net/minecraft/world/level/block/CropBlock.java
|
||||||
@@ -182,7 +182,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock {
|
@@ -182,7 +182,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock {
|
||||||
@Override
|
@Override
|
||||||
protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) {
|
protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) {
|
||||||
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
|
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
|
||||||
- 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
|
- 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
|
||||||
+ 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
|
+ 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
|
||||||
serverLevel.destroyBlock(pos, true, entity);
|
serverLevel.destroyBlock(pos, true, entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
--- a/net/minecraft/world/entity/monster/Ravager.java
|
||||||
|
+++ b/net/minecraft/world/entity/monster/Ravager.java
|
||||||
|
@@ -150,7 +_,7 @@
|
||||||
|
)) {
|
||||||
|
BlockState blockState = serverLevel.getBlockState(blockPos);
|
||||||
|
Block block = blockState.getBlock();
|
||||||
|
- if (block instanceof LeavesBlock) {
|
||||||
|
+ if (this.level().purpurConfig.ravagerGriefableBlocks.contains(block)) { // Purpur - Configurable ravager griefable blocks list
|
||||||
|
// CraftBukkit start
|
||||||
|
if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockPos, blockState.getFluidState().createLegacyBlock())) { // Paper - fix wrong block state
|
||||||
|
continue;
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
--- a/net/minecraft/world/level/block/CropBlock.java
|
||||||
|
+++ b/net/minecraft/world/level/block/CropBlock.java
|
||||||
|
@@ -182,7 +_,7 @@
|
||||||
|
@Override
|
||||||
|
protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) {
|
||||||
|
if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent
|
||||||
|
- 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
|
||||||
|
+ 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
|
||||||
|
serverLevel.destroyBlock(pos, true, entity);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1775,6 +1775,7 @@ public class PurpurWorldConfig {
|
|||||||
public double ravagerScale = 1.0D;
|
public double ravagerScale = 1.0D;
|
||||||
public boolean ravagerBypassMobGriefing = false;
|
public boolean ravagerBypassMobGriefing = false;
|
||||||
public boolean ravagerTakeDamageFromWater = false;
|
public boolean ravagerTakeDamageFromWater = false;
|
||||||
|
public List<Block> ravagerGriefableBlocks = new ArrayList<>();
|
||||||
private void ravagerSettings() {
|
private void ravagerSettings() {
|
||||||
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
|
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
|
||||||
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
|
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
|
||||||
@@ -1788,6 +1789,23 @@ public class PurpurWorldConfig {
|
|||||||
ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D);
|
ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D);
|
||||||
ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing);
|
ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing);
|
||||||
ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater);
|
ravagerTakeDamageFromWater = getBoolean("mobs.ravager.takes-damage-from-water", ravagerTakeDamageFromWater);
|
||||||
|
getList("mobs.ravager.griefable-blocks", new ArrayList<String>(){{
|
||||||
|
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:beetroots");
|
||||||
|
add("minecraft:carrots");
|
||||||
|
add("minecraft:potatoes");
|
||||||
|
add("minecraft:wheat");
|
||||||
|
}}).forEach(key -> {
|
||||||
|
Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key.toString()));
|
||||||
|
if (!block.defaultBlockState().isAir()) {
|
||||||
|
ravagerGriefableBlocks.add(block);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean salmonRidable = false;
|
public boolean salmonRidable = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user