more work
This commit is contained in:
parent
4548778122
commit
1e1b21830e
2 changed files with 51 additions and 26 deletions
|
@ -6,7 +6,7 @@ Subject: [PATCH] add biome change per player
|
|||
|
||||
diff --git a/src/main/java/io/papermc/paper/event/packet/PlayerBiomesLoadEvent.java b/src/main/java/io/papermc/paper/event/packet/PlayerBiomesLoadEvent.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..8f19181f54c3e82e9c51101b8f56255fc6668d00
|
||||
index 0000000000000000000000000000000000000000..7774a3e3b19bfcaae319ea9ee03e85091be03a8b
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/io/papermc/paper/event/packet/PlayerBiomesLoadEvent.java
|
||||
@@ -0,0 +1,82 @@
|
||||
|
@ -19,6 +19,7 @@ index 0000000000000000000000000000000000000000..8f19181f54c3e82e9c51101b8f56255f
|
|||
+import org.bukkit.World;
|
||||
+import org.bukkit.entity.Player;
|
||||
+import org.bukkit.event.HandlerList;
|
||||
+import org.bukkit.event.world.ChunkEvent;
|
||||
+import org.bukkit.event.world.WorldEvent;
|
||||
+import org.jetbrains.annotations.ApiStatus;
|
||||
+import org.jetbrains.annotations.NotNull;
|
||||
|
@ -32,16 +33,16 @@ index 0000000000000000000000000000000000000000..8f19181f54c3e82e9c51101b8f56255f
|
|||
+ * Should only be used for packet/clientside related stuff.
|
||||
+ * Not intended for modifying server side state.
|
||||
+ */
|
||||
+public class PlayerBiomesLoadEvent extends WorldEvent {
|
||||
+public class PlayerBiomesLoadEvent extends ChunkEvent {
|
||||
+
|
||||
+ private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||
+
|
||||
+ private final Player player;
|
||||
+ private final Map<Chunk, BiomesSnapshot> chunkBiomesSnapshots = new HashMap<>();
|
||||
+ private BiomesSnapshot biomesSnapshot;
|
||||
+
|
||||
+ @ApiStatus.Internal
|
||||
+ public PlayerBiomesLoadEvent(@NotNull final Player player, World world) {
|
||||
+ super(world);
|
||||
+ public PlayerBiomesLoadEvent(@NotNull final Player player, Chunk chunk) {
|
||||
+ super(chunk);
|
||||
+ this.player = player;
|
||||
+ }
|
||||
+
|
||||
|
@ -67,20 +68,19 @@ index 0000000000000000000000000000000000000000..8f19181f54c3e82e9c51101b8f56255f
|
|||
+ /**
|
||||
+ * Returns a biomes snapshot for the given chunk, by default it won't be set.
|
||||
+ *
|
||||
+ * @param chunk the given chunk
|
||||
+ * @return biome snapshot if one is set
|
||||
+ */
|
||||
+ public @Nullable BiomesSnapshot getBiomeSnapshotAt(@NotNull Chunk chunk) {
|
||||
+ return chunkBiomesSnapshots.get(chunk);
|
||||
+ public @Nullable BiomesSnapshot getBiomeSnapshot() {
|
||||
+ return biomesSnapshot;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Sets the biome snapshot for the given chunk that will be send as an override to the player
|
||||
+ * Sets the biome snapshot for the given chunk that will be sent as an override to the player
|
||||
+ *
|
||||
+ * @param biomesSnapshot the biome override
|
||||
+ */
|
||||
+ public void setBiomeSnapshot(@NotNull Chunk chunk, @Nullable final BiomesSnapshot biomesSnapshot) {
|
||||
+ this.chunkBiomesSnapshots.put(chunk, biomesSnapshot);
|
||||
+ public void setBiomeSnapshot(@Nullable final BiomesSnapshot biomesSnapshot) {
|
||||
+ this.biomesSnapshot = biomesSnapshot;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
|
@ -89,9 +89,31 @@ index 0000000000000000000000000000000000000000..8f19181f54c3e82e9c51101b8f56255f
|
|||
+ * @return true if override was made, else false
|
||||
+ */
|
||||
+ public boolean hasOverrides() {
|
||||
+ return !this.chunkBiomesSnapshots.isEmpty();
|
||||
+ return biomesSnapshot != null;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/io/papermc/paper/event/packet/PlayerChunkLoadEvent.java b/src/main/java/io/papermc/paper/event/packet/PlayerChunkLoadEvent.java
|
||||
index 3ddbc099a13df939b3912f30b54e7635840ba5a4..2933de0e9455720040619e52b7d4df66b5dbb717 100644
|
||||
--- a/src/main/java/io/papermc/paper/event/packet/PlayerChunkLoadEvent.java
|
||||
+++ b/src/main/java/io/papermc/paper/event/packet/PlayerChunkLoadEvent.java
|
||||
@@ -15,7 +15,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
* Should only be used for packet/clientside related stuff.
|
||||
* Not intended for modifying server side state.
|
||||
*/
|
||||
-public class PlayerChunkLoadEvent extends ChunkEvent {
|
||||
+public class PlayerChunkLoadEvent extends PlayerBiomesLoadEvent {
|
||||
|
||||
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||
|
||||
@@ -23,7 +23,7 @@ public class PlayerChunkLoadEvent extends ChunkEvent {
|
||||
|
||||
@ApiStatus.Internal
|
||||
public PlayerChunkLoadEvent(@NotNull Chunk chunk, @NotNull Player player) {
|
||||
- super(chunk);
|
||||
+ super(player, chunk);
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/BiomesSnapshot.java b/src/main/java/org/bukkit/BiomesSnapshot.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..bb8683127eca2b86b23efa81bff9c54a357e04d4
|
||||
|
|
|
@ -5,15 +5,15 @@ Subject: [PATCH] add biome change per player
|
|||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundChunksBiomesPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundChunksBiomesPacket.java
|
||||
index 51f647de153255c919b1440338cf1b3e2d6b5dbf..f525c51a1c888f76fa56528f204e4fac52416641 100644
|
||||
index 51f647de153255c919b1440338cf1b3e2d6b5dbf..f6ec892c9e717a3a4b22e42c738ba74de1a510e5 100644
|
||||
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundChunksBiomesPacket.java
|
||||
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundChunksBiomesPacket.java
|
||||
@@ -2,12 +2,22 @@ package net.minecraft.network.protocol.game;
|
||||
@@ -2,12 +2,21 @@ package net.minecraft.network.protocol.game;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import io.netty.buffer.Unpooled;
|
||||
+import io.papermc.paper.event.packet.PlayerBiomesLoadEvent;
|
||||
+import java.util.Arrays;
|
||||
+import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
+import net.minecraft.core.Holder;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
|
@ -25,13 +25,12 @@ index 51f647de153255c919b1440338cf1b3e2d6b5dbf..f525c51a1c888f76fa56528f204e4fac
|
|||
import net.minecraft.world.level.chunk.LevelChunkSection;
|
||||
+import net.minecraft.world.level.chunk.PalettedContainer;
|
||||
+import org.bukkit.BiomesSnapshot;
|
||||
+import org.bukkit.Chunk;
|
||||
+import org.bukkit.craftbukkit.CraftBiomesSnapshot;
|
||||
+import org.bukkit.craftbukkit.CraftChunk;
|
||||
|
||||
public record ClientboundChunksBiomesPacket(List<ClientboundChunksBiomesPacket.ChunkBiomeData> chunkBiomeData) implements Packet<ClientGamePacketListener> {
|
||||
private static final int TWO_MEGABYTES = 2097152;
|
||||
@@ -16,8 +26,23 @@ public record ClientboundChunksBiomesPacket(List<ClientboundChunksBiomesPacket.C
|
||||
@@ -16,8 +25,27 @@ public record ClientboundChunksBiomesPacket(List<ClientboundChunksBiomesPacket.C
|
||||
this(buf.readList(ClientboundChunksBiomesPacket.ChunkBiomeData::new));
|
||||
}
|
||||
|
||||
|
@ -39,17 +38,21 @@ index 51f647de153255c919b1440338cf1b3e2d6b5dbf..f525c51a1c888f76fa56528f204e4fac
|
|||
- return new ClientboundChunksBiomesPacket(chunks.stream().map(ClientboundChunksBiomesPacket.ChunkBiomeData::new).toList());
|
||||
+ public static ClientboundChunksBiomesPacket forChunks(Player player, List<LevelChunk> chunks) {
|
||||
+ org.bukkit.entity.Player bukkitPlayer = (org.bukkit.entity.Player) player.getBukkitEntity();
|
||||
+ final PlayerBiomesLoadEvent biomesLoadEvent = new PlayerBiomesLoadEvent(bukkitPlayer, bukkitPlayer.getWorld());
|
||||
+ biomesLoadEvent.callEvent();
|
||||
+ if(biomesLoadEvent.hasOverrides()) {
|
||||
+ return new ClientboundChunksBiomesPacket(chunks.stream().map(levelChunk -> create(levelChunk, biomesLoadEvent)).toList());
|
||||
+ } else {
|
||||
+ return new ClientboundChunksBiomesPacket(chunks.stream().map(ClientboundChunksBiomesPacket.ChunkBiomeData::new).toList());
|
||||
+ List<ChunkBiomeData> biomeData = new ArrayList<>();
|
||||
+ for (LevelChunk chunk : chunks) {
|
||||
+ final PlayerBiomesLoadEvent biomesLoadEvent = new PlayerBiomesLoadEvent(bukkitPlayer, new CraftChunk(chunk));
|
||||
+ biomesLoadEvent.callEvent();
|
||||
+ if (biomesLoadEvent.hasOverrides()) {
|
||||
+ biomeData.add(create(chunk, biomesLoadEvent));
|
||||
+ } else {
|
||||
+ biomeData.add(new ChunkBiomeData(chunk));
|
||||
+ }
|
||||
+ }
|
||||
+ return new ClientboundChunksBiomesPacket(biomeData);
|
||||
+ }
|
||||
+
|
||||
+ private static ClientboundChunksBiomesPacket.ChunkBiomeData create(LevelChunk levelChunk, PlayerBiomesLoadEvent biomesLoadEvent) {
|
||||
+ final BiomesSnapshot snapshotAt = biomesLoadEvent.getBiomeSnapshotAt(new CraftChunk(levelChunk));
|
||||
+ final BiomesSnapshot snapshotAt = biomesLoadEvent.getBiomeSnapshot();
|
||||
+ if(snapshotAt != null){
|
||||
+ return new ClientboundChunksBiomesPacket.ChunkBiomeData(snapshotAt);
|
||||
+ }
|
||||
|
@ -57,7 +60,7 @@ index 51f647de153255c919b1440338cf1b3e2d6b5dbf..f525c51a1c888f76fa56528f204e4fac
|
|||
}
|
||||
|
||||
@Override
|
||||
@@ -38,6 +63,11 @@ public record ClientboundChunksBiomesPacket(List<ClientboundChunksBiomesPacket.C
|
||||
@@ -38,6 +66,11 @@ public record ClientboundChunksBiomesPacket(List<ClientboundChunksBiomesPacket.C
|
||||
extractChunkData(new FriendlyByteBuf(this.getWriteBuffer()), chunk);
|
||||
}
|
||||
|
||||
|
@ -69,7 +72,7 @@ index 51f647de153255c919b1440338cf1b3e2d6b5dbf..f525c51a1c888f76fa56528f204e4fac
|
|||
public ChunkBiomeData(FriendlyByteBuf buf) {
|
||||
this(buf.readChunkPos(), buf.readByteArray(2097152));
|
||||
}
|
||||
@@ -71,6 +101,25 @@ public record ClientboundChunksBiomesPacket(List<ClientboundChunksBiomesPacket.C
|
||||
@@ -71,6 +104,25 @@ public record ClientboundChunksBiomesPacket(List<ClientboundChunksBiomesPacket.C
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue