Update to support MCProtocolLib entity metadata changes

This commit is contained in:
RednedEpic 2021-11-20 13:25:21 -06:00
parent f797f84878
commit 1e0b312d9d
71 changed files with 301 additions and 324 deletions

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.type.EntityType;
import com.nukkitx.math.vector.Vector3f;
@ -45,8 +44,8 @@ public class AbstractArrowEntity extends Entity {
setMotion(motion);
}
public void setArrowFlags(EntityMetadata<Byte> entityMetadata) {
byte data = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setArrowFlags(ByteEntityMetadata entityMetadata) {
byte data = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.CRITICAL, (data & 0x01) == 0x01);
}

View File

@ -56,13 +56,13 @@ public class AreaEffectCloudEntity extends Entity {
setFlag(EntityFlag.FIRE_IMMUNE, true);
}
public void setRadius(EntityMetadata<Float> entityMetadata) {
float value = ((FloatEntityMetadata) entityMetadata).getPrimitiveValue();
public void setRadius(FloatEntityMetadata entityMetadata) {
float value = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.AREA_EFFECT_CLOUD_RADIUS, value);
dirtyMetadata.put(EntityData.BOUNDING_BOX_WIDTH, 2.0f * value);
}
public void setParticle(EntityMetadata<Particle> entityMetadata) {
public void setParticle(EntityMetadata<Particle, ?> entityMetadata) {
Particle particle = entityMetadata.getValue();
int particleId = EffectUtils.getParticleId(session, particle.getType());
if (particleId != -1) {

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
@ -114,13 +113,13 @@ public class BoatEntity extends Entity {
moveRelative(0, 0, 0, yaw + 90, 0, 0, isOnGround);
}
public void setVariant(EntityMetadata<Integer> entityMetadata) {
variant = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setVariant(IntEntityMetadata entityMetadata) {
variant = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.VARIANT, variant);
}
public void setPaddlingLeft(EntityMetadata<Boolean> entityMetadata) {
isPaddlingLeft = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setPaddlingLeft(BooleanEntityMetadata entityMetadata) {
isPaddlingLeft = entityMetadata.getPrimitiveValue();
if (isPaddlingLeft) {
// Java sends simply "true" and "false" (is_paddling_left), Bedrock keeps sending packets as you're rowing
// This is an asynchronous method that emulates Bedrock rowing until "false" is sent.
@ -138,8 +137,8 @@ public class BoatEntity extends Entity {
}
}
public void setPaddlingRight(EntityMetadata<Boolean> entityMetadata) {
isPaddlingRight = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setPaddlingRight(BooleanEntityMetadata entityMetadata) {
isPaddlingRight = entityMetadata.getPrimitiveValue();
if (isPaddlingRight) {
paddleTimeRight = 0f;
if (!this.passengers.isEmpty()) {

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
@ -56,7 +55,7 @@ public class DefaultBlockMinecartEntity extends MinecartEntity {
}
@Override
public void setCustomBlock(EntityMetadata<Integer> entityMetadata) {
public void setCustomBlock(IntEntityMetadata entityMetadata) {
customBlock = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
if (showCustomBlock) {
@ -65,8 +64,8 @@ public class DefaultBlockMinecartEntity extends MinecartEntity {
}
@Override
public void setCustomBlockOffset(EntityMetadata<Integer> entityMetadata) {
customBlockOffset = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setCustomBlockOffset(IntEntityMetadata entityMetadata) {
customBlockOffset = entityMetadata.getPrimitiveValue();
if (showCustomBlock) {
dirtyMetadata.put(EntityData.DISPLAY_OFFSET, customBlockOffset);
@ -74,8 +73,8 @@ public class DefaultBlockMinecartEntity extends MinecartEntity {
}
@Override
public void setShowCustomBlock(EntityMetadata<Boolean> entityMetadata) {
if (((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()) {
public void setShowCustomBlock(BooleanEntityMetadata entityMetadata) {
if (entityMetadata.getPrimitiveValue()) {
showCustomBlock = true;
dirtyMetadata.put(EntityData.DISPLAY_ITEM, session.getBlockMappings().getBedrockBlockId(customBlock));
dirtyMetadata.put(EntityData.DISPLAY_OFFSET, customBlockOffset);

View File

@ -33,6 +33,7 @@ import com.nukkitx.protocol.bedrock.data.entity.EntityData;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
import org.geysermc.connector.network.session.GeyserSession;
import java.util.Optional;
import java.util.UUID;
public class EnderCrystalEntity extends Entity {
@ -48,12 +49,13 @@ public class EnderCrystalEntity extends Entity {
setFlag(EntityFlag.FIRE_IMMUNE, true);
}
public void setBlockTarget(EntityMetadata<Position> entityMetadata) {
public void setBlockTarget(EntityMetadata<Optional<Position>, ?> entityMetadata) {
// Show beam
// Usually performed client-side on Bedrock except for Ender Dragon respawn event
Position position = entityMetadata.getValue();
if (position != null) {
dirtyMetadata.put(EntityData.BLOCK_TARGET, Vector3i.from(position.getX(), position.getY(), position.getZ()));
Optional<Position> optionalPos = entityMetadata.getValue();
if (optionalPos.isPresent()) {
Position pos = optionalPos.get();
dirtyMetadata.put(EntityData.BLOCK_TARGET, Vector3i.from(pos.getX(), pos.getY(), pos.getZ()));
} else {
dirtyMetadata.put(EntityData.BLOCK_TARGET, Vector3i.ZERO);
}

View File

@ -47,6 +47,7 @@ import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.chat.MessageTranslator;
import org.geysermc.connector.utils.MathUtils;
import java.util.Optional;
import java.util.UUID;
@Getter
@ -120,7 +121,7 @@ public class Entity {
this.valid = false;
setPosition(position);
setAir(getMaxAir());
setAirSupply(getMaxAir());
initializeMetadata();
}
@ -304,8 +305,8 @@ public class Entity {
}
}
public void setFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.ON_FIRE, ((xd & 0x01) == 0x01) && !getFlag(EntityFlag.FIRE_IMMUNE)); // Otherwise immune entities sometimes flicker onfire
setFlag(EntityFlag.SNEAKING, (xd & 0x02) == 0x02);
setFlag(EntityFlag.SPRINTING, (xd & 0x08) == 0x08);
@ -327,11 +328,11 @@ public class Entity {
/**
* Set an int from 0 - this entity's maximum air - (air / maxAir) represents the percentage of bubbles left
*/
public final void setAir(EntityMetadata<?> entityMetadata) {
setAir(((IntEntityMetadata) entityMetadata).getPrimitiveValue());
public final void setAir(IntEntityMetadata entityMetadata) {
setAirSupply(entityMetadata.getPrimitiveValue());
}
protected void setAir(int amount) {
protected void setAirSupply(int amount) {
dirtyMetadata.put(EntityData.AIR_SUPPLY, (short) MathUtils.constrain(amount, 0, getMaxAir()));
}
@ -339,10 +340,10 @@ public class Entity {
return 300;
}
public void setDisplayName(EntityMetadata<Component> entityMetadata) {
Component name = entityMetadata.getValue();
if (name != null) {
nametag = MessageTranslator.convertMessage(name, session.getLocale());
public void setDisplayName(EntityMetadata<Optional<Component>, ?> entityMetadata) {
Optional<Component> name = entityMetadata.getValue();
if (name.isPresent()) {
nametag = MessageTranslator.convertMessage(name.get(), session.getLocale());
dirtyMetadata.put(EntityData.NAMETAG, nametag);
} else if (!nametag.isEmpty()) {
// Clear nametag
@ -350,18 +351,18 @@ public class Entity {
}
}
public void setDisplayNameVisible(EntityMetadata<Boolean> entityMetadata) {
dirtyMetadata.put(EntityData.NAMETAG_ALWAYS_SHOW, (byte) (((BooleanEntityMetadata) entityMetadata).getPrimitiveValue() ? 1 : 0));
public void setDisplayNameVisible(BooleanEntityMetadata entityMetadata) {
dirtyMetadata.put(EntityData.NAMETAG_ALWAYS_SHOW, (byte) (entityMetadata.getPrimitiveValue() ? 1 : 0));
}
public void setGravity(EntityMetadata<Boolean> entityMetadata) {
setFlag(EntityFlag.HAS_GRAVITY, !((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
public void setGravity(BooleanEntityMetadata entityMetadata) {
setFlag(EntityFlag.HAS_GRAVITY, !entityMetadata.getPrimitiveValue());
}
/**
* Usually used for bounding box and not animation.
*/
public void setPose(EntityMetadata<Pose> entityMetadata) {
public void setPose(EntityMetadata<Pose, ?> entityMetadata) {
Pose pose = entityMetadata.getValue();
setFlag(EntityFlag.SLEEPING, pose.equals(Pose.SLEEPING));
@ -396,7 +397,7 @@ public class Entity {
/**
* Set a float from 0-1 - how strong the "frozen" overlay should be on screen.
*/
public float setFreezing(EntityMetadata<Integer> entityMetadata) {
public float setFreezing(IntEntityMetadata entityMetadata) {
// The value that Java edition gives us is in ticks, but Bedrock uses a float percentage of the strength 0.0 -> 1.0
// The Java client caps its freezing tick percentage at 140
int freezingTicks = Math.min(((IntEntityMetadata) entityMetadata).getPrimitiveValue(), 140);

View File

@ -31,6 +31,7 @@ import com.github.steveice10.mc.protocol.data.game.entity.type.EntityType;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.entity.factory.BaseEntityFactory;
import org.geysermc.connector.entity.factory.EntityFactory;
import org.geysermc.connector.registry.Registries;
@ -47,7 +48,7 @@ import java.util.function.BiConsumer;
* @param <T> the entity type this definition represents
*/
public record EntityDefinition<T extends Entity>(EntityFactory<T> factory, EntityType entityType, String identifier,
float width, float height, float offset, List<EntityMetadataTranslator<? super T, ?>> translators) {
float width, float height, float offset, List<EntityMetadataTranslator<? super T, ?, ?>> translators) {
public static <T extends Entity> Builder<T> inherited(BaseEntityFactory<T> factory, EntityDefinition<? super T> parent) {
return inherited((EntityFactory<T>) factory, parent);
@ -61,6 +62,25 @@ public record EntityDefinition<T extends Entity>(EntityFactory<T> factory, Entit
return new Builder<>(factory);
}
public <M> void translateMetadata(T entity, EntityMetadata<M, ? extends MetadataType<M>> metadata) {
EntityMetadataTranslator<? super T, M, EntityMetadata<M, ? extends MetadataType<M>>> translator = (EntityMetadataTranslator<? super T, M, EntityMetadata<M, ? extends MetadataType<M>>>) this.translators.get(metadata.getId());
if (translator == null) {
// This can safely happen; it means we don't translate this entity metadata
return;
}
if (translator.acceptedType() != metadata.getType()) {
GeyserConnector.getInstance().getLogger().warning("Metadata ID " + metadata.getId() + " was received with type " + metadata.getType() + " but we expected " + translator.acceptedType() + " for " + entity.getDefinition().entityType());
if (GeyserConnector.getInstance().getConfig().isDebugMode()) {
GeyserConnector.getInstance().getLogger().debug(metadata.toString());
}
return;
}
translator.translateFunction().accept(entity, metadata);
}
@Setter
@Accessors(fluent = true, chain = true)
public static class Builder<T extends Entity> {
@ -70,14 +90,14 @@ public record EntityDefinition<T extends Entity>(EntityFactory<T> factory, Entit
private float width;
private float height;
private float offset;
private final List<EntityMetadataTranslator<? super T, ?>> translators;
private final List<EntityMetadataTranslator<? super T, ?, ?>> translators;
private Builder(EntityFactory<T> factory) {
this.factory = factory;
translators = new ObjectArrayList<>();
}
public Builder(EntityFactory<T> factory, EntityType type, String identifier, float width, float height, float offset, List<EntityMetadataTranslator<? super T, ?>> translators) {
public Builder(EntityFactory<T> factory, EntityType type, String identifier, float width, float height, float offset, List<EntityMetadataTranslator<? super T, ?, ?>> translators) {
this.factory = factory;
this.type = type;
this.identifier = identifier;
@ -105,12 +125,12 @@ public record EntityDefinition<T extends Entity>(EntityFactory<T> factory, Entit
return this;
}
public <U> Builder<T> addTranslator(MetadataType type, BiConsumer<T, EntityMetadata<U>> translateFunction) {
public <U, EM extends EntityMetadata<U, ? extends MetadataType<U>>> Builder<T> addTranslator(MetadataType<U> type, BiConsumer<T, EM> translateFunction) {
translators.add(new EntityMetadataTranslator<>(type, translateFunction));
return this;
}
public Builder<T> addTranslator(EntityMetadataTranslator<T, ?> translator) {
public Builder<T> addTranslator(EntityMetadataTranslator<T, ?, ?> translator) {
translators.add(translator);
return this;
}

View File

@ -31,7 +31,6 @@ import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.FloatEnt
import com.github.steveice10.mc.protocol.data.game.entity.type.EntityType;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
import net.kyori.adventure.text.Component;
import org.geysermc.connector.entity.factory.BaseEntityFactory;
import org.geysermc.connector.entity.factory.ExperienceOrbEntityFactory;
import org.geysermc.connector.entity.factory.PaintingEntityFactory;
@ -182,7 +181,7 @@ public final class EntityDefinitions {
.addTranslator(MetadataType.INT, Entity::setAir) // Air/bubbles
.addTranslator(MetadataType.OPTIONAL_CHAT, Entity::setDisplayName)
.addTranslator(MetadataType.BOOLEAN, Entity::setDisplayNameVisible)
.<Boolean>addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.SILENT, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.SILENT, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, Entity::setGravity)
.addTranslator(MetadataType.POSE, Entity::setPose)
.addTranslator(MetadataType.INT, Entity::setFreezing)
@ -204,7 +203,7 @@ public final class EntityDefinitions {
.offset(0.35f)
.addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityData.HURT_TIME, entityMetadata.getValue())) // Time since last hit
.addTranslator(MetadataType.INT, (boatEntity, entityMetadata) -> boatEntity.getDirtyMetadata().put(EntityData.HURT_DIRECTION, entityMetadata.getValue())) // Rocking direction
.<Float>addTranslator(MetadataType.FLOAT, (boatEntity, entityMetadata) ->
.addTranslator(MetadataType.FLOAT, (boatEntity, entityMetadata) ->
// 'Health' in Bedrock, damage taken in Java - it makes motion in Bedrock
boatEntity.getDirtyMetadata().put(EntityData.HEALTH, 40 - ((int) ((FloatEntityMetadata) entityMetadata).getPrimitiveValue())))
.addTranslator(MetadataType.INT, BoatEntity::setVariant)
@ -220,7 +219,7 @@ public final class EntityDefinitions {
.type(EntityType.END_CRYSTAL)
.heightAndWidth(2.0f)
.addTranslator(MetadataType.OPTIONAL_POSITION, EnderCrystalEntity::setBlockTarget)
.<Boolean>addTranslator(MetadataType.BOOLEAN,
.addTranslator(MetadataType.BOOLEAN,
(enderCrystalEntity, entityMetadata) -> enderCrystalEntity.setFlag(EntityFlag.SHOW_BOTTOM, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) // There is a base located on the ender crystal
.build();
EXPERIENCE_ORB = EntityDefinition.inherited((ExperienceOrbEntityFactory) ExpOrbEntity::new, entityBase)
@ -337,7 +336,7 @@ public final class EntityDefinitions {
.type(EntityType.TRIDENT)
.identifier("minecraft:thrown_trident")
.addTranslator(null) // Loyalty
.<Boolean>addTranslator(MetadataType.BOOLEAN, (tridentEntity, entityMetadata) -> tridentEntity.setFlag(EntityFlag.ENCHANTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, (tridentEntity, entityMetadata) -> tridentEntity.setFlag(EntityFlag.ENCHANTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.build();
// Item frames are handled differently as they are blocks, not items, in Bedrock
@ -356,7 +355,7 @@ public final class EntityDefinitions {
.offset(0.35f)
.addTranslator(MetadataType.INT, (minecartEntity, entityMetadata) -> minecartEntity.getDirtyMetadata().put(EntityData.HEALTH, entityMetadata.getValue()))
.addTranslator(MetadataType.INT, (minecartEntity, entityMetadata) -> minecartEntity.getDirtyMetadata().put(EntityData.HURT_DIRECTION, entityMetadata.getValue())) // Direction in which the minecart is shaking
.<Float>addTranslator(MetadataType.FLOAT, (minecartEntity, entityMetadata) ->
.addTranslator(MetadataType.FLOAT, (minecartEntity, entityMetadata) ->
// Power in Java, time in Bedrock
minecartEntity.getDirtyMetadata().put(EntityData.HURT_TIME, Math.min((int) ((FloatEntityMetadata) entityMetadata).getPrimitiveValue(), 15)))
.addTranslator(MetadataType.INT, MinecartEntity::setCustomBlock)
@ -371,7 +370,7 @@ public final class EntityDefinitions {
.type(EntityType.MINECART_COMMAND_BLOCK)
.identifier("minecraft:command_block_minecart")
.addTranslator(MetadataType.STRING, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityData.COMMAND_BLOCK_COMMAND, entityMetadata.getValue()))
.<Component>addTranslator(MetadataType.CHAT, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityData.COMMAND_BLOCK_LAST_OUTPUT, MessageTranslator.convertMessage(entityMetadata.getValue())))
.addTranslator(MetadataType.CHAT, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityData.COMMAND_BLOCK_LAST_OUTPUT, MessageTranslator.convertMessage(entityMetadata.getValue())))
.build();
MINECART_FURNACE = EntityDefinition.inherited(FurnaceMinecartEntity::new, MINECART)
.type(EntityType.MINECART_FURNACE)
@ -403,9 +402,9 @@ public final class EntityDefinitions {
EntityDefinition<LivingEntity> livingEntityBase = EntityDefinition.inherited(LivingEntity::new, entityBase)
.addTranslator(MetadataType.BYTE, LivingEntity::setLivingEntityFlags)
.addTranslator(MetadataType.FLOAT, LivingEntity::setHealth)
.<Float>addTranslator(MetadataType.INT,
.addTranslator(MetadataType.INT,
(livingEntity, entityMetadata) -> livingEntity.getDirtyMetadata().put(EntityData.EFFECT_COLOR, entityMetadata.getValue()))
.<Boolean>addTranslator(MetadataType.BOOLEAN,
.addTranslator(MetadataType.BOOLEAN,
(livingEntity, entityMetadata) -> livingEntity.getDirtyMetadata().put(EntityData.EFFECT_AMBIENT, (byte) (((BooleanEntityMetadata) entityMetadata).getPrimitiveValue() ? 1 : 0)))
.addTranslator(null) // Arrow count
.addTranslator(null) // Stinger count
@ -460,7 +459,7 @@ public final class EntityDefinitions {
.height(1.7f).width(0.6f)
.offset(1.62f)
.addTranslator(MetadataType.INT, CreeperEntity::setSwelling)
.<Boolean>addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.POWERED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.POWERED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, CreeperEntity::setIgnited)
.build();
DOLPHIN = EntityDefinition.inherited(WaterEntity::new, mobEntityBase)
@ -746,12 +745,12 @@ public final class EntityDefinitions {
MOOSHROOM = EntityDefinition.inherited(MooshroomEntity::new, ageableEntityBase) // TODO remove class
.type(EntityType.MOOSHROOM)
.height(1.4f).width(0.9f)
.<String>addTranslator(MetadataType.STRING, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityData.VARIANT, entityMetadata.getValue().equals("brown") ? 1 : 0))
.addTranslator(MetadataType.STRING, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityData.VARIANT, entityMetadata.getValue().equals("brown") ? 1 : 0))
.build();
OCELOT = EntityDefinition.inherited(OcelotEntity::new, ageableEntityBase)
.type(EntityType.OCELOT)
.height(0.35f).width(0.3f)
.<Boolean>addTranslator(MetadataType.BOOLEAN, (ocelotEntity, entityMetadata) -> ocelotEntity.setFlag(EntityFlag.TRUSTING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, (ocelotEntity, entityMetadata) -> ocelotEntity.setFlag(EntityFlag.TRUSTING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.build();
PANDA = EntityDefinition.inherited(PandaEntity::new, ageableEntityBase)
.type(EntityType.PANDA)
@ -766,13 +765,13 @@ public final class EntityDefinitions {
PIG = EntityDefinition.inherited(PigEntity::new, ageableEntityBase)
.type(EntityType.PIG)
.heightAndWidth(0.9f)
.<Boolean>addTranslator(MetadataType.BOOLEAN, (pigEntity, entityMetadata) -> pigEntity.setFlag(EntityFlag.SADDLED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, (pigEntity, entityMetadata) -> pigEntity.setFlag(EntityFlag.SADDLED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(null) // Boost time
.build();
POLAR_BEAR = EntityDefinition.inherited(PolarBearEntity::new, ageableEntityBase)
.type(EntityType.POLAR_BEAR)
.height(1.4f).width(1.3f)
.<Boolean>addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.STANDING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, (entity, entityMetadata) -> entity.setFlag(EntityFlag.STANDING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.build();
RABBIT = EntityDefinition.inherited(RabbitEntity::new, ageableEntityBase)
.type(EntityType.RABBIT)
@ -839,7 +838,7 @@ public final class EntityDefinitions {
.height(1.6f).width(1.3965f)
.build();
EntityDefinition<ChestedHorseEntity> chestedHorseEntityBase = EntityDefinition.inherited(ChestedHorseEntity::new, abstractHorseEntityBase)
.<Boolean>addTranslator(MetadataType.BOOLEAN, (horseEntity, entityMetadata) -> horseEntity.setFlag(EntityFlag.CHESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, (horseEntity, entityMetadata) -> horseEntity.setFlag(EntityFlag.CHESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.build();
DONKEY = EntityDefinition.inherited(chestedHorseEntityBase.factory(), chestedHorseEntityBase)
.type(EntityType.DONKEY)
@ -852,7 +851,7 @@ public final class EntityDefinitions {
LLAMA = EntityDefinition.inherited(LlamaEntity::new, chestedHorseEntityBase)
.type(EntityType.LLAMA)
.height(1.87f).width(0.9f)
.<Integer>addTranslator(MetadataType.INT, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityData.STRENGTH, entityMetadata.getValue()))
.addTranslator(MetadataType.INT, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityData.STRENGTH, entityMetadata.getValue()))
.addTranslator(MetadataType.INT, LlamaEntity::setCarpetedColor)
.addTranslator(MetadataType.INT, (entity, entityMetadata) -> entity.getDirtyMetadata().put(EntityData.VARIANT, entityMetadata.getValue()))
.build();
@ -883,7 +882,7 @@ public final class EntityDefinitions {
.type(EntityType.WOLF)
.height(0.85f).width(0.6f)
// "Begging" on wiki.vg, "Interested" in Nukkit - the tilt of the head
.<Boolean>addTranslator(MetadataType.BOOLEAN, (wolfEntity, entityMetadata) -> wolfEntity.setFlag(EntityFlag.INTERESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.BOOLEAN, (wolfEntity, entityMetadata) -> wolfEntity.setFlag(EntityFlag.INTERESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()))
.addTranslator(MetadataType.INT, WolfEntity::setCollarColor)
.addTranslator(MetadataType.INT, WolfEntity::setWolfAngerTime)
.build();

View File

@ -33,8 +33,7 @@ import java.util.function.BiConsumer;
/**
* Translates a given Java {@link EntityMetadata} into a similar/same construct for Bedrock
*/
public record EntityMetadataTranslator<E extends Entity, T>(
MetadataType acceptedType,
BiConsumer<E, EntityMetadata<T>> translateFunction) {
public record EntityMetadataTranslator<E extends Entity, T, EM extends EntityMetadata<T, ? extends MetadataType<T>>>(
MetadataType<T> acceptedType,
BiConsumer<E, EM> translateFunction) {
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -49,9 +48,9 @@ public class FallingBlockEntity extends Entity {
}
@Override
public void setGravity(EntityMetadata<Boolean> entityMetadata) {
public void setGravity(BooleanEntityMetadata entityMetadata) {
super.setGravity(entityMetadata);
// Set the NO_AI flag based on the no gravity flag to prevent movement
setFlag(EntityFlag.NO_AI, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
setFlag(EntityFlag.NO_AI, entityMetadata.getPrimitiveValue());
}
}

View File

@ -53,7 +53,7 @@ public class FireworkEntity extends Entity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setFireworkItem(EntityMetadata<ItemStack> entityMetadata) {
public void setFireworkItem(EntityMetadata<ItemStack, ?> entityMetadata) {
ItemStack item = entityMetadata.getValue();
if (item == null) {
return;
@ -135,7 +135,7 @@ public class FireworkEntity extends Entity {
dirtyMetadata.put(EntityData.DISPLAY_ITEM, builder.build());
}
public void setPlayerGliding(EntityMetadata<OptionalInt> entityMetadata) {
public void setPlayerGliding(EntityMetadata<OptionalInt, ?> entityMetadata) {
OptionalInt optional = entityMetadata.getValue();
// Checks if the firework has an entity ID (used when a player is gliding)
// and checks to make sure the player that is gliding is the one getting sent the packet

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -76,8 +75,8 @@ public class FishingHookEntity extends ThrowableEntity {
super.spawnEntity();
}
public void setHookedEntity(EntityMetadata<Integer> entityMetadata) {
int hookedEntityId = ((IntEntityMetadata) entityMetadata).getPrimitiveValue() - 1;
public void setHookedEntity(IntEntityMetadata entityMetadata) {
int hookedEntityId = entityMetadata.getPrimitiveValue() - 1;
Entity entity;
if (session.getPlayerEntity().getEntityId() == hookedEntityId) {
entity = session.getPlayerEntity();

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -41,8 +40,8 @@ public class FurnaceMinecartEntity extends DefaultBlockMinecartEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setHasFuel(EntityMetadata<Boolean> entityMetadata) {
hasFuel = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setHasFuel(BooleanEntityMetadata entityMetadata) {
hasFuel = entityMetadata.getPrimitiveValue();
updateDefaultBlockMetadata();
}

View File

@ -84,7 +84,7 @@ public class ItemEntity extends ThrowableEntity {
}
}
public void setItem(EntityMetadata<ItemStack> entityMetadata) {
public void setItem(EntityMetadata<ItemStack, ?> entityMetadata) {
ItemData item = ItemTranslator.translateToBedrock(session, entityMetadata.getValue());
if (this.item == null) {
this.item = item;

View File

@ -109,7 +109,7 @@ public class ItemFrameEntity extends Entity {
valid = true;
}
public void setItemInFrame(EntityMetadata<ItemStack> entityMetadata) {
public void setItemInFrame(EntityMetadata<ItemStack, ?> entityMetadata) {
if (entityMetadata.getValue() != null) {
this.heldItem = entityMetadata.getValue();
ItemData itemData = ItemTranslator.translateToBedrock(session, heldItem);
@ -134,8 +134,8 @@ public class ItemFrameEntity extends Entity {
}
}
public void setItemRotation(EntityMetadata<Integer> entityMetadata) {
rotation = ((IntEntityMetadata) entityMetadata).getPrimitiveValue() * 45;
public void setItemRotation(IntEntityMetadata entityMetadata) {
rotation = entityMetadata.getPrimitiveValue() * 45;
if (cachedTag == null) {
return;
}

View File

@ -31,6 +31,7 @@ import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.FloatEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.math.vector.Vector3i;
import com.nukkitx.protocol.bedrock.data.AttributeData;
@ -53,6 +54,7 @@ import org.geysermc.connector.utils.ChunkUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@Getter
@ -87,8 +89,8 @@ public class LivingEntity extends Entity {
dirtyMetadata.put(EntityData.HEALTH, 1);
}
public void setLivingEntityFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setLivingEntityFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
// Blocking gets triggered when using a bow, but if we set USING_ITEM for all items, it may look like
// you're "mining" with ex. a shield.
@ -102,8 +104,8 @@ public class LivingEntity extends Entity {
setFlag(EntityFlag.DAMAGE_NEARBY_MOBS, (xd & 0x04) == 0x04);
}
public void setHealth(EntityMetadata<Float> entityMetadata) {
this.health = ((FloatEntityMetadata) entityMetadata).getPrimitiveValue();
public void setHealth(FloatEntityMetadata entityMetadata) {
this.health = entityMetadata.getPrimitiveValue();
AttributeData healthData = createHealthAttribute();
UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket();
@ -112,9 +114,10 @@ public class LivingEntity extends Entity {
session.sendUpstreamPacket(attributesPacket);
}
public Vector3i setBedPosition(EntityMetadata<Position> entityMetadata) {
Position bedPosition = entityMetadata.getValue();
if (bedPosition != null) {
public Vector3i setBedPosition(EntityMetadata<Optional<Position>, ?> entityMetadata) {
Optional<Position> optionalPos = entityMetadata.getValue();
if (optionalPos.isPresent()) {
Position bedPosition = optionalPos.get();
Vector3i vector = Vector3i.from(bedPosition.getX(), bedPosition.getY(), bedPosition.getZ());
dirtyMetadata.put(EntityData.BED_POSITION, vector);
int bed = session.getConnector().getWorldManager().getBlockAt(session, bedPosition);
@ -148,7 +151,7 @@ public class LivingEntity extends Entity {
}
@Override
public float setFreezing(EntityMetadata<Integer> entityMetadata) {
public float setFreezing(IntEntityMetadata entityMetadata) {
float freezingPercentage = super.setFreezing(entityMetadata);
this.isMaxFrozenState = freezingPercentage >= 1.0f;
setFlag(EntityFlag.SHAKING, isShaking());

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
@ -40,18 +39,18 @@ public class MinecartEntity extends Entity {
super(session, entityId, geyserId, uuid, definition, position.add(0d, definition.offset(), 0d), motion, yaw, pitch, headYaw);
}
public void setCustomBlock(EntityMetadata<Integer> entityMetadata) {
dirtyMetadata.put(EntityData.DISPLAY_ITEM, session.getBlockMappings().getBedrockBlockId(((IntEntityMetadata) entityMetadata).getPrimitiveValue()));
public void setCustomBlock(IntEntityMetadata entityMetadata) {
dirtyMetadata.put(EntityData.DISPLAY_ITEM, session.getBlockMappings().getBedrockBlockId(entityMetadata.getPrimitiveValue()));
}
public void setCustomBlockOffset(EntityMetadata<Integer> entityMetadata) {
dirtyMetadata.put(EntityData.DISPLAY_OFFSET, entityMetadata.getValue());
public void setCustomBlockOffset(IntEntityMetadata entityMetadata) {
dirtyMetadata.put(EntityData.DISPLAY_OFFSET, entityMetadata.getPrimitiveValue());
}
public void setShowCustomBlock(EntityMetadata<Boolean> entityMetadata) {
public void setShowCustomBlock(BooleanEntityMetadata entityMetadata) {
// If the custom block should be enabled
// Needs a byte based off of Java's boolean
dirtyMetadata.put(EntityData.CUSTOM_DISPLAY, (byte) (((BooleanEntityMetadata) entityMetadata).getPrimitiveValue() ? 1 : 0));
dirtyMetadata.put(EntityData.CUSTOM_DISPLAY, (byte) (entityMetadata.getPrimitiveValue() ? 1 : 0));
}
@Override

View File

@ -42,7 +42,7 @@ public class TNTEntity extends Entity implements Tickable {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setFuseLength(EntityMetadata<Integer> entityMetadata) {
public void setFuseLength(IntEntityMetadata entityMetadata) {
currentTick = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
setFlag(EntityFlag.IGNITED, true);
dirtyMetadata.put(EntityData.FUSE_LENGTH, currentTick);

View File

@ -47,7 +47,7 @@ public class ThrownPotionEntity extends ThrowableItemEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setPotion(EntityMetadata<ItemStack> entityMetadata) {
public void setPotion(EntityMetadata<ItemStack, ?> entityMetadata) {
ItemStack itemStack = entityMetadata.getValue();
ItemMapping mapping = session.getItemMappings().getMapping(itemStack);
if (mapping.getJavaIdentifier().endsWith("potion") && itemStack.getNbt() != null) {

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -43,8 +42,8 @@ public class TippedArrowEntity extends AbstractArrowEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setPotionEffectColor(EntityMetadata<Integer> entityMetadata) {
int potionColor = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setPotionEffectColor(IntEntityMetadata entityMetadata) {
int potionColor = entityMetadata.getPrimitiveValue();
// -1 means no color
if (potionColor == -1) {
dirtyMetadata.put(EntityData.CUSTOM_DISPLAY, 0);

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import org.geysermc.connector.network.session.GeyserSession;
@ -41,8 +40,8 @@ public class WitherSkullEntity extends ItemedFireballEntity {
this.futureTicks = 1;
}
public void setDangerous(EntityMetadata<Boolean> entityMetadata) {
boolean newDangerous = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setDangerous(BooleanEntityMetadata entityMetadata) {
boolean newDangerous = entityMetadata.getPrimitiveValue();
if (newDangerous != isCharged) {
isCharged = newDangerous;
// Is an entirely new entity in Bedrock but just a metadata type in Java

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -41,8 +40,8 @@ public class AgeableEntity extends CreatureEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setBaby(EntityMetadata<Boolean> entityMetadata) {
boolean isBaby = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setBaby(BooleanEntityMetadata entityMetadata) {
boolean isBaby = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.SCALE, isBaby ? getBabySize() : getAdultSize());
setFlag(EntityFlag.BABY, isBaby);

View File

@ -40,6 +40,7 @@ import org.geysermc.connector.entity.EntityDefinitions;
import org.geysermc.connector.entity.LivingEntity;
import org.geysermc.connector.network.session.GeyserSession;
import java.util.Optional;
import java.util.UUID;
public class ArmorStandEntity extends LivingEntity {
@ -117,13 +118,13 @@ public class ArmorStandEntity extends LivingEntity {
}
@Override
public void setDisplayName(EntityMetadata<Component> entityMetadata) {
public void setDisplayName(EntityMetadata<Optional<Component>, ?> entityMetadata) {
super.setDisplayName(entityMetadata);
updateSecondEntityStatus(false);
}
public void setArmorStandFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setArmorStandFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
// isSmall
boolean newIsSmall = (xd & 0x01) == 0x01;
@ -161,27 +162,27 @@ public class ArmorStandEntity extends LivingEntity {
setFlag(EntityFlag.ADMIRING, (xd & 0x08) == 0x08); // Has no baseplate
}
public void setHeadRotation(EntityMetadata<Rotation> entityMetadata) {
public void setHeadRotation(EntityMetadata<Rotation, ?> entityMetadata) {
onRotationUpdate(EntityData.MARK_VARIANT, EntityFlag.INTERESTED, EntityFlag.CHARGED, EntityFlag.POWERED, entityMetadata.getValue());
}
public void setBodyRotation(EntityMetadata<Rotation> entityMetadata) {
public void setBodyRotation(EntityMetadata<Rotation, ?> entityMetadata) {
onRotationUpdate(EntityData.VARIANT, EntityFlag.IN_LOVE, EntityFlag.CELEBRATING, EntityFlag.CELEBRATING_SPECIAL, entityMetadata.getValue());
}
public void setLeftArmRotation(EntityMetadata<Rotation> entityMetadata) {
public void setLeftArmRotation(EntityMetadata<Rotation, ?> entityMetadata) {
onRotationUpdate(EntityData.TRADE_TIER, EntityFlag.CHARGING, EntityFlag.CRITICAL, EntityFlag.DANCING, entityMetadata.getValue());
}
public void setRightArmRotation(EntityMetadata<Rotation> entityMetadata) {
public void setRightArmRotation(EntityMetadata<Rotation, ?> entityMetadata) {
onRotationUpdate(EntityData.MAX_TRADE_TIER, EntityFlag.ELDER, EntityFlag.EMOTING, EntityFlag.IDLING, entityMetadata.getValue());
}
public void setLeftLegRotation(EntityMetadata<Rotation> entityMetadata) {
public void setLeftLegRotation(EntityMetadata<Rotation, ?> entityMetadata) {
onRotationUpdate(EntityData.SKIN_ID, EntityFlag.IS_ILLAGER_CAPTAIN, EntityFlag.IS_IN_UI, EntityFlag.LINGERING, entityMetadata.getValue());
}
public void setRightLegRotation(EntityMetadata<Rotation> entityMetadata) {
public void setRightLegRotation(EntityMetadata<Rotation, ?> entityMetadata) {
onRotationUpdate(EntityData.HURT_DIRECTION, EntityFlag.IS_PREGNANT, EntityFlag.SHEARED, EntityFlag.STALKING, entityMetadata.getValue());
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -40,8 +39,8 @@ public class BatEntity extends AmbientEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setBatFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setBatFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.RESTING, (xd & 0x01) == 0x01);
}
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -54,8 +53,8 @@ public class MobEntity extends LivingEntity {
setLeashHolderBedrockId(-1);
}
public void setMobFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setMobFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.NO_AI, (xd & 0x01) == 0x01);
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -40,7 +39,7 @@ public class SlimeEntity extends MobEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setScale(EntityMetadata<Integer> entityMetadata) {
dirtyMetadata.put(EntityData.SCALE, 0.10f + ((IntEntityMetadata) entityMetadata).getPrimitiveValue());
public void setScale(IntEntityMetadata entityMetadata) {
dirtyMetadata.put(EntityData.SCALE, 0.10f + entityMetadata.getPrimitiveValue());
}
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -40,8 +39,8 @@ public class SnowGolemEntity extends GolemEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setSnowGolemFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setSnowGolemFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
// Handle the visibility of the pumpkin
setFlag(EntityFlag.SHEARED, (xd & 0x10) != 0x10);
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
@ -42,8 +41,8 @@ public class AxolotlEntity extends AnimalEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setVariant(EntityMetadata<Integer> entityMetadata) {
int variant = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setVariant(IntEntityMetadata entityMetadata) {
int variant = entityMetadata.getPrimitiveValue();
switch (variant) {
case 1 -> variant = 3; // Java - "Wild" (brown)
case 3 -> variant = 1; // Java - cyan
@ -51,8 +50,8 @@ public class AxolotlEntity extends AnimalEntity {
dirtyMetadata.put(EntityData.VARIANT, variant);
}
public void setPlayingDead(EntityMetadata<Boolean> entityMetadata) {
setFlag(EntityFlag.PLAYING_DEAD, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
public void setPlayingDead(BooleanEntityMetadata entityMetadata) {
setFlag(EntityFlag.PLAYING_DEAD, entityMetadata.getPrimitiveValue());
}
@Override

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
@ -45,8 +44,8 @@ public class BeeEntity extends AnimalEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setBeeFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setBeeFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
// Bee is performing sting attack; trigger animation
if ((xd & 0x02) == 0x02) {
EntityEventPacket packet = new EntityEventPacket();
@ -61,9 +60,9 @@ public class BeeEntity extends AnimalEntity {
setFlag(EntityFlag.POWERED, (xd & 0x08) == 0x08);
}
public void setAngerTime(EntityMetadata<Integer> entityMetadata) {
public void setAngerTime(IntEntityMetadata entityMetadata) {
// Converting "anger time" to a boolean
setFlag(EntityFlag.ANGRY, ((IntEntityMetadata) entityMetadata).getPrimitiveValue() > 0);
setFlag(EntityFlag.ANGRY, entityMetadata.getPrimitiveValue() > 0);
}
@Override

View File

@ -25,8 +25,8 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -42,12 +42,12 @@ public class FoxEntity extends AnimalEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setFoxVariant(EntityMetadata<Integer> entityMetadata) {
dirtyMetadata.put(EntityData.VARIANT, entityMetadata.getValue());
public void setFoxVariant(IntEntityMetadata entityMetadata) {
dirtyMetadata.put(EntityData.VARIANT, entityMetadata.getPrimitiveValue());
}
public void setFoxFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setFoxFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.SITTING, (xd & 0x01) == 0x01);
setFlag(EntityFlag.SNEAKING, (xd & 0x04) == 0x04);
setFlag(EntityFlag.INTERESTED, (xd & 0x08) == 0x08);

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
@ -46,9 +45,9 @@ public class GoatEntity extends AnimalEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setScreamer(EntityMetadata<Boolean> entityMetadata) {
public void setScreamer(BooleanEntityMetadata entityMetadata) {
// Metadata not used in Bedrock Edition
isScreamer = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
isScreamer = entityMetadata.getPrimitiveValue();
}
@Override

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -43,9 +42,9 @@ public class HoglinEntity extends AnimalEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setImmuneToZombification(EntityMetadata<Boolean> entityMetadata) {
public void setImmuneToZombification(BooleanEntityMetadata entityMetadata) {
// Apply shaking effect if not in the nether and zombification is possible
this.isImmuneToZombification = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
this.isImmuneToZombification = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.SHAKING, isShaking());
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
@ -47,8 +46,8 @@ public class PandaEntity extends AnimalEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setEatingCounter(EntityMetadata<Integer> entityMetadata) {
int count = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setEatingCounter(IntEntityMetadata entityMetadata) {
int count = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.EATING, count > 0);
dirtyMetadata.put(EntityData.EATING_COUNTER, count);
if (count != 0) {
@ -61,18 +60,18 @@ public class PandaEntity extends AnimalEntity {
}
}
public void setMainGene(EntityMetadata<Byte> entityMetadata) {
mainGene = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setMainGene(ByteEntityMetadata entityMetadata) {
mainGene = entityMetadata.getPrimitiveValue();
updateAppearance();
}
public void setHiddenGene(EntityMetadata<Byte> entityMetadata) {
hiddenGene = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setHiddenGene(ByteEntityMetadata entityMetadata) {
hiddenGene = entityMetadata.getPrimitiveValue();
updateAppearance();
}
public void setPandaFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setPandaFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.SNEEZING, (xd & 0x02) == 0x02);
setFlag(EntityFlag.ROLLING, (xd & 0x04) == 0x04);
setFlag(EntityFlag.SITTING, (xd & 0x08) == 0x08);

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -41,8 +40,8 @@ public class PufferFishEntity extends AbstractFishEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setPufferfishSize(EntityMetadata<Integer> entityMetadata) {
int puffsize = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setPufferfishSize(IntEntityMetadata entityMetadata) {
int puffsize = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.PUFFERFISH_SIZE, (byte) puffsize);
dirtyMetadata.put(EntityData.VARIANT, puffsize);
}

View File

@ -25,7 +25,7 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -43,12 +43,12 @@ public class RabbitEntity extends AnimalEntity {
}
@Override
public void setBaby(EntityMetadata<Boolean> entityMetadata) {
public void setBaby(BooleanEntityMetadata entityMetadata) {
super.setBaby(entityMetadata);
}
public void setRabbitVariant(EntityMetadata<Integer> entityMetadata) {
int variant = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setRabbitVariant(IntEntityMetadata entityMetadata) {
int variant = entityMetadata.getPrimitiveValue();
// Change the killer bunny to display as white since it only exists on Java Edition
boolean isKillerBunny = variant == 99;

View File

@ -41,7 +41,7 @@ public class SheepEntity extends AnimalEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setSheepFlags(EntityMetadata<Byte> entityMetadata) {
public void setSheepFlags(ByteEntityMetadata entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
setFlag(EntityFlag.SHEARED, (xd & 0x10) == 0x10);
dirtyMetadata.put(EntityData.COLOR, xd);

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -47,12 +46,12 @@ public class StriderEntity extends AnimalEntity {
setFlag(EntityFlag.BREATHING, true);
}
public void setCold(EntityMetadata<Boolean> entityMetadata) {
isCold = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setCold(BooleanEntityMetadata entityMetadata) {
isCold = entityMetadata.getPrimitiveValue();
}
public void setSaddled(EntityMetadata<Boolean> entityMetadata) {
setFlag(EntityFlag.SADDLED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
public void setSaddled(BooleanEntityMetadata entityMetadata) {
setFlag(EntityFlag.SADDLED, entityMetadata.getPrimitiveValue());
}
@Override

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.google.common.collect.ImmutableList;
import com.nukkitx.math.vector.Vector3f;
@ -53,8 +52,8 @@ public class TropicalFishEntity extends AbstractFishEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setFishVariant(EntityMetadata<Integer> entityMetadata) {
int varNumber = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setFishVariant(IntEntityMetadata entityMetadata) {
int varNumber = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.VARIANT, getShape(varNumber)); // Shape 0-1
dirtyMetadata.put(EntityData.MARK_VARIANT, getPattern(varNumber)); // Pattern 0-5

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -41,12 +40,12 @@ public class TurtleEntity extends AnimalEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setPregnant(EntityMetadata<Boolean> entityMetadata) {
setFlag(EntityFlag.IS_PREGNANT, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
public void setPregnant(BooleanEntityMetadata entityMetadata) {
setFlag(EntityFlag.IS_PREGNANT, entityMetadata.getPrimitiveValue());
}
public void setLayingEgg(EntityMetadata<Boolean> entityMetadata) {
setFlag(EntityFlag.LAYING_EGG, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
public void setLayingEgg(BooleanEntityMetadata entityMetadata) {
setFlag(EntityFlag.LAYING_EGG, entityMetadata.getPrimitiveValue());
}
@Override

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal.horse;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.google.common.collect.ImmutableSet;
import com.nukkitx.math.vector.Vector3f;
@ -79,8 +78,8 @@ public class AbstractHorseEntity extends AnimalEntity {
session.sendUpstreamPacket(attributesPacket);
}
public void setHorseFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setHorseFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
boolean tamed = (xd & 0x02) == 0x02;
boolean saddled = (xd & 0x04) == 0x04;
setFlag(EntityFlag.TAMED, tamed);

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal.horse;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -40,8 +39,8 @@ public class HorseEntity extends AbstractHorseEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setHorseVariant(EntityMetadata<Integer> entityMetadata) {
int value = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setHorseVariant(IntEntityMetadata entityMetadata) {
int value = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.VARIANT, value & 255);
dirtyMetadata.put(EntityData.MARK_VARIANT, (value >> 8) % 5);
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal.horse;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -48,12 +47,12 @@ public class LlamaEntity extends ChestedHorseEntity {
/**
* Color equipped on the llama
*/
public void setCarpetedColor(EntityMetadata<Integer> entityMetadata) {
public void setCarpetedColor(IntEntityMetadata entityMetadata) {
// Bedrock treats llama decoration as armor
MobArmorEquipmentPacket equipmentPacket = new MobArmorEquipmentPacket();
equipmentPacket.setRuntimeEntityId(geyserId);
// -1 means no armor
int carpetIndex = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
int carpetIndex = entityMetadata.getPrimitiveValue();
if (carpetIndex > -1 && carpetIndex <= 15) {
// The damage value is the dye color that Java sends us, for pre-1.16.220
// The item is always going to be a carpet

View File

@ -25,8 +25,8 @@
package org.geysermc.connector.entity.living.animal.tameable;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -61,7 +61,7 @@ public class CatEntity extends TameableEntity {
}
@Override
public void setTameableFlags(EntityMetadata<Byte> entityMetadata) {
public void setTameableFlags(ByteEntityMetadata entityMetadata) {
super.setTameableFlags(entityMetadata);
// Update collar color if tamed
if (getFlag(EntityFlag.TAMED)) {
@ -69,9 +69,9 @@ public class CatEntity extends TameableEntity {
}
}
public void setCatVariant(EntityMetadata<Integer> entityMetadata) {
public void setCatVariant(IntEntityMetadata entityMetadata) {
// Different colors in Java and Bedrock for some reason
int metadataValue = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
int metadataValue = entityMetadata.getPrimitiveValue();
int variantColor = switch (metadataValue) {
case 0 -> 8;
case 8 -> 0;
@ -82,12 +82,12 @@ public class CatEntity extends TameableEntity {
dirtyMetadata.put(EntityData.VARIANT, variantColor);
}
public void setResting(EntityMetadata<Boolean> entityMetadata) {
setFlag(EntityFlag.RESTING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
public void setResting(BooleanEntityMetadata entityMetadata) {
setFlag(EntityFlag.RESTING, entityMetadata.getPrimitiveValue());
}
public void setCollarColor(EntityMetadata<Integer> entityMetadata) {
collarColor = (byte) ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setCollarColor(IntEntityMetadata entityMetadata) {
collarColor = (byte) entityMetadata.getPrimitiveValue();
// Needed or else wild cats are a red color
if (getFlag(EntityFlag.TAMED)) {
dirtyMetadata.put(EntityData.COLOR, collarColor);

View File

@ -36,6 +36,7 @@ import org.geysermc.connector.entity.EntityDefinition;
import org.geysermc.connector.entity.living.animal.AnimalEntity;
import org.geysermc.connector.network.session.GeyserSession;
import java.util.Optional;
import java.util.UUID;
public class TameableEntity extends AnimalEntity {
@ -49,18 +50,18 @@ public class TameableEntity extends AnimalEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setTameableFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setTameableFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.SITTING, (xd & 0x01) == 0x01);
setFlag(EntityFlag.ANGRY, (xd & 0x02) == 0x02);
setFlag(EntityFlag.TAMED, (xd & 0x04) == 0x04);
}
public void setOwner(EntityMetadata<UUID> entityMetadata) {
public void setOwner(EntityMetadata<Optional<UUID>, ?> entityMetadata) {
// Note: Must be set for wolf collar color to work
if (entityMetadata.getValue() != null) {
if (entityMetadata.getValue().isPresent()) {
// Owner UUID of entity
Entity entity = session.getEntityCache().getPlayerEntity(entityMetadata.getValue());
Entity entity = session.getEntityCache().getPlayerEntity(entityMetadata.getValue().get());
// Used as both a check since the player isn't in the entity cache and a normal fallback
if (entity == null) {
entity = session.getPlayerEntity();

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.animal.tameable;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.google.common.collect.ImmutableSet;
@ -55,18 +54,18 @@ public class WolfEntity extends TameableEntity {
}
@Override
public void setTameableFlags(EntityMetadata<Byte> entityMetadata) {
public void setTameableFlags(ByteEntityMetadata entityMetadata) {
super.setTameableFlags(entityMetadata);
// Reset wolf color
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
byte xd = entityMetadata.getPrimitiveValue();
boolean angry = (xd & 0x02) == 0x02;
if (angry) {
dirtyMetadata.put(EntityData.COLOR, (byte) 0);
}
}
public void setCollarColor(EntityMetadata<Integer> entityMetadata) {
collarColor = (byte) ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setCollarColor(IntEntityMetadata entityMetadata) {
collarColor = (byte) entityMetadata.getPrimitiveValue();
if (getFlag(EntityFlag.ANGRY)) {
return;
}
@ -80,8 +79,8 @@ public class WolfEntity extends TameableEntity {
}
// 1.16+
public void setWolfAngerTime(EntityMetadata<Integer> entityMetadata) {
int time = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setWolfAngerTime(IntEntityMetadata entityMetadata) {
int time = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.ANGRY, time != 0);
dirtyMetadata.put(EntityData.COLOR, time != 0 ? (byte) 0 : collarColor);
}

View File

@ -40,6 +40,7 @@ import org.geysermc.connector.entity.EntityDefinition;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.registry.BlockRegistries;
import java.util.Optional;
import java.util.UUID;
public class VillagerEntity extends AbstractMerchantEntity {
@ -91,7 +92,7 @@ public class VillagerEntity extends AbstractMerchantEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setVillagerData(EntityMetadata<VillagerData> entityMetadata) {
public void setVillagerData(EntityMetadata<VillagerData, ?> entityMetadata) {
VillagerData villagerData = entityMetadata.getValue();
// Profession
int profession = VILLAGER_PROFESSIONS.get(villagerData.getProfession());
@ -105,7 +106,7 @@ public class VillagerEntity extends AbstractMerchantEntity {
}
@Override
public Vector3i setBedPosition(EntityMetadata<Position> entityMetadata) {
public Vector3i setBedPosition(EntityMetadata<Optional<Position>, ?> entityMetadata) {
return bedPosition = super.setBedPosition(entityMetadata);
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -41,9 +40,9 @@ public class AbstractSkeletonEntity extends MonsterEntity {
}
@Override
public void setMobFlags(EntityMetadata<Byte> entityMetadata) {
public void setMobFlags(ByteEntityMetadata entityMetadata) {
super.setMobFlags(entityMetadata);
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
byte xd = entityMetadata.getPrimitiveValue();
// A bit of a loophole so the hands get raised - set the target ID to its own ID
dirtyMetadata.put(EntityData.TARGET_EID, ((xd & 4) == 4) ? geyserId : 0);
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -42,9 +41,9 @@ public class BasePiglinEntity extends MonsterEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setImmuneToZombification(EntityMetadata<Boolean> entityMetadata) {
public void setImmuneToZombification(BooleanEntityMetadata entityMetadata) {
// Apply shaking effect if not in the nether and zombification is possible
this.isImmuneToZombification = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
this.isImmuneToZombification = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.SHAKING, isShaking());
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -40,8 +39,8 @@ public class BlazeEntity extends MonsterEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setBlazeFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setBlazeFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.ON_FIRE, (xd & 0x01) == 0x01);
}
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
@ -37,8 +36,8 @@ import java.util.UUID;
public class CreeperEntity extends MonsterEntity {
/**
* Whether the creeper has been ignited and is using {@link #setIgnited(EntityMetadata)}.
* In this instance we ignore {@link #setSwelling(EntityMetadata)} since it's sending us -1 which confuses poor Bedrock.
* Whether the creeper has been ignited and is using {@link #setIgnited(BooleanEntityMetadata)}.
* In this instance we ignore {@link #setSwelling(IntEntityMetadata)} since it's sending us -1 which confuses poor Bedrock.
*/
private boolean ignitedByFlintAndSteel = false;
@ -46,14 +45,14 @@ public class CreeperEntity extends MonsterEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setSwelling(EntityMetadata<Integer> entityMetadata) {
public void setSwelling(IntEntityMetadata entityMetadata) {
if (!ignitedByFlintAndSteel) {
setFlag(EntityFlag.IGNITED, ((IntEntityMetadata) entityMetadata).getPrimitiveValue() == 1);
setFlag(EntityFlag.IGNITED, entityMetadata.getPrimitiveValue() == 1);
}
}
public void setIgnited(EntityMetadata<Boolean> entityMetadata) {
ignitedByFlintAndSteel = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setIgnited(BooleanEntityMetadata entityMetadata) {
ignitedByFlintAndSteel = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.IGNITED, ignitedByFlintAndSteel);
}
}

View File

@ -25,7 +25,7 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.FloatEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.LevelEventType;
@ -90,7 +90,7 @@ public class EnderDragonEntity extends MobEntity implements Tickable {
}
@Override
public void setHealth(EntityMetadata<Float> entityMetadata) {
public void setHealth(FloatEntityMetadata entityMetadata) {
super.setHealth(entityMetadata);
if (phase == 9 && this.health <= 0) { // Dying phase
EntityEventPacket entityEventPacket = new EntityEventPacket();
@ -101,8 +101,8 @@ public class EnderDragonEntity extends MobEntity implements Tickable {
}
}
public void setPhase(EntityMetadata<Integer> entityMetadata) {
phase = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setPhase(IntEntityMetadata entityMetadata) {
phase = entityMetadata.getPrimitiveValue();
phaseTicks = 0;
setFlag(EntityFlag.SITTING, isSitting());
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
@ -44,17 +43,17 @@ public class EndermanEntity extends MonsterEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setCarriedBlock(EntityMetadata<Integer> entityMetadata) {
dirtyMetadata.put(EntityData.CARRIED_BLOCK, session.getBlockMappings().getBedrockBlockId(((IntEntityMetadata) entityMetadata).getPrimitiveValue()));
public void setCarriedBlock(IntEntityMetadata entityMetadata) {
dirtyMetadata.put(EntityData.CARRIED_BLOCK, session.getBlockMappings().getBedrockBlockId(entityMetadata.getPrimitiveValue()));
}
/**
* Controls the screaming sound
*/
public void setScreaming(EntityMetadata<Boolean> entityMetadata) {
public void setScreaming(BooleanEntityMetadata entityMetadata) {
//TODO see if Bedrock controls this differently
// Java Edition this controls which ambient sound is used
if (((BooleanEntityMetadata) entityMetadata).getPrimitiveValue()) {
if (entityMetadata.getPrimitiveValue()) {
LevelSoundEvent2Packet packet = new LevelSoundEvent2Packet();
packet.setSound(SoundEvent.STARE);
packet.setPosition(this.position);
@ -64,8 +63,8 @@ public class EndermanEntity extends MonsterEntity {
}
}
public void setAngry(EntityMetadata<Boolean> entityMetadata) {
public void setAngry(BooleanEntityMetadata entityMetadata) {
// "Is staring/provoked" - controls visuals
setFlag(EntityFlag.ANGRY, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
setFlag(EntityFlag.ANGRY, entityMetadata.getPrimitiveValue());
}
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -41,8 +40,8 @@ public class GhastEntity extends FlyingEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setGhastAttacking(EntityMetadata<Boolean> entityMetadata) {
public void setGhastAttacking(BooleanEntityMetadata entityMetadata) {
// If the ghast is attacking
dirtyMetadata.put(EntityData.CHARGE_AMOUNT, (byte) (((BooleanEntityMetadata) entityMetadata).getPrimitiveValue() ? 1 : 0));
dirtyMetadata.put(EntityData.CHARGE_AMOUNT, (byte) (entityMetadata.getPrimitiveValue() ? 1 : 0));
}
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -41,8 +40,8 @@ public class GuardianEntity extends MonsterEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setGuardianTarget(EntityMetadata<Integer> entityMetadata) {
int entityId = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setGuardianTarget(IntEntityMetadata entityMetadata) {
int entityId = entityMetadata.getPrimitiveValue();
Entity entity;
if (session.getPlayerEntity().getEntityId() == entityId) {
entity = session.getPlayerEntity();

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -40,8 +39,8 @@ public class PhantomEntity extends FlyingEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setPhantomScale(EntityMetadata<Integer> entityMetadata) {
int size = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setPhantomScale(IntEntityMetadata entityMetadata) {
int size = entityMetadata.getPrimitiveValue();
float modelScale = 1f + 0.15f * size;
float boundsScale = (1f + (0.2f * size) / definition.width()) / modelScale;

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -41,18 +40,18 @@ public class PiglinEntity extends BasePiglinEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setBaby(EntityMetadata<Boolean> entityMetadata) {
boolean isBaby = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setBaby(BooleanEntityMetadata entityMetadata) {
boolean isBaby = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.SCALE, isBaby? .55f : 1f);
setFlag(EntityFlag.BABY, isBaby);
}
public void setChargingCrossbow(EntityMetadata<Boolean> entityMetadata) {
setFlag(EntityFlag.CHARGING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
public void setChargingCrossbow(BooleanEntityMetadata entityMetadata) {
setFlag(EntityFlag.CHARGING, entityMetadata.getPrimitiveValue());
}
public void setDancing(EntityMetadata<Boolean> entityMetadata) {
setFlag(EntityFlag.DANCING, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue());
public void setDancing(BooleanEntityMetadata entityMetadata) {
setFlag(EntityFlag.DANCING, entityMetadata.getPrimitiveValue());
}
@Override

View File

@ -27,13 +27,13 @@ package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.object.Direction;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
import org.geysermc.connector.entity.EntityDefinition;
import org.geysermc.connector.entity.living.GolemEntity;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.utils.Direction;
import java.util.UUID;
@ -45,17 +45,17 @@ public class ShulkerEntity extends GolemEntity {
setFlag(EntityFlag.BRIBED, true);
}
public void setAttachedFace(EntityMetadata<Direction> entityMetadata) {
public void setAttachedFace(EntityMetadata<Direction, ?> entityMetadata) {
Direction direction = entityMetadata.getValue();
dirtyMetadata.put(EntityData.SHULKER_ATTACH_FACE, (byte) direction.ordinal());
}
public void setShulkerHeight(EntityMetadata<Byte> entityMetadata) {
int height = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setShulkerHeight(ByteEntityMetadata entityMetadata) {
int height = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.SHULKER_PEEK_ID, height);
}
public void setShulkerColor(EntityMetadata<Byte> entityMetadata) {
public void setShulkerColor(ByteEntityMetadata entityMetadata) {
byte color = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
if (color == 16) {
// 16 is default on both editions

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -41,8 +40,8 @@ public class SkeletonEntity extends AbstractSkeletonEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setConvertingToStray(EntityMetadata<Boolean> entityMetadata) {
this.convertingToStray = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setConvertingToStray(BooleanEntityMetadata entityMetadata) {
this.convertingToStray = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.SHAKING, isShaking());
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -40,8 +39,8 @@ public class SpiderEntity extends MonsterEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setSpiderFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setSpiderFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.WALL_CLIMBING, (xd & 0x01) == 0x01);
}
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -40,8 +39,8 @@ public class VexEntity extends MonsterEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setVexFlags(EntityMetadata<Byte> entityMetadata) {
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setVexFlags(ByteEntityMetadata entityMetadata) {
byte xd = entityMetadata.getPrimitiveValue();
// Set the target to the player to force the attack animation
// even if the player isn't the target as we dont get the target on Java
dirtyMetadata.put(EntityData.TARGET_EID, (xd & 0x01) == 0x01 ? session.getPlayerEntity().getGeyserId() : 0);

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -47,20 +46,20 @@ public class WitherEntity extends MonsterEntity {
dirtyMetadata.put(EntityData.WITHER_AERIAL_ATTACK, (short) 1);
}
public void setTarget1(EntityMetadata<Integer> entityMetadata) {
public void setTarget1(IntEntityMetadata entityMetadata) {
setTargetId(EntityData.WITHER_TARGET_1, entityMetadata);
}
public void setTarget2(EntityMetadata<Integer> entityMetadata) {
public void setTarget2(IntEntityMetadata entityMetadata) {
setTargetId(EntityData.WITHER_TARGET_2, entityMetadata);
}
public void setTarget3(EntityMetadata<Integer> entityMetadata) {
public void setTarget3(IntEntityMetadata entityMetadata) {
setTargetId(EntityData.WITHER_TARGET_3, entityMetadata);
}
private void setTargetId(EntityData entityData, EntityMetadata<Integer> entityMetadata) {
int entityId = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
private void setTargetId(EntityData entityData, IntEntityMetadata entityMetadata) {
int entityId = entityMetadata.getPrimitiveValue();
Entity entity;
if (session.getPlayerEntity().getEntityId() == entityId) {
entity = session.getPlayerEntity();
@ -73,8 +72,8 @@ public class WitherEntity extends MonsterEntity {
}
}
public void setInvulnerableTicks(EntityMetadata<Integer> entityMetadata) {
int value = ((IntEntityMetadata) entityMetadata).getPrimitiveValue();
public void setInvulnerableTicks(IntEntityMetadata entityMetadata) {
int value = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.WITHER_INVULNERABLE_TICKS, value);
// Show the shield for the first few seconds of spawning (like Java)

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -41,8 +40,8 @@ public class ZoglinEntity extends MonsterEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setBaby(EntityMetadata<Boolean> entityMetadata) {
boolean isBaby = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setBaby(BooleanEntityMetadata entityMetadata) {
boolean isBaby = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.SCALE, isBaby? .55f : 1f);
setFlag(EntityFlag.BABY, isBaby);
}

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -42,14 +41,14 @@ public class ZombieEntity extends MonsterEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setZombieBaby(EntityMetadata<Boolean> entityMetadata) {
boolean isBaby = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setZombieBaby(BooleanEntityMetadata entityMetadata) {
boolean isBaby = entityMetadata.getPrimitiveValue();
dirtyMetadata.put(EntityData.SCALE, isBaby ? .55f : 1.0f);
setFlag(EntityFlag.BABY, isBaby);
}
public void setConvertingToDrowned(EntityMetadata<Boolean> entityMetadata) {
convertingToDrowned = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setConvertingToDrowned(BooleanEntityMetadata entityMetadata) {
convertingToDrowned = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.SHAKING, isShaking());
}

View File

@ -44,13 +44,13 @@ public class ZombieVillagerEntity extends ZombieEntity {
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
}
public void setTransforming(EntityMetadata<Boolean> entityMetadata) {
isTransforming = ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue();
public void setTransforming(BooleanEntityMetadata entityMetadata) {
isTransforming = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.IS_TRANSFORMING, isTransforming);
setFlag(EntityFlag.SHAKING, isShaking());
}
public void setZombieVillagerData(EntityMetadata<VillagerData> entityMetadata) {
public void setZombieVillagerData(EntityMetadata<VillagerData, ?> entityMetadata) {
VillagerData villagerData = entityMetadata.getValue();
dirtyMetadata.put(EntityData.VARIANT, VillagerEntity.VILLAGER_PROFESSIONS.get(villagerData.getProfession())); // Actually works properly with the OptionalPack
dirtyMetadata.put(EntityData.MARK_VARIANT, VillagerEntity.VILLAGER_REGIONS.get(villagerData.getType()));

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster.raid;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityData;
@ -47,8 +46,8 @@ public class SpellcasterIllagerEntity extends AbstractIllagerEntity {
setFlag(EntityFlag.BRIBED, this.definition == EntityDefinitions.ILLUSIONER);
}
public void setSpellType(EntityMetadata<Byte> entityMetadata) {
int spellType = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
public void setSpellType(ByteEntityMetadata entityMetadata) {
int spellType = entityMetadata.getPrimitiveValue();
// Summon vex, attack, or wololo
setFlag(EntityFlag.CASTING, spellType == 1 || spellType == 2 || spellType == 3);
int rgbData = switch (spellType) {

View File

@ -25,7 +25,6 @@
package org.geysermc.connector.entity.living.monster.raid;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.nukkitx.math.vector.Vector3f;
import com.nukkitx.protocol.bedrock.data.entity.EntityFlag;
@ -41,10 +40,10 @@ public class VindicatorEntity extends AbstractIllagerEntity {
}
@Override
public void setMobFlags(EntityMetadata<Byte> entityMetadata) {
public void setMobFlags(ByteEntityMetadata entityMetadata) {
super.setMobFlags(entityMetadata);
// Allow the axe to be shown if necessary
byte xd = ((ByteEntityMetadata) entityMetadata).getPrimitiveValue();
byte xd = entityMetadata.getPrimitiveValue();
setFlag(EntityFlag.ANGRY, (xd & 4) == 4);
}
}

View File

@ -29,6 +29,7 @@ import com.github.steveice10.mc.auth.data.GameProfile;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.Position;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.FloatEntityMetadata;
import com.github.steveice10.mc.protocol.data.game.scoreboard.ScoreboardPosition;
@ -60,6 +61,7 @@ import org.geysermc.connector.scoreboard.UpdateType;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
@Getter @Setter
@ -255,33 +257,33 @@ public class PlayerEntity extends LivingEntity {
}
@Override
public Vector3i setBedPosition(EntityMetadata<Position> entityMetadata) {
public Vector3i setBedPosition(EntityMetadata<Optional<Position>, ?> entityMetadata) {
return bedPosition = super.setBedPosition(entityMetadata);
}
public void setAbsorptionHearts(EntityMetadata<Float> entityMetadata) {
public void setAbsorptionHearts(FloatEntityMetadata entityMetadata) {
// Extra hearts - is not metadata but an attribute on Bedrock
UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket();
attributesPacket.setRuntimeEntityId(geyserId);
// Setting to a higher maximum since plugins/datapacks can probably extend the Bedrock soft limit
attributesPacket.setAttributes(Collections.singletonList(
new AttributeData("minecraft:absorption", 0.0f, 1024f, ((FloatEntityMetadata) entityMetadata).getPrimitiveValue(), 0.0f)));
new AttributeData("minecraft:absorption", 0.0f, 1024f, entityMetadata.getPrimitiveValue(), 0.0f)));
session.sendUpstreamPacket(attributesPacket);
}
public void setSkinVisibility(EntityMetadata<Byte> entityMetadata) {
public void setSkinVisibility(ByteEntityMetadata entityMetadata) {
// OptionalPack usage for toggling skin bits
// In Java Edition, a bit being set means that part should be enabled
// However, to ensure that the pack still works on other servers, we invert the bit so all values by default
// are true (0).
dirtyMetadata.put(EntityData.MARK_VARIANT, ~((ByteEntityMetadata) entityMetadata).getPrimitiveValue() & 0xff);
dirtyMetadata.put(EntityData.MARK_VARIANT, ~entityMetadata.getPrimitiveValue() & 0xff);
}
public void setLeftParrot(EntityMetadata<CompoundTag> entityMetadata) {
public void setLeftParrot(EntityMetadata<CompoundTag, ?> entityMetadata) {
setParrot(entityMetadata.getValue(), true);
}
public void setRightParrot(EntityMetadata<CompoundTag> entityMetadata) {
public void setRightParrot(EntityMetadata<CompoundTag, ?> entityMetadata) {
setParrot(entityMetadata.getValue(), false);
}
@ -330,7 +332,7 @@ public class PlayerEntity extends LivingEntity {
}
@Override
public void setDisplayName(EntityMetadata<Component> entityMetadata) {
public void setDisplayName(EntityMetadata<Optional<Component>, ?> entityMetadata) {
// Doesn't do anything for players
}
@ -385,7 +387,7 @@ public class PlayerEntity extends LivingEntity {
}
@Override
public void setDisplayNameVisible(EntityMetadata<Boolean> entityMetadata) {
public void setDisplayNameVisible(BooleanEntityMetadata entityMetadata) {
// Doesn't do anything for players
}

View File

@ -110,14 +110,14 @@ public class SessionPlayerEntity extends PlayerEntity {
}
@Override
public void setFlags(EntityMetadata<Byte> entityMetadata) {
public void setFlags(ByteEntityMetadata entityMetadata) {
super.setFlags(entityMetadata);
session.setSwimmingInWater((((ByteEntityMetadata) entityMetadata).getPrimitiveValue() & 0x10) == 0x10 && getFlag(EntityFlag.SPRINTING));
session.setSwimmingInWater((entityMetadata.getPrimitiveValue() & 0x10) == 0x10 && getFlag(EntityFlag.SPRINTING));
refreshSpeed = true;
}
@Override
public void setPose(EntityMetadata<Pose> entityMetadata) {
public void setPose(EntityMetadata<Pose, ?> entityMetadata) {
super.setPose(entityMetadata);
session.setPose(entityMetadata.getValue());
refreshSpeed = true;
@ -132,11 +132,11 @@ public class SessionPlayerEntity extends PlayerEntity {
}
@Override
protected void setAir(int amount) {
protected void setAirSupply(int amount) {
if (amount == getMaxAir()) {
super.setAir(0); // Hide the bubble counter from the UI for the player
super.setAirSupply(0); // Hide the bubble counter from the UI for the player
} else {
super.setAir(amount);
super.setAirSupply(amount);
}
}

View File

@ -26,8 +26,10 @@
package org.geysermc.connector.network.translators.java.entity;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
import com.github.steveice10.mc.protocol.data.game.entity.metadata.MetadataType;
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.ClientboundSetEntityDataPacket;
import org.geysermc.connector.entity.Entity;
import org.geysermc.connector.entity.EntityDefinition;
import org.geysermc.connector.entity.EntityMetadataTranslator;
import org.geysermc.connector.network.session.GeyserSession;
import org.geysermc.connector.network.translators.PacketTranslator;
@ -39,6 +41,7 @@ import java.util.List;
@Translator(packet = ClientboundSetEntityDataPacket.class)
public class JavaSetEntityDataTranslator extends PacketTranslator<ClientboundSetEntityDataPacket> {
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public void translate(GeyserSession session, ClientboundSetEntityDataPacket packet) {
Entity entity;
@ -49,30 +52,17 @@ public class JavaSetEntityDataTranslator extends PacketTranslator<ClientboundSet
}
if (entity == null) return;
List<EntityMetadataTranslator<?, ?>> translators = (List<EntityMetadataTranslator<?, ?>>) entity.getDefinition().translators();
for (EntityMetadata<?> metadata : packet.getMetadata()) {
if (metadata.getId() >= translators.size()) {
session.getConnector().getLogger().warning("Metadata ID " + metadata.getId() + " is out of bounds of known entity metadata size " + translators.size() + " for entity type " + entity.getDefinition().entityType());
EntityDefinition<?> definition = entity.getDefinition();
for (EntityMetadata<?, ?> metadata : packet.getMetadata()) {
if (metadata.getId() >= definition.translators().size()) {
session.getConnector().getLogger().warning("Metadata ID " + metadata.getId() + " is out of bounds of known entity metadata size " + definition.translators().size() + " for entity type " + entity.getDefinition().entityType());
if (session.getConnector().getConfig().isDebugMode()) {
session.getConnector().getLogger().debug(metadata.toString());
}
continue;
}
EntityMetadataTranslator<? super Entity, Object> translator = (EntityMetadataTranslator<? super Entity, Object>) translators.get(metadata.getId());
if (translator == null) {
// This can safely happen; it means we don't translate this entity metadata
continue;
}
if (translator.acceptedType() != metadata.getType()) {
session.getConnector().getLogger().warning("Metadata ID " + metadata.getId() + " was received with type " + metadata.getType() + " but we expected " + translator.acceptedType() + " for " + entity.getDefinition().entityType());
if (session.getConnector().getConfig().isDebugMode()) {
session.getConnector().getLogger().debug(metadata.toString());
}
continue;
}
translator.translateFunction().accept(entity, (EntityMetadata<Object>) metadata);
((EntityDefinition) definition).translateMetadata(entity, metadata);
}
entity.updateBedrockMetadata();

View File

@ -39,6 +39,7 @@ import org.geysermc.connector.utils.FileUtils;
import java.io.InputStream;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

View File

@ -32,6 +32,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import org.geysermc.connector.GeyserConnector;
import org.geysermc.connector.registry.type.ParticleMapping;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;