mirror of
https://github.com/PaperMC/Folia.git
synced 2025-04-22 04:09:18 +08:00
Mobs would use the evenness of server tick count plus id to determine whether they eoilf tick only their running goals or to tick the goal selector to find additional goals. If the server had an even number of regions, then every 50ms the server tick field would be incremented by an even number and as a result would not change the evenness of the mob goal check. This could put some mobs in a state where they only ticked their running goals, which would result in them freezing. Fixes https://github.com/PaperMC/Folia/issues/42
44 lines
2.8 KiB
Diff
44 lines
2.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: WillQi <williamqipizza@gmail.com>
|
|
Date: Mon, 15 May 2023 23:45:09 -0600
|
|
Subject: [PATCH] Fix off region raid heroes
|
|
|
|
This patch aims to solve a potential incorrect thread call when completing a raid.
|
|
If a player is a hero of the village but proceeds to leave the region of the
|
|
raid before it's completion, it would throw an exception due to not being on the
|
|
same region thread anymore.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/raid/Raid.java b/src/main/java/net/minecraft/world/entity/raid/Raid.java
|
|
index 359f1690497eac00899eb26c17308e0a6fe943ad..2289de057dd3c09cbe76f114e4bcc78b737bb6a3 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/raid/Raid.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/raid/Raid.java
|
|
@@ -407,12 +407,25 @@ public class Raid {
|
|
if (entity instanceof LivingEntity && !entity.isSpectator()) {
|
|
LivingEntity entityliving = (LivingEntity) entity;
|
|
|
|
- entityliving.addEffect(new MobEffectInstance(MobEffects.HERO_OF_THE_VILLAGE, 48000, this.badOmenLevel - 1, false, false, true));
|
|
+ // Folia start - Fix off region raid heroes
|
|
+ entityliving.getBukkitLivingEntity().taskScheduler.schedule(task -> {
|
|
+ entityliving.addEffect(new MobEffectInstance(MobEffects.HERO_OF_THE_VILLAGE, 48000, this.badOmenLevel - 1, false, false, true));
|
|
+
|
|
+ if (entityliving instanceof ServerPlayer) {
|
|
+ ServerPlayer entityplayer = (ServerPlayer) entityliving;
|
|
+
|
|
+ entityplayer.awardStat(Stats.RAID_WIN);
|
|
+ CriteriaTriggers.RAID_WIN.trigger(entityplayer);
|
|
+ }
|
|
+ }, null, 0);
|
|
+ // Folia end
|
|
if (entityliving instanceof ServerPlayer) {
|
|
ServerPlayer entityplayer = (ServerPlayer) entityliving;
|
|
|
|
- entityplayer.awardStat(Stats.RAID_WIN);
|
|
- CriteriaTriggers.RAID_WIN.trigger(entityplayer);
|
|
+ // Folia start - Fix off region raid heroes
|
|
+ // entityplayer.awardStat(Stats.RAID_WIN);
|
|
+ // CriteriaTriggers.RAID_WIN.trigger(entityplayer);
|
|
+ // Folia end
|
|
winners.add(entityplayer.getBukkitEntity()); // CraftBukkit
|
|
}
|
|
}
|