diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index e45f72b..9d4e5cf 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -29,6 +29,8 @@
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index fadb731..01cf610 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -12,6 +12,13 @@
+
+
+
+
-
\ No newline at end of file
diff --git a/.idea/ros.xml b/.idea/ros.xml
new file mode 100644
index 0000000..29eeb8c
--- /dev/null
+++ b/.idea/ros.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dist/pom.xml b/Dist/pom.xml
index 0af26ba..d9f9fc6 100644
--- a/Dist/pom.xml
+++ b/Dist/pom.xml
@@ -77,7 +77,7 @@
tech.sbdevelopment
- MapReflectionAPI-NMS-v1_20_R1
+ MapReflectionAPI-NMS-v1_20_R4
${project.parent.version}
diff --git a/NMS-v1_20_R1/pom.xml b/NMS-v1_20_R4/pom.xml
similarity index 94%
rename from NMS-v1_20_R1/pom.xml
rename to NMS-v1_20_R4/pom.xml
index 6f5cdde..ce1abe3 100644
--- a/NMS-v1_20_R1/pom.xml
+++ b/NMS-v1_20_R4/pom.xml
@@ -27,11 +27,11 @@
4.0.0
- MapReflectionAPI-NMS-v1_20_R1
+ MapReflectionAPI-NMS-v1_20_R4
- 1.20.1-R0.1-SNAPSHOT
- 17
+ 1.20.5-R0.1-SNAPSHOT
+ 21
diff --git a/NMS-v1_20_R1/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapSender_v1_20_R1.java b/NMS-v1_20_R4/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapSender_v1_20_R4.java
similarity index 91%
rename from NMS-v1_20_R1/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapSender_v1_20_R1.java
rename to NMS-v1_20_R4/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapSender_v1_20_R4.java
index 3f523f7..c1c4956 100644
--- a/NMS-v1_20_R1/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapSender_v1_20_R1.java
+++ b/NMS-v1_20_R4/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapSender_v1_20_R4.java
@@ -19,9 +19,10 @@
package tech.sbdevelopment.mapreflectionapi.nms;
import net.minecraft.network.protocol.game.PacketPlayOutMap;
+import net.minecraft.world.level.saveddata.maps.MapId;
import net.minecraft.world.level.saveddata.maps.WorldMap;
import org.bukkit.Bukkit;
-import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_20_R4.entity.CraftPlayer;
import org.bukkit.entity.Player;
import tech.sbdevelopment.mapreflectionapi.MapReflectionAPI;
import tech.sbdevelopment.mapreflectionapi.api.ArrayImage;
@@ -29,14 +30,16 @@ import tech.sbdevelopment.mapreflectionapi.api.ArrayImage;
import java.util.ArrayList;
import java.util.List;
+import static tech.sbdevelopment.mapreflectionapi.utils.ReflectionUtil.supports;
+
/**
- * The {@link MapSender_v1_20_R1} sends the Map packets to players.
+ * The {@link MapSender_v1_20_R4} sends the Map packets to players.
*/
-public class MapSender_v1_20_R1 {
+public class MapSender_v1_20_R4 {
private static final List sendQueue = new ArrayList<>();
private static int senderID = -1;
- private MapSender_v1_20_R1() {
+ private MapSender_v1_20_R4() {
}
/**
@@ -118,8 +121,10 @@ public class MapSender_v1_20_R1 {
content.array //Data
);
+ MapId mapId = new MapId(id);
+
PacketPlayOutMap packet = new PacketPlayOutMap(
- id, //ID
+ mapId, //ID
(byte) 0, //Scale
false, //Show icons
new ArrayList<>(), //Icons
diff --git a/NMS-v1_20_R1/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapWrapper_v1_20_R1.java b/NMS-v1_20_R4/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapWrapper_v1_20_R4.java
similarity index 86%
rename from NMS-v1_20_R1/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapWrapper_v1_20_R1.java
rename to NMS-v1_20_R4/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapWrapper_v1_20_R4.java
index fcdf607..9760612 100644
--- a/NMS-v1_20_R1/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapWrapper_v1_20_R1.java
+++ b/NMS-v1_20_R4/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/MapWrapper_v1_20_R4.java
@@ -18,15 +18,18 @@
package tech.sbdevelopment.mapreflectionapi.nms;
+import net.minecraft.core.component.DataComponentType;
+import net.minecraft.core.component.DataComponents;
import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata;
import net.minecraft.network.protocol.game.PacketPlayOutSetSlot;
import net.minecraft.network.syncher.DataWatcher;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.decoration.EntityItemFrame;
+import net.minecraft.world.level.saveddata.maps.MapId;
import org.bukkit.*;
-import org.bukkit.craftbukkit.v1_20_R1.CraftWorld;
-import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
-import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack;
+import org.bukkit.craftbukkit.v1_20_R4.CraftWorld;
+import org.bukkit.craftbukkit.v1_20_R4.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_20_R4.inventory.CraftItemStack;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -40,7 +43,7 @@ import tech.sbdevelopment.mapreflectionapi.api.exceptions.MapLimitExceededExcept
import java.util.*;
-public class MapWrapper_v1_20_R1 extends MapWrapper {
+public class MapWrapper_v1_20_R4 extends MapWrapper {
protected MapController controller = new MapController() {
private final Map viewers = new HashMap<>();
@@ -81,11 +84,11 @@ public class MapWrapper_v1_20_R1 extends MapWrapper {
public void update(ArrayImage content) {
MapWrapper duplicate = MapReflectionAPI.getMapManager().getDuplicate(content);
if (duplicate != null) {
- MapWrapper_v1_20_R1.this.content = duplicate.getContent();
+ MapWrapper_v1_20_R4.this.content = duplicate.getContent();
return;
}
- MapWrapper_v1_20_R1.this.content = content;
+ MapWrapper_v1_20_R4.this.content = content;
for (UUID id : viewers.keySet()) {
sendContent(Bukkit.getPlayer(id));
@@ -103,16 +106,16 @@ public class MapWrapper_v1_20_R1 extends MapWrapper {
int id = getMapId(player);
if (withoutQueue) {
- MapSender_v1_20_R1.sendMap(id, MapWrapper_v1_20_R1.this.content, player);
+ MapSender_v1_20_R4.sendMap(id, MapWrapper_v1_20_R4.this.content, player);
} else {
- MapSender_v1_20_R1.addToQueue(id, MapWrapper_v1_20_R1.this.content, player);
+ MapSender_v1_20_R4.addToQueue(id, MapWrapper_v1_20_R4.this.content, player);
}
}
@Override
public void cancelSend() {
for (int s : viewers.values()) {
- MapSender_v1_20_R1.cancelID(s);
+ MapSender_v1_20_R4.cancelID(s);
}
}
@@ -129,8 +132,8 @@ public class MapWrapper_v1_20_R1 extends MapWrapper {
}
CraftPlayer craftPlayer = (CraftPlayer) player;
- int windowId = craftPlayer.getHandle().bQ.j; //inventoryMenu containerId
- int stateId = craftPlayer.getHandle().bQ.j(); //inventoryMenu getStateId()
+ int windowId = craftPlayer.getHandle().cb.j; //inventoryMenu containerId
+ int stateId = craftPlayer.getHandle().cb.j(); //inventoryMenu getStateId()
ItemStack stack = new ItemStack(Material.FILLED_MAP, 1);
net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack);
@@ -186,7 +189,7 @@ public class MapWrapper_v1_20_R1 extends MapWrapper {
ItemFrame frame = getItemFrameById(player.getWorld(), entityId);
if (frame != null) {
frame.removeMetadata("MAP_WRAPPER_REF", MapReflectionAPI.getInstance());
- frame.setMetadata("MAP_WRAPPER_REF", new FixedMetadataValue(MapReflectionAPI.getInstance(), MapWrapper_v1_20_R1.this));
+ frame.setMetadata("MAP_WRAPPER_REF", new FixedMetadataValue(MapReflectionAPI.getInstance(), MapWrapper_v1_20_R4.this));
}
sendItemFramePacket(player, entityId, stack, getMapId(player));
@@ -217,10 +220,11 @@ public class MapWrapper_v1_20_R1 extends MapWrapper {
private void sendItemFramePacket(Player player, int entityId, ItemStack stack, int mapId) {
net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack);
- nmsStack.w().a("map", mapId); //getOrCreateTag putInt
+ MapId mapId1 = new MapId(mapId);
+ nmsStack.b(DataComponents.B, mapId1); //set
- List> list = new ArrayList<>();
- DataWatcher.b> dataWatcherItem = DataWatcher.b.a(EntityItemFrame.g, nmsStack);
+ List> list = new ArrayList<>();
+ DataWatcher.c> dataWatcherItem = DataWatcher.c.a(EntityItemFrame.g, nmsStack);
list.add(dataWatcherItem);
PacketPlayOutEntityMetadata packet = new PacketPlayOutEntityMetadata(entityId, list);
@@ -228,7 +232,7 @@ public class MapWrapper_v1_20_R1 extends MapWrapper {
}
};
- public MapWrapper_v1_20_R1(ArrayImage image) {
+ public MapWrapper_v1_20_R4(ArrayImage image) {
super(image);
}
diff --git a/NMS-v1_20_R1/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/PacketListener_v1_20_R1.java b/NMS-v1_20_R4/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/PacketListener_v1_20_R4.java
similarity index 90%
rename from NMS-v1_20_R1/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/PacketListener_v1_20_R1.java
rename to NMS-v1_20_R4/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/PacketListener_v1_20_R4.java
index a07cde1..a774625 100644
--- a/NMS-v1_20_R1/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/PacketListener_v1_20_R1.java
+++ b/NMS-v1_20_R4/src/main/java/tech/sbdevelopment/mapreflectionapi/nms/PacketListener_v1_20_R4.java
@@ -27,8 +27,8 @@ import net.minecraft.world.EnumHand;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.phys.Vec3D;
import org.bukkit.Bukkit;
-import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
-import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack;
+import org.bukkit.craftbukkit.v1_20_R4.entity.CraftPlayer;
+import org.bukkit.craftbukkit.v1_20_R4.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import tech.sbdevelopment.mapreflectionapi.MapReflectionAPI;
@@ -41,7 +41,7 @@ import java.util.concurrent.TimeUnit;
import static tech.sbdevelopment.mapreflectionapi.utils.ReflectionUtil.*;
-public class PacketListener_v1_20_R1 extends PacketListener {
+public class PacketListener_v1_20_R4 extends PacketListener {
@Override
protected void injectPlayer(Player p) {
ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
@@ -89,8 +89,8 @@ public class PacketListener_v1_20_R1 extends PacketListener {
return false;
}).get(1, TimeUnit.SECONDS)) return;
} else if (packet instanceof PacketPlayInSetCreativeSlot packetPlayInSetCreativeSlot) {
- int slot = packetPlayInSetCreativeSlot.a();
- ItemStack item = packetPlayInSetCreativeSlot.c();
+ int slot = (int) getDeclaredField(packetPlayInSetCreativeSlot, supports(20, 4) ? "b" : "a"); //slot, 1.20.5 = b, lower is a
+ ItemStack item = (ItemStack) getDeclaredField(packetPlayInSetCreativeSlot, supports(20, 4) ? "e" : "d"); //item, 1.20.5 = e, lower is d
boolean async = !plugin.getServer().isPrimaryThread();
CreateInventoryMapUpdateEvent event = new CreateInventoryMapUpdateEvent(p, slot, CraftItemStack.asBukkitCopy(item), async);
@@ -106,7 +106,7 @@ public class PacketListener_v1_20_R1 extends PacketListener {
//The connection is private since 1.19.4 :|
NetworkManager networkManager = (NetworkManager) getField(((CraftPlayer) p).getHandle().c, "h");
- ChannelPipeline pipeline = networkManager.m.pipeline(); //connection channel
+ ChannelPipeline pipeline = networkManager.n.pipeline(); //connection channel
pipeline.addBefore("packet_handler", p.getName(), channelDuplexHandler);
}
@@ -114,7 +114,7 @@ public class PacketListener_v1_20_R1 extends PacketListener {
public void removePlayer(Player p) {
//The connection is private since 1.19.4 :|
NetworkManager networkManager = (NetworkManager) getField(((CraftPlayer) p).getHandle().c, "h");
- Channel channel = networkManager.m; //connection channel
+ Channel channel = networkManager.n; //connection channel
channel.eventLoop().submit(() -> channel.pipeline().remove(p.getName()));
}
diff --git a/pom.xml b/pom.xml
index 1f55a66..7fb69ad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,9 +40,9 @@
API
Dist
+ NMS-v1_20_R4
NMS-v1_20_R3
NMS-v1_20_R2
- NMS-v1_20_R1
NMS-v1_19_R3
NMS-v1_18_R2
NMS-v1_17_R1