Added 1.20.5 support in NMS branch
This commit is contained in:
parent
4f187b92bb
commit
874b7d227c
9 changed files with 64 additions and 34 deletions
2
.idea/encodings.xml
generated
2
.idea/encodings.xml
generated
|
@ -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_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/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_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/java" charset="UTF-8" />
|
||||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||||
</component>
|
</component>
|
||||||
|
|
9
.idea/misc.xml
generated
9
.idea/misc.xml
generated
|
@ -12,6 +12,13 @@
|
||||||
<option value="$PROJECT_DIR$/pom.xml" />
|
<option value="$PROJECT_DIR$/pom.xml" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</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>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="temurin-11" project-jdk-type="JavaSDK" />
|
|
||||||
</project>
|
</project>
|
12
.idea/ros.xml
generated
Normal file
12
.idea/ros.xml
generated
Normal 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"https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml"https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -77,7 +77,7 @@
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>tech.sbdevelopment</groupId>
|
<groupId>tech.sbdevelopment</groupId>
|
||||||
<artifactId>MapReflectionAPI-NMS-v1_20_R1</artifactId>
|
<artifactId>MapReflectionAPI-NMS-v1_20_R4</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -27,11 +27,11 @@
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>MapReflectionAPI-NMS-v1_20_R1</artifactId>
|
<artifactId>MapReflectionAPI-NMS-v1_20_R4</artifactId>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<NMSVersion>1.20.1-R0.1-SNAPSHOT</NMSVersion>
|
<NMSVersion>1.20.5-R0.1-SNAPSHOT</NMSVersion>
|
||||||
<jdk.version>17</jdk.version>
|
<jdk.version>21</jdk.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<build>
|
<build>
|
|
@ -19,9 +19,10 @@
|
||||||
package tech.sbdevelopment.mapreflectionapi.nms;
|
package tech.sbdevelopment.mapreflectionapi.nms;
|
||||||
|
|
||||||
import net.minecraft.network.protocol.game.PacketPlayOutMap;
|
import net.minecraft.network.protocol.game.PacketPlayOutMap;
|
||||||
|
import net.minecraft.world.level.saveddata.maps.MapId;
|
||||||
import net.minecraft.world.level.saveddata.maps.WorldMap;
|
import net.minecraft.world.level.saveddata.maps.WorldMap;
|
||||||
import org.bukkit.Bukkit;
|
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 org.bukkit.entity.Player;
|
||||||
import tech.sbdevelopment.mapreflectionapi.MapReflectionAPI;
|
import tech.sbdevelopment.mapreflectionapi.MapReflectionAPI;
|
||||||
import tech.sbdevelopment.mapreflectionapi.api.ArrayImage;
|
import tech.sbdevelopment.mapreflectionapi.api.ArrayImage;
|
||||||
|
@ -29,14 +30,16 @@ import tech.sbdevelopment.mapreflectionapi.api.ArrayImage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
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 final List<QueuedMap> sendQueue = new ArrayList<>();
|
||||||
private static int senderID = -1;
|
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
|
content.array //Data
|
||||||
);
|
);
|
||||||
|
|
||||||
|
MapId mapId = new MapId(id);
|
||||||
|
|
||||||
PacketPlayOutMap packet = new PacketPlayOutMap(
|
PacketPlayOutMap packet = new PacketPlayOutMap(
|
||||||
id, //ID
|
mapId, //ID
|
||||||
(byte) 0, //Scale
|
(byte) 0, //Scale
|
||||||
false, //Show icons
|
false, //Show icons
|
||||||
new ArrayList<>(), //Icons
|
new ArrayList<>(), //Icons
|
|
@ -18,15 +18,18 @@
|
||||||
|
|
||||||
package tech.sbdevelopment.mapreflectionapi.nms;
|
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.PacketPlayOutEntityMetadata;
|
||||||
import net.minecraft.network.protocol.game.PacketPlayOutSetSlot;
|
import net.minecraft.network.protocol.game.PacketPlayOutSetSlot;
|
||||||
import net.minecraft.network.syncher.DataWatcher;
|
import net.minecraft.network.syncher.DataWatcher;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.decoration.EntityItemFrame;
|
import net.minecraft.world.entity.decoration.EntityItemFrame;
|
||||||
|
import net.minecraft.world.level.saveddata.maps.MapId;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.craftbukkit.v1_20_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_20_R4.CraftWorld;
|
||||||
import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_20_R4.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack;
|
import org.bukkit.craftbukkit.v1_20_R4.inventory.CraftItemStack;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
@ -40,7 +43,7 @@ import tech.sbdevelopment.mapreflectionapi.api.exceptions.MapLimitExceededExcept
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class MapWrapper_v1_20_R1 extends MapWrapper {
|
public class MapWrapper_v1_20_R4 extends MapWrapper {
|
||||||
protected MapController controller = new MapController() {
|
protected MapController controller = new MapController() {
|
||||||
private final Map<UUID, Integer> viewers = new HashMap<>();
|
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) {
|
public void update(ArrayImage content) {
|
||||||
MapWrapper duplicate = MapReflectionAPI.getMapManager().getDuplicate(content);
|
MapWrapper duplicate = MapReflectionAPI.getMapManager().getDuplicate(content);
|
||||||
if (duplicate != null) {
|
if (duplicate != null) {
|
||||||
MapWrapper_v1_20_R1.this.content = duplicate.getContent();
|
MapWrapper_v1_20_R4.this.content = duplicate.getContent();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MapWrapper_v1_20_R1.this.content = content;
|
MapWrapper_v1_20_R4.this.content = content;
|
||||||
|
|
||||||
for (UUID id : viewers.keySet()) {
|
for (UUID id : viewers.keySet()) {
|
||||||
sendContent(Bukkit.getPlayer(id));
|
sendContent(Bukkit.getPlayer(id));
|
||||||
|
@ -103,16 +106,16 @@ public class MapWrapper_v1_20_R1 extends MapWrapper {
|
||||||
|
|
||||||
int id = getMapId(player);
|
int id = getMapId(player);
|
||||||
if (withoutQueue) {
|
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 {
|
} 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
|
@Override
|
||||||
public void cancelSend() {
|
public void cancelSend() {
|
||||||
for (int s : viewers.values()) {
|
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;
|
CraftPlayer craftPlayer = (CraftPlayer) player;
|
||||||
int windowId = craftPlayer.getHandle().bQ.j; //inventoryMenu containerId
|
int windowId = craftPlayer.getHandle().cb.j; //inventoryMenu containerId
|
||||||
int stateId = craftPlayer.getHandle().bQ.j(); //inventoryMenu getStateId()
|
int stateId = craftPlayer.getHandle().cb.j(); //inventoryMenu getStateId()
|
||||||
|
|
||||||
ItemStack stack = new ItemStack(Material.FILLED_MAP, 1);
|
ItemStack stack = new ItemStack(Material.FILLED_MAP, 1);
|
||||||
net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack);
|
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);
|
ItemFrame frame = getItemFrameById(player.getWorld(), entityId);
|
||||||
if (frame != null) {
|
if (frame != null) {
|
||||||
frame.removeMetadata("MAP_WRAPPER_REF", MapReflectionAPI.getInstance());
|
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));
|
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) {
|
private void sendItemFramePacket(Player player, int entityId, ItemStack stack, int mapId) {
|
||||||
net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack);
|
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<>();
|
List<DataWatcher.c<?>> list = new ArrayList<>();
|
||||||
DataWatcher.b<?> dataWatcherItem = DataWatcher.b.a(EntityItemFrame.g, nmsStack);
|
DataWatcher.c<?> dataWatcherItem = DataWatcher.c.a(EntityItemFrame.g, nmsStack);
|
||||||
list.add(dataWatcherItem);
|
list.add(dataWatcherItem);
|
||||||
PacketPlayOutEntityMetadata packet = new PacketPlayOutEntityMetadata(entityId, list);
|
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);
|
super(image);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,8 +27,8 @@ import net.minecraft.world.EnumHand;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.phys.Vec3D;
|
import net.minecraft.world.phys.Vec3D;
|
||||||
import org.bukkit.Bukkit;
|
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.craftbukkit.v1_20_R1.inventory.CraftItemStack;
|
import org.bukkit.craftbukkit.v1_20_R4.inventory.CraftItemStack;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import tech.sbdevelopment.mapreflectionapi.MapReflectionAPI;
|
import tech.sbdevelopment.mapreflectionapi.MapReflectionAPI;
|
||||||
|
@ -41,7 +41,7 @@ import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static tech.sbdevelopment.mapreflectionapi.utils.ReflectionUtil.*;
|
import static tech.sbdevelopment.mapreflectionapi.utils.ReflectionUtil.*;
|
||||||
|
|
||||||
public class PacketListener_v1_20_R1 extends PacketListener {
|
public class PacketListener_v1_20_R4 extends PacketListener {
|
||||||
@Override
|
@Override
|
||||||
protected void injectPlayer(Player p) {
|
protected void injectPlayer(Player p) {
|
||||||
ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
|
ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
|
||||||
|
@ -89,8 +89,8 @@ public class PacketListener_v1_20_R1 extends PacketListener {
|
||||||
return false;
|
return false;
|
||||||
}).get(1, TimeUnit.SECONDS)) return;
|
}).get(1, TimeUnit.SECONDS)) return;
|
||||||
} else if (packet instanceof PacketPlayInSetCreativeSlot packetPlayInSetCreativeSlot) {
|
} else if (packet instanceof PacketPlayInSetCreativeSlot packetPlayInSetCreativeSlot) {
|
||||||
int slot = packetPlayInSetCreativeSlot.a();
|
int slot = (int) getDeclaredField(packetPlayInSetCreativeSlot, supports(20, 4) ? "b" : "a"); //slot, 1.20.5 = b, lower is a
|
||||||
ItemStack item = packetPlayInSetCreativeSlot.c();
|
ItemStack item = (ItemStack) getDeclaredField(packetPlayInSetCreativeSlot, supports(20, 4) ? "e" : "d"); //item, 1.20.5 = e, lower is d
|
||||||
|
|
||||||
boolean async = !plugin.getServer().isPrimaryThread();
|
boolean async = !plugin.getServer().isPrimaryThread();
|
||||||
CreateInventoryMapUpdateEvent event = new CreateInventoryMapUpdateEvent(p, slot, CraftItemStack.asBukkitCopy(item), async);
|
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 :|
|
//The connection is private since 1.19.4 :|
|
||||||
NetworkManager networkManager = (NetworkManager) getField(((CraftPlayer) p).getHandle().c, "h");
|
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);
|
pipeline.addBefore("packet_handler", p.getName(), channelDuplexHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ public class PacketListener_v1_20_R1 extends PacketListener {
|
||||||
public void removePlayer(Player p) {
|
public void removePlayer(Player p) {
|
||||||
//The connection is private since 1.19.4 :|
|
//The connection is private since 1.19.4 :|
|
||||||
NetworkManager networkManager = (NetworkManager) getField(((CraftPlayer) p).getHandle().c, "h");
|
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()));
|
channel.eventLoop().submit(() -> channel.pipeline().remove(p.getName()));
|
||||||
}
|
}
|
||||||
|
|
2
pom.xml
2
pom.xml
|
@ -40,9 +40,9 @@
|
||||||
<modules>
|
<modules>
|
||||||
<module>API</module>
|
<module>API</module>
|
||||||
<module>Dist</module>
|
<module>Dist</module>
|
||||||
|
<module>NMS-v1_20_R4</module>
|
||||||
<module>NMS-v1_20_R3</module>
|
<module>NMS-v1_20_R3</module>
|
||||||
<module>NMS-v1_20_R2</module>
|
<module>NMS-v1_20_R2</module>
|
||||||
<module>NMS-v1_20_R1</module>
|
|
||||||
<module>NMS-v1_19_R3</module>
|
<module>NMS-v1_19_R3</module>
|
||||||
<module>NMS-v1_18_R2</module>
|
<module>NMS-v1_18_R2</module>
|
||||||
<module>NMS-v1_17_R1</module>
|
<module>NMS-v1_17_R1</module>
|
||||||
|
|
Loading…
Add table
Reference in a new issue