Skip to content

Commit

Permalink
Fix death handling (#1398)
Browse files Browse the repository at this point in the history
  • Loading branch information
IzzelAliz committed Jul 1, 2024
1 parent b3349e9 commit c47e085
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,11 @@
import io.izzel.arclight.common.bridge.core.world.WorldBridge;
import io.izzel.arclight.common.mod.server.ArclightServer;
import io.izzel.arclight.common.mod.util.ArclightCaptures;
import io.izzel.arclight.common.mod.util.Blackhole;
import io.izzel.arclight.mixin.Decorate;
import io.izzel.arclight.mixin.DecorationOps;
import io.izzel.arclight.mixin.Eject;
import io.izzel.arclight.mixin.Local;
import net.minecraft.core.BlockPos;
import net.minecraft.core.LayeredRegistryAccess;
import net.minecraft.network.Connection;
Expand Down Expand Up @@ -396,25 +398,26 @@ public ServerPlayer respawn(ServerPlayer playerIn, boolean flag, Entity.RemovalR
}
}

@Redirect(method = "respawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerGamePacketListenerImpl;teleport(DDDFF)V"))
private void arclight$respawnPackets(ServerGamePacketListenerImpl instance, double d, double e, double f, float g, float h) {
var player = instance.player;
@Decorate(method = "respawn", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerGamePacketListenerImpl;teleport(DDDFF)V"))
private void arclight$respawnPackets(ServerGamePacketListenerImpl instance, double d, double e, double f, float g, float h, @Local(ordinal = -1) ServerPlayer player) throws Throwable {
player.connection.send(new ClientboundSetChunkCacheRadiusPacket(((WorldBridge) player.serverLevel()).bridge$spigotConfig().viewDistance));
player.connection.send(new ClientboundSetSimulationDistancePacket(((WorldBridge) player.serverLevel()).bridge$spigotConfig().simulationDistance));
((ServerPlayNetHandlerBridge) player.connection).bridge$teleport(new Location(player.serverLevel().bridge$getWorld(), player.getX(), player.getY(), player.getZ(), player.getYRot(), player.getXRot()));
if (Blackhole.actuallyFalse()) {
DecorationOps.callsite().invoke(instance, d, e, f, g, h);
}
}

@Inject(method = "respawn", at = @At("RETURN"))
private void arclight$postRespawn(ServerPlayer serverPlayer, boolean bl, Entity.RemovalReason removalReason, CallbackInfoReturnable<ServerPlayer> cir) {
var location = arclight$loc;
arclight$loc = null;
arclight$respawnReason = null;
var fromWorld = serverPlayer.serverLevel();
var newPlayer = cir.getReturnValue();
this.sendAllPlayerInfo(newPlayer);
newPlayer.onUpdateAbilities();
newPlayer.triggerDimensionChangeTriggers(fromWorld);
if (fromWorld != location.getWorld()) {
if (fromWorld != newPlayer.serverLevel()) {
PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(((ServerPlayerEntityBridge) newPlayer).bridge$getBukkitEntity(), fromWorld.bridge$getWorld());
Bukkit.getPluginManager().callEvent(event);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ public class CombatTrackerMixin implements CombatTrackerBridge {
if (!this.entries.isEmpty()) {
var entry = this.entries.get(this.entries.size() - 1);
var deathMessage = ((CombatEntryBridge) (Object) entry).bridge$getDeathMessage();
cir.setReturnValue(deathMessage);
if (deathMessage != null) {
cir.setReturnValue(deathMessage);
}
} else {
if (this.arclight$emptyComnent != null) {
cir.setReturnValue(this.arclight$emptyComnent);
Expand Down

0 comments on commit c47e085

Please sign in to comment.