mirror of
https://github.com/LeavesMC/Leaves.git
synced 2025-12-19 23:09:34 +00:00
114 lines
5.8 KiB
Diff
114 lines
5.8 KiB
Diff
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 038ee9e1ef4c7fc6a92efbba0f2ec9063c236df5..391be234ad2635cabb0eb39eecb1e07d2d872518 100644
|
|
--- a/src/main/java/net/minecraft/world/effect/BadOmenMobEffect.java
|
|
+++ b/src/main/java/net/minecraft/world/effect/BadOmenMobEffect.java
|
|
@@ -1,5 +1,6 @@
|
|
package net.minecraft.world.effect;
|
|
|
|
+import net.minecraft.core.BlockPos;
|
|
import net.minecraft.server.level.ServerLevel;
|
|
import net.minecraft.server.level.ServerPlayer;
|
|
import net.minecraft.world.Difficulty;
|
|
@@ -20,6 +21,11 @@ class BadOmenMobEffect extends MobEffect {
|
|
public boolean applyEffectTick(LivingEntity entity, int amplifier) {
|
|
if (entity instanceof ServerPlayer serverPlayer && !serverPlayer.isSpectator()) {
|
|
ServerLevel serverLevel = serverPlayer.serverLevel();
|
|
+ // Leaves start - Revert raid changes
|
|
+ if (org.leavesmc.leaves.LeavesConfig.allowBadOmenTriggerRaid) {
|
|
+ return this.legacyApplyEffectTick(serverPlayer, serverLevel);
|
|
+ }
|
|
+ // Leaves end - Revert raid changes
|
|
if (serverLevel.getDifficulty() != Difficulty.PEACEFUL && serverLevel.isVillage(serverPlayer.blockPosition())) {
|
|
Raid raid = serverLevel.getRaidAt(serverPlayer.blockPosition());
|
|
if (raid == null || raid.getRaidOmenLevel() < raid.getMaxRaidOmenLevel()) {
|
|
@@ -32,4 +38,9 @@ class BadOmenMobEffect extends MobEffect {
|
|
|
|
return true;
|
|
}
|
|
+
|
|
+ private boolean legacyApplyEffectTick(ServerPlayer player, ServerLevel world) {
|
|
+ BlockPos blockPos = player.blockPosition();
|
|
+ return world.getDifficulty() == Difficulty.PEACEFUL || !world.isVillage(blockPos) || world.getRaids().createOrExtendRaid(player, blockPos) == null;
|
|
+ }
|
|
}
|
|
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 6e68f8fa8280a106b1a262d86aa130e89d4f5cce..2401ebf4f2cbc841c7938eba2e0bd7dd54124c9e 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/raid/Raider.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java
|
|
@@ -16,8 +16,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.EntityType;
|
|
import net.minecraft.world.entity.EquipmentSlot;
|
|
@@ -30,10 +33,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.phys.Vec3;
|
|
@@ -131,6 +137,43 @@ public abstract class Raider extends PatrollingMonster {
|
|
|
|
raid.removeFromRaid(this, false);
|
|
}
|
|
+
|
|
+ // Leaves start - Revert raid changes
|
|
+ if (org.leavesmc.leaves.LeavesConfig.giveBadOmenWhenKillPatrolLeader && this.isPatrolLeader() && raid == null && ((ServerLevel) this.level()).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.getLeaderBannerInstance(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 (!this.level().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);
|