more metas to add

This commit is contained in:
Tofaa 2023-11-27 17:52:12 +03:00
parent fdc47c5368
commit 0d709013e2
16 changed files with 513 additions and 4 deletions

View file

@ -4,6 +4,13 @@ import com.github.retrooper.packetevents.protocol.entity.type.EntityType;
import me.tofaa.entitylib.meta.EntityMeta; import me.tofaa.entitylib.meta.EntityMeta;
import me.tofaa.entitylib.meta.Metadata; import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.mobs.*; import me.tofaa.entitylib.meta.mobs.*;
import me.tofaa.entitylib.meta.mobs.DonkeyMeta;
import me.tofaa.entitylib.meta.mobs.cuboid.MagmaCubeMeta;
import me.tofaa.entitylib.meta.mobs.cuboid.SlimeMeta;
import me.tofaa.entitylib.meta.mobs.horse.*;
import me.tofaa.entitylib.meta.mobs.tameable.CatMeta;
import me.tofaa.entitylib.meta.mobs.tameable.ParrotMeta;
import me.tofaa.entitylib.meta.mobs.tameable.WolfMeta;
import me.tofaa.entitylib.meta.projectile.SmallFireballMeta; import me.tofaa.entitylib.meta.projectile.SmallFireballMeta;
import me.tofaa.entitylib.meta.projectile.ThrownEggMeta; import me.tofaa.entitylib.meta.projectile.ThrownEggMeta;
import me.tofaa.entitylib.meta.projectile.ThrownExpBottleMeta; import me.tofaa.entitylib.meta.projectile.ThrownExpBottleMeta;
@ -44,6 +51,17 @@ final class MetaConverterRegistry {
put(FROG, FrogMeta::new); put(FROG, FrogMeta::new);
put(GOAT, GoatMeta::new); put(GOAT, GoatMeta::new);
put(HOGLIN, HoglinMeta::new); put(HOGLIN, HoglinMeta::new);
put(CAT, CatMeta::new);
put(PARROT, ParrotMeta::new);
put(WOLF, WolfMeta::new);
put(DONKEY, DonkeyMeta::new);
put(HORSE, HorseMeta::new);
put(LLAMA, LlamaMeta::new);
put(MULE, MuleMeta::new);
put(SKELETON_HORSE, SkeletonHorseMeta::new);
put(ZOMBIE_HORSE, ZombieHorseMeta::new);
put(SLIME, SlimeMeta::new);
put(MAGMA_CUBE, MagmaCubeMeta::new);
} }
private void put(EntityType entityType, BiFunction<Integer, Metadata, EntityMeta> function) { private void put(EntityType entityType, BiFunction<Integer, Metadata, EntityMeta> function) {

View file

@ -0,0 +1,25 @@
package me.tofaa.entitylib.meta.mobs;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.MobMeta;
public class GhastMeta extends MobMeta {
public static final byte OFFSET = MobMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 1;
public GhastMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
public boolean isAttacking() {
return super.metadata.getIndex(OFFSET, false);
}
public void setAttacking(boolean value) {
super.metadata.setIndex(OFFSET, EntityDataTypes.BOOLEAN, value);
}
}

View file

@ -0,0 +1,24 @@
package me.tofaa.entitylib.meta.mobs;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.MobMeta;
public class PhantomMeta extends MobMeta {
public static final byte OFFSET = MobMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 1;
public PhantomMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
public int getSize() {
return super.metadata.getIndex(OFFSET, 0);
}
public void setSize(int value) {
super.metadata.setIndex(OFFSET, EntityDataTypes.INT, value);
}
}

View file

@ -0,0 +1,13 @@
package me.tofaa.entitylib.meta.mobs.cuboid;
import me.tofaa.entitylib.meta.Metadata;
public class MagmaCubeMeta extends SlimeMeta {
public static final byte OFFSET = SlimeMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 0;
public MagmaCubeMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
}

View file

@ -0,0 +1,23 @@
package me.tofaa.entitylib.meta.mobs.cuboid;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.MobMeta;
public class SlimeMeta extends MobMeta {
public static final byte OFFSET = MobMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 1;
public SlimeMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
public int getSize() {
return super.metadata.getIndex(OFFSET, 0);
}
public void setSize(int value) {
super.metadata.setIndex(OFFSET, EntityDataTypes.INT, value);
}
}

View file

@ -0,0 +1,82 @@
package me.tofaa.entitylib.meta.mobs.horse;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.MobMeta;
import java.util.Optional;
import java.util.UUID;
public abstract class BaseHorseMeta extends MobMeta {
public static final byte OFFSET = MobMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 2;
private final static byte TAMED_BIT = 0x02;
private final static byte SADDLED_BIT = 0x04;
private final static byte HAS_BRED_BIT = 0x08;
private final static byte EATING_BIT = 0x10;
private final static byte REARING_BIT = 0x20;
private final static byte MOUTH_OPEN_BIT = 0x40;
protected BaseHorseMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
public boolean isTamed() {
return getMaskBit(OFFSET, TAMED_BIT);
}
public void setTamed(boolean value) {
setMaskBit(OFFSET, TAMED_BIT, value);
}
public boolean isSaddled() {
return getMaskBit(OFFSET, SADDLED_BIT);
}
public void setSaddled(boolean value) {
setMaskBit(OFFSET, SADDLED_BIT, value);
}
public boolean isHasBred() {
return getMaskBit(OFFSET, HAS_BRED_BIT);
}
public void setHasBred(boolean value) {
setMaskBit(OFFSET, HAS_BRED_BIT, value);
}
public boolean isEating() {
return getMaskBit(OFFSET, EATING_BIT);
}
public void setEating(boolean value) {
setMaskBit(OFFSET, EATING_BIT, value);
}
public boolean isRearing() {
return getMaskBit(OFFSET, REARING_BIT);
}
public void setRearing(boolean value) {
setMaskBit(OFFSET, REARING_BIT, value);
}
public boolean isMouthOpen() {
return getMaskBit(OFFSET, MOUTH_OPEN_BIT);
}
public void setMouthOpen(boolean value) {
setMaskBit(OFFSET, MOUTH_OPEN_BIT, value);
}
public Optional<UUID> getOwner() {
return super.metadata.getIndex(offset(OFFSET, 1), Optional.empty());
}
public void setOwner(UUID value) {
super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.OPTIONAL_UUID, Optional.of(value));
}
}

View file

@ -0,0 +1,24 @@
package me.tofaa.entitylib.meta.mobs.horse;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
public class ChestedHorseMeta extends BaseHorseMeta {
public static final byte OFFSET = BaseHorseMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 1;
public ChestedHorseMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
public boolean isHasChest() {
return super.metadata.getIndex(OFFSET, false);
}
public void setHasChest(boolean value) {
super.metadata.setIndex(OFFSET, EntityDataTypes.BOOLEAN, value);
}
}

View file

@ -0,0 +1,14 @@
package me.tofaa.entitylib.meta.mobs.horse;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.MobMeta;
public class DonkeyMeta extends ChestedHorseMeta{
public static final byte OFFSET = MobMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 0;
public DonkeyMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
}

View file

@ -0,0 +1,87 @@
package me.tofaa.entitylib.meta.mobs.horse;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
import org.jetbrains.annotations.NotNull;
public class HorseMeta extends BaseHorseMeta {
public static final byte OFFSET = BaseHorseMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 1;
public HorseMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
public Variant getVariant() {
return getVariantFromID(super.metadata.getIndex(OFFSET, 0));
}
public void setVariant(Variant variant) {
super.metadata.setIndex(OFFSET, EntityDataTypes.INT, getVariantID(variant.marking, variant.color));
}
public static int getVariantID(@NotNull Marking marking, @NotNull Color color) {
return (marking.ordinal() << 8) + color.ordinal();
}
public static Variant getVariantFromID(int variantID) {
return new Variant(
Marking.VALUES[variantID >> 8],
Color.VALUES[variantID & 0xFF]
);
}
public static class Variant {
private Marking marking;
private Color color;
public Variant(@NotNull Marking marking, @NotNull Color color) {
this.marking = marking;
this.color = color;
}
@NotNull
public Marking getMarking() {
return this.marking;
}
public void setMarking(@NotNull Marking marking) {
this.marking = marking;
}
@NotNull
public Color getColor() {
return this.color;
}
public void setColor(@NotNull Color color) {
this.color = color;
}
}
public enum Marking {
NONE,
WHITE,
WHITE_FIELD,
WHITE_DOTS,
BLACK_DOTS;
private final static Marking[] VALUES = values();
}
public enum Color {
WHITE,
CREAMY,
CHESTNUT,
BROWN,
BLACK,
GRAY,
DARK_BROWN;
private final static Color[] VALUES = values();
}
}

View file

@ -0,0 +1,48 @@
package me.tofaa.entitylib.meta.mobs.horse;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
public class LlamaMeta extends ChestedHorseMeta{
public static final byte OFFSET = ChestedHorseMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 3;
public LlamaMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
public int getStrength() {
return super.metadata.getIndex(OFFSET, 0);
}
public void setStrength(int value) {
super.metadata.setIndex(OFFSET, EntityDataTypes.INT, value);
}
public int getCarpetColor() {
return super.metadata.getIndex(offset(OFFSET, 1), -1);
}
public void setCarpetColor(int value) {
super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.INT, value);
}
public Variant getVariant() {
return Variant.VALUES[super.metadata.getIndex(offset(OFFSET, 2), 0)];
}
public void setVariant(Variant value) {
super.metadata.setIndex(offset(OFFSET, 2), EntityDataTypes.INT, value.ordinal());
}
public enum Variant {
CREAMY,
WHITE,
BROWN,
GRAY;
private final static Variant[] VALUES = values();
}
}

View file

@ -0,0 +1,13 @@
package me.tofaa.entitylib.meta.mobs.horse;
import me.tofaa.entitylib.meta.Metadata;
public class MuleMeta extends ChestedHorseMeta{
public static final byte OFFSET = ChestedHorseMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 0;
public MuleMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
}

View file

@ -0,0 +1,13 @@
package me.tofaa.entitylib.meta.mobs.horse;
import me.tofaa.entitylib.meta.Metadata;
public class SkeletonHorseMeta extends BaseHorseMeta {
public static final byte OFFSET = BaseHorseMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 0;
public SkeletonHorseMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
}

View file

@ -0,0 +1,13 @@
package me.tofaa.entitylib.meta.mobs.horse;
import me.tofaa.entitylib.meta.Metadata;
public class ZombieHorseMeta extends BaseHorseMeta {
public static final byte OFFSET = BaseHorseMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 0;
public ZombieHorseMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
}

View file

@ -1,23 +1,57 @@
package me.tofaa.entitylib.meta.mobs.tameable; package me.tofaa.entitylib.meta.mobs.tameable;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes;
import me.tofaa.entitylib.extras.DyeColor;
import me.tofaa.entitylib.meta.Metadata; import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.TameableMeta; import me.tofaa.entitylib.meta.types.TameableMeta;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import org.jetbrains.annotations.NotNull;
public class CatMeta extends TameableMeta { public class CatMeta extends TameableMeta {
public static final byte OFFSET = TameableMeta.MAX_OFFSET; public static final byte OFFSET = TameableMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 4; public static final byte MAX_OFFSET = OFFSET + 4;
private static final NamedTextColor[] COLORS = new NamedTextColor[] { private static final DyeColor[] COLORS = DyeColor.values();
NamedTextColor.BLACK, NamedTextColor.RED, NamedTextColor.WHITE, NamedTextColor.YELLOW, NamedTextColor.GRAY,
NamedTextColor.WHITE,
};
public CatMeta(int entityId, Metadata metadata) { public CatMeta(int entityId, Metadata metadata) {
super(entityId, metadata); super(entityId, metadata);
} }
@NotNull
public CatMeta.Variant getVariant() {
return super.metadata.getIndex(OFFSET, Variant.BLACK);
}
public void setVariant(@NotNull CatMeta.Variant value) {
super.metadata.setIndex(OFFSET, EntityDataTypes.CAT_VARIANT, value.ordinal());
}
public boolean isLying() {
return super.metadata.getIndex(offset(OFFSET, 1), false);
}
public void setLying(boolean value) {
super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.BOOLEAN, value);
}
public boolean isRelaxed() {
return super.metadata.getIndex(offset(OFFSET, 2), false);
}
public void setRelaxed(boolean value) {
super.metadata.setIndex(offset(OFFSET, 2), EntityDataTypes.BOOLEAN, value);
}
public @NotNull DyeColor getCollarColor() {
return COLORS[super.metadata.getIndex(offset(OFFSET, 3), DyeColor.RED.ordinal())];
}
public void setCollarColor(@NotNull DyeColor value) {
super.metadata.setIndex(offset(OFFSET, 3), EntityDataTypes.INT, value.ordinal());
}
public enum Variant { public enum Variant {
TABBY, TABBY,

View file

@ -0,0 +1,38 @@
package me.tofaa.entitylib.meta.mobs.tameable;
import com.github.retrooper.packetevents.manager.server.ServerVersion;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.TameableMeta;
import org.jetbrains.annotations.NotNull;
public class ParrotMeta extends TameableMeta {
public static final byte OFFSET = TameableMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 1;
public ParrotMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
isVersionNewer(ServerVersion.V_1_14);
}
@NotNull
public Color getColor() {
return Color.VALUES[super.metadata.getIndex(OFFSET, 0)];
}
public void setColor(@NotNull Color value) {
super.metadata.setIndex(OFFSET, EntityDataTypes.INT, value.ordinal());
}
public enum Color {
RED_BLUE,
BLUE,
GREEN,
YELLOW_BLUE,
GREY;
private final static Color[] VALUES = values();
}
}

View file

@ -0,0 +1,40 @@
package me.tofaa.entitylib.meta.mobs.tameable;
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes;
import me.tofaa.entitylib.meta.Metadata;
import me.tofaa.entitylib.meta.types.TameableMeta;
public class WolfMeta extends TameableMeta {
public static final byte OFFSET = TameableMeta.MAX_OFFSET;
public static final byte MAX_OFFSET = OFFSET + 3;
public WolfMeta(int entityId, Metadata metadata) {
super(entityId, metadata);
}
public boolean isBegging() {
return super.metadata.getIndex(OFFSET, false);
}
public void setBegging(boolean value) {
super.metadata.setIndex(OFFSET, EntityDataTypes.BOOLEAN, value);
}
public int getCollarColor() {
return super.metadata.getIndex(offset(OFFSET, 1), 14);
}
public void setCollarColor(int value) {
super.metadata.setIndex(offset(OFFSET, 1), EntityDataTypes.INT, value);
}
public int getAngerTime() {
return super.metadata.getIndex(offset(OFFSET, 2), 0);
}
public void setAngerTime(int value) {
super.metadata.setIndex(offset(OFFSET, 2), EntityDataTypes.INT, value);
}
}