End hologram name implementation

This commit is contained in:
Flowsqy 2021-12-28 22:40:23 +01:00
parent 46257d2242
commit 5123409626
2 changed files with 22 additions and 6 deletions

View File

@ -1,12 +1,13 @@
package de.epiceric.shopchest.nms; package de.epiceric.shopchest.nms;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player;
public interface FakeArmorStand { public interface FakeArmorStand {
int getEntityId(); int getEntityId();
void sendData(String name); void sendData(String name, Iterable<Player> receivers);
void remove(); void remove();

View File

@ -1,12 +1,17 @@
package de.epiceric.shopchest.nms.v1_17_R1; package de.epiceric.shopchest.nms.v1_17_R1;
import de.epiceric.shopchest.nms.FakeArmorStand; import de.epiceric.shopchest.nms.FakeArmorStand;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket;
import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
@ -61,8 +66,14 @@ public class FakeArmorStandImpl implements FakeArmorStand {
return entityId; return entityId;
} }
private void sendPacket(Packet<?> packet, Iterable<Player> receivers){
for(Player receiver : receivers){
((CraftPlayer)receiver).getHandle().connection.send(packet);
}
}
@Override @Override
public void sendData(String name) { public void sendData(String name, Iterable<Player> receivers) {
// Create packet // Create packet
final SynchedEntityData entityData = new SynchedEntityData(null); final SynchedEntityData entityData = new SynchedEntityData(null);
final ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(entityId, entityData, false); final ClientboundSetEntityDataPacket dataPacket = new ClientboundSetEntityDataPacket(entityId, entityData, false);
@ -71,9 +82,13 @@ public class FakeArmorStandImpl implements FakeArmorStand {
// Setup data // Setup data
packedItems.add(new SynchedEntityData.DataItem<>(DATA_SHARED_FLAGS_ID, INVISIBLE_FLAG)); packedItems.add(new SynchedEntityData.DataItem<>(DATA_SHARED_FLAGS_ID, INVISIBLE_FLAG));
packedItems.add(new SynchedEntityData.DataItem<>(DATA_NO_GRAVITY, true)); packedItems.add(new SynchedEntityData.DataItem<>(DATA_NO_GRAVITY, true));
packedItems.add(new SynchedEntityData.DataItem<>(DATA_CUSTOM_NAME, Optional.ofNullable(Component.Serializer.fromJson( packedItems.add(new SynchedEntityData.DataItem<>(DATA_CUSTOM_NAME, Optional.ofNullable(
"" // TODO Use chat-api to serialize the name Component.Serializer.fromJson(
)))); ComponentSerializer.toString(
TextComponent.fromLegacyText(name)
)
)
)));
packedItems.add(new SynchedEntityData.DataItem<>(DATA_CUSTOM_NAME_VISIBLE, true)); packedItems.add(new SynchedEntityData.DataItem<>(DATA_CUSTOM_NAME_VISIBLE, true));
packedItems.add(new SynchedEntityData.DataItem<>(DATA_SILENT, true)); packedItems.add(new SynchedEntityData.DataItem<>(DATA_SILENT, true));
@ -84,7 +99,7 @@ public class FakeArmorStandImpl implements FakeArmorStand {
} }
// Send packet // Send packet
sendPacket(dataPacket, receivers);
} }
@Override @Override