diff --git a/patches/minecraft/net/minecraft/server/management/PlayerChunkMapEntry.java.patch b/patches/minecraft/net/minecraft/server/management/PlayerChunkMapEntry.java.patch
index 1ea3aab69d..b4a9796e1f 100644
--- a/patches/minecraft/net/minecraft/server/management/PlayerChunkMapEntry.java.patch
+++ b/patches/minecraft/net/minecraft/server/management/PlayerChunkMapEntry.java.patch
@@ -28,7 +28,7 @@
{
this.func_187278_c(p_187276_1_);
+ // chunk watch event - the chunk is ready
-+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.Watch(this.field_187284_d, p_187276_1_));
++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.Watch(this.field_187286_f, p_187276_1_));
}
}
}
@@ -57,7 +57,7 @@
this.field_187283_c.remove(p_187277_1_);
-+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.UnWatch(this.field_187284_d, p_187277_1_));
++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.UnWatch(this.field_187286_f, p_187277_1_));
+
if (this.field_187283_c.isEmpty())
{
@@ -82,7 +82,7 @@
entityplayermp.field_71135_a.func_147359_a(packet);
this.field_187282_b.func_72688_a().func_73039_n().func_85172_a(entityplayermp, this.field_187286_f);
+ // chunk watch event - delayed to here as the chunk wasn't ready in addPlayer
-+ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.Watch(this.field_187284_d, entityplayermp));
++ net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.world.ChunkWatchEvent.Watch(this.field_187286_f, entityplayermp));
}
return true;
diff --git a/src/main/java/net/minecraftforge/event/world/ChunkWatchEvent.java b/src/main/java/net/minecraftforge/event/world/ChunkWatchEvent.java
index 9187fb15a1..3e4345c1bb 100644
--- a/src/main/java/net/minecraftforge/event/world/ChunkWatchEvent.java
+++ b/src/main/java/net/minecraftforge/event/world/ChunkWatchEvent.java
@@ -23,30 +23,49 @@ import net.minecraft.server.management.PlayerChunkMapEntry;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.Cancelable;
import net.minecraftforge.fml.common.eventhandler.Event;
+import javax.annotation.Nullable;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.math.ChunkPos;
+import net.minecraft.world.World;
+import net.minecraft.world.chunk.Chunk;
/**
* ChunkWatchEvent is fired when an event involving a chunk being watched occurs.
* If a method utilizes this {@link Event} as its parameter, the method will
* receive every child event of this class.
*
- * {@link #chunk} contains the ChunkCoordIntPair of the Chunk this event is affecting.
+ * {@link #chunk} contains the ChunkPos of the Chunk this event is affecting.
* {@link #player} contains the EntityPlayer that is involved with this chunk being watched.
+ * {@link #chunkInstance} contains the instance of the Chunk.
+ *
+ * The {@link #player}'s world may not be the same as the world of the chunk
+ * when the player is teleporting to another dimension.
*
* All children of this event are fired on the {@link MinecraftForge#EVENT_BUS}.
**/
-public class ChunkWatchEvent extends Event
+public class ChunkWatchEvent extends Event //TODO: extend ChunkEvent in 1.13
{
+ @Deprecated //TODO: Remove in 1.13
private final ChunkPos chunk;
private final EntityPlayerMP player;
+ private final Chunk chunkInstance;
+ @Deprecated //TODO: Remove in 1.13
public ChunkWatchEvent(ChunkPos chunk, EntityPlayerMP player)
{
this.chunk = chunk;
this.player = player;
+ this.chunkInstance = null;
}
+ public ChunkWatchEvent(Chunk chunk, EntityPlayerMP player)
+ {
+ this.chunk = chunk.getPos();
+ this.player = player;
+ this.chunkInstance = chunk;
+ }
+
+ @Deprecated //TODO: Remove in 1.13
public ChunkPos getChunk()
{
return chunk;
@@ -57,6 +76,16 @@ public class ChunkWatchEvent extends Event
return player;
}
+ /**
+ * The affected chunk.
+ * @return The affected chunk.
+ */
+ @Nullable
+ public Chunk getChunkInstance()
+ {
+ return chunkInstance;
+ }
+
/**
* ChunkWatchEvent.Watch is fired when an EntityPlayer begins watching a chunk.
* This event is fired when a chunk is added to the watched chunks of an EntityPlayer in
@@ -70,7 +99,10 @@ public class ChunkWatchEvent extends Event
**/
public static class Watch extends ChunkWatchEvent
{
+ @Deprecated //TODO: Remove in 1.13
public Watch(ChunkPos chunk, EntityPlayerMP player) { super(chunk, player); }
+
+ public Watch(Chunk chunk, EntityPlayerMP player) { super(chunk, player); }
}
/**
@@ -86,6 +118,9 @@ public class ChunkWatchEvent extends Event
**/
public static class UnWatch extends ChunkWatchEvent
{
+ @Deprecated //TODO: Remove in 1.13
public UnWatch(ChunkPos chunkLocation, EntityPlayerMP player) { super(chunkLocation, player); }
+
+ public UnWatch(Chunk chunk, EntityPlayerMP player) { super(chunk, player); }
}
}
diff --git a/src/test/java/net/minecraftforge/debug/ChunkWatchWorldTest.java b/src/test/java/net/minecraftforge/debug/ChunkWatchWorldTest.java
new file mode 100644
index 0000000000..7fcd19d78e
--- /dev/null
+++ b/src/test/java/net/minecraftforge/debug/ChunkWatchWorldTest.java
@@ -0,0 +1,41 @@
+package net.minecraftforge.debug;
+
+import org.apache.logging.log4j.Logger;
+
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.world.ChunkWatchEvent;
+import net.minecraftforge.fml.common.Mod;
+import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+@Mod(modid = ChunkWatchWorldTest.MODID, name = "Chunk Watch World Test", version = "1.0", acceptableRemoteVersions = "*")
+public class ChunkWatchWorldTest
+{
+ public static final String MODID = "chunkwatchworldtest";
+
+ private static final boolean ENABLED = false;
+ private static Logger logger;
+
+ @Mod.EventHandler
+ public void preInit(FMLPreInitializationEvent event)
+ {
+ logger = event.getModLog();
+
+ if (ENABLED)
+ {
+ MinecraftForge.EVENT_BUS.register(ChunkWatchWorldTest.class);
+ }
+ }
+
+ @SubscribeEvent
+ public static void onUnwatch(ChunkWatchEvent.UnWatch event)
+ {
+ logger.info("Unwatching chunk {} in dimension {}. Player's dimension: {} ", event.getChunk(), event.getChunkInstance().getWorld().provider.getDimension(), event.getPlayer().getEntityWorld().provider.getDimension());
+ }
+
+ @SubscribeEvent
+ public static void onWatch(ChunkWatchEvent.Watch event)
+ {
+ logger.info("Watching chunk {} in dimension {}. Player's dimension: {} ", event.getChunk(), event.getChunkInstance().getWorld().provider.getDimension(), event.getPlayer().getEntityWorld().provider.getDimension());
+ }
+}