Untitled
unknown
java
a year ago
2.9 kB
9
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