From 3902dface42a76e81ecf93735855aa4b690bd8da Mon Sep 17 00:00:00 2001 From: Brianna Date: Thu, 20 May 2021 09:19:37 -0500 Subject: [PATCH 1/6] Added proper toString for NBT. --- .../com/songoda/core/nms/v1_10_R1/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_11_R1/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_12_R1/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_13_R1/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_13_R2/nbt/NBTCompoundImpl.java | 7 ++++++- .../com/songoda/core/nms/v1_14_R1/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_15_R1/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_16_R1/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_16_R2/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_16_R3/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_8_R1/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_8_R2/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_8_R3/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_9_R1/nbt/NBTCompoundImpl.java | 5 +++++ .../com/songoda/core/nms/v1_9_R2/nbt/NBTCompoundImpl.java | 5 +++++ 15 files changed, 76 insertions(+), 1 deletion(-) diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCompoundImpl.java index 04c306f5..84eb4d76 100644 --- a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCompoundImpl.java @@ -201,4 +201,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCompoundImpl.java index 9680ccf0..df9139fb 100644 --- a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCompoundImpl.java @@ -201,4 +201,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCompoundImpl.java index 6b13d2b3..c38e8727 100644 --- a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCompoundImpl.java @@ -202,4 +202,9 @@ public class NBTCompoundImpl implements NBTCompound { // None } + @Override + public String toString() { + return compound.toString(); + } + } diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCompoundImpl.java index 70a850a1..8b04bf28 100644 --- a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCompoundImpl.java @@ -202,4 +202,9 @@ public class NBTCompoundImpl implements NBTCompound { // None } + @Override + public String toString() { + return compound.toString(); + } + } diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCompoundImpl.java index ad539766..f2a449b1 100644 --- a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCompoundImpl.java @@ -197,8 +197,13 @@ public class NBTCompoundImpl implements NBTCompound { } } - @Override + @Override public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCompoundImpl.java index a62ad6a3..66731c1d 100644 --- a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCompoundImpl.java @@ -201,4 +201,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCompoundImpl.java index 2e603a1b..a727dfed 100644 --- a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCompoundImpl.java @@ -201,4 +201,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/nbt/NBTCompoundImpl.java index 76f6533b..3ed48bf0 100644 --- a/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/nbt/NBTCompoundImpl.java @@ -201,4 +201,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/nbt/NBTCompoundImpl.java index 04602891..3a627f99 100644 --- a/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/nbt/NBTCompoundImpl.java @@ -201,4 +201,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/nbt/NBTCompoundImpl.java index 65e07866..75ce518b 100644 --- a/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/nbt/NBTCompoundImpl.java @@ -201,4 +201,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCompoundImpl.java index b96e2a68..165d2d3a 100644 --- a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCompoundImpl.java @@ -203,4 +203,9 @@ public class NBTCompoundImpl implements NBTCompound { // None } + @Override + public String toString() { + return compound.toString(); + } + } diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCompoundImpl.java index f6acb2d2..9b70e8e0 100644 --- a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCompoundImpl.java @@ -202,4 +202,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCompoundImpl.java index 76ab7449..01422252 100644 --- a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCompoundImpl.java @@ -202,4 +202,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCompoundImpl.java index 523a568d..f0e71d77 100644 --- a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCompoundImpl.java @@ -201,4 +201,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCompoundImpl.java index fbc55232..76d51382 100644 --- a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCompoundImpl.java +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCompoundImpl.java @@ -201,4 +201,9 @@ public class NBTCompoundImpl implements NBTCompound { public void addExtras() { // None } + + @Override + public String toString() { + return compound.toString(); + } } From 07eb0d571000b6b5e679ed19578b5ffedc8d6410 Mon Sep 17 00:00:00 2001 From: Brianna Date: Thu, 27 May 2021 09:47:20 -0500 Subject: [PATCH 2/6] Stacker plugin hook adjustment. --- .../java/com/songoda/core/hooks/EntityStackerManager.java | 5 +++++ .../main/java/com/songoda/core/hooks/stackers/StackMob.java | 2 +- .../main/java/com/songoda/core/hooks/stackers/Stacker.java | 2 +- .../com/songoda/core/hooks/stackers/UltimateStacker.java | 5 +++-- .../java/com/songoda/core/hooks/stackers/WildStacker.java | 2 +- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Core/src/main/java/com/songoda/core/hooks/EntityStackerManager.java b/Core/src/main/java/com/songoda/core/hooks/EntityStackerManager.java index ea52df65..feac60bf 100644 --- a/Core/src/main/java/com/songoda/core/hooks/EntityStackerManager.java +++ b/Core/src/main/java/com/songoda/core/hooks/EntityStackerManager.java @@ -1,6 +1,7 @@ package com.songoda.core.hooks; import com.songoda.core.hooks.stackers.Stacker; +import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; /** @@ -67,4 +68,8 @@ public class EntityStackerManager { if (manager.isEnabled()) manager.getCurrentHook().add(entity, amount); } + + public static int getMinStackSize(EntityType type) { + return manager.isEnabled() ? manager.getCurrentHook().getMinStackSize(type) : 1; + } } diff --git a/Core/src/main/java/com/songoda/core/hooks/stackers/StackMob.java b/Core/src/main/java/com/songoda/core/hooks/stackers/StackMob.java index 19897f41..9e09ad1f 100644 --- a/Core/src/main/java/com/songoda/core/hooks/stackers/StackMob.java +++ b/Core/src/main/java/com/songoda/core/hooks/stackers/StackMob.java @@ -75,7 +75,7 @@ public class StackMob extends Stacker { } @Override - public int minimumEntityStack(EntityType type) { + public int getMinStackSize(EntityType type) { return 0; } diff --git a/Core/src/main/java/com/songoda/core/hooks/stackers/Stacker.java b/Core/src/main/java/com/songoda/core/hooks/stackers/Stacker.java index b00bed03..e772eb34 100644 --- a/Core/src/main/java/com/songoda/core/hooks/stackers/Stacker.java +++ b/Core/src/main/java/com/songoda/core/hooks/stackers/Stacker.java @@ -31,6 +31,6 @@ public abstract class Stacker implements Hook { public abstract void add(LivingEntity entity, int amount); - public abstract int minimumEntityStack(EntityType type); + public abstract int getMinStackSize(EntityType type); } diff --git a/Core/src/main/java/com/songoda/core/hooks/stackers/UltimateStacker.java b/Core/src/main/java/com/songoda/core/hooks/stackers/UltimateStacker.java index 86859f7c..29d8e7f8 100644 --- a/Core/src/main/java/com/songoda/core/hooks/stackers/UltimateStacker.java +++ b/Core/src/main/java/com/songoda/core/hooks/stackers/UltimateStacker.java @@ -1,6 +1,7 @@ package com.songoda.core.hooks.stackers; import com.songoda.ultimatestacker.stackable.entity.EntityStack; +import com.songoda.ultimatestacker.stackable.entity.EntityStackManager; import com.songoda.ultimatestacker.utils.Methods; import org.bukkit.entity.EntityType; import org.bukkit.entity.Item; @@ -64,11 +65,11 @@ public class UltimateStacker extends Stacker { @Override public void add(LivingEntity entity, int amount) { - plugin.getEntityStackManager().getStack(entity).createDuplicates(amount); + plugin.getEntityStackManager().addStack(entity, amount); } @Override - public int minimumEntityStack(EntityType type) { + public int getMinStackSize(EntityType type) { return ((Plugin) plugin).getConfig().getInt("Entities.Min Stack Amount"); } } diff --git a/Core/src/main/java/com/songoda/core/hooks/stackers/WildStacker.java b/Core/src/main/java/com/songoda/core/hooks/stackers/WildStacker.java index 8be301cd..6fc388f1 100644 --- a/Core/src/main/java/com/songoda/core/hooks/stackers/WildStacker.java +++ b/Core/src/main/java/com/songoda/core/hooks/stackers/WildStacker.java @@ -68,7 +68,7 @@ public class WildStacker extends Stacker { } @Override - public int minimumEntityStack(EntityType type) { + public int getMinStackSize(EntityType type) { int min = plugin.getConfig().getInt("entities.minimum-limits." + type.name(), -1); if (min == -1) { min = plugin.getConfig().getInt("entities.minimum-limits.all", -1); From a818050daff72bbff5e00480e25d71288dd0024d Mon Sep 17 00:00:00 2001 From: Brianna Date: Thu, 27 May 2021 09:48:21 -0500 Subject: [PATCH 3/6] Moved the compatibility API to its own module. --- Core/pom.xml | 26 +++++--------- compatibility/pom.xml | 34 +++++++++++++++++++ .../core/compatibility/ClientVersion.java | 13 ++++--- .../core/compatibility/CompatibleBiome.java | 16 ++++----- .../core/compatibility/CompatibleHand.java | 11 +++--- .../compatibility/CompatibleMaterial.java | 0 .../CompatibleParticleHandler.java | 0 .../core/compatibility/CompatibleSound.java | 0 .../core/compatibility/EntityNamespace.java | 0 .../compatibility/LegacyMaterialAnalouge.java | 0 .../LegacyMaterialBlockType.java | 0 .../compatibility/LegacyParticleEffects.java | 0 .../compatibility/LegacyPotionEffects.java | 0 .../core/compatibility/ServerProject.java | 0 .../core/compatibility/ServerVersion.java | 0 pom.xml | 1 + 16 files changed, 64 insertions(+), 37 deletions(-) create mode 100644 compatibility/pom.xml rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/ClientVersion.java (87%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/CompatibleBiome.java (92%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/CompatibleHand.java (88%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/CompatibleMaterial.java (100%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/CompatibleParticleHandler.java (100%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/CompatibleSound.java (100%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/EntityNamespace.java (100%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/LegacyMaterialAnalouge.java (100%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/LegacyMaterialBlockType.java (100%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/LegacyParticleEffects.java (100%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/LegacyPotionEffects.java (100%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/ServerProject.java (100%) rename {Core/src/main/java => compatibility/src}/com/songoda/core/compatibility/ServerVersion.java (100%) diff --git a/Core/pom.xml b/Core/pom.xml index f44f1352..310edc86 100644 --- a/Core/pom.xml +++ b/Core/pom.xml @@ -119,14 +119,16 @@ org.spigotmc spigot - 1.16.5-R0.1-SNAPSHOT + 1.16.5 provided - + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + @@ -279,18 +281,6 @@ 1.7.2 provided - - us.myles.viaversion-bukkit - ViaVersion - 2.1.3 - provided - - - protocolsupport - ProtocolSupport - 4.29 - provided - com.sk89q worldguard-bukkit diff --git a/compatibility/pom.xml b/compatibility/pom.xml new file mode 100644 index 00000000..304bb1ea --- /dev/null +++ b/compatibility/pom.xml @@ -0,0 +1,34 @@ + + + + com.songoda + SongodaCore-Modules + 2.4.54 + ../ + + + SongodaCore-Compatibility + + 4.0.0 + jar + + + + org.jetbrains + annotations + 13.0 + + + us.myles.viaversion-bukkit + ViaVersion + 2.1.3 + provided + + + protocolsupport + ProtocolSupport + 4.29 + provided + + + \ No newline at end of file diff --git a/Core/src/main/java/com/songoda/core/compatibility/ClientVersion.java b/compatibility/src/com/songoda/core/compatibility/ClientVersion.java similarity index 87% rename from Core/src/main/java/com/songoda/core/compatibility/ClientVersion.java rename to compatibility/src/com/songoda/core/compatibility/ClientVersion.java index 31f39a84..47fc37e9 100644 --- a/Core/src/main/java/com/songoda/core/compatibility/ClientVersion.java +++ b/compatibility/src/com/songoda/core/compatibility/ClientVersion.java @@ -1,8 +1,8 @@ package com.songoda.core.compatibility; -import com.songoda.core.SongodaCore; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; import java.util.HashMap; import java.util.UUID; @@ -34,8 +34,8 @@ public class ClientVersion { * Do Not Use: This is handled by SongodaCore. */ @Deprecated - public static void onLoginProtocol(Player p) { - Bukkit.getScheduler().runTaskLater(SongodaCore.getHijackedPlugin(), () -> { + public static void onLoginProtocol(Player p, JavaPlugin plugin) { + Bukkit.getScheduler().runTaskLater(plugin, () -> { if (p.isOnline()) { final int version = protocolsupport.api.ProtocolSupportAPI.getProtocolVersion(p).getId(); players.put(p.getUniqueId(), protocolToVersion(version)); @@ -47,8 +47,8 @@ public class ClientVersion { * Do Not Use: This is handled by SongodaCore. */ @Deprecated - public static void onLoginVia(Player p) { - Bukkit.getScheduler().runTaskLater(SongodaCore.getHijackedPlugin(), () -> { + public static void onLoginVia(Player p, JavaPlugin plugin) { + Bukkit.getScheduler().runTaskLater(plugin, () -> { if (p.isOnline()) { final int version = us.myles.ViaVersion.api.Via.getAPI().getPlayerVersion(p.getUniqueId()); players.put(p.getUniqueId(), protocolToVersion(version)); @@ -94,6 +94,9 @@ public class ClientVersion { return ServerVersion.V1_15; case 735: case 736: + case 751: + case 753: + case 754: return ServerVersion.V1_16; } return version > 498 ? ServerVersion.getServerVersion() : ServerVersion.UNKNOWN; diff --git a/Core/src/main/java/com/songoda/core/compatibility/CompatibleBiome.java b/compatibility/src/com/songoda/core/compatibility/CompatibleBiome.java similarity index 92% rename from Core/src/main/java/com/songoda/core/compatibility/CompatibleBiome.java rename to compatibility/src/com/songoda/core/compatibility/CompatibleBiome.java index 794ed0a2..f46698c6 100644 --- a/Core/src/main/java/com/songoda/core/compatibility/CompatibleBiome.java +++ b/compatibility/src/com/songoda/core/compatibility/CompatibleBiome.java @@ -1,6 +1,5 @@ package com.songoda.core.compatibility; -import com.songoda.core.utils.NMSUtils; import org.bukkit.Chunk; import org.bukkit.World; import org.bukkit.block.Biome; @@ -127,13 +126,14 @@ public enum CompatibleBiome { compatibleBiomes.add(biome); if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_15)) { - Class classBiomeBase = NMSUtils.getNMSClass("BiomeBase"), - classCraftChunk = NMSUtils.getCraftClass("CraftChunk"), - classCraftBlock = NMSUtils.getCraftClass("block.CraftBlock"), - classChunk = NMSUtils.getNMSClass("Chunk"), - classBiomeStorage = NMSUtils.getNMSClass("BiomeStorage"), - classIRegistry = NMSUtils.getNMSClass("IRegistry"); try { + Class classBiomeBase = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".BiomeBase"), + classCraftChunk = Class.forName("org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + ".CraftChunk"), + classCraftBlock = Class.forName("org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + ".block.CraftBlock"), + classChunk = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".Chunk"), + classBiomeStorage = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".BiomeStorage"), + classIRegistry = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".IRegistry"); + methodBiomeToBiomeBase = isAbove1_16_R1 ? classCraftBlock.getMethod("biomeToBiomeBase", classIRegistry, Biome.class) : classCraftBlock.getMethod("biomeToBiomeBase", Biome.class); methodGetHandle = classCraftChunk.getMethod("getHandle"); @@ -149,7 +149,7 @@ public enum CompatibleBiome { fieldStorageRegistry = classBiomeStorage.getDeclaredField("g"); } fieldStorageRegistry.setAccessible(true); - } catch (NoSuchMethodException | NoSuchFieldException e) { + } catch (NoSuchMethodException | NoSuchFieldException | ClassNotFoundException e) { e.printStackTrace(); } } diff --git a/Core/src/main/java/com/songoda/core/compatibility/CompatibleHand.java b/compatibility/src/com/songoda/core/compatibility/CompatibleHand.java similarity index 88% rename from Core/src/main/java/com/songoda/core/compatibility/CompatibleHand.java rename to compatibility/src/com/songoda/core/compatibility/CompatibleHand.java index 1fb7a393..95d26d69 100644 --- a/Core/src/main/java/com/songoda/core/compatibility/CompatibleHand.java +++ b/compatibility/src/com/songoda/core/compatibility/CompatibleHand.java @@ -1,6 +1,5 @@ package com.songoda.core.compatibility; -import com.songoda.core.utils.NMSUtils; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.entity.Player; @@ -115,10 +114,10 @@ public enum CompatibleHand { if (cb_CraftPlayer == null) { try { - cb_CraftPlayer = NMSUtils.getCraftClass("entity.CraftPlayer"); - Class mc_EntityLiving = NMSUtils.getNMSClass("EntityLiving"); - Class cb_ItemStack = NMSUtils.getCraftClass("inventory.CraftItemStack"); - Class mc_ItemStack = NMSUtils.getNMSClass("ItemStack"); + cb_CraftPlayer = Class.forName("org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + ".entity.CraftPlayer"); + Class mc_EntityLiving = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".EntityLiving"); + Class cb_ItemStack = Class.forName("org.bukkit.craftbukkit." + ServerVersion.getServerVersionString() + ".inventory.CraftItemStack"); + Class mc_ItemStack = Class.forName("net.minecraft.server." + ServerVersion.getServerVersionString() + ".ItemStack"); getHandle = cb_CraftPlayer.getMethod("getHandle"); if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) playBreak = mc_EntityLiving.getDeclaredMethod("a", mc_ItemStack, int.class); //Consistent from 1.16-1.13 @@ -126,7 +125,7 @@ public enum CompatibleHand { playBreak = mc_EntityLiving.getDeclaredMethod("b", mc_ItemStack); //Consistent from 1.12-1.8 playBreak.setAccessible(true); asNMSCopy = cb_ItemStack.getDeclaredMethod("asNMSCopy", ItemStack.class); - } catch (NoSuchMethodException e) { + } catch (NoSuchMethodException | ClassNotFoundException e) { e.printStackTrace(); } } diff --git a/Core/src/main/java/com/songoda/core/compatibility/CompatibleMaterial.java b/compatibility/src/com/songoda/core/compatibility/CompatibleMaterial.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/CompatibleMaterial.java rename to compatibility/src/com/songoda/core/compatibility/CompatibleMaterial.java diff --git a/Core/src/main/java/com/songoda/core/compatibility/CompatibleParticleHandler.java b/compatibility/src/com/songoda/core/compatibility/CompatibleParticleHandler.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/CompatibleParticleHandler.java rename to compatibility/src/com/songoda/core/compatibility/CompatibleParticleHandler.java diff --git a/Core/src/main/java/com/songoda/core/compatibility/CompatibleSound.java b/compatibility/src/com/songoda/core/compatibility/CompatibleSound.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/CompatibleSound.java rename to compatibility/src/com/songoda/core/compatibility/CompatibleSound.java diff --git a/Core/src/main/java/com/songoda/core/compatibility/EntityNamespace.java b/compatibility/src/com/songoda/core/compatibility/EntityNamespace.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/EntityNamespace.java rename to compatibility/src/com/songoda/core/compatibility/EntityNamespace.java diff --git a/Core/src/main/java/com/songoda/core/compatibility/LegacyMaterialAnalouge.java b/compatibility/src/com/songoda/core/compatibility/LegacyMaterialAnalouge.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/LegacyMaterialAnalouge.java rename to compatibility/src/com/songoda/core/compatibility/LegacyMaterialAnalouge.java diff --git a/Core/src/main/java/com/songoda/core/compatibility/LegacyMaterialBlockType.java b/compatibility/src/com/songoda/core/compatibility/LegacyMaterialBlockType.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/LegacyMaterialBlockType.java rename to compatibility/src/com/songoda/core/compatibility/LegacyMaterialBlockType.java diff --git a/Core/src/main/java/com/songoda/core/compatibility/LegacyParticleEffects.java b/compatibility/src/com/songoda/core/compatibility/LegacyParticleEffects.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/LegacyParticleEffects.java rename to compatibility/src/com/songoda/core/compatibility/LegacyParticleEffects.java diff --git a/Core/src/main/java/com/songoda/core/compatibility/LegacyPotionEffects.java b/compatibility/src/com/songoda/core/compatibility/LegacyPotionEffects.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/LegacyPotionEffects.java rename to compatibility/src/com/songoda/core/compatibility/LegacyPotionEffects.java diff --git a/Core/src/main/java/com/songoda/core/compatibility/ServerProject.java b/compatibility/src/com/songoda/core/compatibility/ServerProject.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/ServerProject.java rename to compatibility/src/com/songoda/core/compatibility/ServerProject.java diff --git a/Core/src/main/java/com/songoda/core/compatibility/ServerVersion.java b/compatibility/src/com/songoda/core/compatibility/ServerVersion.java similarity index 100% rename from Core/src/main/java/com/songoda/core/compatibility/ServerVersion.java rename to compatibility/src/com/songoda/core/compatibility/ServerVersion.java diff --git a/pom.xml b/pom.xml index e521b142..54ff90ac 100644 --- a/pom.xml +++ b/pom.xml @@ -8,6 +8,7 @@ Core + Compatibility NMS/NMS-API NMS/NMS-v1_8_R1 NMS/NMS-v1_8_R2 From 1dd3f009783d5413d8b6c536fa1fd4a45dbcb74b Mon Sep 17 00:00:00 2001 From: Brianna Date: Thu, 27 May 2021 09:51:11 -0500 Subject: [PATCH 4/6] Added WorldCore with some spawner functions. --- .../java/com/songoda/core/SongodaCore.java | 12 +- .../main/java/com/songoda/core/gui/Gui.java | 1 - .../java/com/songoda/core/nms/NmsManager.java | 26 ++++ .../com/songoda/core/utils/EntityUtils.java | 36 +++++ .../java/com/songoda/core/world/SSpawner.java | 76 ++++++++++ .../com/songoda/core/nms/world/SSpawner.java | 58 ++++++++ .../songoda/core/nms/world/SpawnedEntity.java | 9 ++ .../com/songoda/core/nms/world/WorldCore.java | 11 ++ NMS/NMS-v1_10_R1/pom.xml | 7 + .../nms/v1_10_R1/world/WorldCoreImpl.java | 20 +++ .../v1_10_R1/world/spawner/SSpawnerImpl.java | 121 ++++++++++++++++ NMS/NMS-v1_11_R1/pom.xml | 7 + .../nms/v1_11_R1/world/WorldCoreImpl.java | 20 +++ .../v1_11_R1/world/spawner/SSpawnerImpl.java | 123 ++++++++++++++++ NMS/NMS-v1_12_R1/pom.xml | 7 + .../nms/v1_12_R1/world/WorldCoreImpl.java | 20 +++ .../v1_12_R1/world/spawner/SSpawnerImpl.java | 123 ++++++++++++++++ NMS/NMS-v1_13_R1/pom.xml | 7 + .../nms/v1_13_R1/world/WorldCoreImpl.java | 20 +++ .../v1_13_R1/world/spawner/SSpawnerImpl.java | 125 +++++++++++++++++ NMS/NMS-v1_13_R2/pom.xml | 7 + .../nms/v1_13_R2/world/WorldCoreImpl.java | 20 +++ .../v1_13_R2/world/spawner/SSpawnerImpl.java | 125 +++++++++++++++++ NMS/NMS-v1_14_R1/pom.xml | 7 + .../nms/v1_14_R1/world/WorldCoreImpl.java | 20 +++ .../v1_14_R1/world/spawner/SSpawnerImpl.java | 132 ++++++++++++++++++ NMS/NMS-v1_15_R1/pom.xml | 7 + .../nms/v1_15_R1/world/WorldCoreImpl.java | 20 +++ .../v1_15_R1/world/spawner/SSpawnerImpl.java | 132 ++++++++++++++++++ NMS/NMS-v1_16_R1/pom.xml | 7 + .../nms/v1_16_R1/world/WorldCoreImpl.java | 20 +++ .../v1_16_R1/world/spawner/SSpawnerImpl.java | 132 ++++++++++++++++++ NMS/NMS-v1_16_R2/pom.xml | 7 + .../nms/v1_16_R2/world/WorldCoreImpl.java | 20 +++ .../v1_16_R2/world/spawner/SSpawnerImpl.java | 132 ++++++++++++++++++ NMS/NMS-v1_16_R3/pom.xml | 7 + .../nms/v1_16_R3/world/WorldCoreImpl.java | 20 +++ .../v1_16_R3/world/spawner/SSpawnerImpl.java | 132 ++++++++++++++++++ NMS/NMS-v1_8_R1/pom.xml | 7 + .../core/nms/v1_8_R1/world/WorldCoreImpl.java | 20 +++ .../v1_8_R1/world/spawner/SSpawnerImpl.java | 115 +++++++++++++++ NMS/NMS-v1_8_R2/pom.xml | 7 + .../core/nms/v1_8_R2/world/WorldCoreImpl.java | 20 +++ .../v1_8_R2/world/spawner/SSpawnerImpl.java | 115 +++++++++++++++ NMS/NMS-v1_8_R3/pom.xml | 7 + .../core/nms/v1_8_R3/world/WorldCoreImpl.java | 20 +++ .../v1_8_R3/world/spawner/SSpawnerImpl.java | 115 +++++++++++++++ NMS/NMS-v1_9_R1/pom.xml | 7 + .../core/nms/v1_9_R1/world/WorldCoreImpl.java | 20 +++ .../v1_9_R1/world/spawner/SSpawnerImpl.java | 121 ++++++++++++++++ NMS/NMS-v1_9_R2/pom.xml | 7 + .../core/nms/v1_9_R2/world/WorldCoreImpl.java | 20 +++ .../v1_9_R2/world/spawner/SSpawnerImpl.java | 121 ++++++++++++++++ 53 files changed, 2491 insertions(+), 7 deletions(-) create mode 100644 Core/src/main/java/com/songoda/core/world/SSpawner.java create mode 100644 NMS/NMS-API/src/com/songoda/core/nms/world/SSpawner.java create mode 100644 NMS/NMS-API/src/com/songoda/core/nms/world/SpawnedEntity.java create mode 100644 NMS/NMS-API/src/com/songoda/core/nms/world/WorldCore.java create mode 100644 NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/world/spawner/SSpawnerImpl.java create mode 100644 NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java create mode 100644 NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/world/spawner/SSpawnerImpl.java diff --git a/Core/src/main/java/com/songoda/core/SongodaCore.java b/Core/src/main/java/com/songoda/core/SongodaCore.java index 31489ddc..758d1bca 100644 --- a/Core/src/main/java/com/songoda/core/SongodaCore.java +++ b/Core/src/main/java/com/songoda/core/SongodaCore.java @@ -315,18 +315,18 @@ public class SongodaCore { ShadedEventListener() { if ((via = Bukkit.getPluginManager().isPluginEnabled("ViaVersion"))) { - Bukkit.getOnlinePlayers().forEach(p -> ClientVersion.onLoginVia(p)); + Bukkit.getOnlinePlayers().forEach(p -> ClientVersion.onLoginVia(p, getHijackedPlugin())); } else if ((proto = Bukkit.getPluginManager().isPluginEnabled("ProtocolSupport"))) { - Bukkit.getOnlinePlayers().forEach(p -> ClientVersion.onLoginProtocol(p)); + Bukkit.getOnlinePlayers().forEach(p -> ClientVersion.onLoginProtocol(p, getHijackedPlugin())); } } @EventHandler void onLogin(PlayerLoginEvent event) { if (via) { - ClientVersion.onLoginVia(event.getPlayer()); + ClientVersion.onLoginVia(event.getPlayer(), getHijackedPlugin()); } else if (proto) { - ClientVersion.onLoginProtocol(event.getPlayer()); + ClientVersion.onLoginProtocol(event.getPlayer(), getHijackedPlugin()); } } @@ -341,9 +341,9 @@ public class SongodaCore { void onEnable(PluginEnableEvent event) { // technically shouldn't have online players here, but idk if (!via && (via = event.getPlugin().getName().equals("ViaVersion"))) { - Bukkit.getOnlinePlayers().forEach(p -> ClientVersion.onLoginVia(p)); + Bukkit.getOnlinePlayers().forEach(p -> ClientVersion.onLoginVia(p, getHijackedPlugin())); } else if (!proto && (proto = event.getPlugin().getName().equals("ProtocolSupport"))) { - Bukkit.getOnlinePlayers().forEach(p -> ClientVersion.onLoginProtocol(p)); + Bukkit.getOnlinePlayers().forEach(p -> ClientVersion.onLoginProtocol(p, getHijackedPlugin())); } } } diff --git a/Core/src/main/java/com/songoda/core/gui/Gui.java b/Core/src/main/java/com/songoda/core/gui/Gui.java index 8d509b52..77c4dd3c 100644 --- a/Core/src/main/java/com/songoda/core/gui/Gui.java +++ b/Core/src/main/java/com/songoda/core/gui/Gui.java @@ -24,7 +24,6 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; diff --git a/Core/src/main/java/com/songoda/core/nms/NmsManager.java b/Core/src/main/java/com/songoda/core/nms/NmsManager.java index 9745b63b..238aa642 100644 --- a/Core/src/main/java/com/songoda/core/nms/NmsManager.java +++ b/Core/src/main/java/com/songoda/core/nms/NmsManager.java @@ -2,6 +2,7 @@ package com.songoda.core.nms; import com.songoda.core.nms.anvil.AnvilCore; import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.world.WorldCore; import org.bukkit.Bukkit; import java.util.logging.Level; @@ -13,73 +14,90 @@ public class NmsManager { private final static String serverPackageVersion = serverPackagePath.substring(serverPackagePath.lastIndexOf('.') + 1); private final static AnvilCore anvil; private final static NBTCore nbt; + private final static WorldCore world; static { switch (serverPackageVersion) { case "v1_8_R1": anvil = new com.songoda.core.nms.v1_8_R1.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_8_R1.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_8_R1.world.WorldCoreImpl(); break; case "v1_8_R2": anvil = new com.songoda.core.nms.v1_8_R2.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_8_R2.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_8_R2.world.WorldCoreImpl(); break; case "v1_8_R3": anvil = new com.songoda.core.nms.v1_8_R3.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_8_R3.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_8_R3.world.WorldCoreImpl(); break; case "v1_9_R1": anvil = new com.songoda.core.nms.v1_9_R1.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_9_R1.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_9_R1.world.WorldCoreImpl(); break; case "v1_9_R2": anvil = new com.songoda.core.nms.v1_9_R2.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_9_R2.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_9_R2.world.WorldCoreImpl(); break; case "v1_10_R1": anvil = new com.songoda.core.nms.v1_10_R1.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_10_R1.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_10_R1.world.WorldCoreImpl(); break; case "v1_11_R1": anvil = new com.songoda.core.nms.v1_11_R1.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_11_R1.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_11_R1.world.WorldCoreImpl(); break; case "v1_12_R1": anvil = new com.songoda.core.nms.v1_12_R1.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_12_R1.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_12_R1.world.WorldCoreImpl(); break; case "v1_13_R1": anvil = new com.songoda.core.nms.v1_13_R1.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_13_R1.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_13_R1.world.WorldCoreImpl(); break; case "v1_13_R2": anvil = new com.songoda.core.nms.v1_13_R2.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_13_R2.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_13_R2.world.WorldCoreImpl(); break; case "v1_14_R1": anvil = new com.songoda.core.nms.v1_14_R1.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_14_R1.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_14_R1.world.WorldCoreImpl(); break; case "v1_15_R1": anvil = new com.songoda.core.nms.v1_15_R1.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_15_R1.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_15_R1.world.WorldCoreImpl(); break; case "v1_16_R1": anvil = new com.songoda.core.nms.v1_16_R1.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_16_R1.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_16_R1.world.WorldCoreImpl(); break; case "v1_16_R2": anvil = new com.songoda.core.nms.v1_16_R2.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_16_R2.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_16_R2.world.WorldCoreImpl(); break; case "v1_16_R3": anvil = new com.songoda.core.nms.v1_16_R3.anvil.AnvilCore(); nbt = new com.songoda.core.nms.v1_16_R3.nbt.NBTCoreImpl(); + world = new com.songoda.core.nms.v1_16_R3.world.WorldCoreImpl(); break; default: Logger.getLogger(NmsManager.class.getName()).log(Level.SEVERE, "Failed to load NMS for this server version: version {0} not found", serverPackageVersion); anvil = null; nbt = null; + world = null; break; } } @@ -99,4 +117,12 @@ public class NmsManager { public static boolean hasNbt() { return nbt != null; } + + public static WorldCore getWorld() { + return world; + } + + public static boolean hasWorld() { + return world != null; + } } diff --git a/Core/src/main/java/com/songoda/core/utils/EntityUtils.java b/Core/src/main/java/com/songoda/core/utils/EntityUtils.java index da18efd8..7bb5e960 100644 --- a/Core/src/main/java/com/songoda/core/utils/EntityUtils.java +++ b/Core/src/main/java/com/songoda/core/utils/EntityUtils.java @@ -1,11 +1,18 @@ package com.songoda.core.utils; +import com.songoda.core.compatibility.CompatibleMaterial; +import org.apache.commons.lang.WordUtils; import org.bukkit.Bukkit; +import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; public class EntityUtils { @@ -77,4 +84,33 @@ public class EntityUtils { return false; } + public static List getSpawnBlocks(EntityType type) { + switch (type.name()) { + case "PIG": + case "SHEEP": + case "CHICKEN": + case "COW": + case "RABBIT": + case "LLAMA": + case "HORSE": + case "CAT": + return new ArrayList<>(Collections.singletonList(CompatibleMaterial.GRASS_BLOCK)); + case "MUSHROOM_COW": + return new ArrayList<>(Collections.singletonList(CompatibleMaterial.MYCELIUM)); + case "SQUID": + case "ELDER_GUARDIAN": + case "COD": + case "SALMON": + case "PUFFERFISH": + case "TROPICAL_FISH": + return new ArrayList<>(Collections.singletonList(CompatibleMaterial.WATER)); + case "OCELOT": + return new ArrayList<>(Arrays.asList(CompatibleMaterial.GRASS_BLOCK, + CompatibleMaterial.JUNGLE_LEAVES, CompatibleMaterial.ACACIA_LEAVES, + CompatibleMaterial.BIRCH_LEAVES, CompatibleMaterial.DARK_OAK_LEAVES, + CompatibleMaterial.OAK_LEAVES, CompatibleMaterial.SPRUCE_LEAVES)); + default: + return new ArrayList<>(Collections.singletonList(CompatibleMaterial.AIR)); + } + } } diff --git a/Core/src/main/java/com/songoda/core/world/SSpawner.java b/Core/src/main/java/com/songoda/core/world/SSpawner.java new file mode 100644 index 00000000..0a2ab7b4 --- /dev/null +++ b/Core/src/main/java/com/songoda/core/world/SSpawner.java @@ -0,0 +1,76 @@ +package com.songoda.core.world; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.hooks.EntityStackerManager; +import com.songoda.core.nms.NmsManager; +import com.songoda.core.nms.world.SpawnedEntity; +import com.songoda.core.nms.world.WorldCore; +import com.songoda.core.utils.EntityUtils; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; + +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; + +public class SSpawner { + + private static final WorldCore worldCore = NmsManager.getWorld(); + + protected final Location location; + + public SSpawner(Location location) { + this.location = location; + } + + public SSpawner(CreatureSpawner spawner) { + this(spawner.getLocation()); + } + + + public int spawn(int amountToSpawn, EntityType... types) { + return spawn(amountToSpawn, "EXPLOSION_NORMAL", null, null, types); + } + + + /** + * Spawn the spawner. + * + * If you want support for stackers you will need to load them + * on your plugins enable. + * + * @return amount of entities spawned + */ + public int spawn(int amountToSpawn, String particle, Set canSpawnOn, SpawnedEntity spawned, + EntityType... types) { + if (location.getWorld() == null) return 0; + + if (canSpawnOn == null) + canSpawnOn = new HashSet<>(); + + if (canSpawnOn.isEmpty()) + canSpawnOn.addAll(EntityUtils.getSpawnBlocks(types[0])); + + boolean useStackPlugin = EntityStackerManager.isEnabled(); + + int spawnCountUsed = useStackPlugin ? 1 : amountToSpawn; + + int amountSpawned = 0; + while (spawnCountUsed-- > 0) { + EntityType type = types[ThreadLocalRandom.current().nextInt(types.length)]; + LivingEntity entity = worldCore.getSpawner(location).spawnEntity(type, particle, spawned, canSpawnOn); + if (entity != null) { + // If this entity is indeed stackable then spawn a single stack with the desired stack size. + if (useStackPlugin && amountToSpawn >= EntityStackerManager.getMinStackSize(type)) { + EntityStackerManager.add(entity, amountToSpawn); + amountSpawned = amountToSpawn; + break; + } + amountSpawned++; + } + } + return amountSpawned; + } +} diff --git a/NMS/NMS-API/src/com/songoda/core/nms/world/SSpawner.java b/NMS/NMS-API/src/com/songoda/core/nms/world/SSpawner.java new file mode 100644 index 00000000..fe324daf --- /dev/null +++ b/NMS/NMS-API/src/com/songoda/core/nms/world/SSpawner.java @@ -0,0 +1,58 @@ +package com.songoda.core.nms.world; + +import com.songoda.core.compatibility.CompatibleMaterial; +import org.apache.commons.lang.WordUtils; +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; + +import java.util.Set; + +public interface SSpawner { + + LivingEntity spawnEntity(EntityType type, Location spawnerLocation); + + LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn); + + default String translateName(EntityType type, boolean capital) { + return capital ? TypeTranslations.getUpperFromType(type) : TypeTranslations.getLowerFromType(type); + } + + enum TypeTranslations { + VINDICATOR("vindication_illager", "VindicationIllager"), + SNOWMAN("snowman", "SnowMan"), + PIG_ZOMBIE("zombie_pigman", "PigZombie"), + EVOKER("evocation_illager", "EvocationIllager"), + ILLUSIONER("illusion_illager", "IllusionIllager"), + IRON_GOLEM("villager_golem", "VillagerGolem"), + MUSHROOM_COW("mooshroom", "MushroomCow"), + MAGMA_CUBE("magma_cube", "LavaSlime"); + + private final String lower; + private final String upper; + + TypeTranslations(String lower, String upper) { + this.lower = lower; + this.upper = upper; + } + + public static String getLowerFromType(EntityType type) { + try { + TypeTranslations typeTranslation = valueOf(type.name()); + return typeTranslation.lower; + } catch (Exception e) { + return type.name().toLowerCase(); + } + } + + public static String getUpperFromType(EntityType type) { + try { + TypeTranslations typeTranslation = valueOf(type.name()); + return typeTranslation.upper; + } catch (Exception e) { + return WordUtils.capitalize(type.name().toLowerCase()).replace(" ", ""); + } + } + } +} diff --git a/NMS/NMS-API/src/com/songoda/core/nms/world/SpawnedEntity.java b/NMS/NMS-API/src/com/songoda/core/nms/world/SpawnedEntity.java new file mode 100644 index 00000000..2b8288f4 --- /dev/null +++ b/NMS/NMS-API/src/com/songoda/core/nms/world/SpawnedEntity.java @@ -0,0 +1,9 @@ +package com.songoda.core.nms.world; + +import org.bukkit.entity.LivingEntity; + +public interface SpawnedEntity { + + boolean onSpawn(LivingEntity entity); + +} diff --git a/NMS/NMS-API/src/com/songoda/core/nms/world/WorldCore.java b/NMS/NMS-API/src/com/songoda/core/nms/world/WorldCore.java new file mode 100644 index 00000000..aa9d656b --- /dev/null +++ b/NMS/NMS-API/src/com/songoda/core/nms/world/WorldCore.java @@ -0,0 +1,11 @@ +package com.songoda.core.nms.world; + +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public interface WorldCore { + + SSpawner getSpawner(CreatureSpawner spawner); + + SSpawner getSpawner(Location location); +} diff --git a/NMS/NMS-v1_10_R1/pom.xml b/NMS/NMS-v1_10_R1/pom.xml index a9c596a9..270aeaf1 100644 --- a/NMS/NMS-v1_10_R1/pom.xml +++ b/NMS/NMS-v1_10_R1/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java new file mode 100644 index 00000000..fb00f8c8 --- /dev/null +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_10_R1.world; + +import com.songoda.core.nms.v1_10_R1.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..a968ed98 --- /dev/null +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/world/spawner/SSpawnerImpl.java @@ -0,0 +1,121 @@ +package com.songoda.core.nms.v1_10_R1.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_10_R1.BlockPosition; +import net.minecraft.server.v1_10_R1.ChunkRegionLoader; +import net.minecraft.server.v1_10_R1.DifficultyDamageScaler; +import net.minecraft.server.v1_10_R1.Entity; +import net.minecraft.server.v1_10_R1.EntityInsentient; +import net.minecraft.server.v1_10_R1.MobSpawnerData; +import net.minecraft.server.v1_10_R1.NBTTagCompound; +import net.minecraft.server.v1_10_R1.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_10_R1.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.b(); + + compound.setString("id", translateName(type, true)); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = ChunkRegionLoader.a(compound, world, x, y, z, false); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.D(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler,null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(EntityInsentient entityInsentient, Location location, Set canSpawnOn) { + if (!entityInsentient.canSpawn()) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_11_R1/pom.xml b/NMS/NMS-v1_11_R1/pom.xml index 528d4460..635c1318 100644 --- a/NMS/NMS-v1_11_R1/pom.xml +++ b/NMS/NMS-v1_11_R1/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java new file mode 100644 index 00000000..864b3bf9 --- /dev/null +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_11_R1.world; + +import com.songoda.core.nms.v1_11_R1.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..20daa528 --- /dev/null +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/world/spawner/SSpawnerImpl.java @@ -0,0 +1,123 @@ +package com.songoda.core.nms.v1_11_R1.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_11_R1.BlockPosition; +import net.minecraft.server.v1_11_R1.ChunkRegionLoader; +import net.minecraft.server.v1_11_R1.DifficultyDamageScaler; +import net.minecraft.server.v1_11_R1.Entity; +import net.minecraft.server.v1_11_R1.EntityInsentient; +import net.minecraft.server.v1_11_R1.MobSpawnerData; +import net.minecraft.server.v1_11_R1.NBTTagCompound; +import net.minecraft.server.v1_11_R1.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_11_R1.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.b(); + + String name = type.name().toLowerCase().replace("snowman", "snow_golem") + .replace("mushroom_cow", "mooshroom"); + compound.setString("id", "minecraft:" + name); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = ChunkRegionLoader.a(compound, world, x, y, z, false); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.D(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler,null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(EntityInsentient entityInsentient, Location location, Set canSpawnOn) { + if (!entityInsentient.canSpawn()) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_12_R1/pom.xml b/NMS/NMS-v1_12_R1/pom.xml index f53961ee..e9baf501 100644 --- a/NMS/NMS-v1_12_R1/pom.xml +++ b/NMS/NMS-v1_12_R1/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java new file mode 100644 index 00000000..f99b4980 --- /dev/null +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_12_R1.world; + +import com.songoda.core.nms.v1_12_R1.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..2715f5a7 --- /dev/null +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/world/spawner/SSpawnerImpl.java @@ -0,0 +1,123 @@ +package com.songoda.core.nms.v1_12_R1.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_12_R1.BlockPosition; +import net.minecraft.server.v1_12_R1.ChunkRegionLoader; +import net.minecraft.server.v1_12_R1.DifficultyDamageScaler; +import net.minecraft.server.v1_12_R1.Entity; +import net.minecraft.server.v1_12_R1.EntityInsentient; +import net.minecraft.server.v1_12_R1.MobSpawnerData; +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import net.minecraft.server.v1_12_R1.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.b(); + + String name = type.name().toLowerCase().replace("snowman", "snow_golem") + .replace("mushroom_cow", "mooshroom"); + compound.setString("id", "minecraft:" + name); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = ChunkRegionLoader.a(compound, world, x, y, z, false); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.D(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler,null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(EntityInsentient entityInsentient, Location location, Set canSpawnOn) { + if (!entityInsentient.canSpawn()) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_13_R1/pom.xml b/NMS/NMS-v1_13_R1/pom.xml index 97255dc8..6248ade0 100644 --- a/NMS/NMS-v1_13_R1/pom.xml +++ b/NMS/NMS-v1_13_R1/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java new file mode 100644 index 00000000..b6afb7c5 --- /dev/null +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_13_R1.world; + +import com.songoda.core.nms.v1_13_R1.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..bbc44242 --- /dev/null +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/world/spawner/SSpawnerImpl.java @@ -0,0 +1,125 @@ +package com.songoda.core.nms.v1_13_R1.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_13_R1.BlockPosition; +import net.minecraft.server.v1_13_R1.ChunkRegionLoader; +import net.minecraft.server.v1_13_R1.DifficultyDamageScaler; +import net.minecraft.server.v1_13_R1.Entity; +import net.minecraft.server.v1_13_R1.EntityInsentient; +import net.minecraft.server.v1_13_R1.MobSpawnerData; +import net.minecraft.server.v1_13_R1.NBTTagCompound; +import net.minecraft.server.v1_13_R1.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_13_R1.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.b(); + + String name = type.name().toLowerCase().replace("snowman", "snow_golem") + .replace("mushroom_cow", "mooshroom"); + compound.setString("id", "minecraft:" + name); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = ChunkRegionLoader.a(compound, world, x, y, z, false); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.getDamageScaler(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(world, entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler,null, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(WorldServer world, EntityInsentient entityInsentient, Location location, + Set canSpawnOn) { + + if (!world.getCubes(entityInsentient, entityInsentient.getBoundingBox())) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_13_R2/pom.xml b/NMS/NMS-v1_13_R2/pom.xml index dcd8d8dc..a00a6207 100644 --- a/NMS/NMS-v1_13_R2/pom.xml +++ b/NMS/NMS-v1_13_R2/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java new file mode 100644 index 00000000..d1fc902a --- /dev/null +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_13_R2.world; + +import com.songoda.core.nms.v1_13_R2.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..89d35f8c --- /dev/null +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/world/spawner/SSpawnerImpl.java @@ -0,0 +1,125 @@ +package com.songoda.core.nms.v1_13_R2.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_13_R2.BlockPosition; +import net.minecraft.server.v1_13_R2.ChunkRegionLoader; +import net.minecraft.server.v1_13_R2.DifficultyDamageScaler; +import net.minecraft.server.v1_13_R2.Entity; +import net.minecraft.server.v1_13_R2.EntityInsentient; +import net.minecraft.server.v1_13_R2.MobSpawnerData; +import net.minecraft.server.v1_13_R2.NBTTagCompound; +import net.minecraft.server.v1_13_R2.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_13_R2.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.b(); + + String name = type.name().toLowerCase().replace("snowman", "snow_golem") + .replace("mushroom_cow", "mooshroom"); + compound.setString("id", "minecraft:" + name); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = ChunkRegionLoader.a(compound, world, x, y, z, false); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.getDamageScaler(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(world, entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler,null, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(WorldServer world, EntityInsentient entityInsentient, Location location, + Set canSpawnOn) { + + if (!world.getCubes(entityInsentient, entityInsentient.getBoundingBox())) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_14_R1/pom.xml b/NMS/NMS-v1_14_R1/pom.xml index d421b324..203cc0fc 100644 --- a/NMS/NMS-v1_14_R1/pom.xml +++ b/NMS/NMS-v1_14_R1/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java new file mode 100644 index 00000000..569d5830 --- /dev/null +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_14_R1.world; + +import com.songoda.core.nms.v1_14_R1.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..57beec21 --- /dev/null +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/world/spawner/SSpawnerImpl.java @@ -0,0 +1,132 @@ +package com.songoda.core.nms.v1_14_R1.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_14_R1.BlockPosition; +import net.minecraft.server.v1_14_R1.DifficultyDamageScaler; +import net.minecraft.server.v1_14_R1.Entity; +import net.minecraft.server.v1_14_R1.EntityInsentient; +import net.minecraft.server.v1_14_R1.EntityTypes; +import net.minecraft.server.v1_14_R1.EnumMobSpawn; +import net.minecraft.server.v1_14_R1.MobSpawnerData; +import net.minecraft.server.v1_14_R1.NBTTagCompound; +import net.minecraft.server.v1_14_R1.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_14_R1.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Optional; +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.getEntity(); + + String name = type.name().toLowerCase().replace("snowman", "snow_golem") + .replace("mushroom_cow", "mooshroom"); + compound.setString("id", "minecraft:" + name); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.getRandom(); + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Optional optionalEntity = EntityTypes.a(compound, world); + if (!optionalEntity.isPresent()) continue; + + Entity entity = optionalEntity.get(); + entity.setPosition(x, y, z); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.getDamageScaler(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(world, entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(world, damageScaler, EnumMobSpawn.SPAWNER, + null, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(WorldServer world, EntityInsentient entityInsentient, Location location, + Set canSpawnOn) { + + if (!world.getCubes(entityInsentient, entityInsentient.getBoundingBox())) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_15_R1/pom.xml b/NMS/NMS-v1_15_R1/pom.xml index 2199ce5a..a2f6ba06 100644 --- a/NMS/NMS-v1_15_R1/pom.xml +++ b/NMS/NMS-v1_15_R1/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java new file mode 100644 index 00000000..d5793021 --- /dev/null +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_15_R1.world; + +import com.songoda.core.nms.v1_15_R1.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..0df5f5d0 --- /dev/null +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/world/spawner/SSpawnerImpl.java @@ -0,0 +1,132 @@ +package com.songoda.core.nms.v1_15_R1.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_15_R1.BlockPosition; +import net.minecraft.server.v1_15_R1.DifficultyDamageScaler; +import net.minecraft.server.v1_15_R1.Entity; +import net.minecraft.server.v1_15_R1.EntityInsentient; +import net.minecraft.server.v1_15_R1.EntityTypes; +import net.minecraft.server.v1_15_R1.EnumMobSpawn; +import net.minecraft.server.v1_15_R1.MobSpawnerData; +import net.minecraft.server.v1_15_R1.NBTTagCompound; +import net.minecraft.server.v1_15_R1.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Optional; +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.getEntity(); + + String name = type.name().toLowerCase().replace("snowman", "snow_golem") + .replace("mushroom_cow", "mooshroom"); + compound.setString("id", "minecraft:" + name); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.getRandom(); + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Optional optionalEntity = EntityTypes.a(compound, world); + if (!optionalEntity.isPresent()) continue; + + Entity entity = optionalEntity.get(); + entity.setPosition(x, y, z); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.getDamageScaler(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(world, entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(world, damageScaler, EnumMobSpawn.SPAWNER, + null, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(WorldServer world, EntityInsentient entityInsentient, Location location, + Set canSpawnOn) { + + if (!world.getCubes(entityInsentient, entityInsentient.getBoundingBox())) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_16_R1/pom.xml b/NMS/NMS-v1_16_R1/pom.xml index c5c2123b..ba0f4696 100644 --- a/NMS/NMS-v1_16_R1/pom.xml +++ b/NMS/NMS-v1_16_R1/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java new file mode 100644 index 00000000..4925a95b --- /dev/null +++ b/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_16_R1.world; + +import com.songoda.core.nms.v1_16_R1.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..334c5f4a --- /dev/null +++ b/NMS/NMS-v1_16_R1/src/com/songoda/core/nms/v1_16_R1/world/spawner/SSpawnerImpl.java @@ -0,0 +1,132 @@ +package com.songoda.core.nms.v1_16_R1.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_16_R1.BlockPosition; +import net.minecraft.server.v1_16_R1.DifficultyDamageScaler; +import net.minecraft.server.v1_16_R1.Entity; +import net.minecraft.server.v1_16_R1.EntityInsentient; +import net.minecraft.server.v1_16_R1.EntityTypes; +import net.minecraft.server.v1_16_R1.EnumMobSpawn; +import net.minecraft.server.v1_16_R1.MobSpawnerData; +import net.minecraft.server.v1_16_R1.NBTTagCompound; +import net.minecraft.server.v1_16_R1.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Optional; +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.getEntity(); + + String name = type.name().toLowerCase().replace("snowman", "snow_golem") + .replace("mushroom_cow", "mooshroom"); + compound.setString("id", "minecraft:" + name); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.getRandom(); + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Optional optionalEntity = EntityTypes.a(compound, world); + if (!optionalEntity.isPresent()) continue; + + Entity entity = optionalEntity.get(); + entity.setPosition(x, y, z); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.getDamageScaler(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(world, entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(world, damageScaler, EnumMobSpawn.SPAWNER, + null, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(WorldServer world, EntityInsentient entityInsentient, Location location, + Set canSpawnOn) { + + if (!world.getCubes(entityInsentient, entityInsentient.getBoundingBox())) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_16_R2/pom.xml b/NMS/NMS-v1_16_R2/pom.xml index 4475e736..71a78f36 100644 --- a/NMS/NMS-v1_16_R2/pom.xml +++ b/NMS/NMS-v1_16_R2/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java new file mode 100644 index 00000000..b2f2b08d --- /dev/null +++ b/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_16_R2.world; + +import com.songoda.core.nms.v1_16_R2.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..abcb776e --- /dev/null +++ b/NMS/NMS-v1_16_R2/src/com/songoda/core/nms/v1_16_R2/world/spawner/SSpawnerImpl.java @@ -0,0 +1,132 @@ +package com.songoda.core.nms.v1_16_R2.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_16_R2.BlockPosition; +import net.minecraft.server.v1_16_R2.DifficultyDamageScaler; +import net.minecraft.server.v1_16_R2.Entity; +import net.minecraft.server.v1_16_R2.EntityInsentient; +import net.minecraft.server.v1_16_R2.EntityTypes; +import net.minecraft.server.v1_16_R2.EnumMobSpawn; +import net.minecraft.server.v1_16_R2.MobSpawnerData; +import net.minecraft.server.v1_16_R2.NBTTagCompound; +import net.minecraft.server.v1_16_R2.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Optional; +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.getEntity(); + + String name = type.name().toLowerCase().replace("snowman", "snow_golem") + .replace("mushroom_cow", "mooshroom"); + compound.setString("id", "minecraft:" + name); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.getRandom(); + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Optional optionalEntity = EntityTypes.a(compound, world); + if (!optionalEntity.isPresent()) continue; + + Entity entity = optionalEntity.get(); + entity.setPosition(x, y, z); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.getDamageScaler(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(world, entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(world, damageScaler, EnumMobSpawn.SPAWNER, + null, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(WorldServer world, EntityInsentient entityInsentient, Location location, + Set canSpawnOn) { + + if (!world.getCubes(entityInsentient, entityInsentient.getBoundingBox())) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_16_R3/pom.xml b/NMS/NMS-v1_16_R3/pom.xml index 1e91ce50..91d1873c 100644 --- a/NMS/NMS-v1_16_R3/pom.xml +++ b/NMS/NMS-v1_16_R3/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java new file mode 100644 index 00000000..f84a2b0b --- /dev/null +++ b/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_16_R3.world; + +import com.songoda.core.nms.v1_16_R3.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..5ee74079 --- /dev/null +++ b/NMS/NMS-v1_16_R3/src/com/songoda/core/nms/v1_16_R3/world/spawner/SSpawnerImpl.java @@ -0,0 +1,132 @@ +package com.songoda.core.nms.v1_16_R3.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_16_R3.BlockPosition; +import net.minecraft.server.v1_16_R3.DifficultyDamageScaler; +import net.minecraft.server.v1_16_R3.Entity; +import net.minecraft.server.v1_16_R3.EntityInsentient; +import net.minecraft.server.v1_16_R3.EntityTypes; +import net.minecraft.server.v1_16_R3.EnumMobSpawn; +import net.minecraft.server.v1_16_R3.MobSpawnerData; +import net.minecraft.server.v1_16_R3.NBTTagCompound; +import net.minecraft.server.v1_16_R3.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Optional; +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.getEntity(); + + String name = type.name().toLowerCase().replace("snowman", "snow_golem") + .replace("mushroom_cow", "mooshroom"); + compound.setString("id", "minecraft:" + name); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.getRandom(); + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Optional optionalEntity = EntityTypes.a(compound, world); + if (!optionalEntity.isPresent()) continue; + + Entity entity = optionalEntity.get(); + entity.setPosition(x, y, z); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.getDamageScaler(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(world, entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(world, damageScaler, EnumMobSpawn.SPAWNER, + null, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(WorldServer world, EntityInsentient entityInsentient, Location location, + Set canSpawnOn) { + + if (!world.getCubes(entityInsentient, entityInsentient.getBoundingBox())) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_8_R1/pom.xml b/NMS/NMS-v1_8_R1/pom.xml index 466f0937..9d5abd91 100644 --- a/NMS/NMS-v1_8_R1/pom.xml +++ b/NMS/NMS-v1_8_R1/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java new file mode 100644 index 00000000..289965e3 --- /dev/null +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_8_R1.world; + +import com.songoda.core.nms.v1_8_R1.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..99bc969b --- /dev/null +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/world/spawner/SSpawnerImpl.java @@ -0,0 +1,115 @@ +package com.songoda.core.nms.v1_8_R1.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_8_R1.BlockPosition; +import net.minecraft.server.v1_8_R1.DifficultyDamageScaler; +import net.minecraft.server.v1_8_R1.Entity; +import net.minecraft.server.v1_8_R1.EntityInsentient; +import net.minecraft.server.v1_8_R1.EntityTypes; +import net.minecraft.server.v1_8_R1.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_8_R1.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = EntityTypes.createEntityByName(translateName(type, true), world); + entity.setPositionRotation(x, y, z, 360.0F, 0.0F); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.E(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(EntityInsentient entityInsentient, Location location, Set canSpawnOn) { + if (!entityInsentient.canSpawn()) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_8_R2/pom.xml b/NMS/NMS-v1_8_R2/pom.xml index d2882d3b..16ab4668 100644 --- a/NMS/NMS-v1_8_R2/pom.xml +++ b/NMS/NMS-v1_8_R2/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java new file mode 100644 index 00000000..f790a967 --- /dev/null +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_8_R2.world; + +import com.songoda.core.nms.v1_8_R2.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..c9068cba --- /dev/null +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/world/spawner/SSpawnerImpl.java @@ -0,0 +1,115 @@ +package com.songoda.core.nms.v1_8_R2.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_8_R2.BlockPosition; +import net.minecraft.server.v1_8_R2.DifficultyDamageScaler; +import net.minecraft.server.v1_8_R2.Entity; +import net.minecraft.server.v1_8_R2.EntityInsentient; +import net.minecraft.server.v1_8_R2.EntityTypes; +import net.minecraft.server.v1_8_R2.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_8_R2.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = EntityTypes.createEntityByName(translateName(type, true), world); + entity.setPositionRotation(x, y, z, 360.0F, 0.0F); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.E(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(EntityInsentient entityInsentient, Location location, Set canSpawnOn) { + if (!entityInsentient.canSpawn()) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_8_R3/pom.xml b/NMS/NMS-v1_8_R3/pom.xml index d08f12db..2f232f74 100644 --- a/NMS/NMS-v1_8_R3/pom.xml +++ b/NMS/NMS-v1_8_R3/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java new file mode 100644 index 00000000..7d8dc57d --- /dev/null +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_8_R3.world; + +import com.songoda.core.nms.v1_8_R3.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..356130bc --- /dev/null +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/world/spawner/SSpawnerImpl.java @@ -0,0 +1,115 @@ +package com.songoda.core.nms.v1_8_R3.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_8_R3.BlockPosition; +import net.minecraft.server.v1_8_R3.DifficultyDamageScaler; +import net.minecraft.server.v1_8_R3.Entity; +import net.minecraft.server.v1_8_R3.EntityInsentient; +import net.minecraft.server.v1_8_R3.EntityTypes; +import net.minecraft.server.v1_8_R3.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = EntityTypes.createEntityByName(translateName(type, true), world); + entity.setPositionRotation(x, y, z, 360.0F, 0.0F); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.E(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler, null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(EntityInsentient entityInsentient, Location location, Set canSpawnOn) { + if (!entityInsentient.canSpawn()) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_9_R1/pom.xml b/NMS/NMS-v1_9_R1/pom.xml index 255a4ae5..7c04ac0a 100644 --- a/NMS/NMS-v1_9_R1/pom.xml +++ b/NMS/NMS-v1_9_R1/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java new file mode 100644 index 00000000..122972c8 --- /dev/null +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_9_R1.world; + +import com.songoda.core.nms.v1_9_R1.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..88a9bf72 --- /dev/null +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/world/spawner/SSpawnerImpl.java @@ -0,0 +1,121 @@ +package com.songoda.core.nms.v1_9_R1.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_9_R1.BlockPosition; +import net.minecraft.server.v1_9_R1.ChunkRegionLoader; +import net.minecraft.server.v1_9_R1.DifficultyDamageScaler; +import net.minecraft.server.v1_9_R1.Entity; +import net.minecraft.server.v1_9_R1.EntityInsentient; +import net.minecraft.server.v1_9_R1.MobSpawnerData; +import net.minecraft.server.v1_9_R1.NBTTagCompound; +import net.minecraft.server.v1_9_R1.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_9_R1.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.b(); + + compound.setString("id", translateName(type, true)); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = ChunkRegionLoader.a(compound, world, x, y, z, false); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.D(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler,null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(EntityInsentient entityInsentient, Location location, Set canSpawnOn) { + if (!entityInsentient.canSpawn()) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} diff --git a/NMS/NMS-v1_9_R2/pom.xml b/NMS/NMS-v1_9_R2/pom.xml index 938497f0..f6033df4 100644 --- a/NMS/NMS-v1_9_R2/pom.xml +++ b/NMS/NMS-v1_9_R2/pom.xml @@ -25,5 +25,12 @@ ${project.version} provided + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java new file mode 100644 index 00000000..1173d8df --- /dev/null +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_9_R2.world; + +import com.songoda.core.nms.v1_9_R2.world.spawner.SSpawnerImpl; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.WorldCore; +import org.bukkit.Location; +import org.bukkit.block.CreatureSpawner; + +public class WorldCoreImpl implements WorldCore { + + @Override + public SSpawner getSpawner(CreatureSpawner spawner) { + return new SSpawnerImpl(spawner.getLocation()); + } + + @Override + public SSpawner getSpawner(Location location) { + return new SSpawnerImpl(location); + } +} diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/world/spawner/SSpawnerImpl.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/world/spawner/SSpawnerImpl.java new file mode 100644 index 00000000..f6967b4c --- /dev/null +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/world/spawner/SSpawnerImpl.java @@ -0,0 +1,121 @@ +package com.songoda.core.nms.v1_9_R2.world.spawner; + +import com.songoda.core.compatibility.CompatibleMaterial; +import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.songoda.core.nms.world.SSpawner; +import com.songoda.core.nms.world.SpawnedEntity; +import net.minecraft.server.v1_9_R2.BlockPosition; +import net.minecraft.server.v1_9_R2.ChunkRegionLoader; +import net.minecraft.server.v1_9_R2.DifficultyDamageScaler; +import net.minecraft.server.v1_9_R2.Entity; +import net.minecraft.server.v1_9_R2.EntityInsentient; +import net.minecraft.server.v1_9_R2.MobSpawnerData; +import net.minecraft.server.v1_9_R2.NBTTagCompound; +import net.minecraft.server.v1_9_R2.WorldServer; +import org.bukkit.Location; +import org.bukkit.block.BlockFace; +import org.bukkit.craftbukkit.v1_9_R2.CraftWorld; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.CreatureSpawnEvent; + +import java.util.Random; +import java.util.Set; + +public class SSpawnerImpl implements SSpawner { + + private final Location spawnerLocation; + + public SSpawnerImpl(Location location) { + this.spawnerLocation = location; + } + + @Override + public LivingEntity spawnEntity(EntityType type, Location spawnerLocation) { + return spawnEntity(type, "EXPLOSION_NORMAL", null, null); + } + + @Override + public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, + Set canSpawnOn) { + + MobSpawnerData data = new MobSpawnerData(); + NBTTagCompound compound = data.b(); + + compound.setString("id", translateName(type, true)); + + short spawnRange = 4; + for (int i = 0; i < 50; i++) { + WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle(); + + Random random = world.random; + double x = spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + double y = spawnerLocation.getY() + random.nextInt(3) - 1; + double z = spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D; + + Entity entity = ChunkRegionLoader.a(compound, world, x, y, z, false); + + BlockPosition position = entity.getChunkCoordinates(); + DifficultyDamageScaler damageScaler = world.D(position); + + if (!(entity instanceof EntityInsentient)) + continue; + + EntityInsentient entityInsentient = (EntityInsentient) entity; + + Location spot = new Location(spawnerLocation.getWorld(), x, y, z); + if (!canSpawn(entityInsentient, spot, canSpawnOn)) + continue; + + entityInsentient.prepare(damageScaler,null); + + LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity(); + + if (spawned != null) + if (!spawned.onSpawn(craftEntity)) + return null; + + if (particleType != null) { + float xx = (float) (0 + (Math.random() * 1)); + float yy = (float) (0 + (Math.random() * 2)); + float zz = (float) (0 + (Math.random() * 1)); + CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(particleType), + spot, 5, xx, yy, zz, 0); + } + + world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); + + spot.setYaw(random.nextFloat() * 360.0F); + craftEntity.teleport(spot); + + return craftEntity; + } + return null; + } + + private boolean canSpawn(EntityInsentient entityInsentient, Location location, Set canSpawnOn) { + if (!entityInsentient.canSpawn()) + return false; + + CompatibleMaterial spawnedIn = CompatibleMaterial.getMaterial(location.getBlock()); + CompatibleMaterial spawnedOn = CompatibleMaterial.getMaterial(location.getBlock().getRelative(BlockFace.DOWN)); + + if (spawnedIn == null || spawnedOn == null) + return false; + + if (!spawnedIn.isAir() + && spawnedIn != CompatibleMaterial.WATER + && !spawnedIn.name().contains("PRESSURE") + && !spawnedIn.name().contains("SLAB")) { + return false; + } + + for (CompatibleMaterial material : canSpawnOn) { + if (material == null) continue; + + if (spawnedOn.equals(material) || material.isAir()) + return true; + } + return false; + } +} From 3d5ab04c79ed46d3c352735621f90db0828feb35 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Tue, 25 May 2021 00:36:13 +0200 Subject: [PATCH 5/6] CompatibleParticleHandler: Add support to send to a specific player --- .../com/songoda/core/commands/CommandManager.java | 11 ++++++----- .../core/commands/SimpleNestedCommand.java | 6 +++--- .../compatibility/CompatibleParticleHandler.java | 15 +++++++++++---- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/Core/src/main/java/com/songoda/core/commands/CommandManager.java b/Core/src/main/java/com/songoda/core/commands/CommandManager.java index 7c15b10e..b145f747 100644 --- a/Core/src/main/java/com/songoda/core/commands/CommandManager.java +++ b/Core/src/main/java/com/songoda/core/commands/CommandManager.java @@ -17,6 +17,7 @@ import org.bukkit.plugin.java.JavaPlugin; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -67,11 +68,11 @@ public class CommandManager implements CommandExecutor, TabCompleter { public List getSubCommands(String command) { SimpleNestedCommand nested = command == null ? null : commands.get(command.toLowerCase()); - return nested == null ? Collections.EMPTY_LIST : nested.children.keySet().stream().collect(Collectors.toList()); + return nested == null ? Collections.emptyList() : new ArrayList<>(nested.children.keySet()); } public Set getAllCommands() { - HashSet all = new HashSet(); + HashSet all = new HashSet<>(); commands.values().stream() .filter(c -> c.parent != null && !all.contains(c.parent)) .forEach(c -> { @@ -90,7 +91,7 @@ public class CommandManager implements CommandExecutor, TabCompleter { public SimpleNestedCommand registerCommandDynamically(AbstractCommand abstractCommand) { SimpleNestedCommand nested = new SimpleNestedCommand(abstractCommand); - abstractCommand.getCommands().stream().forEach(cmd -> { + abstractCommand.getCommands().forEach(cmd -> { CommandManager.registerCommandDynamically(plugin, cmd, this, this); commands.put(cmd.toLowerCase(), nested); PluginCommand pcmd = plugin.getCommand(cmd); @@ -106,7 +107,7 @@ public class CommandManager implements CommandExecutor, TabCompleter { public SimpleNestedCommand addCommand(AbstractCommand abstractCommand) { SimpleNestedCommand nested = new SimpleNestedCommand(abstractCommand); - abstractCommand.getCommands().stream().forEach(cmd -> { + abstractCommand.getCommands().forEach(cmd -> { commands.put(cmd.toLowerCase(), nested); PluginCommand pcmd = plugin.getCommand(cmd); if (pcmd != null) { @@ -284,7 +285,7 @@ public class CommandManager implements CommandExecutor, TabCompleter { } } } - return Collections.EMPTY_LIST; + return Collections.emptyList(); } private List fetchList(AbstractCommand abstractCommand, String[] args, CommandSender sender) { diff --git a/Core/src/main/java/com/songoda/core/commands/SimpleNestedCommand.java b/Core/src/main/java/com/songoda/core/commands/SimpleNestedCommand.java index 85347c78..2f4e51fe 100644 --- a/Core/src/main/java/com/songoda/core/commands/SimpleNestedCommand.java +++ b/Core/src/main/java/com/songoda/core/commands/SimpleNestedCommand.java @@ -6,19 +6,19 @@ import java.util.stream.Stream; public class SimpleNestedCommand { final AbstractCommand parent; - final LinkedHashMap children = new LinkedHashMap(); + final LinkedHashMap children = new LinkedHashMap<>(); protected SimpleNestedCommand(AbstractCommand parent) { this.parent = parent; } public SimpleNestedCommand addSubCommand(AbstractCommand command) { - command.getCommands().stream().forEach(cmd -> children.put(cmd.toLowerCase(), command)); + command.getCommands().forEach(cmd -> children.put(cmd.toLowerCase(), command)); return this; } public SimpleNestedCommand addSubCommands(AbstractCommand... commands) { - Stream.of(commands).forEach(command -> command.getCommands().stream().forEach(cmd -> children.put(cmd.toLowerCase(), command))); + Stream.of(commands).forEach(command -> command.getCommands().forEach(cmd -> children.put(cmd.toLowerCase(), command))); return this; } diff --git a/compatibility/src/com/songoda/core/compatibility/CompatibleParticleHandler.java b/compatibility/src/com/songoda/core/compatibility/CompatibleParticleHandler.java index 455761d9..c813ad79 100644 --- a/compatibility/src/com/songoda/core/compatibility/CompatibleParticleHandler.java +++ b/compatibility/src/com/songoda/core/compatibility/CompatibleParticleHandler.java @@ -105,7 +105,7 @@ public class CompatibleParticleHandler { final boolean compatibilityMode; final LegacyParticleEffects.Type compatibleEffect; final Object particle; - final static Map map = new HashMap(); + final static Map map = new HashMap<>(); static { for (ParticleType t : values()) { @@ -218,16 +218,24 @@ public class CompatibleParticleHandler { } public static void spawnParticles(ParticleType type, Location location, int count, double offsetX, double offsetY, double offsetZ, double extra) { + spawnParticles(type, location, count, offsetX, offsetY, offsetZ, extra, null); + } + + public static void spawnParticles(ParticleType type, Location location, int count, double offsetX, double offsetY, double offsetZ, double extra, Player receiver) { if (ServerVersion.isServerVersionAtOrBelow(ServerVersion.V1_8)) { for (int i = 0; i < count; i++) { float xx = (float) (offsetX * (Math.random() - Math.random())); float yy = (float) (offsetY * (Math.random() - Math.random())); float zz = (float) (offsetZ * (Math.random() - Math.random())); Location at = location.clone().add(xx, yy, zz); - LegacyParticleEffects.createParticle(at, type.compatibleEffect, 0F, 0F, 0F, (float) extra, 0, null); + LegacyParticleEffects.createParticle(at, type.compatibleEffect, 0F, 0F, 0F, (float) extra, 0, receiver != null ? Collections.singletonList(receiver) : null); } } else { - location.getWorld().spawnParticle((Particle) type.particle, location, count, offsetX, offsetY, offsetZ, extra); + if (receiver == null) { + location.getWorld().spawnParticle((Particle) type.particle, location, count, offsetX, offsetY, offsetZ, extra); + } else { + receiver.spawnParticle((Particle) type.particle, location, count, offsetX, offsetY, offsetZ, extra); + } } } @@ -296,5 +304,4 @@ public class CompatibleParticleHandler { w.playEffect(l, Effect.SMOKE, BlockFace.NORTH); w.playEffect(l, Effect.SMOKE, BlockFace.NORTH_WEST); } - } From f2fb4bb65e24fea741326a1974e4a377b54bbf7c Mon Sep 17 00:00:00 2001 From: Brianna Date: Thu, 27 May 2021 09:57:15 -0500 Subject: [PATCH 6/6] version 2.4.55 --- Core/pom.xml | 2 +- Core/src/main/java/com/songoda/core/SongodaCore.java | 2 +- NMS/NMS-API/pom.xml | 9 ++++++++- NMS/NMS-v1_10_R1/pom.xml | 2 +- NMS/NMS-v1_11_R1/pom.xml | 2 +- NMS/NMS-v1_12_R1/pom.xml | 2 +- NMS/NMS-v1_13_R1/pom.xml | 2 +- NMS/NMS-v1_13_R2/pom.xml | 2 +- NMS/NMS-v1_14_R1/pom.xml | 2 +- NMS/NMS-v1_15_R1/pom.xml | 2 +- NMS/NMS-v1_16_R1/pom.xml | 2 +- NMS/NMS-v1_16_R2/pom.xml | 2 +- NMS/NMS-v1_16_R3/pom.xml | 4 ++-- NMS/NMS-v1_8_R1/pom.xml | 2 +- NMS/NMS-v1_8_R2/pom.xml | 2 +- NMS/NMS-v1_8_R3/pom.xml | 2 +- NMS/NMS-v1_9_R1/pom.xml | 2 +- NMS/NMS-v1_9_R2/pom.xml | 2 +- README.md | 4 ++-- compatibility/pom.xml | 2 +- pom.xml | 2 +- 21 files changed, 30 insertions(+), 23 deletions(-) diff --git a/Core/pom.xml b/Core/pom.xml index 310edc86..bc08a165 100644 --- a/Core/pom.xml +++ b/Core/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../ diff --git a/Core/src/main/java/com/songoda/core/SongodaCore.java b/Core/src/main/java/com/songoda/core/SongodaCore.java index 758d1bca..ba7179e2 100644 --- a/Core/src/main/java/com/songoda/core/SongodaCore.java +++ b/Core/src/main/java/com/songoda/core/SongodaCore.java @@ -56,7 +56,7 @@ public class SongodaCore { /** * This has been added as of Rev 6 */ - private final static String coreVersion = "2.4.54"; + private final static String coreVersion = "2.4.55"; /** * This is specific to the website api diff --git a/NMS/NMS-API/pom.xml b/NMS/NMS-API/pom.xml index cd474c4f..c85dce8a 100644 --- a/NMS/NMS-API/pom.xml +++ b/NMS/NMS-API/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ @@ -18,5 +18,12 @@ annotations 13.0 + + ${project.groupId} + SongodaCore-Compatibility + ${project.version} + jar + compile + \ No newline at end of file diff --git a/NMS/NMS-v1_10_R1/pom.xml b/NMS/NMS-v1_10_R1/pom.xml index 270aeaf1..7a0540a6 100644 --- a/NMS/NMS-v1_10_R1/pom.xml +++ b/NMS/NMS-v1_10_R1/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_11_R1/pom.xml b/NMS/NMS-v1_11_R1/pom.xml index 635c1318..d357bdd6 100644 --- a/NMS/NMS-v1_11_R1/pom.xml +++ b/NMS/NMS-v1_11_R1/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_12_R1/pom.xml b/NMS/NMS-v1_12_R1/pom.xml index e9baf501..5b33da6f 100644 --- a/NMS/NMS-v1_12_R1/pom.xml +++ b/NMS/NMS-v1_12_R1/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_13_R1/pom.xml b/NMS/NMS-v1_13_R1/pom.xml index 6248ade0..3fe327c3 100644 --- a/NMS/NMS-v1_13_R1/pom.xml +++ b/NMS/NMS-v1_13_R1/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_13_R2/pom.xml b/NMS/NMS-v1_13_R2/pom.xml index a00a6207..448eb8c7 100644 --- a/NMS/NMS-v1_13_R2/pom.xml +++ b/NMS/NMS-v1_13_R2/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_14_R1/pom.xml b/NMS/NMS-v1_14_R1/pom.xml index 203cc0fc..e93d7f60 100644 --- a/NMS/NMS-v1_14_R1/pom.xml +++ b/NMS/NMS-v1_14_R1/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_15_R1/pom.xml b/NMS/NMS-v1_15_R1/pom.xml index a2f6ba06..ca7bb8b3 100644 --- a/NMS/NMS-v1_15_R1/pom.xml +++ b/NMS/NMS-v1_15_R1/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_16_R1/pom.xml b/NMS/NMS-v1_16_R1/pom.xml index ba0f4696..2bcd15ab 100644 --- a/NMS/NMS-v1_16_R1/pom.xml +++ b/NMS/NMS-v1_16_R1/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_16_R2/pom.xml b/NMS/NMS-v1_16_R2/pom.xml index 71a78f36..cf262de0 100644 --- a/NMS/NMS-v1_16_R2/pom.xml +++ b/NMS/NMS-v1_16_R2/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_16_R3/pom.xml b/NMS/NMS-v1_16_R3/pom.xml index 91d1873c..c557c009 100644 --- a/NMS/NMS-v1_16_R3/pom.xml +++ b/NMS/NMS-v1_16_R3/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ @@ -16,7 +16,7 @@ org.spigotmc spigot - 1.16.4 + 1.16.5 provided diff --git a/NMS/NMS-v1_8_R1/pom.xml b/NMS/NMS-v1_8_R1/pom.xml index 9d5abd91..a343a74a 100644 --- a/NMS/NMS-v1_8_R1/pom.xml +++ b/NMS/NMS-v1_8_R1/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_8_R2/pom.xml b/NMS/NMS-v1_8_R2/pom.xml index 16ab4668..e80df942 100644 --- a/NMS/NMS-v1_8_R2/pom.xml +++ b/NMS/NMS-v1_8_R2/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_8_R3/pom.xml b/NMS/NMS-v1_8_R3/pom.xml index 2f232f74..0b5381b9 100644 --- a/NMS/NMS-v1_8_R3/pom.xml +++ b/NMS/NMS-v1_8_R3/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_9_R1/pom.xml b/NMS/NMS-v1_9_R1/pom.xml index 7c04ac0a..44aed5dd 100644 --- a/NMS/NMS-v1_9_R1/pom.xml +++ b/NMS/NMS-v1_9_R1/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/NMS/NMS-v1_9_R2/pom.xml b/NMS/NMS-v1_9_R2/pom.xml index f6033df4..26c73816 100644 --- a/NMS/NMS-v1_9_R2/pom.xml +++ b/NMS/NMS-v1_9_R2/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../../ diff --git a/README.md b/README.md index ce6fcfee..002d6a00 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Maven Information com.songoda SongodaCore - 2.4.54 + 2.4.55 provided ``` @@ -37,6 +37,6 @@ repositories { * Artifact: ```groovy dependencies { - compileOnly 'com.songoda:SongodaCore:2.4.54' + compileOnly 'com.songoda:SongodaCore:2.4.55' } ``` \ No newline at end of file diff --git a/compatibility/pom.xml b/compatibility/pom.xml index 304bb1ea..85affb70 100644 --- a/compatibility/pom.xml +++ b/compatibility/pom.xml @@ -3,7 +3,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 ../ diff --git a/pom.xml b/pom.xml index 54ff90ac..e605f36c 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ com.songoda SongodaCore-Modules - 2.4.54 + 2.4.55 4.0.0 pom