From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Encode42 Date: Tue, 5 Jan 2021 22:21:56 -0500 Subject: [PATCH] Add mobGriefing override to everything affected diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java index 34d122f58ff32cb47b79ab1348fee3224315d2dd..af7a1eebe6f3d9876a1a730f4ca9b0814ed57332 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -1953,7 +1953,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.level() instanceof ServerLevel serverLevel) { boolean var6 = false; if (this.dead && killer instanceof WitherBoss) { // Paper - if (serverLevel.getGameRules().get(GameRules.MOB_GRIEFING)) { + if (serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.witherMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected BlockPos pos = this.blockPosition(); BlockState state = Blocks.WITHER_ROSE.defaultBlockState(); if (this.level().getBlockState(pos).isAir() && state.canSurvive(this.level(), pos)) { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java index d9c5d2e1c638370434e52422c9643c3521f1bb42..d5c50e5f5a850995d4636e155e5d51e190b7095c 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -566,7 +566,7 @@ public abstract class Mob extends LivingEntity implements Targeting, EquipmentUs && this.canPickUpLoot() && this.isAlive() && !this.dead - && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING)) { + && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.entitiesPickUpLootMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected Vec3i pickupReach = this.getPickupReach(); for (ItemEntity entity : this.level() diff --git a/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java b/net/minecraft/world/entity/ai/behavior/HarvestFarmland.java index 959f9fb20c428879fdc2d4a59904cf6b1a8f4d88..a3590f9b54520c2b7e11de706fba685c3b860f7c 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 { @Override protected boolean checkExtraStartConditions(final ServerLevel level, final Villager body) { - if (!level.getGameRules().get(GameRules.MOB_GRIEFING)) { + if (!level.getGameRules().get(GameRules.MOB_GRIEFING, level.purpurConfig.villagerMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected return false; } diff --git a/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java b/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java index e33598c3ea748f81c7efcaa06d9d0597624a852b..80a42d030969e264a93108ca3f2c296dd295ad1d 100644 --- a/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java +++ b/net/minecraft/world/entity/ai/goal/BreakDoorGoal.java @@ -31,7 +31,7 @@ public class BreakDoorGoal extends DoorInteractGoal { @Override public boolean canUse() { return super.canUse() - && getServerLevel(this.mob).getGameRules().get(GameRules.MOB_GRIEFING) + && getServerLevel(this.mob).getGameRules().get(GameRules.MOB_GRIEFING, this.mob.level().purpurConfig.zombieMobGriefingOverride) // Purpur - Add mobGriefing override 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 c2a1b2b79c4b55dc09558cf6d998f09308196cb2..96cc2c94fe5bfde6a04b83b9bdb925e1454d109c 100644 --- a/net/minecraft/world/entity/ai/goal/EatBlockGoal.java +++ b/net/minecraft/world/entity/ai/goal/EatBlockGoal.java @@ -64,7 +64,7 @@ public class EatBlockGoal extends Goal { BlockPos pos = this.mob.blockPosition(); final BlockState blockState = this.level.getBlockState(pos); // Paper - fix wrong block state if (IS_EDIBLE.test(blockState)) { // Paper - fix wrong block state - if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, pos, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).getGameRules().get(GameRules.MOB_GRIEFING))) { // CraftBukkit // Paper - fix wrong block state + if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, pos, blockState.getFluidState().createLegacyBlock(), !getServerLevel(this.level).getGameRules().get(GameRules.MOB_GRIEFING, getServerLevel(this.level).purpurConfig.sheepMobGriefingOverride))) { // CraftBukkit // Paper - fix wrong block state // Purpur - Add mobGriefing override to everything affected this.level.destroyBlock(pos, false); } @@ -72,7 +72,7 @@ public class EatBlockGoal extends Goal { } else { BlockPos below = pos.below(); if (this.level.getBlockState(below).is(Blocks.GRASS_BLOCK)) { - if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, below, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).getGameRules().get(GameRules.MOB_GRIEFING))) { // CraftBukkit // Paper - Fix wrong block state + if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.mob, below, Blocks.DIRT.defaultBlockState(), !getServerLevel(this.level).getGameRules().get(GameRules.MOB_GRIEFING, getServerLevel(this.level).purpurConfig.sheepMobGriefingOverride))) { // CraftBukkit // Paper - Fix wrong block state // Purpur - Add mobGriefing override to everything affected this.level.levelEvent(LevelEvent.PARTICLES_DESTROY_BLOCK, below, Block.getId(Blocks.GRASS_BLOCK.defaultBlockState())); this.level.setBlock(below, Blocks.DIRT.defaultBlockState(), Block.UPDATE_CLIENTS); } diff --git a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java index ff0f99d4b560a1c0721885b0eba5bd5ab2087bd7..51c72524c14c078d1bb0539f0b54fc4af1c1412d 100644 --- a/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java +++ b/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java @@ -34,7 +34,7 @@ public class RemoveBlockGoal extends MoveToBlockGoal { @Override public boolean canUse() { - if (!getServerLevel(this.removerMob).getGameRules().get(GameRules.MOB_GRIEFING)) { + if (!getServerLevel(this.removerMob).getGameRules().get(GameRules.MOB_GRIEFING, getServerLevel(this.removerMob).purpurConfig.zombieMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected return false; } else if (this.nextStartTick > 0) { this.nextStartTick--; diff --git a/net/minecraft/world/entity/animal/fox/Fox.java b/net/minecraft/world/entity/animal/fox/Fox.java index bd4c29146ec791a7939fdea6c3f22badaa7b393a..ed481b0d7c7787ef01797ef553b85b1bac6027c9 100644 --- a/net/minecraft/world/entity/animal/fox/Fox.java +++ b/net/minecraft/world/entity/animal/fox/Fox.java @@ -1068,7 +1068,7 @@ public class Fox extends Animal { } protected void onReachedTarget() { - if (getServerLevel(Fox.this.level()).getGameRules().get(GameRules.MOB_GRIEFING)) { + if (getServerLevel(Fox.this.level()).getGameRules().get(GameRules.MOB_GRIEFING, getServerLevel(Fox.this.level()).purpurConfig.foxMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected BlockState state = Fox.this.level().getBlockState(this.blockPos); if (state.is(Blocks.SWEET_BERRY_BUSH)) { this.pickSweetBerries(state); diff --git a/net/minecraft/world/entity/animal/golem/SnowGolem.java b/net/minecraft/world/entity/animal/golem/SnowGolem.java index bd594838ae25f16e6e16335e06c4d981c5ecdc2a..7091f5bc2ecb9d4b86162fe364447df65d8e9348 100644 --- a/net/minecraft/world/entity/animal/golem/SnowGolem.java +++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java @@ -135,7 +135,7 @@ public class SnowGolem extends AbstractGolem implements RangedAttackMob, Shearab this.hurtServer(serverLevel, this.damageSources().onFire().knownCause(org.bukkit.event.entity.EntityDamageEvent.DamageCause.MELTING), 1.0F); // CraftBukkit } - if (!serverLevel.getGameRules().get(GameRules.MOB_GRIEFING)) { + if (!serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.snowGolemMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected return; } diff --git a/net/minecraft/world/entity/animal/rabbit/Rabbit.java b/net/minecraft/world/entity/animal/rabbit/Rabbit.java index f0a0c698c612de039a24b51f6afa87df8008d5b7..07db369d748df1e870339eb06032146d6fba8d35 100644 --- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java +++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java @@ -696,7 +696,7 @@ public class Rabbit extends Animal { @Override public boolean canUse() { if (this.nextStartTick <= 0) { - if (!getServerLevel(this.rabbit).getGameRules().get(GameRules.MOB_GRIEFING)) { + if (!getServerLevel(this.rabbit).getGameRules().get(GameRules.MOB_GRIEFING, getServerLevel(this.rabbit).purpurConfig.rabbitMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected return false; } diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java index 6e2afa71d0d2da4cca868f617d29b3cc9071553d..9cdbb284c190f2130824c881000880958994013f 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -535,7 +535,7 @@ public class EnderDragon extends Mob implements Enemy { BlockPos blockPos = new BlockPos(x, y, z); BlockState state = level.getBlockState(blockPos); if (!state.isAir() && !state.is(BlockTags.DRAGON_TRANSPARENT)) { - if (level.getGameRules().get(GameRules.MOB_GRIEFING) && !state.is(BlockTags.DRAGON_IMMUNE)) { + if (level.getGameRules().get(GameRules.MOB_GRIEFING, level.purpurConfig.enderDragonMobGriefingOverride) && !state.is(BlockTags.DRAGON_IMMUNE)) { // Purpur - Add mobGriefing override to everything affected // CraftBukkit start - Add blocks to list rather than destroying them //flag1 = level.removeBlock(blockPos, false) || flag1; destroyedBlock = true; diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java index 8b2716294b18da6fae981e088b8ddb1f2ffcfb2e..06f09cf81d1ad42beda79dbd5087c2d7264a9612 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -492,7 +492,7 @@ public class WitherBoss extends Monster implements RangedAttackMob { if (this.destroyBlocksTick > 0) { this.destroyBlocksTick--; - if (this.destroyBlocksTick == 0 && level.getGameRules().get(GameRules.MOB_GRIEFING)) { + if (this.destroyBlocksTick == 0 && level.getGameRules().get(GameRules.MOB_GRIEFING, level.purpurConfig.witherMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected boolean destroyed = false; int width = Mth.floor(this.getBbWidth() / 2.0F + 1.0F); int height = Mth.floor(this.getBbHeight()); diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java index e9b28ab9af835e8394855f08edb3cc463022d6f9..3f233ad5cf2514813ec8d3d36a59f716615a8b18 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -504,7 +504,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().get(GameRules.MOB_GRIEFING) + && getServerLevel(this.enderman).getGameRules().get(GameRules.MOB_GRIEFING, this.enderman.level().purpurConfig.endermanMobGriefingOverride) // Purpur - Add mobGriefing override to everything affected && this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0; } @@ -648,7 +648,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().get(GameRules.MOB_GRIEFING) + && getServerLevel(this.enderman).getGameRules().get(GameRules.MOB_GRIEFING, this.enderman.level().purpurConfig.endermanMobGriefingOverride) // Purpur - Add mobGriefing override to everything affected && this.enderman.getRandom().nextInt(reducedTickDelay(20)) == 0; } diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java index 3e2fa1f4e9c820af76ef5f4354ca66fae182da7b..01e09b39ac5385e7cbfa8a38df94884c17f8f8c0 100644 --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java @@ -177,7 +177,7 @@ public class Ravager extends Raider { this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(Mth.lerp(0.1, baseValue, maxSpeed)); } - if (this.level() instanceof ServerLevel serverLevel && this.horizontalCollision && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING)) { + if (this.level() instanceof ServerLevel serverLevel && this.horizontalCollision && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.ravagerMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected boolean destroyedBlock = false; AABB bb = this.getBoundingBox().inflate(0.2); diff --git a/net/minecraft/world/entity/monster/Silverfish.java b/net/minecraft/world/entity/monster/Silverfish.java index 6037500c084e709110dfe512f110b505111b6d71..34bb4c573f72b32931e47e5502a342a8d2283a6c 100644 --- a/net/minecraft/world/entity/monster/Silverfish.java +++ b/net/minecraft/world/entity/monster/Silverfish.java @@ -173,7 +173,7 @@ public class Silverfish extends Monster { } RandomSource random = this.mob.getRandom(); - if (getServerLevel(this.mob).getGameRules().get(GameRules.MOB_GRIEFING) && random.nextInt(reducedTickDelay(10)) == 0) { + if (getServerLevel(this.mob).getGameRules().get(GameRules.MOB_GRIEFING, getServerLevel(this.mob).purpurConfig.silverfishMobGriefingOverride) && random.nextInt(reducedTickDelay(10)) == 0) { // Purpur - Add mobGriefing override to everything affected this.selectedDirection = Direction.getRandom(random); BlockPos pos = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5, this.mob.getZ()).relative(this.selectedDirection); BlockState blockState = this.mob.level().getBlockState(pos); @@ -249,7 +249,7 @@ public class Silverfish extends Monster { Block block = blockState.getBlock(); if (block instanceof InfestedBlock) { // CraftBukkit start - BlockState afterState = getServerLevel(level).getGameRules().get(GameRules.MOB_GRIEFING) ? blockState.getFluidState().createLegacyBlock() : ((InfestedBlock) block).hostStateByInfested(level.getBlockState(testPos)); // Paper - fix wrong block state + BlockState afterState = getServerLevel(level).getGameRules().get(GameRules.MOB_GRIEFING, getServerLevel(level).purpurConfig.silverfishMobGriefingOverride) ? blockState.getFluidState().createLegacyBlock() : ((InfestedBlock) block).hostStateByInfested(level.getBlockState(testPos)); // Paper - fix wrong block state // Purpur - Add mobGriefing override to everything affected if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.silverfish, testPos, afterState)) { // Paper - fix wrong block state continue; } diff --git a/net/minecraft/world/entity/monster/illager/Evoker.java b/net/minecraft/world/entity/monster/illager/Evoker.java index d41c3efa257f82981fbbabd527c4e748f448bfa9..40fb26c7b0f5975a58d218d799fa391661e1c748 100644 --- a/net/minecraft/world/entity/monster/illager/Evoker.java +++ b/net/minecraft/world/entity/monster/illager/Evoker.java @@ -318,7 +318,7 @@ public class Evoker extends SpellcasterIllager { } ServerLevel level = getServerLevel(Evoker.this.level()); - if (!level.getGameRules().get(GameRules.MOB_GRIEFING)) { + if (!level.getGameRules().get(GameRules.MOB_GRIEFING, level.purpurConfig.evokerMobGriefingOverride)) { // Purpur - Add mobGriefing override to everything affected return false; } diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java index 17ce12d23ec9e1e03c02755711dfecb6d207af61..d00490669c66343e37d2a54a051f02995e686c84 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -416,7 +416,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean wantsToPickUp(final ServerLevel level, final ItemStack itemStack) { - return level.getGameRules().get(GameRules.MOB_GRIEFING) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, itemStack); + return level.getGameRules().get(GameRules.MOB_GRIEFING, level.purpurConfig.piglinMobGriefingOverride) && this.canPickUpLoot() && PiglinAi.wantsToPickup(this, itemStack); // Purpur - Add mobGriefing override to everything affected } protected boolean canReplaceCurrentItem(final ItemStack newItemStack) { diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java index 9af4bf76974f05d9f752bbd4e8037560ec481cdf..7f3673a44b0200d18dbf7f1fac8d377bfc994232 100644 --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java @@ -460,7 +460,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { @Override public boolean mayInteract(final ServerLevel level, final BlockPos pos) { Entity owner = this.getOwner(); - return owner instanceof Player ? owner.mayInteract(level, pos) : owner == null || level.getGameRules().get(GameRules.MOB_GRIEFING); + return owner instanceof Player ? owner.mayInteract(level, pos) : owner == null || level.getGameRules().get(GameRules.MOB_GRIEFING, level.purpurConfig.projectilesMobGriefingOverride); // Purpur - Add mobGriefing override to everything affected } public boolean mayBreak(final ServerLevel level) { diff --git a/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java b/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java index 711b97aa9e49b7edee34c91d77b1005be4fa96bd..bcda871c7db7a13f85e04e8fb91be13da15992bc 100644 --- a/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java +++ b/net/minecraft/world/entity/projectile/hurtingprojectile/LargeFireball.java @@ -20,20 +20,20 @@ public class LargeFireball extends Fireball { public LargeFireball(final EntityType type, final Level level) { super(type, level); - this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING); // CraftBukkit + this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.fireballsMobGriefingOverride); // CraftBukkit // Purpur - Add mobGriefing override to everything affected } public LargeFireball(final Level level, final LivingEntity mob, final Vec3 direction, final int explosionPower) { super(EntityType.FIREBALL, mob, direction, level); this.explosionPower = explosionPower; - this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING); // CraftBukkit + this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.fireballsMobGriefingOverride); // CraftBukkit // Purpur - Add mobGriefing override to everything affected } @Override protected void onHit(final HitResult hitResult) { super.onHit(hitResult); if (this.level() instanceof ServerLevel serverLevel) { - // boolean grief = serverLevel.getGameRules().get(GameRules.MOB_GRIEFING); // CraftBukkit - baked into fields (see constructor) + // boolean grief = serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.fireballsMobGriefingOverride); // CraftBukkit - baked into fields (see constructor) // Purpur - Add mobGriefing override 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()); if (event.callEvent()) { diff --git a/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java b/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java index 55000ce5010321323bf79007ef8de637a492657f..b7f5f434b8b3abbaab7f65fc591ddf18308b5a2f 100644 --- a/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java +++ b/net/minecraft/world/entity/projectile/hurtingprojectile/SmallFireball.java @@ -25,7 +25,7 @@ public class SmallFireball extends Fireball { super(EntityType.SMALL_FIREBALL, mob, direction, level); // CraftBukkit start if (this.getOwner() != null && this.getOwner() instanceof Mob) { - this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING); + this.isIncendiary = (level instanceof ServerLevel serverLevel) && serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.fireballsMobGriefingOverride); // Purpur - Add mobGriefing override to everything affected } // CraftBukkit end } diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java index cf689dae6978577970e39bf3004be551b4908cd1..869af8dffe56a52ea1406a6598df733f724ee654 100644 --- a/net/minecraft/world/entity/raid/Raider.java +++ b/net/minecraft/world/entity/raid/Raider.java @@ -397,7 +397,7 @@ public abstract class Raider extends PatrollingMonster { } private boolean cannotPickUpBanner() { - if (!getServerLevel(this.mob).getGameRules().get(net.minecraft.world.level.gamerules.GameRules.MOB_GRIEFING)) return true; // Paper - respect game and entity rules for picking up items + if (!getServerLevel(this.mob).getGameRules().get(net.minecraft.world.level.gamerules.GameRules.MOB_GRIEFING, this.mob.level().purpurConfig.pillagerMobGriefingOverride)) return true; // Paper - respect game and entity rules for picking up items // Purpur - Add mobGriefing override to everything affected if (!this.mob.hasActiveRaid()) { return true; } diff --git a/net/minecraft/world/level/block/CropBlock.java b/net/minecraft/world/level/block/CropBlock.java index a47e5e38ef5c13da3827174121c1ec4b9ffbbce2..0dfb632b339b24564744b1f5c0d52d7fed66d265 100644 --- a/net/minecraft/world/level/block/CropBlock.java +++ b/net/minecraft/world/level/block/CropBlock.java @@ -177,7 +177,7 @@ public class CropBlock extends VegetationBlock implements BonemealableBlock { final boolean isPrecise ) { 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 && serverLevel.purpurConfig.ravagerGriefableBlocks.contains(serverLevel.getBlockState(pos).getBlock()) && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().get(GameRules.MOB_GRIEFING))) { // CraftBukkit // Purpur - Configurable ravager griefable blocks list + if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && serverLevel.purpurConfig.ravagerGriefableBlocks.contains(serverLevel.getBlockState(pos).getBlock()) && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.ravagerMobGriefingOverride))) { // CraftBukkit // Purpur - Configurable ravager griefable blocks list // Purpur - Add mobGriefing override to everything affected serverLevel.destroyBlock(pos, true, entity); } diff --git a/net/minecraft/world/level/block/FarmlandBlock.java b/net/minecraft/world/level/block/FarmlandBlock.java index d4a7099782965fe2c24c4e5fc48aab07a3f1ec45..830067a48d60d8fe85e0878cff2a7ad41cc7aed2 100644 --- a/net/minecraft/world/level/block/FarmlandBlock.java +++ b/net/minecraft/world/level/block/FarmlandBlock.java @@ -113,7 +113,7 @@ public class FarmlandBlock extends Block { if (level instanceof ServerLevel serverLevel && (serverLevel.purpurConfig.farmlandTrampleHeight >= 0D ? fallDistance >= serverLevel.purpurConfig.farmlandTrampleHeight : level.getRandom().nextFloat() < fallDistance - 0.5) // Purpur - Configurable farmland trample height && entity instanceof LivingEntity - && (entity instanceof Player || serverLevel.getGameRules().get(GameRules.MOB_GRIEFING)) + && (entity instanceof Player || serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.farmlandMobGriefingOverride)) // Purpur - Add mobGriefing override to everything affected && 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 648262547aadff8e0615a93a9834ca654e581b3a..022daf760a649720c46e6e31591f2c1ad8a8f3ea 100644 --- a/net/minecraft/world/level/block/PowderSnowBlock.java +++ b/net/minecraft/world/level/block/PowderSnowBlock.java @@ -103,7 +103,7 @@ public class PowderSnowBlock extends Block implements BucketPickup { // CraftBukkit - move down && e.mayInteract(serverLevel, position)) { // CraftBukkit start - if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(e, pos, Blocks.AIR.defaultBlockState(), !(serverLevel.getGameRules().get(GameRules.MOB_GRIEFING) || e instanceof Player))) { + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(e, pos, Blocks.AIR.defaultBlockState(), !(serverLevel.getGameRules().get(GameRules.MOB_GRIEFING, serverLevel.purpurConfig.powderSnowMobGriefingOverride) || e instanceof Player))) { // Purpur - Add mobGriefing override 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 9293faf988be7013dbeddc9f98beb69a2dac9928..4f1e08c0e3f8ea89a55e02e8f0197fe4336ae0e2 100644 --- a/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/net/minecraft/world/level/block/TurtleEggBlock.java @@ -221,7 +221,7 @@ public class TurtleEggBlock extends Block { // Purpur end - Option to disable turtle egg trampling with feather falling if (entity instanceof Player) return true; - return level.getGameRules().get(GameRules.MOB_GRIEFING); + return level.getGameRules().get(GameRules.MOB_GRIEFING, level.purpurConfig.turtleEggsMobGriefingOverride); // Purpur - Add mobGriefing override to everything affected // Purpur end - Add turtle egg block options } } diff --git a/net/minecraft/world/level/gamerules/GameRules.java b/net/minecraft/world/level/gamerules/GameRules.java index 49801f8b037913de5896d4e31a1e36d7ce597875..c333f0ca9c478f8a431fc85c50d6f97435c6d5ea 100644 --- a/net/minecraft/world/level/gamerules/GameRules.java +++ b/net/minecraft/world/level/gamerules/GameRules.java @@ -121,6 +121,13 @@ public class GameRules { return this.rules.keySet().stream(); } + public boolean get(GameRule rule, Boolean gameRuleOverride) { + if (gameRuleOverride != null) { + return gameRuleOverride; + } + return (Boolean) this.get(rule); + } + public T get(final GameRule gameRule) { T value = this.rules.get(gameRule); if (value == null) {