diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java index 9ff782f..a69ae76 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/entity/EntityPropertyRegistryImpl.java @@ -134,6 +134,9 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { // Frog registerType("frog_variant", FrogVariant.TEMPERATE); + // Ghast + registerType("attacking", false); + // Pufferfish registerType("puff_state", null); // TODO: Make a puff state enum class @@ -211,9 +214,6 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry { // Wither registerType("invulnerable_time", 0); // TODO - // Ghast - registerType("attacking", false); // TODO - // Phantom registerType("phantom_size", 0); // TODO diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java index 4a006c1..1ad92e9 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/MetadataFactory.java @@ -83,4 +83,7 @@ public interface MetadataFactory { // Frog EntityData frogVariant(int variant); + + // Ghast + EntityData ghastAttacking(boolean attacking); } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_10MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_10MetadataFactory.java index 7df916c..d45dc11 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_10MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_10MetadataFactory.java @@ -80,4 +80,9 @@ public class V1_10MetadataFactory extends V1_9MetadataFactory { public EntityData creeperCharged(boolean charged) { return newEntityData(13, EntityDataTypes.BOOLEAN, charged); } + + @Override + public EntityData ghastAttacking(boolean attacking) { + return newEntityData(12, EntityDataTypes.BOOLEAN, attacking); + } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java index a6cd579..e6a8297 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_14MetadataFactory.java @@ -129,4 +129,9 @@ public class V1_14MetadataFactory extends V1_13MetadataFactory { public EntityData foxProperties(boolean sitting, boolean crouching, boolean sleeping, boolean facePlanted) { return newEntityData(16, EntityDataTypes.BYTE, (byte) ((sitting ? 0x01 : 0) | (crouching ? 0x04 : 0) | (sleeping ? 0x20 : 0))); } + + @Override + public EntityData ghastAttacking(boolean attacking) { + return newEntityData(14, EntityDataTypes.BOOLEAN, attacking); + } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java index ba695f8..b56fb01 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_15MetadataFactory.java @@ -113,4 +113,9 @@ public class V1_15MetadataFactory extends V1_14MetadataFactory { public EntityData foxProperties(boolean sitting, boolean crouching, boolean sleeping, boolean facePlanted) { return newEntityData(17, EntityDataTypes.BYTE, (byte) ((sitting ? 0x01 : 0) | (crouching ? 0x04 : 0) | (sleeping ? 0x20 : 0) | (facePlanted ? 0x40 : 0))); } + + @Override + public EntityData ghastAttacking(boolean attacking) { + return newEntityData(15, EntityDataTypes.BOOLEAN, attacking); + } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java index 8b93789..4c139e0 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_17MetadataFactory.java @@ -173,4 +173,9 @@ public class V1_17MetadataFactory extends V1_16MetadataFactory { public EntityData foxProperties(boolean sitting, boolean crouching, boolean sleeping, boolean facePlanted) { return newEntityData(18, EntityDataTypes.BYTE, (byte) ((sitting ? 0x01 : 0) | (crouching ? 0x04 : 0) | (sleeping ? 0x20 : 0) | (facePlanted ? 0x40 : 0))); } + + @Override + public EntityData ghastAttacking(boolean attacking) { + return newEntityData(16, EntityDataTypes.BOOLEAN, attacking); + } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8MetadataFactory.java index 09eeca0..45e171c 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_8MetadataFactory.java @@ -200,6 +200,11 @@ public class V1_8MetadataFactory implements MetadataFactory { throw new UnsupportedOperationException("The frog variant entity data isn't supported on this version"); } + @Override + public EntityData ghastAttacking(boolean attacking) { + return newEntityData(16, EntityDataTypes.BYTE, (byte) (attacking ? 1 : 0)); + } + @Override public EntityData silent(boolean enabled) { return newEntityData(4, EntityDataTypes.BYTE, (byte) (enabled ? 1 : 0)); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9MetadataFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9MetadataFactory.java index 1acc759..a7f7130 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9MetadataFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/metadata/V1_9MetadataFactory.java @@ -62,4 +62,9 @@ public class V1_9MetadataFactory extends V1_8MetadataFactory { public EntityData silent(boolean enabled) { return newEntityData(4, EntityDataTypes.BOOLEAN, enabled); } + + @Override + public EntityData ghastAttacking(boolean attacking) { + return newEntityData(11, EntityDataTypes.BOOLEAN, attacking); + } } diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java index 53ff96d..739ecdc 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/npc/NpcTypeRegistryImpl.java @@ -77,7 +77,8 @@ public class NpcTypeRegistryImpl implements NpcTypeRegistry { .setHologramOffset(-1.675)); register(builder(p, "ghast", EntityTypes.GHAST) - .setHologramOffset(2.025)); + .setHologramOffset(2.025) + .addProperties("attacking")); register(builder(p, "giant", EntityTypes.GIANT) .setHologramOffset(10.025) diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8PacketFactory.java b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8PacketFactory.java index 3b61cfd..04fcf39 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8PacketFactory.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/packets/V1_8PacketFactory.java @@ -208,9 +208,13 @@ public class V1_8PacketFactory implements PacketFactory { properties.getProperty(propertyRegistry.getByName("fox_sleeping", Boolean.class)), properties.getProperty(propertyRegistry.getByName("fox_faceplanted", Boolean.class)) )); - } else if (entity.getType().equals(EntityTypes.FROG)) { + } + else if (entity.getType().equals(EntityTypes.FROG)) { add(data, metadataFactory.frogVariant(properties.getProperty(propertyRegistry.getByName("frog_variant", FrogVariant.class)).ordinal())); } + else if (entity.getType().equals(EntityTypes.GHAST)) { + add(data, metadataFactory.ghastAttacking(properties.getProperty(propertyRegistry.getByName("attacking", Boolean.class)))); + } if (properties.getProperty(propertyRegistry.getByName("dinnerbone", Boolean.class))) { add(data, metadataFactory.name(Component.text("Dinnerbone")));