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_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
9
.idea/misc.xml
generated
|
@ -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
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>
|
||||
<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>
|
||||
|
|
|
@ -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>
|
|
@ -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
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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()));
|
||||
}
|
||||
|
2
pom.xml
2
pom.xml
|
@ -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>
|
||||
|
|
Loading…
Add table
Reference in a new issue