diff --git a/patches/minecraft/net/minecraft/entity/player/ServerPlayerEntity.java.patch b/patches/minecraft/net/minecraft/entity/player/ServerPlayerEntity.java.patch index 041e090325..99e0ce68de 100644 --- a/patches/minecraft/net/minecraft/entity/player/ServerPlayerEntity.java.patch +++ b/patches/minecraft/net/minecraft/entity/player/ServerPlayerEntity.java.patch @@ -155,7 +155,15 @@ } } -@@ -1375,6 +1398,8 @@ +@@ -1325,6 +1348,7 @@ + } + + public void func_241153_a_(RegistryKey p_241153_1_, @Nullable BlockPos p_241153_2_, boolean p_241153_3_, boolean p_241153_4_) { ++ if (net.minecraftforge.event.ForgeEventFactory.onPlayerSpawnSet(this, p_241153_2_ == null ? World.field_234918_g_ : p_241153_1_, p_241153_2_, p_241153_3_)) return; + if (p_241153_2_ != null) { + boolean flag = p_241153_2_.equals(this.field_241138_cr_) && p_241153_1_.equals(this.field_241137_cq_); + if (p_241153_4_ && !flag) { +@@ -1375,6 +1399,8 @@ if (itementity == null) { return null; } else { @@ -164,7 +172,7 @@ this.field_70170_p.func_217376_c(itementity); ItemStack itemstack = itementity.func_92059_d(); if (p_146097_3_) { -@@ -1388,4 +1413,13 @@ +@@ -1388,4 +1414,13 @@ return itementity; } } diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index 2e9fb58727..7a9338b79c 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -62,6 +62,7 @@ import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Hand; import net.minecraft.util.NonNullList; +import net.minecraft.util.RegistryKey; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundEvent; @@ -459,8 +460,9 @@ public class ForgeEventFactory MinecraftForge.EVENT_BUS.post(new PlayerFlyableFallEvent(player, distance, multiplier)); } - public static boolean onPlayerSpawnSet(PlayerEntity player, BlockPos pos, boolean forced) { - return MinecraftForge.EVENT_BUS.post(new PlayerSetSpawnEvent(player, pos, forced)); + public static boolean onPlayerSpawnSet(PlayerEntity player, RegistryKey world, BlockPos pos, boolean forced) + { + return MinecraftForge.EVENT_BUS.post(new PlayerSetSpawnEvent(player, world, pos, forced)); } public static void onPlayerClone(PlayerEntity player, PlayerEntity oldPlayer, boolean wasDeath) diff --git a/src/main/java/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.java b/src/main/java/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.java index 04512f2ca7..8c0f9e7cf5 100644 --- a/src/main/java/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/player/PlayerSetSpawnEvent.java @@ -19,33 +19,50 @@ package net.minecraftforge.event.entity.player; -import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraft.util.RegistryKey; +import net.minecraft.world.World; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.eventbus.api.Cancelable; -@net.minecraftforge.eventbus.api.Cancelable +import javax.annotation.Nullable; + +/** + * This event is fired when a player's spawn point is set or reset.
+ * The event can be canceled, which will prevent the spawn point from being changed. + */ +@Cancelable public class PlayerSetSpawnEvent extends PlayerEvent { + private final RegistryKey spawnWorld; private final boolean forced; + @Nullable private final BlockPos newSpawn; - public PlayerSetSpawnEvent(PlayerEntity player, BlockPos newSpawn, boolean forced) { + public PlayerSetSpawnEvent(PlayerEntity player, RegistryKey spawnWorld, @Nullable BlockPos newSpawn, boolean forced) + { super(player); + this.spawnWorld = spawnWorld; this.newSpawn = newSpawn; this.forced = forced; } - /** - * This event is called before a player's spawn point is changed. - * The event can be canceled, and no further processing will be done. - */ public boolean isForced() { return forced; } + /** + * The new spawn position, or null if the spawn position is being reset. + */ + @Nullable public BlockPos getNewSpawn() { return newSpawn; } + + public RegistryKey getSpawnWorld() + { + return spawnWorld; + } }