diff --git a/src/main/java/xiamomc/morph/backends/DisguiseWrapper.java b/src/main/java/xiamomc/morph/backends/DisguiseWrapper.java index cfc93d94..aa8129d4 100644 --- a/src/main/java/xiamomc/morph/backends/DisguiseWrapper.java +++ b/src/main/java/xiamomc/morph/backends/DisguiseWrapper.java @@ -184,7 +184,7 @@ else if (getEntityType() == EntityType.ITEM_DISPLAY) if (getEntityType() != EntityType.SLIME && getEntityType() != EntityType.MAGMA_CUBE) return; - var dimScale = getSlimeDimensionScale(); + var dimScale = getSlimeSize(); this.dimensions = EntityDimensions.fixed(0.51F * dimScale, 0.51F * dimScale); } @@ -203,7 +203,7 @@ public EntityDimensions getDimensions() public abstract boolean isBaby(); - protected float getSlimeDimensionScale() + protected int getSlimeSize() { return Math.max(1, getCompound().getInt("Size")); } diff --git a/src/main/java/xiamomc/morph/backends/server/ServerBackend.java b/src/main/java/xiamomc/morph/backends/server/ServerBackend.java index 040c1afb..31c983cb 100644 --- a/src/main/java/xiamomc/morph/backends/server/ServerBackend.java +++ b/src/main/java/xiamomc/morph/backends/server/ServerBackend.java @@ -140,7 +140,6 @@ public boolean isDisguised(@org.jetbrains.annotations.Nullable Entity target) @Override public boolean disguise(Player player, DisguiseWrapper wrapper) { - logger.info("Incoming wrapper is " + wrapper); if (!(wrapper instanceof ServerDisguiseWrapper serverDisguiseWrapper)) return false; if (disguiseWrapperMap.containsKey(player.getUniqueId())) unDisguise(player); diff --git a/src/main/java/xiamomc/morph/backends/server/ServerDisguiseWrapper.java b/src/main/java/xiamomc/morph/backends/server/ServerDisguiseWrapper.java index a95c41d2..e4b71621 100644 --- a/src/main/java/xiamomc/morph/backends/server/ServerDisguiseWrapper.java +++ b/src/main/java/xiamomc/morph/backends/server/ServerDisguiseWrapper.java @@ -18,7 +18,8 @@ import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.SingleWatcher; import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.ArmorStandWatcher; import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.GhastWatcher; -import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.SlimeWatcher; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.slimemagma.AbstractSlimeWatcher; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.slimemagma.SlimeWatcher; import xiamomc.morph.backends.server.renderer.network.registries.EntryIndex; import xiamomc.morph.misc.DisguiseEquipment; import xiamomc.morph.misc.DisguiseState; @@ -47,7 +48,7 @@ public void mergeCompound(CompoundTag compoundTag) if (bindingWatcher != null) { - if (bindingWatcher instanceof SlimeWatcher slimeWatcher) + if (bindingWatcher instanceof AbstractSlimeWatcher slimeWatcher) { var size = Math.max(1, getCompound().getInt("Size")); slimeWatcher.write(ValueIndex.SLIME_MAGMA.SIZE, size); @@ -346,5 +347,8 @@ private void refreshRegistry() if (bindingWatcher instanceof ArmorStandWatcher armorStandWatcher) armorStandWatcher.write(ValueIndex.ARMOR_STAND.DATA_FLAGS, getArmorStandFlags()); + + if (bindingWatcher instanceof AbstractSlimeWatcher slimeWatcher) + slimeWatcher.write(ValueIndex.SLIME_MAGMA.SIZE, getSlimeSize()); } } diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/ValueIndex.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/ValueIndex.java index 0a0e0b4d..d72da3d5 100644 --- a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/ValueIndex.java +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/ValueIndex.java @@ -1,5 +1,6 @@ package xiamomc.morph.backends.server.renderer.network.datawatcher; +import org.checkerframework.checker.units.qual.A; import xiamomc.morph.backends.server.renderer.network.datawatcher.values.*; public class ValueIndex @@ -12,4 +13,6 @@ public class ValueIndex public static final PlayerValues PLAYER = new PlayerValues(); public static final SlimeValues SLIME_MAGMA = new SlimeValues(); public static final GhastValues GHAST = new GhastValues(); + public static final AbstractHorseValues ABSTRACT_HORSE = new AbstractHorseValues(); + public static final HorseValues HORSE = new HorseValues(); } diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/WatcherIndex.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/WatcherIndex.java index 697d9efe..52a23918 100644 --- a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/WatcherIndex.java +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/WatcherIndex.java @@ -3,9 +3,14 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; -import xiamomc.morph.backends.server.renderer.network.datawatcher.values.ArmorStandValues; import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.SingleWatcher; import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.*; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.horses.AbstractHorseWatcher; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.horses.HorseWatcher; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.horses.SkeletonHorseWatcher; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.horses.ZombieHorseWatcher; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.slimemagma.MagmaWatcher; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.slimemagma.SlimeWatcher; import java.util.Map; import java.util.function.Function; @@ -30,6 +35,12 @@ public WatcherIndex() setTypeWatcher(EntityType.SLIME, SlimeWatcher::new); setTypeWatcher(EntityType.MAGMA_CUBE, MagmaWatcher::new); setTypeWatcher(EntityType.GHAST, GhastWatcher::new); + + setTypeWatcher(EntityType.HORSE, HorseWatcher::new); + setTypeWatcher(EntityType.SKELETON_HORSE, SkeletonHorseWatcher::new); + setTypeWatcher(EntityType.ZOMBIE_HORSE, ZombieHorseWatcher::new); + + setTypeWatcher(EntityType.CAMEL, p -> new AbstractHorseWatcher(p, EntityType.CAMEL)); } private void setTypeWatcher(EntityType type, Function func) diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/values/AbstractHorseValues.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/values/AbstractHorseValues.java new file mode 100644 index 00000000..4397464f --- /dev/null +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/values/AbstractHorseValues.java @@ -0,0 +1,13 @@ +package xiamomc.morph.backends.server.renderer.network.datawatcher.values; + +public class AbstractHorseValues extends AgeableMobValues +{ + public final SingleValue FLAGS = getSingle((byte)0); + + public AbstractHorseValues() + { + super(); + + registerSingle(FLAGS); + } +} diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/values/AgeableMobValues.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/values/AgeableMobValues.java new file mode 100644 index 00000000..cad50941 --- /dev/null +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/values/AgeableMobValues.java @@ -0,0 +1,13 @@ +package xiamomc.morph.backends.server.renderer.network.datawatcher.values; + +public class AgeableMobValues extends MobValues +{ + public final SingleValue IS_BABY = getSingle(false); + + public AgeableMobValues() + { + super(); + + registerSingle(IS_BABY); + } +} diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/values/HorseValues.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/values/HorseValues.java new file mode 100644 index 00000000..4fb39f83 --- /dev/null +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/values/HorseValues.java @@ -0,0 +1,13 @@ +package xiamomc.morph.backends.server.renderer.network.datawatcher.values; + +public class HorseValues extends AbstractHorseValues +{ + public final SingleValue VARIANT = getSingle(0); + + public HorseValues() + { + super(); + + registerSingle(VARIANT); + } +} diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/SingleWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/SingleWatcher.java index cd9a7377..66ed5ea6 100644 --- a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/SingleWatcher.java +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/SingleWatcher.java @@ -4,6 +4,7 @@ import com.comphenix.protocol.events.PacketContainer; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectLists; +import net.minecraft.server.packs.repository.Pack; import net.minecraft.world.level.GameType; import org.bukkit.Bukkit; import org.bukkit.entity.EntityType; @@ -164,6 +165,15 @@ public void write(int index, Object value) dirtySingles.put(single, value); onTrackerWrite(index, prev, value); + sendPacketToAffectedPlayers(packetFactory.buildMetaPacket(getBindingPlayer(), this)); + } + + @Resolved(shouldSolveImmediately = true) + private PacketFactory packetFactory; + + protected PacketFactory getPacketFactory() + { + return packetFactory; } protected void onTrackerWrite(int index, Object oldVal, Object newVal) diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/AllayWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/AllayWatcher.java index 12c879dc..2b06840e 100644 --- a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/AllayWatcher.java +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/AllayWatcher.java @@ -22,7 +22,6 @@ public AllayWatcher(Player bindingPlayer) @Override protected void doSync() { - write(ValueIndex.ALLAY.DANCING, true); super.doSync(); } } diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/ArmorStandWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/ArmorStandWatcher.java index 4a4d6c62..9d9e8086 100644 --- a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/ArmorStandWatcher.java +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/ArmorStandWatcher.java @@ -28,16 +28,4 @@ protected void doSync() { super.doSync(); } - - @Resolved(shouldSolveImmediately = true) - private PacketFactory packetFactory; - - @Override - protected void onTrackerWrite(int index, Object oldVal, Object newVal) - { - super.onTrackerWrite(index, oldVal, newVal); - - if (ValueIndex.ARMOR_STAND.DATA_FLAGS.equals(getSingle(index))) - sendPacketToAffectedPlayers(packetFactory.buildMetaPacket(getBindingPlayer(), this)); - } } diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/GhastWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/GhastWatcher.java index 9ab02653..a43424e7 100644 --- a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/GhastWatcher.java +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/GhastWatcher.java @@ -21,16 +21,4 @@ public GhastWatcher(Player bindingPlayer) { super(bindingPlayer, EntityType.GHAST); } - - @Resolved(shouldSolveImmediately = true) - private PacketFactory packetFactory; - - @Override - protected void onTrackerWrite(int index, Object oldVal, Object newVal) - { - super.onTrackerWrite(index, oldVal, newVal); - - if (ValueIndex.GHAST.CHARGING.equals(getSingle(index))) - sendPacketToAffectedPlayers(packetFactory.buildMetaPacket(getBindingPlayer(), this)); - } } diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/PlayerWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/PlayerWatcher.java index 76f1b4eb..879c32cc 100644 --- a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/PlayerWatcher.java +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/PlayerWatcher.java @@ -32,16 +32,4 @@ protected void doSync() super.doSync(); } - - @Resolved(shouldSolveImmediately = true) - private PacketFactory packetFactory; - - @Override - protected void onCustomWrite(RegistryKey key, Object oldVal, Object newVal) - { - super.onCustomWrite(key, oldVal, newVal); - - if (key.equals(EntryIndex.DISPLAY_FAKE_EQUIPMENT) || key.equals(EntryIndex.EQUIPMENT)) - sendPacketToAffectedPlayers(packetFactory.getEquipmentPacket(getBindingPlayer(), this)); - } } diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/AbstractHorseWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/AbstractHorseWatcher.java new file mode 100644 index 00000000..f8c0e8a9 --- /dev/null +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/AbstractHorseWatcher.java @@ -0,0 +1,22 @@ +package xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.horses; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import xiamomc.morph.backends.server.renderer.network.datawatcher.ValueIndex; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.LivingEntityWatcher; + +public class AbstractHorseWatcher extends LivingEntityWatcher +{ + @Override + protected void initRegistry() + { + super.initRegistry(); + + register(ValueIndex.ABSTRACT_HORSE); + } + + public AbstractHorseWatcher(Player bindingPlayer, EntityType entityType) + { + super(bindingPlayer, entityType); + } +} diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/HorseWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/HorseWatcher.java new file mode 100644 index 00000000..4d35f6ee --- /dev/null +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/HorseWatcher.java @@ -0,0 +1,21 @@ +package xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.horses; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import xiamomc.morph.backends.server.renderer.network.datawatcher.ValueIndex; + +public class HorseWatcher extends AbstractHorseWatcher +{ + public HorseWatcher(Player bindingPlayer) + { + super(bindingPlayer, EntityType.HORSE); + } + + @Override + protected void initRegistry() + { + super.initRegistry(); + + register(ValueIndex.HORSE); + } +} diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/SkeletonHorseWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/SkeletonHorseWatcher.java new file mode 100644 index 00000000..c0ff0f8c --- /dev/null +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/SkeletonHorseWatcher.java @@ -0,0 +1,12 @@ +package xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.horses; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +public class SkeletonHorseWatcher extends AbstractHorseWatcher +{ + public SkeletonHorseWatcher(Player bindingPlayer) + { + super(bindingPlayer, EntityType.SKELETON_HORSE); + } +} diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/ZombieHorseWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/ZombieHorseWatcher.java new file mode 100644 index 00000000..b9cb482b --- /dev/null +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/horses/ZombieHorseWatcher.java @@ -0,0 +1,12 @@ +package xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.horses; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; + +public class ZombieHorseWatcher extends AbstractHorseWatcher +{ + public ZombieHorseWatcher(Player bindingPlayer) + { + super(bindingPlayer, EntityType.ZOMBIE_HORSE); + } +} diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/slimemagma/AbstractSlimeWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/slimemagma/AbstractSlimeWatcher.java new file mode 100644 index 00000000..40f80268 --- /dev/null +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/slimemagma/AbstractSlimeWatcher.java @@ -0,0 +1,23 @@ +package xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.slimemagma; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import xiamomc.morph.backends.server.renderer.network.datawatcher.ValueIndex; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.LivingEntityWatcher; + +public class AbstractSlimeWatcher extends LivingEntityWatcher +{ + @Override + protected void initRegistry() + { + super.initRegistry(); + + register(ValueIndex.SLIME_MAGMA); + } + + public AbstractSlimeWatcher(Player bindingPlayer, EntityType entityType) + { + super(bindingPlayer, entityType); + + } +} diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/MagmaWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/slimemagma/MagmaWatcher.java similarity index 61% rename from src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/MagmaWatcher.java rename to src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/slimemagma/MagmaWatcher.java index 7a7ad776..6ab82ee3 100644 --- a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/MagmaWatcher.java +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/slimemagma/MagmaWatcher.java @@ -1,19 +1,12 @@ -package xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types; +package xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.slimemagma; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import xiamomc.morph.backends.server.renderer.network.datawatcher.ValueIndex; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.LivingEntityWatcher; -public class MagmaWatcher extends LivingEntityWatcher +public class MagmaWatcher extends AbstractSlimeWatcher { - @Override - protected void initRegistry() - { - super.initRegistry(); - - register(ValueIndex.SLIME_MAGMA); - } - public MagmaWatcher(Player bindingPlayer) { super(bindingPlayer, EntityType.MAGMA_CUBE); diff --git a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/SlimeWatcher.java b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/slimemagma/SlimeWatcher.java similarity index 61% rename from src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/SlimeWatcher.java rename to src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/slimemagma/SlimeWatcher.java index 81ca6c0c..2c2fb57d 100644 --- a/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/SlimeWatcher.java +++ b/src/main/java/xiamomc/morph/backends/server/renderer/network/datawatcher/watchers/types/slimemagma/SlimeWatcher.java @@ -1,19 +1,12 @@ -package xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types; +package xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.slimemagma; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import xiamomc.morph.backends.server.renderer.network.datawatcher.ValueIndex; +import xiamomc.morph.backends.server.renderer.network.datawatcher.watchers.types.LivingEntityWatcher; -public class SlimeWatcher extends LivingEntityWatcher +public class SlimeWatcher extends AbstractSlimeWatcher { - @Override - protected void initRegistry() - { - super.initRegistry(); - - register(ValueIndex.SLIME_MAGMA); - } - public SlimeWatcher(Player bindingPlayer) { super(bindingPlayer, EntityType.SLIME);