diff --git a/gradle.properties b/gradle.properties index e27f9121..a1172edc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,6 +2,5 @@ fancylibVersion=37 fancysitulaVersion=0.0.13 jdbVersion=1.0.0 plugintestsVersion=1.0.0 - -org.gradle.parallel=true +org.gradle.parallel=false org.gradle.caching=true \ No newline at end of file diff --git a/plugins/fancynpcs/VERSION b/plugins/fancynpcs/VERSION index df87611b..87839fe0 100644 --- a/plugins/fancynpcs/VERSION +++ b/plugins/fancynpcs/VERSION @@ -1 +1 @@ -2.6.0.283 \ No newline at end of file +2.6.0.284 \ No newline at end of file diff --git a/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/Npc_1_21_6.java b/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/Npc_1_21_6.java index 6889f9d0..7121b07a 100644 --- a/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/Npc_1_21_6.java +++ b/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/Npc_1_21_6.java @@ -267,13 +267,25 @@ public class Npc_1_21_6 extends Npc { npc.setGlowingTag(data.isGlowing()); - if (data.getEquipment() != null && data.getEquipment().size() > 0) { - List> equipmentList = new ArrayList<>(); + data.applyAllAttributes(this); + // Set equipment + List> equipmentList = new ArrayList<>(); + if (data.getEquipment() != null) { for (NpcEquipmentSlot slot : data.getEquipment().keySet()) { equipmentList.add(new Pair<>(EquipmentSlot.byName(slot.toNmsName()), CraftItemStack.asNMSCopy(data.getEquipment().get(slot)))); } + } + // Set body slot (from happy ghast harness attribute) + if (npc instanceof LivingEntity livingEntity) { + ItemStack bodySlot = livingEntity.getItemBySlot(EquipmentSlot.BODY); + if (!bodySlot.isEmpty()) { + equipmentList.add(new Pair<>(EquipmentSlot.BODY, bodySlot)); + } + } + + if (!equipmentList.isEmpty()) { ClientboundSetEquipmentPacket setEquipmentPacket = new ClientboundSetEquipmentPacket(npc.getId(), equipmentList); serverPlayer.connection.send(setEquipmentPacket); } @@ -283,8 +295,6 @@ public class Npc_1_21_6 extends Npc { npc.getEntityData().set(net.minecraft.world.entity.player.Player.DATA_PLAYER_MODE_CUSTOMISATION, (byte) (0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40)); } - data.applyAllAttributes(this); - refreshEntityData(player); if (data.isSpawnEntity() && data.getLocation() != null) { diff --git a/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/attributes/Attributes_1_21_6.java b/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/attributes/Attributes_1_21_6.java index c2a89af7..0e00e25b 100644 --- a/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/attributes/Attributes_1_21_6.java +++ b/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/attributes/Attributes_1_21_6.java @@ -42,6 +42,7 @@ public class Attributes_1_21_6 { attributes.addAll(BeeAttributes.getAllAttributes()); attributes.addAll(VexAttributes.getAllAttributes()); attributes.addAll(ArmadilloAttributes.getAllAttributes()); + attributes.addAll(HappyGhastAttributes.getAllAttributes()); attributes.addAll(DisplayAttributes.getAllAttributes()); attributes.addAll(TextDisplayAttributes.getAllAttributes()); diff --git a/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/attributes/HappyGhastAttributes.java b/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/attributes/HappyGhastAttributes.java new file mode 100644 index 00000000..6f06bbb3 --- /dev/null +++ b/plugins/fancynpcs/implementation_1_21_6/src/main/java/de/oliver/fancynpcs/v1_21_6/attributes/HappyGhastAttributes.java @@ -0,0 +1,57 @@ +package de.oliver.fancynpcs.v1_21_6.attributes; + +import de.oliver.fancynpcs.api.Npc; +import de.oliver.fancynpcs.api.NpcAttribute; +import de.oliver.fancynpcs.v1_21_6.ReflectionHelper; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.animal.HappyGhast; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import org.bukkit.entity.EntityType; + +import java.util.ArrayList; +import java.util.List; + +public class HappyGhastAttributes { + + public static List getAllAttributes() { + List attributes = new ArrayList<>(); + + attributes.add(new NpcAttribute( + "harness", + List.of("white", "orange", "magenta", "light_blue", "yellow", "lime", "pink", "gray", "light_gray", "cyan", "purple", "blue", "brown", "green", "red", "black"), + List.of(EntityType.HAPPY_GHAST), + HappyGhastAttributes::setHarness + )); + + return attributes; + } + + private static void setHarness(Npc npc, String value) { + HappyGhast ghast = ReflectionHelper.getEntity(npc); + + ItemStack harnessItem = switch (value.toLowerCase()) { + case "white" -> Items.WHITE_HARNESS.getDefaultInstance(); + case "orange" -> Items.ORANGE_HARNESS.getDefaultInstance(); + case "magenta" -> Items.MAGENTA_HARNESS.getDefaultInstance(); + case "light_blue" -> Items.LIGHT_BLUE_HARNESS.getDefaultInstance(); + case "yellow" -> Items.YELLOW_HARNESS.getDefaultInstance(); + case "lime" -> Items.LIME_HARNESS.getDefaultInstance(); + case "pink" -> Items.PINK_HARNESS.getDefaultInstance(); + case "gray" -> Items.GRAY_HARNESS.getDefaultInstance(); + case "light_gray" -> Items.LIGHT_GRAY_HARNESS.getDefaultInstance(); + case "cyan" -> Items.CYAN_HARNESS.getDefaultInstance(); + case "purple" -> Items.PURPLE_HARNESS.getDefaultInstance(); + case "blue" -> Items.BLUE_HARNESS.getDefaultInstance(); + case "brown" -> Items.BROWN_HARNESS.getDefaultInstance(); + case "green" -> Items.GREEN_HARNESS.getDefaultInstance(); + case "red" -> Items.RED_HARNESS.getDefaultInstance(); + case "black" -> Items.BLACK_HARNESS.getDefaultInstance(); + default -> Items.AIR.getDefaultInstance(); + }; + + if (!harnessItem.isEmpty()) { + ghast.setItemSlot(EquipmentSlot.BODY, harnessItem); + } + } +}