205 lines
12 KiB
Diff
205 lines
12 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
|
|
Date: Fri, 11 Apr 2025 16:53:57 +0800
|
|
Subject: [PATCH] Add config to revert raid changes
|
|
|
|
|
|
diff --git a/net/minecraft/world/effect/BadOmenMobEffect.java b/net/minecraft/world/effect/BadOmenMobEffect.java
|
|
index 80f17f33f670018240c854df589cf90cdeab6e70..8672757a4d5fb5c247599782fece6b8d7d6ec921 100644
|
|
--- a/net/minecraft/world/effect/BadOmenMobEffect.java
|
|
+++ b/net/minecraft/world/effect/BadOmenMobEffect.java
|
|
@@ -22,6 +22,11 @@ class BadOmenMobEffect extends MobEffect {
|
|
&& !serverPlayer.isSpectator()
|
|
&& level.getDifficulty() != Difficulty.PEACEFUL
|
|
&& level.isVillage(serverPlayer.blockPosition())) {
|
|
+ // Leaves start - Revert raid changes
|
|
+ if (me.earthme.luminol.config.modules.misc.RaidChangesConfig.trigger) {
|
|
+ return level.getRaids().createOrExtendRaid(serverPlayer, serverPlayer.blockPosition()) == null;
|
|
+ }
|
|
+ // Leaves end - Revert raid changes
|
|
Raid raidAt = level.getRaidAt(serverPlayer.blockPosition());
|
|
if (raidAt == null || raidAt.getRaidOmenLevel() < raidAt.getMaxRaidOmenLevel()) {
|
|
serverPlayer.addEffect(new MobEffectInstance(MobEffects.RAID_OMEN, 600, amplifier));
|
|
diff --git a/net/minecraft/world/entity/raid/Raid.java b/net/minecraft/world/entity/raid/Raid.java
|
|
index dbb207c638a64b733dc21704033ff55ca1f44f1d..8401b3e9968e48c7a936386f3290315091501d4f 100644
|
|
--- a/net/minecraft/world/entity/raid/Raid.java
|
|
+++ b/net/minecraft/world/entity/raid/Raid.java
|
|
@@ -340,7 +340,20 @@ public class Raid {
|
|
}
|
|
|
|
if (flag1) {
|
|
- this.waveSpawnPos = this.getValidSpawnPos(level);
|
|
+ // Luminol Start - Raid revert
|
|
+ if (!me.earthme.luminol.config.modules.misc.RaidChangesConfig.posRevert) {
|
|
+ this.waveSpawnPos = this.getValidSpawnPos(level);
|
|
+ } else {
|
|
+ int n4 = 0;
|
|
+ if (this.raidCooldownTicks < 100) {
|
|
+ n4 = 1;
|
|
+ }
|
|
+ if (this.raidCooldownTicks < 40) {
|
|
+ n4 = 2;
|
|
+ }
|
|
+ this.waveSpawnPos = this.getValidSpawnPos(level, n4);
|
|
+ }
|
|
+ // Luminol End - Raid revert
|
|
}
|
|
|
|
if (this.raidCooldownTicks == 300 || this.raidCooldownTicks % 20 == 0) {
|
|
@@ -375,7 +388,14 @@ public class Raid {
|
|
int i = 0;
|
|
|
|
while (this.shouldSpawnGroup()) {
|
|
- BlockPos blockPos = this.waveSpawnPos.orElseGet(() -> this.findRandomSpawnPos(level, 20));
|
|
+ // Luminol Start - Raid revert
|
|
+ BlockPos blockPos;
|
|
+ if (!me.earthme.luminol.config.modules.misc.RaidChangesConfig.posRevert) {
|
|
+ blockPos = this.waveSpawnPos.orElseGet(() -> this.findRandomSpawnPos(level, 20));
|
|
+ } else {
|
|
+ blockPos = this.waveSpawnPos.isPresent() ? this.waveSpawnPos.get() : this.findRandomSpawnPos(level, i, 20);
|
|
+ }
|
|
+ // Luminol End - Raid revert
|
|
if (blockPos != null) {
|
|
this.started = true;
|
|
this.spawnGroup(level, blockPos);
|
|
@@ -387,7 +407,7 @@ public class Raid {
|
|
i++;
|
|
}
|
|
|
|
- if (i > 5) {
|
|
+ if (i > (me.earthme.luminol.config.modules.misc.RaidChangesConfig.posRevert ? 3 : 5)) { // Luminol - Raid revert
|
|
org.bukkit.craftbukkit.event.CraftEventFactory.callRaidStopEvent(level, this, org.bukkit.event.raid.RaidStopEvent.Reason.UNSPAWNABLE); // CraftBukkit
|
|
this.stop();
|
|
break;
|
|
@@ -458,6 +478,17 @@ public class Raid {
|
|
return blockPos != null ? Optional.of(blockPos) : Optional.empty();
|
|
}
|
|
|
|
+ // Luminol Start - Raid revert
|
|
+ private Optional<BlockPos> getValidSpawnPos(ServerLevel level, int n) {
|
|
+ for (int i = 0; i < 3; ++i) {
|
|
+ BlockPos blockPos = this.findRandomSpawnPos(level, n, 1);
|
|
+ if (blockPos == null) continue;
|
|
+ return Optional.of(blockPos);
|
|
+ }
|
|
+ return Optional.empty();
|
|
+ }
|
|
+ // Luminol End - Raid revert
|
|
+
|
|
private boolean hasMoreWaves() {
|
|
return this.hasBonusWave() ? !this.hasSpawnedBonusWave() : !this.isFinalWave();
|
|
}
|
|
@@ -683,7 +714,7 @@ public class Raid {
|
|
int i2 = this.center.getX() + Mth.floor(Mth.cos(f2) * 32.0F * f) + level.random.nextInt(3) * Mth.floor(f);
|
|
int i3 = this.center.getZ() + Mth.floor(Mth.sin(f2) * 32.0F * f) + level.random.nextInt(3) * Mth.floor(f);
|
|
int height = level.getHeight(Heightmap.Types.WORLD_SURFACE, i2, i3);
|
|
- if (Mth.abs(height - this.center.getY()) <= 96) {
|
|
+ if (me.earthme.luminol.config.modules.misc.RaidChangesConfig.heightCheck || Mth.abs(height - this.center.getY()) <= 96) { // Leaves - Disable height check
|
|
mutableBlockPos.set(i2, height, i3);
|
|
if (!level.isVillage(mutableBlockPos) || i <= 7) {
|
|
int i4 = 10;
|
|
@@ -702,6 +733,26 @@ public class Raid {
|
|
return null;
|
|
}
|
|
|
|
+ // Luminol Start - Raid revert
|
|
+ @Nullable
|
|
+ private BlockPos findRandomSpawnPos(ServerLevel level, int n, int n2) {
|
|
+ int n3 = 2 - n;
|
|
+ BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos();
|
|
+ SpawnPlacementType spawnPlacementType = SpawnPlacements.getPlacementType(EntityType.RAVAGER);
|
|
+ for (int i = 0; i < n2; ++i) {
|
|
+ float f = level.random.nextFloat() * ((float)Math.PI * 2);
|
|
+ int n4 = this.center.getX() + Mth.floor(Mth.cos(f) * 32.0f * (float)n3) + level.random.nextInt(5);
|
|
+ int n5 = this.center.getZ() + Mth.floor(Mth.sin(f) * 32.0f * (float)n3) + level.random.nextInt(5);
|
|
+ int n6 = level.getHeight(Heightmap.Types.WORLD_SURFACE, n4, n5);
|
|
+ mutableBlockPos.set(n4, n6, n5);
|
|
+ if (level.isVillage(mutableBlockPos) && n < 2) continue;
|
|
+ if (!level.hasChunksAt(mutableBlockPos.getX() - 10, mutableBlockPos.getZ() - 10, mutableBlockPos.getX() + 10, mutableBlockPos.getZ() + 10) || !level.isPositionEntityTicking(mutableBlockPos) || !spawnPlacementType.isSpawnPositionOk(level, mutableBlockPos, EntityType.RAVAGER) && (!level.getBlockState(mutableBlockPos.below()).is(Blocks.SNOW) || !level.getBlockState(mutableBlockPos).isAir())) continue;
|
|
+ return mutableBlockPos;
|
|
+ }
|
|
+ return null;
|
|
+ }
|
|
+ // Luminol End - Raid revert
|
|
+
|
|
private boolean addWaveMob(ServerLevel level, int wave, Raider raider) {
|
|
// Folia start - make raids thread-safe
|
|
if (!this.ownsRaid(level)) {
|
|
diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java
|
|
index f6f36c15120da6c57c0cbea3743a0819252cb6cc..cb537b243b16876e7922cd732ab8dad8d046a450 100644
|
|
--- a/net/minecraft/world/entity/raid/Raider.java
|
|
+++ b/net/minecraft/world/entity/raid/Raider.java
|
|
@@ -127,6 +127,41 @@ public abstract class Raider extends PatrollingMonster {
|
|
|
|
currentRaid.removeFromRaid(serverLevel, this, false);
|
|
}
|
|
+
|
|
+ // Leaves start - Revert raid changes
|
|
+ if (me.earthme.luminol.config.modules.misc.RaidChangesConfig.effect && !this.hasRaid()) {
|
|
+ ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD);
|
|
+ net.minecraft.world.entity.player.Player entityhuman = null;
|
|
+ if (entity instanceof net.minecraft.world.entity.player.Player player) {
|
|
+ entityhuman = player;
|
|
+ } else if (entity instanceof net.minecraft.world.entity.animal.wolf.Wolf wolf) {
|
|
+ LivingEntity entityliving = wolf.getOwner();
|
|
+ if (wolf.isTame() && entityliving instanceof net.minecraft.world.entity.player.Player player) {
|
|
+ entityhuman = player;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (entityhuman != null && !itemstack.isEmpty() && this.isCaptain()) {
|
|
+ net.minecraft.world.effect.MobEffectInstance mobeffect = entityhuman.getEffect(net.minecraft.world.effect.MobEffects.BAD_OMEN);
|
|
+ int i = 1;
|
|
+
|
|
+ if (mobeffect != null) {
|
|
+ i += mobeffect.getAmplifier();
|
|
+ entityhuman.removeEffectNoUpdate(net.minecraft.world.effect.MobEffects.BAD_OMEN);
|
|
+ } else {
|
|
+ --i;
|
|
+ }
|
|
+
|
|
+ i = net.minecraft.util.Mth.clamp(i, 0, 4);
|
|
+ net.minecraft.world.effect.MobEffectInstance mobeffect1 = new net.minecraft.world.effect.MobEffectInstance(net.minecraft.world.effect.MobEffects.BAD_OMEN, me.earthme.luminol.config.modules.misc.RaidChangesConfig.infinite ? net.minecraft.world.effect.MobEffectInstance.INFINITE_DURATION : 120000, i, false, false, true);
|
|
+
|
|
+ if (!serverLevel.getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_DISABLE_RAIDS)) {
|
|
+ entityhuman.addEffect(mobeffect1, entityhuman, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.PATROL_CAPTAIN, true); // CraftBukkit
|
|
+ }
|
|
+ this.setPatrolLeader(false);
|
|
+ }
|
|
+ }
|
|
+ // Leaves end - Revert raid changes
|
|
}
|
|
|
|
super.die(cause);
|
|
@@ -155,7 +190,7 @@ public abstract class Raider extends PatrollingMonster {
|
|
}
|
|
|
|
public boolean hasRaid() {
|
|
- return this.level() instanceof ServerLevel serverLevel && (this.getCurrentRaid() != null || serverLevel.getRaidAt(this.blockPosition()) != null);
|
|
+ return !me.earthme.luminol.config.modules.misc.RaidChangesConfig.selfCheck && (this.level() instanceof ServerLevel serverLevel && (this.getCurrentRaid() != null || serverLevel.getRaidAt(this.blockPosition()) != null)); // Leaves - Disable raid self check
|
|
}
|
|
|
|
public boolean hasActiveRaid() {
|
|
diff --git a/net/minecraft/world/item/component/OminousBottleAmplifier.java b/net/minecraft/world/item/component/OminousBottleAmplifier.java
|
|
index 33907bb190ffa22ccf9ea424b1e536297878711a..ee8f7d840520b113036e7d2e5e36f626651e1fa5 100644
|
|
--- a/net/minecraft/world/item/component/OminousBottleAmplifier.java
|
|
+++ b/net/minecraft/world/item/component/OminousBottleAmplifier.java
|
|
@@ -29,7 +29,7 @@ public record OminousBottleAmplifier(int value) implements ConsumableListener, T
|
|
|
|
@Override
|
|
public void onConsume(Level level, LivingEntity entity, ItemStack stack, Consumable consumable) {
|
|
- entity.addEffect(new MobEffectInstance(MobEffects.BAD_OMEN, 120000, this.value, false, false, true)); // Paper - properly resend entities - diff on change for below
|
|
+ entity.addEffect(new MobEffectInstance(MobEffects.BAD_OMEN, me.earthme.luminol.config.modules.misc.RaidChangesConfig.infinite ? net.minecraft.world.effect.MobEffectInstance.INFINITE_DURATION : 120000, this.value, false, false, true)); // Paper - properly resend entities - diff on change for below // Luminol - Raid effect infinite
|
|
}
|
|
|
|
// Paper start - properly resend entities - collect packets for bundle
|
|
@@ -41,7 +41,7 @@ public record OminousBottleAmplifier(int value) implements ConsumableListener, T
|
|
|
|
@Override
|
|
public void addToTooltip(Item.TooltipContext context, Consumer<Component> tooltipAdder, TooltipFlag flag, DataComponentGetter componentGetter) {
|
|
- List<MobEffectInstance> list = List.of(new MobEffectInstance(MobEffects.BAD_OMEN, 120000, this.value, false, false, true));
|
|
+ List<MobEffectInstance> list = List.of(new MobEffectInstance(MobEffects.BAD_OMEN, me.earthme.luminol.config.modules.misc.RaidChangesConfig.infinite ? net.minecraft.world.effect.MobEffectInstance.INFINITE_DURATION : 120000, this.value, false, false, true)); // Luminol - Raid effect infinite
|
|
PotionContents.addPotionTooltip(list, tooltipAdder, 1.0F, context.tickRate());
|
|
}
|
|
}
|