mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
361 lines
29 KiB
Diff
361 lines
29 KiB
Diff
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
|
|
}
|
|
}
|