Untitled
unknown
java
a year ago
2.9 kB
6
Indexable
package gg.bundlegroup.screen.models; import net.minecraft.core.component.DataComponents; import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.util.ClassTreeIdRegistry; import net.minecraft.world.entity.decoration.ItemFrame; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.Player; import java.util.HashMap; import java.util.List; import java.util.Map; public class Frame { private final int entityId; private final SynchedEntityData data = new SynchedEntityData.Builder(DummyEntity.INSTANCE) .define(ItemFrame.DATA_ITEM, ItemStack.EMPTY) .build(); private final Map<Player, ServerGamePacketListenerImpl> viewers = new HashMap<>(); private ScreenMap map; public Frame(int entityId) { this.entityId = entityId; } public void setMap(ScreenMap map) { if (this.map == map) { return; } for (Player player : viewers.keySet()) { this.map.removeViewer(player); } this.map = map; for (Player player : viewers.keySet()) { map.addViewer(player); } if (map != null) { ItemStack item = new ItemStack(Items.FILLED_MAP); item.set(DataComponents.MAP_ID, map.getMapId()); data.set(ItemFrame.DATA_ITEM, item); } else { data.set(ItemFrame.DATA_ITEM, ItemStack.EMPTY); } List<SynchedEntityData.DataValue<?>> values = data.getNonDefaultValues(); if (values != null) { ClientboundSetEntityDataPacket packet = new ClientboundSetEntityDataPacket(entityId, values); for (ServerGamePacketListenerImpl connection : viewers.values()) { connection.send(packet); } } } public void addViewer(Player player) { ServerGamePacketListenerImpl connection = ((CraftPlayer) player).getHandle().connection; if (viewers.put(player, connection) != null) { return; } if (map != null) { map.addViewer(player); } List<SynchedEntityData.DataValue<?>> values = data.getNonDefaultValues(); if (values != null) { connection.send(new ClientboundSetEntityDataPacket(entityId, values)); } } public void removeViewer(Player player) { ServerGamePacketListenerImpl connection = viewers.remove(player); if (connection == null) { return; } if (map != null) { map.removeViewer(player); } } public ScreenMap getMap() { return map; } }
Editor is loading...
Leave a Comment