diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java index b03dea3ed..a8e020f3a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java @@ -672,7 +672,7 @@ public class Entity implements GeyserEntity { // Note this might be client side. Has yet to be an issue though, as of Java 1.21. return InteractiveTag.REMOVE_LEASH; } - if (session.getPlayerInventory().getItemInHand(hand).asItem() == Items.LEAD && leashable.canBeLeashed()) { + if (session.getPlayerInventory().getItemInHand(hand).is(Items.LEAD) && leashable.canBeLeashed()) { // We shall leash return InteractiveTag.LEASH; } @@ -701,7 +701,7 @@ public class Entity implements GeyserEntity { // Has yet to be an issue though, as of Java 1.21. return InteractionResult.SUCCESS; } - if (session.getPlayerInventory().getItemInHand(hand).asItem() == Items.LEAD + if (session.getPlayerInventory().getItemInHand(hand).is(Items.LEAD) && !(session.getEntityCache().getEntityByGeyserId(leashable.leashHolderBedrockId()) instanceof PlayerEntity)) { // We shall leash return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java index d1879becf..d6d880d0a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java @@ -340,7 +340,7 @@ public class LivingEntity extends Entity { @Override public InteractionResult interact(Hand hand) { GeyserItemStack itemStack = session.getPlayerInventory().getItemInHand(hand); - if (itemStack.asItem() == Items.NAME_TAG) { + if (itemStack.is(Items.NAME_TAG)) { InteractionResult result = checkInteractWithNameTag(itemStack); if (result.consumesAction()) { return result; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java index 7df8d7674..e87e20236 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java @@ -30,8 +30,8 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; 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.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; @@ -88,6 +88,6 @@ public class AllayEntity extends MobEntity { } private boolean isDuplicationItem(GeyserItemStack itemStack) { - return itemStack.asItem() == Items.AMETHYST_SHARD; + return itemStack.is(session, ItemTag.DUPLICATES_ALLAYS); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java index e7c9ef843..956d641bb 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java @@ -257,7 +257,7 @@ public class ArmorStandEntity extends LivingEntity { @Override public InteractionResult interactAt(Hand hand) { - if (!isMarker && session.getPlayerInventory().getItemInHand(hand).asItem() != Items.NAME_TAG) { + if (!isMarker && !session.getPlayerInventory().getItemInHand(hand).is(Items.NAME_TAG)) { // Java Edition returns SUCCESS if in spectator mode, but this is overridden with an earlier check on the client return InteractionResult.CONSUME; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java index 58a349cc9..8cbed6373 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java @@ -54,7 +54,7 @@ public class IronGolemEntity extends GolemEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.IRON_INGOT) { + if (itemInHand.is(Items.IRON_INGOT)) { if (health < maxHealth) { // Healing the iron golem return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java index 64ceff2bb..d6c00f694 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java @@ -85,7 +85,7 @@ public class MobEntity extends LivingEntity implements Leashable { return InteractiveTag.REMOVE_LEASH; } else { GeyserItemStack itemStack = session.getPlayerInventory().getItemInHand(hand); - if (itemStack.asItem() == Items.NAME_TAG) { + if (itemStack.is(Items.NAME_TAG)) { InteractionResult result = checkInteractWithNameTag(itemStack); if (result.consumesAction()) { return InteractiveTag.NAME; @@ -137,7 +137,7 @@ public class MobEntity extends LivingEntity implements Leashable { } private InteractionResult checkPriorityInteractions(GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.NAME_TAG) { + if (itemInHand.is(Items.NAME_TAG)) { InteractionResult result = checkInteractWithNameTag(itemInHand); if (result.consumesAction()) { return result; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java index 50aa7b90e..f766cd402 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java @@ -54,7 +54,7 @@ public class SnowGolemEntity extends GolemEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (Items.SHEARS == itemInHand.asItem() && isAlive() && !getFlag(EntityFlag.SHEARED)) { + if (itemInHand.is(Items.SHEARS) && isAlive() && !getFlag(EntityFlag.SHEARED)) { // Shearing the snow golem return InteractiveTag.SHEAR; } @@ -64,7 +64,7 @@ public class SnowGolemEntity extends GolemEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (Items.SHEARS == itemInHand.asItem() && isAlive() && !getFlag(EntityFlag.SHEARED)) { + if (itemInHand.is(Items.SHEARS) && isAlive() && !getFlag(EntityFlag.SHEARED)) { // Shearing the snow golem return InteractionResult.SUCCESS; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java index b954bb7a5..02d7c62de 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java @@ -77,7 +77,7 @@ public class GoatEntity extends AnimalEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (!getFlag(EntityFlag.BABY) && itemInHand.asItem() == Items.BUCKET) { + if (!getFlag(EntityFlag.BABY) && itemInHand.is(Items.BUCKET)) { session.playSoundEvent(isScreamer ? SoundEvent.MILK_SCREAMER : SoundEvent.MILK, position); return InteractionResult.SUCCESS; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java index 69a1be981..309fa9cf1 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HappyGhastEntity.java @@ -127,7 +127,7 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { // Harnesses the ghast return InteractiveTag.EQUIP_HARNESS; } - } else if (itemInHand.asItem() == Items.SHEARS) { + } else if (itemInHand.is(Items.SHEARS)) { if (this.canShearEquipment() && !session.isSneaking()) { // Shears the harness off of the ghast return InteractiveTag.REMOVE_HARNESS; @@ -156,7 +156,7 @@ public class HappyGhastEntity extends AnimalEntity implements ClientVehicle { // Harnesses the ghast return InteractionResult.SUCCESS; } - } else if (itemInHand.asItem() == Items.SHEARS) { + } else if (itemInHand.is(Items.SHEARS)) { if (this.canShearEquipment() && !session.isSneaking()) { // Shears the harness off of the ghast return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java index 03c744a1a..78f2ea025 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java @@ -63,10 +63,10 @@ public class MooshroomEntity extends CowEntity { @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!isBaby()) { - if (itemInHand.asItem() == Items.BOWL) { + if (itemInHand.is(Items.BOWL)) { // Stew return InteractiveTag.MOOSHROOM_MILK_STEW; - } else if (isAlive() && itemInHand.asItem() == Items.SHEARS) { + } else if (isAlive() && itemInHand.is(Items.SHEARS)) { // Shear items return InteractiveTag.MOOSHROOM_SHEAR; } @@ -78,10 +78,10 @@ public class MooshroomEntity extends CowEntity { @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean isBaby = isBaby(); - if (!isBaby && itemInHand.asItem() == Items.BOWL) { + if (!isBaby && itemInHand.is(Items.BOWL)) { // Stew return InteractionResult.SUCCESS; - } else if (!isBaby && isAlive() && itemInHand.asItem() == Items.SHEARS) { + } else if (!isBaby && isAlive() && itemInHand.is(Items.SHEARS)) { // Shear items return InteractionResult.SUCCESS; } else if (isBrown && itemInHand.is(session, ItemTag.SMALL_FLOWERS)) { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java index e26b0be61..35863071c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java @@ -68,7 +68,7 @@ public class SheepEntity extends AnimalEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SHEARS) { + if (itemInHand.is(Items.SHEARS)) { return InteractiveTag.SHEAR; } else { InteractiveTag tag = super.testMobInteraction(hand, itemInHand); @@ -86,7 +86,7 @@ public class SheepEntity extends AnimalEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SHEARS) { + if (itemInHand.is(Items.SHEARS)) { return InteractionResult.CONSUME; } else { InteractionResult superResult = super.mobInteract(hand, itemInHand); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java index de79e9a52..8c1a27b95 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java @@ -54,7 +54,7 @@ public class CowEntity extends TemperatureVariantAnimal { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (getFlag(EntityFlag.BABY) || itemInHand.asItem() != Items.BUCKET) { + if (getFlag(EntityFlag.BABY) || !itemInHand.is(Items.BUCKET)) { return super.testMobInteraction(hand, itemInHand); } @@ -64,7 +64,7 @@ public class CowEntity extends TemperatureVariantAnimal { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (getFlag(EntityFlag.BABY) || itemInHand.asItem() != Items.BUCKET) { + if (getFlag(EntityFlag.BABY) || !itemInHand.is(Items.BUCKET)) { return super.mobInteract(hand, itemInHand); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java index 8b0e77c73..65e2ed051 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java @@ -165,7 +165,7 @@ public class AbstractHorseEntity extends AnimalEntity { return InteractiveTag.ATTACH_CHEST; } - if (additionalTestForInventoryOpen(itemInHand) || !isBaby && !getFlag(EntityFlag.SADDLED) && itemInHand.asItem() == Items.SADDLE) { + if (additionalTestForInventoryOpen(itemInHand) || !isBaby && !getFlag(EntityFlag.SADDLED) && itemInHand.is(Items.SADDLE)) { // Will open the inventory to be saddled return InteractiveTag.OPEN_CONTAINER; } @@ -221,7 +221,7 @@ public class AbstractHorseEntity extends AnimalEntity { } // Note: yes, this code triggers for llamas too. lol (as of Java Edition 1.18.1) - if (additionalTestForInventoryOpen(itemInHand) || (!isBaby && !getFlag(EntityFlag.SADDLED) && itemInHand.asItem() == Items.SADDLE)) { + if (additionalTestForInventoryOpen(itemInHand) || (!isBaby && !getFlag(EntityFlag.SADDLED) && itemInHand.is(Items.SADDLE))) { // Will open the inventory to be saddled return InteractionResult.SUCCESS; } @@ -245,6 +245,7 @@ public class AbstractHorseEntity extends AnimalEntity { } protected boolean additionalTestForInventoryOpen(@NonNull GeyserItemStack itemInHand) { + // TODO this doesn't seem right anymore... (as of Java 1.21.9) return itemInHand.asItem().javaIdentifier().endsWith("_horse_armor"); } @@ -260,7 +261,7 @@ public class AbstractHorseEntity extends AnimalEntity { } else if (!passengers.isEmpty()) { return testHorseInteraction(hand, itemInHand); } else { - if (Items.SADDLE == itemInHand.asItem()) { + if (itemInHand.is(Items.SADDLE)) { return InteractiveTag.OPEN_CONTAINER; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java index fc8584de3..491ca02df 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java @@ -54,7 +54,7 @@ public class ChestedHorseEntity extends AbstractHorseEntity { @Override protected boolean testForChest(@NonNull GeyserItemStack itemInHand) { - return itemInHand.asItem() == Items.CHEST && !getFlag(EntityFlag.CHESTED); + return itemInHand.is(Items.CHEST) && !getFlag(EntityFlag.CHESTED); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java index d6484a028..ef6121456 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java @@ -52,11 +52,11 @@ public class ParrotEntity extends TameableEntity { return null; } - private boolean isTameFood(Item item) { + private boolean isTameFood(GeyserItemStack item) { return item.is(session, ItemTag.PARROT_FOOD); } - private boolean isPoisonousFood(Item item) { + private boolean isPoisonousFood(GeyserItemStack item) { return item.is(session, ItemTag.PARROT_POISONOUS_FOOD); } @@ -64,9 +64,9 @@ public class ParrotEntity extends TameableEntity { @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean tame = getFlag(EntityFlag.TAMED); - if (!tame && isTameFood(itemInHand.asItem())) { + if (!tame && isTameFood(itemInHand)) { return InteractiveTag.FEED; - } else if (isPoisonousFood(itemInHand.asItem())) { + } else if (isPoisonousFood(itemInHand)) { return InteractiveTag.FEED; } else if (onGround && tame && ownerBedrockId == session.getPlayerEntity().getGeyserId()) { // Sitting/standing @@ -79,9 +79,9 @@ public class ParrotEntity extends TameableEntity { @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean tame = getFlag(EntityFlag.TAMED); - if (!tame && isTameFood(itemInHand.asItem())) { + if (!tame && isTameFood(itemInHand)) { return InteractionResult.SUCCESS; - } else if (isPoisonousFood(itemInHand.asItem())) { + } else if (isPoisonousFood(itemInHand)) { return InteractionResult.SUCCESS; } else if (onGround && tame && ownerBedrockId == session.getPlayerEntity().getGeyserId()) { // Sitting/standing diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java index 8730ddc24..bc3963ac8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java @@ -147,7 +147,7 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder { if (getFlag(EntityFlag.ANGRY)) { return InteractiveTag.NONE; } - if (itemInHand.asItem() == Items.BONE && !getFlag(EntityFlag.TAMED)) { + if (itemInHand.is(Items.BONE) && !getFlag(EntityFlag.TAMED)) { // Bone and untamed - can tame return InteractiveTag.TAME; } @@ -160,10 +160,10 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder { return super.testMobInteraction(hand, itemInHand); } } - if (itemInHand.asItem() == Items.WOLF_ARMOR && !getItemInSlot(EquipmentSlot.BODY).isEmpty() && !getFlag(EntityFlag.BABY)) { + if (itemInHand.is(Items.WOLF_ARMOR) && !getItemInSlot(EquipmentSlot.BODY).isEmpty() && !getFlag(EntityFlag.BABY)) { return InteractiveTag.EQUIP_WOLF_ARMOR; } - if (itemInHand.asItem() == Items.SHEARS && !getItemInSlot(EquipmentSlot.BODY).isEmpty() + if (itemInHand.is(Items.SHEARS) && !getItemInSlot(EquipmentSlot.BODY).isEmpty() && (!isCurseOfBinding || session.getGameMode().equals(GameMode.CREATIVE))) { return InteractiveTag.REMOVE_WOLF_ARMOR; } @@ -181,7 +181,7 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder { @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (ownerBedrockId == session.getPlayerEntity().getGeyserId() || getFlag(EntityFlag.TAMED) - || itemInHand.asItem() == Items.BONE && !getFlag(EntityFlag.ANGRY)) { + || itemInHand.is(Items.BONE) && !getFlag(EntityFlag.ANGRY)) { // Sitting toggle or feeding; not angry return InteractionResult.CONSUME; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java index 2492aabd7..ecc517489 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java @@ -54,7 +54,7 @@ public class AbstractMerchantEntity extends AgeableEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() != Items.VILLAGER_SPAWN_EGG + if (!itemInHand.is(Items.VILLAGER_SPAWN_EGG) && (definition != EntityDefinitions.VILLAGER || !getFlag(EntityFlag.SLEEPING) && ((VillagerEntity) this).isCanTradeWith())) { // An additional check we know cannot work if (!isBaby()) { @@ -67,7 +67,7 @@ public class AbstractMerchantEntity extends AgeableEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() != Items.VILLAGER_SPAWN_EGG + if (!itemInHand.is(Items.VILLAGER_SPAWN_EGG) && (definition != EntityDefinitions.VILLAGER || !getFlag(EntityFlag.SLEEPING)) && (definition != EntityDefinitions.WANDERING_TRADER || !getFlag(EntityFlag.BABY))) { // Trading time diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BoggedEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BoggedEntity.java index 806d58ed1..c4d8eeff3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BoggedEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BoggedEntity.java @@ -53,7 +53,7 @@ public class BoggedEntity extends AbstractSkeletonEntity { @Override protected @NonNull InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SHEARS && readyForShearing()) { + if (itemInHand.is(Items.SHEARS) && readyForShearing()) { return InteractiveTag.SHEAR; } return super.testMobInteraction(hand, itemInHand); @@ -61,7 +61,7 @@ public class BoggedEntity extends AbstractSkeletonEntity { @Override protected @NonNull InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SHEARS && readyForShearing()) { + if (itemInHand.is(Items.SHEARS) && readyForShearing()) { return InteractionResult.SUCCESS; } return super.mobInteract(hand, itemInHand); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java index d98cbb182..b35e6a17f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java @@ -35,7 +35,6 @@ import org.cloudburstmc.protocol.bedrock.packet.MobEquipmentPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; -import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; import org.geysermc.geyser.util.InteractionResult; @@ -72,8 +71,7 @@ public class PiglinEntity extends BasePiglinEntity { @Override public void setHand(GeyserItemStack stack) { - ItemMapping crossbow = session.getItemMappings().getStoredItems().crossbow(); - boolean toCrossbow = stack != null && stack.asItem() == crossbow.getJavaItem(); + boolean toCrossbow = stack != null && stack.is(Items.CROSSBOW); if (toCrossbow ^ getMainHandItem().is(Items.CROSSBOW)) { // If switching to/from crossbow dirtyMetadata.put(EntityDataTypes.BLOCK, session.getBlockMappings().getDefinition(toCrossbow ? 0 : 1)); @@ -148,6 +146,6 @@ public class PiglinEntity extends BasePiglinEntity { } private boolean canGiveGoldTo(@NonNull GeyserItemStack itemInHand) { - return !getFlag(EntityFlag.BABY) && itemInHand.asItem() == Items.GOLD_INGOT && !getFlag(EntityFlag.ADMIRING); + return !getFlag(EntityFlag.BABY) && itemInHand.is(Items.GOLD_INGOT) && !getFlag(EntityFlag.ADMIRING); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java index 6e03e4f98..e09568102 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java @@ -70,7 +70,7 @@ public class ZombieVillagerEntity extends ZombieEntity { @NonNull @Override protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.GOLDEN_APPLE) { + if (itemInHand.is(Items.GOLDEN_APPLE)) { return InteractiveTag.CURE; } else { return super.testMobInteraction(hand, itemInHand); @@ -80,7 +80,7 @@ public class ZombieVillagerEntity extends ZombieEntity { @NonNull @Override protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.GOLDEN_APPLE) { + if (itemInHand.is(Items.GOLDEN_APPLE)) { // The client doesn't know if the entity has weakness as that's not usually sent over the network return InteractionResult.CONSUME; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java index 7867fdcf6..a60dd0b78 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java @@ -322,9 +322,9 @@ public class SessionPlayerEntity extends PlayerEntity { protected boolean hasShield(boolean offhand) { // Must be overridden to point to the player's inventory cache if (offhand) { - return session.getPlayerInventory().getOffhand().asItem() == Items.SHIELD; + return session.getPlayerInventory().getOffhand().is(Items.SHIELD); } else { - return session.getPlayerInventory().getItemInHand().asItem() == Items.SHIELD; + return session.getPlayerInventory().getItemInHand().is(Items.SHIELD); } } @@ -539,7 +539,7 @@ public class SessionPlayerEntity extends PlayerEntity { } // Bedrock will NOT allow flight when not wearing an elytra; even if it doesn't have a glider component - if (entry.getKey() == EquipmentSlot.CHESTPLATE && !entry.getValue().asItem().equals(Items.ELYTRA)) { + if (entry.getKey() == EquipmentSlot.CHESTPLATE && !entry.getValue().is(Items.ELYTRA)) { return false; } } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java index e40a76bee..0de4580aa 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -130,6 +130,10 @@ public class GeyserItemStack { return session.getTagCache().is(set, JavaRegistries.ITEM, javaId); } + public boolean isSameItem(GeyserItemStack other) { + return javaId == other.javaId; + } + /** * Returns all components of this item - base and additional components sent over the network. * These are NOT modifiable! To add components, use {@link #getOrCreateComponents()}. @@ -263,6 +267,10 @@ public class GeyserItemStack { return new ItemStackSlotDisplay(this.getItemStack()); } + public int getMaxStackSize() { + return getComponentElseGet(DataComponentTypes.MAX_STACK_SIZE, () -> 1); + } + public int getMaxDamage() { return getComponentElseGet(DataComponentTypes.MAX_DAMAGE, () -> 0); } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java index 2d8b0e351..414ad2951 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -148,7 +148,7 @@ public abstract class Inventory { items[slot] = newItem; // Lodestone caching - if (newItem.asItem() == Items.COMPASS) { + if (newItem.is(Items.COMPASS)) { var tracker = newItem.getComponent(DataComponentTypes.LODESTONE_TRACKER); if (tracker != null) { session.getLodestoneCache().cacheInventoryItem(newItem, tracker); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java index afc9a57b2..72b98a6b5 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java @@ -71,7 +71,7 @@ public class PlayerInventory extends Inventory { * @return If the player is holding the item in either hand */ public boolean isHolding(@NonNull Item item) { - return getItemInHand().asItem() == item || getOffhand().asItem() == item; + return getItemInHand().is(item) || getOffhand().is(item); } public GeyserItemStack getItemInHand(@NonNull Hand hand) { @@ -98,10 +98,6 @@ public class PlayerInventory extends Inventory { ); } - public boolean eitherHandMatchesItem(@NonNull Item item) { - return getItemInHand().asItem() == item || getItemInHand(Hand.OFF_HAND).asItem() == item; - } - public void setItemInHand(@NonNull GeyserItemStack item) { if (36 + heldItemSlot > this.size) { GeyserImpl.getInstance().getLogger().debug("Held item slot was larger than expected!"); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java index e9d884cdd..8a33db7d2 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java @@ -45,7 +45,7 @@ public class StonecutterContainer extends Container { @Override public void setItem(int slot, @NonNull GeyserItemStack newItem, GeyserSession session) { - if (slot == 0 && newItem.getJavaId() != items[slot].getJavaId()) { + if (slot == 0 && !newItem.isSameItem(items[slot])) { // The pressed stonecutter button output resets whenever the input item changes this.stonecutterButton = -1; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java index 7c0b7b61a..89af5842b 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java @@ -223,7 +223,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { if (!material.isEmpty()) { totalRepairCost += getRepairCost(material); if (isCombining(input, material)) { - if (hasDurability(input) && input.getJavaId() == material.getJavaId()) { + if (hasDurability(input) && input.isSameItem(material)) { cost += calcMergeRepairCost(input, material); } @@ -388,11 +388,11 @@ public class AnvilInventoryUpdater extends InventoryUpdater { } private boolean isEnchantedBook(GeyserItemStack itemStack) { - return itemStack.asItem() == Items.ENCHANTED_BOOK; + return itemStack.is(Items.ENCHANTED_BOOK); } private boolean isCombining(GeyserItemStack input, GeyserItemStack material) { - return isEnchantedBook(material) || (input.getJavaId() == material.getJavaId() && hasDurability(input)); + return isEnchantedBook(material) || (input.isSameItem(material) && hasDurability(input)); } private boolean isRepairing(GeyserItemStack input, GeyserItemStack material, GeyserSession session) { diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index b900db84e..e155d2d56 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1449,9 +1449,9 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { return false; } - if (playerInventoryHolder.inventory().getItemInHand().asItem() == Items.SHIELD) { + if (playerInventoryHolder.inventory().getItemInHand().is(Items.SHIELD)) { useItem(Hand.MAIN_HAND); - } else if (playerInventoryHolder.inventory().getOffhand().asItem() == Items.SHIELD) { + } else if (playerInventoryHolder.inventory().getOffhand().is(Items.SHIELD)) { useItem(Hand.OFF_HAND); } else { // No blocking diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java index 90f22afd6..50b45a3a1 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java @@ -64,7 +64,7 @@ public class BookEditCache { } // Don't send the update if the player is not holding a book, shouldn't happen if we catch all interactions GeyserItemStack itemStack = session.getPlayerInventory().getItemInHand(); - if (itemStack == null || itemStack.asItem() != Items.WRITABLE_BOOK) { + if (itemStack == null || !itemStack.is(Items.WRITABLE_BOOK)) { packet = null; return; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java index ea9adba98..6abd7025d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BundleInventoryTranslator.java @@ -314,7 +314,7 @@ public final class BundleInventoryTranslator { return Fraction.ONE; } } - return Fraction.getFraction(1, itemStack.getComponentElseGet(DataComponentTypes.MAX_STACK_SIZE, () -> itemStack.asItem().defaultMaxStackSize())); + return Fraction.getFraction(1, itemStack.getMaxStackSize()); } public static int capacityForItemStack(Fraction bundleWeight, GeyserItemStack itemStack) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java index 8d182f923..5c66288fc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java @@ -46,11 +46,11 @@ public class CartographyInventoryTranslator extends AbstractBlockInventoryTransl if (javaDestinationSlot == 0) { // Bedrock Edition can use paper or an empty map in slot 0 GeyserItemStack itemStack = javaSourceSlot == -1 ? session.getPlayerInventory().getCursor() : container.getItem(javaSourceSlot); - return itemStack.asItem() == Items.PAPER || itemStack.asItem() == Items.MAP; + return itemStack.is(Items.PAPER) || itemStack.is(Items.MAP); } else if (javaDestinationSlot == 1) { // Bedrock Edition can use a compass to create locator maps, or use a filled map, in the ADDITIONAL slot GeyserItemStack itemStack = javaSourceSlot == -1 ? session.getPlayerInventory().getCursor() : container.getItem(javaSourceSlot); - return itemStack.asItem() == Items.COMPASS || itemStack.asItem() == Items.FILLED_MAP; + return itemStack.is(Items.COMPASS) || itemStack.is(Items.FILLED_MAP); } return false; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java index baf53487d..0c08c8df1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java @@ -329,8 +329,7 @@ public abstract class InventoryTranslator { if (destSlot == 5) { // only set the head if the destination is the head slot GeyserItemStack javaItem = inventory.getItem(sourceSlot); - if (javaItem.asItem() == Items.PLAYER_HEAD - && javaItem.hasNonBaseComponents()) { + if (javaItem.is(Items.PLAYER_HEAD) && javaItem.hasNonBaseComponents()) { FakeHeadProvider.setHead(session, session.getPlayerEntity(), javaItem.getComponent(DataComponentTypes.PROFILE)); } } else if (sourceSlot == 5) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index d353e1fac..fb2880fb4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -108,10 +108,8 @@ public class PlayerInventoryTranslator extends InventoryTranslator 1) { - if (itemStack.asItem() == Items.BUCKET || itemStack.asItem() == Items.GLASS_BOTTLE) { + if (itemStack.is(Items.BUCKET) || itemStack.is(Items.GLASS_BOTTLE)) { // Using a stack of buckets or glass bottles will result in an item being added to the first empty slot. // We need to revert the item in case the interaction fails. The order goes from left to right in the // hotbar. Then left to right and top to bottom in the inventory. diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java index 64681723e..137092f7a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java @@ -61,7 +61,7 @@ public class BedrockMobEquipmentTranslator extends PacketTranslator switch (packet.getAction()) { case INTERACT: - if (session.getPlayerInventory().getItemInHand().asItem() == Items.SHIELD) { + if (session.getPlayerInventory().getItemInHand().is(Items.SHIELD)) { break; } ServerboundInteractPacket interactPacket = new ServerboundInteractPacket(entity.getEntityId(), diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index 82a90bba3..f11d7d9a2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -171,7 +171,7 @@ public class JavaEntityEventTranslator extends PacketTranslator { ResolvableProfile profile = stack.getComponent(DataComponentTypes.PROFILE); - if (livingEntity instanceof PlayerEntity && stack.asItem() == Items.PLAYER_HEAD && profile != null) { + if (livingEntity instanceof PlayerEntity && stack.is(Items.PLAYER_HEAD) && profile != null) { FakeHeadProvider.setHead(session, (PlayerEntity) livingEntity, profile); } else { FakeHeadProvider.restoreOriginalSkin(session, livingEntity); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 5368a6bb4..dfbdc4091 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -234,7 +234,7 @@ public class JavaContainerSetSlotTranslator extends PacketTranslator { GeyserItemStack template = inventory.getItem(SmithingInventoryTranslator.TEMPLATE); - if (template.asItem() != Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE) { + if (!template.is(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE)) { // Technically we should probably also do this for custom items, but last I checked Bedrock doesn't even support that. return; } diff --git a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java index b6d73b12c..915db8b3a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -297,14 +297,14 @@ public final class EntityUtils { * Determine if an action would result in a successful bucketing of the given entity. */ public static boolean attemptToBucket(GeyserItemStack itemInHand) { - return itemInHand.asItem() == Items.WATER_BUCKET; + return itemInHand.is(Items.WATER_BUCKET); } /** * Attempt to determine the result of saddling the given entity. */ public static InteractionResult attemptToSaddle(Entity entityToSaddle, GeyserItemStack itemInHand) { - if (itemInHand.asItem() == Items.SADDLE) { + if (itemInHand.is(Items.SADDLE)) { if (!entityToSaddle.getFlag(EntityFlag.SADDLED) && !entityToSaddle.getFlag(EntityFlag.BABY)) { // Saddle return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java index df8a3a097..bc23994cd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -266,7 +266,7 @@ public class InventoryUtils { canStackDebug(item1, item2); if (item1.isEmpty() || item2.isEmpty()) return false; - return item1.getJavaId() == item2.getJavaId() && Objects.equals(item1.getComponents(), item2.getComponents()); + return item1.isSameItem(item2) && Objects.equals(item1.getComponents(), item2.getComponents()); } private static void canStackDebug(GeyserItemStack item1, GeyserItemStack item2) {