diff --git a/build.gradle.kts b/build.gradle.kts index 2aa347d..5bdbb2a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } group = "com.rsscripting" -version = "1.1.3" +version = "1.1.5" val pluginVersion = version.toString() repositories { diff --git a/docs/Supported-Mobs.md b/docs/Supported-Mobs.md index 2861f26..8c2fde0 100644 --- a/docs/Supported-Mobs.md +++ b/docs/Supported-Mobs.md @@ -16,17 +16,22 @@ RS-MobCages supports the following mobs: - Bee - Cat - Cave Spider -- Cow - Chicken +- Cow - Donkey - Frog +- Goat - Horse +- Magma Cube - Parrot - Pig - Rabbit - Sheep +- Skeleton +- Slime - Spider - Villager +- Wolf - Zombie diff --git a/src/main/java/com/rsscripting/mobcage/MobCage.java b/src/main/java/com/rsscripting/mobcage/MobCage.java index 0d27f38..b7ba95a 100644 --- a/src/main/java/com/rsscripting/mobcage/MobCage.java +++ b/src/main/java/com/rsscripting/mobcage/MobCage.java @@ -31,6 +31,10 @@ public final class MobCage extends JavaPlugin { this ); + getLogger().info( + "RS-MobCage Enabled" + ); + } @Override diff --git a/src/main/java/com/rsscripting/mobcage/description/descriptor/MagmaCubeDescriptor.java b/src/main/java/com/rsscripting/mobcage/description/descriptor/MagmaCubeDescriptor.java new file mode 100644 index 0000000..79fb635 --- /dev/null +++ b/src/main/java/com/rsscripting/mobcage/description/descriptor/MagmaCubeDescriptor.java @@ -0,0 +1,76 @@ +package com.rsscripting.mobcage.description.descriptor; + +import com.rsscripting.mobcage.description.CaptureResult; +import com.rsscripting.mobcage.description.MobAttribute; +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.MagmaCube; +import org.bukkit.entity.Player; + +import java.util.List; + +public class MagmaCubeDescriptor implements MobDescriptor { + + @Override + public boolean supports(LivingEntity entity) { + return entity instanceof MagmaCube; + } + + @Override + public CaptureResult beforeCapture(LivingEntity entity, Player player) { + return MobHealthUtil.validateFullHealth(entity); + } + + @Override + public String getDisplayName(LivingEntity entity) { + return "Magma Cube"; + } + + @Override + public List getAttributes(LivingEntity entity) { + + MagmaCube magmaCube = (MagmaCube) entity; + + return List.of( + new MobAttribute( + "Size", + String.valueOf(magmaCube.getSize()) + ) + ); + } + + @Override + public void release(Location location, List lore) { + + PlainTextComponentSerializer plain = + PlainTextComponentSerializer.plainText(); + + int size = 1; + + for (int i = 0; i < lore.size(); i++) { + + String line = plain.serialize(lore.get(i)); + + if (line.equals("Size:") && i + 1 < lore.size()) { + + String sizeText = plain.serialize(lore.get(i + 1)); + + try { + size = Integer.parseInt(sizeText); + } catch (NumberFormatException ignored) { + } + } + } + + MagmaCube magmaCube = (MagmaCube) location.getWorld().spawnEntity( + location, + EntityType.MAGMA_CUBE + ); + + magmaCube.setSize(size); + } +} \ No newline at end of file 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 1d0fa84..cf07e18 100644 --- a/src/main/java/com/rsscripting/mobcage/description/descriptor/MobDescriptorRegistry.java +++ b/src/main/java/com/rsscripting/mobcage/description/descriptor/MobDescriptorRegistry.java @@ -17,11 +17,13 @@ public final class MobDescriptorRegistry { new FrogDescriptor(), new GoatDescriptor(), new HorseDescriptor(), + new MagmaCubeDescriptor(), new ParrotDescriptor(), new PigDescriptor(), new RabbitDescriptor(), new SheepDescriptor(), new SkeletonDescriptor(), + new SlimeDescriptor(), new SpiderDescriptor(), new VillagerDescriptor(), new WolfDescriptor(), diff --git a/src/main/java/com/rsscripting/mobcage/description/descriptor/SlimeDescriptor.java b/src/main/java/com/rsscripting/mobcage/description/descriptor/SlimeDescriptor.java new file mode 100644 index 0000000..2abb4ac --- /dev/null +++ b/src/main/java/com/rsscripting/mobcage/description/descriptor/SlimeDescriptor.java @@ -0,0 +1,76 @@ +package com.rsscripting.mobcage.description.descriptor; + +import com.rsscripting.mobcage.description.CaptureResult; +import com.rsscripting.mobcage.description.MobAttribute; +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.Slime; + +import java.util.List; + +public class SlimeDescriptor implements MobDescriptor { + + @Override + public boolean supports(LivingEntity entity) { + return entity instanceof Slime; + } + + @Override + public CaptureResult beforeCapture(LivingEntity entity, Player player) { + return MobHealthUtil.validateFullHealth(entity); + } + + @Override + public String getDisplayName(LivingEntity entity) { + return "Slime"; + } + + @Override + public List getAttributes(LivingEntity entity) { + + Slime slime = (Slime) entity; + + return List.of( + new MobAttribute( + "Size", + String.valueOf(slime.getSize()) + ) + ); + } + + @Override + public void release(Location location, List lore) { + + PlainTextComponentSerializer plain = + PlainTextComponentSerializer.plainText(); + + int size = 1; + + for (int i = 0; i < lore.size(); i++) { + + String line = plain.serialize(lore.get(i)); + + if (line.equals("Size:") && i + 1 < lore.size()) { + + String sizeText = plain.serialize(lore.get(i + 1)); + + try { + size = Integer.parseInt(sizeText); + } catch (NumberFormatException ignored) { + } + } + } + + Slime slime = (Slime) location.getWorld().spawnEntity( + location, + EntityType.SLIME + ); + + slime.setSize(size); + } +} \ 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 5db6dab..ce9630a 100644 --- a/src/main/java/com/rsscripting/mobcage/listener/MobReleaseListener.java +++ b/src/main/java/com/rsscripting/mobcage/listener/MobReleaseListener.java @@ -91,6 +91,9 @@ public class MobReleaseListener implements Listener { case "Horse", "Baby Horse" -> new HorseDescriptor().release(location, lore); + case "Magma Cube" -> + new MagmaCubeDescriptor().release(location, lore); + case "Parrot", "Baby Parrot" -> new ParrotDescriptor().release(location, lore); @@ -106,6 +109,9 @@ public class MobReleaseListener implements Listener { case "Skeleton", "Baby Skeleton" -> new SkeletonDescriptor().release(location, lore); + case "Slime", "Baby Slime" -> + new SlimeDescriptor().release(location, lore); + case "Spider" -> new SpiderDescriptor().release(location, lore);