mirror of
https://github.com/filoghost/HolographicDisplays.git
synced 2024-11-27 21:05:35 +01:00
Fix ProtocolLib error when respawning the entities to a player
This commit is contained in:
parent
9ea8c99929
commit
f453bc9386
@ -24,6 +24,7 @@ import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
|||||||
import com.gmail.filoghost.holographicdisplays.bridge.protocollib.ProtocolLibHook;
|
import com.gmail.filoghost.holographicdisplays.bridge.protocollib.ProtocolLibHook;
|
||||||
import com.gmail.filoghost.holographicdisplays.bridge.protocollib.current.WrapperPlayServerSpawnEntity.ObjectTypes;
|
import com.gmail.filoghost.holographicdisplays.bridge.protocollib.current.WrapperPlayServerSpawnEntity.ObjectTypes;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.NMSManager;
|
||||||
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSArmorStand;
|
||||||
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
import com.gmail.filoghost.holographicdisplays.nms.interfaces.entity.NMSEntityBase;
|
||||||
import com.gmail.filoghost.holographicdisplays.object.CraftHologram;
|
import com.gmail.filoghost.holographicdisplays.object.CraftHologram;
|
||||||
import com.gmail.filoghost.holographicdisplays.object.line.CraftHologramLine;
|
import com.gmail.filoghost.holographicdisplays.object.line.CraftHologramLine;
|
||||||
@ -44,7 +45,12 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
|
|
||||||
private NMSManager nmsManager;
|
private NMSManager nmsManager;
|
||||||
|
|
||||||
private Serializer itemSerializer, intSerializer, byteSerializer;
|
private Serializer
|
||||||
|
itemSerializer,
|
||||||
|
intSerializer,
|
||||||
|
byteSerializer,
|
||||||
|
stringSerializer,
|
||||||
|
booleanSerializer;
|
||||||
|
|
||||||
private int itemstackMetadataWatcherIndex;
|
private int itemstackMetadataWatcherIndex;
|
||||||
|
|
||||||
@ -77,6 +83,8 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
itemSerializer = Registry.get(MinecraftReflection.getItemStackClass());
|
itemSerializer = Registry.get(MinecraftReflection.getItemStackClass());
|
||||||
intSerializer = Registry.get(Integer.class);
|
intSerializer = Registry.get(Integer.class);
|
||||||
byteSerializer = Registry.get(Byte.class);
|
byteSerializer = Registry.get(Byte.class);
|
||||||
|
stringSerializer = Registry.get(String.class);
|
||||||
|
booleanSerializer = Registry.get(Boolean.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
AdapterParameteters params = PacketAdapter
|
AdapterParameteters params = PacketAdapter
|
||||||
@ -241,9 +249,7 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
CraftTextLine textLine = (CraftTextLine) line;
|
CraftTextLine textLine = (CraftTextLine) line;
|
||||||
|
|
||||||
if (textLine.isSpawned()) {
|
if (textLine.isSpawned()) {
|
||||||
|
sendSpawnArmorStandPacket(player, (NMSArmorStand) textLine.getNmsNameble());
|
||||||
AbstractPacket nameablePacket = new WrapperPlayServerSpawnEntityLiving(textLine.getNmsNameble().getBukkitEntityNMS());
|
|
||||||
nameablePacket.sendPacket(player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (line instanceof CraftItemLine) {
|
} else if (line instanceof CraftItemLine) {
|
||||||
@ -253,17 +259,15 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
AbstractPacket itemPacket = new WrapperPlayServerSpawnEntity(itemLine.getNmsItem().getBukkitEntityNMS(), ObjectTypes.ITEM_STACK, 1);
|
AbstractPacket itemPacket = new WrapperPlayServerSpawnEntity(itemLine.getNmsItem().getBukkitEntityNMS(), ObjectTypes.ITEM_STACK, 1);
|
||||||
itemPacket.sendPacket(player);
|
itemPacket.sendPacket(player);
|
||||||
|
|
||||||
AbstractPacket vehiclePacket = new WrapperPlayServerSpawnEntityLiving(itemLine.getNmsVehicle().getBukkitEntityNMS());
|
sendSpawnArmorStandPacket(player, (NMSArmorStand) itemLine.getNmsVehicle());
|
||||||
vehiclePacket.sendPacket(player);
|
sendVehicleAttachPacket(player, itemLine.getNmsVehicle().getIdNMS(), itemLine.getNmsItem().getIdNMS());
|
||||||
|
|
||||||
AbstractPacket attachPacket = getAttachPacket(itemLine.getNmsVehicle().getIdNMS(), itemLine.getNmsItem().getIdNMS());
|
|
||||||
attachPacket.sendPacket(player);
|
|
||||||
|
|
||||||
WrapperPlayServerEntityMetadata itemDataPacket = new WrapperPlayServerEntityMetadata();
|
WrapperPlayServerEntityMetadata itemDataPacket = new WrapperPlayServerEntityMetadata();
|
||||||
WrappedDataWatcher dataWatcher = new WrappedDataWatcher();
|
WrappedDataWatcher dataWatcher = new WrappedDataWatcher();
|
||||||
|
|
||||||
if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
|
if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
|
||||||
dataWatcher.setObject(new WrappedDataWatcherObject(itemstackMetadataWatcherIndex, itemSerializer), Optional.of(itemLine.getNmsItem().getRawItemStack()));
|
Object itemStackObject = MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_11) ? itemLine.getNmsItem().getRawItemStack() : Optional.of(itemLine.getNmsItem().getRawItemStack());
|
||||||
|
dataWatcher.setObject(new WrappedDataWatcherObject(itemstackMetadataWatcherIndex, itemSerializer), itemStackObject);
|
||||||
dataWatcher.setObject(new WrappedDataWatcherObject(1, intSerializer), 300);
|
dataWatcher.setObject(new WrappedDataWatcherObject(1, intSerializer), 300);
|
||||||
dataWatcher.setObject(new WrappedDataWatcherObject(0, byteSerializer), (byte) 0);
|
dataWatcher.setObject(new WrappedDataWatcherObject(0, byteSerializer), (byte) 0);
|
||||||
} else {
|
} else {
|
||||||
@ -286,14 +290,12 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
CraftTouchSlimeLine touchSlime = touchableLine.getTouchSlime();
|
CraftTouchSlimeLine touchSlime = touchableLine.getTouchSlime();
|
||||||
|
|
||||||
if (touchSlime.isSpawned()) {
|
if (touchSlime.isSpawned()) {
|
||||||
AbstractPacket vehiclePacket = new WrapperPlayServerSpawnEntityLiving(touchSlime.getNmsVehicle().getBukkitEntityNMS());
|
sendSpawnArmorStandPacket(player, (NMSArmorStand) touchSlime.getNmsVehicle());
|
||||||
vehiclePacket.sendPacket(player);
|
|
||||||
|
|
||||||
AbstractPacket slimePacket = new WrapperPlayServerSpawnEntityLiving(touchSlime.getNmsSlime().getBukkitEntityNMS());
|
AbstractPacket slimePacket = new WrapperPlayServerSpawnEntityLiving(touchSlime.getNmsSlime().getBukkitEntityNMS());
|
||||||
slimePacket.sendPacket(player);
|
slimePacket.sendPacket(player);
|
||||||
|
|
||||||
AbstractPacket attachPacket = getAttachPacket(touchSlime.getNmsVehicle().getIdNMS(), touchSlime.getNmsSlime().getIdNMS());
|
sendVehicleAttachPacket(player, touchSlime.getNmsVehicle().getIdNMS(), touchSlime.getNmsSlime().getIdNMS());
|
||||||
attachPacket.sendPacket(player);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -301,17 +303,47 @@ public class ProtocolLibHookImpl implements ProtocolLibHook {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private AbstractPacket getAttachPacket(int vehicleId, int passengerId) {
|
private void sendSpawnArmorStandPacket(Player receiver, NMSArmorStand armorStand) {
|
||||||
|
if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_11)) {
|
||||||
|
WrapperPlayServerSpawnEntity spawnPacket = new WrapperPlayServerSpawnEntity(armorStand.getBukkitEntityNMS(), WrapperPlayServerSpawnEntity.ObjectTypes.ARMOR_STAND, 1);
|
||||||
|
spawnPacket.sendPacket(receiver);
|
||||||
|
|
||||||
|
WrapperPlayServerEntityMetadata dataPacket = new WrapperPlayServerEntityMetadata();
|
||||||
|
WrappedDataWatcher dataWatcher = new WrappedDataWatcher();
|
||||||
|
|
||||||
|
dataWatcher.setObject(new WrappedDataWatcherObject(0, byteSerializer), (byte) 0x20); // Entity status
|
||||||
|
|
||||||
|
String customName = armorStand.getCustomNameNMS();
|
||||||
|
if (customName != null && !customName.isEmpty()) {
|
||||||
|
dataWatcher.setObject(new WrappedDataWatcherObject(2, stringSerializer), customName); // Custom name
|
||||||
|
dataWatcher.setObject(new WrappedDataWatcherObject(3, booleanSerializer), true); // Custom name visible
|
||||||
|
}
|
||||||
|
|
||||||
|
dataWatcher.setObject(new WrappedDataWatcherObject(5, booleanSerializer), true); // No gravity
|
||||||
|
dataWatcher.setObject(new WrappedDataWatcherObject(11, byteSerializer), (byte) (0x01 | 0x08 | 0x10)); // Armor stand data: small, no base plate, marker
|
||||||
|
|
||||||
|
dataPacket.setEntityMetadata(dataWatcher.getWatchableObjects());
|
||||||
|
dataPacket.setEntityId(armorStand.getIdNMS());
|
||||||
|
dataPacket.sendPacket(receiver);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
WrapperPlayServerSpawnEntityLiving spawnPacket = new WrapperPlayServerSpawnEntityLiving(armorStand.getBukkitEntityNMS());
|
||||||
|
spawnPacket.sendPacket(receiver);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void sendVehicleAttachPacket(Player receiver, int vehicleId, int passengerId) {
|
||||||
if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
|
if (MinecraftVersion.isGreaterEqualThan(MinecraftVersion.v1_9)) {
|
||||||
WrapperPlayServerMount attachPacket = new WrapperPlayServerMount();
|
WrapperPlayServerMount attachPacket = new WrapperPlayServerMount();
|
||||||
attachPacket.setVehicleId(vehicleId);
|
attachPacket.setVehicleId(vehicleId);
|
||||||
attachPacket.setPassengers(new int[] {passengerId});
|
attachPacket.setPassengers(new int[] {passengerId});
|
||||||
return attachPacket;
|
attachPacket.sendPacket(receiver);
|
||||||
} else {
|
} else {
|
||||||
WrapperPlayServerAttachEntity attachPacket = new WrapperPlayServerAttachEntity();
|
WrapperPlayServerAttachEntity attachPacket = new WrapperPlayServerAttachEntity();
|
||||||
attachPacket.setVehicleId(vehicleId);
|
attachPacket.setVehicleId(vehicleId);
|
||||||
attachPacket.setEntityId(passengerId);
|
attachPacket.setEntityId(passengerId);
|
||||||
return attachPacket;
|
attachPacket.sendPacket(receiver);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user