mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-19 09:27:43 +01:00
port Add mobGriefing bypass to everything affected patch
This commit is contained in:
@@ -1,684 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Encode42 <me@encode42.dev>
|
|
||||||
Date: Tue, 5 Jan 2021 22:21:56 -0500
|
|
||||||
Subject: [PATCH] Add mobGriefing bypass to everything affected
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
|
|
||||||
index dfbb47c200dab7d99cde867c12420c67964867c2..c513e6de7d89992720fc4139969377c261571b72 100644
|
|
||||||
--- a/net/minecraft/world/entity/LivingEntity.java
|
|
||||||
+++ b/net/minecraft/world/entity/LivingEntity.java
|
|
||||||
@@ -1901,7 +1901,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
|
||||||
boolean flag = false;
|
|
||||||
|
|
||||||
if (this.dead && adversary instanceof WitherBoss) { // Paper
|
|
||||||
- if (worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (worldserver.purpurConfig.witherBypassMobGriefing ^ worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
BlockPos blockposition = this.blockPosition();
|
|
||||||
BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState();
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
|
|
||||||
index 06fbac8a968971d9ec3305e98b136d88be19a9f7..6836f0ddab9d05d146fc03c234b1b58829ec96c0 100644
|
|
||||||
--- a/net/minecraft/world/entity/Mob.java
|
|
||||||
+++ b/net/minecraft/world/entity/Mob.java
|
|
||||||
@@ -714,7 +714,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
|
|
||||||
Level world = this.level();
|
|
||||||
|
|
||||||
if (world instanceof ServerLevel worldserver) {
|
|
||||||
- if (this.canPickUpLoot() && this.isAlive() && !this.dead && worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (this.canPickUpLoot() && this.isAlive() && !this.dead && (worldserver.purpurConfig.entitiesPickUpLootBypassMobGriefing ^ worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
Vec3i baseblockposition = this.getPickupReach();
|
|
||||||
List<ItemEntity> list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ()));
|
|
||||||
Iterator iterator = list.iterator();
|
|
||||||
diff --git a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java
|
|
||||||
index 4fa4ec34963730507253182cad1c2bf04090ad50..88b7de6c0ab5bf6ba2af7b4cee0393879c2a4fdc 100644
|
|
||||||
--- a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java
|
|
||||||
+++ b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java
|
|
||||||
@@ -48,7 +48,7 @@ public class HarvestFarmland extends Behavior<Villager> {
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean checkExtraStartConditions(ServerLevel world, Villager entity) {
|
|
||||||
- if (!world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (!world.purpurConfig.villagerBypassMobGriefing == !world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
return false;
|
|
||||||
} else if (entity.getVillagerData().getProfession() != VillagerProfession.FARMER && !(world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == VillagerProfession.CLERIC)) { // Purpur
|
|
||||||
return false;
|
|
||||||
diff --git a/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java b/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
|
|
||||||
index 7324da6b7dd2623ce394e3827ff77ef684a3b98b..a96f49641898aa16bdc99eed8a86497ddcd5a492 100644
|
|
||||||
--- a/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
|
|
||||||
+++ b/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
|
|
||||||
@@ -33,7 +33,7 @@ public class BreakDoorGoal extends DoorInteractGoal {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canUse() {
|
|
||||||
- return !super.canUse() ? false : (!getServerLevel((Entity) this.mob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? false : this.isValidDifficulty(this.mob.level().getDifficulty()) && !this.isOpen());
|
|
||||||
+ return !super.canUse() ? false : (!this.mob.level().purpurConfig.zombieBypassMobGriefing == !getServerLevel((Entity) this.mob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? false : this.isValidDifficulty(this.mob.level().getDifficulty()) && !this.isOpen()); // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
diff --git a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
|
||||||
index 32bb591371fe78ba10a2bc52389ef33978cbc0eb..6032eb2209d013b34c28eedd180583af3680fc69 100644
|
|
||||||
--- a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
|
||||||
+++ b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
|
||||||
@@ -74,7 +74,7 @@ public class EatBlockGoal extends Goal {
|
|
||||||
|
|
||||||
final BlockState blockState = this.level.getBlockState(blockposition); // Paper - fix wrong block state
|
|
||||||
if (EatBlockGoal.IS_TALL_GRASS.test(blockState)) { // Paper - fix wrong block state
|
|
||||||
- if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - fix wrong block state
|
|
||||||
+ if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).purpurConfig.sheepBypassMobGriefing == !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - fix wrong block state // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
this.level.destroyBlock(blockposition, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ public class EatBlockGoal extends Goal {
|
|
||||||
BlockPos blockposition1 = blockposition.below();
|
|
||||||
|
|
||||||
if (this.level.getBlockState(blockposition1).is(Blocks.GRASS_BLOCK)) {
|
|
||||||
- if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - Fix wrong block state
|
|
||||||
+ if (CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).purpurConfig.sheepBypassMobGriefing == !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - Fix wrong block state // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
this.level.levelEvent(2001, blockposition1, Block.getId(Blocks.GRASS_BLOCK.defaultBlockState()));
|
|
||||||
this.level.setBlock(blockposition1, Blocks.DIRT.defaultBlockState(), 2);
|
|
||||||
}
|
|
||||||
diff --git a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
|
||||||
index 9d245d08be61d7edee9138196ae3bf52023e3993..07e3e727e339765284095aa8fd6b5edd41dc4158 100644
|
|
||||||
--- a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
|
||||||
+++ b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
|
||||||
@@ -41,7 +41,7 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canUse() {
|
|
||||||
- if (!getServerLevel((Entity) this.removerMob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (!getServerLevel(this.removerMob).purpurConfig.zombieBypassMobGriefing == !getServerLevel((Entity) this.removerMob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
return false;
|
|
||||||
} else if (this.nextStartTick > 0) {
|
|
||||||
--this.nextStartTick;
|
|
||||||
diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java
|
|
||||||
index ce597675e973eb0d7ce580a2b4dfd76e7bb586b1..7770288abae40de80954ce47a15e609ee1b3a8bc 100644
|
|
||||||
--- a/net/minecraft/world/entity/animal/Fox.java
|
|
||||||
+++ b/net/minecraft/world/entity/animal/Fox.java
|
|
||||||
@@ -1372,7 +1372,7 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> {
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void onReachedTarget() {
|
|
||||||
- if (getServerLevel(Fox.this.level()).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (getServerLevel(Fox.this.level()).purpurConfig.foxBypassMobGriefing ^ getServerLevel(Fox.this.level()).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
BlockState iblockdata = Fox.this.level().getBlockState(this.blockPos);
|
|
||||||
|
|
||||||
if (iblockdata.is(Blocks.SWEET_BERRY_BUSH)) {
|
|
||||||
diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java
|
|
||||||
index 0b4a1a8b0a41aaa083995c2059a9ce8757d44144..c90bbf17639157e38dc2cada25677e22d63be12d 100644
|
|
||||||
--- a/net/minecraft/world/entity/animal/Rabbit.java
|
|
||||||
+++ b/net/minecraft/world/entity/animal/Rabbit.java
|
|
||||||
@@ -636,7 +636,7 @@ public class Rabbit extends Animal implements VariantHolder<Rabbit.Variant> {
|
|
||||||
@Override
|
|
||||||
public boolean canUse() {
|
|
||||||
if (this.nextStartTick <= 0) {
|
|
||||||
- if (!getServerLevel((Entity) this.rabbit).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (!getServerLevel((Entity) this.rabbit).purpurConfig.rabbitBypassMobGriefing == !getServerLevel((Entity) this.rabbit).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java
|
|
||||||
index d13d8d251af99289a66934ef04c7dfb9bf0611a2..1c73b81053551b2aa2817f9629bc7b4050e8f070 100644
|
|
||||||
--- a/net/minecraft/world/entity/animal/SnowGolem.java
|
|
||||||
+++ b/net/minecraft/world/entity/animal/SnowGolem.java
|
|
||||||
@@ -132,7 +132,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
|
|
||||||
this.hurtServer(worldserver, this.damageSources().melting(), 1.0F); // CraftBukkit - DamageSources.ON_FIRE -> CraftEventFactory.MELTING
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (!worldserver.purpurConfig.snowGolemBypassMobGriefing == !worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
|
|
||||||
index 14feab288349f0fcd80b89466926b37d1087bf53..b7ba6c303826e35ee1261cb46f1e778af29a59e5 100644
|
|
||||||
--- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
|
|
||||||
+++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
|
|
||||||
@@ -592,7 +592,7 @@ public class EnderDragon extends Mob implements Enemy {
|
|
||||||
BlockState iblockdata = world.getBlockState(blockposition);
|
|
||||||
|
|
||||||
if (!iblockdata.isAir() && !iblockdata.is(BlockTags.DRAGON_TRANSPARENT)) {
|
|
||||||
- if (world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && !iblockdata.is(BlockTags.DRAGON_IMMUNE)) {
|
|
||||||
+ if ((world.purpurConfig.enderDragonBypassMobGriefing ^ world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && !iblockdata.is(BlockTags.DRAGON_IMMUNE)) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
// CraftBukkit start - Add blocks to list rather than destroying them
|
|
||||||
// flag1 = worldserver.removeBlock(blockposition, false) || flag1;
|
|
||||||
flag1 = true;
|
|
||||||
diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
|
||||||
index 098ef0d6879e88009193c6dcedf1aa285980cbc6..297a67e8a8c1e314ad7f8d32d5bcacc3746b0b6c 100644
|
|
||||||
--- a/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
|
||||||
+++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
|
||||||
@@ -491,7 +491,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
|
|
||||||
|
|
||||||
if (this.destroyBlocksTick > 0) {
|
|
||||||
--this.destroyBlocksTick;
|
|
||||||
- if (this.destroyBlocksTick == 0 && world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (this.destroyBlocksTick == 0 && (world.purpurConfig.witherBypassMobGriefing ^ world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
boolean flag = false;
|
|
||||||
|
|
||||||
j = Mth.floor(this.getBbWidth() / 2.0F + 1.0F);
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
|
|
||||||
index c816521a5f73ccd04216ac0225945c6ef585869d..61a113074a6839d6dcb59019eefe9f532fb9cb2b 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/EnderMan.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/EnderMan.java
|
|
||||||
@@ -516,7 +516,15 @@ public class EnderMan extends Monster implements NeutralMob {
|
|
||||||
@Override
|
|
||||||
public boolean canUse() {
|
|
||||||
if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur - Add enderman and creeper griefing controls
|
|
||||||
- return this.enderman.getCarriedBlock() == null ? false : (!getServerLevel((Entity) this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? false : this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0);
|
|
||||||
+ // Purpur start - Add mobGriefing bypass to everything affected
|
|
||||||
+ if (this.enderman.getCarriedBlock() == null) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ if (!getServerLevel((Entity) this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) == !this.enderman.level().purpurConfig.endermanBypassMobGriefing) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ return this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0;
|
|
||||||
+ // Purpur end - Add mobGriefing bypass to everything affected
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@@ -562,7 +570,15 @@ public class EnderMan extends Monster implements NeutralMob {
|
|
||||||
@Override
|
|
||||||
public boolean canUse() {
|
|
||||||
if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur - Add enderman and creeper griefing controls
|
|
||||||
- return this.enderman.getCarriedBlock() != null ? false : (!getServerLevel((Entity) this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? false : this.enderman.getRandom().nextInt(reducedTickDelay(20)) == 0);
|
|
||||||
+ // Purpur start - Add mobGriefing bypass to everything affected
|
|
||||||
+ if (this.enderman.getCarriedBlock() != null) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ if (!getServerLevel((Entity) this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) == !this.enderman.level().purpurConfig.endermanBypassMobGriefing) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ return this.enderman.getRandom().nextInt(reducedTickDelay(20)) == 0;
|
|
||||||
+ // Purpur end - Add mobGriefing bypass to everything affected
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Evoker.java b/net/minecraft/world/entity/monster/Evoker.java
|
|
||||||
index 76ee60fc1df5846393a5d387a514dfaf22e20229..05f859c3062c34f1fdb74c43423c1f5767180c1f 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/Evoker.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/Evoker.java
|
|
||||||
@@ -368,7 +368,7 @@ public class Evoker extends SpellcasterIllager {
|
|
||||||
} else {
|
|
||||||
ServerLevel worldserver = getServerLevel(Evoker.this.level());
|
|
||||||
|
|
||||||
- if (!worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (!worldserver.purpurConfig.evokerBypassMobGriefing == !worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
List<Sheep> list = worldserver.getNearbyEntities(Sheep.class, this.wololoTargeting, Evoker.this, Evoker.this.getBoundingBox().inflate(16.0D, 4.0D, 16.0D));
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java
|
|
||||||
index ecf37a99fa5e8919146ba73c7313998855ea0d88..b71aec7588a2a812cca71d89810ed765fcc33b9f 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/Ravager.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/Ravager.java
|
|
||||||
@@ -182,7 +182,7 @@ public class Ravager extends Raider {
|
|
||||||
if (world instanceof ServerLevel) {
|
|
||||||
ServerLevel worldserver = (ServerLevel) world;
|
|
||||||
|
|
||||||
- if (this.horizontalCollision && worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (this.horizontalCollision && (worldserver.purpurConfig.ravagerBypassMobGriefing ^ worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
boolean flag = false;
|
|
||||||
AABB axisalignedbb = this.getBoundingBox().inflate(0.2D);
|
|
||||||
Iterator iterator = BlockPos.betweenClosed(Mth.floor(axisalignedbb.minX), Mth.floor(axisalignedbb.minY), Mth.floor(axisalignedbb.minZ), Mth.floor(axisalignedbb.maxX), Mth.floor(axisalignedbb.maxY), Mth.floor(axisalignedbb.maxZ)).iterator();
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java
|
|
||||||
index 191724aa48081017adf3db0b6ff99a77dd4ce68d..3159c61e1f34e95749661a711e4d97f7f5a04766 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/Silverfish.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/Silverfish.java
|
|
||||||
@@ -193,12 +193,12 @@ public class Silverfish extends Monster {
|
|
||||||
|
|
||||||
if (block instanceof InfestedBlock) {
|
|
||||||
// CraftBukkit start
|
|
||||||
- BlockState afterState = getServerLevel(world).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? iblockdata.getFluidState().createLegacyBlock() : ((InfestedBlock) block).hostStateByInfested(world.getBlockState(blockposition1)); // Paper - fix wrong block state
|
|
||||||
+ BlockState afterState = (getServerLevel(world).purpurConfig.silverfishBypassMobGriefing ^ getServerLevel(world).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) ? iblockdata.getFluidState().createLegacyBlock() : ((InfestedBlock) block).hostStateByInfested(world.getBlockState(blockposition1)); // Paper - fix wrong block state // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
if (!CraftEventFactory.callEntityChangeBlockEvent(this.silverfish, blockposition1, afterState)) { // Paper - fix wrong block state
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
|
||||||
- if (getServerLevel(world).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
|
||||||
+ if (getServerLevel(world).purpurConfig.silverfishBypassMobGriefing ^ getServerLevel(world).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
world.destroyBlock(blockposition1, true, this.silverfish);
|
|
||||||
} else {
|
|
||||||
world.setBlock(blockposition1, ((InfestedBlock) block).hostStateByInfested(world.getBlockState(blockposition1)), 3);
|
|
||||||
@@ -236,7 +236,7 @@ public class Silverfish extends Monster {
|
|
||||||
} else {
|
|
||||||
RandomSource randomsource = this.mob.getRandom();
|
|
||||||
|
|
||||||
- if (getServerLevel((Entity) this.mob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && randomsource.nextInt(reducedTickDelay(10)) == 0) {
|
|
||||||
+ if (getServerLevel((Entity) this.mob).purpurConfig.silverfishBypassMobGriefing ^ getServerLevel((Entity) this.mob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && randomsource.nextInt(reducedTickDelay(10)) == 0) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
this.selectedDirection = Direction.getRandom(randomsource);
|
|
||||||
BlockPos blockposition = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ()).relative(this.selectedDirection);
|
|
||||||
BlockState iblockdata = this.mob.level().getBlockState(blockposition);
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java
|
|
||||||
index 1a40babc8f6b3f56377cb2af45e9d17d0028a77b..e1ae622ec56f1e011f8007c5b5b8a7032cd28102 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/piglin/Piglin.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/piglin/Piglin.java
|
|
||||||
@@ -438,7 +438,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean wantsToPickUp(ServerLevel world, ItemStack stack) {
|
|
||||||
- return world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, stack);
|
|
||||||
+ return (world.purpurConfig.piglinBypassMobGriefing ^ world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, stack); // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean canReplaceCurrentItem(ItemStack stack) {
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/LargeFireball.java b/net/minecraft/world/entity/projectile/LargeFireball.java
|
|
||||||
index 2f00676f62478897ae4931ea06e047567c407535..59c71183e2c4edae72623f6aa662b807ba2093f2 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/LargeFireball.java
|
|
||||||
+++ b/net/minecraft/world/entity/projectile/LargeFireball.java
|
|
||||||
@@ -23,13 +23,13 @@ public class LargeFireball extends Fireball {
|
|
||||||
|
|
||||||
public LargeFireball(EntityType<? extends LargeFireball> type, Level world) {
|
|
||||||
super(type, world);
|
|
||||||
- this.isIncendiary = (world instanceof ServerLevel worldserver) && worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit
|
|
||||||
+ this.isIncendiary = (world instanceof ServerLevel worldserver) && (worldserver.purpurConfig.fireballsBypassMobGriefing ^ worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)); // CraftBukkit // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
}
|
|
||||||
|
|
||||||
public LargeFireball(Level world, LivingEntity owner, Vec3 velocity, int explosionPower) {
|
|
||||||
super(EntityType.FIREBALL, owner, velocity, world);
|
|
||||||
this.explosionPower = explosionPower;
|
|
||||||
- this.isIncendiary = (world instanceof ServerLevel worldserver) && worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit
|
|
||||||
+ this.isIncendiary = (world instanceof ServerLevel worldserver) && (worldserver.purpurConfig.fireballsBypassMobGriefing ^ worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)); // CraftBukkit // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@@ -38,7 +38,7 @@ public class LargeFireball extends Fireball {
|
|
||||||
Level world = this.level();
|
|
||||||
|
|
||||||
if (world instanceof ServerLevel worldserver) {
|
|
||||||
- boolean flag = worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
|
||||||
+ boolean flag = worldserver.purpurConfig.fireballsBypassMobGriefing ^ worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
|
|
||||||
// CraftBukkit start - fire ExplosionPrimeEvent
|
|
||||||
ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity());
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java
|
|
||||||
index 9a7b56b653848974e1194eb4f6d40cb99a96ff57..3a39eb8572cea2596edd26bef4a484c8cd78904d 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/Projectile.java
|
|
||||||
+++ b/net/minecraft/world/entity/projectile/Projectile.java
|
|
||||||
@@ -468,7 +468,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
|
||||||
public boolean mayInteract(ServerLevel world, BlockPos pos) {
|
|
||||||
Entity entity = this.getOwner();
|
|
||||||
|
|
||||||
- return entity instanceof Player ? entity.mayInteract(world, pos) : entity == null || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
|
||||||
+ return entity instanceof Player ? entity.mayInteract(world, pos) : entity == null || world.purpurConfig.projectilesBypassMobGriefing ^ world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean mayBreak(ServerLevel world) {
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/SmallFireball.java b/net/minecraft/world/entity/projectile/SmallFireball.java
|
|
||||||
index bb159ea4baf208aab6d6fcfbbddacd5b089b55c8..f1786d17ce8ffd221674c887be01c7907f36f129 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/SmallFireball.java
|
|
||||||
+++ b/net/minecraft/world/entity/projectile/SmallFireball.java
|
|
||||||
@@ -30,7 +30,7 @@ public class SmallFireball extends Fireball {
|
|
||||||
super(EntityType.SMALL_FIREBALL, owner, velocity, world);
|
|
||||||
// CraftBukkit start
|
|
||||||
if (this.getOwner() != null && this.getOwner() instanceof Mob) {
|
|
||||||
- this.isIncendiary = (world instanceof ServerLevel worldserver) && worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
|
||||||
+ this.isIncendiary = (world instanceof ServerLevel worldserver) && (worldserver.purpurConfig.fireballsBypassMobGriefing ^ worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)); // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
|
||||||
}
|
|
||||||
diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java
|
|
||||||
index cee1e4db2312efb4843c4b6dc18f4af10b91d304..65206bc0c3276fda449936cae88cc819a346e299 100644
|
|
||||||
--- a/net/minecraft/world/entity/raid/Raider.java
|
|
||||||
+++ b/net/minecraft/world/entity/raid/Raider.java
|
|
||||||
@@ -345,7 +345,7 @@ public abstract class Raider extends PatrollingMonster {
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean cannotPickUpBanner() {
|
|
||||||
- if (!getServerLevel(this.mob).getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING) || !this.mob.canPickUpLoot()) return false; // Paper - respect game and entity rules for picking up items
|
|
||||||
+ if ((!this.mob.level().purpurConfig.pillagerBypassMobGriefing == !getServerLevel(this.mob).getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING)) || !this.mob.canPickUpLoot()) return false; // Paper - respect game and entity rules for picking up items // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
if (!this.mob.hasActiveRaid()) {
|
|
||||||
return true;
|
|
||||||
} else if (this.mob.getCurrentRaid().isOver()) {
|
|
||||||
diff --git a/net/minecraft/world/level/block/CropBlock.java b/net/minecraft/world/level/block/CropBlock.java
|
|
||||||
index 1967ff3fcb94988be85985c4754904f0077de066..e1cfad4834fdee910bf261a60e2b76678a0fec6d 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(), !worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit
|
|
||||||
+ 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
|
|
||||||
worldserver.destroyBlock(pos, true, entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/net/minecraft/world/level/block/FarmBlock.java b/net/minecraft/world/level/block/FarmBlock.java
|
|
||||||
index e744a117d2f25ad24c87263ba2ab7f760b6e594d..032b8252c3ff2fc111442610998e36a5c145ae13 100644
|
|
||||||
--- a/net/minecraft/world/level/block/FarmBlock.java
|
|
||||||
+++ b/net/minecraft/world/level/block/FarmBlock.java
|
|
||||||
@@ -112,7 +112,7 @@ public class FarmBlock extends Block {
|
|
||||||
public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) {
|
|
||||||
super.fallOn(world, state, pos, entity, fallDistance); // CraftBukkit - moved here as game rules / events shouldn't affect fall damage.
|
|
||||||
if (world instanceof ServerLevel worldserver) {
|
|
||||||
- if (world.random.nextFloat() < fallDistance - 0.5F && entity instanceof LivingEntity && (entity instanceof Player || worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && entity.getBbWidth() * entity.getBbWidth() * entity.getBbHeight() > 0.512F) {
|
|
||||||
+ if (world.random.nextFloat() < fallDistance - 0.5F && entity instanceof LivingEntity && (entity instanceof Player || worldserver.purpurConfig.farmlandBypassMobGriefing ^ worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && entity.getBbWidth() * entity.getBbWidth() * entity.getBbHeight() > 0.512F) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
// CraftBukkit start - Interact soil
|
|
||||||
org.bukkit.event.Cancellable cancellable;
|
|
||||||
if (entity instanceof Player) {
|
|
||||||
diff --git a/net/minecraft/world/level/block/PowderSnowBlock.java b/net/minecraft/world/level/block/PowderSnowBlock.java
|
|
||||||
index 53f1a7ed6b4bd6e2d8460531226aabf249994c02..f91c845061fa632e53efb31c63cf0c67c9c2e86a 100644
|
|
||||||
--- a/net/minecraft/world/level/block/PowderSnowBlock.java
|
|
||||||
+++ b/net/minecraft/world/level/block/PowderSnowBlock.java
|
|
||||||
@@ -76,7 +76,7 @@ public class PowderSnowBlock extends Block implements BucketPickup {
|
|
||||||
if (world instanceof ServerLevel worldserver) {
|
|
||||||
// CraftBukkit start
|
|
||||||
if (entity.isOnFire() && entity.mayInteract(worldserver, pos)) {
|
|
||||||
- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !(worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || entity instanceof Player))) {
|
|
||||||
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !((worldserver.purpurConfig.powderSnowBypassMobGriefing ^ worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) || entity instanceof Player))) { // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// CraftBukkit end
|
|
||||||
diff --git a/net/minecraft/world/level/block/TurtleEggBlock.java b/net/minecraft/world/level/block/TurtleEggBlock.java
|
|
||||||
index df2028f53fd07551f8aa7eeb49f99ac0676d5fe0..30af2a98a52208c3a36dfaad474582806f86aede 100644
|
|
||||||
--- a/net/minecraft/world/level/block/TurtleEggBlock.java
|
|
||||||
+++ b/net/minecraft/world/level/block/TurtleEggBlock.java
|
|
||||||
@@ -222,7 +222,7 @@ public class TurtleEggBlock extends Block {
|
|
||||||
}
|
|
||||||
if (entity instanceof Player) return true;
|
|
||||||
|
|
||||||
- return world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
|
||||||
+ return world.purpurConfig.turtleEggsBypassMobGriefing ^ world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur - Add mobGriefing bypass to everything affected
|
|
||||||
// Purpur end - Add turtle egg block options
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
index 19c6572a82de81b5a3aacad4bd77878d6c21ddc8..4f31d65962618a29b0a52ec7c51fba2267d63a05 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -121,6 +121,9 @@ public class PurpurWorldConfig {
|
|
||||||
public int raidCooldownSeconds = 0;
|
|
||||||
public int animalBreedingCooldownSeconds = 0;
|
|
||||||
public boolean persistentDroppableEntityDisplayNames = true;
|
|
||||||
+ public boolean entitiesPickUpLootBypassMobGriefing = false;
|
|
||||||
+ public boolean fireballsBypassMobGriefing = false;
|
|
||||||
+ public boolean projectilesBypassMobGriefing = false;
|
|
||||||
private void miscGameplayMechanicsSettings() {
|
|
||||||
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
|
|
||||||
boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand);
|
|
||||||
@@ -132,6 +135,9 @@ public class PurpurWorldConfig {
|
|
||||||
raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds);
|
|
||||||
animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds);
|
|
||||||
persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames);
|
|
||||||
+ entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing);
|
|
||||||
+ fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing);
|
|
||||||
+ projectilesBypassMobGriefing = getBoolean("gameplay-mechanics.projectiles-bypass-mob-griefing", projectilesBypassMobGriefing);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -401,9 +407,11 @@ public class PurpurWorldConfig {
|
|
||||||
dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ public boolean farmlandBypassMobGriefing = false;
|
|
||||||
public boolean farmlandGetsMoistFromBelow = false;
|
|
||||||
public boolean farmlandAlpha = false;
|
|
||||||
private void farmlandSettings() {
|
|
||||||
+ farmlandBypassMobGriefing = getBoolean("blocks.farmland.bypass-mob-griefing", farmlandBypassMobGriefing);
|
|
||||||
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
|
|
||||||
farmlandAlpha = getBoolean("blocks.farmland.use-alpha-farmland", farmlandAlpha);
|
|
||||||
}
|
|
||||||
@@ -428,6 +436,11 @@ public class PurpurWorldConfig {
|
|
||||||
lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ public boolean powderSnowBypassMobGriefing = false;
|
|
||||||
+ private void powderSnowSettings() {
|
|
||||||
+ powderSnowBypassMobGriefing = getBoolean("blocks.powder_snow.bypass-mob-griefing", powderSnowBypassMobGriefing);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
public boolean respawnAnchorExplode = true;
|
|
||||||
public double respawnAnchorExplosionPower = 5.0D;
|
|
||||||
public boolean respawnAnchorExplosionFire = true;
|
|
||||||
@@ -457,10 +470,12 @@ public class PurpurWorldConfig {
|
|
||||||
public boolean turtleEggsBreakFromExpOrbs = false;
|
|
||||||
public boolean turtleEggsBreakFromItems = false;
|
|
||||||
public boolean turtleEggsBreakFromMinecarts = false;
|
|
||||||
+ public boolean turtleEggsBypassMobGriefing = false;
|
|
||||||
private void turtleEggSettings() {
|
|
||||||
turtleEggsBreakFromExpOrbs = getBoolean("blocks.turtle_egg.break-from-exp-orbs", turtleEggsBreakFromExpOrbs);
|
|
||||||
turtleEggsBreakFromItems = getBoolean("blocks.turtle_egg.break-from-items", turtleEggsBreakFromItems);
|
|
||||||
turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts);
|
|
||||||
+ turtleEggsBypassMobGriefing = getBoolean("blocks.turtle_egg.bypass-mob-griefing", turtleEggsBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int waterInfiniteRequiredSources = 2;
|
|
||||||
@@ -758,6 +773,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double creeperScale = 1.0D;
|
|
||||||
public double creeperChargedChance = 0.0D;
|
|
||||||
public boolean creeperAllowGriefing = true;
|
|
||||||
+ public boolean creeperBypassMobGriefing = false;
|
|
||||||
private void creeperSettings() {
|
|
||||||
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
|
|
||||||
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
|
|
||||||
@@ -771,6 +787,7 @@ public class PurpurWorldConfig {
|
|
||||||
creeperScale = Mth.clamp(getDouble("mobs.creeper.attributes.scale", creeperScale), 0.0625D, 16.0D);
|
|
||||||
creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance);
|
|
||||||
creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing);
|
|
||||||
+ creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean dolphinRidable = false;
|
|
||||||
@@ -871,6 +888,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double enderDragonMaxY = 320D;
|
|
||||||
public double enderDragonMaxHealth = 200.0D;
|
|
||||||
public boolean enderDragonAlwaysDropsFullExp = false;
|
|
||||||
+ public boolean enderDragonBypassMobGriefing = false;
|
|
||||||
private void enderDragonSettings() {
|
|
||||||
enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable);
|
|
||||||
enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater);
|
|
||||||
@@ -887,6 +905,7 @@ public class PurpurWorldConfig {
|
|
||||||
}
|
|
||||||
enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth);
|
|
||||||
enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp);
|
|
||||||
+ enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean endermanRidable = false;
|
|
||||||
@@ -896,6 +915,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double endermanScale = 1.0D;
|
|
||||||
public boolean endermanAllowGriefing = true;
|
|
||||||
public boolean endermanDespawnEvenWithBlock = false;
|
|
||||||
+ public boolean endermanBypassMobGriefing = false;
|
|
||||||
private void endermanSettings() {
|
|
||||||
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
|
|
||||||
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
|
|
||||||
@@ -909,6 +929,7 @@ public class PurpurWorldConfig {
|
|
||||||
endermanScale = Mth.clamp(getDouble("mobs.enderman.attributes.scale", endermanScale), 0.0625D, 16.0D);
|
|
||||||
endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing);
|
|
||||||
endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock);
|
|
||||||
+ endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean endermiteRidable = false;
|
|
||||||
@@ -934,6 +955,7 @@ public class PurpurWorldConfig {
|
|
||||||
public boolean evokerControllable = true;
|
|
||||||
public double evokerMaxHealth = 24.0D;
|
|
||||||
public double evokerScale = 1.0D;
|
|
||||||
+ public boolean evokerBypassMobGriefing = false;
|
|
||||||
private void evokerSettings() {
|
|
||||||
evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable);
|
|
||||||
evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater);
|
|
||||||
@@ -945,6 +967,7 @@ public class PurpurWorldConfig {
|
|
||||||
}
|
|
||||||
evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth);
|
|
||||||
evokerScale = Mth.clamp(getDouble("mobs.evoker.attributes.scale", evokerScale), 0.0625D, 16.0D);
|
|
||||||
+ evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean foxRidable = false;
|
|
||||||
@@ -954,6 +977,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double foxScale = 1.0D;
|
|
||||||
public boolean foxTypeChangesWithTulips = false;
|
|
||||||
public int foxBreedingTicks = 6000;
|
|
||||||
+ public boolean foxBypassMobGriefing = false;
|
|
||||||
private void foxSettings() {
|
|
||||||
foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
|
|
||||||
foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
|
|
||||||
@@ -967,6 +991,7 @@ public class PurpurWorldConfig {
|
|
||||||
foxScale = Mth.clamp(getDouble("mobs.fox.attributes.scale", foxScale), 0.0625D, 16.0D);
|
|
||||||
foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips);
|
|
||||||
foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks);
|
|
||||||
+ foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean frogRidable = false;
|
|
||||||
@@ -1443,6 +1468,7 @@ public class PurpurWorldConfig {
|
|
||||||
public boolean piglinControllable = true;
|
|
||||||
public double piglinMaxHealth = 16.0D;
|
|
||||||
public double piglinScale = 1.0D;
|
|
||||||
+ public boolean piglinBypassMobGriefing = false;
|
|
||||||
private void piglinSettings() {
|
|
||||||
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
|
|
||||||
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
|
|
||||||
@@ -1454,6 +1480,7 @@ public class PurpurWorldConfig {
|
|
||||||
}
|
|
||||||
piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth);
|
|
||||||
piglinScale = Mth.clamp(getDouble("mobs.piglin.attributes.scale", piglinScale), 0.0625D, 16.0D);
|
|
||||||
+ piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean piglinBruteRidable = false;
|
|
||||||
@@ -1479,6 +1506,7 @@ public class PurpurWorldConfig {
|
|
||||||
public boolean pillagerControllable = true;
|
|
||||||
public double pillagerMaxHealth = 24.0D;
|
|
||||||
public double pillagerScale = 1.0D;
|
|
||||||
+ public boolean pillagerBypassMobGriefing = false;
|
|
||||||
private void pillagerSettings() {
|
|
||||||
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
|
|
||||||
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
|
|
||||||
@@ -1490,6 +1518,7 @@ public class PurpurWorldConfig {
|
|
||||||
}
|
|
||||||
pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth);
|
|
||||||
pillagerScale = Mth.clamp(getDouble("mobs.pillager.attributes.scale", pillagerScale), 0.0625D, 16.0D);
|
|
||||||
+ pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean polarBearRidable = false;
|
|
||||||
@@ -1541,6 +1570,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double rabbitNaturalToast = 0.0D;
|
|
||||||
public double rabbitNaturalKiller = 0.0D;
|
|
||||||
public int rabbitBreedingTicks = 6000;
|
|
||||||
+ public boolean rabbitBypassMobGriefing = false;
|
|
||||||
private void rabbitSettings() {
|
|
||||||
rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
|
|
||||||
rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
|
|
||||||
@@ -1555,6 +1585,7 @@ public class PurpurWorldConfig {
|
|
||||||
rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast);
|
|
||||||
rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller);
|
|
||||||
rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks);
|
|
||||||
+ rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean ravagerRidable = false;
|
|
||||||
@@ -1562,6 +1593,7 @@ public class PurpurWorldConfig {
|
|
||||||
public boolean ravagerControllable = true;
|
|
||||||
public double ravagerMaxHealth = 100.0D;
|
|
||||||
public double ravagerScale = 1.0D;
|
|
||||||
+ public boolean ravagerBypassMobGriefing = false;
|
|
||||||
private void ravagerSettings() {
|
|
||||||
ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
|
|
||||||
ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
|
|
||||||
@@ -1573,6 +1605,7 @@ public class PurpurWorldConfig {
|
|
||||||
}
|
|
||||||
ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth);
|
|
||||||
ravagerScale = Mth.clamp(getDouble("mobs.ravager.attributes.scale", ravagerScale), 0.0625D, 16.0D);
|
|
||||||
+ ravagerBypassMobGriefing = getBoolean("mobs.ravager.bypass-mob-griefing", ravagerBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean salmonRidable = false;
|
|
||||||
@@ -1597,6 +1630,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double sheepMaxHealth = 8.0D;
|
|
||||||
public double sheepScale = 1.0D;
|
|
||||||
public int sheepBreedingTicks = 6000;
|
|
||||||
+ public boolean sheepBypassMobGriefing = false;
|
|
||||||
private void sheepSettings() {
|
|
||||||
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
|
|
||||||
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
|
|
||||||
@@ -1609,6 +1643,7 @@ public class PurpurWorldConfig {
|
|
||||||
sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth);
|
|
||||||
sheepScale = Mth.clamp(getDouble("mobs.sheep.attributes.scale", sheepScale), 0.0625D, 16.0D);
|
|
||||||
sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks);
|
|
||||||
+ sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean shulkerRidable = false;
|
|
||||||
@@ -1636,6 +1671,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double silverfishScale = 1.0D;
|
|
||||||
public double silverfishMovementSpeed = 0.25D;
|
|
||||||
public double silverfishAttackDamage = 1.0D;
|
|
||||||
+ public boolean silverfishBypassMobGriefing = false;
|
|
||||||
private void silverfishSettings() {
|
|
||||||
silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable);
|
|
||||||
silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater);
|
|
||||||
@@ -1649,6 +1685,7 @@ public class PurpurWorldConfig {
|
|
||||||
silverfishScale = Mth.clamp(getDouble("mobs.silverfish.attributes.scale", silverfishScale), 0.0625D, 16.0D);
|
|
||||||
silverfishMovementSpeed = getDouble("mobs.silverfish.attributes.movement_speed", silverfishMovementSpeed);
|
|
||||||
silverfishAttackDamage = getDouble("mobs.silverfish.attributes.attack_damage", silverfishAttackDamage);
|
|
||||||
+ silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean skeletonRidable = false;
|
|
||||||
@@ -1729,6 +1766,7 @@ public class PurpurWorldConfig {
|
|
||||||
public int snowGolemSnowBallMax = 20;
|
|
||||||
public float snowGolemSnowBallModifier = 10.0F;
|
|
||||||
public double snowGolemAttackDistance = 1.25D;
|
|
||||||
+ public boolean snowGolemBypassMobGriefing = false;
|
|
||||||
private void snowGolemSettings() {
|
|
||||||
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
|
|
||||||
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
|
|
||||||
@@ -1746,6 +1784,7 @@ public class PurpurWorldConfig {
|
|
||||||
snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax);
|
|
||||||
snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier);
|
|
||||||
snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance);
|
|
||||||
+ snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean snifferRidable = false;
|
|
||||||
@@ -1950,6 +1989,7 @@ public class PurpurWorldConfig {
|
|
||||||
public int villagerBreedingTicks = 6000;
|
|
||||||
public boolean villagerClericsFarmWarts = false;
|
|
||||||
public boolean villagerClericFarmersThrowWarts = true;
|
|
||||||
+ public boolean villagerBypassMobGriefing = false;
|
|
||||||
private void villagerSettings() {
|
|
||||||
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
|
||||||
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
|
||||||
@@ -1968,6 +2008,7 @@ public class PurpurWorldConfig {
|
|
||||||
villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks);
|
|
||||||
villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts);
|
|
||||||
villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts);
|
|
||||||
+ villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean vindicatorRidable = false;
|
|
||||||
@@ -2049,6 +2090,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double witherScale = 1.0D;
|
|
||||||
public float witherHealthRegenAmount = 1.0f;
|
|
||||||
public int witherHealthRegenDelay = 20;
|
|
||||||
+ public boolean witherBypassMobGriefing = false;
|
|
||||||
private void witherSettings() {
|
|
||||||
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
|
|
||||||
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
|
|
||||||
@@ -2067,6 +2109,7 @@ public class PurpurWorldConfig {
|
|
||||||
witherScale = Mth.clamp(getDouble("mobs.wither.attributes.scale", witherScale), 0.0625D, 16.0D);
|
|
||||||
witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount);
|
|
||||||
witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay);
|
|
||||||
+ witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean witherSkeletonRidable = false;
|
|
||||||
@@ -2145,6 +2188,7 @@ public class PurpurWorldConfig {
|
|
||||||
public double zombieJockeyChance = 0.05D;
|
|
||||||
public boolean zombieJockeyTryExistingChickens = true;
|
|
||||||
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
|
|
||||||
+ public boolean zombieBypassMobGriefing = false;
|
|
||||||
private void zombieSettings() {
|
|
||||||
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
|
|
||||||
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
|
|
||||||
@@ -2161,6 +2205,7 @@ public class PurpurWorldConfig {
|
|
||||||
zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance);
|
|
||||||
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
|
|
||||||
zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging);
|
|
||||||
+ zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean zombieHorseRidable = false;
|
|
||||||
@@ -0,0 +1,360 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Encode42 <me@encode42.dev>
|
||||||
|
Date: Tue, 5 Jan 2021 22:21:56 -0500
|
||||||
|
Subject: [PATCH] Add mobGriefing bypass to everything affected
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
|
||||||
|
index 0bcb0530dd8df28a9f4004a9d5dee9324a825095..8243301096f640df1f4dd0540e5d00064dbeb18f 100644
|
||||||
|
--- a/net/minecraft/world/entity/LivingEntity.java
|
||||||
|
+++ b/net/minecraft/world/entity/LivingEntity.java
|
||||||
|
@@ -1779,7 +1779,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
||||||
|
if (this.level() instanceof ServerLevel serverLevel) {
|
||||||
|
boolean var6 = false;
|
||||||
|
if (this.dead && entitySource instanceof WitherBoss) { // Paper
|
||||||
|
- if (serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ if (serverLevel.purpurConfig.witherBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
BlockPos blockPos = this.blockPosition();
|
||||||
|
BlockState blockState = Blocks.WITHER_ROSE.defaultBlockState();
|
||||||
|
if (this.level().getBlockState(blockPos).isAir() && blockState.canSurvive(this.level(), blockPos)) {
|
||||||
|
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
|
||||||
|
index c431f28c3f4f6cec946048f5752c364429af5ba1..d93584c6793818463e8883ffe399bf16b03263a9 100644
|
||||||
|
--- a/net/minecraft/world/entity/Mob.java
|
||||||
|
+++ b/net/minecraft/world/entity/Mob.java
|
||||||
|
@@ -648,7 +648,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
|
||||||
|
&& this.canPickUpLoot()
|
||||||
|
&& this.isAlive()
|
||||||
|
&& !this.dead
|
||||||
|
- && serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ && serverLevel.purpurConfig.entitiesPickUpLootBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
Vec3i pickupReach = this.getPickupReach();
|
||||||
|
|
||||||
|
for (ItemEntity itemEntity : this.level()
|
||||||
|
diff --git a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java
|
||||||
|
index e98fac58b29f78cb63bd868811cca41e1644e9ac..56d49bc71cb0cb0a08ff771991fd77ab774b4b59 100644
|
||||||
|
--- a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java
|
||||||
|
+++ b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java
|
||||||
|
@@ -49,7 +49,7 @@ public class HarvestFarmland extends Behavior<Villager> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean checkExtraStartConditions(ServerLevel level, Villager owner) {
|
||||||
|
- if (!level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ if (!level.purpurConfig.villagerBypassMobGriefing == !level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
return false;
|
||||||
|
} else if (owner.getVillagerData().getProfession() != VillagerProfession.FARMER && !(level.purpurConfig.villagerClericsFarmWarts && owner.getVillagerData().getProfession() == VillagerProfession.CLERIC)) { // Purpur - Option for Villager Clerics to farm Nether Wart
|
||||||
|
return false;
|
||||||
|
diff --git a/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java b/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
|
||||||
|
index e026e07ca86700c864a3dceda6817fb7b6cb11e9..f1dfe0bf047e7d331b2379a672ff7b8eae4c9c90 100644
|
||||||
|
--- a/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
|
||||||
|
+++ b/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java
|
||||||
|
@@ -30,7 +30,7 @@ public class BreakDoorGoal extends DoorInteractGoal {
|
||||||
|
@Override
|
||||||
|
public boolean canUse() {
|
||||||
|
return super.canUse()
|
||||||
|
- && getServerLevel(this.mob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)
|
||||||
|
+ && this.mob.level().purpurConfig.zombieBypassMobGriefing == !getServerLevel(this.mob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
&& this.isValidDifficulty(this.mob.level().getDifficulty())
|
||||||
|
&& !this.isOpen();
|
||||||
|
}
|
||||||
|
diff --git a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
||||||
|
index e84893780b533b1ecb3675606b5c2daf7339b861..65eb4d8001b07cb3f7cda17565eea10a88a9c47c 100644
|
||||||
|
--- a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
||||||
|
+++ b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java
|
||||||
|
@@ -67,7 +67,7 @@ public class EatBlockGoal extends Goal {
|
||||||
|
BlockPos blockPos = this.mob.blockPosition();
|
||||||
|
final BlockState blockState = this.level.getBlockState(blockPos); // Paper - fix wrong block state
|
||||||
|
if (IS_TALL_GRASS.test(blockState)) { // Paper - fix wrong block state
|
||||||
|
- if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - fix wrong block state
|
||||||
|
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).purpurConfig.sheepBypassMobGriefing == !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - fix wrong block state // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
this.level.destroyBlock(blockPos, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -75,7 +75,7 @@ public class EatBlockGoal extends Goal {
|
||||||
|
} else {
|
||||||
|
BlockPos blockPos1 = blockPos.below();
|
||||||
|
if (this.level.getBlockState(blockPos1).is(Blocks.GRASS_BLOCK)) {
|
||||||
|
- if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos1, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - Fix wrong block state
|
||||||
|
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockPos1, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).purpurConfig.sheepBypassMobGriefing == !getServerLevel(this.level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Paper - Fix wrong block state // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
this.level.levelEvent(2001, blockPos1, Block.getId(Blocks.GRASS_BLOCK.defaultBlockState()));
|
||||||
|
this.level.setBlock(blockPos1, Blocks.DIRT.defaultBlockState(), 2);
|
||||||
|
}
|
||||||
|
diff --git a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
||||||
|
index 579ca031d461ed4327fe4fb45c5289565322e64e..95fa516910a3834bbd4db6d11279e13a1f0dac41 100644
|
||||||
|
--- a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
||||||
|
+++ b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
||||||
|
@@ -35,7 +35,7 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canUse() {
|
||||||
|
- if (!getServerLevel(this.removerMob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ if (!getServerLevel(this.removerMob).purpurConfig.zombieBypassMobGriefing == !getServerLevel(this.removerMob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
return false;
|
||||||
|
} else if (this.nextStartTick > 0) {
|
||||||
|
this.nextStartTick--;
|
||||||
|
diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java
|
||||||
|
index 1acf9b8c9e6a5915b3f095e83d3f209708947093..3d94d5c9ecab0fe7332daf4cdac879385159eaa1 100644
|
||||||
|
--- a/net/minecraft/world/entity/animal/Fox.java
|
||||||
|
+++ b/net/minecraft/world/entity/animal/Fox.java
|
||||||
|
@@ -1038,7 +1038,7 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onReachedTarget() {
|
||||||
|
- if (getServerLevel(Fox.this.level()).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ if (getServerLevel(Fox.this.level()).purpurConfig.foxBypassMobGriefing ^ getServerLevel(Fox.this.level()).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
BlockState blockState = Fox.this.level().getBlockState(this.blockPos);
|
||||||
|
if (blockState.is(Blocks.SWEET_BERRY_BUSH)) {
|
||||||
|
this.pickSweetBerries(blockState);
|
||||||
|
diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java
|
||||||
|
index bbdd06002b07699fffebdf6ed8148abdb69c24cc..7379def14f3f700fb8a746dc89d89e249e93b7b9 100644
|
||||||
|
--- a/net/minecraft/world/entity/animal/Rabbit.java
|
||||||
|
+++ b/net/minecraft/world/entity/animal/Rabbit.java
|
||||||
|
@@ -620,7 +620,7 @@ public class Rabbit extends Animal implements VariantHolder<Rabbit.Variant> {
|
||||||
|
@Override
|
||||||
|
public boolean canUse() {
|
||||||
|
if (this.nextStartTick <= 0) {
|
||||||
|
- if (!getServerLevel(this.rabbit).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ if (!getServerLevel(this.rabbit).purpurConfig.rabbitBypassMobGriefing == !getServerLevel(this.rabbit).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java
|
||||||
|
index 4f0d2ede28adbe412d208609a96eacc1309b8115..fdcc1534e59cf13ad354d56b1295cd60d1af0bc8 100644
|
||||||
|
--- a/net/minecraft/world/entity/animal/SnowGolem.java
|
||||||
|
+++ b/net/minecraft/world/entity/animal/SnowGolem.java
|
||||||
|
@@ -122,7 +122,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
|
||||||
|
this.hurtServer(serverLevel, this.damageSources().melting(), 1.0F); // CraftBukkit - DamageSources.ON_FIRE -> CraftEventFactory.MELTING
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ if (!serverLevel.purpurConfig.snowGolemBypassMobGriefing == !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
|
||||||
|
index 0099257b813745dd96a77933550369ec91b34b0f..ed8b68057b1ac2d1cfa7c0eed0d1f5f16918af6b 100644
|
||||||
|
--- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
|
||||||
|
+++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
|
||||||
|
@@ -547,7 +547,7 @@ public class EnderDragon extends Mob implements Enemy {
|
||||||
|
BlockPos blockPos = new BlockPos(i, i1, i2);
|
||||||
|
BlockState blockState = level.getBlockState(blockPos);
|
||||||
|
if (!blockState.isAir() && !blockState.is(BlockTags.DRAGON_TRANSPARENT)) {
|
||||||
|
- if (level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && !blockState.is(BlockTags.DRAGON_IMMUNE)) {
|
||||||
|
+ if (level.purpurConfig.enderDragonBypassMobGriefing ^ level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && !blockState.is(BlockTags.DRAGON_IMMUNE)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
// CraftBukkit start - Add blocks to list rather than destroying them
|
||||||
|
//flag1 = level.removeBlock(blockPos, false) || flag1;
|
||||||
|
flag1 = true;
|
||||||
|
diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||||
|
index e3a5aa5d6fd3cf4c6af06c592674e7f556f5bf8d..96e0172c405970253827a6b6a83ebd441f496268 100644
|
||||||
|
--- a/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||||
|
+++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java
|
||||||
|
@@ -478,7 +478,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
|
||||||
|
|
||||||
|
if (this.destroyBlocksTick > 0) {
|
||||||
|
this.destroyBlocksTick--;
|
||||||
|
- if (this.destroyBlocksTick == 0 && level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ if (this.destroyBlocksTick == 0 && level.purpurConfig.witherBypassMobGriefing ^ level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
boolean flag = false;
|
||||||
|
int alternativeTarget = Mth.floor(this.getBbWidth() / 2.0F + 1.0F);
|
||||||
|
int floor = Mth.floor(this.getBbHeight());
|
||||||
|
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
|
||||||
|
index c845481aa48c4c0d670058866351e1c9f5a35fc6..7434c7bad021e474bf0ecbd1cb28a38b92f3586e 100644
|
||||||
|
--- a/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 {
|
||||||
|
public boolean canUse() {
|
||||||
|
if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur - Add enderman and creeper griefing controls
|
||||||
|
return this.enderman.getCarriedBlock() != null
|
||||||
|
- && getServerLevel(this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)
|
||||||
|
+ && getServerLevel(this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) == !this.enderman.level().purpurConfig.endermanBypassMobGriefing // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
&& this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -665,7 +665,7 @@ public class EnderMan extends Monster implements NeutralMob {
|
||||||
|
public boolean canUse() {
|
||||||
|
if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur - Add enderman and creeper griefing controls
|
||||||
|
return this.enderman.getCarriedBlock() == null
|
||||||
|
- && getServerLevel(this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)
|
||||||
|
+ && getServerLevel(this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) == !this.enderman.level().purpurConfig.endermanBypassMobGriefing // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
&& this.enderman.getRandom().nextInt(reducedTickDelay(20)) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/world/entity/monster/Evoker.java b/net/minecraft/world/entity/monster/Evoker.java
|
||||||
|
index d3d7e11a12af404d83e81888a9a633dfb93412ec..91574baf7ca095eae909e8e7225ad500bde15af2 100644
|
||||||
|
--- a/net/minecraft/world/entity/monster/Evoker.java
|
||||||
|
+++ b/net/minecraft/world/entity/monster/Evoker.java
|
||||||
|
@@ -323,7 +323,7 @@ public class Evoker extends SpellcasterIllager {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
ServerLevel serverLevel = getServerLevel(Evoker.this.level());
|
||||||
|
- if (!serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ if (!serverLevel.purpurConfig.evokerBypassMobGriefing == !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
List<Sheep> nearbyEntities = serverLevel.getNearbyEntities(
|
||||||
|
diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java
|
||||||
|
index acfb473c0a085ed516ff25ebac366700c28c1ac0..e55dd03e881f622e9ca759dd1810a84af0e1861d 100644
|
||||||
|
--- a/net/minecraft/world/entity/monster/Ravager.java
|
||||||
|
+++ b/net/minecraft/world/entity/monster/Ravager.java
|
||||||
|
@@ -174,7 +174,7 @@ public class Ravager extends Raider {
|
||||||
|
|
||||||
|
if (this.level() instanceof ServerLevel serverLevel
|
||||||
|
&& this.horizontalCollision
|
||||||
|
- && serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) {
|
||||||
|
+ && serverLevel.purpurConfig.ravagerBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
boolean flag = false;
|
||||||
|
AABB aabb = this.getBoundingBox().inflate(0.2);
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java
|
||||||
|
index d3befe91bc65bbc2bc0d8651b78e8c9576cd0f75..0d3b8b64a23a19d67a1a4a01faaf6649a59f54ad 100644
|
||||||
|
--- a/net/minecraft/world/entity/monster/Silverfish.java
|
||||||
|
+++ b/net/minecraft/world/entity/monster/Silverfish.java
|
||||||
|
@@ -170,7 +170,7 @@ public class Silverfish extends Monster {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
RandomSource random = this.mob.getRandom();
|
||||||
|
- if (getServerLevel(this.mob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && random.nextInt(reducedTickDelay(10)) == 0) {
|
||||||
|
+ if (getServerLevel(this.mob).purpurConfig.silverfishBypassMobGriefing ^ getServerLevel(this.mob).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && random.nextInt(reducedTickDelay(10)) == 0) { // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
this.selectedDirection = Direction.getRandom(random);
|
||||||
|
BlockPos blockPos = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5, this.mob.getZ()).relative(this.selectedDirection);
|
||||||
|
BlockState blockState = this.mob.level().getBlockState(blockPos);
|
||||||
|
@@ -247,7 +247,7 @@ public class Silverfish extends Monster {
|
||||||
|
Block block = blockState.getBlock();
|
||||||
|
if (block instanceof InfestedBlock) {
|
||||||
|
// CraftBukkit start
|
||||||
|
- BlockState afterState = getServerLevel(level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? blockState.getFluidState().createLegacyBlock() : ((InfestedBlock) block).hostStateByInfested(level.getBlockState(blockPos1)); // Paper - fix wrong block state
|
||||||
|
+ BlockState afterState = getServerLevel(level).purpurConfig.silverfishBypassMobGriefing ^ getServerLevel(level).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? blockState.getFluidState().createLegacyBlock() : ((InfestedBlock) block).hostStateByInfested(level.getBlockState(blockPos1)); // Paper - fix wrong block state // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.silverfish, blockPos1, afterState)) { // Paper - fix wrong block state
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||||
|
index 897c57263ab7347987b289016a71d11f693bc8b2..d923a424e2b33b7d4e9e4ecdce8e0a8c825038de 100644
|
||||||
|
--- a/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||||
|
+++ b/net/minecraft/world/entity/monster/piglin/Piglin.java
|
||||||
|
@@ -473,7 +473,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean wantsToPickUp(ServerLevel level, ItemStack stack) {
|
||||||
|
- return level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, stack);
|
||||||
|
+ return level.purpurConfig.piglinBypassMobGriefing ^ level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, stack); // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean canReplaceCurrentItem(ItemStack candidate) {
|
||||||
|
diff --git a/net/minecraft/world/entity/projectile/LargeFireball.java b/net/minecraft/world/entity/projectile/LargeFireball.java
|
||||||
|
index 4a752ace041228f095af7b1b4878a03c5ed2381f..3e8b5d042eddb817dee2504ff9aa263f6195b1c7 100644
|
||||||
|
--- a/net/minecraft/world/entity/projectile/LargeFireball.java
|
||||||
|
+++ b/net/minecraft/world/entity/projectile/LargeFireball.java
|
||||||
|
@@ -18,20 +18,20 @@ public class LargeFireball extends Fireball {
|
||||||
|
|
||||||
|
public LargeFireball(EntityType<? extends LargeFireball> entityType, Level level) {
|
||||||
|
super(entityType, level);
|
||||||
|
- this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit
|
||||||
|
+ this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.purpurConfig.fireballsBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
}
|
||||||
|
|
||||||
|
public LargeFireball(Level level, LivingEntity owner, Vec3 movement, int explosionPower) {
|
||||||
|
super(EntityType.FIREBALL, owner, movement, level);
|
||||||
|
this.explosionPower = explosionPower;
|
||||||
|
- this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit
|
||||||
|
+ this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.purpurConfig.fireballsBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onHit(HitResult result) {
|
||||||
|
super.onHit(result);
|
||||||
|
if (this.level() instanceof ServerLevel serverLevel) {
|
||||||
|
- boolean _boolean = serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
||||||
|
+ boolean _boolean = serverLevel.purpurConfig.fireballsBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
// CraftBukkit start - fire ExplosionPrimeEvent
|
||||||
|
org.bukkit.event.entity.ExplosionPrimeEvent event = new org.bukkit.event.entity.ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity());
|
||||||
|
this.level().getCraftServer().getPluginManager().callEvent(event);
|
||||||
|
diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java
|
||||||
|
index af71a71ff11b418a43728fd464b1e673d593140f..a7c5896226e57c6dea1bea894c5f23fcb5481fcd 100644
|
||||||
|
--- a/net/minecraft/world/entity/projectile/Projectile.java
|
||||||
|
+++ b/net/minecraft/world/entity/projectile/Projectile.java
|
||||||
|
@@ -451,7 +451,7 @@ public abstract class Projectile extends Entity implements TraceableEntity {
|
||||||
|
@Override
|
||||||
|
public boolean mayInteract(ServerLevel level, BlockPos pos) {
|
||||||
|
Entity owner = this.getOwner();
|
||||||
|
- return owner instanceof Player ? owner.mayInteract(level, pos) : owner == null || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
||||||
|
+ return owner instanceof Player ? owner.mayInteract(level, pos) : owner == null || level.purpurConfig.projectilesBypassMobGriefing ^ level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean mayBreak(ServerLevel level) {
|
||||||
|
diff --git a/net/minecraft/world/entity/projectile/SmallFireball.java b/net/minecraft/world/entity/projectile/SmallFireball.java
|
||||||
|
index 8c84cea43fc0e42a576004663670977eac99f1a6..808aa5dcb27c87b6ba5c1eee639486067447e370 100644
|
||||||
|
--- a/net/minecraft/world/entity/projectile/SmallFireball.java
|
||||||
|
+++ b/net/minecraft/world/entity/projectile/SmallFireball.java
|
||||||
|
@@ -25,7 +25,7 @@ public class SmallFireball extends Fireball {
|
||||||
|
super(EntityType.SMALL_FIREBALL, owner, movement, level);
|
||||||
|
// CraftBukkit start
|
||||||
|
if (this.getOwner() != null && this.getOwner() instanceof Mob) {
|
||||||
|
- this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
||||||
|
+ this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.purpurConfig.fireballsBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
}
|
||||||
|
// CraftBukkit end
|
||||||
|
}
|
||||||
|
diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java
|
||||||
|
index 8270d76a753bfd26a4c8ef6610bee5c24ee59cfe..c06b589e669b055a26f662df60070d5908256220 100644
|
||||||
|
--- a/net/minecraft/world/entity/raid/Raider.java
|
||||||
|
+++ b/net/minecraft/world/entity/raid/Raider.java
|
||||||
|
@@ -399,7 +399,7 @@ public abstract class Raider extends PatrollingMonster {
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean cannotPickUpBanner() {
|
||||||
|
- if (!getServerLevel(this.mob).getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING) || !this.mob.canPickUpLoot()) return false; // Paper - respect game and entity rules for picking up items
|
||||||
|
+ if (!this.mob.level().purpurConfig.pillagerBypassMobGriefing == !getServerLevel(this.mob).getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING) || !this.mob.canPickUpLoot()) return false; // Paper - respect game and entity rules for picking up items // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
if (!this.mob.hasActiveRaid()) {
|
||||||
|
return true;
|
||||||
|
} else if (this.mob.getCurrentRaid().isOver()) {
|
||||||
|
diff --git a/net/minecraft/world/level/block/CropBlock.java b/net/minecraft/world/level/block/CropBlock.java
|
||||||
|
index bc0969f40814094e42a860a72314fccd1a66fabe..b4230c95f07020c5f848962d93fdf6bf454ae231 100644
|
||||||
|
--- a/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 {
|
||||||
|
@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 && 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
|
||||||
|
serverLevel.destroyBlock(pos, true, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/world/level/block/FarmBlock.java b/net/minecraft/world/level/block/FarmBlock.java
|
||||||
|
index 6fd53eb4c5bfa412ebec819c41eb2a8c4047a77e..35abe25db4b7474e71ace3db0a06361e33ae2ddf 100644
|
||||||
|
--- a/net/minecraft/world/level/block/FarmBlock.java
|
||||||
|
+++ b/net/minecraft/world/level/block/FarmBlock.java
|
||||||
|
@@ -114,7 +114,7 @@ public class FarmBlock extends Block {
|
||||||
|
if (level instanceof ServerLevel serverLevel
|
||||||
|
&& level.random.nextFloat() < fallDistance - 0.5F
|
||||||
|
&& entity instanceof LivingEntity
|
||||||
|
- && (entity instanceof Player || serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))
|
||||||
|
+ && (entity instanceof Player || serverLevel.purpurConfig.farmlandBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))
|
||||||
|
&& entity.getBbWidth() * entity.getBbWidth() * entity.getBbHeight() > 0.512F) {
|
||||||
|
// CraftBukkit start - Interact soil
|
||||||
|
org.bukkit.event.Cancellable cancellable;
|
||||||
|
diff --git a/net/minecraft/world/level/block/PowderSnowBlock.java b/net/minecraft/world/level/block/PowderSnowBlock.java
|
||||||
|
index 9c0ded7ae7e3a520704033a866f80743ae85d772..4f3646961beb877520e257e11224c3045467d351 100644
|
||||||
|
--- a/net/minecraft/world/level/block/PowderSnowBlock.java
|
||||||
|
+++ b/net/minecraft/world/level/block/PowderSnowBlock.java
|
||||||
|
@@ -84,7 +84,7 @@ public class PowderSnowBlock extends Block implements BucketPickup {
|
||||||
|
// CraftBukkit - move down
|
||||||
|
&& entity.mayInteract(serverLevel, pos)) {
|
||||||
|
// CraftBukkit start
|
||||||
|
- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !(serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || entity instanceof Player))) {
|
||||||
|
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !(serverLevel.purpurConfig.powderSnowBypassMobGriefing ^ serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || entity instanceof Player))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// CraftBukkit end
|
||||||
|
diff --git a/net/minecraft/world/level/block/TurtleEggBlock.java b/net/minecraft/world/level/block/TurtleEggBlock.java
|
||||||
|
index e5a0ee60a5565540ca313f6734637d99c66a8397..5618c67fcd8490262e837a964232cd8cb97e7b4f 100644
|
||||||
|
--- a/net/minecraft/world/level/block/TurtleEggBlock.java
|
||||||
|
+++ b/net/minecraft/world/level/block/TurtleEggBlock.java
|
||||||
|
@@ -210,7 +210,7 @@ public class TurtleEggBlock extends Block {
|
||||||
|
}
|
||||||
|
if (entity instanceof Player) return true;
|
||||||
|
|
||||||
|
- return level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING);
|
||||||
|
+ return level.purpurConfig.turtleEggsBypassMobGriefing ^ level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur - Add mobGriefing bypass to everything affected
|
||||||
|
// Purpur end - Add turtle egg block options
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -113,6 +113,9 @@ public class PurpurWorldConfig {
|
|||||||
public int raidCooldownSeconds = 0;
|
public int raidCooldownSeconds = 0;
|
||||||
public int animalBreedingCooldownSeconds = 0;
|
public int animalBreedingCooldownSeconds = 0;
|
||||||
public boolean persistentDroppableEntityDisplayNames = true;
|
public boolean persistentDroppableEntityDisplayNames = true;
|
||||||
|
public boolean entitiesPickUpLootBypassMobGriefing = false;
|
||||||
|
public boolean fireballsBypassMobGriefing = false;
|
||||||
|
public boolean projectilesBypassMobGriefing = false;
|
||||||
private void miscGameplayMechanicsSettings() {
|
private void miscGameplayMechanicsSettings() {
|
||||||
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
|
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
|
||||||
boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand);
|
boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand);
|
||||||
@@ -124,6 +127,9 @@ public class PurpurWorldConfig {
|
|||||||
raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds);
|
raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds);
|
||||||
animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds);
|
animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds);
|
||||||
persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames);
|
persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames);
|
||||||
|
entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing);
|
||||||
|
fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing);
|
||||||
|
projectilesBypassMobGriefing = getBoolean("gameplay-mechanics.projectiles-bypass-mob-griefing", projectilesBypassMobGriefing);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -393,9 +399,11 @@ public class PurpurWorldConfig {
|
|||||||
dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils);
|
dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean farmlandBypassMobGriefing = false;
|
||||||
public boolean farmlandGetsMoistFromBelow = false;
|
public boolean farmlandGetsMoistFromBelow = false;
|
||||||
public boolean farmlandAlpha = false;
|
public boolean farmlandAlpha = false;
|
||||||
private void farmlandSettings() {
|
private void farmlandSettings() {
|
||||||
|
farmlandBypassMobGriefing = getBoolean("blocks.farmland.bypass-mob-griefing", farmlandBypassMobGriefing);
|
||||||
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
|
farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow);
|
||||||
farmlandAlpha = getBoolean("blocks.farmland.use-alpha-farmland", farmlandAlpha);
|
farmlandAlpha = getBoolean("blocks.farmland.use-alpha-farmland", farmlandAlpha);
|
||||||
}
|
}
|
||||||
@@ -420,6 +428,11 @@ public class PurpurWorldConfig {
|
|||||||
lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether);
|
lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean powderSnowBypassMobGriefing = false;
|
||||||
|
private void powderSnowSettings() {
|
||||||
|
powderSnowBypassMobGriefing = getBoolean("blocks.powder_snow.bypass-mob-griefing", powderSnowBypassMobGriefing);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean respawnAnchorExplode = true;
|
public boolean respawnAnchorExplode = true;
|
||||||
public double respawnAnchorExplosionPower = 5.0D;
|
public double respawnAnchorExplosionPower = 5.0D;
|
||||||
public boolean respawnAnchorExplosionFire = true;
|
public boolean respawnAnchorExplosionFire = true;
|
||||||
@@ -449,10 +462,12 @@ public class PurpurWorldConfig {
|
|||||||
public boolean turtleEggsBreakFromExpOrbs = false;
|
public boolean turtleEggsBreakFromExpOrbs = false;
|
||||||
public boolean turtleEggsBreakFromItems = false;
|
public boolean turtleEggsBreakFromItems = false;
|
||||||
public boolean turtleEggsBreakFromMinecarts = false;
|
public boolean turtleEggsBreakFromMinecarts = false;
|
||||||
|
public boolean turtleEggsBypassMobGriefing = false;
|
||||||
private void turtleEggSettings() {
|
private void turtleEggSettings() {
|
||||||
turtleEggsBreakFromExpOrbs = getBoolean("blocks.turtle_egg.break-from-exp-orbs", turtleEggsBreakFromExpOrbs);
|
turtleEggsBreakFromExpOrbs = getBoolean("blocks.turtle_egg.break-from-exp-orbs", turtleEggsBreakFromExpOrbs);
|
||||||
turtleEggsBreakFromItems = getBoolean("blocks.turtle_egg.break-from-items", turtleEggsBreakFromItems);
|
turtleEggsBreakFromItems = getBoolean("blocks.turtle_egg.break-from-items", turtleEggsBreakFromItems);
|
||||||
turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts);
|
turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts);
|
||||||
|
turtleEggsBypassMobGriefing = getBoolean("blocks.turtle_egg.bypass-mob-griefing", turtleEggsBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int waterInfiniteRequiredSources = 2;
|
public int waterInfiniteRequiredSources = 2;
|
||||||
@@ -750,6 +765,7 @@ public class PurpurWorldConfig {
|
|||||||
public double creeperScale = 1.0D;
|
public double creeperScale = 1.0D;
|
||||||
public double creeperChargedChance = 0.0D;
|
public double creeperChargedChance = 0.0D;
|
||||||
public boolean creeperAllowGriefing = true;
|
public boolean creeperAllowGriefing = true;
|
||||||
|
public boolean creeperBypassMobGriefing = false;
|
||||||
private void creeperSettings() {
|
private void creeperSettings() {
|
||||||
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
|
creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable);
|
||||||
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
|
creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater);
|
||||||
@@ -763,6 +779,7 @@ public class PurpurWorldConfig {
|
|||||||
creeperScale = Mth.clamp(getDouble("mobs.creeper.attributes.scale", creeperScale), 0.0625D, 16.0D);
|
creeperScale = Mth.clamp(getDouble("mobs.creeper.attributes.scale", creeperScale), 0.0625D, 16.0D);
|
||||||
creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance);
|
creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance);
|
||||||
creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing);
|
creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing);
|
||||||
|
creeperBypassMobGriefing = getBoolean("mobs.creeper.bypass-mob-griefing", creeperBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean dolphinRidable = false;
|
public boolean dolphinRidable = false;
|
||||||
@@ -863,6 +880,7 @@ public class PurpurWorldConfig {
|
|||||||
public double enderDragonMaxY = 320D;
|
public double enderDragonMaxY = 320D;
|
||||||
public double enderDragonMaxHealth = 200.0D;
|
public double enderDragonMaxHealth = 200.0D;
|
||||||
public boolean enderDragonAlwaysDropsFullExp = false;
|
public boolean enderDragonAlwaysDropsFullExp = false;
|
||||||
|
public boolean enderDragonBypassMobGriefing = false;
|
||||||
private void enderDragonSettings() {
|
private void enderDragonSettings() {
|
||||||
enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable);
|
enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable);
|
||||||
enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater);
|
enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater);
|
||||||
@@ -879,6 +897,7 @@ public class PurpurWorldConfig {
|
|||||||
}
|
}
|
||||||
enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth);
|
enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth);
|
||||||
enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp);
|
enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp);
|
||||||
|
enderDragonBypassMobGriefing = getBoolean("mobs.ender_dragon.bypass-mob-griefing", enderDragonBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean endermanRidable = false;
|
public boolean endermanRidable = false;
|
||||||
@@ -888,6 +907,7 @@ public class PurpurWorldConfig {
|
|||||||
public double endermanScale = 1.0D;
|
public double endermanScale = 1.0D;
|
||||||
public boolean endermanAllowGriefing = true;
|
public boolean endermanAllowGriefing = true;
|
||||||
public boolean endermanDespawnEvenWithBlock = false;
|
public boolean endermanDespawnEvenWithBlock = false;
|
||||||
|
public boolean endermanBypassMobGriefing = false;
|
||||||
private void endermanSettings() {
|
private void endermanSettings() {
|
||||||
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
|
endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable);
|
||||||
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
|
endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater);
|
||||||
@@ -901,6 +921,7 @@ public class PurpurWorldConfig {
|
|||||||
endermanScale = Mth.clamp(getDouble("mobs.enderman.attributes.scale", endermanScale), 0.0625D, 16.0D);
|
endermanScale = Mth.clamp(getDouble("mobs.enderman.attributes.scale", endermanScale), 0.0625D, 16.0D);
|
||||||
endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing);
|
endermanAllowGriefing = getBoolean("mobs.enderman.allow-griefing", endermanAllowGriefing);
|
||||||
endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock);
|
endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock);
|
||||||
|
endermanBypassMobGriefing = getBoolean("mobs.enderman.bypass-mob-griefing", endermanBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean endermiteRidable = false;
|
public boolean endermiteRidable = false;
|
||||||
@@ -926,6 +947,7 @@ public class PurpurWorldConfig {
|
|||||||
public boolean evokerControllable = true;
|
public boolean evokerControllable = true;
|
||||||
public double evokerMaxHealth = 24.0D;
|
public double evokerMaxHealth = 24.0D;
|
||||||
public double evokerScale = 1.0D;
|
public double evokerScale = 1.0D;
|
||||||
|
public boolean evokerBypassMobGriefing = false;
|
||||||
private void evokerSettings() {
|
private void evokerSettings() {
|
||||||
evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable);
|
evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable);
|
||||||
evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater);
|
evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater);
|
||||||
@@ -937,6 +959,7 @@ public class PurpurWorldConfig {
|
|||||||
}
|
}
|
||||||
evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth);
|
evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth);
|
||||||
evokerScale = Mth.clamp(getDouble("mobs.evoker.attributes.scale", evokerScale), 0.0625D, 16.0D);
|
evokerScale = Mth.clamp(getDouble("mobs.evoker.attributes.scale", evokerScale), 0.0625D, 16.0D);
|
||||||
|
evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean foxRidable = false;
|
public boolean foxRidable = false;
|
||||||
@@ -946,6 +969,7 @@ public class PurpurWorldConfig {
|
|||||||
public double foxScale = 1.0D;
|
public double foxScale = 1.0D;
|
||||||
public boolean foxTypeChangesWithTulips = false;
|
public boolean foxTypeChangesWithTulips = false;
|
||||||
public int foxBreedingTicks = 6000;
|
public int foxBreedingTicks = 6000;
|
||||||
|
public boolean foxBypassMobGriefing = false;
|
||||||
private void foxSettings() {
|
private void foxSettings() {
|
||||||
foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
|
foxRidable = getBoolean("mobs.fox.ridable", foxRidable);
|
||||||
foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
|
foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater);
|
||||||
@@ -959,6 +983,7 @@ public class PurpurWorldConfig {
|
|||||||
foxScale = Mth.clamp(getDouble("mobs.fox.attributes.scale", foxScale), 0.0625D, 16.0D);
|
foxScale = Mth.clamp(getDouble("mobs.fox.attributes.scale", foxScale), 0.0625D, 16.0D);
|
||||||
foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips);
|
foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips);
|
||||||
foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks);
|
foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks);
|
||||||
|
foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean frogRidable = false;
|
public boolean frogRidable = false;
|
||||||
@@ -1435,6 +1460,7 @@ public class PurpurWorldConfig {
|
|||||||
public boolean piglinControllable = true;
|
public boolean piglinControllable = true;
|
||||||
public double piglinMaxHealth = 16.0D;
|
public double piglinMaxHealth = 16.0D;
|
||||||
public double piglinScale = 1.0D;
|
public double piglinScale = 1.0D;
|
||||||
|
public boolean piglinBypassMobGriefing = false;
|
||||||
private void piglinSettings() {
|
private void piglinSettings() {
|
||||||
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
|
piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable);
|
||||||
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
|
piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater);
|
||||||
@@ -1446,6 +1472,7 @@ public class PurpurWorldConfig {
|
|||||||
}
|
}
|
||||||
piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth);
|
piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth);
|
||||||
piglinScale = Mth.clamp(getDouble("mobs.piglin.attributes.scale", piglinScale), 0.0625D, 16.0D);
|
piglinScale = Mth.clamp(getDouble("mobs.piglin.attributes.scale", piglinScale), 0.0625D, 16.0D);
|
||||||
|
piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean piglinBruteRidable = false;
|
public boolean piglinBruteRidable = false;
|
||||||
@@ -1471,6 +1498,7 @@ public class PurpurWorldConfig {
|
|||||||
public boolean pillagerControllable = true;
|
public boolean pillagerControllable = true;
|
||||||
public double pillagerMaxHealth = 24.0D;
|
public double pillagerMaxHealth = 24.0D;
|
||||||
public double pillagerScale = 1.0D;
|
public double pillagerScale = 1.0D;
|
||||||
|
public boolean pillagerBypassMobGriefing = false;
|
||||||
private void pillagerSettings() {
|
private void pillagerSettings() {
|
||||||
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
|
pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable);
|
||||||
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
|
pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater);
|
||||||
@@ -1482,6 +1510,7 @@ public class PurpurWorldConfig {
|
|||||||
}
|
}
|
||||||
pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth);
|
pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth);
|
||||||
pillagerScale = Mth.clamp(getDouble("mobs.pillager.attributes.scale", pillagerScale), 0.0625D, 16.0D);
|
pillagerScale = Mth.clamp(getDouble("mobs.pillager.attributes.scale", pillagerScale), 0.0625D, 16.0D);
|
||||||
|
pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean polarBearRidable = false;
|
public boolean polarBearRidable = false;
|
||||||
@@ -1533,6 +1562,7 @@ public class PurpurWorldConfig {
|
|||||||
public double rabbitNaturalToast = 0.0D;
|
public double rabbitNaturalToast = 0.0D;
|
||||||
public double rabbitNaturalKiller = 0.0D;
|
public double rabbitNaturalKiller = 0.0D;
|
||||||
public int rabbitBreedingTicks = 6000;
|
public int rabbitBreedingTicks = 6000;
|
||||||
|
public boolean rabbitBypassMobGriefing = false;
|
||||||
private void rabbitSettings() {
|
private void rabbitSettings() {
|
||||||
rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
|
rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable);
|
||||||
rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
|
rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater);
|
||||||
@@ -1547,6 +1577,7 @@ public class PurpurWorldConfig {
|
|||||||
rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast);
|
rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast);
|
||||||
rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller);
|
rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller);
|
||||||
rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks);
|
rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks);
|
||||||
|
rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean ravagerRidable = false;
|
public boolean ravagerRidable = false;
|
||||||
@@ -1554,6 +1585,7 @@ public class PurpurWorldConfig {
|
|||||||
public boolean ravagerControllable = true;
|
public boolean ravagerControllable = true;
|
||||||
public double ravagerMaxHealth = 100.0D;
|
public double ravagerMaxHealth = 100.0D;
|
||||||
public double ravagerScale = 1.0D;
|
public double ravagerScale = 1.0D;
|
||||||
|
public boolean ravagerBypassMobGriefing = false;
|
||||||
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);
|
||||||
@@ -1565,6 +1597,7 @@ public class PurpurWorldConfig {
|
|||||||
}
|
}
|
||||||
ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth);
|
ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth);
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean salmonRidable = false;
|
public boolean salmonRidable = false;
|
||||||
@@ -1589,6 +1622,7 @@ public class PurpurWorldConfig {
|
|||||||
public double sheepMaxHealth = 8.0D;
|
public double sheepMaxHealth = 8.0D;
|
||||||
public double sheepScale = 1.0D;
|
public double sheepScale = 1.0D;
|
||||||
public int sheepBreedingTicks = 6000;
|
public int sheepBreedingTicks = 6000;
|
||||||
|
public boolean sheepBypassMobGriefing = false;
|
||||||
private void sheepSettings() {
|
private void sheepSettings() {
|
||||||
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
|
sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable);
|
||||||
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
|
sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater);
|
||||||
@@ -1601,6 +1635,7 @@ public class PurpurWorldConfig {
|
|||||||
sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth);
|
sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth);
|
||||||
sheepScale = Mth.clamp(getDouble("mobs.sheep.attributes.scale", sheepScale), 0.0625D, 16.0D);
|
sheepScale = Mth.clamp(getDouble("mobs.sheep.attributes.scale", sheepScale), 0.0625D, 16.0D);
|
||||||
sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks);
|
sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks);
|
||||||
|
sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean shulkerRidable = false;
|
public boolean shulkerRidable = false;
|
||||||
@@ -1628,6 +1663,7 @@ public class PurpurWorldConfig {
|
|||||||
public double silverfishScale = 1.0D;
|
public double silverfishScale = 1.0D;
|
||||||
public double silverfishMovementSpeed = 0.25D;
|
public double silverfishMovementSpeed = 0.25D;
|
||||||
public double silverfishAttackDamage = 1.0D;
|
public double silverfishAttackDamage = 1.0D;
|
||||||
|
public boolean silverfishBypassMobGriefing = false;
|
||||||
private void silverfishSettings() {
|
private void silverfishSettings() {
|
||||||
silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable);
|
silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable);
|
||||||
silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater);
|
silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater);
|
||||||
@@ -1641,6 +1677,7 @@ public class PurpurWorldConfig {
|
|||||||
silverfishScale = Mth.clamp(getDouble("mobs.silverfish.attributes.scale", silverfishScale), 0.0625D, 16.0D);
|
silverfishScale = Mth.clamp(getDouble("mobs.silverfish.attributes.scale", silverfishScale), 0.0625D, 16.0D);
|
||||||
silverfishMovementSpeed = getDouble("mobs.silverfish.attributes.movement_speed", silverfishMovementSpeed);
|
silverfishMovementSpeed = getDouble("mobs.silverfish.attributes.movement_speed", silverfishMovementSpeed);
|
||||||
silverfishAttackDamage = getDouble("mobs.silverfish.attributes.attack_damage", silverfishAttackDamage);
|
silverfishAttackDamage = getDouble("mobs.silverfish.attributes.attack_damage", silverfishAttackDamage);
|
||||||
|
silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean skeletonRidable = false;
|
public boolean skeletonRidable = false;
|
||||||
@@ -1721,6 +1758,7 @@ public class PurpurWorldConfig {
|
|||||||
public int snowGolemSnowBallMax = 20;
|
public int snowGolemSnowBallMax = 20;
|
||||||
public float snowGolemSnowBallModifier = 10.0F;
|
public float snowGolemSnowBallModifier = 10.0F;
|
||||||
public double snowGolemAttackDistance = 1.25D;
|
public double snowGolemAttackDistance = 1.25D;
|
||||||
|
public boolean snowGolemBypassMobGriefing = false;
|
||||||
private void snowGolemSettings() {
|
private void snowGolemSettings() {
|
||||||
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
|
snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable);
|
||||||
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
|
snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater);
|
||||||
@@ -1738,6 +1776,7 @@ public class PurpurWorldConfig {
|
|||||||
snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax);
|
snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax);
|
||||||
snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier);
|
snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier);
|
||||||
snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance);
|
snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance);
|
||||||
|
snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean snifferRidable = false;
|
public boolean snifferRidable = false;
|
||||||
@@ -1942,6 +1981,7 @@ public class PurpurWorldConfig {
|
|||||||
public int villagerBreedingTicks = 6000;
|
public int villagerBreedingTicks = 6000;
|
||||||
public boolean villagerClericsFarmWarts = false;
|
public boolean villagerClericsFarmWarts = false;
|
||||||
public boolean villagerClericFarmersThrowWarts = true;
|
public boolean villagerClericFarmersThrowWarts = true;
|
||||||
|
public boolean villagerBypassMobGriefing = false;
|
||||||
private void villagerSettings() {
|
private void villagerSettings() {
|
||||||
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
||||||
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
||||||
@@ -1960,6 +2000,7 @@ public class PurpurWorldConfig {
|
|||||||
villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks);
|
villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks);
|
||||||
villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts);
|
villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts);
|
||||||
villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts);
|
villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts);
|
||||||
|
villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean vindicatorRidable = false;
|
public boolean vindicatorRidable = false;
|
||||||
@@ -2041,6 +2082,7 @@ public class PurpurWorldConfig {
|
|||||||
public double witherScale = 1.0D;
|
public double witherScale = 1.0D;
|
||||||
public float witherHealthRegenAmount = 1.0f;
|
public float witherHealthRegenAmount = 1.0f;
|
||||||
public int witherHealthRegenDelay = 20;
|
public int witherHealthRegenDelay = 20;
|
||||||
|
public boolean witherBypassMobGriefing = false;
|
||||||
private void witherSettings() {
|
private void witherSettings() {
|
||||||
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
|
witherRidable = getBoolean("mobs.wither.ridable", witherRidable);
|
||||||
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
|
witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater);
|
||||||
@@ -2059,6 +2101,7 @@ public class PurpurWorldConfig {
|
|||||||
witherScale = Mth.clamp(getDouble("mobs.wither.attributes.scale", witherScale), 0.0625D, 16.0D);
|
witherScale = Mth.clamp(getDouble("mobs.wither.attributes.scale", witherScale), 0.0625D, 16.0D);
|
||||||
witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount);
|
witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount);
|
||||||
witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay);
|
witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay);
|
||||||
|
witherBypassMobGriefing = getBoolean("mobs.wither.bypass-mob-griefing", witherBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean witherSkeletonRidable = false;
|
public boolean witherSkeletonRidable = false;
|
||||||
@@ -2137,6 +2180,7 @@ public class PurpurWorldConfig {
|
|||||||
public double zombieJockeyChance = 0.05D;
|
public double zombieJockeyChance = 0.05D;
|
||||||
public boolean zombieJockeyTryExistingChickens = true;
|
public boolean zombieJockeyTryExistingChickens = true;
|
||||||
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
|
public boolean zombieAggressiveTowardsVillagerWhenLagging = true;
|
||||||
|
public boolean zombieBypassMobGriefing = false;
|
||||||
private void zombieSettings() {
|
private void zombieSettings() {
|
||||||
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
|
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
|
||||||
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
|
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
|
||||||
@@ -2153,6 +2197,7 @@ public class PurpurWorldConfig {
|
|||||||
zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance);
|
zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance);
|
||||||
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
|
zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens);
|
||||||
zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging);
|
zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging);
|
||||||
|
zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean zombieHorseRidable = false;
|
public boolean zombieHorseRidable = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user