From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: huanli233 <392352840@qq.com> Date: Wed, 23 Oct 2024 23:10:48 +0800 Subject: [PATCH] Revert raid changes diff --git a/src/main/java/net/minecraft/world/effect/BadOmenMobEffect.java b/src/main/java/net/minecraft/world/effect/BadOmenMobEffect.java index e33e8db5f24437081d2026e66c13256aa3893a15..07cdc52ad0aa3c246e1769c3dda3c17bb9a10e8b 100644 --- a/src/main/java/net/minecraft/world/effect/BadOmenMobEffect.java +++ b/src/main/java/net/minecraft/world/effect/BadOmenMobEffect.java @@ -22,6 +22,11 @@ class BadOmenMobEffect extends MobEffect { && !serverPlayer.isSpectator() && world.getDifficulty() != Difficulty.PEACEFUL && world.isVillage(serverPlayer.blockPosition())) { + // Leaves start - Revert raid changes + if (org.leavesmc.leaves.LeavesConfig.modify.oldMC.raid.allowBadOmenTriggerRaid) { + return world.getRaids().createOrExtendRaid(serverPlayer, serverPlayer.blockPosition()) != null; + } + // Leaves end - Revert raid changes Raid raid = world.getRaidAt(serverPlayer.blockPosition()); if (raid == null || raid.getRaidOmenLevel() < raid.getMaxRaidOmenLevel()) { serverPlayer.addEffect(new MobEffectInstance(MobEffects.RAID_OMEN, 600, amplifier)); diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java index 9b911254b24bc77930c518a9c61916983ba72e3c..124bfe881356fcee25e8d66c18c918a4c31bafa4 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raider.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java @@ -17,8 +17,11 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; +import net.minecraft.util.Mth; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntitySpawnReason; import net.minecraft.world.entity.EntityType; @@ -32,10 +35,13 @@ import net.minecraft.world.entity.ai.targeting.TargetingConditions; import net.minecraft.world.entity.ai.util.DefaultRandomPos; import net.minecraft.world.entity.ai.village.poi.PoiManager; import net.minecraft.world.entity.ai.village.poi.PoiTypes; +import net.minecraft.world.entity.animal.Wolf; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.monster.AbstractIllager; import net.minecraft.world.entity.monster.PatrollingMonster; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.pathfinder.Path; @@ -134,6 +140,45 @@ public abstract class Raider extends PatrollingMonster { raid.removeFromRaid(this, false); } + + // Leaves start - Revert raid changes + if (this.level() instanceof ServerLevel serverLevel) { + if (org.leavesmc.leaves.LeavesConfig.modify.oldMC.raid.giveBadOmenWhenKillPatrolLeader && this.isPatrolLeader() && raid == null && serverLevel.getRaidAt(this.blockPosition()) == null) { + ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD); + Player entityhuman = null; + + if (entity instanceof Player) { + entityhuman = (Player) entity; + } else if (entity instanceof Wolf) { + Wolf entitywolf = (Wolf) entity; + LivingEntity entityliving = entitywolf.getOwner(); + + if (entitywolf.isTame() && entityliving instanceof Player) { + entityhuman = (Player) entityliving; + } + } + + if (!itemstack.isEmpty() && ItemStack.matches(itemstack, Raid.getOminousBannerInstance(this.registryAccess().lookupOrThrow(Registries.BANNER_PATTERN))) && entityhuman != null) { + MobEffectInstance mobeffect = entityhuman.getEffect(MobEffects.BAD_OMEN); + int i = 1; + + if (mobeffect != null) { + i += mobeffect.getAmplifier(); + entityhuman.removeEffectNoUpdate(MobEffects.BAD_OMEN); + } else { + --i; + } + + i = Mth.clamp(i, 0, 4); + MobEffectInstance mobeffect1 = new MobEffectInstance(MobEffects.BAD_OMEN, 120000, i, false, false, true); + + if (!serverLevel.getGameRules().getBoolean(GameRules.RULE_DISABLE_RAIDS)) { + entityhuman.addEffect(mobeffect1, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.PATROL_CAPTAIN); // CraftBukkit + } + } + } + } + // Leaves end - Revert raid changes } super.die(damageSource);