ZNPCsPlus/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java
2023-04-26 18:54:35 +01:00

53 lines
2.4 KiB
Java

package lol.pyr.znpcsplus.metadata;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.protocol.entity.data.EntityData;
import lol.pyr.znpcsplus.util.LazyLoader;
import java.util.HashMap;
import java.util.Map;
/**
* 1.8 https://wiki.vg/index.php?title=Entity_metadata&oldid=7415
* 1.9 https://wiki.vg/index.php?title=Entity_metadata&oldid=7968
* 1.10 https://wiki.vg/index.php?title=Entity_metadata&oldid=8241
* 1.11 https://wiki.vg/index.php?title=Entity_metadata&oldid=8534
* 1.12 https://wiki.vg/index.php?title=Entity_metadata&oldid=14048
* 1.13 https://wiki.vg/index.php?title=Entity_metadata&oldid=14800
* 1.14 https://wiki.vg/index.php?title=Entity_metadata&oldid=15240
* 1.15 https://wiki.vg/index.php?title=Entity_metadata&oldid=15991
* 1.16 https://wiki.vg/index.php?title=Entity_metadata&oldid=16539
* 1.17 https://wiki.vg/index.php?title=Entity_metadata&oldid=17521
* 1.18 NOTHING CHANGED
* 1.19 https://wiki.vg/index.php?title=Entity_metadata
*/
public interface MetadataFactory {
EntityData skinLayers();
EntityData effects(boolean onFire, boolean glowing, boolean invisible);
MetadataFactory factory = get();
static MetadataFactory get() {
if (factory != null) return factory;
ServerVersion version = PacketEvents.getAPI().getServerManager().getVersion();
Map<ServerVersion, LazyLoader<? extends MetadataFactory>> 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 MetadataFactory>> buildFactoryMap() {
HashMap<ServerVersion, LazyLoader<? extends MetadataFactory>> map = new HashMap<>();
map.put(ServerVersion.V_1_8, LazyLoader.of(V1_8Factory::new));
map.put(ServerVersion.V_1_9, LazyLoader.of(V1_9Factory::new));
map.put(ServerVersion.V_1_14, LazyLoader.of(V1_14Factory::new));
map.put(ServerVersion.V_1_16, LazyLoader.of(V1_16Factory::new));
map.put(ServerVersion.V_1_17, LazyLoader.of(V1_17Factory::new));
return map;
}
}