Continue work on new tag system, closer to testing now

This commit is contained in:
Eclipse 2024-07-10 08:45:28 +00:00
parent bad2d03d3d
commit 5ec330d0b1
No known key found for this signature in database
GPG key ID: 95E6998F82EC938A
34 changed files with 565 additions and 544 deletions

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -34,14 +35,11 @@ import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.entity.type.living.AgeableEntity;
import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public abstract class AnimalEntity extends AgeableEntity {
public AnimalEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
@ -49,7 +47,7 @@ public abstract class AnimalEntity extends AgeableEntity {
}
protected final boolean canEat(GeyserItemStack itemStack) {
VanillaTag tag = getFoodTag();
Tag tag = getFoodTag();
if (tag == null) {
return false;
}
@ -59,7 +57,7 @@ public abstract class AnimalEntity extends AgeableEntity {
/**
* @return the tag associated with this animal for eating food. Null for nothing or different behavior.
*/
protected abstract @Nullable VanillaTag getFoodTag();
protected abstract @Nullable Tag getFoodTag();
@NonNull
@Override

View file

@ -25,18 +25,17 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.ArmadilloState;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
public class ArmadilloEntity extends AnimalEntity {
private ArmadilloState armadilloState = ArmadilloState.IDLE;
@ -76,7 +75,7 @@ public class ArmadilloEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.ARMADILLO_FOOD;
}
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -34,15 +35,13 @@ import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.EntityUtils;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class AxolotlEntity extends AnimalEntity {
public AxolotlEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
@ -63,7 +62,7 @@ public class AxolotlEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.AXOLOTL_FOOD;
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
@ -34,12 +35,10 @@ import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import java.util.UUID;
public class BeeEntity extends AnimalEntity {
public BeeEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
@ -70,7 +69,7 @@ public class BeeEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.BEE_FOOD;
}
}

View file

@ -25,14 +25,13 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import java.util.UUID;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
public class ChickenEntity extends AnimalEntity {
@ -42,7 +41,7 @@ public class ChickenEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.CHICKEN_FOOD;
}
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -35,13 +36,11 @@ import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.item.Items;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class CowEntity extends AnimalEntity {
public CowEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
@ -70,7 +69,7 @@ public class CowEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.COW_FOOD;
}
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
@ -32,12 +33,10 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import java.util.UUID;
public class FoxEntity extends AnimalEntity {
public FoxEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
@ -58,7 +57,7 @@ public class FoxEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.FOX_FOOD;
}
}

View file

@ -25,6 +25,8 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.OptionalInt;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
@ -33,14 +35,11 @@ import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.entity.type.Entity;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata;
import java.util.OptionalInt;
import java.util.UUID;
public class FrogEntity extends AnimalEntity {
public FrogEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
@ -78,7 +77,7 @@ public class FrogEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.FROG_FOOD;
}
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -36,14 +37,12 @@ import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.item.Items;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class GoatEntity extends AnimalEntity {
private static final float LONG_JUMPING_HEIGHT = 1.3f * 0.7f;
private static final float LONG_JUMPING_WIDTH = 0.9f * 0.7f;
@ -100,7 +99,7 @@ public class GoatEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.GOAT_FOOD;
}
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
@ -32,11 +33,9 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import java.util.UUID;
public class HoglinEntity extends AnimalEntity {
private boolean isImmuneToZombification;
@ -59,7 +58,7 @@ public class HoglinEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.HOGLIN_FOOD;
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -33,13 +34,11 @@ import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class OcelotEntity extends AnimalEntity {
public OcelotEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
@ -48,7 +47,7 @@ public class OcelotEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.OCELOT_FOOD;
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -36,15 +37,13 @@ import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class PandaEntity extends AnimalEntity {
private Gene mainGene = Gene.NORMAL;
private Gene hiddenGene = Gene.NORMAL;
@ -91,7 +90,7 @@ public class PandaEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.PANDA_FOOD;
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -33,14 +34,12 @@ import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.EntityUtils;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class PigEntity extends AnimalEntity {
public PigEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
@ -49,7 +48,7 @@ public class PigEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.PIG_FOOD;
}

View file

@ -25,14 +25,12 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import java.util.UUID;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
public class PolarBearEntity extends AnimalEntity {
@ -42,7 +40,7 @@ public class PolarBearEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return null;
}
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
@ -32,11 +33,9 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import java.util.UUID;
public class RabbitEntity extends AnimalEntity {
public RabbitEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
@ -69,7 +68,7 @@ public class RabbitEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.RABBIT_FOOD;
}
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -36,14 +37,12 @@ import org.geysermc.geyser.item.Items;
import org.geysermc.geyser.item.type.DyeItem;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class SheepEntity extends AnimalEntity {
private int color;
@ -60,7 +59,7 @@ public class SheepEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.SHEEP_FOOD;
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.LevelEvent;
@ -37,13 +38,11 @@ import org.geysermc.geyser.entity.EntityDefinitions;
import org.geysermc.geyser.entity.type.Tickable;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.SnifferState;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata;
import java.util.UUID;
public class SnifferEntity extends AnimalEntity implements Tickable {
private static final float DIGGING_HEIGHT = EntityDefinitions.SNIFFER.height() - 0.4f;
private static final int DIG_END = 120;
@ -74,7 +73,7 @@ public class SnifferEntity extends AnimalEntity implements Tickable {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.SNIFFER_FOOD;
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -34,15 +35,13 @@ import org.geysermc.geyser.entity.type.Entity;
import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.EntityUtils;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class StriderEntity extends AnimalEntity {
private boolean isCold = false;
@ -96,7 +95,7 @@ public class StriderEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.STRIDER_FOOD;
}

View file

@ -25,17 +25,16 @@
package org.geysermc.geyser.entity.type.living.animal;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import java.util.UUID;
public class TurtleEntity extends AnimalEntity {
public TurtleEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
@ -52,7 +51,7 @@ public class TurtleEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.TURTLE_FOOD;
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal.horse;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -41,14 +42,12 @@ import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.item.Items;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class AbstractHorseEntity extends AnimalEntity {
public AbstractHorseEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
@ -120,7 +119,7 @@ public class AbstractHorseEntity extends AnimalEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.HORSE_FOOD;
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal.horse;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
@ -35,13 +36,11 @@ import org.cloudburstmc.protocol.bedrock.packet.EntityEventPacket;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import java.util.UUID;
public class CamelEntity extends AbstractHorseEntity {
public static final float SITTING_HEIGHT_DIFFERENCE = 1.43F;
@ -91,7 +90,7 @@ public class CamelEntity extends AbstractHorseEntity {
}
@Override
protected @Nullable VanillaTag getFoodTag() {
protected @Nullable Tag getFoodTag() {
return ItemTag.CAMEL_FOOD;
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal.horse;
import java.util.UUID;
import lombok.Getter;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -32,12 +33,10 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.MathUtils;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import java.util.UUID;
public class LlamaEntity extends ChestedHorseEntity {
/**
* Used to calculate inventory size
@ -57,7 +56,7 @@ public class LlamaEntity extends ChestedHorseEntity {
}
@Override
protected @Nullable VanillaTag getFoodTag() {
protected @Nullable Tag getFoodTag() {
return ItemTag.LLAMA_FOOD;
}
}

View file

@ -25,6 +25,7 @@
package org.geysermc.geyser.entity.type.living.animal.tameable;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -34,7 +35,7 @@ import org.geysermc.geyser.entity.EntityDefinition;
import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
@ -42,8 +43,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEn
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.UUID;
public class CatEntity extends TameableEntity {
private byte collarColor = 14; // Red - default
@ -110,7 +109,7 @@ public class CatEntity extends TameableEntity {
}
@Override
protected @Nullable VanillaTag getFoodTag() {
protected @Nullable Tag getFoodTag() {
return ItemTag.CAT_FOOD;
}

View file

@ -25,6 +25,8 @@
package org.geysermc.geyser.entity.type.living.animal.tameable;
import java.util.Set;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -35,14 +37,11 @@ import org.geysermc.geyser.item.Items;
import org.geysermc.geyser.item.type.Item;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import java.util.Set;
import java.util.UUID;
public class ParrotEntity extends TameableEntity {
// Note: is the same as chicken. Reuse?
private static final Set<Item> TAMING_FOOD = Set.of(Items.WHEAT_SEEDS, Items.MELON_SEEDS, Items.PUMPKIN_SEEDS, Items.BEETROOT_SEEDS);
@ -53,7 +52,7 @@ public class ParrotEntity extends TameableEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return null;
}

View file

@ -25,6 +25,9 @@
package org.geysermc.geyser.entity.type.living.animal.tameable;
import java.util.Collections;
import java.util.Locale;
import java.util.UUID;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.math.vector.Vector3f;
@ -38,7 +41,7 @@ import org.geysermc.geyser.item.enchantment.EnchantmentComponent;
import org.geysermc.geyser.item.type.DyeItem;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.geyser.util.ItemUtils;
@ -51,10 +54,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
import java.util.Collections;
import java.util.Locale;
import java.util.UUID;
public class WolfEntity extends TameableEntity {
private byte collarColor = 14; // Red - default
@ -117,7 +116,7 @@ public class WolfEntity extends TameableEntity {
@Override
@Nullable
protected VanillaTag getFoodTag() {
protected Tag getFoodTag() {
return ItemTag.WOLF_FOOD;
}

View file

@ -42,8 +42,8 @@ import org.geysermc.geyser.inventory.item.BedrockEnchantment;
import org.geysermc.geyser.item.enchantment.Enchantment;
import org.geysermc.geyser.item.Items;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.EnchantmentTag;
import org.geysermc.geyser.session.cache.tags.ItemTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.session.cache.tags.TagRegistry;
import org.geysermc.geyser.translator.inventory.InventoryTranslator;
import org.geysermc.geyser.translator.text.MessageTranslator;
import org.geysermc.geyser.util.ItemUtils;
@ -315,11 +315,11 @@ public class AnvilInventoryUpdater extends InventoryUpdater {
Enchantment enchantment = entry.getKey();
HolderSet supportedItems = enchantment.supportedItems();
int[] supportedItemIds = supportedItems.resolve(tagId -> session.getTagCache().get(ItemTag.ALL_ITEM_TAGS.get(tagId)));
int[] supportedItemIds = supportedItems.resolve(tagId -> session.getTagCache().get(Tag.createTag(TagRegistry.ITEM, tagId)));
boolean canApply = isEnchantedBook(input) || IntStream.of(supportedItemIds).anyMatch(id -> id == input.getJavaId());
HolderSet exclusiveSet = enchantment.exclusiveSet();
int[] incompatibleEnchantments = exclusiveSet.resolve(tagId -> session.getTagCache().get(EnchantmentTag.ALL_ENCHANTMENT_TAGS.get(tagId)));
int[] incompatibleEnchantments = exclusiveSet.resolve(tagId -> session.getTagCache().get(Tag.createTag(TagRegistry.ENCHANTMENT, tagId)));
for (int i : incompatibleEnchantments) {
Enchantment incompatible = session.getRegistryCache().enchantments().byId(i);
if (combinedEnchantments.containsKey(incompatible)) {

View file

@ -25,43 +25,39 @@
package org.geysermc.geyser.session.cache;
import static org.geysermc.geyser.session.cache.tags.BlockTag.ALL_BLOCK_TAGS;
import static org.geysermc.geyser.session.cache.tags.EnchantmentTag.ALL_ENCHANTMENT_TAGS;
import static org.geysermc.geyser.session.cache.tags.ItemTag.ALL_ITEM_TAGS;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.ParametersAreNonnullByDefault;
import net.kyori.adventure.key.Key;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.geysermc.geyser.GeyserImpl;
import org.geysermc.geyser.GeyserLogger;
import org.geysermc.geyser.inventory.GeyserItemStack;
import org.geysermc.geyser.item.type.Item;
import org.geysermc.geyser.level.block.type.Block;
import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.session.cache.tags.NonVanillaTag;
import org.geysermc.geyser.session.cache.tags.Tag;
import org.geysermc.geyser.session.cache.tags.TagRegistry;
import org.geysermc.geyser.session.cache.tags.VanillaTag;
import org.geysermc.geyser.util.MinecraftKey;
import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundUpdateTagsPacket;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Map;
import static org.geysermc.geyser.session.cache.tags.BlockTag.ALL_BLOCK_TAGS;
import static org.geysermc.geyser.session.cache.tags.EnchantmentTag.ALL_ENCHANTMENT_TAGS;
import static org.geysermc.geyser.session.cache.tags.ItemTag.ALL_ITEM_TAGS;
/**
* Manages information sent from the {@link ClientboundUpdateTagsPacket}. If that packet is not sent, all lists here
* will remain empty, matching Java Edition behavior.
*/
@ParametersAreNonnullByDefault
public final class TagCache {
private final Object2IntMap<Key> registryIndexMap = new Object2IntOpenHashMap<>();
private List<Object2IntMap<Key>> tagIndexMaps = new ArrayList<>();
private int[][][] tags = new int[0][][];
private int[][][] tags = new int[TagRegistry.values().length][][];
public void loadPacket(GeyserSession session, ClientboundUpdateTagsPacket packet) {
this.registryIndexMap.clear();
Map<Key, Map<Key, int[]>> allTags = packet.getTags();
GeyserLogger logger = session.getGeyser().getLogger();
@ -69,13 +65,16 @@ public final class TagCache {
this.tags = new int[allTags.size()][][];
int i = 0;
for (Key registry : allTags.keySet()) {
Map<Key, int[]> registryTags = allTags.get(registry);
Map<Key, VanillaTag> vanillaTags = null;
for (Key registryKey : allTags.keySet()) {
TagRegistry registry = TagRegistry.valueOf(registryKey);
if (registry == null) {
GeyserImpl.getInstance().getLogger().debug("Not loading tags for registry " + registryKey + " (registry is not defined in TagRegistry enum)");
continue;
}
if (registry.equals(MinecraftKey.key("block"))) {
vanillaTags = ALL_BLOCK_TAGS;
Map<Key, int[]> registryTags = allTags.get(registryKey);
if (registry == TagRegistry.BLOCK) {
// Hack btw
int[] convertableToMud = registryTags.get(MinecraftKey.key("convertable_to_mud"));
boolean emulatePost1_18Logic = convertableToMud != null && convertableToMud.length != 0;
@ -83,42 +82,37 @@ public final class TagCache {
if (logger.isDebug()) {
logger.debug("Emulating post 1.18 block predication logic for " + session.bedrockUsername() + "? " + emulatePost1_18Logic);
}
} else if (registry.equals(MinecraftKey.key("item"))) {
vanillaTags = ALL_ITEM_TAGS;
} else if (registry == TagRegistry.ITEM) {
// Hack btw
boolean emulatePost1_13Logic = registryTags.get(MinecraftKey.key("signs")).length > 1;
session.setEmulatePost1_13Logic(emulatePost1_13Logic);
if (logger.isDebug()) {
logger.debug("Emulating post 1.13 villager logic for " + session.bedrockUsername() + "? " + emulatePost1_13Logic);
}
} else if (registry.equals(MinecraftKey.key("enchantment"))) {
vanillaTags = ALL_ENCHANTMENT_TAGS;
}
int[][] registryTagsArray = new int[0][];
this.tagIndexMaps.set(i, loadTags(registryTags, registryTagsArray, vanillaTags));
this.tagIndexMaps.set(i, loadTags(registryTags, registryTagsArray, registry));
this.tags[i] = registryTagsArray;
this.registryIndexMap.put(registry, i);
i++;
}
}
private Object2IntMap<Key> loadTags(Map<Key, int[]> packetTags, int[][] tags, @Nullable Map<Key, VanillaTag> vanillaTags) {
List<Key> vanillaTagsList = vanillaTags == null ? List.of() : List.copyOf(vanillaTags.keySet());
private Object2IntMap<Key> loadTags(Map<Key, int[]> packetTags, int[][] tags, TagRegistry registry) {
List<Key> vanillaTagKeys = List.copyOf(registry.getVanillaTags().keySet());
int nonVanillaTagAmount = (int) packetTags.keySet().stream().filter(tag -> !vanillaTagKeys.contains(tag)).count();
// Using Math.max here because we might have more vanilla tags defined than the server sent us
List<int[]> tagsBuilder = new ArrayList<>(Math.max(packetTags.size(), vanillaTagsList.size()));
List<int[]> tagsBuilder = new ArrayList<>(vanillaTagKeys.size() + nonVanillaTagAmount);
Object2IntMap<Key> tagIndexMap = new Object2IntOpenHashMap<>();
int tagIndex = vanillaTagsList.size();
int nonVanillaTagIndex = vanillaTagKeys.size();
for (Map.Entry<Key, int[]> tag : packetTags.entrySet()) {
int id;
if (vanillaTagsList.contains(tag.getKey())) {
id = vanillaTagsList.indexOf(tag.getKey());
if (vanillaTagKeys.contains(tag.getKey())) {
id = vanillaTagKeys.indexOf(tag.getKey());
} else {
id = tagIndex;
tagIndex++;
id = nonVanillaTagIndex;
nonVanillaTagIndex++;
}
tagsBuilder.set(id, tag.getValue());
tagIndexMap.put(tag.getKey(), id);
@ -132,6 +126,7 @@ public final class TagCache {
* @return true if the block tag is present and contains this block mapping's Java ID.
*/
public boolean is(Tag tag, Block block) {
assert tag.registry() == TagRegistry.BLOCK;
return contains(get(tag), block.javaId());
}
@ -139,6 +134,7 @@ public final class TagCache {
* @return true if the item tag is present and contains this item stack's Java ID.
*/
public boolean is(Tag tag, GeyserItemStack itemStack) {
assert tag.registry() == TagRegistry.ITEM;
return is(tag, itemStack.asItem());
}
@ -146,20 +142,17 @@ public final class TagCache {
* @return true if the item tag is present and contains this item's Java ID.
*/
public boolean is(Tag tag, Item item) {
assert tag.registry() == TagRegistry.ITEM;
return contains(get(tag), item.javaId());
}
public int[] get(Tag tag) {
if (!this.registryIndexMap.containsKey(tag.registry())) {
return new int[0];
}
if (tag instanceof VanillaTag vanillaTag) {
return this.tags[this.registryIndexMap.getInt(tag.registry())][vanillaTag.ordinal()];
return this.tags[tag.registry().ordinal()][vanillaTag.ordinal()];
}
int registryIndex = this.registryIndexMap.getInt(tag.registry());
Object2IntMap<Key> tagIndexMap = tagIndexMaps.get(registryIndex);
int registryIndex = tag.registry().ordinal();
Object2IntMap<Key> tagIndexMap = this.tagIndexMaps.get(registryIndex);
if (!tagIndexMap.containsKey(tag.tag())) {
return new int[0];
}

View file

@ -25,208 +25,206 @@
package org.geysermc.geyser.session.cache.tags;
import java.util.HashMap;
import java.util.Map;
import net.kyori.adventure.key.Key;
import org.geysermc.geyser.util.MinecraftKey;
import java.util.HashMap;
import java.util.Map;
@SuppressWarnings("unused")
// TODO rename to vanillablocktags
public final class BlockTag {
public static final Map<Key, VanillaTag> ALL_BLOCK_TAGS = new HashMap<>();
public static final Map<Key, Tag> ALL_BLOCK_TAGS = new HashMap<>();
public static final VanillaTag WOOL = register("wool");
public static final VanillaTag PLANKS = register("planks");
public static final VanillaTag STONE_BRICKS = register("stone_bricks");
public static final VanillaTag WOODEN_BUTTONS = register("wooden_buttons");
public static final VanillaTag STONE_BUTTONS = register("stone_buttons");
public static final VanillaTag BUTTONS = register("buttons");
public static final VanillaTag WOOL_CARPETS = register("wool_carpets");
public static final VanillaTag WOODEN_DOORS = register("wooden_doors");
public static final VanillaTag MOB_INTERACTABLE_DOORS = register("mob_interactable_doors");
public static final VanillaTag WOODEN_STAIRS = register("wooden_stairs");
public static final VanillaTag WOODEN_SLABS = register("wooden_slabs");
public static final VanillaTag WOODEN_FENCES = register("wooden_fences");
public static final VanillaTag PRESSURE_PLATES = register("pressure_plates");
public static final VanillaTag WOODEN_PRESSURE_PLATES = register("wooden_pressure_plates");
public static final VanillaTag STONE_PRESSURE_PLATES = register("stone_pressure_plates");
public static final VanillaTag WOODEN_TRAPDOORS = register("wooden_trapdoors");
public static final VanillaTag DOORS = register("doors");
public static final VanillaTag SAPLINGS = register("saplings");
public static final VanillaTag LOGS_THAT_BURN = register("logs_that_burn");
public static final VanillaTag OVERWORLD_NATURAL_LOGS = register("overworld_natural_logs");
public static final VanillaTag LOGS = register("logs");
public static final VanillaTag DARK_OAK_LOGS = register("dark_oak_logs");
public static final VanillaTag OAK_LOGS = register("oak_logs");
public static final VanillaTag BIRCH_LOGS = register("birch_logs");
public static final VanillaTag ACACIA_LOGS = register("acacia_logs");
public static final VanillaTag CHERRY_LOGS = register("cherry_logs");
public static final VanillaTag JUNGLE_LOGS = register("jungle_logs");
public static final VanillaTag SPRUCE_LOGS = register("spruce_logs");
public static final VanillaTag MANGROVE_LOGS = register("mangrove_logs");
public static final VanillaTag CRIMSON_STEMS = register("crimson_stems");
public static final VanillaTag WARPED_STEMS = register("warped_stems");
public static final VanillaTag BAMBOO_BLOCKS = register("bamboo_blocks");
public static final VanillaTag WART_BLOCKS = register("wart_blocks");
public static final VanillaTag BANNERS = register("banners");
public static final VanillaTag SAND = register("sand");
public static final VanillaTag SMELTS_TO_GLASS = register("smelts_to_glass");
public static final VanillaTag STAIRS = register("stairs");
public static final VanillaTag SLABS = register("slabs");
public static final VanillaTag WALLS = register("walls");
public static final VanillaTag ANVIL = register("anvil");
public static final VanillaTag RAILS = register("rails");
public static final VanillaTag LEAVES = register("leaves");
public static final VanillaTag TRAPDOORS = register("trapdoors");
public static final VanillaTag SMALL_FLOWERS = register("small_flowers");
public static final VanillaTag BEDS = register("beds");
public static final VanillaTag FENCES = register("fences");
public static final VanillaTag TALL_FLOWERS = register("tall_flowers");
public static final VanillaTag FLOWERS = register("flowers");
public static final VanillaTag PIGLIN_REPELLENTS = register("piglin_repellents");
public static final VanillaTag GOLD_ORES = register("gold_ores");
public static final VanillaTag IRON_ORES = register("iron_ores");
public static final VanillaTag DIAMOND_ORES = register("diamond_ores");
public static final VanillaTag REDSTONE_ORES = register("redstone_ores");
public static final VanillaTag LAPIS_ORES = register("lapis_ores");
public static final VanillaTag COAL_ORES = register("coal_ores");
public static final VanillaTag EMERALD_ORES = register("emerald_ores");
public static final VanillaTag COPPER_ORES = register("copper_ores");
public static final VanillaTag CANDLES = register("candles");
public static final VanillaTag DIRT = register("dirt");
public static final VanillaTag TERRACOTTA = register("terracotta");
public static final VanillaTag BADLANDS_TERRACOTTA = register("badlands_terracotta");
public static final VanillaTag CONCRETE_POWDER = register("concrete_powder");
public static final VanillaTag COMPLETES_FIND_TREE_TUTORIAL = register("completes_find_tree_tutorial");
public static final VanillaTag FLOWER_POTS = register("flower_pots");
public static final VanillaTag ENDERMAN_HOLDABLE = register("enderman_holdable");
public static final VanillaTag ICE = register("ice");
public static final VanillaTag VALID_SPAWN = register("valid_spawn");
public static final VanillaTag IMPERMEABLE = register("impermeable");
public static final VanillaTag UNDERWATER_BONEMEALS = register("underwater_bonemeals");
public static final VanillaTag CORAL_BLOCKS = register("coral_blocks");
public static final VanillaTag WALL_CORALS = register("wall_corals");
public static final VanillaTag CORAL_PLANTS = register("coral_plants");
public static final VanillaTag CORALS = register("corals");
public static final VanillaTag BAMBOO_PLANTABLE_ON = register("bamboo_plantable_on");
public static final VanillaTag STANDING_SIGNS = register("standing_signs");
public static final VanillaTag WALL_SIGNS = register("wall_signs");
public static final VanillaTag SIGNS = register("signs");
public static final VanillaTag CEILING_HANGING_SIGNS = register("ceiling_hanging_signs");
public static final VanillaTag WALL_HANGING_SIGNS = register("wall_hanging_signs");
public static final VanillaTag ALL_HANGING_SIGNS = register("all_hanging_signs");
public static final VanillaTag ALL_SIGNS = register("all_signs");
public static final VanillaTag DRAGON_IMMUNE = register("dragon_immune");
public static final VanillaTag DRAGON_TRANSPARENT = register("dragon_transparent");
public static final VanillaTag WITHER_IMMUNE = register("wither_immune");
public static final VanillaTag WITHER_SUMMON_BASE_BLOCKS = register("wither_summon_base_blocks");
public static final VanillaTag BEEHIVES = register("beehives");
public static final VanillaTag CROPS = register("crops");
public static final VanillaTag BEE_GROWABLES = register("bee_growables");
public static final VanillaTag PORTALS = register("portals");
public static final VanillaTag FIRE = register("fire");
public static final VanillaTag NYLIUM = register("nylium");
public static final VanillaTag BEACON_BASE_BLOCKS = register("beacon_base_blocks");
public static final VanillaTag SOUL_SPEED_BLOCKS = register("soul_speed_blocks");
public static final VanillaTag WALL_POST_OVERRIDE = register("wall_post_override");
public static final VanillaTag CLIMBABLE = register("climbable");
public static final VanillaTag FALL_DAMAGE_RESETTING = register("fall_damage_resetting");
public static final VanillaTag SHULKER_BOXES = register("shulker_boxes");
public static final VanillaTag HOGLIN_REPELLENTS = register("hoglin_repellents");
public static final VanillaTag SOUL_FIRE_BASE_BLOCKS = register("soul_fire_base_blocks");
public static final VanillaTag STRIDER_WARM_BLOCKS = register("strider_warm_blocks");
public static final VanillaTag CAMPFIRES = register("campfires");
public static final VanillaTag GUARDED_BY_PIGLINS = register("guarded_by_piglins");
public static final VanillaTag PREVENT_MOB_SPAWNING_INSIDE = register("prevent_mob_spawning_inside");
public static final VanillaTag FENCE_GATES = register("fence_gates");
public static final VanillaTag UNSTABLE_BOTTOM_CENTER = register("unstable_bottom_center");
public static final VanillaTag MUSHROOM_GROW_BLOCK = register("mushroom_grow_block");
public static final VanillaTag INFINIBURN_OVERWORLD = register("infiniburn_overworld");
public static final VanillaTag INFINIBURN_NETHER = register("infiniburn_nether");
public static final VanillaTag INFINIBURN_END = register("infiniburn_end");
public static final VanillaTag BASE_STONE_OVERWORLD = register("base_stone_overworld");
public static final VanillaTag STONE_ORE_REPLACEABLES = register("stone_ore_replaceables");
public static final VanillaTag DEEPSLATE_ORE_REPLACEABLES = register("deepslate_ore_replaceables");
public static final VanillaTag BASE_STONE_NETHER = register("base_stone_nether");
public static final VanillaTag OVERWORLD_CARVER_REPLACEABLES = register("overworld_carver_replaceables");
public static final VanillaTag NETHER_CARVER_REPLACEABLES = register("nether_carver_replaceables");
public static final VanillaTag CANDLE_CAKES = register("candle_cakes");
public static final VanillaTag CAULDRONS = register("cauldrons");
public static final VanillaTag CRYSTAL_SOUND_BLOCKS = register("crystal_sound_blocks");
public static final VanillaTag INSIDE_STEP_SOUND_BLOCKS = register("inside_step_sound_blocks");
public static final VanillaTag COMBINATION_STEP_SOUND_BLOCKS = register("combination_step_sound_blocks");
public static final VanillaTag CAMEL_SAND_STEP_SOUND_BLOCKS = register("camel_sand_step_sound_blocks");
public static final VanillaTag OCCLUDES_VIBRATION_SIGNALS = register("occludes_vibration_signals");
public static final VanillaTag DAMPENS_VIBRATIONS = register("dampens_vibrations");
public static final VanillaTag DRIPSTONE_REPLACEABLE_BLOCKS = register("dripstone_replaceable_blocks");
public static final VanillaTag CAVE_VINES = register("cave_vines");
public static final VanillaTag MOSS_REPLACEABLE = register("moss_replaceable");
public static final VanillaTag LUSH_GROUND_REPLACEABLE = register("lush_ground_replaceable");
public static final VanillaTag AZALEA_ROOT_REPLACEABLE = register("azalea_root_replaceable");
public static final VanillaTag SMALL_DRIPLEAF_PLACEABLE = register("small_dripleaf_placeable");
public static final VanillaTag BIG_DRIPLEAF_PLACEABLE = register("big_dripleaf_placeable");
public static final VanillaTag SNOW = register("snow");
public static final VanillaTag MINEABLE_AXE = register("mineable/axe");
public static final VanillaTag MINEABLE_HOE = register("mineable/hoe");
public static final VanillaTag MINEABLE_PICKAXE = register("mineable/pickaxe");
public static final VanillaTag MINEABLE_SHOVEL = register("mineable/shovel");
public static final VanillaTag SWORD_EFFICIENT = register("sword_efficient");
public static final VanillaTag NEEDS_DIAMOND_TOOL = register("needs_diamond_tool");
public static final VanillaTag NEEDS_IRON_TOOL = register("needs_iron_tool");
public static final VanillaTag NEEDS_STONE_TOOL = register("needs_stone_tool");
public static final VanillaTag INCORRECT_FOR_NETHERITE_TOOL = register("incorrect_for_netherite_tool");
public static final VanillaTag INCORRECT_FOR_DIAMOND_TOOL = register("incorrect_for_diamond_tool");
public static final VanillaTag INCORRECT_FOR_IRON_TOOL = register("incorrect_for_iron_tool");
public static final VanillaTag INCORRECT_FOR_STONE_TOOL = register("incorrect_for_stone_tool");
public static final VanillaTag INCORRECT_FOR_GOLD_TOOL = register("incorrect_for_gold_tool");
public static final VanillaTag INCORRECT_FOR_WOODEN_TOOL = register("incorrect_for_wooden_tool");
public static final VanillaTag FEATURES_CANNOT_REPLACE = register("features_cannot_replace");
public static final VanillaTag LAVA_POOL_STONE_CANNOT_REPLACE = register("lava_pool_stone_cannot_replace");
public static final VanillaTag GEODE_INVALID_BLOCKS = register("geode_invalid_blocks");
public static final VanillaTag FROG_PREFER_JUMP_TO = register("frog_prefer_jump_to");
public static final VanillaTag SCULK_REPLACEABLE = register("sculk_replaceable");
public static final VanillaTag SCULK_REPLACEABLE_WORLD_GEN = register("sculk_replaceable_world_gen");
public static final VanillaTag ANCIENT_CITY_REPLACEABLE = register("ancient_city_replaceable");
public static final VanillaTag VIBRATION_RESONATORS = register("vibration_resonators");
public static final VanillaTag ANIMALS_SPAWNABLE_ON = register("animals_spawnable_on");
public static final VanillaTag ARMADILLO_SPAWNABLE_ON = register("armadillo_spawnable_on");
public static final VanillaTag AXOLOTLS_SPAWNABLE_ON = register("axolotls_spawnable_on");
public static final VanillaTag GOATS_SPAWNABLE_ON = register("goats_spawnable_on");
public static final VanillaTag MOOSHROOMS_SPAWNABLE_ON = register("mooshrooms_spawnable_on");
public static final VanillaTag PARROTS_SPAWNABLE_ON = register("parrots_spawnable_on");
public static final VanillaTag POLAR_BEARS_SPAWNABLE_ON_ALTERNATE = register("polar_bears_spawnable_on_alternate");
public static final VanillaTag RABBITS_SPAWNABLE_ON = register("rabbits_spawnable_on");
public static final VanillaTag FOXES_SPAWNABLE_ON = register("foxes_spawnable_on");
public static final VanillaTag WOLVES_SPAWNABLE_ON = register("wolves_spawnable_on");
public static final VanillaTag FROGS_SPAWNABLE_ON = register("frogs_spawnable_on");
public static final VanillaTag AZALEA_GROWS_ON = register("azalea_grows_on");
public static final VanillaTag CONVERTABLE_TO_MUD = register("convertable_to_mud");
public static final VanillaTag MANGROVE_LOGS_CAN_GROW_THROUGH = register("mangrove_logs_can_grow_through");
public static final VanillaTag MANGROVE_ROOTS_CAN_GROW_THROUGH = register("mangrove_roots_can_grow_through");
public static final VanillaTag DEAD_BUSH_MAY_PLACE_ON = register("dead_bush_may_place_on");
public static final VanillaTag SNAPS_GOAT_HORN = register("snaps_goat_horn");
public static final VanillaTag REPLACEABLE_BY_TREES = register("replaceable_by_trees");
public static final VanillaTag SNOW_LAYER_CANNOT_SURVIVE_ON = register("snow_layer_cannot_survive_on");
public static final VanillaTag SNOW_LAYER_CAN_SURVIVE_ON = register("snow_layer_can_survive_on");
public static final VanillaTag INVALID_SPAWN_INSIDE = register("invalid_spawn_inside");
public static final VanillaTag SNIFFER_DIGGABLE_BLOCK = register("sniffer_diggable_block");
public static final VanillaTag SNIFFER_EGG_HATCH_BOOST = register("sniffer_egg_hatch_boost");
public static final VanillaTag TRAIL_RUINS_REPLACEABLE = register("trail_ruins_replaceable");
public static final VanillaTag REPLACEABLE = register("replaceable");
public static final VanillaTag ENCHANTMENT_POWER_PROVIDER = register("enchantment_power_provider");
public static final VanillaTag ENCHANTMENT_POWER_TRANSMITTER = register("enchantment_power_transmitter");
public static final VanillaTag MAINTAINS_FARMLAND = register("maintains_farmland");
public static final VanillaTag BLOCKS_WIND_CHARGE_EXPLOSIONS = register("blocks_wind_charge_explosions");
public static final VanillaTag DOES_NOT_BLOCK_HOPPERS = register("does_not_block_hoppers");
public static final VanillaTag AIR = register("air");
public static final Tag WOOL = register("wool");
public static final Tag PLANKS = register("planks");
public static final Tag STONE_BRICKS = register("stone_bricks");
public static final Tag WOODEN_BUTTONS = register("wooden_buttons");
public static final Tag STONE_BUTTONS = register("stone_buttons");
public static final Tag BUTTONS = register("buttons");
public static final Tag WOOL_CARPETS = register("wool_carpets");
public static final Tag WOODEN_DOORS = register("wooden_doors");
public static final Tag MOB_INTERACTABLE_DOORS = register("mob_interactable_doors");
public static final Tag WOODEN_STAIRS = register("wooden_stairs");
public static final Tag WOODEN_SLABS = register("wooden_slabs");
public static final Tag WOODEN_FENCES = register("wooden_fences");
public static final Tag PRESSURE_PLATES = register("pressure_plates");
public static final Tag WOODEN_PRESSURE_PLATES = register("wooden_pressure_plates");
public static final Tag STONE_PRESSURE_PLATES = register("stone_pressure_plates");
public static final Tag WOODEN_TRAPDOORS = register("wooden_trapdoors");
public static final Tag DOORS = register("doors");
public static final Tag SAPLINGS = register("saplings");
public static final Tag LOGS_THAT_BURN = register("logs_that_burn");
public static final Tag OVERWORLD_NATURAL_LOGS = register("overworld_natural_logs");
public static final Tag LOGS = register("logs");
public static final Tag DARK_OAK_LOGS = register("dark_oak_logs");
public static final Tag OAK_LOGS = register("oak_logs");
public static final Tag BIRCH_LOGS = register("birch_logs");
public static final Tag ACACIA_LOGS = register("acacia_logs");
public static final Tag CHERRY_LOGS = register("cherry_logs");
public static final Tag JUNGLE_LOGS = register("jungle_logs");
public static final Tag SPRUCE_LOGS = register("spruce_logs");
public static final Tag MANGROVE_LOGS = register("mangrove_logs");
public static final Tag CRIMSON_STEMS = register("crimson_stems");
public static final Tag WARPED_STEMS = register("warped_stems");
public static final Tag BAMBOO_BLOCKS = register("bamboo_blocks");
public static final Tag WART_BLOCKS = register("wart_blocks");
public static final Tag BANNERS = register("banners");
public static final Tag SAND = register("sand");
public static final Tag SMELTS_TO_GLASS = register("smelts_to_glass");
public static final Tag STAIRS = register("stairs");
public static final Tag SLABS = register("slabs");
public static final Tag WALLS = register("walls");
public static final Tag ANVIL = register("anvil");
public static final Tag RAILS = register("rails");
public static final Tag LEAVES = register("leaves");
public static final Tag TRAPDOORS = register("trapdoors");
public static final Tag SMALL_FLOWERS = register("small_flowers");
public static final Tag BEDS = register("beds");
public static final Tag FENCES = register("fences");
public static final Tag TALL_FLOWERS = register("tall_flowers");
public static final Tag FLOWERS = register("flowers");
public static final Tag PIGLIN_REPELLENTS = register("piglin_repellents");
public static final Tag GOLD_ORES = register("gold_ores");
public static final Tag IRON_ORES = register("iron_ores");
public static final Tag DIAMOND_ORES = register("diamond_ores");
public static final Tag REDSTONE_ORES = register("redstone_ores");
public static final Tag LAPIS_ORES = register("lapis_ores");
public static final Tag COAL_ORES = register("coal_ores");
public static final Tag EMERALD_ORES = register("emerald_ores");
public static final Tag COPPER_ORES = register("copper_ores");
public static final Tag CANDLES = register("candles");
public static final Tag DIRT = register("dirt");
public static final Tag TERRACOTTA = register("terracotta");
public static final Tag BADLANDS_TERRACOTTA = register("badlands_terracotta");
public static final Tag CONCRETE_POWDER = register("concrete_powder");
public static final Tag COMPLETES_FIND_TREE_TUTORIAL = register("completes_find_tree_tutorial");
public static final Tag FLOWER_POTS = register("flower_pots");
public static final Tag ENDERMAN_HOLDABLE = register("enderman_holdable");
public static final Tag ICE = register("ice");
public static final Tag VALID_SPAWN = register("valid_spawn");
public static final Tag IMPERMEABLE = register("impermeable");
public static final Tag UNDERWATER_BONEMEALS = register("underwater_bonemeals");
public static final Tag CORAL_BLOCKS = register("coral_blocks");
public static final Tag WALL_CORALS = register("wall_corals");
public static final Tag CORAL_PLANTS = register("coral_plants");
public static final Tag CORALS = register("corals");
public static final Tag BAMBOO_PLANTABLE_ON = register("bamboo_plantable_on");
public static final Tag STANDING_SIGNS = register("standing_signs");
public static final Tag WALL_SIGNS = register("wall_signs");
public static final Tag SIGNS = register("signs");
public static final Tag CEILING_HANGING_SIGNS = register("ceiling_hanging_signs");
public static final Tag WALL_HANGING_SIGNS = register("wall_hanging_signs");
public static final Tag ALL_HANGING_SIGNS = register("all_hanging_signs");
public static final Tag ALL_SIGNS = register("all_signs");
public static final Tag DRAGON_IMMUNE = register("dragon_immune");
public static final Tag DRAGON_TRANSPARENT = register("dragon_transparent");
public static final Tag WITHER_IMMUNE = register("wither_immune");
public static final Tag WITHER_SUMMON_BASE_BLOCKS = register("wither_summon_base_blocks");
public static final Tag BEEHIVES = register("beehives");
public static final Tag CROPS = register("crops");
public static final Tag BEE_GROWABLES = register("bee_growables");
public static final Tag PORTALS = register("portals");
public static final Tag FIRE = register("fire");
public static final Tag NYLIUM = register("nylium");
public static final Tag BEACON_BASE_BLOCKS = register("beacon_base_blocks");
public static final Tag SOUL_SPEED_BLOCKS = register("soul_speed_blocks");
public static final Tag WALL_POST_OVERRIDE = register("wall_post_override");
public static final Tag CLIMBABLE = register("climbable");
public static final Tag FALL_DAMAGE_RESETTING = register("fall_damage_resetting");
public static final Tag SHULKER_BOXES = register("shulker_boxes");
public static final Tag HOGLIN_REPELLENTS = register("hoglin_repellents");
public static final Tag SOUL_FIRE_BASE_BLOCKS = register("soul_fire_base_blocks");
public static final Tag STRIDER_WARM_BLOCKS = register("strider_warm_blocks");
public static final Tag CAMPFIRES = register("campfires");
public static final Tag GUARDED_BY_PIGLINS = register("guarded_by_piglins");
public static final Tag PREVENT_MOB_SPAWNING_INSIDE = register("prevent_mob_spawning_inside");
public static final Tag FENCE_GATES = register("fence_gates");
public static final Tag UNSTABLE_BOTTOM_CENTER = register("unstable_bottom_center");
public static final Tag MUSHROOM_GROW_BLOCK = register("mushroom_grow_block");
public static final Tag INFINIBURN_OVERWORLD = register("infiniburn_overworld");
public static final Tag INFINIBURN_NETHER = register("infiniburn_nether");
public static final Tag INFINIBURN_END = register("infiniburn_end");
public static final Tag BASE_STONE_OVERWORLD = register("base_stone_overworld");
public static final Tag STONE_ORE_REPLACEABLES = register("stone_ore_replaceables");
public static final Tag DEEPSLATE_ORE_REPLACEABLES = register("deepslate_ore_replaceables");
public static final Tag BASE_STONE_NETHER = register("base_stone_nether");
public static final Tag OVERWORLD_CARVER_REPLACEABLES = register("overworld_carver_replaceables");
public static final Tag NETHER_CARVER_REPLACEABLES = register("nether_carver_replaceables");
public static final Tag CANDLE_CAKES = register("candle_cakes");
public static final Tag CAULDRONS = register("cauldrons");
public static final Tag CRYSTAL_SOUND_BLOCKS = register("crystal_sound_blocks");
public static final Tag INSIDE_STEP_SOUND_BLOCKS = register("inside_step_sound_blocks");
public static final Tag COMBINATION_STEP_SOUND_BLOCKS = register("combination_step_sound_blocks");
public static final Tag CAMEL_SAND_STEP_SOUND_BLOCKS = register("camel_sand_step_sound_blocks");
public static final Tag OCCLUDES_VIBRATION_SIGNALS = register("occludes_vibration_signals");
public static final Tag DAMPENS_VIBRATIONS = register("dampens_vibrations");
public static final Tag DRIPSTONE_REPLACEABLE_BLOCKS = register("dripstone_replaceable_blocks");
public static final Tag CAVE_VINES = register("cave_vines");
public static final Tag MOSS_REPLACEABLE = register("moss_replaceable");
public static final Tag LUSH_GROUND_REPLACEABLE = register("lush_ground_replaceable");
public static final Tag AZALEA_ROOT_REPLACEABLE = register("azalea_root_replaceable");
public static final Tag SMALL_DRIPLEAF_PLACEABLE = register("small_dripleaf_placeable");
public static final Tag BIG_DRIPLEAF_PLACEABLE = register("big_dripleaf_placeable");
public static final Tag SNOW = register("snow");
public static final Tag MINEABLE_AXE = register("mineable/axe");
public static final Tag MINEABLE_HOE = register("mineable/hoe");
public static final Tag MINEABLE_PICKAXE = register("mineable/pickaxe");
public static final Tag MINEABLE_SHOVEL = register("mineable/shovel");
public static final Tag SWORD_EFFICIENT = register("sword_efficient");
public static final Tag NEEDS_DIAMOND_TOOL = register("needs_diamond_tool");
public static final Tag NEEDS_IRON_TOOL = register("needs_iron_tool");
public static final Tag NEEDS_STONE_TOOL = register("needs_stone_tool");
public static final Tag INCORRECT_FOR_NETHERITE_TOOL = register("incorrect_for_netherite_tool");
public static final Tag INCORRECT_FOR_DIAMOND_TOOL = register("incorrect_for_diamond_tool");
public static final Tag INCORRECT_FOR_IRON_TOOL = register("incorrect_for_iron_tool");
public static final Tag INCORRECT_FOR_STONE_TOOL = register("incorrect_for_stone_tool");
public static final Tag INCORRECT_FOR_GOLD_TOOL = register("incorrect_for_gold_tool");
public static final Tag INCORRECT_FOR_WOODEN_TOOL = register("incorrect_for_wooden_tool");
public static final Tag FEATURES_CANNOT_REPLACE = register("features_cannot_replace");
public static final Tag LAVA_POOL_STONE_CANNOT_REPLACE = register("lava_pool_stone_cannot_replace");
public static final Tag GEODE_INVALID_BLOCKS = register("geode_invalid_blocks");
public static final Tag FROG_PREFER_JUMP_TO = register("frog_prefer_jump_to");
public static final Tag SCULK_REPLACEABLE = register("sculk_replaceable");
public static final Tag SCULK_REPLACEABLE_WORLD_GEN = register("sculk_replaceable_world_gen");
public static final Tag ANCIENT_CITY_REPLACEABLE = register("ancient_city_replaceable");
public static final Tag VIBRATION_RESONATORS = register("vibration_resonators");
public static final Tag ANIMALS_SPAWNABLE_ON = register("animals_spawnable_on");
public static final Tag ARMADILLO_SPAWNABLE_ON = register("armadillo_spawnable_on");
public static final Tag AXOLOTLS_SPAWNABLE_ON = register("axolotls_spawnable_on");
public static final Tag GOATS_SPAWNABLE_ON = register("goats_spawnable_on");
public static final Tag MOOSHROOMS_SPAWNABLE_ON = register("mooshrooms_spawnable_on");
public static final Tag PARROTS_SPAWNABLE_ON = register("parrots_spawnable_on");
public static final Tag POLAR_BEARS_SPAWNABLE_ON_ALTERNATE = register("polar_bears_spawnable_on_alternate");
public static final Tag RABBITS_SPAWNABLE_ON = register("rabbits_spawnable_on");
public static final Tag FOXES_SPAWNABLE_ON = register("foxes_spawnable_on");
public static final Tag WOLVES_SPAWNABLE_ON = register("wolves_spawnable_on");
public static final Tag FROGS_SPAWNABLE_ON = register("frogs_spawnable_on");
public static final Tag AZALEA_GROWS_ON = register("azalea_grows_on");
public static final Tag CONVERTABLE_TO_MUD = register("convertable_to_mud");
public static final Tag MANGROVE_LOGS_CAN_GROW_THROUGH = register("mangrove_logs_can_grow_through");
public static final Tag MANGROVE_ROOTS_CAN_GROW_THROUGH = register("mangrove_roots_can_grow_through");
public static final Tag DEAD_BUSH_MAY_PLACE_ON = register("dead_bush_may_place_on");
public static final Tag SNAPS_GOAT_HORN = register("snaps_goat_horn");
public static final Tag REPLACEABLE_BY_TREES = register("replaceable_by_trees");
public static final Tag SNOW_LAYER_CANNOT_SURVIVE_ON = register("snow_layer_cannot_survive_on");
public static final Tag SNOW_LAYER_CAN_SURVIVE_ON = register("snow_layer_can_survive_on");
public static final Tag INVALID_SPAWN_INSIDE = register("invalid_spawn_inside");
public static final Tag SNIFFER_DIGGABLE_BLOCK = register("sniffer_diggable_block");
public static final Tag SNIFFER_EGG_HATCH_BOOST = register("sniffer_egg_hatch_boost");
public static final Tag TRAIL_RUINS_REPLACEABLE = register("trail_ruins_replaceable");
public static final Tag REPLACEABLE = register("replaceable");
public static final Tag ENCHANTMENT_POWER_PROVIDER = register("enchantment_power_provider");
public static final Tag ENCHANTMENT_POWER_TRANSMITTER = register("enchantment_power_transmitter");
public static final Tag MAINTAINS_FARMLAND = register("maintains_farmland");
public static final Tag BLOCKS_WIND_CHARGE_EXPLOSIONS = register("blocks_wind_charge_explosions");
public static final Tag DOES_NOT_BLOCK_HOPPERS = register("does_not_block_hoppers");
public static final Tag AIR = register("air");
private BlockTag() {}
private static VanillaTag register(String name) {
private static Tag register(String name) {
Key identifier = MinecraftKey.key(name);
int geyserId = ALL_BLOCK_TAGS.size();
VanillaTag tag = new VanillaTag(MinecraftKey.key("block"), identifier, geyserId);
Tag tag = new VanillaTag(TagRegistry.BLOCK, identifier, geyserId);
ALL_BLOCK_TAGS.put(identifier, tag);
return tag;
}

View file

@ -25,60 +25,58 @@
package org.geysermc.geyser.session.cache.tags;
import net.kyori.adventure.key.Key;
import org.geysermc.geyser.util.MinecraftKey;
import org.geysermc.geyser.util.Ordered;
import java.util.HashMap;
import java.util.Map;
import net.kyori.adventure.key.Key;
import org.geysermc.geyser.util.MinecraftKey;
@SuppressWarnings("unused")
public final class EnchantmentTag {
public static final Map<Key, VanillaTag> ALL_ENCHANTMENT_TAGS = new HashMap<>();
public static final Map<Key, Tag> ALL_ENCHANTMENT_TAGS = new HashMap<>();
public static final VanillaTag TOOLTIP_ORDER = register("tooltip_order");
public static final VanillaTag EXCLUSIVE_SET_ARMOR = register("exclusive_set/armor");
public static final VanillaTag EXCLUSIVE_SET_BOOTS = register("exclusive_set/boots");
public static final VanillaTag EXCLUSIVE_SET_BOW = register("exclusive_set/bow");
public static final VanillaTag EXCLUSIVE_SET_CROSSBOW = register("exclusive_set/crossbow");
public static final VanillaTag EXCLUSIVE_SET_DAMAGE = register("exclusive_set/damage");
public static final VanillaTag EXCLUSIVE_SET_MINING = register("exclusive_set/mining");
public static final VanillaTag EXCLUSIVE_SET_RIPTIDE = register("exclusive_set/riptide");
public static final VanillaTag TRADEABLE = register("tradeable");
public static final VanillaTag DOUBLE_TRADE_PRICE = register("double_trade_price");
public static final VanillaTag IN_ENCHANTING_TABLE = register("in_enchanting_table");
public static final VanillaTag ON_MOB_SPAWN_EQUIPMENT = register("on_mob_spawn_equipment");
public static final VanillaTag ON_TRADED_EQUIPMENT = register("on_traded_equipment");
public static final VanillaTag ON_RANDOM_LOOT = register("on_random_loot");
public static final VanillaTag CURSE = register("curse");
public static final VanillaTag SMELTS_LOOT = register("smelts_loot");
public static final VanillaTag PREVENTS_BEE_SPAWNS_WHEN_MINING = register("prevents_bee_spawns_when_mining");
public static final VanillaTag PREVENTS_DECORATED_POT_SHATTERING = register("prevents_decorated_pot_shattering");
public static final VanillaTag PREVENTS_ICE_MELTING = register("prevents_ice_melting");
public static final VanillaTag PREVENTS_INFESTED_SPAWNS = register("prevents_infested_spawns");
public static final VanillaTag TREASURE = register("treasure");
public static final VanillaTag NON_TREASURE = register("non_treasure");
public static final VanillaTag TRADES_DESERT_COMMON = register("trades/desert_common");
public static final VanillaTag TRADES_JUNGLE_COMMON = register("trades/jungle_common");
public static final VanillaTag TRADES_PLAINS_COMMON = register("trades/plains_common");
public static final VanillaTag TRADES_SAVANNA_COMMON = register("trades/savanna_common");
public static final VanillaTag TRADES_SNOW_COMMON = register("trades/snow_common");
public static final VanillaTag TRADES_SWAMP_COMMON = register("trades/swamp_common");
public static final VanillaTag TRADES_TAIGA_COMMON = register("trades/taiga_common");
public static final VanillaTag TRADES_DESERT_SPECIAL = register("trades/desert_special");
public static final VanillaTag TRADES_JUNGLE_SPECIAL = register("trades/jungle_special");
public static final VanillaTag TRADES_PLAINS_SPECIAL = register("trades/plains_special");
public static final VanillaTag TRADES_SAVANNA_SPECIAL = register("trades/savanna_special");
public static final VanillaTag TRADES_SNOW_SPECIAL = register("trades/snow_special");
public static final VanillaTag TRADES_SWAMP_SPECIAL = register("trades/swamp_special");
public static final VanillaTag TRADES_TAIGA_SPECIAL = register("trades/taiga_special");
public static final Tag TOOLTIP_ORDER = register("tooltip_order");
public static final Tag EXCLUSIVE_SET_ARMOR = register("exclusive_set/armor");
public static final Tag EXCLUSIVE_SET_BOOTS = register("exclusive_set/boots");
public static final Tag EXCLUSIVE_SET_BOW = register("exclusive_set/bow");
public static final Tag EXCLUSIVE_SET_CROSSBOW = register("exclusive_set/crossbow");
public static final Tag EXCLUSIVE_SET_DAMAGE = register("exclusive_set/damage");
public static final Tag EXCLUSIVE_SET_MINING = register("exclusive_set/mining");
public static final Tag EXCLUSIVE_SET_RIPTIDE = register("exclusive_set/riptide");
public static final Tag TRADEABLE = register("tradeable");
public static final Tag DOUBLE_TRADE_PRICE = register("double_trade_price");
public static final Tag IN_ENCHANTING_TABLE = register("in_enchanting_table");
public static final Tag ON_MOB_SPAWN_EQUIPMENT = register("on_mob_spawn_equipment");
public static final Tag ON_TRADED_EQUIPMENT = register("on_traded_equipment");
public static final Tag ON_RANDOM_LOOT = register("on_random_loot");
public static final Tag CURSE = register("curse");
public static final Tag SMELTS_LOOT = register("smelts_loot");
public static final Tag PREVENTS_BEE_SPAWNS_WHEN_MINING = register("prevents_bee_spawns_when_mining");
public static final Tag PREVENTS_DECORATED_POT_SHATTERING = register("prevents_decorated_pot_shattering");
public static final Tag PREVENTS_ICE_MELTING = register("prevents_ice_melting");
public static final Tag PREVENTS_INFESTED_SPAWNS = register("prevents_infested_spawns");
public static final Tag TREASURE = register("treasure");
public static final Tag NON_TREASURE = register("non_treasure");
public static final Tag TRADES_DESERT_COMMON = register("trades/desert_common");
public static final Tag TRADES_JUNGLE_COMMON = register("trades/jungle_common");
public static final Tag TRADES_PLAINS_COMMON = register("trades/plains_common");
public static final Tag TRADES_SAVANNA_COMMON = register("trades/savanna_common");
public static final Tag TRADES_SNOW_COMMON = register("trades/snow_common");
public static final Tag TRADES_SWAMP_COMMON = register("trades/swamp_common");
public static final Tag TRADES_TAIGA_COMMON = register("trades/taiga_common");
public static final Tag TRADES_DESERT_SPECIAL = register("trades/desert_special");
public static final Tag TRADES_JUNGLE_SPECIAL = register("trades/jungle_special");
public static final Tag TRADES_PLAINS_SPECIAL = register("trades/plains_special");
public static final Tag TRADES_SAVANNA_SPECIAL = register("trades/savanna_special");
public static final Tag TRADES_SNOW_SPECIAL = register("trades/snow_special");
public static final Tag TRADES_SWAMP_SPECIAL = register("trades/swamp_special");
public static final Tag TRADES_TAIGA_SPECIAL = register("trades/taiga_special");
private EnchantmentTag() {}
private static VanillaTag register(String name) {
private static Tag register(String name) {
Key identifier = MinecraftKey.key(name);
int geyserId = ALL_ENCHANTMENT_TAGS.size();
VanillaTag tag = new VanillaTag(MinecraftKey.key("enchantment"), identifier, geyserId);
Tag tag = new VanillaTag(TagRegistry.ENCHANTMENT, identifier, geyserId);
ALL_ENCHANTMENT_TAGS.put(MinecraftKey.key(name), tag);
return tag;
}

View file

@ -25,171 +25,169 @@
package org.geysermc.geyser.session.cache.tags;
import net.kyori.adventure.key.Key;
import org.geysermc.geyser.util.MinecraftKey;
import org.geysermc.geyser.util.Ordered;
import java.util.HashMap;
import java.util.Map;
import net.kyori.adventure.key.Key;
import org.geysermc.geyser.util.MinecraftKey;
@SuppressWarnings("unused")
public final class ItemTag {
public static final Map<Key, VanillaTag> ALL_ITEM_TAGS = new HashMap<>();
public static final Map<Key, Tag> ALL_ITEM_TAGS = new HashMap<>();
public static final VanillaTag WOOL = register("wool");
public static final VanillaTag PLANKS = register("planks");
public static final VanillaTag STONE_BRICKS = register("stone_bricks");
public static final VanillaTag WOODEN_BUTTONS = register("wooden_buttons");
public static final VanillaTag STONE_BUTTONS = register("stone_buttons");
public static final VanillaTag BUTTONS = register("buttons");
public static final VanillaTag WOOL_CARPETS = register("wool_carpets");
public static final VanillaTag WOODEN_DOORS = register("wooden_doors");
public static final VanillaTag WOODEN_STAIRS = register("wooden_stairs");
public static final VanillaTag WOODEN_SLABS = register("wooden_slabs");
public static final VanillaTag WOODEN_FENCES = register("wooden_fences");
public static final VanillaTag FENCE_GATES = register("fence_gates");
public static final VanillaTag WOODEN_PRESSURE_PLATES = register("wooden_pressure_plates");
public static final VanillaTag WOODEN_TRAPDOORS = register("wooden_trapdoors");
public static final VanillaTag DOORS = register("doors");
public static final VanillaTag SAPLINGS = register("saplings");
public static final VanillaTag LOGS_THAT_BURN = register("logs_that_burn");
public static final VanillaTag LOGS = register("logs");
public static final VanillaTag DARK_OAK_LOGS = register("dark_oak_logs");
public static final VanillaTag OAK_LOGS = register("oak_logs");
public static final VanillaTag BIRCH_LOGS = register("birch_logs");
public static final VanillaTag ACACIA_LOGS = register("acacia_logs");
public static final VanillaTag CHERRY_LOGS = register("cherry_logs");
public static final VanillaTag JUNGLE_LOGS = register("jungle_logs");
public static final VanillaTag SPRUCE_LOGS = register("spruce_logs");
public static final VanillaTag MANGROVE_LOGS = register("mangrove_logs");
public static final VanillaTag CRIMSON_STEMS = register("crimson_stems");
public static final VanillaTag WARPED_STEMS = register("warped_stems");
public static final VanillaTag BAMBOO_BLOCKS = register("bamboo_blocks");
public static final VanillaTag WART_BLOCKS = register("wart_blocks");
public static final VanillaTag BANNERS = register("banners");
public static final VanillaTag SAND = register("sand");
public static final VanillaTag SMELTS_TO_GLASS = register("smelts_to_glass");
public static final VanillaTag STAIRS = register("stairs");
public static final VanillaTag SLABS = register("slabs");
public static final VanillaTag WALLS = register("walls");
public static final VanillaTag ANVIL = register("anvil");
public static final VanillaTag RAILS = register("rails");
public static final VanillaTag LEAVES = register("leaves");
public static final VanillaTag TRAPDOORS = register("trapdoors");
public static final VanillaTag SMALL_FLOWERS = register("small_flowers");
public static final VanillaTag BEDS = register("beds");
public static final VanillaTag FENCES = register("fences");
public static final VanillaTag TALL_FLOWERS = register("tall_flowers");
public static final VanillaTag FLOWERS = register("flowers");
public static final VanillaTag PIGLIN_REPELLENTS = register("piglin_repellents");
public static final VanillaTag PIGLIN_LOVED = register("piglin_loved");
public static final VanillaTag IGNORED_BY_PIGLIN_BABIES = register("ignored_by_piglin_babies");
public static final VanillaTag MEAT = register("meat");
public static final VanillaTag SNIFFER_FOOD = register("sniffer_food");
public static final VanillaTag PIGLIN_FOOD = register("piglin_food");
public static final VanillaTag FOX_FOOD = register("fox_food");
public static final VanillaTag COW_FOOD = register("cow_food");
public static final VanillaTag GOAT_FOOD = register("goat_food");
public static final VanillaTag SHEEP_FOOD = register("sheep_food");
public static final VanillaTag WOLF_FOOD = register("wolf_food");
public static final VanillaTag CAT_FOOD = register("cat_food");
public static final VanillaTag HORSE_FOOD = register("horse_food");
public static final VanillaTag HORSE_TEMPT_ITEMS = register("horse_tempt_items");
public static final VanillaTag CAMEL_FOOD = register("camel_food");
public static final VanillaTag ARMADILLO_FOOD = register("armadillo_food");
public static final VanillaTag BEE_FOOD = register("bee_food");
public static final VanillaTag CHICKEN_FOOD = register("chicken_food");
public static final VanillaTag FROG_FOOD = register("frog_food");
public static final VanillaTag HOGLIN_FOOD = register("hoglin_food");
public static final VanillaTag LLAMA_FOOD = register("llama_food");
public static final VanillaTag LLAMA_TEMPT_ITEMS = register("llama_tempt_items");
public static final VanillaTag OCELOT_FOOD = register("ocelot_food");
public static final VanillaTag PANDA_FOOD = register("panda_food");
public static final VanillaTag PIG_FOOD = register("pig_food");
public static final VanillaTag RABBIT_FOOD = register("rabbit_food");
public static final VanillaTag STRIDER_FOOD = register("strider_food");
public static final VanillaTag STRIDER_TEMPT_ITEMS = register("strider_tempt_items");
public static final VanillaTag TURTLE_FOOD = register("turtle_food");
public static final VanillaTag PARROT_FOOD = register("parrot_food");
public static final VanillaTag PARROT_POISONOUS_FOOD = register("parrot_poisonous_food");
public static final VanillaTag AXOLOTL_FOOD = register("axolotl_food");
public static final VanillaTag GOLD_ORES = register("gold_ores");
public static final VanillaTag IRON_ORES = register("iron_ores");
public static final VanillaTag DIAMOND_ORES = register("diamond_ores");
public static final VanillaTag REDSTONE_ORES = register("redstone_ores");
public static final VanillaTag LAPIS_ORES = register("lapis_ores");
public static final VanillaTag COAL_ORES = register("coal_ores");
public static final VanillaTag EMERALD_ORES = register("emerald_ores");
public static final VanillaTag COPPER_ORES = register("copper_ores");
public static final VanillaTag NON_FLAMMABLE_WOOD = register("non_flammable_wood");
public static final VanillaTag SOUL_FIRE_BASE_BLOCKS = register("soul_fire_base_blocks");
public static final VanillaTag CANDLES = register("candles");
public static final VanillaTag DIRT = register("dirt");
public static final VanillaTag TERRACOTTA = register("terracotta");
public static final VanillaTag COMPLETES_FIND_TREE_TUTORIAL = register("completes_find_tree_tutorial");
public static final VanillaTag BOATS = register("boats");
public static final VanillaTag CHEST_BOATS = register("chest_boats");
public static final VanillaTag FISHES = register("fishes");
public static final VanillaTag SIGNS = register("signs");
public static final VanillaTag CREEPER_DROP_MUSIC_DISCS = register("creeper_drop_music_discs");
public static final VanillaTag COALS = register("coals");
public static final VanillaTag ARROWS = register("arrows");
public static final VanillaTag LECTERN_BOOKS = register("lectern_books");
public static final VanillaTag BOOKSHELF_BOOKS = register("bookshelf_books");
public static final VanillaTag BEACON_PAYMENT_ITEMS = register("beacon_payment_items");
public static final VanillaTag STONE_TOOL_MATERIALS = register("stone_tool_materials");
public static final VanillaTag STONE_CRAFTING_MATERIALS = register("stone_crafting_materials");
public static final VanillaTag FREEZE_IMMUNE_WEARABLES = register("freeze_immune_wearables");
public static final VanillaTag DAMPENS_VIBRATIONS = register("dampens_vibrations");
public static final VanillaTag CLUSTER_MAX_HARVESTABLES = register("cluster_max_harvestables");
public static final VanillaTag COMPASSES = register("compasses");
public static final VanillaTag HANGING_SIGNS = register("hanging_signs");
public static final VanillaTag CREEPER_IGNITERS = register("creeper_igniters");
public static final VanillaTag NOTEBLOCK_TOP_INSTRUMENTS = register("noteblock_top_instruments");
public static final VanillaTag FOOT_ARMOR = register("foot_armor");
public static final VanillaTag LEG_ARMOR = register("leg_armor");
public static final VanillaTag CHEST_ARMOR = register("chest_armor");
public static final VanillaTag HEAD_ARMOR = register("head_armor");
public static final VanillaTag SKULLS = register("skulls");
public static final VanillaTag TRIMMABLE_ARMOR = register("trimmable_armor");
public static final VanillaTag TRIM_MATERIALS = register("trim_materials");
public static final VanillaTag TRIM_TEMPLATES = register("trim_templates");
public static final VanillaTag DECORATED_POT_SHERDS = register("decorated_pot_sherds");
public static final VanillaTag DECORATED_POT_INGREDIENTS = register("decorated_pot_ingredients");
public static final VanillaTag SWORDS = register("swords");
public static final VanillaTag AXES = register("axes");
public static final VanillaTag HOES = register("hoes");
public static final VanillaTag PICKAXES = register("pickaxes");
public static final VanillaTag SHOVELS = register("shovels");
public static final VanillaTag BREAKS_DECORATED_POTS = register("breaks_decorated_pots");
public static final VanillaTag VILLAGER_PLANTABLE_SEEDS = register("villager_plantable_seeds");
public static final VanillaTag DYEABLE = register("dyeable");
public static final VanillaTag ENCHANTABLE_FOOT_ARMOR = register("enchantable/foot_armor");
public static final VanillaTag ENCHANTABLE_LEG_ARMOR = register("enchantable/leg_armor");
public static final VanillaTag ENCHANTABLE_CHEST_ARMOR = register("enchantable/chest_armor");
public static final VanillaTag ENCHANTABLE_HEAD_ARMOR = register("enchantable/head_armor");
public static final VanillaTag ENCHANTABLE_ARMOR = register("enchantable/armor");
public static final VanillaTag ENCHANTABLE_SWORD = register("enchantable/sword");
public static final VanillaTag ENCHANTABLE_FIRE_ASPECT = register("enchantable/fire_aspect");
public static final VanillaTag ENCHANTABLE_SHARP_WEAPON = register("enchantable/sharp_weapon");
public static final VanillaTag ENCHANTABLE_WEAPON = register("enchantable/weapon");
public static final VanillaTag ENCHANTABLE_MINING = register("enchantable/mining");
public static final VanillaTag ENCHANTABLE_MINING_LOOT = register("enchantable/mining_loot");
public static final VanillaTag ENCHANTABLE_FISHING = register("enchantable/fishing");
public static final VanillaTag ENCHANTABLE_TRIDENT = register("enchantable/trident");
public static final VanillaTag ENCHANTABLE_DURABILITY = register("enchantable/durability");
public static final VanillaTag ENCHANTABLE_BOW = register("enchantable/bow");
public static final VanillaTag ENCHANTABLE_EQUIPPABLE = register("enchantable/equippable");
public static final VanillaTag ENCHANTABLE_CROSSBOW = register("enchantable/crossbow");
public static final VanillaTag ENCHANTABLE_VANISHING = register("enchantable/vanishing");
public static final VanillaTag ENCHANTABLE_MACE = register("enchantable/mace");
public static final Tag WOOL = register("wool");
public static final Tag PLANKS = register("planks");
public static final Tag STONE_BRICKS = register("stone_bricks");
public static final Tag WOODEN_BUTTONS = register("wooden_buttons");
public static final Tag STONE_BUTTONS = register("stone_buttons");
public static final Tag BUTTONS = register("buttons");
public static final Tag WOOL_CARPETS = register("wool_carpets");
public static final Tag WOODEN_DOORS = register("wooden_doors");
public static final Tag WOODEN_STAIRS = register("wooden_stairs");
public static final Tag WOODEN_SLABS = register("wooden_slabs");
public static final Tag WOODEN_FENCES = register("wooden_fences");
public static final Tag FENCE_GATES = register("fence_gates");
public static final Tag WOODEN_PRESSURE_PLATES = register("wooden_pressure_plates");
public static final Tag WOODEN_TRAPDOORS = register("wooden_trapdoors");
public static final Tag DOORS = register("doors");
public static final Tag SAPLINGS = register("saplings");
public static final Tag LOGS_THAT_BURN = register("logs_that_burn");
public static final Tag LOGS = register("logs");
public static final Tag DARK_OAK_LOGS = register("dark_oak_logs");
public static final Tag OAK_LOGS = register("oak_logs");
public static final Tag BIRCH_LOGS = register("birch_logs");
public static final Tag ACACIA_LOGS = register("acacia_logs");
public static final Tag CHERRY_LOGS = register("cherry_logs");
public static final Tag JUNGLE_LOGS = register("jungle_logs");
public static final Tag SPRUCE_LOGS = register("spruce_logs");
public static final Tag MANGROVE_LOGS = register("mangrove_logs");
public static final Tag CRIMSON_STEMS = register("crimson_stems");
public static final Tag WARPED_STEMS = register("warped_stems");
public static final Tag BAMBOO_BLOCKS = register("bamboo_blocks");
public static final Tag WART_BLOCKS = register("wart_blocks");
public static final Tag BANNERS = register("banners");
public static final Tag SAND = register("sand");
public static final Tag SMELTS_TO_GLASS = register("smelts_to_glass");
public static final Tag STAIRS = register("stairs");
public static final Tag SLABS = register("slabs");
public static final Tag WALLS = register("walls");
public static final Tag ANVIL = register("anvil");
public static final Tag RAILS = register("rails");
public static final Tag LEAVES = register("leaves");
public static final Tag TRAPDOORS = register("trapdoors");
public static final Tag SMALL_FLOWERS = register("small_flowers");
public static final Tag BEDS = register("beds");
public static final Tag FENCES = register("fences");
public static final Tag TALL_FLOWERS = register("tall_flowers");
public static final Tag FLOWERS = register("flowers");
public static final Tag PIGLIN_REPELLENTS = register("piglin_repellents");
public static final Tag PIGLIN_LOVED = register("piglin_loved");
public static final Tag IGNORED_BY_PIGLIN_BABIES = register("ignored_by_piglin_babies");
public static final Tag MEAT = register("meat");
public static final Tag SNIFFER_FOOD = register("sniffer_food");
public static final Tag PIGLIN_FOOD = register("piglin_food");
public static final Tag FOX_FOOD = register("fox_food");
public static final Tag COW_FOOD = register("cow_food");
public static final Tag GOAT_FOOD = register("goat_food");
public static final Tag SHEEP_FOOD = register("sheep_food");
public static final Tag WOLF_FOOD = register("wolf_food");
public static final Tag CAT_FOOD = register("cat_food");
public static final Tag HORSE_FOOD = register("horse_food");
public static final Tag HORSE_TEMPT_ITEMS = register("horse_tempt_items");
public static final Tag CAMEL_FOOD = register("camel_food");
public static final Tag ARMADILLO_FOOD = register("armadillo_food");
public static final Tag BEE_FOOD = register("bee_food");
public static final Tag CHICKEN_FOOD = register("chicken_food");
public static final Tag FROG_FOOD = register("frog_food");
public static final Tag HOGLIN_FOOD = register("hoglin_food");
public static final Tag LLAMA_FOOD = register("llama_food");
public static final Tag LLAMA_TEMPT_ITEMS = register("llama_tempt_items");
public static final Tag OCELOT_FOOD = register("ocelot_food");
public static final Tag PANDA_FOOD = register("panda_food");
public static final Tag PIG_FOOD = register("pig_food");
public static final Tag RABBIT_FOOD = register("rabbit_food");
public static final Tag STRIDER_FOOD = register("strider_food");
public static final Tag STRIDER_TEMPT_ITEMS = register("strider_tempt_items");
public static final Tag TURTLE_FOOD = register("turtle_food");
public static final Tag PARROT_FOOD = register("parrot_food");
public static final Tag PARROT_POISONOUS_FOOD = register("parrot_poisonous_food");
public static final Tag AXOLOTL_FOOD = register("axolotl_food");
public static final Tag GOLD_ORES = register("gold_ores");
public static final Tag IRON_ORES = register("iron_ores");
public static final Tag DIAMOND_ORES = register("diamond_ores");
public static final Tag REDSTONE_ORES = register("redstone_ores");
public static final Tag LAPIS_ORES = register("lapis_ores");
public static final Tag COAL_ORES = register("coal_ores");
public static final Tag EMERALD_ORES = register("emerald_ores");
public static final Tag COPPER_ORES = register("copper_ores");
public static final Tag NON_FLAMMABLE_WOOD = register("non_flammable_wood");
public static final Tag SOUL_FIRE_BASE_BLOCKS = register("soul_fire_base_blocks");
public static final Tag CANDLES = register("candles");
public static final Tag DIRT = register("dirt");
public static final Tag TERRACOTTA = register("terracotta");
public static final Tag COMPLETES_FIND_TREE_TUTORIAL = register("completes_find_tree_tutorial");
public static final Tag BOATS = register("boats");
public static final Tag CHEST_BOATS = register("chest_boats");
public static final Tag FISHES = register("fishes");
public static final Tag SIGNS = register("signs");
public static final Tag CREEPER_DROP_MUSIC_DISCS = register("creeper_drop_music_discs");
public static final Tag COALS = register("coals");
public static final Tag ARROWS = register("arrows");
public static final Tag LECTERN_BOOKS = register("lectern_books");
public static final Tag BOOKSHELF_BOOKS = register("bookshelf_books");
public static final Tag BEACON_PAYMENT_ITEMS = register("beacon_payment_items");
public static final Tag STONE_TOOL_MATERIALS = register("stone_tool_materials");
public static final Tag STONE_CRAFTING_MATERIALS = register("stone_crafting_materials");
public static final Tag FREEZE_IMMUNE_WEARABLES = register("freeze_immune_wearables");
public static final Tag DAMPENS_VIBRATIONS = register("dampens_vibrations");
public static final Tag CLUSTER_MAX_HARVESTABLES = register("cluster_max_harvestables");
public static final Tag COMPASSES = register("compasses");
public static final Tag HANGING_SIGNS = register("hanging_signs");
public static final Tag CREEPER_IGNITERS = register("creeper_igniters");
public static final Tag NOTEBLOCK_TOP_INSTRUMENTS = register("noteblock_top_instruments");
public static final Tag FOOT_ARMOR = register("foot_armor");
public static final Tag LEG_ARMOR = register("leg_armor");
public static final Tag CHEST_ARMOR = register("chest_armor");
public static final Tag HEAD_ARMOR = register("head_armor");
public static final Tag SKULLS = register("skulls");
public static final Tag TRIMMABLE_ARMOR = register("trimmable_armor");
public static final Tag TRIM_MATERIALS = register("trim_materials");
public static final Tag TRIM_TEMPLATES = register("trim_templates");
public static final Tag DECORATED_POT_SHERDS = register("decorated_pot_sherds");
public static final Tag DECORATED_POT_INGREDIENTS = register("decorated_pot_ingredients");
public static final Tag SWORDS = register("swords");
public static final Tag AXES = register("axes");
public static final Tag HOES = register("hoes");
public static final Tag PICKAXES = register("pickaxes");
public static final Tag SHOVELS = register("shovels");
public static final Tag BREAKS_DECORATED_POTS = register("breaks_decorated_pots");
public static final Tag VILLAGER_PLANTABLE_SEEDS = register("villager_plantable_seeds");
public static final Tag DYEABLE = register("dyeable");
public static final Tag ENCHANTABLE_FOOT_ARMOR = register("enchantable/foot_armor");
public static final Tag ENCHANTABLE_LEG_ARMOR = register("enchantable/leg_armor");
public static final Tag ENCHANTABLE_CHEST_ARMOR = register("enchantable/chest_armor");
public static final Tag ENCHANTABLE_HEAD_ARMOR = register("enchantable/head_armor");
public static final Tag ENCHANTABLE_ARMOR = register("enchantable/armor");
public static final Tag ENCHANTABLE_SWORD = register("enchantable/sword");
public static final Tag ENCHANTABLE_FIRE_ASPECT = register("enchantable/fire_aspect");
public static final Tag ENCHANTABLE_SHARP_WEAPON = register("enchantable/sharp_weapon");
public static final Tag ENCHANTABLE_WEAPON = register("enchantable/weapon");
public static final Tag ENCHANTABLE_MINING = register("enchantable/mining");
public static final Tag ENCHANTABLE_MINING_LOOT = register("enchantable/mining_loot");
public static final Tag ENCHANTABLE_FISHING = register("enchantable/fishing");
public static final Tag ENCHANTABLE_TRIDENT = register("enchantable/trident");
public static final Tag ENCHANTABLE_DURABILITY = register("enchantable/durability");
public static final Tag ENCHANTABLE_BOW = register("enchantable/bow");
public static final Tag ENCHANTABLE_EQUIPPABLE = register("enchantable/equippable");
public static final Tag ENCHANTABLE_CROSSBOW = register("enchantable/crossbow");
public static final Tag ENCHANTABLE_VANISHING = register("enchantable/vanishing");
public static final Tag ENCHANTABLE_MACE = register("enchantable/mace");
private ItemTag() {}
private static VanillaTag register(String name) {
private static Tag register(String name) {
Key identifier = MinecraftKey.key(name);
int geyserId = ALL_ITEM_TAGS.size();
VanillaTag tag = new VanillaTag(MinecraftKey.key("item"), identifier, geyserId);
Tag tag = new VanillaTag(TagRegistry.ITEM, identifier, geyserId);
ALL_ITEM_TAGS.put(MinecraftKey.key(name), tag);
return tag;
}

View file

@ -27,6 +27,6 @@ package org.geysermc.geyser.session.cache.tags;
import net.kyori.adventure.key.Key;
public record NonVanillaTag(Key registry, Key tag) implements Tag {
public record NonVanillaTag(TagRegistry registry, Key tag) implements Tag {
}

View file

@ -29,7 +29,11 @@ import net.kyori.adventure.key.Key;
public interface Tag {
Key registry();
TagRegistry registry();
Key tag();
static Tag createTag(TagRegistry registry, Key tagKey) {
return registry.getVanillaTags().getOrDefault(tagKey, new NonVanillaTag(registry, tagKey));
}
}

View file

@ -0,0 +1,57 @@
/*
* Copyright (c) 2024 GeyserMC. http://geysermc.org
*
* 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.
*
* @author GeyserMC
* @link https://github.com/GeyserMC/Geyser
*/
package org.geysermc.geyser.session.cache.tags;
import java.util.Map;
import lombok.Getter;
import net.kyori.adventure.key.Key;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.geysermc.geyser.util.MinecraftKey;
@Getter
public enum TagRegistry {
BLOCK("block", BlockTag.ALL_BLOCK_TAGS),
ITEM("item", ItemTag.ALL_ITEM_TAGS),
ENCHANTMENT("enchantment", EnchantmentTag.ALL_ENCHANTMENT_TAGS);
private final Key registryKey;
private final Map<Key, Tag> vanillaTags;
TagRegistry(String registry, Map<Key, Tag> vanillaTags) {
this.registryKey = MinecraftKey.key(registry);
this.vanillaTags = vanillaTags;
}
@Nullable
public static TagRegistry valueOf(Key registryKey) {
for (TagRegistry registry : TagRegistry.values()) {
if (registry.registryKey.equals(registryKey)) {
return registry;
}
}
return null;
}
}

View file

@ -28,7 +28,7 @@ package org.geysermc.geyser.session.cache.tags;
import net.kyori.adventure.key.Key;
import org.geysermc.geyser.util.Ordered;
public record VanillaTag(Key registry, Key tag, int geyserId) implements Ordered, Tag {
public record VanillaTag(TagRegistry registry, Key tag, int geyserId) implements Ordered, Tag {
@Override
public int ordinal() {