Added 1.20.5 support in NMS branch

This commit is contained in:
Stijn Bannink 2024-04-29 16:43:23 +02:00
parent 4f187b92bb
commit 874b7d227c
9 changed files with 64 additions and 34 deletions

2
.idea/encodings.xml generated
View file

@ -29,6 +29,8 @@
<file url="file://$PROJECT_DIR$/NMS-v1_20_R2/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/NMS-v1_20_R3/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/NMS-v1_20_R3/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/NMS-v1_20_R4/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/NMS-v1_20_R4/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>

9
.idea/misc.xml generated
View file

@ -12,6 +12,13 @@
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
<option name="ignoredFiles">
<set>
<option value="$PROJECT_DIR$/NMS-v1_20_R1/pom.xml" />
</set>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="temurin-11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="temurin-11" project-jdk-type="JavaSDK" />
</project>

12
.idea/ros.xml generated Normal file
View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ROSSettings">
<option name="rosPath" value="" />
<option name="workspacePath" value="" />
<option name="additionalSources" value="" />
<option name="excludedXmls" value="" />
<option name="licenseLinkType" value="Summary" />
<option name="knownKeys" value="" />
<option name="depSources" value="https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml&quot;https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml&quot;https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml" />
</component>
</project>

View file

@ -77,7 +77,7 @@
</dependency>
<dependency>
<groupId>tech.sbdevelopment</groupId>
<artifactId>MapReflectionAPI-NMS-v1_20_R1</artifactId>
<artifactId>MapReflectionAPI-NMS-v1_20_R4</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>

View file

@ -27,11 +27,11 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>MapReflectionAPI-NMS-v1_20_R1</artifactId>
<artifactId>MapReflectionAPI-NMS-v1_20_R4</artifactId>
<properties>
<NMSVersion>1.20.1-R0.1-SNAPSHOT</NMSVersion>
<jdk.version>17</jdk.version>
<NMSVersion>1.20.5-R0.1-SNAPSHOT</NMSVersion>
<jdk.version>21</jdk.version>
</properties>
<build>

View file

@ -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<QueuedMap> 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

View file

@ -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<UUID, Integer> 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<DataWatcher.b<?>> list = new ArrayList<>();
DataWatcher.b<?> dataWatcherItem = DataWatcher.b.a(EntityItemFrame.g, nmsStack);
List<DataWatcher.c<?>> 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);
}

View file

@ -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()));
}

View file

@ -40,9 +40,9 @@
<modules>
<module>API</module>
<module>Dist</module>
<module>NMS-v1_20_R4</module>
<module>NMS-v1_20_R3</module>
<module>NMS-v1_20_R2</module>
<module>NMS-v1_20_R1</module>
<module>NMS-v1_19_R3</module>
<module>NMS-v1_18_R2</module>
<module>NMS-v1_17_R1</module>