mirror of
https://github.com/filoghost/HolographicDisplays.git
synced 2024-09-30 08:07:35 +02:00
Simplify PacketListener
This commit is contained in:
parent
c332547f38
commit
65a54165eb
@ -13,9 +13,8 @@ import com.comphenix.protocol.events.PacketAdapter;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.events.PacketEvent;
|
||||
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
|
||||
import me.filoghost.holographicdisplays.bridge.protocollib.packet.EntityRelatedPacketWrapper;
|
||||
import me.filoghost.holographicdisplays.bridge.protocollib.packet.AbstractPacket;
|
||||
import me.filoghost.holographicdisplays.bridge.protocollib.packet.WrapperPlayServerEntityMetadata;
|
||||
import me.filoghost.holographicdisplays.bridge.protocollib.packet.WrapperPlayServerSpawnEntity;
|
||||
import me.filoghost.holographicdisplays.bridge.protocollib.packet.WrapperPlayServerSpawnEntityLiving;
|
||||
import me.filoghost.holographicdisplays.core.hologram.StandardHologramLine;
|
||||
import me.filoghost.holographicdisplays.core.hologram.StandardTextLine;
|
||||
@ -25,7 +24,6 @@ import me.filoghost.holographicdisplays.core.nms.entity.NMSArmorStand;
|
||||
import me.filoghost.holographicdisplays.core.nms.entity.NMSEntity;
|
||||
import me.filoghost.holographicdisplays.core.placeholder.RelativePlaceholder;
|
||||
import me.filoghost.holographicdisplays.util.NMSVersion;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
@ -61,81 +59,47 @@ class PacketListener extends PacketAdapter {
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent event) {
|
||||
PacketContainer packet = event.getPacket();
|
||||
PacketType packetType = packet.getType();
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (player instanceof Factory) {
|
||||
return; // Ignore temporary players (reference: https://github.com/dmulloy2/ProtocolLib/issues/349)
|
||||
}
|
||||
|
||||
// Spawn entity packet
|
||||
if (packet.getType() == PacketType.Play.Server.SPAWN_ENTITY_LIVING) {
|
||||
WrapperPlayServerSpawnEntityLiving spawnEntityPacket = new WrapperPlayServerSpawnEntityLiving(packet);
|
||||
StandardHologramLine hologramLine = getHologramLine(event, spawnEntityPacket);
|
||||
int entityID = packet.getIntegers().read(0);
|
||||
if (entityID < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (hologramLine == null) {
|
||||
return;
|
||||
NMSEntity nmsEntity = nmsManager.getNMSEntityBaseFromID(event.getPlayer().getWorld(), entityID);
|
||||
if (nmsEntity == null) {
|
||||
return; // Entity not existing or not related to holograms.
|
||||
}
|
||||
|
||||
if (packetType == PacketType.Play.Server.REL_ENTITY_MOVE || packetType == PacketType.Play.Server.REL_ENTITY_MOVE_LOOK) {
|
||||
if (nmsEntity instanceof NMSArmorStand && packetSettings.sendAccurateLocationPackets()) {
|
||||
event.setCancelled(true); // Don't send relative movement packets for armor stands, only keep precise teleport packets.
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hologramLine.getHologram().isVisibleTo(player)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (NMSVersion.isGreaterEqualThan(NMSVersion.v1_15_R1)) {
|
||||
// There's no metadata field in 1.15+ on the spawn entity packet
|
||||
return;
|
||||
}
|
||||
StandardHologramLine hologramLine = nmsEntity.getHologramLine();
|
||||
|
||||
if (!hologramLine.getHologram().isVisibleTo(player)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (packetType == PacketType.Play.Server.SPAWN_ENTITY_LIVING && NMSVersion.isGreaterEqualThan(NMSVersion.v1_15_R1)) {
|
||||
// There's no metadata field in 1.15+ on the spawn entity packet, ignore it
|
||||
return;
|
||||
}
|
||||
|
||||
if (packetType == PacketType.Play.Server.SPAWN_ENTITY_LIVING || packetType == PacketType.Play.Server.ENTITY_METADATA) {
|
||||
if (!(hologramLine instanceof StandardTextLine)) {
|
||||
return;
|
||||
}
|
||||
|
||||
StandardTextLine textLine = (StandardTextLine) hologramLine;
|
||||
Collection<RelativePlaceholder> relativePlaceholders = textLine.getRelativePlaceholders();
|
||||
|
||||
if (relativePlaceholders == null || relativePlaceholders.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
spawnEntityPacket = new WrapperPlayServerSpawnEntityLiving(packet.deepClone());
|
||||
WrappedWatchableObject customNameWatchableObject = metadataHelper.getCustomNameWacthableObject(spawnEntityPacket.getMetadata());
|
||||
|
||||
if (customNameWatchableObject == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
replaceRelativePlaceholders(customNameWatchableObject, player, relativePlaceholders);
|
||||
event.setPacket(spawnEntityPacket.getHandle());
|
||||
|
||||
} else if (packet.getType() == PacketType.Play.Server.SPAWN_ENTITY) {
|
||||
WrapperPlayServerSpawnEntity spawnEntityPacket = new WrapperPlayServerSpawnEntity(packet);
|
||||
StandardHologramLine hologramLine = getHologramLine(event, spawnEntityPacket);
|
||||
|
||||
if (hologramLine == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hologramLine.getHologram().isVisibleTo(player)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
} else if (packet.getType() == PacketType.Play.Server.ENTITY_METADATA) {
|
||||
WrapperPlayServerEntityMetadata entityMetadataPacket = new WrapperPlayServerEntityMetadata(packet);
|
||||
StandardHologramLine hologramLine = getHologramLine(event, entityMetadataPacket);
|
||||
|
||||
if (hologramLine == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!hologramLine.getHologram().isVisibleTo(player)) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(hologramLine instanceof StandardTextLine)) {
|
||||
return;
|
||||
}
|
||||
StandardTextLine textLine = (StandardTextLine) hologramLine;
|
||||
Collection<RelativePlaceholder> relativePlaceholders = textLine.getRelativePlaceholders();
|
||||
|
||||
@ -143,8 +107,18 @@ class PacketListener extends PacketAdapter {
|
||||
return;
|
||||
}
|
||||
|
||||
entityMetadataPacket = new WrapperPlayServerEntityMetadata(packet.deepClone());
|
||||
WrappedWatchableObject customNameWatchableObject = metadataHelper.getCustomNameWatchableObject(entityMetadataPacket.getEntityMetadata());
|
||||
WrappedWatchableObject customNameWatchableObject;
|
||||
AbstractPacket packetWrapper;
|
||||
|
||||
if (packetType == PacketType.Play.Server.ENTITY_METADATA) {
|
||||
WrapperPlayServerEntityMetadata entityMetadataPacket = new WrapperPlayServerEntityMetadata(packet.deepClone());
|
||||
packetWrapper = entityMetadataPacket;
|
||||
customNameWatchableObject = metadataHelper.getCustomNameWatchableObject(entityMetadataPacket.getEntityMetadata());
|
||||
} else {
|
||||
WrapperPlayServerSpawnEntityLiving spawnEntityPacket = new WrapperPlayServerSpawnEntityLiving(packet.deepClone());
|
||||
packetWrapper = spawnEntityPacket;
|
||||
customNameWatchableObject = metadataHelper.getCustomNameWacthableObject(spawnEntityPacket.getMetadata());
|
||||
}
|
||||
|
||||
if (customNameWatchableObject == null) {
|
||||
return;
|
||||
@ -152,15 +126,7 @@ class PacketListener extends PacketAdapter {
|
||||
|
||||
boolean modified = replaceRelativePlaceholders(customNameWatchableObject, player, relativePlaceholders);
|
||||
if (modified) {
|
||||
event.setPacket(entityMetadataPacket.getHandle());
|
||||
}
|
||||
|
||||
} else if (packet.getType() == PacketType.Play.Server.REL_ENTITY_MOVE || packet.getType() == PacketType.Play.Server.REL_ENTITY_MOVE_LOOK) {
|
||||
int entityID = packet.getIntegers().read(0);
|
||||
NMSEntity nmsEntity = nmsManager.getNMSEntityBaseFromID(event.getPlayer().getWorld(), entityID);
|
||||
|
||||
if (nmsEntity instanceof NMSArmorStand && packetSettings.sendAccurateLocationPackets()) {
|
||||
event.setCancelled(true); // Don't send relative movement packets for armor stands, only keep precise teleport packets.
|
||||
event.setPacket(packetWrapper.getHandle());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -190,23 +156,6 @@ class PacketListener extends PacketAdapter {
|
||||
|
||||
metadataHelper.setCustomNameNMSObject(customNameWatchableObject, replacedCustomNameNMSObject);
|
||||
return true;
|
||||
}
|
||||
|
||||
private StandardHologramLine getHologramLine(PacketEvent packetEvent, EntityRelatedPacketWrapper packetWrapper) {
|
||||
return getHologramLine(packetEvent.getPlayer().getWorld(), packetWrapper.getEntityID());
|
||||
}
|
||||
|
||||
private StandardHologramLine getHologramLine(World world, int entityID) {
|
||||
if (entityID < 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
NMSEntity nmsEntity = nmsManager.getNMSEntityBaseFromID(world, entityID);
|
||||
if (nmsEntity == null) {
|
||||
return null; // Entity not existing or not related to holograms.
|
||||
}
|
||||
|
||||
return nmsEntity.getHologramLine();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) filoghost and contributors
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
package me.filoghost.holographicdisplays.bridge.protocollib.packet;
|
||||
|
||||
public interface EntityRelatedPacketWrapper {
|
||||
|
||||
int getEntityID();
|
||||
|
||||
}
|
@ -26,7 +26,7 @@ import org.bukkit.entity.Entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class WrapperPlayServerEntityMetadata extends AbstractPacket implements EntityRelatedPacketWrapper {
|
||||
public class WrapperPlayServerEntityMetadata extends AbstractPacket {
|
||||
public static final PacketType TYPE = PacketType.Play.Server.ENTITY_METADATA;
|
||||
|
||||
public WrapperPlayServerEntityMetadata() {
|
||||
@ -42,7 +42,6 @@ public class WrapperPlayServerEntityMetadata extends AbstractPacket implements E
|
||||
* Retrieve unique entity ID to update.
|
||||
* @return The current Entity ID
|
||||
*/
|
||||
@Override
|
||||
public int getEntityID() {
|
||||
return handle.getIntegers().read(0);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ import me.filoghost.holographicdisplays.util.NMSVersion;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
public class WrapperPlayServerSpawnEntity extends AbstractPacket implements EntityRelatedPacketWrapper {
|
||||
public class WrapperPlayServerSpawnEntity extends AbstractPacket {
|
||||
public static final PacketType TYPE = PacketType.Play.Server.SPAWN_ENTITY;
|
||||
|
||||
private static PacketConstructor entityConstructor;
|
||||
@ -109,7 +109,6 @@ public class WrapperPlayServerSpawnEntity extends AbstractPacket implements Enti
|
||||
* Retrieve entity ID of the Object.
|
||||
* @return The current EID
|
||||
*/
|
||||
@Override
|
||||
public int getEntityID() {
|
||||
return handle.getIntegers().read(0);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
public class WrapperPlayServerSpawnEntityLiving extends AbstractPacket implements EntityRelatedPacketWrapper {
|
||||
public class WrapperPlayServerSpawnEntityLiving extends AbstractPacket {
|
||||
public static final PacketType TYPE = PacketType.Play.Server.SPAWN_ENTITY_LIVING;
|
||||
|
||||
private static PacketConstructor entityConstructor;
|
||||
@ -55,7 +55,6 @@ public class WrapperPlayServerSpawnEntityLiving extends AbstractPacket implement
|
||||
* Retrieve entity ID.
|
||||
* @return The current EID
|
||||
*/
|
||||
@Override
|
||||
public int getEntityID() {
|
||||
return handle.getIntegers().read(0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user