ZNPCsPlus/src/main/java/lol/pyr/znpcsplus/packets/PacketFactory.java
2023-04-26 18:54:00 +01:00

44 lines
1.9 KiB
Java

package lol.pyr.znpcsplus.packets;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import lol.pyr.znpcsplus.entity.PacketEntity;
import lol.pyr.znpcsplus.util.LazyLoader;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Map;
public interface PacketFactory {
void spawnPlayer(Player player, PacketEntity entity);
void spawnEntity(Player player, PacketEntity entity);
void destroyEntity(Player player, PacketEntity entity);
void teleportEntity(Player player, PacketEntity entity);
void addTabPlayer(Player player, PacketEntity entity);
void removeTabPlayer(Player player, PacketEntity entity);
void createTeam(Player player, PacketEntity entity);
void removeTeam(Player player, PacketEntity entity);
PacketFactory factory = get();
static PacketFactory get() {
if (factory != null) return factory;
ServerVersion version = PacketEvents.getAPI().getServerManager().getVersion();
Map<ServerVersion, LazyLoader<? extends PacketFactory>> factories = buildFactoryMap();
if (factories.containsKey(version)) return factories.get(version).get();
for (ServerVersion v : ServerVersion.reversedValues()) {
if (v.isNewerThan(version)) continue;
if (!factories.containsKey(v)) continue;
return factories.get(v).get();
}
throw new RuntimeException("Unsupported version!");
}
private static Map<ServerVersion, LazyLoader<? extends PacketFactory>> buildFactoryMap() {
HashMap<ServerVersion, LazyLoader<? extends PacketFactory>> map = new HashMap<>();
map.put(ServerVersion.V_1_8, LazyLoader.of(V1_8Factory::new));
map.put(ServerVersion.V_1_14, LazyLoader.of(V1_14Factory::new));
map.put(ServerVersion.V_1_19, LazyLoader.of(V1_19Factory::new));
return map;
}
}