More work

This commit is contained in:
FlorianMichael 2024-04-01 13:42:40 +02:00
parent a03630743d
commit c88e974732
No known key found for this signature in database
GPG Key ID: C2FB87E71C425126
6 changed files with 473 additions and 134 deletions

View File

@ -22,116 +22,150 @@
*/
package com.viaversion.viaversion.api.minecraft.entities;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.util.Pair;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
// 1.10 Entity / Object ids
// TODO Check object types
public class EntityTypes1_10 {
public static EntityType getTypeFromId(int typeID, boolean isObject) {
Optional<EntityType> type;
if (isObject)
type = ObjectType.getPCEntity(typeID);
else
type = EntityType.findById(typeID);
if (!type.isPresent()) {
Via.getPlatform().getLogger().severe("Could not find 1.10 type id " + typeID + " isObject=" + isObject);
return EntityType.ENTITY; // Fall back to the basic ENTITY
public static EntityType getEntityType(final int id, @Nullable Integer data, boolean object) {
if (object) {
return ObjectType.getObjectEntity(id, data).map(ObjectType::getType).orElse(null);
} else {
return EntityType.getEntity(id).orElse(null);
}
return type.get();
}
public enum EntityType implements com.viaversion.viaversion.api.minecraft.entities.EntityType {
ENTITY(-1),
DROPPED_ITEM(1, ENTITY),
EXPERIENCE_ORB(2, ENTITY),
LEASH_HITCH(8, ENTITY), // Actually entity hanging but it doesn't make a lot of difference for metadata
PAINTING(9, ENTITY), // Actually entity hanging but it doesn't make a lot of difference for metadata
ARROW(10, ENTITY),
SNOWBALL(11, ENTITY), // Actually EntityProjectile
FIREBALL(12, ENTITY),
SMALL_FIREBALL(13, ENTITY),
ENDER_PEARL(14, ENTITY), // Actually EntityProjectile
ENDER_SIGNAL(15, ENTITY),
THROWN_EXP_BOTTLE(17, ENTITY),
ITEM_FRAME(18, ENTITY), // Actually EntityHanging
WITHER_SKULL(19, ENTITY),
PRIMED_TNT(20, ENTITY),
FALLING_BLOCK(21, ENTITY),
FIREWORK(22, ENTITY),
TIPPED_ARROW(23, ARROW),
SPECTRAL_ARROW(24, ARROW),
SHULKER_BULLET(25, ENTITY),
DRAGON_FIREBALL(26, FIREBALL),
ENTITY_LIVING(-1, ENTITY),
ENTITY_INSENTIENT(-1, ENTITY_LIVING),
ENTITY_AGEABLE(-1, ENTITY_INSENTIENT),
ENTITY_TAMEABLE_ANIMAL(-1, ENTITY_AGEABLE),
ENTITY_HUMAN(-1, ENTITY_LIVING),
// Objects
FISH_HOOK(-1, ENTITY),
ARMOR_STAND(30, ENTITY_LIVING),
ENDER_EYE(15, ENTITY),
ITEM(1, ENTITY),
// Vehicles
// Minecarts
MINECART_ABSTRACT(-1, ENTITY),
MINECART_COMMAND(40, MINECART_ABSTRACT),
BOAT(41, ENTITY),
MINECART_RIDEABLE(42, MINECART_ABSTRACT),
MINECART_CHEST(43, MINECART_ABSTRACT),
MINECART_FURNACE(44, MINECART_ABSTRACT),
MINECART_TNT(45, MINECART_ABSTRACT),
MINECART_HOPPER(46, MINECART_ABSTRACT),
MINECART_MOB_SPAWNER(47, MINECART_ABSTRACT),
CREEPER(50, ENTITY_INSENTIENT),
SKELETON(51, ENTITY_INSENTIENT),
SPIDER(52, ENTITY_INSENTIENT),
GIANT(53, ENTITY_INSENTIENT),
ZOMBIE(54, ENTITY_INSENTIENT),
SLIME(55, ENTITY_INSENTIENT),
GHAST(56, ENTITY_INSENTIENT),
PIG_ZOMBIE(57, ZOMBIE),
ENDERMAN(58, ENTITY_INSENTIENT),
CAVE_SPIDER(59, SPIDER),
SILVERFISH(60, ENTITY_INSENTIENT),
BLAZE(61, ENTITY_INSENTIENT),
MAGMA_CUBE(62, SLIME),
ENDER_DRAGON(63, ENTITY_INSENTIENT),
WITHER(64, ENTITY_INSENTIENT),
BAT(65, ENTITY_INSENTIENT),
WITCH(66, ENTITY_INSENTIENT),
ENDERMITE(67, ENTITY_INSENTIENT),
GUARDIAN(68, ENTITY_INSENTIENT),
IRON_GOLEM(99, ENTITY_INSENTIENT), // moved up to avoid illegal forward references
SHULKER(69, IRON_GOLEM),
PIG(90, ENTITY_AGEABLE),
SHEEP(91, ENTITY_AGEABLE),
COW(92, ENTITY_AGEABLE),
CHICKEN(93, ENTITY_AGEABLE),
SQUID(94, ENTITY_INSENTIENT),
WOLF(95, ENTITY_TAMEABLE_ANIMAL),
MUSHROOM_COW(96, COW),
SNOWMAN(97, IRON_GOLEM),
OCELOT(98, ENTITY_TAMEABLE_ANIMAL),
HORSE(100, ENTITY_AGEABLE),
RABBIT(101, ENTITY_AGEABLE),
POLAR_BEAR(102, ENTITY_AGEABLE),
MINECART_CONTAINER(-1, MINECART_ABSTRACT),
MINECART_CHEST(43, MINECART_CONTAINER),
MINECART_HOPPER(46, MINECART_CONTAINER),
MINECART_COMMAND_BLOCK(40, MINECART_ABSTRACT),
MINECART_TNT(45, MINECART_ABSTRACT),
MINECART_MOB_SPAWNER(47, MINECART_ABSTRACT),
MINECART_EMPTY(42, MINECART_ABSTRACT),
MINECART_FURNACE(44, MINECART_ABSTRACT),
// Hanging
ENTITY_HANGING(-1, ENTITY),
ITEM_FRAME(18, ENTITY_HANGING),
LEASH_KNOT(8, ENTITY_HANGING),
PAINTING(9, ENTITY_HANGING),
ENTITY_LIVING_BASE(-1, ENTITY),
ENTITY_LIVING(48, ENTITY_LIVING_BASE),
ENTITY_CREATURE(-1, ENTITY_LIVING),
ENTITY_AGEABLE(-1, ENTITY_CREATURE),
ENTITY_ANIMAL(-1, ENTITY_AGEABLE),
HORSE(100, ENTITY_ANIMAL),
COW(92, ENTITY_ANIMAL),
MOOSHROOM(96, COW),
CHICKEN(93, ENTITY_ANIMAL),
RABBIT(101, ENTITY_ANIMAL),
ENTITY_TAMEABLE(-1, ENTITY_ANIMAL),
WOLF(95, ENTITY_TAMEABLE),
OCELOT(98, ENTITY_TAMEABLE),
POLAR_BEAR(102, ENTITY_ANIMAL),
PIG(90, ENTITY_ANIMAL),
SHEEP(91, ENTITY_ANIMAL),
VILLAGER(120, ENTITY_AGEABLE),
ENDER_CRYSTAL(200, ENTITY),
SPLASH_POTION(-1, ENTITY),
LINGERING_POTION(-1, SPLASH_POTION),
AREA_EFFECT_CLOUD(-1, ENTITY),
EGG(-1, ENTITY),
FISHING_HOOK(-1, ENTITY),
LIGHTNING(-1, ENTITY),
WEATHER(-1, ENTITY),
ENTITY_MOB(49, ENTITY_CREATURE),
GUARDIAN(68, ENTITY_MOB),
ZOMBIE(54, ENTITY_MOB),
PIG_ZOMBIE(57, ZOMBIE),
ENDERMAN(58, ENTITY_MOB),
SPIDER(52, ENTITY_MOB),
CAVE_SPIDER(59, SPIDER),
GIANT_ZOMBIE(53, ENTITY_MOB),
ENDERMITE(67, ENTITY_MOB),
CREEPER(50, ENTITY_MOB),
SILVERFISH(60, ENTITY_MOB),
SKELETON(51, ENTITY_MOB),
WITCH(66, ENTITY_MOB),
BLAZE(61, ENTITY_MOB),
WITHER(64, ENTITY_MOB),
GOLEM(-1, ENTITY_CREATURE),
SNOWMAN(97, GOLEM),
IRON_GOLEM(99, GOLEM),
SHULKER(69, GOLEM),
ENDER_DRAGON(63, ENTITY_LIVING),
SLIIME(55, ENTITY_LIVING),
MAGMA_CUBE(62, SLIIME),
ENTITY_WATER_MOB(-1, ENTITY_LIVING),
SQUID(94, ENTITY_WATER_MOB),
ENTITY_AMBIENT_CREATURE(-1, ENTITY_LIVING),
BAT(65, ENTITY_AMBIENT_CREATURE),
ENTITY_FLYING(-1, ENTITY_LIVING),
GHAST(56, ENTITY_FLYING),
ARMOR_STAND(30, ENTITY_LIVING_BASE),
ENTITY_HUMAN(-1, ENTITY_LIVING_BASE),
PLAYER(-1, ENTITY_HUMAN),
COMPLEX_PART(-1, ENTITY);
FIREBALL(-1, ENTITY),
LARGE_FIREBALL(12, FIREBALL),
DRAGON_FIREBALL(26, FIREBALL),
SMALL_FIREBALL(13, FIREBALL),
WITHER_SKULL(19, FIREBALL),
ENTITY_THROWABLE(-1, ENTITY),
POTION(16, ENTITY_THROWABLE),
SNOWBALL(11, ENTITY_THROWABLE),
EXP_BOTTLE(17, ENTITY_THROWABLE),
ENDER_PEARL(14, ENTITY_THROWABLE),
EGG(7, ENTITY_THROWABLE),
ARROW(-1, ENTITY),
SPECTRAL_ARROW(24, ARROW),
TIPPED_ARROW(10, ARROW),
ENDER_CRYSTAL(200, ENTITY),
XP_ORB(2, ENTITY),
FIREWORK_ROCKET(22, ENTITY),
FALLING_BLOCK(21, ENTITY),
TNT_PRIMED(20, ENTITY),
SHULKER_BULLET(25, ENTITY),
AREA_EFFECT_CLOUD(3, ENTITY),
BOAT(41, ENTITY);
private static final Map<Integer, EntityType> TYPES = new HashMap<>();
@ -154,10 +188,12 @@ public class EntityTypes1_10 {
}
}
public static Optional<EntityType> findById(int id) {
if (id == -1) // Check if this is called
public static Optional<EntityType> getEntity(final int id) {
if (id == -1) {
return Optional.empty();
return Optional.ofNullable(TYPES.get(id));
} else {
return Optional.ofNullable(TYPES.get(id));
}
}
@Override
@ -182,40 +218,44 @@ public class EntityTypes1_10 {
}
public enum ObjectType implements com.viaversion.viaversion.api.minecraft.entities.ObjectType {
BOAT(1, EntityType.BOAT),
ITEM(2, EntityType.DROPPED_ITEM),
AREA_EFFECT_CLOUD(3, EntityType.AREA_EFFECT_CLOUD),
MINECART(10, EntityType.MINECART_RIDEABLE),
TNT_PRIMED(50, EntityType.PRIMED_TNT),
ENDER_CRYSTAL(51, EntityType.ENDER_CRYSTAL),
TIPPED_ARROW(60, EntityType.TIPPED_ARROW),
MINECART_RIDEABLE(10, 0, EntityType.MINECART_EMPTY),
MINECART_CHEST(10, 1, EntityType.MINECART_CHEST),
MINECRAFT_FURNACE(10, 2, EntityType.MINECART_FURNACE),
MINECART_TNT(10, 3, EntityType.MINECART_TNT),
MINECART_SPAWNER(10, 4, EntityType.MINECART_MOB_SPAWNER),
MINECART_HOPPER(10, 5, EntityType.MINECART_HOPPER),
MINECART_COMMAND_BLOCK(10, 6, EntityType.MINECART_COMMAND_BLOCK),
FISHING_HOOK(90, EntityType.FISH_HOOK), // TODO, use entity tracker for this one
ARROW(60, EntityType.ARROW),
SNOWBALL(61, EntityType.SNOWBALL),
EGG(62, EntityType.EGG),
FIREBALL(63, EntityType.FIREBALL),
SMALL_FIREBALL(64, EntityType.SMALL_FIREBALL),
ENDER_PEARL(65, EntityType.ENDER_PEARL),
WITHER_SKULL(66, EntityType.WITHER_SKULL),
SHULKER_BULLET(67, EntityType.SHULKER_BULLET),
FALLING_BLOCK(70, EntityType.FALLING_BLOCK),
ITEM_FRAME(71, EntityType.ITEM_FRAME),
ENDER_SIGNAL(72, EntityType.ENDER_SIGNAL),
POTION(73, EntityType.SPLASH_POTION),
THROWN_EXP_BOTTLE(75, EntityType.THROWN_EXP_BOTTLE),
FIREWORK(76, EntityType.FIREWORK),
LEASH(77, EntityType.LEASH_HITCH),
LEASH_KNOT(77, EntityType.LEASH_KNOT),
ENDER_PEARL(65, EntityType.ENDER_PEARL),
ENDER_EYE(72, EntityType.ENDER_EYE),
FIREWORK_ROCKET(76, EntityType.FIREWORK_ROCKET),
LARGE_FIREBALL(63, EntityType.LARGE_FIREBALL),
SMALL_FIREBALL(64, EntityType.SMALL_FIREBALL),
WITHER_SKULL(66, EntityType.WITHER_SKULL),
EGG(62, EntityType.EGG),
POTION(73, EntityType.POTION),
EXP_BOTTLE(75, EntityType.EXP_BOTTLE),
BOAT(1, EntityType.BOAT),
TNT_PRIMED(50, EntityType.TNT_PRIMED),
ARMOR_STAND(78, EntityType.ARMOR_STAND),
FISHIHNG_HOOK(90, EntityType.FISHING_HOOK),
SPECTRAL_ARROW(91, EntityType.SPECTRAL_ARROW),
DRAGON_FIREBALL(93, EntityType.DRAGON_FIREBALL);
ENDER_CRYSTAL(51, EntityType.ENDER_CRYSTAL),
ITEM(2, EntityType.ITEM),
FALLING_BLOCK(70, EntityType.FALLING_BLOCK);
private static final Map<Integer, ObjectType> TYPES = new HashMap<>();
private static final Map<Pair<Integer, Integer>, ObjectType> TYPES = new HashMap<>();
private final int id;
private int data;
private final EntityType type;
static {
for (ObjectType type : ObjectType.values()) {
TYPES.put(type.id, type);
TYPES.put(new Pair<>(type.id, type.data), type);
}
}
@ -224,6 +264,12 @@ public class EntityTypes1_10 {
this.type = type;
}
ObjectType(int id, int data, EntityType type) {
this.id = id;
this.data = data;
this.type = type;
}
@Override
public int getId() {
return id;
@ -234,18 +280,15 @@ public class EntityTypes1_10 {
return type;
}
public static Optional<ObjectType> findById(int id) {
if (id == -1)
public static Optional<ObjectType> getObjectEntity(final int id, @Nullable Integer data) {
if (id == -1) {
return Optional.empty();
return Optional.ofNullable(TYPES.get(id));
}
public static Optional<EntityType> getPCEntity(int id) {
Optional<ObjectType> output = findById(id);
if (!output.isPresent())
return Optional.empty();
return Optional.of(output.get().type);
} else {
if (data == null) {
data = 0;
}
return Optional.ofNullable(TYPES.get(new Pair<>(id, data)));
}
}
}
}

View File

@ -27,7 +27,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
// 1.11 Entity / Object ids
// TODO Check object types and fix
public class EntityTypes1_11 {
public static EntityType getTypeFromId(int typeID, boolean isObject) {

View File

@ -28,7 +28,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
// 1.12 Entity / Object taken from https://github.com/Matsv/ViaBackwards/blob/master/core/src/main/java/nl/matsv/viabackwards/api/entities/types/EntityType1_12.java
// TODO Check object types and fix
public class EntityTypes1_12 {
public static EntityType getTypeFromId(int typeID, boolean isObject) {

View File

@ -27,6 +27,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
// TODO Check object types and fix
public class EntityTypes1_13 {
public static EntityType getTypeFromId(int typeID, boolean isObject) {

View File

@ -28,7 +28,6 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
// 1.8 Entity / Object ids
public class EntityTypes1_8 {
public static EntityType getEntityType(final int id, @Nullable Integer data, boolean object) {
@ -134,7 +133,10 @@ public class EntityTypes1_8 {
ENTITY_FLYING(-1, ENTITY_LIVING),
GHAST(56, ENTITY_FLYING),
ARMOR_STAND(30, ENTITY_LIVING),
ARMOR_STAND(30, ENTITY_LIVING_BASE),
ENTITY_HUMAN(-1, ENTITY_LIVING_BASE),
PLAYER(-1, ENTITY_HUMAN),
FIREBALL(-1, ENTITY),
LARGE_FIREBALL(12, FIREBALL),

View File

@ -0,0 +1,293 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
* Copyright (C) 2016-2024 ViaVersion and contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package com.viaversion.viaversion.api.minecraft.entities;
import com.viaversion.viaversion.util.Pair;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import org.checkerframework.checker.nullness.qual.Nullable;
// TODO Check object types
public class EntityTypes1_9 {
public static EntityType getEntityType(final int id, @Nullable Integer data, boolean object) {
if (object) {
return ObjectType.getObjectEntity(id, data).map(ObjectType::getType).orElse(null);
} else {
return EntityType.getEntity(id).orElse(null);
}
}
public enum EntityType implements com.viaversion.viaversion.api.minecraft.entities.EntityType {
ENTITY(-1),
// Objects
FISH_HOOK(-1, ENTITY),
ENDER_EYE(15, ENTITY),
ITEM(1, ENTITY),
// Minecarts
MINECART_ABSTRACT(-1, ENTITY),
MINECART_CONTAINER(-1, MINECART_ABSTRACT),
MINECART_CHEST(43, MINECART_CONTAINER),
MINECART_HOPPER(46, MINECART_CONTAINER),
MINECART_COMMAND_BLOCK(40, MINECART_ABSTRACT),
MINECART_TNT(45, MINECART_ABSTRACT),
MINECART_MOB_SPAWNER(47, MINECART_ABSTRACT),
MINECART_EMPTY(42, MINECART_ABSTRACT),
MINECART_FURNACE(44, MINECART_ABSTRACT),
// Hanging
ENTITY_HANGING(-1, ENTITY),
ITEM_FRAME(18, ENTITY_HANGING),
LEASH_KNOT(8, ENTITY_HANGING),
PAINTING(9, ENTITY_HANGING),
ENTITY_LIVING_BASE(-1, ENTITY),
ENTITY_LIVING(48, ENTITY_LIVING_BASE),
ENTITY_CREATURE(-1, ENTITY_LIVING),
ENTITY_AGEABLE(-1, ENTITY_CREATURE),
ENTITY_ANIMAL(-1, ENTITY_AGEABLE),
HORSE(100, ENTITY_ANIMAL),
COW(92, ENTITY_ANIMAL),
MOOSHROOM(96, COW),
CHICKEN(93, ENTITY_ANIMAL),
RABBIT(101, ENTITY_ANIMAL),
ENTITY_TAMEABLE(-1, ENTITY_ANIMAL),
WOLF(95, ENTITY_TAMEABLE),
OCELOT(98, ENTITY_TAMEABLE),
PIG(90, ENTITY_ANIMAL),
SHEEP(91, ENTITY_ANIMAL),
VILLAGER(120, ENTITY_AGEABLE),
ENTITY_MOB(49, ENTITY_CREATURE),
GUARDIAN(68, ENTITY_MOB),
ZOMBIE(54, ENTITY_MOB),
PIG_ZOMBIE(57, ZOMBIE),
ENDERMAN(58, ENTITY_MOB),
SPIDER(52, ENTITY_MOB),
CAVE_SPIDER(59, SPIDER),
GIANT_ZOMBIE(53, ENTITY_MOB),
ENDERMITE(67, ENTITY_MOB),
CREEPER(50, ENTITY_MOB),
SILVERFISH(60, ENTITY_MOB),
SKELETON(51, ENTITY_MOB),
WITCH(66, ENTITY_MOB),
BLAZE(61, ENTITY_MOB),
WITHER(64, ENTITY_MOB),
GOLEM(-1, ENTITY_CREATURE),
SNOWMAN(97, GOLEM),
IRON_GOLEM(99, GOLEM),
SHULKER(69, GOLEM),
ENDER_DRAGON(63, ENTITY_LIVING),
SLIIME(55, ENTITY_LIVING),
MAGMA_CUBE(62, SLIIME),
ENTITY_WATER_MOB(-1, ENTITY_LIVING),
SQUID(94, ENTITY_WATER_MOB),
ENTITY_AMBIENT_CREATURE(-1, ENTITY_LIVING),
BAT(65, ENTITY_AMBIENT_CREATURE),
ENTITY_FLYING(-1, ENTITY_LIVING),
GHAST(56, ENTITY_FLYING),
ARMOR_STAND(30, ENTITY_LIVING_BASE),
ENTITY_HUMAN(-1, ENTITY_LIVING_BASE),
PLAYER(-1, ENTITY_HUMAN),
FIREBALL(-1, ENTITY),
LARGE_FIREBALL(12, FIREBALL),
DRAGON_FIREBALL(26, FIREBALL),
SMALL_FIREBALL(13, FIREBALL),
WITHER_SKULL(19, FIREBALL),
ENTITY_THROWABLE(-1, ENTITY),
POTION(16, ENTITY_THROWABLE),
SNOWBALL(11, ENTITY_THROWABLE),
EXP_BOTTLE(17, ENTITY_THROWABLE),
ENDER_PEARL(14, ENTITY_THROWABLE),
EGG(7, ENTITY_THROWABLE),
ARROW(-1, ENTITY),
SPECTRAL_ARROW(24, ARROW),
TIPPED_ARROW(10, ARROW),
ENDER_CRYSTAL(200, ENTITY),
XP_ORB(2, ENTITY),
FIREWORK_ROCKET(22, ENTITY),
FALLING_BLOCK(21, ENTITY),
TNT_PRIMED(20, ENTITY),
SHULKER_BULLET(25, ENTITY),
AREA_EFFECT_CLOUD(3, ENTITY),
BOAT(41, ENTITY);
private static final Map<Integer, EntityType> TYPES = new HashMap<>();
private final int id;
private final EntityType parent;
EntityType(int id) {
this.id = id;
this.parent = null;
}
EntityType(int id, EntityType parent) {
this.id = id;
this.parent = parent;
}
static {
for (EntityType type : EntityType.values()) {
TYPES.put(type.id, type);
}
}
public static Optional<EntityType> getEntity(final int id) {
if (id == -1) {
return Optional.empty();
} else {
return Optional.ofNullable(TYPES.get(id));
}
}
@Override
public int getId() {
return id;
}
@Override
public EntityType getParent() {
return parent;
}
@Override
public String identifier() {
throw new UnsupportedOperationException();
}
@Override
public boolean isAbstractType() {
return id != -1;
}
}
public enum ObjectType implements com.viaversion.viaversion.api.minecraft.entities.ObjectType {
MINECART_RIDEABLE(10, 0, EntityType.MINECART_EMPTY),
MINECART_CHEST(10, 1, EntityType.MINECART_CHEST),
MINECRAFT_FURNACE(10, 2, EntityType.MINECART_FURNACE),
MINECART_TNT(10, 3, EntityType.MINECART_TNT),
MINECART_SPAWNER(10, 4, EntityType.MINECART_MOB_SPAWNER),
MINECART_HOPPER(10, 5, EntityType.MINECART_HOPPER),
MINECART_COMMAND_BLOCK(10, 6, EntityType.MINECART_COMMAND_BLOCK),
FISHING_HOOK(90, EntityType.FISH_HOOK), // TODO, use entity tracker for this one
ARROW(60, EntityType.ARROW),
SNOWBALL(61, EntityType.SNOWBALL),
ITEM_FRAME(71, EntityType.ITEM_FRAME),
LEASH_KNOT(77, EntityType.LEASH_KNOT),
ENDER_PEARL(65, EntityType.ENDER_PEARL),
ENDER_EYE(72, EntityType.ENDER_EYE),
FIREWORK_ROCKET(76, EntityType.FIREWORK_ROCKET),
LARGE_FIREBALL(63, EntityType.LARGE_FIREBALL),
SMALL_FIREBALL(64, EntityType.SMALL_FIREBALL),
WITHER_SKULL(66, EntityType.WITHER_SKULL),
EGG(62, EntityType.EGG),
POTION(73, EntityType.POTION),
EXP_BOTTLE(75, EntityType.EXP_BOTTLE),
BOAT(1, EntityType.BOAT),
TNT_PRIMED(50, EntityType.TNT_PRIMED),
ARMOR_STAND(78, EntityType.ARMOR_STAND),
ENDER_CRYSTAL(51, EntityType.ENDER_CRYSTAL),
ITEM(2, EntityType.ITEM),
FALLING_BLOCK(70, EntityType.FALLING_BLOCK);
private static final Map<Pair<Integer, Integer>, ObjectType> TYPES = new HashMap<>();
private final int id;
private int data;
private final EntityType type;
static {
for (ObjectType type : ObjectType.values()) {
TYPES.put(new Pair<>(type.id, type.data), type);
}
}
ObjectType(int id, EntityType type) {
this.id = id;
this.type = type;
}
ObjectType(int id, int data, EntityType type) {
this.id = id;
this.data = data;
this.type = type;
}
@Override
public int getId() {
return id;
}
@Override
public EntityType getType() {
return type;
}
public static Optional<ObjectType> getObjectEntity(final int id, @Nullable Integer data) {
if (id == -1) {
return Optional.empty();
} else {
if (data == null) {
data = 0;
}
return Optional.ofNullable(TYPES.get(new Pair<>(id, data)));
}
}
}
}