From 3c31fd05b75778ca6fca76a4c5a2fa7ef94c2168 Mon Sep 17 00:00:00 2001 From: Big Pappa Date: Fri, 11 Sep 2026 17:48:27 -0500 Subject: [PATCH] 1.0.4 Added: - Wolf Support --- build.gradle.kts | 2 +- .../descriptor/MobDescriptorRegistry.java | 1 + .../descriptor/WolfDescriptor.java | 113 ++++++++++++++++++ .../mobcage/listener/MobReleaseListener.java | 3 + 4 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/rsscripting/mobcage/description/descriptor/WolfDescriptor.java diff --git a/build.gradle.kts b/build.gradle.kts index b57fa53..9dff019 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "com.rsscripting" -version = "1.0.3" +version = "1.0.4" val pluginVersion = version.toString() repositories { diff --git a/src/main/java/com/rsscripting/mobcage/description/descriptor/MobDescriptorRegistry.java b/src/main/java/com/rsscripting/mobcage/description/descriptor/MobDescriptorRegistry.java index 3eae7a1..456727c 100644 --- a/src/main/java/com/rsscripting/mobcage/description/descriptor/MobDescriptorRegistry.java +++ b/src/main/java/com/rsscripting/mobcage/description/descriptor/MobDescriptorRegistry.java @@ -21,6 +21,7 @@ public final class MobDescriptorRegistry { new SheepDescriptor(), new SpiderDescriptor(), new VillagerDescriptor(), + new WolfDescriptor(), new ZombieDescriptor() ); diff --git a/src/main/java/com/rsscripting/mobcage/description/descriptor/WolfDescriptor.java b/src/main/java/com/rsscripting/mobcage/description/descriptor/WolfDescriptor.java new file mode 100644 index 0000000..7cc92ab --- /dev/null +++ b/src/main/java/com/rsscripting/mobcage/description/descriptor/WolfDescriptor.java @@ -0,0 +1,113 @@ +package com.rsscripting.mobcage.description.descriptor; + +import com.rsscripting.mobcage.description.CaptureResult; +import com.rsscripting.mobcage.description.MobAttribute; +import com.rsscripting.mobcage.description.MobDescriptionFormatter; +import com.rsscripting.mobcage.util.MobAgeUtil; +import com.rsscripting.mobcage.util.MobHealthUtil; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Wolf; + +import java.util.List; + +public class WolfDescriptor implements MobDescriptor { + + @Override + public boolean supports(LivingEntity entity) { + return entity instanceof Wolf; + } + + @Override + public CaptureResult beforeCapture(LivingEntity entity, Player player) { + + CaptureResult result = MobHealthUtil.validateFullHealth(entity); + + if (!result.isAllowed()) { + return result; + } + + MobAgeUtil.normalize(entity); + + return CaptureResult.allowed(); + } + + @Override + public String getDisplayName(LivingEntity entity) { + return MobAgeUtil.getAgePrefix(entity) + "Wolf"; + } + + @Override + public List getAttributes(LivingEntity entity) { + + Wolf wolf = (Wolf) entity; + + return List.of( + new MobAttribute( + "Variant", + MobDescriptionFormatter.formatEnumName( + wolf.getVariant().getKey().getKey() + ) + ) + ); + } + + @Override + public void release(Location location, List lore) { + + PlainTextComponentSerializer plain = + PlainTextComponentSerializer.plainText(); + + boolean baby = false; + Wolf.Variant variant = Wolf.Variant.PALE; + + for (int i = 0; i < lore.size(); i++) { + + String line = plain.serialize(lore.get(i)); + + if (line.equals("Contains:") && i + 1 < lore.size()) { + baby = plain.serialize(lore.get(i + 1)) + .equals("Baby Wolf"); + } + + if (line.equals("Variant:") && i + 1 < lore.size()) { + variant = getVariant( + plain.serialize(lore.get(i + 1)) + ); + } + } + + Wolf wolf = (Wolf) location.getWorld().spawnEntity( + location, + EntityType.WOLF + ); + + if (baby) { + wolf.setBaby(); + } else { + wolf.setAdult(); + } + + wolf.setVariant(variant); + } + + private Wolf.Variant getVariant(String value) { + + return switch (value) { + case "Ashen" -> Wolf.Variant.ASHEN; + case "Black" -> Wolf.Variant.BLACK; + case "Chestnut" -> Wolf.Variant.CHESTNUT; + case "Pale" -> Wolf.Variant.PALE; + case "Rusty" -> Wolf.Variant.RUSTY; + case "Snowy" -> Wolf.Variant.SNOWY; + case "Spotted" -> Wolf.Variant.SPOTTED; + case "Striped" -> Wolf.Variant.STRIPED; + case "Woods" -> Wolf.Variant.WOODS; + default -> Wolf.Variant.PALE; + }; + } +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/mobcage/listener/MobReleaseListener.java b/src/main/java/com/rsscripting/mobcage/listener/MobReleaseListener.java index f32c2b7..30477fe 100644 --- a/src/main/java/com/rsscripting/mobcage/listener/MobReleaseListener.java +++ b/src/main/java/com/rsscripting/mobcage/listener/MobReleaseListener.java @@ -103,6 +103,9 @@ public class MobReleaseListener implements Listener { case "Villager", "Baby Villager" -> new VillagerDescriptor().release(location, lore); + case "Wolf", "Baby Wolf" -> + new WolfDescriptor().release(location, lore); + case "Zombie", "Baby Zombie" -> new ZombieDescriptor().release(location, lore);