registeredPlugins = new HashSet<>();
private static SongodaCore INSTANCE = null;
+
private JavaPlugin piggybackedPlugin;
private CommandManager commandManager;
private EventListener loginListener;
@@ -76,7 +85,7 @@ public class SongodaCore {
}
public static void registerPlugin(JavaPlugin plugin, int pluginID, CompatibleMaterial icon) {
- registerPlugin(plugin, pluginID, icon == null ? "STONE" : icon.name(), coreVersion);
+ registerPlugin(plugin, pluginID, icon == null ? "STONE" : icon.name(), SongodaCoreConstants.getCoreVersion());
}
public static void registerPlugin(JavaPlugin plugin, int pluginID, String icon) {
@@ -91,13 +100,23 @@ public class SongodaCore {
try {
// test to see if we're up-to-date
int otherVersion;
+ int ownVersion;
+
try {
- otherVersion = (int) clazz.getMethod("getCoreVersion").invoke(null);
+ otherVersion = (int) clazz.getMethod("getCoreMajorVersion").invoke(null);
+ ownVersion = getCoreMajorVersion();
} catch (Exception ignore) {
- otherVersion = -1;
+ try {
+ otherVersion = (int) clazz.getMethod("getCoreVersion").invoke(null);
+ } catch (Exception ignore2) {
+ otherVersion = -1;
+ }
+
+ ownVersion = getCoreVersion();
}
- if (otherVersion >= getCoreVersion()) {
+
+ if (otherVersion >= ownVersion) {
// use the active service
// assuming that the other is greater than R6 if we get here ;)
clazz.getMethod("registerPlugin", JavaPlugin.class, int.class, String.class, String.class).invoke(null, plugin, pluginID, icon, coreVersion);
@@ -221,6 +240,10 @@ public class SongodaCore {
tasks.add(Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> update(info), 60L));
}
+ /**
+ * @deprecated Seems useless and will probably be replaced in the near future
+ */
+ @Deprecated
private void update(PluginInfo plugin) {
try {
URL url = new URL("https://update.songoda.com/index.php?plugin=" + plugin.getSongodaId()
@@ -266,20 +289,45 @@ public class SongodaCore {
return new ArrayList<>(registeredPlugins);
}
+ public static String getVersion() {
+ return SongodaCoreConstants.getCoreVersion();
+ }
+
+ /**
+ * @deprecated Use {@link #getCoreMajorVersion()} instead, but careful, coreRevision is at 9 while major version is at 2
+ */
+ @Deprecated
public static int getCoreVersion() {
return coreRevision;
}
+ /**
+ * @deprecated Use {@link #getVersion()} instead
+ */
+ @Deprecated
public static String getCoreLibraryVersion() {
- return coreVersion;
+ return SongodaCoreConstants.getCoreVersion();
}
+ public static int getCoreMajorVersion() {
+ String fullVersion = getVersion();
+ if (fullVersion.contains(".")) {
+ return Integer.parseInt(fullVersion.substring(0, fullVersion.indexOf(".")));
+ }
+
+ return -1;
+ }
+
+ /**
+ * @deprecated Seems useless and will probably be removed in the near future
+ */
+ @Deprecated
public static int getUpdaterVersion() {
return updaterVersion;
}
public static String getPrefix() {
- return "[SongodaCore] ";
+ return "[" + SongodaCoreConstants.getProjectName() + "] ";
}
public static Logger getLogger() {
diff --git a/Core/src/main/java/com/songoda/core/SongodaCoreConstants.java b/Core/src/main/java/com/songoda/core/SongodaCoreConstants.java
new file mode 100644
index 00000000..bc9e8bc8
--- /dev/null
+++ b/Core/src/main/java/com/songoda/core/SongodaCoreConstants.java
@@ -0,0 +1,26 @@
+package com.songoda.core;
+
+/**
+ * Some return values in this class are automatically replaced by a maven plugin after the project has been compiled.
+ * This allows for properties to be defined at one place without relying on a text file
+ * that needs to be inside the final jar (might get lost when this lib is shaded into other projects).
+ *
+ * !! Manually changing the values in this class has to be considered a breaking change. !!
+ */
+public class SongodaCoreConstants {
+ private SongodaCoreConstants() {
+ throw new IllegalStateException("Utility class");
+ }
+
+ public static String getCoreVersion() {
+ return "UNKNOWN_VESION";
+ }
+
+ public static String getProjectName() {
+ return "SongodaCore";
+ }
+
+ public static String getGitHubProjectUrl() {
+ return "https://github.com/craftaro/SongodaCore";
+ }
+}
diff --git a/Core/src/main/java/com/songoda/core/SongodaPlugin.java b/Core/src/main/java/com/songoda/core/SongodaPlugin.java
index 29e5066a..41937b30 100644
--- a/Core/src/main/java/com/songoda/core/SongodaPlugin.java
+++ b/Core/src/main/java/com/songoda/core/SongodaPlugin.java
@@ -8,7 +8,7 @@ import com.songoda.core.utils.SongodaAuth;
import de.tr7zw.changeme.nbtapi.utils.MinecraftVersion;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
-import org.bukkit.command.ConsoleCommandSender;
+import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
@@ -25,7 +25,6 @@ public abstract class SongodaPlugin extends JavaPlugin {
protected Config config = new Config(this);
protected long dataLoadDelay = 20L;
- protected ConsoleCommandSender console = Bukkit.getConsoleSender();
private boolean emergencyStop = false;
static {
@@ -91,6 +90,8 @@ public abstract class SongodaPlugin extends JavaPlugin {
return;
}
+ CommandSender console = Bukkit.getConsoleSender();
+
// Check plugin access, don't load plugin if user don't have access
if (!SongodaAuth.isAuthorized(true)) {
String pluginName = getDescription().getName();
@@ -110,7 +111,7 @@ public abstract class SongodaPlugin extends JavaPlugin {
ChatColor.YELLOW + "UUID: " + serverUuid + "\n" +
ChatColor.YELLOW + "IP: " + externalIP + "\n" +
ChatColor.RED + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";
- this.console.sendMessage(message);
+ console.sendMessage(message);
}).start();
emergencyStop();
@@ -125,15 +126,19 @@ public abstract class SongodaPlugin extends JavaPlugin {
ChatColor.GREEN, "Enabling", ChatColor.GRAY));
try {
- locale = Locale.loadDefaultLocale(this, "en_US");
+ this.locale = Locale.loadDefaultLocale(this, "en_US");
// plugin setup
onPluginEnable();
- // Load Data.
- Bukkit.getScheduler().runTaskLater(this, this::onDataLoad, dataLoadDelay);
+ if (this.emergencyStop) {
+ return;
+ }
- if (emergencyStop) {
+ // Load Data.
+ Bukkit.getScheduler().runTaskLater(this, this::onDataLoad, this.dataLoadDelay);
+
+ if (this.emergencyStop) {
console.sendMessage(ChatColor.RED + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
console.sendMessage(" ");
return;
@@ -156,10 +161,12 @@ public abstract class SongodaPlugin extends JavaPlugin {
@Override
public final void onDisable() {
- if (emergencyStop) {
+ if (this.emergencyStop) {
return;
}
+ CommandSender console = Bukkit.getConsoleSender();
+
console.sendMessage(" "); // blank line to separate chatter
console.sendMessage(ChatColor.GREEN + "=============================");
console.sendMessage(String.format("%s%s %s by %sCraftaro <3!", ChatColor.GRAY,
@@ -173,12 +180,8 @@ public abstract class SongodaPlugin extends JavaPlugin {
console.sendMessage(" "); // blank line to separate chatter
}
- public ConsoleCommandSender getConsole() {
- return console;
- }
-
public Locale getLocale() {
- return locale;
+ return this.locale;
}
/**
@@ -191,13 +194,13 @@ public abstract class SongodaPlugin extends JavaPlugin {
* @return true if the locale exists and was loaded successfully
*/
public boolean setLocale(String localeName, boolean reload) {
- if (locale != null && locale.getName().equals(localeName)) {
- return !reload || locale.reloadMessages();
+ if (this.locale != null && this.locale.getName().equals(localeName)) {
+ return !reload || this.locale.reloadMessages();
}
Locale l = Locale.loadLocale(this, localeName);
if (l != null) {
- locale = l;
+ this.locale = l;
return true;
}
@@ -242,7 +245,7 @@ public abstract class SongodaPlugin extends JavaPlugin {
}
protected void emergencyStop() {
- emergencyStop = true;
+ this.emergencyStop = true;
Bukkit.getPluginManager().disablePlugin(this);
}
@@ -255,10 +258,10 @@ public abstract class SongodaPlugin extends JavaPlugin {
protected void criticalErrorOnPluginStartup(Throwable th) {
Bukkit.getLogger().log(Level.SEVERE,
String.format(
- "Unexpected error while loading %s v%s c%s: Disabling plugin!",
+ "Unexpected error while loading %s v%s (core v%s): Disabling plugin!",
getDescription().getName(),
getDescription().getVersion(),
- SongodaCore.getCoreLibraryVersion()
+ SongodaCore.getVersion()
), th);
emergencyStop();
diff --git a/Core/src/main/java/com/songoda/core/chat/ChatMessage.java b/Core/src/main/java/com/songoda/core/chat/ChatMessage.java
index 2094d233..3b8516e1 100644
--- a/Core/src/main/java/com/songoda/core/chat/ChatMessage.java
+++ b/Core/src/main/java/com/songoda/core/chat/ChatMessage.java
@@ -5,7 +5,7 @@ import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.songoda.core.compatibility.ClassMapping;
import com.songoda.core.compatibility.ServerVersion;
-import com.songoda.core.nms.NmsManager;
+import com.songoda.core.nms.Nms;
import com.songoda.core.utils.TextUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
@@ -13,7 +13,6 @@ import org.bukkit.entity.Player;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
@@ -228,7 +227,7 @@ public class ChatMessage {
Object packet;
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_19)) {
packet = mc_PacketPlayOutChat_new.newInstance(mc_IChatBaseComponent_ChatSerializer_a.invoke(null, gson.toJson(textList)), mc_PacketPlayOutChat_new_1_19_0 ? 1 : false);
- }else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) {
+ } else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_16)) {
packet = mc_PacketPlayOutChat_new.newInstance(
mc_IChatBaseComponent_ChatSerializer_a.invoke(null, gson.toJson(textList)),
mc_chatMessageType_Chat.get(null),
@@ -237,8 +236,8 @@ public class ChatMessage {
packet = mc_PacketPlayOutChat_new.newInstance(mc_IChatBaseComponent_ChatSerializer_a.invoke(null, gson.toJson(textList)));
}
- NmsManager.getPlayer().sendPacket((Player) sender, packet);
- } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
+ Nms.getImplementations().getPlayer().sendPacket((Player) sender, packet);
+ } catch (ReflectiveOperationException | IllegalArgumentException ex) {
Bukkit.getLogger().log(Level.WARNING, "Problem preparing raw chat packets (disabling further packets)", ex);
enabled = false;
}
diff --git a/Core/src/main/java/com/songoda/core/gui/AnvilGui.java b/Core/src/main/java/com/songoda/core/gui/AnvilGui.java
index 640c3377..c5d50ace 100644
--- a/Core/src/main/java/com/songoda/core/gui/AnvilGui.java
+++ b/Core/src/main/java/com/songoda/core/gui/AnvilGui.java
@@ -2,7 +2,7 @@ package com.songoda.core.gui;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.gui.methods.Clickable;
-import com.songoda.core.nms.NmsManager;
+import com.songoda.core.nms.Nms;
import com.songoda.core.nms.anvil.AnvilCore;
import com.songoda.core.nms.anvil.CustomAnvil;
import org.bukkit.entity.Player;
@@ -125,7 +125,7 @@ public class AnvilGui extends Gui {
@Override
protected void createInventory() {
- AnvilCore nms = NmsManager.getAnvil();
+ AnvilCore nms = Nms.getImplementations().getAnvil();
if (nms != null) {
anvil = nms.createAnvil(player, new GuiHolder(guiManager, this));
diff --git a/Core/src/main/java/com/songoda/core/hooks/protection/PlotSquaredProtection.java b/Core/src/main/java/com/songoda/core/hooks/protection/PlotSquaredProtection.java
index e5c23d54..44214f7e 100644
--- a/Core/src/main/java/com/songoda/core/hooks/protection/PlotSquaredProtection.java
+++ b/Core/src/main/java/com/songoda/core/hooks/protection/PlotSquaredProtection.java
@@ -1,19 +1,16 @@
package com.songoda.core.hooks.protection;
-import com.plotsquared.core.PlotAPI;
import com.plotsquared.core.PlotSquared;
+import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
+import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class PlotSquaredProtection extends Protection {
-
- PlotSquared plotSquared;
-
public PlotSquaredProtection(Plugin plugin) {
super(plugin);
- plotSquared = PlotSquared.get();
}
@Override
@@ -23,21 +20,51 @@ public class PlotSquaredProtection extends Protection {
@Override
public boolean isEnabled() {
- return plotSquared != null;
+ return Bukkit.getPluginManager().isPluginEnabled("PlotSquared");
}
@Override
public boolean canPlace(Player player, Location location) {
- return plotSquared.getPlotAreaManager().getApplicablePlotArea(com.plotsquared.core.location.Location.at(location.getWorld().getName(), (int) location.getX(), (int) location.getY(), (int) location.getZ())).getPlots().stream().anyMatch(p -> p.isAdded(player.getUniqueId()));
+ return isPlayerAddedAtPlotLocation(player, location);
}
@Override
public boolean canBreak(Player player, Location location) {
- return plotSquared.getPlotAreaManager().getApplicablePlotArea(com.plotsquared.core.location.Location.at(location.getWorld().getName(), (int) location.getX(), (int) location.getY(), (int) location.getZ())).getPlots().stream().anyMatch(p -> p.isAdded(player.getUniqueId()));
+ return isPlayerAddedAtPlotLocation(player, location);
}
@Override
public boolean canInteract(Player player, Location location) {
- return plotSquared.getPlotAreaManager().getApplicablePlotArea(com.plotsquared.core.location.Location.at(location.getWorld().getName(), (int) location.getX(), (int) location.getY(), (int) location.getZ())).getPlots().stream().anyMatch(p -> p.isAdded(player.getUniqueId()));
+ return isPlayerAddedAtPlotLocation(player, location);
+ }
+
+ private boolean isPlayerAddedAtPlotLocation(Player player, Location location) {
+ PlotArea plotArea = getApplicablePlotArea(location);
+ if (plotArea == null) {
+ return true;
+ }
+
+ for (Plot p : plotArea.getPlots()) {
+ if (p.isAdded(player.getUniqueId())) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private PlotArea getApplicablePlotArea(Location location) {
+ return PlotSquared.get()
+ .getPlotAreaManager()
+ .getApplicablePlotArea(getPlotSquaredLocation(location));
+ }
+
+ private com.plotsquared.core.location.Location getPlotSquaredLocation(Location location) {
+ return com.plotsquared.core.location.Location.at(
+ location.getWorld().getName(),
+ (int) location.getX(),
+ (int) location.getY(),
+ (int) location.getZ()
+ );
}
}
diff --git a/Core/src/main/java/com/songoda/core/http/HttpClient.java b/Core/src/main/java/com/songoda/core/http/HttpClient.java
new file mode 100644
index 00000000..95037834
--- /dev/null
+++ b/Core/src/main/java/com/songoda/core/http/HttpClient.java
@@ -0,0 +1,9 @@
+package com.songoda.core.http;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.io.IOException;
+
+public interface HttpClient {
+ @NotNull HttpResponse get(String url) throws IOException;
+}
diff --git a/Core/src/main/java/com/songoda/core/http/HttpResponse.java b/Core/src/main/java/com/songoda/core/http/HttpResponse.java
new file mode 100644
index 00000000..a5b519bb
--- /dev/null
+++ b/Core/src/main/java/com/songoda/core/http/HttpResponse.java
@@ -0,0 +1,11 @@
+package com.songoda.core.http;
+
+import java.io.IOException;
+
+public interface HttpResponse {
+ int getResponseCode() throws IOException;
+
+ byte[] getBody() throws IOException;
+
+ String getBodyAsString() throws IOException;
+}
diff --git a/Core/src/main/java/com/songoda/core/http/HttpResponseImpl.java b/Core/src/main/java/com/songoda/core/http/HttpResponseImpl.java
new file mode 100644
index 00000000..f713b98d
--- /dev/null
+++ b/Core/src/main/java/com/songoda/core/http/HttpResponseImpl.java
@@ -0,0 +1,54 @@
+package com.songoda.core.http;
+
+import org.apache.commons.io.IOUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.nio.charset.StandardCharsets;
+
+public class HttpResponseImpl implements HttpResponse, AutoCloseable {
+ protected final HttpURLConnection connection;
+
+ protected byte[] body;
+
+ HttpResponseImpl(HttpURLConnection connection) throws IOException {
+ this.connection = connection;
+
+ this.connection.connect();
+ }
+
+ public int getResponseCode() throws IOException {
+ int statusCode = this.connection.getResponseCode();
+
+ if (statusCode == -1) {
+ throw new IOException("HTTP Status Code is -1");
+ }
+
+ return statusCode;
+ }
+
+ public byte[] getBody() throws IOException {
+ if (this.body == null) {
+ try (InputStream in = this.connection.getInputStream();
+ InputStream err = this.connection.getErrorStream()) {
+ if (err != null) {
+ this.body = IOUtils.toByteArray(err);
+ } else {
+ this.body = IOUtils.toByteArray(in);
+ }
+ }
+ }
+
+ return this.body;
+ }
+
+ public String getBodyAsString() throws IOException {
+ return new String(getBody(), StandardCharsets.UTF_8);
+ }
+
+ @Override
+ public void close() throws Exception {
+ this.connection.disconnect();
+ }
+}
diff --git a/Core/src/main/java/com/songoda/core/http/SimpleHttpClient.java b/Core/src/main/java/com/songoda/core/http/SimpleHttpClient.java
new file mode 100644
index 00000000..d1ca8819
--- /dev/null
+++ b/Core/src/main/java/com/songoda/core/http/SimpleHttpClient.java
@@ -0,0 +1,31 @@
+package com.songoda.core.http;
+
+import com.songoda.core.SongodaCoreConstants;
+import org.jetbrains.annotations.NotNull;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class SimpleHttpClient implements HttpClient {
+ private static final String USER_AGENT = generateUserAgent();
+
+ public @NotNull HttpResponse get(String url) throws IOException {
+ HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
+ connection.setInstanceFollowRedirects(true);
+ connection.setConnectTimeout(5000);
+ connection.setReadTimeout(5000);
+
+ connection.setRequestProperty("User-Agent", USER_AGENT);
+
+ return new HttpResponseImpl(connection);
+ }
+
+ private static String generateUserAgent() {
+ String projectName = SongodaCoreConstants.getProjectName();
+ String version = SongodaCoreConstants.getCoreVersion();
+ String projectUrl = SongodaCoreConstants.getGitHubProjectUrl();
+
+ return projectName + "/" + version + " (+" + projectUrl + ")";
+ }
+}
diff --git a/Core/src/main/java/com/songoda/core/http/UnexpectedHttpStatusException.java b/Core/src/main/java/com/songoda/core/http/UnexpectedHttpStatusException.java
new file mode 100644
index 00000000..3229448c
--- /dev/null
+++ b/Core/src/main/java/com/songoda/core/http/UnexpectedHttpStatusException.java
@@ -0,0 +1,15 @@
+package com.songoda.core.http;
+
+import java.io.IOException;
+
+public class UnexpectedHttpStatusException extends IOException {
+ public final int responseCode;
+ public final String url;
+
+ public UnexpectedHttpStatusException(int responseCode, String url) {
+ super("Got HTTP Status Code " + responseCode + ": " + url);
+
+ this.responseCode = responseCode;
+ this.url = url;
+ }
+}
diff --git a/Core/src/main/java/com/songoda/core/lootables/loot/DropUtils.java b/Core/src/main/java/com/songoda/core/lootables/loot/DropUtils.java
index c4abb7e6..4d57b8fe 100644
--- a/Core/src/main/java/com/songoda/core/lootables/loot/DropUtils.java
+++ b/Core/src/main/java/com/songoda/core/lootables/loot/DropUtils.java
@@ -101,7 +101,10 @@ public class DropUtils {
Bukkit.getScheduler().runTask(SongodaCore.getHijackedPlugin(), () -> {
for (String command : commands) {
if (entity.getKiller() != null) {
- command = command.replace("%player%", entity.getKiller().getName().replace("%x%", String.valueOf((int)entity.getLocation().getX())).replace("%y%", String.valueOf((int)entity.getLocation().getY())).replace("%z%", String.valueOf((int)entity.getLocation().getZ())));
+ command = command.replace("%player%", entity.getKiller().getName()
+ .replace("%x%", String.valueOf((int) entity.getLocation().getX()))
+ .replace("%y%", String.valueOf((int) entity.getLocation().getY()))
+ .replace("%z%", String.valueOf((int) entity.getLocation().getZ())));
}
if (!command.contains("%player%")) {
diff --git a/Core/src/main/java/com/songoda/core/lootables/loot/LootManager.java b/Core/src/main/java/com/songoda/core/lootables/loot/LootManager.java
index 28abe081..6906fe96 100644
--- a/Core/src/main/java/com/songoda/core/lootables/loot/LootManager.java
+++ b/Core/src/main/java/com/songoda/core/lootables/loot/LootManager.java
@@ -12,10 +12,10 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -166,7 +166,7 @@ public class LootManager {
try {
Gson gson = new Gson();
- JsonReader reader = new JsonReader(new FileReader(file.getPath()));
+ JsonReader reader = new JsonReader(Files.newBufferedReader(file.toPath()));
Lootable lootable = gson.fromJson(reader, Lootable.class);
@@ -195,7 +195,7 @@ public class LootManager {
continue;
}
- try (Writer writer = new FileWriter(file.getPath())) {
+ try (Writer writer = Files.newBufferedWriter(file.toPath(), StandardCharsets.UTF_8)) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
gson.toJson(lootable, writer);
}
diff --git a/Core/src/main/java/com/songoda/core/math/MathUtils.java b/Core/src/main/java/com/songoda/core/math/MathUtils.java
index c336d24c..b46e6345 100644
--- a/Core/src/main/java/com/songoda/core/math/MathUtils.java
+++ b/Core/src/main/java/com/songoda/core/math/MathUtils.java
@@ -1,5 +1,7 @@
package com.songoda.core.math;
+import com.songoda.core.SongodaCoreConstants;
+
import java.util.HashMap;
import java.util.Map;
@@ -7,7 +9,7 @@ public class MathUtils {
private static final Map cache = new HashMap<>();
public static double eval(String toParse) {
- return eval(toParse, "SongodaCore Eval Engine");
+ return eval(toParse, SongodaCoreConstants.getProjectName() + " Eval Engine");
}
public static double eval(String toParse, String warningMessage) {
diff --git a/Core/src/main/java/com/songoda/core/nms/Nms.java b/Core/src/main/java/com/songoda/core/nms/Nms.java
new file mode 100644
index 00000000..7b01821e
--- /dev/null
+++ b/Core/src/main/java/com/songoda/core/nms/Nms.java
@@ -0,0 +1,22 @@
+package com.songoda.core.nms;
+
+import com.songoda.core.compatibility.ServerVersion;
+
+public class Nms {
+ protected static NmsImplementations impl;
+
+ /**
+ * @return The implementations for the current server version
+ */
+ public static NmsImplementations getImplementations() throws UnsupportedServerVersionException {
+ if (impl == null) {
+ try {
+ impl = (NmsImplementations) Class.forName("com.songoda.core.nms." + ServerVersion.getServerVersionString() + ".NmsImplementationsImpl").getConstructors()[0].newInstance();
+ } catch (ReflectiveOperationException ex) {
+ throw new UnsupportedServerVersionException(ex);
+ }
+ }
+
+ return impl;
+ }
+}
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 6e9faa6f..ea81c461 100644
--- a/Core/src/main/java/com/songoda/core/nms/NmsManager.java
+++ b/Core/src/main/java/com/songoda/core/nms/NmsManager.java
@@ -3,192 +3,51 @@ package com.songoda.core.nms;
import com.songoda.core.nms.anvil.AnvilCore;
import com.songoda.core.nms.entity.NMSPlayer;
import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.world.NmsWorldBorder;
import com.songoda.core.nms.world.WorldCore;
-import org.bukkit.Bukkit;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
+/**
+ * @deprecated Use {@link Nms} instead.
+ */
+@Deprecated
public class NmsManager {
- private static final String serverPackagePath = Bukkit.getServer().getClass().getPackage().getName();
- private static final String serverPackageVersion = serverPackagePath.substring(serverPackagePath.lastIndexOf('.') + 1);
- private static final String bukkitVersion = Bukkit.getServer().getBukkitVersion().split("-")[0];
- private static final NMSPlayer player;
- private static final AnvilCore anvil;
- private static final NBTCore nbt;
- private static final WorldCore world;
-
- static {
- switch (serverPackageVersion) {
- case "v1_8_R1":
- player = new com.songoda.core.nms.v1_8_R1.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_8_R2.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_8_R3.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_9_R1.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_9_R2.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_10_R1.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_11_R1.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_12_R1.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_13_R1.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_13_R2.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_14_R1.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_15_R1.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_16_R1.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_16_R2.entity.NMSPlayerImpl();
- 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":
- player = new com.songoda.core.nms.v1_16_R3.entity.NMSPlayerImpl();
- 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;
- case "v1_17_R1":
- player = new com.songoda.core.nms.v1_17_R1.entity.NMSPlayerImpl();
- anvil = new com.songoda.core.nms.v1_17_R1.anvil.AnvilCore();
- nbt = new com.songoda.core.nms.v1_17_R1.nbt.NBTCoreImpl();
- world = new com.songoda.core.nms.v1_17_R1.world.WorldCoreImpl();
- break;
- case "v1_18_R1":
- player = new com.songoda.core.nms.v1_18_R1.entity.NMSPlayerImpl();
- anvil = new com.songoda.core.nms.v1_18_R1.anvil.AnvilCore();
- nbt = new com.songoda.core.nms.v1_18_R1.nbt.NBTCoreImpl();
- world = new com.songoda.core.nms.v1_18_R1.world.WorldCoreImpl();
- break;
- case "v1_18_R2":
- player = new com.songoda.core.nms.v1_18_R2.entity.NMSPlayerImpl();
- anvil = new com.songoda.core.nms.v1_18_R2.anvil.AnvilCore();
- nbt = new com.songoda.core.nms.v1_18_R2.nbt.NBTCoreImpl();
- world = new com.songoda.core.nms.v1_18_R2.world.WorldCoreImpl();
- break;
- case "v1_19_R1":
- if (bukkitVersion.endsWith(".0") || bukkitVersion.equals("1.19")) {
- player = new com.songoda.core.nms.v1_19_R1.entity.NMSPlayerImpl();
- anvil = new com.songoda.core.nms.v1_19_R1.anvil.AnvilCore();
- nbt = new com.songoda.core.nms.v1_19_R1.nbt.NBTCoreImpl();
- world = new com.songoda.core.nms.v1_19_R1.world.WorldCoreImpl();
- } else {
- player = new com.songoda.core.nms.v1_19_R1v2.entity.NMSPlayerImpl();
- anvil = new com.songoda.core.nms.v1_19_R1v2.anvil.AnvilCore();
- nbt = new com.songoda.core.nms.v1_19_R1v2.nbt.NBTCoreImpl();
- world = new com.songoda.core.nms.v1_19_R1v2.world.WorldCoreImpl();
- }
- break;
- case "v1_19_R2":
- player = new com.songoda.core.nms.v1_19_R2.entity.NMSPlayerImpl();
- anvil = new com.songoda.core.nms.v1_19_R2.anvil.AnvilCore();
- nbt = new com.songoda.core.nms.v1_19_R2.nbt.NBTCoreImpl();
- world = new com.songoda.core.nms.v1_19_R2.world.WorldCoreImpl();
- break;
- case "v1_19_R3":
- player = new com.songoda.core.nms.v1_19_R3.entity.NMSPlayerImpl();
- anvil = new com.songoda.core.nms.v1_19_R3.anvil.AnvilCore();
- nbt = new com.songoda.core.nms.v1_19_R3.nbt.NBTCoreImpl();
- world = new com.songoda.core.nms.v1_19_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);
-
- player = null;
- anvil = null;
- nbt = null;
- world = null;
- break;
- }
- }
-
+ @Deprecated
public static NMSPlayer getPlayer() {
- return player;
+ return Nms.getImplementations().getPlayer();
}
+ @Deprecated
public static AnvilCore getAnvil() {
- return anvil;
+ return Nms.getImplementations().getAnvil();
}
+ @Deprecated
public static boolean hasAnvil() {
- return anvil != null;
+ return getAnvil() != null;
}
+ @Deprecated
public static NBTCore getNbt() {
- return nbt;
+ return Nms.getImplementations().getNbt();
}
+ @Deprecated
public static boolean hasNbt() {
- return nbt != null;
+ return getNbt() != null;
}
+ @Deprecated
public static WorldCore getWorld() {
- return world;
+ return Nms.getImplementations().getWorld();
}
+ @Deprecated
public static boolean hasWorld() {
- return world != null;
+ return getWorld() != null;
+ }
+
+ @Deprecated
+ public static NmsWorldBorder getWorldBorder() {
+ return Nms.getImplementations().getWorldBorder();
}
}
diff --git a/Core/src/main/java/com/songoda/core/nms/UnsupportedServerVersionException.java b/Core/src/main/java/com/songoda/core/nms/UnsupportedServerVersionException.java
new file mode 100644
index 00000000..44363a59
--- /dev/null
+++ b/Core/src/main/java/com/songoda/core/nms/UnsupportedServerVersionException.java
@@ -0,0 +1,17 @@
+package com.songoda.core.nms;
+
+import com.songoda.core.compatibility.ServerVersion;
+
+public class UnsupportedServerVersionException extends RuntimeException {
+ public UnsupportedServerVersionException() {
+ this(null);
+ }
+
+ public UnsupportedServerVersionException(Throwable cause) {
+ this("Your sever version (" + ServerVersion.getServerVersionString() + "; " + ServerVersion.getServerVersion().name() + ") is not fully supported", null);
+ }
+
+ protected UnsupportedServerVersionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/Core/src/main/java/com/songoda/core/utils/BlockUtils.java b/Core/src/main/java/com/songoda/core/utils/BlockUtils.java
index d6d97d77..170a12df 100644
--- a/Core/src/main/java/com/songoda/core/utils/BlockUtils.java
+++ b/Core/src/main/java/com/songoda/core/utils/BlockUtils.java
@@ -4,7 +4,6 @@ import com.songoda.core.compatibility.ClassMapping;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.compatibility.MethodMapping;
import com.songoda.core.compatibility.ServerVersion;
-import com.songoda.core.nms.NmsManager;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -343,7 +342,8 @@ public class BlockUtils {
*
* @param loc The Location of the container
*
- * @deprecated Broken in/since Spigot 1.19.4! Use {@link com.songoda.core.nms.world.WorldCore#updateAdjacentComparators(Block)} on {@link NmsManager#getWorld()} instead
+ * @deprecated Use {@link com.songoda.core.nms.world.WorldCore#updateAdjacentComparators(Block)}
+ * via {@link com.songoda.core.nms.Nms#getImplementations()} instead.
*/
@Deprecated
public static void updateAdjacentComparators(Location loc) {
@@ -406,7 +406,11 @@ public class BlockUtils {
*
* The chunk must be loaded and players must relog if they have the
* chunk loaded in order to use this method.
+ *
+ * @deprecated Use {@link com.songoda.core.nms.world.SWorld#setBlockFast(int, int, int, Material)}
+ * via {@link com.songoda.core.nms.Nms#getImplementations()} instead.
*/
+ @Deprecated
public static void setBlockFast(World world, int x, int y, int z, Material material, byte data) {
try {
// Cache reflection
@@ -451,6 +455,11 @@ public class BlockUtils {
}
}
+ /**
+ * @deprecated Use {@link com.songoda.core.nms.world.SWorld#setBlockFast(int, int, int, Material)}
+ * via {@link com.songoda.core.nms.Nms#getImplementations()} instead.
+ */
+ @Deprecated
public static void setBlockFast(World world, int x, int y, int z, CompatibleMaterial material, byte data) {
setBlockFast(world, x, y, z, material.getBlockMaterial(), data);
}
@@ -476,8 +485,7 @@ public class BlockUtils {
return false;
}
- return block.getData() >= (mat == CompatibleMaterial.BEETROOTS
- || mat == CompatibleMaterial.NETHER_WART ? 3 : 7);
+ return block.getData() >= (mat == CompatibleMaterial.BEETROOTS || mat == CompatibleMaterial.NETHER_WART ? 3 : 7);
}
/**
@@ -526,8 +534,7 @@ public class BlockUtils {
return -1;
}
- return (mat == CompatibleMaterial.BEETROOTS
- || mat == CompatibleMaterial.NETHER_WART ? 3 : 7);
+ return (mat == CompatibleMaterial.BEETROOTS || mat == CompatibleMaterial.NETHER_WART ? 3 : 7);
}
/**
diff --git a/Core/src/main/java/com/songoda/core/world/SItemStack.java b/Core/src/main/java/com/songoda/core/world/SItemStack.java
index d16d8b55..7307cad3 100644
--- a/Core/src/main/java/com/songoda/core/world/SItemStack.java
+++ b/Core/src/main/java/com/songoda/core/world/SItemStack.java
@@ -3,7 +3,7 @@ package com.songoda.core.world;
import com.songoda.core.compatibility.CompatibleHand;
import com.songoda.core.compatibility.CompatibleSound;
import com.songoda.core.compatibility.ServerVersion;
-import com.songoda.core.nms.NmsManager;
+import com.songoda.core.nms.Nms;
import org.bukkit.Bukkit;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
@@ -18,12 +18,12 @@ public class SItemStack {
public SItemStack(ItemStack item) {
this.item = item;
- this.sItem = NmsManager.getWorld().getItemStack(item);
+ this.sItem = Nms.getImplementations().getWorld().getItemStack(item);
}
public SItemStack(CompatibleHand hand, Player player) {
this.item = hand.getItem(player);
- this.sItem = NmsManager.getWorld().getItemStack(item);
+ this.sItem = Nms.getImplementations().getWorld().getItemStack(item);
}
public ItemStack addDamage(Player player, int damage) {
@@ -49,7 +49,7 @@ public class SItemStack {
int durability;
if (ServerVersion.isServerVersionBelow(ServerVersion.V1_11)
- ? NmsManager.getNbt().of(item).has("Unbreakable")
+ ? Nms.getImplementations().getNbt().of(item).has("Unbreakable")
: item.getItemMeta().isUnbreakable()) {
return item;
} else if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_13)) {
diff --git a/Core/src/main/java/com/songoda/core/world/SSpawner.java b/Core/src/main/java/com/songoda/core/world/SSpawner.java
index a5b652a5..bdcbee3a 100644
--- a/Core/src/main/java/com/songoda/core/world/SSpawner.java
+++ b/Core/src/main/java/com/songoda/core/world/SSpawner.java
@@ -2,7 +2,7 @@ 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.Nms;
import com.songoda.core.nms.world.SpawnedEntity;
import com.songoda.core.utils.EntityUtils;
import org.bukkit.Location;
@@ -20,7 +20,7 @@ public class SSpawner {
public SSpawner(Location location) {
this.location = location;
- this.sSpawner = NmsManager.getWorld().getSpawner(location);
+ this.sSpawner = Nms.getImplementations().getWorld().getSpawner(location);
}
public SSpawner(CreatureSpawner spawner) {
diff --git a/Core/src/main/java/com/songoda/core/world/SWorld.java b/Core/src/main/java/com/songoda/core/world/SWorld.java
index 61df4a94..ac70ccff 100644
--- a/Core/src/main/java/com/songoda/core/world/SWorld.java
+++ b/Core/src/main/java/com/songoda/core/world/SWorld.java
@@ -1,7 +1,7 @@
package com.songoda.core.world;
import com.songoda.core.compatibility.ServerVersion;
-import com.songoda.core.nms.NmsManager;
+import com.songoda.core.nms.Nms;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Entity;
@@ -15,7 +15,7 @@ public class SWorld {
public SWorld(World world) {
this.world = world;
- this.sWorld = NmsManager.getWorld().getWorld(world);
+ this.sWorld = Nms.getImplementations().getWorld().getWorld(world);
}
public Entity[] getEntitiesFromChunk(int x, int z) {
diff --git a/Core/src/main/java/com/songoda/core/world/SWorldBorder.java b/Core/src/main/java/com/songoda/core/world/SWorldBorder.java
index de9d981b..b1dd3d4f 100644
--- a/Core/src/main/java/com/songoda/core/world/SWorldBorder.java
+++ b/Core/src/main/java/com/songoda/core/world/SWorldBorder.java
@@ -3,7 +3,7 @@ package com.songoda.core.world;
import com.songoda.core.compatibility.ClassMapping;
import com.songoda.core.compatibility.MethodMapping;
import com.songoda.core.compatibility.ServerVersion;
-import com.songoda.core.nms.NmsManager;
+import com.songoda.core.nms.Nms;
import com.songoda.core.utils.NMSUtils;
import org.bukkit.Location;
import org.bukkit.entity.Player;
@@ -12,6 +12,10 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+/**
+ * @deprecated Use {@link com.songoda.core.nms.world.NmsWorldBorder} via {@link Nms#getImplementations()} instead.
+ */
+@Deprecated
public class SWorldBorder {
private static Class> packetPlayOutWorldBorderEnumClass;
private static Class> worldBorderClass;
@@ -81,18 +85,22 @@ public class SWorldBorder {
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_17)) {
Object packet = clientboundInitializeBorderPacketConstructor.newInstance(worldBorder);
- NmsManager.getPlayer().sendPacket(player, packet);
+ Nms.getImplementations().getPlayer().sendPacket(player, packet);
} else {
@SuppressWarnings({"unchecked", "rawtypes"})
Object packet = packetPlayOutWorldBorderConstructor.newInstance(worldBorder,
Enum.valueOf((Class extends Enum>) packetPlayOutWorldBorderEnumClass, "INITIALIZE"));
- NmsManager.getPlayer().sendPacket(player, packet);
+ Nms.getImplementations().getPlayer().sendPacket(player, packet);
}
} catch (InstantiationException | InvocationTargetException | NoSuchMethodException | IllegalAccessException ex) {
ex.printStackTrace();
}
}
+ /**
+ * @deprecated Use {@link com.songoda.core.nms.world.NmsWorldBorder.BorderColor} instead.
+ */
+ @Deprecated
public enum Color {
Blue, Green, Red
}
diff --git a/Core/src/test/java/com/songoda/core/SongodaCoreConstantsTest.java b/Core/src/test/java/com/songoda/core/SongodaCoreConstantsTest.java
new file mode 100644
index 00000000..9df14c96
--- /dev/null
+++ b/Core/src/test/java/com/songoda/core/SongodaCoreConstantsTest.java
@@ -0,0 +1,36 @@
+package com.songoda.core;
+
+import org.junit.jupiter.api.Test;
+import org.opentest4j.TestSkippedException;
+
+import java.util.Objects;
+import java.util.regex.Pattern;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class SongodaCoreConstantsTest {
+ // Pattern is from https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
+ private static final Pattern VERSION_PATTERN = Pattern.compile("^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$");
+
+ @Test
+ void getCoreVersion() {
+ if (!Objects.equals(System.getenv("TESTS_RUN_WITH_MAVEN"), "true")) {
+ throw new TestSkippedException("Skipping test because it requires the TESTS_RUN_WITH_MAVEN environment variable to be set to true");
+ }
+
+ String coreVersion = SongodaCoreConstants.getCoreVersion();
+
+ assertTrue(VERSION_PATTERN.matcher(coreVersion).matches(), "Version string is not a valid semver string: " + coreVersion);
+ }
+
+ @Test
+ void getProjectName() {
+ assertFalse(SongodaCoreConstants.getProjectName().isEmpty());
+ }
+
+ @Test
+ void getGitHubProjectUrl() {
+ assertFalse(SongodaCoreConstants.getGitHubProjectUrl().isEmpty());
+ }
+}
diff --git a/Core/src/test/java/com/songoda/core/compatibility/material/CompatibleMaterialTest.java b/Core/src/test/java/com/songoda/core/compatibility/material/CompatibleMaterialTest.java
deleted file mode 100644
index 1434214d..00000000
--- a/Core/src/test/java/com/songoda/core/compatibility/material/CompatibleMaterialTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.songoda.core.compatibility.material;
-
-import be.seeseemelk.mockbukkit.MockBukkit;
-import com.songoda.core.compatibility.CompatibleMaterial;
-import org.bukkit.Material;
-import org.bukkit.inventory.ItemStack;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.Supplier;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-
-class CompatibleMaterialTest {
- @BeforeEach
- void setUp() {
- MockBukkit.mock();
- }
-
- @AfterEach
- void tearDown() {
- MockBukkit.unmock();
- }
-
- @Test
- void getMaterialForNull() {
- assertNull(CompatibleMaterial.getMaterial((Material) null));
- assertNull(CompatibleMaterial.getMaterial((ItemStack) null));
- }
-
- @Test
- void getMaterialForAllBukkitMaterials() {
- Map returnedMaterials = new HashMap<>(Material.values().length);
- for (Material bukkitMaterial : Material.values()) {
- CompatibleMaterial compatibleMaterial = CompatibleMaterial.getMaterial(bukkitMaterial);
-
- if (bukkitMaterial.name().startsWith("LEGACY_")) {
- assertNull(compatibleMaterial);
- continue;
- }
- assertNotNull(compatibleMaterial, () -> "Could not get an CompatibleMaterial for Material." + bukkitMaterial.name());
- assertEquals(bukkitMaterial, compatibleMaterial.getMaterial());
- assertEquals(compatibleMaterial, CompatibleMaterial.getMaterial(bukkitMaterial.name()));
-
- assertFalse(returnedMaterials.containsKey(compatibleMaterial),
- () -> String.format("Assertion failed when converting Material.%s to CompatibleMaterial.%s: " +
- "CompatibleMaterial.%1$s has already been returned for Material.%3$s previously",
- bukkitMaterial.name(),
- compatibleMaterial.name(),
- returnedMaterials.get(compatibleMaterial).name()
- ));
-
- assertEquals(bukkitMaterial.isAir(), compatibleMaterial.isAir(), getMaterialPropertyAssertionError(compatibleMaterial, "Air"));
- assertEquals(bukkitMaterial.isBlock(), compatibleMaterial.isBlock(), getMaterialPropertyAssertionError(compatibleMaterial, "Block"));
- assertEquals(bukkitMaterial.isBurnable(), compatibleMaterial.isBurnable(), getMaterialPropertyAssertionError(compatibleMaterial, "Burnable"));
- assertEquals(bukkitMaterial.isEdible(), compatibleMaterial.isEdible(), getMaterialPropertyAssertionError(compatibleMaterial, "Edible"));
- assertEquals(bukkitMaterial.isFlammable(), compatibleMaterial.isFlammable(), getMaterialPropertyAssertionError(compatibleMaterial, "Flammable"));
- assertEquals(bukkitMaterial.isFuel(), compatibleMaterial.isFuel(), getMaterialPropertyAssertionError(compatibleMaterial, "Fuel"));
- assertEquals(bukkitMaterial.isInteractable(), compatibleMaterial.isInteractable(), getMaterialPropertyAssertionError(compatibleMaterial, "Interactable"));
- assertEquals(bukkitMaterial.isItem(), compatibleMaterial.isItem(), getMaterialPropertyAssertionError(compatibleMaterial, "Item"));
- assertEquals(bukkitMaterial.isOccluding(), compatibleMaterial.isOccluding(), getMaterialPropertyAssertionError(compatibleMaterial, "Occluding"));
- assertEquals(bukkitMaterial.isSolid(), compatibleMaterial.isSolid(), getMaterialPropertyAssertionError(compatibleMaterial, "Solid"));
- assertEquals(bukkitMaterial.isTransparent(), compatibleMaterial.isTransparent(), getMaterialPropertyAssertionError(compatibleMaterial, "Transparent"));
-
- assertFalse(compatibleMaterial.usesCompatibility());
- assertFalse(compatibleMaterial.usesData());
- assertEquals(-1, compatibleMaterial.getData());
-
- ItemStack compatibleItem = compatibleMaterial.getItem();
- assertEquals(bukkitMaterial, compatibleItem.getType());
- assertEquals(compatibleMaterial, CompatibleMaterial.getMaterial(compatibleItem));
-
- returnedMaterials.put(compatibleMaterial, bukkitMaterial);
- }
- }
-
- private Supplier getMaterialPropertyAssertionError(CompatibleMaterial compatibleMaterial, String propertyName) {
- return () -> String.format("Expected CompatibleMaterial.%s to be '%s'", compatibleMaterial.name(), propertyName);
- }
-}
diff --git a/Core/src/test/java/com/songoda/core/http/MockHttpClient.java b/Core/src/test/java/com/songoda/core/http/MockHttpClient.java
new file mode 100644
index 00000000..ed329953
--- /dev/null
+++ b/Core/src/test/java/com/songoda/core/http/MockHttpClient.java
@@ -0,0 +1,22 @@
+package com.songoda.core.http;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class MockHttpClient implements HttpClient {
+ public HttpResponse returnValue;
+ public List callsOnGet = new LinkedList<>();
+
+ public MockHttpClient(HttpResponse returnValue) {
+ this.returnValue = returnValue;
+ }
+
+ @Override
+ public @NotNull HttpResponse get(String url) {
+ this.callsOnGet.add(url);
+
+ return this.returnValue;
+ }
+}
diff --git a/Core/src/test/java/com/songoda/core/http/MockHttpResponse.java b/Core/src/test/java/com/songoda/core/http/MockHttpResponse.java
new file mode 100644
index 00000000..3a9a48cf
--- /dev/null
+++ b/Core/src/test/java/com/songoda/core/http/MockHttpResponse.java
@@ -0,0 +1,25 @@
+package com.songoda.core.http;
+
+import java.nio.charset.StandardCharsets;
+
+public class MockHttpResponse implements HttpResponse {
+ public int responseCode;
+ public byte[] body;
+
+ public MockHttpResponse(int responseCode, byte[] body) {
+ this.responseCode = responseCode;
+ this.body = body;
+ }
+
+ public int getResponseCode() {
+ return this.responseCode;
+ }
+
+ public byte[] getBody() {
+ return this.body;
+ }
+
+ public String getBodyAsString() {
+ return new String(getBody(), StandardCharsets.UTF_8);
+ }
+}
diff --git a/Core/src/test/java/com/songoda/core/input/ChatPromptTest.java b/Core/src/test/java/com/songoda/core/input/ChatPromptTest.java
deleted file mode 100644
index 06d8e22f..00000000
--- a/Core/src/test/java/com/songoda/core/input/ChatPromptTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.songoda.core.input;
-
-import be.seeseemelk.mockbukkit.MockBukkit;
-import be.seeseemelk.mockbukkit.MockPlugin;
-import be.seeseemelk.mockbukkit.ServerMock;
-import be.seeseemelk.mockbukkit.entity.PlayerMock;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-@Disabled("BukkitMock seems to cause some troubles here, skipping for now")
-class ChatPromptTest {
- private final String inputMsg = "&eInput-Message";
-
- private ServerMock server;
- private MockPlugin plugin;
- private PlayerMock player;
-
- @BeforeEach
- void setUp() {
- this.server = MockBukkit.mock();
- this.plugin = MockBukkit.createMockPlugin();
- this.player = this.server.addPlayer();
- }
-
- @AfterEach
- void tearDown() {
- MockBukkit.unmock();
- }
-
- @Test
- void showPrompt() throws InterruptedException {
- List chatInputs = new ArrayList<>(1);
-
- ChatPrompt.showPrompt(this.plugin, this.player, event -> {
- assertEquals(this.player, event.getPlayer());
-
- chatInputs.add(event.getMessage());
- });
-
- this.player.chat(this.inputMsg);
- Thread.sleep(1000);
- // this.server.getScheduler().waitAsyncTasksFinished() // does not wait for async events
-
- String playerReceivedMsg = this.player.nextMessage();
-
- assertNotNull(playerReceivedMsg);
- assertTrue(playerReceivedMsg.endsWith(this.inputMsg));
-
- assertEquals(1, chatInputs.size());
- assertEquals(this.inputMsg, chatInputs.get(0));
- }
-
- /* FIXME: Something is still running in the background and prevents the test from finishing */
- @Disabled("Scheduling mock seems bugged, skipping for now")
- @Test
- void showPromptWithTimeout() {
- AtomicBoolean calledOnClose = new AtomicBoolean(false);
-
- ChatPrompt.showPrompt(this.plugin, this.player, event -> {
- })
- .setOnClose(() -> calledOnClose.set(true))
- .setTimeOut(this.player, 40);
-
- this.server.getScheduler().performTicks(40);
-
- String playerReceivedMsg = this.player.nextMessage();
-
- assertNotNull(playerReceivedMsg);
- assertTrue(playerReceivedMsg.contains("timed out"));
-
- this.server.getScheduler().performOneTick();
- assertTrue(calledOnClose.get());
- }
-
- @Test
- void cancelPrompt() {
- AtomicBoolean calledOnCancel = new AtomicBoolean(false);
- AtomicBoolean calledHandler = new AtomicBoolean(false);
-
- ChatPrompt prompt = ChatPrompt.showPrompt(plugin, player, (event) -> calledHandler.set(true));
- prompt.setOnCancel(() -> calledOnCancel.set(true));
-
- this.server.dispatchCommand(player, "cancel");
- // this.player.chat("/cancel");
-// Thread.sleep(1000);
- // this.server.getScheduler().waitAsyncTasksFinished() // does not wait for async events
-
- System.out.println(this.player.nextMessage());
-
-// assertTrue(player.nextMessage().endsWith("/cancel"));
-
- assertTrue(calledOnCancel.get());
- assertFalse(calledHandler.get());
- }
-
- @Test
- void isRegistered() {
- assertFalse(ChatPrompt.isRegistered(this.player));
-
- ChatPrompt.showPrompt(this.plugin, this.player, (event) -> {
- });
-
- assertTrue(ChatPrompt.isRegistered(this.player));
- }
-
- @Test
- void unregister() {
- assertFalse(ChatPrompt.unregister(this.player));
-
- ChatPrompt.showPrompt(this.plugin, this.player, (event) -> {
- });
-
- assertTrue(ChatPrompt.unregister(this.player));
- assertFalse(ChatPrompt.unregister(this.player));
- }
-}
diff --git a/Core/src/test/java/com/songoda/core/math/MathUtilsTest.java b/Core/src/test/java/com/songoda/core/math/MathUtilsTest.java
index 20147be8..d0aba855 100644
--- a/Core/src/test/java/com/songoda/core/math/MathUtilsTest.java
+++ b/Core/src/test/java/com/songoda/core/math/MathUtilsTest.java
@@ -2,16 +2,19 @@ package com.songoda.core.math;
import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrowsExactly;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.*;
class MathUtilsTest {
private final String warningMessage = "MathTest";
- private final String warningMessageExpectedStart = warningMessage + " ";
+ private final String warningMessageExpectedStart = this.warningMessage + " ";
@Test
void eval() {
+ assertEquals(0, MathUtils.eval("0"));
+ assertEquals(10, MathUtils.eval("10"));
+ assertEquals(0.0, MathUtils.eval("0.0"));
+ assertEquals(10.5, MathUtils.eval("10.5"));
+
assertEquals(10.5 + 4, MathUtils.eval("10.5 + 4"));
assertEquals(10.5 - 5, MathUtils.eval("10.5 - 5"));
assertEquals(10 * 4, MathUtils.eval("10 * 4"));
@@ -33,28 +36,28 @@ class MathUtilsTest {
@Test
void evalWithCommaAsDecimalSeparator() {
- Exception ex = assertThrowsExactly(RuntimeException.class, () -> MathUtils.eval("1,0", warningMessage));
+ Exception ex = assertThrowsExactly(RuntimeException.class, () -> MathUtils.eval("1,0", this.warningMessage));
- assertTrue(ex.getMessage().startsWith(warningMessageExpectedStart),
- () -> "'" + ex.getMessage() + "' does not start with '" + warningMessageExpectedStart + "'");
+ assertTrue(ex.getMessage().startsWith(this.warningMessageExpectedStart),
+ () -> "'" + ex.getMessage() + "' does not start with '" + this.warningMessageExpectedStart + "'");
assertTrue(ex.getMessage().contains("Unexpected: "));
}
@Test
void evalWithUnsupportedSyntax() {
- Exception ex = assertThrowsExactly(RuntimeException.class, () -> MathUtils.eval("!2", warningMessage));
+ Exception ex = assertThrowsExactly(RuntimeException.class, () -> MathUtils.eval("!2", this.warningMessage));
- assertTrue(ex.getMessage().startsWith(warningMessageExpectedStart),
- () -> "'" + ex.getMessage() + "' does not start with '" + warningMessageExpectedStart + "'");
+ assertTrue(ex.getMessage().startsWith(this.warningMessageExpectedStart),
+ () -> "'" + ex.getMessage() + "' does not start with '" + this.warningMessageExpectedStart + "'");
assertTrue(ex.getMessage().contains("Unexpected: "));
}
@Test
void evalWithUnsupportedFunction() {
- Exception ex = assertThrowsExactly(RuntimeException.class, () -> MathUtils.eval("acos(90)", warningMessage));
+ Exception ex = assertThrowsExactly(RuntimeException.class, () -> MathUtils.eval("acos(90)", this.warningMessage));
- assertTrue(ex.getMessage().startsWith(warningMessageExpectedStart),
- () -> "'" + ex.getMessage() + "' does not start with '" + warningMessageExpectedStart + "'");
+ assertTrue(ex.getMessage().startsWith(this.warningMessageExpectedStart),
+ () -> "'" + ex.getMessage() + "' does not start with '" + this.warningMessageExpectedStart + "'");
assertTrue(ex.getMessage().contains("Unknown function: "));
}
}
diff --git a/Core/src/test/java/com/songoda/core/utils/LocationUtilsTest.java b/Core/src/test/java/com/songoda/core/utils/LocationUtilsTest.java
index 9fc10215..3af6cab8 100644
--- a/Core/src/test/java/com/songoda/core/utils/LocationUtilsTest.java
+++ b/Core/src/test/java/com/songoda/core/utils/LocationUtilsTest.java
@@ -1,9 +1,10 @@
package com.songoda.core.utils;
-import be.seeseemelk.mockbukkit.WorldMock;
import org.bukkit.Location;
+import org.bukkit.World;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -13,12 +14,20 @@ class LocationUtilsTest {
void isLocationMatching() {
assertTrue(LocationUtils.isLocationMatching(
new Location(null, 10, 20, 30),
- new Location(new WorldMock(), 10.25, 20.5, 30.75)
+ new Location(Mockito.mock(World.class), 10.25, 20.5, 30.75)
+ ));
+ assertTrue(LocationUtils.isLocationMatching(
+ new Location(null, 10, 20, 30),
+ new Location(null, 10.25, 20.5, 30.75)
));
assertFalse(LocationUtils.isLocationMatching(
new Location(null, 10, 20, 30),
- new Location(new WorldMock(), -10.25, 20.5, 30.75)
+ new Location(Mockito.mock(World.class), -10.25, 20.5, 30.75)
+ ));
+ assertFalse(LocationUtils.isLocationMatching(
+ new Location(Mockito.mock(World.class), 10, 20, 30),
+ new Location(null, -10.25, 20.5, 30.75)
));
}
diff --git a/Core/src/test/java/com/songoda/core/utils/PlayerUtilsTest.java b/Core/src/test/java/com/songoda/core/utils/PlayerUtilsTest.java
index d7bcb1c2..99d19cc8 100644
--- a/Core/src/test/java/com/songoda/core/utils/PlayerUtilsTest.java
+++ b/Core/src/test/java/com/songoda/core/utils/PlayerUtilsTest.java
@@ -1,134 +1,143 @@
package com.songoda.core.utils;
-import be.seeseemelk.mockbukkit.MockBukkit;
-import be.seeseemelk.mockbukkit.ServerMock;
-import be.seeseemelk.mockbukkit.entity.PlayerMock;
-import org.bukkit.Material;
+import org.bukkit.Bukkit;
+import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
+import org.bukkit.inventory.PlayerInventory;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.mockito.InOrder;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.*;
class PlayerUtilsTest {
- private ServerMock server;
+ @Test
+ void sendMessages_Array() {
+ Player player = Mockito.mock(Player.class);
+ PlayerUtils.sendMessages(player, "First message", "Second message");
- @BeforeEach
- void setUp() {
- this.server = MockBukkit.mock();
- }
-
- @AfterEach
- void tearDown() {
- MockBukkit.unmock();
- this.server = null;
+ InOrder playerInOrder = Mockito.inOrder(player);
+ playerInOrder.verify(player).sendMessage("First message");
+ playerInOrder.verify(player).sendMessage("Second message");
+ playerInOrder.verify(player, Mockito.never()).sendMessage(Mockito.anyString());
}
@Test
- void sendMessages() {
- String[] messages = new String[] {"First message", "Second message"};
+ void sendMessages_List() {
+ Player player = Mockito.mock(Player.class);
+ PlayerUtils.sendMessages(player, Arrays.asList("First message", "Second message"));
- PlayerMock player = this.server.addPlayer();
-
- PlayerUtils.sendMessages(player, messages);
- PlayerUtils.sendMessages(player, Arrays.asList(messages));
-
- for (int i = 0; i < 2; ++i) {
- assertEquals(messages[0], player.nextMessage());
- assertEquals(messages[1], player.nextMessage());
- }
-
- assertNull(player.nextMessage());
+ InOrder playerInOrder = Mockito.inOrder(player);
+ playerInOrder.verify(player).sendMessage("First message");
+ playerInOrder.verify(player).sendMessage("Second message");
+ playerInOrder.verify(player, Mockito.never()).sendMessage(Mockito.anyString());
}
- @Disabled("Player#hidePlayer can currently not be mocked")
@Test
void getVisiblePlayerNames() {
- PlayerMock player = this.server.addPlayer("BasePlayer");
- PlayerMock visiblePlayer = this.server.addPlayer("VisiblePlayer");
- PlayerMock hiddenPlayer = this.server.addPlayer("HiddenPlayer");
+ Player player = createMockPlayer("BasePlayer");
+ Player visiblePlayer = createMockPlayer("VisiblePlayer");
+ Player hiddenPlayer = createMockPlayer("HiddenPlayer");
- player.hidePlayer(MockBukkit.createMockPlugin(), hiddenPlayer);
+ List result;
+ try (MockedStatic server = Mockito.mockStatic(Bukkit.class)) {
+ server.when(Bukkit::getOnlinePlayers).thenReturn(Arrays.asList(player, visiblePlayer, hiddenPlayer));
- List result = PlayerUtils.getVisiblePlayerNames(player, null);
- assertTrue(result.contains(visiblePlayer.getName()));
- assertFalse(result.contains(hiddenPlayer.getName()));
- assertFalse(result.contains(player.getName()));
+ Mockito.when(player.canSee(hiddenPlayer)).thenReturn(false);
+ Mockito.when(player.canSee(visiblePlayer)).thenReturn(true);
- assertEquals(0, PlayerUtils.getVisiblePlayerNames(player, "_").size());
+ assertEquals(0, PlayerUtils.getVisiblePlayerNames(player, "_").size());
+
+ result = PlayerUtils.getVisiblePlayerNames(player, null);
+ }
+
+ assertTrue(result.contains("VisiblePlayer"));
+ assertEquals(1, result.size());
}
- @Disabled("Player#hidePlayer can currently not be mocked")
@Test
void getVisiblePlayerDisplayNames() {
- PlayerMock player = this.server.addPlayer("BasePlayer");
- PlayerMock visiblePlayer = this.server.addPlayer("VisiblePlayer");
- PlayerMock hiddenPlayer = this.server.addPlayer("HiddenPlayer");
+ Player player = createMockPlayer("BasePlayer");
+ Player visiblePlayer = createMockPlayer("VisiblePlayer", "VisibleDisplayName");
+ Player hiddenPlayer = createMockPlayer("HiddenPlayer");
- player.setDisplayName("Base");
- visiblePlayer.setDisplayName("Visible");
- hiddenPlayer.setDisplayName("Hidden");
+ List result;
+ try (MockedStatic server = Mockito.mockStatic(Bukkit.class)) {
+ server.when(Bukkit::getOnlinePlayers).thenReturn(Arrays.asList(player, visiblePlayer, hiddenPlayer));
- player.hidePlayer(MockBukkit.createMockPlugin(), hiddenPlayer);
+ Mockito.when(player.canSee(hiddenPlayer)).thenReturn(false);
+ Mockito.when(player.canSee(visiblePlayer)).thenReturn(true);
- List result = PlayerUtils.getVisiblePlayerDisplayNames(player, null);
- assertTrue(result.contains(visiblePlayer.getDisplayName()));
- assertFalse(result.contains(hiddenPlayer.getDisplayName()));
- assertFalse(result.contains(player.getDisplayName()));
+ assertEquals(0, PlayerUtils.getVisiblePlayerDisplayNames(player, "A").size());
- assertEquals(0, PlayerUtils.getVisiblePlayerDisplayNames(player, "_").size());
+ result = PlayerUtils.getVisiblePlayerDisplayNames(player, null);
+ }
+
+ assertTrue(result.contains("VisibleDisplayName"));
+ assertEquals(1, result.size());
}
- @Disabled("Player#hidePlayer can currently not be mocked")
@Test
void getVisiblePlayers() {
- PlayerMock player = this.server.addPlayer("BasePlayer");
- PlayerMock visiblePlayer = this.server.addPlayer("VisiblePlayer");
- PlayerMock hiddenPlayer = this.server.addPlayer("HiddenPlayer");
+ Player player = createMockPlayer("BasePlayer");
+ Player visiblePlayer = createMockPlayer("VisiblePlayer");
+ Player hiddenPlayer = createMockPlayer("HiddenPlayer");
- player.hidePlayer(MockBukkit.createMockPlugin(), hiddenPlayer);
+ Mockito.when(player.canSee(hiddenPlayer)).thenReturn(false);
+ Mockito.when(player.canSee(visiblePlayer)).thenReturn(true);
+
+ List result;
+ try (MockedStatic server = Mockito.mockStatic(Bukkit.class)) {
+ server.when(Bukkit::getOnlinePlayers).thenReturn(Arrays.asList(player, visiblePlayer, hiddenPlayer));
+
+ assertEquals(0, PlayerUtils.getVisiblePlayers(player, "_").size());
+
+ result = PlayerUtils.getVisiblePlayers(player, null);
+ }
- List result = PlayerUtils.getVisiblePlayers(player, null);
assertTrue(result.contains(visiblePlayer));
- assertFalse(result.contains(hiddenPlayer));
- assertFalse(result.contains(player));
-
- assertEquals(0, PlayerUtils.getVisiblePlayers(player, "_").size());
+ assertEquals(1, result.size());
}
@Test
void getAllPlayers() {
- PlayerMock basePlayer = this.server.addPlayer("BasePlayer");
- this.server.addPlayer("Player_1");
- this.server.addPlayer("Player_2");
- this.server.addPlayer("Player3");
+ Player basePlayer = createMockPlayer("BasePlayer");
+ Player player1 = createMockPlayer("Player_1");
+ Player player2 = createMockPlayer("Player_2");
+ Player player3 = createMockPlayer("Player3");
- List result = PlayerUtils.getAllPlayers(basePlayer, "");
- assertEquals(3, result.size());
- assertFalse(result.contains(basePlayer.getName()));
+ try (MockedStatic server = Mockito.mockStatic(Bukkit.class)) {
+ server.when(Bukkit::getOnlinePlayers).thenReturn(Arrays.asList(basePlayer, player1, player2, player3));
- assertTrue(PlayerUtils.getAllPlayers(basePlayer, "_").isEmpty());
- assertEquals(0, PlayerUtils.getAllPlayers(basePlayer, "Player_").size());
+ assertEquals(0, PlayerUtils.getVisiblePlayers(basePlayer, "_").size());
+
+ List result = PlayerUtils.getAllPlayers(basePlayer, "");
+ assertFalse(result.contains(basePlayer.getName()));
+ assertEquals(3, result.size());
+
+ assertEquals(0, PlayerUtils.getAllPlayers(basePlayer, "_").size());
+ assertEquals(0, PlayerUtils.getAllPlayers(basePlayer, "Player_").size());
+ }
}
@Disabled("Disabled for now as the implementations seems to be faulty")
@Test
void getAllPlayersDisplay() {
- PlayerMock basePlayer = this.server.addPlayer("BasePlayer");
- this.server.addPlayer("Player_1");
- this.server.addPlayer("Player_2");
- this.server.addPlayer("Player3");
+ Player basePlayer = createMockPlayer("BasePlayer");
+ createMockPlayer("Player_1");
+ createMockPlayer("Player_2");
+ createMockPlayer("Player3");
List result = PlayerUtils.getAllPlayersDisplay(basePlayer, "");
assertEquals(3, result.size());
@@ -141,13 +150,9 @@ class PlayerUtilsTest {
@Disabled("Disabled for now as the implementations seems to be faulty")
@Test
void findPlayer() {
- Player p3 = this.server.addPlayer("Player");
- Player p1 = this.server.addPlayer("Player_1");
- Player p2 = this.server.addPlayer("_Player_2");
-
- p1.setDisplayName("p1");
- p2.setDisplayName("p2");
- p3.setDisplayName("p3");
+ Player p3 = createMockPlayer("Player", "p3");
+ Player p1 = createMockPlayer("Player_1", "p1");
+ Player p2 = createMockPlayer("_Player_2", "p2");
assertEquals(p1, PlayerUtils.findPlayer("Player_"));
assertEquals(p2, PlayerUtils.findPlayer("_Play"));
@@ -160,73 +165,185 @@ class PlayerUtilsTest {
}
@Test
- void getRandomPlayer() {
- assertNull(PlayerUtils.getRandomPlayer());
-
- for (int i = 0; i < 10; ++i) {
- this.server.addPlayer(String.valueOf(i));
+ void getRandomPlayer_NoneOnline() {
+ try (MockedStatic server = Mockito.mockStatic(Bukkit.class)) {
+ server.when(Bukkit::getOnlinePlayers).thenReturn(Collections.emptyList());
+ assertNull(PlayerUtils.getRandomPlayer());
}
+ }
- Set returnedPlayers = new HashSet<>();
- for (int i = 0; i < 50; ++i) {
- if (returnedPlayers.size() >= 5) {
- break;
+ @Test
+ void getRandomPlayer() {
+ try (MockedStatic server = Mockito.mockStatic(Bukkit.class)) {
+ List players = new ArrayList<>(10);
+ for (int i = 0; i < 10; ++i) {
+ Player player = createMockPlayer("Player_" + i);
+ players.add(player);
}
- returnedPlayers.add(PlayerUtils.getRandomPlayer());
- }
+ server.when(Bukkit::getOnlinePlayers).thenReturn(players);
- assertTrue(returnedPlayers.size() >= 5);
+ Set returnedPlayers = new HashSet<>();
+ for (int i = 0; i < 50; ++i) {
+ if (returnedPlayers.size() >= 5) {
+ break;
+ }
+
+ returnedPlayers.add(PlayerUtils.getRandomPlayer());
+ }
+
+ assertTrue(returnedPlayers.size() >= 5);
+ }
}
@Test
void giveItem() {
- Player player = this.server.addPlayer();
+ PlayerInventory inventory = Mockito.mock(PlayerInventory.class);
+ InOrder inventoryInOrder = Mockito.inOrder(inventory);
- PlayerUtils.giveItem(player, new ItemStack(Material.STONE));
- assertTrue(player.getInventory().contains(Material.STONE, 1));
+ Player player = createMockPlayer("Player");
+ Mockito.when(player.getInventory()).thenReturn(inventory);
+ Mockito.when(player.isOnline()).thenReturn(true);
- PlayerUtils.giveItem(player, new ItemStack(Material.GRASS_BLOCK), new ItemStack(Material.GRASS_BLOCK));
- assertTrue(player.getInventory().contains(Material.GRASS_BLOCK, 2));
+ ItemStack itemToAdd = Mockito.mock(ItemStack.class);
- PlayerUtils.giveItem(player, Arrays.asList(new ItemStack(Material.WHEAT_SEEDS), new ItemStack(Material.WHEAT_SEEDS)));
- assertTrue(player.getInventory().contains(Material.WHEAT_SEEDS, 2));
+ PlayerUtils.giveItem(player, itemToAdd);
+ inventoryInOrder.verify(inventory).addItem(itemToAdd);
+ inventoryInOrder.verify(inventory, Mockito.never()).addItem(Mockito.any());
}
@Test
- void giveItemOnFullInventory() {
- PlayerMock player = this.server.addPlayer();
+ void giveItem_Array() {
+ PlayerInventory inventory = Mockito.mock(PlayerInventory.class);
+ InOrder inventoryInOrder = Mockito.inOrder(inventory);
- fillInventory(player);
+ Player player = createMockPlayer("Player");
+ Mockito.when(player.getInventory()).thenReturn(inventory);
+ Mockito.when(player.isOnline()).thenReturn(true);
- int entityCount = this.server.getEntities().size();
- PlayerUtils.giveItem(player, new ItemStack(Material.STONE));
- assertEquals(entityCount + 1, this.server.getEntities().size());
+ ItemStack[] itemsToAdd = new ItemStack[] {Mockito.mock(ItemStack.class), Mockito.mock(ItemStack.class)};
- entityCount = this.server.getEntities().size();
- PlayerUtils.giveItem(player, new ItemStack(Material.GRASS_BLOCK), new ItemStack(Material.GRASS_BLOCK));
- assertEquals(entityCount + 2, this.server.getEntities().size());
+ PlayerUtils.giveItem(player, itemsToAdd);
+ inventoryInOrder.verify(inventory).addItem(itemsToAdd);
+ inventoryInOrder.verify(inventory, Mockito.never()).addItem(Mockito.any());
+ }
- entityCount = this.server.getEntities().size();
- PlayerUtils.giveItem(player, Arrays.asList(new ItemStack(Material.WHEAT_SEEDS), new ItemStack(Material.WHEAT_SEEDS), new ItemStack(Material.WHEAT_SEEDS)));
- assertEquals(entityCount + 3, this.server.getEntities().size());
+ @Test
+ void giveItem_List() {
+ PlayerInventory inventory = Mockito.mock(PlayerInventory.class);
+ InOrder inventoryInOrder = Mockito.inOrder(inventory);
+
+ Player player = createMockPlayer("Player");
+ Mockito.when(player.getInventory()).thenReturn(inventory);
+ Mockito.when(player.isOnline()).thenReturn(true);
+
+ ItemStack[] itemsToAdd = new ItemStack[] {Mockito.mock(ItemStack.class), Mockito.mock(ItemStack.class)};
+
+ PlayerUtils.giveItem(player, Arrays.asList(itemsToAdd));
+ inventoryInOrder.verify(inventory).addItem(itemsToAdd);
+ inventoryInOrder.verify(inventory, Mockito.never()).addItem(Mockito.any());
+ }
+
+ @Test
+ void giveItem_FullInventory() {
+ ItemStack itemToAdd = Mockito.mock(ItemStack.class);
+
+ PlayerInventory inventory = Mockito.mock(PlayerInventory.class);
+ Mockito.when(inventory.addItem(itemToAdd)).thenReturn(new HashMap() {{
+ put(0, itemToAdd);
+ }});
+ InOrder inventoryInOrder = Mockito.inOrder(inventory);
+
+ Player player = createMockPlayer("Player");
+ Mockito.when(player.getInventory()).thenReturn(inventory);
+ Mockito.when(player.isOnline()).thenReturn(true);
+
+ World world = Mockito.mock(World.class);
+ InOrder worldInOrder = Mockito.inOrder(world);
+ Mockito.when(player.getWorld()).thenReturn(world);
+
+ PlayerUtils.giveItem(player, itemToAdd);
+
+ inventoryInOrder.verify(inventory).addItem(itemToAdd);
+ inventoryInOrder.verify(inventory, Mockito.never()).addItem(Mockito.any());
+
+ worldInOrder.verify(world).dropItemNaturally(Mockito.any(), Mockito.eq(itemToAdd));
+ worldInOrder.verify(world, Mockito.never()).dropItemNaturally(Mockito.any(), Mockito.any());
+ }
+
+ @Test
+ void giveItem_FullInventory_Array() {
+ ItemStack[] itemsToAdd = new ItemStack[] {Mockito.mock(ItemStack.class), Mockito.mock(ItemStack.class)};
+
+ PlayerInventory inventory = Mockito.mock(PlayerInventory.class);
+ Mockito.when(inventory.addItem(Mockito.any())).thenReturn(new HashMap() {{
+ put(0, itemsToAdd[0]);
+ put(1, itemsToAdd[1]);
+ }});
+ InOrder inventoryInOrder = Mockito.inOrder(inventory);
+
+ Player player = createMockPlayer("Player");
+ Mockito.when(player.getInventory()).thenReturn(inventory);
+ Mockito.when(player.isOnline()).thenReturn(true);
+
+ World world = Mockito.mock(World.class);
+ InOrder worldInOrder = Mockito.inOrder(world);
+ Mockito.when(player.getWorld()).thenReturn(world);
+
+ PlayerUtils.giveItem(player, itemsToAdd);
+ inventoryInOrder.verify(inventory).addItem(itemsToAdd);
+ inventoryInOrder.verify(inventory, Mockito.never()).addItem(Mockito.any());
+
+ worldInOrder.verify(world).dropItemNaturally(Mockito.any(), Mockito.eq(itemsToAdd[0]));
+ worldInOrder.verify(world).dropItemNaturally(Mockito.any(), Mockito.eq(itemsToAdd[1]));
+ worldInOrder.verify(world, Mockito.never()).dropItemNaturally(Mockito.any(), Mockito.any());
+ }
+
+ @Test
+ void giveItem_FullInventory_List() {
+ ItemStack[] itemsToAdd = new ItemStack[] {Mockito.mock(ItemStack.class), Mockito.mock(ItemStack.class)};
+
+ PlayerInventory inventory = Mockito.mock(PlayerInventory.class);
+ Mockito.when(inventory.addItem(Mockito.any())).thenReturn(new HashMap() {{
+ put(0, itemsToAdd[0]);
+ put(1, itemsToAdd[1]);
+ }});
+ InOrder inventoryInOrder = Mockito.inOrder(inventory);
+
+ Player player = createMockPlayer("Player");
+ Mockito.when(player.getInventory()).thenReturn(inventory);
+ Mockito.when(player.isOnline()).thenReturn(true);
+
+ World world = Mockito.mock(World.class);
+ InOrder worldInOrder = Mockito.inOrder(world);
+ Mockito.when(player.getWorld()).thenReturn(world);
+
+ PlayerUtils.giveItem(player, Arrays.asList(itemsToAdd));
+ inventoryInOrder.verify(inventory).addItem(itemsToAdd);
+ inventoryInOrder.verify(inventory, Mockito.never()).addItem(Mockito.any());
+
+ worldInOrder.verify(world).dropItemNaturally(Mockito.any(), Mockito.eq(itemsToAdd[0]));
+ worldInOrder.verify(world).dropItemNaturally(Mockito.any(), Mockito.eq(itemsToAdd[1]));
+ worldInOrder.verify(world, Mockito.never()).dropItemNaturally(Mockito.any(), Mockito.any());
}
@Disabled("Test is incomplete")
@Test
void getNumberFromPermission() {
- Player player = this.server.addPlayer();
+ Player player = createMockPlayer("Player");
assertEquals(-1, PlayerUtils.getNumberFromPermission(player, "example.plugin.feature", -1));
}
- private void fillInventory(Player player) {
- ItemStack[] contents = new ItemStack[player.getInventory().getContents().length];
+ private Player createMockPlayer(String name) {
+ return createMockPlayer(name, name);
+ }
- for (int i = 0; i < contents.length; ++i) {
- contents[i] = new ItemStack(Material.BARRIER);
- }
+ private Player createMockPlayer(String name, String displayName) {
+ Player player = Mockito.mock(Player.class);
+ Mockito.when(player.getName()).thenReturn(name);
+ Mockito.when(player.getDisplayName()).thenReturn(displayName);
- player.getInventory().setContents(contents);
+ return player;
}
}
diff --git a/NMS/NMS-API/pom.xml b/NMS/NMS-API/pom.xml
index 87a4b50b..9067aaad 100644
--- a/NMS/NMS-API/pom.xml
+++ b/NMS/NMS-API/pom.xml
@@ -10,15 +10,14 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-API
- jar
+
org.spigotmc
- spigot
- 1.17
+ spigot-api
+ 1.8-R0.1-SNAPSHOT
provided
@@ -26,6 +25,7 @@
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-API/src/main/java/com/songoda/core/nms/NmsImplementations.java b/NMS/NMS-API/src/main/java/com/songoda/core/nms/NmsImplementations.java
new file mode 100644
index 00000000..e2908f5d
--- /dev/null
+++ b/NMS/NMS-API/src/main/java/com/songoda/core/nms/NmsImplementations.java
@@ -0,0 +1,20 @@
+package com.songoda.core.nms;
+
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+public interface NmsImplementations {
+ @NotNull NMSPlayer getPlayer();
+
+ @NotNull WorldCore getWorld();
+
+ @NotNull NmsWorldBorder getWorldBorder();
+
+ @NotNull AnvilCore getAnvil();
+
+ @NotNull NBTCore getNbt();
+}
diff --git a/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/NmsWorldBorder.java b/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/NmsWorldBorder.java
new file mode 100644
index 00000000..6168ab47
--- /dev/null
+++ b/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/NmsWorldBorder.java
@@ -0,0 +1,12 @@
+package com.songoda.core.nms.world;
+
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+public interface NmsWorldBorder {
+ void send(Player player, BorderColor color, double size, Location center);
+
+ enum BorderColor {
+ BLUE, GREEN, RED
+ }
+}
diff --git a/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/SWorld.java b/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/SWorld.java
index cbb03732..6f2dd16b 100644
--- a/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/SWorld.java
+++ b/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/SWorld.java
@@ -1,9 +1,20 @@
package com.songoda.core.nms.world;
+import org.bukkit.Material;
import org.bukkit.entity.LivingEntity;
import java.util.List;
public interface SWorld {
List getLivingEntities();
+
+ /**
+ * Set a block to a certain type by updating the block directly in the NMS chunk.
+ *
+ * The chunk must be loaded and players must relog if they have the chunk loaded in order to use this method.
+ * (F3+A is not enough)
+ */
+ // TODO: Check if FabledSkyBlock *really* needs this method and if it can be removed.
+ // Would make thinks less complicated and I kinda cannot imagine it being *that* much faster to be worth it?
+ void setBlockFast(int x, int y, int z, Material material);
}
diff --git a/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/WorldCore.java b/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/WorldCore.java
index 302569c9..f071d9ea 100644
--- a/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/WorldCore.java
+++ b/NMS/NMS-API/src/main/java/com/songoda/core/nms/world/WorldCore.java
@@ -7,8 +7,13 @@ import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public interface WorldCore {
+ /**
+ * @deprecated Use {@link #getSpawner(Location)} instead
+ */
+ @Deprecated
SSpawner getSpawner(CreatureSpawner spawner);
SSpawner getSpawner(Location location);
@@ -29,7 +34,7 @@ public interface WorldCore {
*/
void randomTickChunk(Chunk bukkitChunk, int tickAmount) throws ReflectiveOperationException;
- void updateAdjacentComparators(Block bukkitBlock);
+ void updateAdjacentComparators(@NotNull Block bukkitBlock);
/**
* Ticks all inactive spawners in a specific chunk ignoring the minimum required players within a specific range.
diff --git a/NMS/NMS-v1_10_R1/pom.xml b/NMS/NMS-v1_10_R1/pom.xml
index d92e5390..6c90f81b 100644
--- a/NMS/NMS-v1_10_R1/pom.xml
+++ b/NMS/NMS-v1_10_R1/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_10_R1
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..aa1332e9
--- /dev/null
+++ b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_10_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_10_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_10_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_10_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_10_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_10_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..5cbaa05e
--- /dev/null
+++ b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_10_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_10_R1.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_10_R1.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_10_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/SWorldImpl.java b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/SWorldImpl.java
index 04f7ea34..1c9667ed 100644
--- a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/SWorldImpl.java
@@ -1,17 +1,35 @@
package com.songoda.core.nms.v1_10_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_10_R1.Block;
+import net.minecraft.server.v1_10_R1.BlockPosition;
+import net.minecraft.server.v1_10_R1.Chunk;
+import net.minecraft.server.v1_10_R1.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_10_R1.CraftWorld;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+
+ levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0));
}
}
diff --git a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java
index 37fc32f0..ad85a0a1 100644
--- a/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_10_R1/src/main/java/com/songoda/core/nms/v1_10_R1/world/WorldCoreImpl.java
@@ -18,9 +18,11 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_10_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_10_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_10_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_10_R1.util.CraftMagicNumbers;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +42,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -89,12 +91,12 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(org.bukkit.block.Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull org.bukkit.block.Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
- net.minecraft.server.v1_10_R1.World nmsWorld = craftChunk.getHandle().getWorld();
+ WorldServer serverLevel = ((CraftWorld) craftBlock.getWorld()).getHandle();
- BlockPosition blockPosition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
- nmsWorld.updateAdjacentComparators(blockPosition, CraftMagicNumbers.getBlock(craftBlock));
+ BlockPosition blockPos = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
+ Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType());
+ serverLevel.updateAdjacentComparators(blockPos, nmsBlock);
}
}
diff --git a/NMS/NMS-v1_11_R1/pom.xml b/NMS/NMS-v1_11_R1/pom.xml
index 553f3ed9..ff6ea291 100644
--- a/NMS/NMS-v1_11_R1/pom.xml
+++ b/NMS/NMS-v1_11_R1/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_11_R1
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..97d66bcb
--- /dev/null
+++ b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_11_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_11_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_11_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_11_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_11_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_11_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..f2e1ceb8
--- /dev/null
+++ b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_11_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_11_R1.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_11_R1.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_11_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/SWorldImpl.java b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/SWorldImpl.java
index e8d37fd4..2a53dde0 100644
--- a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/SWorldImpl.java
@@ -1,17 +1,35 @@
package com.songoda.core.nms.v1_11_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_11_R1.Block;
+import net.minecraft.server.v1_11_R1.BlockPosition;
+import net.minecraft.server.v1_11_R1.Chunk;
+import net.minecraft.server.v1_11_R1.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_11_R1.CraftWorld;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+
+ levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0));
}
}
diff --git a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java
index 15e5f026..62dedf0c 100644
--- a/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_11_R1/src/main/java/com/songoda/core/nms/v1_11_R1/world/WorldCoreImpl.java
@@ -18,9 +18,11 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_11_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_11_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_11_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_11_R1.util.CraftMagicNumbers;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +42,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -89,12 +91,12 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(org.bukkit.block.Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull org.bukkit.block.Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
- net.minecraft.server.v1_11_R1.World nmsWorld = craftChunk.getHandle().getWorld();
+ WorldServer serverLevel = ((CraftWorld) craftBlock.getWorld()).getHandle();
- BlockPosition blockPosition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
- nmsWorld.updateAdjacentComparators(blockPosition, CraftMagicNumbers.getBlock(craftBlock));
+ BlockPosition blockPos = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
+ Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType());
+ serverLevel.updateAdjacentComparators(blockPos, nmsBlock);
}
}
diff --git a/NMS/NMS-v1_12_R1/pom.xml b/NMS/NMS-v1_12_R1/pom.xml
index 579dd688..9248730c 100644
--- a/NMS/NMS-v1_12_R1/pom.xml
+++ b/NMS/NMS-v1_12_R1/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_12_R1
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..de9a3570
--- /dev/null
+++ b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_12_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_12_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_12_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_12_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_12_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_12_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..20116244
--- /dev/null
+++ b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_12_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_12_R1.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_12_R1.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/SWorldImpl.java b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/SWorldImpl.java
index 6015dc65..7ac285dd 100644
--- a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/SWorldImpl.java
@@ -1,17 +1,35 @@
package com.songoda.core.nms.v1_12_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_12_R1.Block;
+import net.minecraft.server.v1_12_R1.BlockPosition;
+import net.minecraft.server.v1_12_R1.Chunk;
+import net.minecraft.server.v1_12_R1.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+
+ levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0));
}
}
diff --git a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java
index eef44159..f1690ee1 100644
--- a/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_12_R1/src/main/java/com/songoda/core/nms/v1_12_R1/world/WorldCoreImpl.java
@@ -18,9 +18,11 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_12_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_12_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_12_R1.util.CraftMagicNumbers;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +42,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -89,12 +91,12 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(org.bukkit.block.Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull org.bukkit.block.Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
- net.minecraft.server.v1_12_R1.World nmsWorld = craftChunk.getHandle().getWorld();
+ WorldServer serverLevel = ((CraftWorld) craftBlock.getWorld()).getHandle();
- BlockPosition blockPosition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
- nmsWorld.updateAdjacentComparators(blockPosition, CraftMagicNumbers.getBlock(craftBlock));
+ BlockPosition blockPos = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
+ Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType());
+ serverLevel.updateAdjacentComparators(blockPos, nmsBlock);
}
}
diff --git a/NMS/NMS-v1_13_R1/pom.xml b/NMS/NMS-v1_13_R1/pom.xml
index 5fc70233..acc19bf5 100644
--- a/NMS/NMS-v1_13_R1/pom.xml
+++ b/NMS/NMS-v1_13_R1/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_13_R1
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..2837e434
--- /dev/null
+++ b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_13_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_13_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_13_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_13_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_13_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_13_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..e33f7867
--- /dev/null
+++ b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_13_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_13_R1.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_13_R1.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_13_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/SWorldImpl.java b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/SWorldImpl.java
index 78312506..45a9920c 100644
--- a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/SWorldImpl.java
@@ -1,17 +1,37 @@
package com.songoda.core.nms.v1_13_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_13_R1.BlockPosition;
+import net.minecraft.server.v1_13_R1.Chunk;
+import net.minecraft.server.v1_13_R1.IBlockData;
+import net.minecraft.server.v1_13_R1.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_13_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_13_R1.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+ IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true);
}
}
diff --git a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java
index a00cf41d..837ba3c4 100644
--- a/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_13_R1/src/main/java/com/songoda/core/nms/v1_13_R1/world/WorldCoreImpl.java
@@ -21,6 +21,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_13_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_13_R1.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +41,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -93,11 +94,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ WorldServer serverLevel = craftBlock.getCraftWorld().getHandle();
- net.minecraft.server.v1_13_R1.World nmsWorld = craftChunk.getHandle().getWorld();
- nmsWorld.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_13_R2/pom.xml b/NMS/NMS-v1_13_R2/pom.xml
index 09bf4cbc..55ecd2d9 100644
--- a/NMS/NMS-v1_13_R2/pom.xml
+++ b/NMS/NMS-v1_13_R2/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_13_R2
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/NmsImplementationsImpl.java b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/NmsImplementationsImpl.java
new file mode 100644
index 00000000..1e2e67b1
--- /dev/null
+++ b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_13_R2;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_13_R2.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_13_R2.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_13_R2.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_13_R2.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_13_R2.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..cb7b82b3
--- /dev/null
+++ b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_13_R2.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_13_R2.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_13_R2.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
+import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/SWorldImpl.java b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/SWorldImpl.java
index 845b135a..61859a31 100644
--- a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/SWorldImpl.java
+++ b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/SWorldImpl.java
@@ -1,17 +1,37 @@
package com.songoda.core.nms.v1_13_R2.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_13_R2.BlockPosition;
+import net.minecraft.server.v1_13_R2.Chunk;
+import net.minecraft.server.v1_13_R2.IBlockData;
+import net.minecraft.server.v1_13_R2.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_13_R2.CraftWorld;
+import org.bukkit.craftbukkit.v1_13_R2.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+ IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true);
}
}
diff --git a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java
index 43283261..c7946e90 100644
--- a/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_13_R2/src/main/java/com/songoda/core/nms/v1_13_R2/world/WorldCoreImpl.java
@@ -21,6 +21,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_13_R2.CraftChunk;
import org.bukkit.craftbukkit.v1_13_R2.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +41,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -100,11 +101,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ WorldServer serverLevel = craftBlock.getCraftWorld().getHandle();
- net.minecraft.server.v1_13_R2.World nmsWorld = craftChunk.getHandle().getWorld();
- nmsWorld.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_14_R1/pom.xml b/NMS/NMS-v1_14_R1/pom.xml
index 41bb3d30..68fdc2a3 100644
--- a/NMS/NMS-v1_14_R1/pom.xml
+++ b/NMS/NMS-v1_14_R1/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_14_R1
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..15c5bec9
--- /dev/null
+++ b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_14_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_14_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_14_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_14_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_14_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_14_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..701e6b66
--- /dev/null
+++ b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_14_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_14_R1.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_14_R1.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/SWorldImpl.java b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/SWorldImpl.java
index ac14e66a..1ff6c9de 100644
--- a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/SWorldImpl.java
@@ -1,17 +1,37 @@
package com.songoda.core.nms.v1_14_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_14_R1.BlockPosition;
+import net.minecraft.server.v1_14_R1.Chunk;
+import net.minecraft.server.v1_14_R1.IBlockData;
+import net.minecraft.server.v1_14_R1.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_14_R1.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+ IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true);
}
}
diff --git a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java
index 9a15ed48..1ea611a7 100644
--- a/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_14_R1/src/main/java/com/songoda/core/nms/v1_14_R1/world/WorldCoreImpl.java
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_14_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -42,7 +43,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -97,11 +98,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ WorldServer serverLevel = craftBlock.getCraftWorld().getHandle();
- net.minecraft.server.v1_14_R1.World nmsWorld = craftChunk.getHandle().getWorld();
- nmsWorld.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_15_R1/pom.xml b/NMS/NMS-v1_15_R1/pom.xml
index ebcde45c..18125645 100644
--- a/NMS/NMS-v1_15_R1/pom.xml
+++ b/NMS/NMS-v1_15_R1/pom.xml
@@ -10,9 +10,8 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_15_R1
- jar
+
@@ -26,12 +25,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..86d5d423
--- /dev/null
+++ b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_15_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_15_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_15_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_15_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_15_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_15_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..50913443
--- /dev/null
+++ b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_15_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_15_R1.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_15_R1.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/SWorldImpl.java b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/SWorldImpl.java
index 5b569025..c2c4c8b5 100644
--- a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/SWorldImpl.java
@@ -1,17 +1,37 @@
package com.songoda.core.nms.v1_15_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_15_R1.BlockPosition;
+import net.minecraft.server.v1_15_R1.Chunk;
+import net.minecraft.server.v1_15_R1.IBlockData;
+import net.minecraft.server.v1_15_R1.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+ IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true);
}
}
diff --git a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java
index 8810cf6a..96c746da 100644
--- a/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_15_R1/src/main/java/com/songoda/core/nms/v1_15_R1/world/WorldCoreImpl.java
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_15_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_15_R1.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -42,7 +43,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -100,11 +101,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ WorldServer serverLevel = craftBlock.getCraftWorld().getHandle();
- net.minecraft.server.v1_15_R1.World nmsWorld = craftChunk.getHandle().getWorld();
- nmsWorld.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_16_R1/pom.xml b/NMS/NMS-v1_16_R1/pom.xml
index 800e99f6..7358e2ea 100644
--- a/NMS/NMS-v1_16_R1/pom.xml
+++ b/NMS/NMS-v1_16_R1/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_16_R1
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..6af68429
--- /dev/null
+++ b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_16_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_16_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_16_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_16_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_16_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_16_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..24060878
--- /dev/null
+++ b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_16_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_16_R1.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_16_R1.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/SWorldImpl.java b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/SWorldImpl.java
index 1ad6bf55..e28e2e17 100644
--- a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/SWorldImpl.java
@@ -1,17 +1,37 @@
package com.songoda.core.nms.v1_16_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_16_R1.BlockPosition;
+import net.minecraft.server.v1_16_R1.Chunk;
+import net.minecraft.server.v1_16_R1.IBlockData;
+import net.minecraft.server.v1_16_R1.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_16_R1.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+ IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true);
}
}
diff --git a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java
index cbe8ef07..4a749de6 100644
--- a/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_16_R1/src/main/java/com/songoda/core/nms/v1_16_R1/world/WorldCoreImpl.java
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_16_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_16_R1.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -42,7 +43,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -101,11 +102,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ WorldServer serverLevel = craftBlock.getCraftWorld().getHandle();
- net.minecraft.server.v1_16_R1.World nmsWorld = craftChunk.getHandle().getWorld();
- nmsWorld.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_16_R2/pom.xml b/NMS/NMS-v1_16_R2/pom.xml
index d3eeb8d2..57d77c4f 100644
--- a/NMS/NMS-v1_16_R2/pom.xml
+++ b/NMS/NMS-v1_16_R2/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_16_R2
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/NmsImplementationsImpl.java b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/NmsImplementationsImpl.java
new file mode 100644
index 00000000..32692703
--- /dev/null
+++ b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_16_R2;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_16_R2.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_16_R2.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_16_R2.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_16_R2.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_16_R2.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..de74865d
--- /dev/null
+++ b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_16_R2.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_16_R2.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_16_R2.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
+import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/SWorldImpl.java b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/SWorldImpl.java
index b827e04f..9e5f668c 100644
--- a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/SWorldImpl.java
+++ b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/SWorldImpl.java
@@ -1,17 +1,37 @@
package com.songoda.core.nms.v1_16_R2.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_16_R2.BlockPosition;
+import net.minecraft.server.v1_16_R2.Chunk;
+import net.minecraft.server.v1_16_R2.IBlockData;
+import net.minecraft.server.v1_16_R2.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
+import org.bukkit.craftbukkit.v1_16_R2.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+ IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true);
}
}
diff --git a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java
index 842cf36e..153b8251 100644
--- a/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_16_R2/src/main/java/com/songoda/core/nms/v1_16_R2/world/WorldCoreImpl.java
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_16_R2.CraftChunk;
import org.bukkit.craftbukkit.v1_16_R2.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -42,7 +43,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -101,11 +102,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ WorldServer serverLevel = craftBlock.getCraftWorld().getHandle();
- net.minecraft.server.v1_16_R2.World nmsWorld = craftChunk.getHandle().getWorld();
- nmsWorld.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_16_R3/pom.xml b/NMS/NMS-v1_16_R3/pom.xml
index 203a99f3..769ab4d7 100644
--- a/NMS/NMS-v1_16_R3/pom.xml
+++ b/NMS/NMS-v1_16_R3/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_16_R3
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/NmsImplementationsImpl.java b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/NmsImplementationsImpl.java
new file mode 100644
index 00000000..9d49860a
--- /dev/null
+++ b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_16_R3;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_16_R3.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_16_R3.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_16_R3.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_16_R3.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_16_R3.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..99819630
--- /dev/null
+++ b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_16_R3.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_16_R3.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_16_R3.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
+import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/SWorldImpl.java b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/SWorldImpl.java
index 0b12fabd..e1a6e589 100644
--- a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/SWorldImpl.java
+++ b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/SWorldImpl.java
@@ -1,17 +1,37 @@
package com.songoda.core.nms.v1_16_R3.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_16_R3.BlockPosition;
+import net.minecraft.server.v1_16_R3.Chunk;
+import net.minecraft.server.v1_16_R3.IBlockData;
+import net.minecraft.server.v1_16_R3.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
+import org.bukkit.craftbukkit.v1_16_R3.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+ IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true);
}
}
diff --git a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java
index b1ad6147..1f3364ac 100644
--- a/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_16_R3/src/main/java/com/songoda/core/nms/v1_16_R3/world/WorldCoreImpl.java
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_16_R3.CraftChunk;
import org.bukkit.craftbukkit.v1_16_R3.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -42,7 +43,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -102,11 +103,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ WorldServer serverLevel = craftBlock.getCraftWorld().getHandle();
- net.minecraft.server.v1_16_R3.World nmsWorld = craftChunk.getHandle().getWorld();
- nmsWorld.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_17_R1/pom.xml b/NMS/NMS-v1_17_R1/pom.xml
index 101edd00..d25e77b9 100644
--- a/NMS/NMS-v1_17_R1/pom.xml
+++ b/NMS/NMS-v1_17_R1/pom.xml
@@ -10,15 +10,13 @@
2.6.21
../../pom.xml
+ SongodaCore-NMS-v1_17_R1
16
16
- SongodaCore-NMS-v1_17_R1
- jar
-
org.spigotmc
@@ -31,12 +29,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..0d2e0179
--- /dev/null
+++ b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_17_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_17_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_17_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_17_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_17_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_17_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..c4ce65f8
--- /dev/null
+++ b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,36 @@
+package com.songoda.core.nms.v1_17_R1.world;
+
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.network.protocol.game.ClientboundInitializeBorderPacket;
+import net.minecraft.world.level.border.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().b.sendPacket(new ClientboundInitializeBorderPacket(worldBorder));
+ }
+}
diff --git a/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/SWorldImpl.java b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/SWorldImpl.java
index b7c5bd51..162e9f0e 100644
--- a/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/SWorldImpl.java
@@ -1,12 +1,17 @@
package com.songoda.core.nms.v1_17_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.core.BlockPosition;
import net.minecraft.server.level.WorldServer;
import net.minecraft.world.entity.Entity;
+import net.minecraft.world.level.block.state.IBlockData;
+import net.minecraft.world.level.chunk.Chunk;
import net.minecraft.world.level.entity.LevelEntityGetter;
import net.minecraft.world.level.entity.PersistentEntitySectionManager;
+import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_17_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_17_R1.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.lang.reflect.Field;
@@ -37,9 +42,8 @@ public class SWorldImpl implements SWorld {
List list = new ArrayList<>();
try {
- WorldServer worldServer = ((CraftWorld) world).getHandle();
- LevelEntityGetter entities =
- ((PersistentEntitySectionManager) fieldG.get(worldServer)).d();
+ WorldServer worldServer = ((CraftWorld) this.world).getHandle();
+ LevelEntityGetter entities = ((PersistentEntitySectionManager) fieldG.get(worldServer)).d();
entities.a().forEach((mcEnt) -> {
org.bukkit.entity.Entity bukkitEntity = mcEnt.getBukkitEntity();
@@ -53,4 +57,13 @@ public class SWorldImpl implements SWorld {
return list;
}
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+ IBlockData blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setType(new BlockPosition(x & 0xF, y, z & 0xF), blockState, true);
+ }
}
diff --git a/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/WorldCoreImpl.java
index c1ba86ab..9f0dfc3e 100644
--- a/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_17_R1/src/main/java/com/songoda/core/nms/v1_17_R1/world/WorldCoreImpl.java
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_17_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_17_R1.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -100,11 +101,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ WorldServer serverLevel = craftBlock.getCraftWorld().getHandle();
- net.minecraft.world.level.World nmsWorld = craftChunk.getHandle().getWorld();
- nmsWorld.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateAdjacentComparators(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_18_R1/pom.xml b/NMS/NMS-v1_18_R1/pom.xml
index ad448eed..94b79933 100644
--- a/NMS/NMS-v1_18_R1/pom.xml
+++ b/NMS/NMS-v1_18_R1/pom.xml
@@ -3,18 +3,6 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- 17
-
-
-
-
com.songoda
@@ -22,18 +10,59 @@
2.6.21
../../pom.xml
+ SongodaCore-NMS-v1_18_R1
17
17
- 1.18-R0.1-SNAPSHOT
+ 1.18.1-R0.1-SNAPSHOT
- SongodaCore-NMS-v1_18_R1
- jar
+
+
+
+ net.md-5
+ specialsource-maven-plugin
+ 1.2.4
+
+
+
+ remap-obf
+ package
+
+ remap
+
+
+
+ org.spigotmc:minecraft-server:${nms.ver}:txt:maps-mojang
+ true
+ org.spigotmc:spigot:${nms.ver}:jar:remapped-mojang
+ true
+ remapped-obf
+
+
+
+
+ remap-spigot
+ package
+
+ remap
+
+
+
+ ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar
+ org.spigotmc:minecraft-server:${nms.ver}:csrg:maps-spigot
+ org.spigotmc:spigot:${nms.ver}:jar:remapped-obf
+
+
+
+
+
+
+
org.spigotmc
spigot-api
@@ -43,7 +72,8 @@
org.spigotmc
spigot
- 1.18-R0.1-SNAPSHOT
+ ${nms.ver}
+ remapped-mojang
provided
@@ -51,12 +81,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..48523749
--- /dev/null
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_18_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_18_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_18_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_18_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_18_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_18_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilCore.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilCore.java
index 2977fb8b..460e6710 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilCore.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilCore.java
@@ -1,7 +1,7 @@
package com.songoda.core.nms.v1_18_R1.anvil;
import com.songoda.core.nms.anvil.CustomAnvil;
-import net.minecraft.server.level.EntityPlayer;
+import net.minecraft.server.level.ServerPlayer;
import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.inventory.InventoryHolder;
@@ -9,13 +9,13 @@ import org.bukkit.inventory.InventoryHolder;
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
@Override
public CustomAnvil createAnvil(Player player) {
- EntityPlayer p = ((CraftPlayer) player).getHandle();
- return new AnvilView(p.nextContainerCounter(), p, null);
+ return createAnvil(player, null);
}
@Override
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
- EntityPlayer p = ((CraftPlayer) player).getHandle();
- return new AnvilView(p.nextContainerCounter(), p, holder);
+ ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
+
+ return new AnvilView(serverPlayer.nextContainerCounter(), serverPlayer, holder);
}
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilInventoryCustom.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilInventoryCustom.java
index a6a1f079..8a9334bd 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilInventoryCustom.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilInventoryCustom.java
@@ -1,7 +1,7 @@
package com.songoda.core.nms.v1_18_R1.anvil;
-import net.minecraft.world.IInventory;
-import net.minecraft.world.inventory.ContainerAnvil;
+import net.minecraft.world.Container;
+import net.minecraft.world.inventory.AnvilMenu;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryAnvil;
import org.bukkit.inventory.InventoryHolder;
@@ -9,7 +9,7 @@ import org.bukkit.inventory.InventoryHolder;
public class AnvilInventoryCustom extends CraftInventoryAnvil {
final InventoryHolder holder;
- public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
+ public AnvilInventoryCustom(InventoryHolder holder, Location location, Container inventory, Container resultInventory, AnvilMenu container) {
super(location, inventory, resultInventory, container);
this.holder = holder;
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilView.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilView.java
index 30fb8661..acb81136 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilView.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/anvil/AnvilView.java
@@ -2,17 +2,17 @@ package com.songoda.core.nms.v1_18_R1.anvil;
import com.songoda.core.nms.anvil.CustomAnvil;
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
-import net.minecraft.core.BlockPosition;
-import net.minecraft.network.chat.ChatMessage;
-import net.minecraft.network.protocol.game.PacketPlayOutOpenWindow;
-import net.minecraft.server.level.EntityPlayer;
-import net.minecraft.world.IInventory;
-import net.minecraft.world.entity.player.EntityHuman;
-import net.minecraft.world.inventory.Container;
-import net.minecraft.world.inventory.ContainerAccess;
-import net.minecraft.world.inventory.ContainerAnvil;
-import net.minecraft.world.inventory.ContainerAnvilAbstract;
-import net.minecraft.world.inventory.Containers;
+import net.minecraft.core.BlockPos;
+import net.minecraft.network.chat.TranslatableComponent;
+import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.world.Container;
+import net.minecraft.world.entity.player.Player;
+import net.minecraft.world.inventory.AbstractContainerMenu;
+import net.minecraft.world.inventory.AnvilMenu;
+import net.minecraft.world.inventory.ContainerLevelAccess;
+import net.minecraft.world.inventory.ItemCombinerMenu;
+import net.minecraft.world.inventory.MenuType;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftInventoryView;
import org.bukkit.inventory.Inventory;
@@ -23,8 +23,8 @@ import java.lang.reflect.Field;
import java.util.logging.Level;
import java.util.logging.Logger;
-public class AnvilView extends ContainerAnvil implements CustomAnvil {
- private final EntityPlayer entity;
+public class AnvilView extends AnvilMenu implements CustomAnvil {
+ private final ServerPlayer entity;
private final Inventory inventory;
private String customTitle = "Repairing";
private int cost = -1;
@@ -38,13 +38,13 @@ public class AnvilView extends ContainerAnvil implements CustomAnvil {
static {
try {
- mc_ContainerAnvil_repairInventory = ContainerAnvilAbstract.class.getDeclaredField("p");
+ mc_ContainerAnvil_repairInventory = ItemCombinerMenu.class.getDeclaredField("p");
mc_ContainerAnvil_repairInventory.setAccessible(true);
- mc_ContainerAnvil_resultInventory = ContainerAnvilAbstract.class.getDeclaredField("o");
+ mc_ContainerAnvil_resultInventory = ItemCombinerMenu.class.getDeclaredField("o");
mc_ContainerAnvil_resultInventory.setAccessible(true);
- mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
+ mc_ContainerAnvil_bukkitEntity = AnvilMenu.class.getDeclaredField("bukkitEntity");
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
} catch (Exception ex) {
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
@@ -56,17 +56,17 @@ public class AnvilView extends ContainerAnvil implements CustomAnvil {
static {
try {
- mc_Container_title = Container.class.getDeclaredField("title");
+ mc_Container_title = AbstractContainerMenu.class.getDeclaredField("title");
mc_Container_title.setAccessible(true);
} catch (Exception ex) {
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
}
}
- public AnvilView(int id, EntityPlayer entity, InventoryHolder holder) {
- super(entity.nextContainerCounter(), entity.fq(), ContainerAccess.a(entity.t, new BlockPosition(0, 0, 0)));
+ public AnvilView(int id, ServerPlayer entity, InventoryHolder holder) {
+ super(entity.nextContainerCounter(), entity.getInventory(), ContainerLevelAccess.create(entity.level, new BlockPos(0, 0, 0)));
- this.setTitle(new ChatMessage(customTitle != null ? customTitle : ""));
+ this.setTitle(new TranslatableComponent(customTitle != null ? customTitle : ""));
this.checkReachable = false;
this.entity = entity;
@@ -77,12 +77,12 @@ public class AnvilView extends ContainerAnvil implements CustomAnvil {
}
}
- public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
+ public CraftInventoryView getBukkitView(Player player, InventoryHolder holder) {
try {
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
- new Location(entity.t.getWorld(), 0, 0, 0),
- (IInventory) mc_ContainerAnvil_repairInventory.get(this),
- (IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
+ new Location(entity.level.getWorld(), 0, 0, 0),
+ (Container) mc_ContainerAnvil_repairInventory.get(this),
+ (Container) mc_ContainerAnvil_resultInventory.get(this), this);
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
mc_ContainerAnvil_bukkitEntity.set(this, view);
@@ -95,13 +95,13 @@ public class AnvilView extends ContainerAnvil implements CustomAnvil {
}
@Override
- public boolean a(EntityHuman entityhuman) {
+ public boolean stillValid(Player entityHuman) {
return canUse;
}
@Override
- public void e() {
- super.e();
+ public void broadcastFullState() {
+ super.broadcastFullState();
if (cost >= 0) {
this.setLevelCost(cost);
@@ -112,17 +112,17 @@ public class AnvilView extends ContainerAnvil implements CustomAnvil {
@Override
public void update() {
- e();
+ broadcastFullState();
}
@Override
public String getRenameText() {
- return this.v;
+ return this.itemName;
}
@Override
public void setRenameText(String text) {
- this.a(text);
+ this.setItemName(text);
}
@Override
@@ -140,7 +140,7 @@ public class AnvilView extends ContainerAnvil implements CustomAnvil {
this.customTitle = title;
try {
- mc_Container_title.set(this, new ChatMessage(customTitle != null ? customTitle : ""));
+ mc_Container_title.set(this, new TranslatableComponent(customTitle != null ? customTitle : ""));
} catch (Exception ex) {
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
}
@@ -203,12 +203,12 @@ public class AnvilView extends ContainerAnvil implements CustomAnvil {
@Override
public void open() {
// Send the packet
- entity.b.a(new PacketPlayOutOpenWindow(j, Containers.h, new ChatMessage(customTitle != null ? customTitle : "")));
+ entity.connection.send(new ClientboundOpenScreenPacket(super.containerId, MenuType.ANVIL, new TranslatableComponent(customTitle != null ? customTitle : "")));
// Set their active container to this anvil
- entity.bW = this;
+ entity.containerMenu = this;
// Add the slot listener
- entity.a(entity.bW);
+ entity.initMenu(entity.containerMenu);
}
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/entity/NMSPlayerImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/entity/NMSPlayerImpl.java
index ac3699e6..85c1ba9b 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/entity/NMSPlayerImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/entity/NMSPlayerImpl.java
@@ -8,6 +8,6 @@ import org.bukkit.entity.Player;
public class NMSPlayerImpl implements NMSPlayer {
@Override
public void sendPacket(Player p, Object packet) {
- ((CraftPlayer) p).getHandle().b.a((Packet>) packet);
+ ((CraftPlayer) p).getHandle().connection.send((Packet>) packet);
}
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTCompoundImpl.java
index f552cd0f..487691ca 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTCompoundImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTCompoundImpl.java
@@ -2,98 +2,96 @@ package com.songoda.core.nms.v1_18_R1.nbt;
import com.songoda.core.nms.nbt.NBTCompound;
import com.songoda.core.nms.nbt.NBTObject;
-import net.minecraft.nbt.NBTCompressedStreamTools;
-import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.NbtIo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;
public class NBTCompoundImpl implements NBTCompound {
- protected NBTTagCompound compound;
+ protected CompoundTag compound;
- protected NBTCompoundImpl(NBTTagCompound compound) {
+ protected NBTCompoundImpl(CompoundTag compound) {
this.compound = compound;
}
public NBTCompoundImpl() {
- this.compound = new NBTTagCompound();
+ this.compound = new CompoundTag();
}
@Override
public NBTCompound set(String tag, String s) {
- compound.a(tag, s);
+ compound.putString(tag, s);
return this;
}
@Override
public NBTCompound set(String tag, boolean b) {
- compound.a(tag, b);
+ compound.putBoolean(tag, b);
return this;
}
@Override
public NBTCompound set(String tag, int i) {
- compound.a(tag, i);
+ compound.putInt(tag, i);
return this;
}
@Override
public NBTCompound set(String tag, double i) {
- compound.a(tag, i);
+ compound.putDouble(tag, i);
return this;
}
@Override
public NBTCompound set(String tag, long l) {
- compound.a(tag, l);
+ compound.putLong(tag, l);
return this;
}
@Override
public NBTCompound set(String tag, short s) {
- compound.a(tag, s);
+ compound.putShort(tag, s);
return this;
}
@Override
public NBTCompound set(String tag, byte b) {
- compound.a(tag, b);
+ compound.putByte(tag, b);
return this;
}
@Override
public NBTCompound set(String tag, int[] i) {
- compound.a(tag, i);
+ compound.putIntArray(tag, i);
return this;
}
@Override
public NBTCompound set(String tag, byte[] b) {
- compound.a(tag, b);
+ compound.putByteArray(tag, b);
return this;
}
@Override
public NBTCompound set(String tag, UUID u) {
- compound.a(tag, u);
+ compound.putUUID(tag, u);
return this;
}
@Override
public NBTCompound remove(String tag) {
- compound.r(tag);
+ compound.remove(tag);
return this;
}
@Override
public boolean has(String tag) {
- return compound.e(tag);
+ return compound.contains(tag);
}
@Override
@@ -152,19 +150,19 @@ public class NBTCompoundImpl implements NBTCompound {
return getNBTObject(tag).asCompound();
}
- NBTTagCompound newCompound = new NBTTagCompound();
- compound.a(tag, newCompound);
+ CompoundTag newCompound = new CompoundTag();
+ compound.put(tag, newCompound);
return new NBTCompoundImpl(newCompound);
}
@Override
public Set getKeys() {
- return compound.d();
+ return compound.getAllKeys();
}
@Override
public Set getKeys(String tag) {
- return compound.p(tag).d();
+ return compound.getCompound(tag).getAllKeys();
}
@Override
@@ -172,13 +170,13 @@ public class NBTCompoundImpl implements NBTCompound {
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ObjectOutputStream dataOutput = new ObjectOutputStream(outputStream)) {
addExtras();
- NBTTagCompound compound = this.compound.g();
+ CompoundTag compound = this.compound.copy();
for (String exclusion : exclusions) {
- compound.r(exclusion);
+ compound.remove(exclusion);
}
- NBTCompressedStreamTools.a(compound, (OutputStream) dataOutput);
+ NbtIo.writeCompressed(compound, dataOutput);
return outputStream.toByteArray();
} catch (Exception ex) {
@@ -192,7 +190,7 @@ public class NBTCompoundImpl implements NBTCompound {
public void deSerialize(byte[] serialized) {
try (ByteArrayInputStream inputStream = new ByteArrayInputStream(serialized);
ObjectInputStream dataInput = new ObjectInputStream(inputStream)) {
- compound = NBTCompressedStreamTools.a((InputStream) dataInput);
+ compound = NbtIo.readCompressed(dataInput);
} catch (Exception ex) {
ex.printStackTrace();
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTCoreImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTCoreImpl.java
index a1cf48fe..e90e944d 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTCoreImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTCoreImpl.java
@@ -3,7 +3,7 @@ package com.songoda.core.nms.v1_18_R1.nbt;
import com.songoda.core.nms.nbt.NBTCore;
import com.songoda.core.nms.nbt.NBTEntity;
import com.songoda.core.nms.nbt.NBTItem;
-import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.CompoundTag;
import org.bukkit.craftbukkit.v1_18_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
@@ -25,14 +25,14 @@ public class NBTCoreImpl implements NBTCore {
@Override
public NBTEntity of(Entity entity) {
net.minecraft.world.entity.Entity nmsEntity = ((CraftEntity) entity).getHandle();
- NBTTagCompound nbt = new NBTTagCompound();
- nmsEntity.f(nbt);
+ CompoundTag nbt = new CompoundTag();
+ nmsEntity.saveWithoutId(nbt);
return new NBTEntityImpl(nbt, nmsEntity);
}
@Override
public NBTEntity newEntity() {
- return new NBTEntityImpl(new NBTTagCompound(), null);
+ return new NBTEntityImpl(new CompoundTag(), null);
}
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTEntityImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTEntityImpl.java
index 7666db2d..76e037ca 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTEntityImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTEntityImpl.java
@@ -1,12 +1,12 @@
package com.songoda.core.nms.v1_18_R1.nbt;
import com.songoda.core.nms.nbt.NBTEntity;
-import net.minecraft.core.BlockPosition;
-import net.minecraft.core.IRegistry;
-import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.Registry;
+import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.EntityTypes;
-import net.minecraft.world.entity.EnumMobSpawn;
+import net.minecraft.world.entity.EntityType;
+import net.minecraft.world.entity.MobSpawnType;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
@@ -15,7 +15,7 @@ import java.util.Optional;
public class NBTEntityImpl extends NBTCompoundImpl implements NBTEntity {
private Entity nmsEntity;
- public NBTEntityImpl(NBTTagCompound entityNBT, Entity nmsEntity) {
+ public NBTEntityImpl(CompoundTag entityNBT, Entity nmsEntity) {
super(entityNBT);
this.nmsEntity = nmsEntity;
@@ -26,23 +26,23 @@ public class NBTEntityImpl extends NBTCompoundImpl implements NBTEntity {
String entityType = getNBTObject("entity_type").asString();
getKeys().remove("UUID");
- Optional> optionalEntity = EntityTypes.a(entityType);
+ Optional> optionalEntity = EntityType.byString(entityType);
if (optionalEntity.isPresent()) {
assert location.getWorld() != null;
- Entity spawned = optionalEntity.get().a(
+ Entity spawned = optionalEntity.get().spawn(
((CraftWorld) location.getWorld()).getHandle(),
compound,
null,
null,
- new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()),
- EnumMobSpawn.n,
+ new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()),
+ MobSpawnType.COMMAND,
true,
false
);
if (spawned != null) {
- spawned.g(compound);
+ spawned.load(compound);
org.bukkit.entity.Entity entity = spawned.getBukkitEntity();
entity.teleport(location);
nmsEntity = spawned;
@@ -56,12 +56,12 @@ public class NBTEntityImpl extends NBTCompoundImpl implements NBTEntity {
@Override
public org.bukkit.entity.Entity reSpawn(Location location) {
- nmsEntity.ah();
+ nmsEntity.discard();
return spawn(location);
}
@Override
public void addExtras() {
- compound.a("entity_type", IRegistry.Z.b(nmsEntity.ad()).toString());
+ compound.putString("entity_type", Registry.ENTITY_TYPE.getKey(nmsEntity.getType()).toString());
}
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTItemImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTItemImpl.java
index e375b6bb..237f074b 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTItemImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTItemImpl.java
@@ -1,22 +1,22 @@
package com.songoda.core.nms.v1_18_R1.nbt;
import com.songoda.core.nms.nbt.NBTItem;
-import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.world.item.ItemStack;
import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack;
-import org.bukkit.inventory.ItemStack;
public class NBTItemImpl extends NBTCompoundImpl implements NBTItem {
- private final net.minecraft.world.item.ItemStack nmsItem;
+ private final ItemStack nmsItem;
- public NBTItemImpl(net.minecraft.world.item.ItemStack nmsItem) {
- super(nmsItem != null && nmsItem.r() ? nmsItem.s() : new NBTTagCompound());
+ public NBTItemImpl(ItemStack nmsItem) {
+ super(nmsItem != null && nmsItem.hasTag() ? nmsItem.getTag() : new CompoundTag());
this.nmsItem = nmsItem;
}
- public ItemStack finish() {
+ public org.bukkit.inventory.ItemStack finish() {
if (nmsItem == null) {
- return CraftItemStack.asBukkitCopy(net.minecraft.world.item.ItemStack.a(compound));
+ return CraftItemStack.asBukkitCopy(ItemStack.of(compound));
}
return CraftItemStack.asBukkitCopy(nmsItem);
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTObjectImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTObjectImpl.java
index f1038700..69897c8a 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTObjectImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/nbt/NBTObjectImpl.java
@@ -2,71 +2,71 @@ package com.songoda.core.nms.v1_18_R1.nbt;
import com.songoda.core.nms.nbt.NBTCompound;
import com.songoda.core.nms.nbt.NBTObject;
-import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.CompoundTag;
import java.util.Set;
public class NBTObjectImpl implements NBTObject {
- private final NBTTagCompound compound;
+ private final CompoundTag compound;
private final String tag;
- public NBTObjectImpl(NBTTagCompound compound, String tag) {
+ public NBTObjectImpl(CompoundTag compound, String tag) {
this.compound = compound;
this.tag = tag;
}
@Override
public String asString() {
- return compound.l(tag);
+ return compound.getString(tag);
}
@Override
public boolean asBoolean() {
- return compound.q(tag);
+ return compound.getBoolean(tag);
}
@Override
public int asInt() {
- return compound.h(tag);
+ return compound.getInt(tag);
}
@Override
public double asDouble() {
- return compound.k(tag);
+ return compound.getDouble(tag);
}
@Override
public long asLong() {
- return compound.i(tag);
+ return compound.getLong(tag);
}
@Override
public short asShort() {
- return compound.g(tag);
+ return compound.getShort(tag);
}
@Override
public byte asByte() {
- return compound.f(tag);
+ return compound.getByte(tag);
}
@Override
public int[] asIntArray() {
- return compound.n(tag);
+ return compound.getIntArray(tag);
}
@Override
public byte[] asByteArray() {
- return compound.m(tag);
+ return compound.getByteArray(tag);
}
@Override
public NBTCompound asCompound() {
- return new NBTCompoundImpl(compound.p(tag));
+ return new NBTCompoundImpl(compound.getCompound(tag));
}
@Override
public Set getKeys() {
- return compound.d();
+ return compound.getAllKeys();
}
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..c090fccf
--- /dev/null
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_18_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.network.protocol.game.ClientboundInitializeBorderPacket;
+import net.minecraft.world.level.border.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningBlocks(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.lerpSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.lerpSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().connection.send(new ClientboundInitializeBorderPacket(worldBorder));
+ }
+}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SItemStackImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SItemStackImpl.java
index 120a1239..c835137a 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SItemStackImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SItemStackImpl.java
@@ -1,10 +1,10 @@
package com.songoda.core.nms.v1_18_R1.world;
import com.songoda.core.nms.world.SItemStack;
-import net.minecraft.core.particles.ParticleParamItem;
-import net.minecraft.core.particles.Particles;
-import net.minecraft.server.level.EntityPlayer;
-import net.minecraft.world.phys.Vec3D;
+import net.minecraft.core.particles.ItemParticleOption;
+import net.minecraft.core.particles.ParticleTypes;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.world.phys.Vec3;
import org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack;
import org.bukkit.entity.Player;
@@ -19,21 +19,21 @@ public class SItemStackImpl implements SItemStack {
@Override
public void breakItem(Player player, int amount) {
- EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
+ ServerPlayer entityPlayer = ((CraftPlayer) player).getHandle();
for (int i = 0; i < amount; ++i) {
- Vec3D vec3d = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
- vec3d = vec3d.a(-entityPlayer.dn() * 0.017453292F);
- vec3d = vec3d.b(-entityPlayer.dm() * 0.017453292F);
+ Vec3 vec3d = new Vec3(((double) random.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D);
+ vec3d = vec3d.xRot(-entityPlayer.getXRot() * 0.017453292F);
+ vec3d = vec3d.yRot(-entityPlayer.getYRot() * 0.017453292F);
double d0 = (double) (-random.nextFloat()) * 0.6D - 0.3D;
- Vec3D vec3d1 = new Vec3D(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
- vec3d1 = vec3d1.a(-entityPlayer.dn() * 0.017453292F);
- vec3d1 = vec3d1.b(-entityPlayer.dm() * 0.017453292F);
- vec3d1 = vec3d1.b(entityPlayer.dc(), entityPlayer.dg(), entityPlayer.di());
+ Vec3 vec3d1 = new Vec3(((double) random.nextFloat() - 0.5D) * 0.3D, d0, 0.6D);
+ vec3d1 = vec3d1.xRot(-entityPlayer.getXRot() * 0.017453292F);
+ vec3d1 = vec3d1.yRot(-entityPlayer.getYRot() * 0.017453292F);
+ vec3d1 = vec3d1.add(entityPlayer.getX(), entityPlayer.getEyeY(), entityPlayer.getZ());
- entityPlayer.t.a(new ParticleParamItem(Particles.J, CraftItemStack.asNMSCopy(item)), vec3d1.b, vec3d1.c, vec3d1.d, vec3d.b, vec3d.c + 0.05D, vec3d.d);
+ entityPlayer.level.addParticle(new ItemParticleOption(ParticleTypes.ITEM, CraftItemStack.asNMSCopy(item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
}
}
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SSpawnerImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SSpawnerImpl.java
index 74751f56..68199a52 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SSpawnerImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SSpawnerImpl.java
@@ -4,15 +4,14 @@ 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.core.BlockPosition;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.server.level.WorldServer;
-import net.minecraft.world.DifficultyDamageScaler;
+import net.minecraft.core.BlockPos;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.EntityInsentient;
-import net.minecraft.world.entity.EntityTypes;
-import net.minecraft.world.entity.EnumMobSpawn;
-import net.minecraft.world.level.MobSpawnerData;
+import net.minecraft.world.entity.Mob;
+import net.minecraft.world.entity.MobSpawnType;
+import net.minecraft.world.level.SpawnData;
import org.bukkit.Location;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
@@ -37,35 +36,35 @@ public class SSpawnerImpl implements SSpawner {
}
@Override
- public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned,
- Set canSpawnOn) {
- MobSpawnerData data = new MobSpawnerData();
- NBTTagCompound compound = data.a();
+ public LivingEntity spawnEntity(EntityType type, String particleType, SpawnedEntity spawned, Set canSpawnOn) {
+ SpawnData data = new SpawnData();
+ CompoundTag compound = data.getEntityToSpawn();
- String name = type.name().toLowerCase().replace("snowman", "snow_golem")
+ String name = type.name().toLowerCase()
+ .replace("snowman", "snow_golem")
.replace("mushroom_cow", "mooshroom");
- compound.a("id", "minecraft:" + name);
+ compound.putString("id", "minecraft:" + name);
short spawnRange = 4;
for (int i = 0; i < 50; i++) {
assert spawnerLocation.getWorld() != null;
- WorldServer world = ((CraftWorld) spawnerLocation.getWorld()).getHandle();
+ ServerLevel world = ((CraftWorld) spawnerLocation.getWorld()).getHandle();
- Random random = world.r_();
+ 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);
+ Optional optionalEntity = net.minecraft.world.entity.EntityType.create(compound, world);
if (optionalEntity.isEmpty()) continue;
Entity entity = optionalEntity.get();
- entity.e(x, y, z);
+ entity.setPos(x, y, z);
- BlockPosition position = entity.cW();
- DifficultyDamageScaler damageScaler = world.d_(position);
+ BlockPos position = entity.blockPosition();
+ DifficultyInstance damageScaler = world.getCurrentDifficultyAt(position);
- if (!(entity instanceof EntityInsentient entityInsentient)) {
+ if (!(entity instanceof Mob entityInsentient)) {
continue;
}
@@ -75,7 +74,7 @@ public class SSpawnerImpl implements SSpawner {
continue;
}
- entityInsentient.a(world, damageScaler, EnumMobSpawn.c, null, null);
+ entityInsentient.finalizeSpawn(world, damageScaler, MobSpawnType.SPAWNER, null, null);
LivingEntity craftEntity = (LivingEntity) entity.getBukkitEntity();
@@ -103,9 +102,8 @@ public class SSpawnerImpl implements SSpawner {
return null;
}
- private boolean canSpawn(WorldServer world, EntityInsentient entityInsentient, Location location,
- Set canSpawnOn) {
- if (!world.a(entityInsentient, entityInsentient.cw())) {
+ private boolean canSpawn(ServerLevel world, Mob entityInsentient, Location location, Set canSpawnOn) {
+ if (!world.noCollision(entityInsentient, entityInsentient.getBoundingBox())) {
return false;
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SWorldImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SWorldImpl.java
index 5551f813..c23b094b 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/SWorldImpl.java
@@ -1,10 +1,15 @@
package com.songoda.core.nms.v1_18_R1.world;
import com.songoda.core.nms.world.SWorld;
-import net.minecraft.server.level.WorldServer;
+import net.minecraft.core.BlockPos;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.entity.LevelEntityGetter;
+import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_18_R1.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
@@ -21,10 +26,10 @@ public class SWorldImpl implements SWorld {
public List getLivingEntities() {
List result = new ArrayList<>();
- WorldServer worldServer = ((CraftWorld) world).getHandle();
- LevelEntityGetter entities = worldServer.P.d();
+ ServerLevel worldServer = ((CraftWorld) this.world).getHandle();
+ LevelEntityGetter entities = worldServer.entityManager.getEntityGetter();
- entities.a().forEach((mcEnt) -> {
+ entities.getAll().forEach((mcEnt) -> {
org.bukkit.entity.Entity bukkitEntity = mcEnt.getBukkitEntity();
if (bukkitEntity instanceof LivingEntity && bukkitEntity.isValid()) {
@@ -34,4 +39,13 @@ public class SWorldImpl implements SWorld {
return result;
}
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ ServerLevel serverLevel = ((CraftWorld) this.world).getHandle();
+ LevelChunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+ BlockState blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setBlockState(new BlockPos(x & 0xF, y, z & 0xF), blockState, true);
+ }
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/WorldCoreImpl.java
index cefdd224..8ab61f78 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/WorldCoreImpl.java
@@ -7,15 +7,15 @@ import com.songoda.core.nms.world.SItemStack;
import com.songoda.core.nms.world.SSpawner;
import com.songoda.core.nms.world.SWorld;
import com.songoda.core.nms.world.WorldCore;
-import net.minecraft.core.BlockPosition;
-import net.minecraft.server.level.WorldServer;
-import net.minecraft.util.profiling.GameProfilerFiller;
-import net.minecraft.world.level.ChunkCoordIntPair;
-import net.minecraft.world.level.MobSpawnerAbstract;
-import net.minecraft.world.level.block.state.IBlockData;
-import net.minecraft.world.level.chunk.Chunk;
-import net.minecraft.world.level.chunk.ChunkSection;
-import net.minecraft.world.level.material.Fluid;
+import net.minecraft.core.BlockPos;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.util.profiling.ProfilerFiller;
+import net.minecraft.world.level.BaseSpawner;
+import net.minecraft.world.level.ChunkPos;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.chunk.LevelChunk;
+import net.minecraft.world.level.chunk.LevelChunkSection;
+import net.minecraft.world.level.material.FluidState;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Block;
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_18_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_18_R1.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -49,59 +50,58 @@ public class WorldCoreImpl implements WorldCore {
public BBaseSpawner getBaseSpawner(CreatureSpawner spawner) throws NoSuchFieldException, IllegalAccessException {
Object cTileEntity = ReflectionUtils.getFieldValue(spawner, "tileEntity");
- return new BBaseSpawnerImpl(spawner, (MobSpawnerAbstract) ReflectionUtils.getFieldValue(cTileEntity, "a"));
+ return new BBaseSpawnerImpl(spawner, (BaseSpawner) ReflectionUtils.getFieldValue(cTileEntity, "a"));
}
/**
- * Method is based on {@link WorldServer#a(Chunk, int)}.
+ * Method is based on {@link ServerLevel#tickChunk(LevelChunk, int)}.
*/
@Override
public void randomTickChunk(org.bukkit.Chunk bukkitChunk, int tickAmount) {
- Chunk chunk = ((CraftChunk) bukkitChunk).getHandle();
- WorldServer world = chunk.q;
+ LevelChunk chunk = ((CraftChunk) bukkitChunk).getHandle();
+ ServerLevel world = chunk.q;
- ChunkCoordIntPair chunkcoordintpair = chunk.f();
- int j = chunkcoordintpair.d();
- int k = chunkcoordintpair.e();
+ ChunkPos chunkcoordintpair = chunk.getPos();
+ int j = chunkcoordintpair.getMinBlockX();
+ int k = chunkcoordintpair.getMinBlockZ();
- GameProfilerFiller gameprofilerfiller = world.ab();
- gameprofilerfiller.b("tickBlocks");
+ ProfilerFiller gameprofilerfiller = world.getProfiler();
+ gameprofilerfiller.popPush("tickBlocks");
if (tickAmount > 0) {
- ChunkSection[] achunksection = chunk.d();
+ LevelChunkSection[] achunksection = chunk.getSections();
int l = achunksection.length;
- for (ChunkSection chunksection : achunksection) {
- if (chunksection.d()) {
- int j1 = chunksection.g();
+ for (LevelChunkSection chunksection : achunksection) {
+ if (chunksection.isRandomlyTicking()) {
+ int j1 = chunksection.bottomBlockY();
for (int k1 = 0; k1 < tickAmount; ++k1) {
- BlockPosition blockposition2 = world.a(j, j1, k, 15);
- gameprofilerfiller.a("randomTick");
- IBlockData iblockdata1 = chunksection.a(blockposition2.u() - j, blockposition2.v() - j1, blockposition2.w() - k);
- if (iblockdata1.o()) {
- iblockdata1.b(world, blockposition2, world.w);
+ BlockPos blockposition2 = world.getBlockRandomPos(j, j1, k, 15);
+ gameprofilerfiller.push("randomTick");
+ BlockState iblockdata1 = chunksection.getBlockState(blockposition2.getX() - j, blockposition2.getY() - j1, blockposition2.getZ() - k);
+ if (iblockdata1.isRandomlyTicking()) {
+ iblockdata1.randomTick(world, blockposition2, world.random);
}
- Fluid fluid = iblockdata1.n();
- if (fluid.f()) {
- fluid.b(world, blockposition2, world.w);
+ FluidState fluid = iblockdata1.getFluidState();
+ if (fluid.isRandomlyTicking()) {
+ fluid.randomTick(world, blockposition2, world.random);
}
- gameprofilerfiller.c();
+ gameprofilerfiller.pop();
}
}
}
}
- gameprofilerfiller.c();
+ gameprofilerfiller.pop();
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ ServerLevel serverLevel = craftBlock.getCraftWorld().getHandle();
- WorldServer nmsWorld = craftChunk.getHandle().q;
- nmsWorld.c(craftBlock.getPosition(), craftBlock.getNMS().b());
+ serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/spawner/BBaseSpawnerImpl.java b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/spawner/BBaseSpawnerImpl.java
index b4128844..626e5368 100644
--- a/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/spawner/BBaseSpawnerImpl.java
+++ b/NMS/NMS-v1_18_R1/src/main/java/com/songoda/core/nms/v1_18_R1/world/spawner/BBaseSpawnerImpl.java
@@ -1,21 +1,21 @@
package com.songoda.core.nms.v1_18_R1.world.spawner;
import com.songoda.core.nms.world.BBaseSpawner;
-import net.minecraft.core.BlockPosition;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.nbt.NBTTagList;
-import net.minecraft.server.level.WorldServer;
-import net.minecraft.world.EnumDifficulty;
+import net.minecraft.core.BlockPos;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.ListTag;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.world.Difficulty;
import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.EntityInsentient;
-import net.minecraft.world.entity.EntityPositionTypes;
-import net.minecraft.world.entity.EntityTypes;
-import net.minecraft.world.entity.EnumMobSpawn;
-import net.minecraft.world.level.EnumSkyBlock;
-import net.minecraft.world.level.MobSpawnerAbstract;
-import net.minecraft.world.level.MobSpawnerData;
-import net.minecraft.world.level.World;
-import net.minecraft.world.phys.AxisAlignedBB;
+import net.minecraft.world.entity.EntityType;
+import net.minecraft.world.entity.Mob;
+import net.minecraft.world.entity.MobSpawnType;
+import net.minecraft.world.entity.SpawnPlacements;
+import net.minecraft.world.level.BaseSpawner;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.LightLayer;
+import net.minecraft.world.level.SpawnData;
+import net.minecraft.world.phys.AABB;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_18_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_18_R1.block.CraftCreatureSpawner;
@@ -27,40 +27,45 @@ import java.util.Random;
public class BBaseSpawnerImpl implements BBaseSpawner {
private final CreatureSpawner bukkitSpawner;
- private final MobSpawnerAbstract spawner;
+ private final BaseSpawner spawner;
- private static final Random spawnerFieldO = new Random(); // Field o in MobSpawnerAbstract is private - We use one random for *all* our spawners (should be fine, right?)
+ private static final Random spawnerFieldO = new Random(); // Field random in BaseSpawner is private - We use one random for *all* our spawners (should be fine, right?)
- public BBaseSpawnerImpl(CreatureSpawner bukkitSpawner, MobSpawnerAbstract spawner) {
+ public BBaseSpawnerImpl(CreatureSpawner bukkitSpawner, BaseSpawner spawner) {
this.bukkitSpawner = bukkitSpawner;
this.spawner = spawner;
}
/**
- * This method is based on {@link MobSpawnerAbstract#b(World, BlockPosition)}.
+ * This method is based on {@link BaseSpawner#isNearPlayer(Level, BlockPos)}.
*/
@SuppressWarnings("JavadocReference")
@Override
public boolean isNearPlayer() {
- BlockPosition bPos = getBlockPosition();
+ BlockPos bPos = getBlockPosition();
- return getWorld().a((double) bPos.u() + 0.5D, (double) bPos.v() + 0.5D, (double) bPos.w() + 0.5D, this.spawner.m);
+ return getWorld().hasNearbyAlivePlayer(
+ (double) bPos.getX() + 0.5D,
+ (double) bPos.getY() + 0.5D,
+ (double) bPos.getZ() + 0.5D,
+ this.spawner.requiredPlayerRange
+ );
}
/**
- * This method is based on {@link MobSpawnerAbstract#a(WorldServer, BlockPosition)}.
+ * This method is based on {@link BaseSpawner#serverTick(ServerLevel, BlockPos)}.
*/
@Override
public void tick() {
- WorldServer world = getWorld();
- BlockPosition bPos = getBlockPosition();
+ ServerLevel world = getWorld();
+ BlockPos bPos = getBlockPosition();
- if (this.spawner.c == -1) {
+ if (this.spawner.spawnDelay == -1) {
this.delay(world, bPos);
}
- if (this.spawner.c > 0) {
- --this.spawner.c;
+ if (this.spawner.spawnDelay > 0) {
+ --this.spawner.spawnDelay;
return;
}
@@ -68,44 +73,45 @@ public class BBaseSpawnerImpl implements BBaseSpawner {
int i = 0;
while (true) {
- if (i >= this.spawner.j) {
+ if (i >= this.spawner.spawnCount) {
if (flag) {
this.delay(world, bPos);
}
break;
}
- NBTTagCompound nbttagcompound = this.spawner.e.a();
- Optional> optional = EntityTypes.a(nbttagcompound);
+ CompoundTag nbttagcompound = this.spawner.nextSpawnData.getEntityToSpawn();
+ Optional> optional = EntityType.by(nbttagcompound);
if (optional.isEmpty()) {
this.delay(world, bPos);
return;
}
- NBTTagList nbttaglist = nbttagcompound.c("Pos", 6);
+ ListTag nbttaglist = nbttagcompound.getList("Pos", 6);
int j = nbttaglist.size();
- double d0 = j >= 1 ? nbttaglist.h(0) : (double) bPos.u() + (world.w.nextDouble() - world.w.nextDouble()) * (double) this.spawner.n + 0.5D;
- double d1 = j >= 2 ? nbttaglist.h(1) : (double) (bPos.v() + world.w.nextInt(3) - 1);
- double d2 = j >= 3 ? nbttaglist.h(2) : (double) bPos.w() + (world.w.nextDouble() - world.w.nextDouble()) * (double) this.spawner.n + 0.5D;
- if (world.b(optional.get().a(d0, d1, d2))) {
+ double d0 = j >= 1 ? nbttaglist.getDouble(0) : (double) bPos.getX() + (world.random.nextDouble() - world.random.nextDouble()) * (double) this.spawner.spawnRange + 0.5D;
+ double d1 = j >= 2 ? nbttaglist.getDouble(1) : (double) (bPos.getY() + world.random.nextInt(3) - 1);
+ double d2 = j >= 3 ? nbttaglist.getDouble(2) : (double) bPos.getZ() + (world.random.nextDouble() - world.random.nextDouble()) * (double) this.spawner.spawnRange + 0.5D;
+ if (world.noCollision(optional.get().getAABB(d0, d1, d2))) {
label128:
{
- BlockPosition blockposition1 = new BlockPosition(d0, d1, d2);
- if (this.spawner.e.b().isPresent()) {
- if (!optional.get().f().d() && world.af() == EnumDifficulty.a) {
+ BlockPos blockposition1 = new BlockPos(d0, d1, d2);
+ if (this.spawner.nextSpawnData.getCustomSpawnRules().isPresent()) {
+ if (!optional.get().getCategory().isFriendly() && world.getDifficulty() == Difficulty.PEACEFUL) {
break label128;
}
- MobSpawnerData.a mobspawnerdata_a = this.spawner.e.b().get();
- if (!mobspawnerdata_a.a().a(world.a(EnumSkyBlock.b, blockposition1)) || !mobspawnerdata_a.b().a(world.a(EnumSkyBlock.a, blockposition1))) {
+ SpawnData.CustomSpawnRules mobspawnerdata_a = this.spawner.nextSpawnData.getCustomSpawnRules().get();
+ if (!mobspawnerdata_a.blockLightLimit().isValueInRange(world.getBrightness(LightLayer.BLOCK, blockposition1)) ||
+ !mobspawnerdata_a.skyLightLimit().isValueInRange(world.getBrightness(LightLayer.SKY, blockposition1))) {
break label128;
}
- } else if (!EntityPositionTypes.a((EntityTypes>) optional.get(), world, EnumMobSpawn.c, blockposition1, world.r_())) {
+ } else if (!SpawnPlacements.checkSpawnRules(optional.get(), world, MobSpawnType.SPAWNER, blockposition1, world.getRandom())) {
break label128;
}
- Entity entity = EntityTypes.a(nbttagcompound, world, (entity1) -> {
- entity1.b(d0, d1, d2, entity1.dm(), entity1.dn());
+ Entity entity = EntityType.loadEntityRecursive(nbttagcompound, world, (entity1) -> {
+ entity1.moveTo(d0, d1, d2, entity1.getYRot(), entity1.getXRot());
return entity1;
});
if (entity == null) {
@@ -113,35 +119,35 @@ public class BBaseSpawnerImpl implements BBaseSpawner {
return;
}
- int k = world.a(entity.getClass(), (new AxisAlignedBB(bPos.u(), bPos.v(), bPos.w(), bPos.u() + 1, bPos.v() + 1, bPos.w() + 1)).g(this.spawner.n)).size();
- if (k >= this.spawner.l) {
+ int k = world.getEntitiesOfClass(entity.getClass(), (new AABB(bPos.getX(), bPos.getY(), bPos.getZ(), bPos.getX() + 1, bPos.getY() + 1, bPos.getZ() + 1)).inflate(this.spawner.spawnRange)).size();
+ if (k >= this.spawner.maxNearbyEntities) {
this.delay(world, bPos);
return;
}
- entity.b(entity.dc(), entity.de(), entity.di(), world.w.nextFloat() * 360.0F, 0.0F);
- if (entity instanceof EntityInsentient entityinsentient) {
- if (this.spawner.e.b().isEmpty() && !entityinsentient.a(world, EnumMobSpawn.c) || !entityinsentient.a(world)) {
+ entity.moveTo(entity.getX(), entity.getY(), entity.getZ(), world.random.nextFloat() * 360.0F, 0.0F);
+ if (entity instanceof Mob entityInsentient) {
+ if (this.spawner.nextSpawnData.getCustomSpawnRules().isEmpty() && !entityInsentient.checkSpawnRules(world, MobSpawnType.SPAWNER) || !entityInsentient.checkSpawnObstruction(world)) {
break label128;
}
- if (this.spawner.e.a().e() == 1 && this.spawner.e.a().b("id", 8)) {
- ((EntityInsentient) entity).a(world, world.d_(entity.cW()), EnumMobSpawn.c, null, null);
+ if (this.spawner.nextSpawnData.getEntityToSpawn().size() == 1 && this.spawner.nextSpawnData.getEntityToSpawn().contains("id", 8)) {
+ ((Mob) entity).finalizeSpawn(world, world.getCurrentDifficultyAt(entity.blockPosition()), MobSpawnType.SPAWNER, null, null);
}
- if (entityinsentient.t.spigotConfig.nerfSpawnerMobs) {
- entityinsentient.aware = false;
+ if (entityInsentient.level.spigotConfig.nerfSpawnerMobs) {
+ entityInsentient.aware = false;
}
}
if (CraftEventFactory.callSpawnerSpawnEvent(entity, bPos).isCancelled()) {
- Entity vehicle = entity.cN();
+ Entity vehicle = entity.getVehicle();
if (vehicle != null) {
- vehicle.ah();
+ vehicle.discard();
}
- for (Entity passenger : entity.cJ()) {
- passenger.ah();
+ for (Entity passenger : entity.getIndirectPassengers()) {
+ passenger.discard();
}
} else {
if (!world.tryAddFreshEntityWithPassengers(entity, CreatureSpawnEvent.SpawnReason.SPAWNER)) {
@@ -149,9 +155,9 @@ public class BBaseSpawnerImpl implements BBaseSpawner {
return;
}
- world.c(2004, bPos, 0);
- if (entity instanceof EntityInsentient) {
- ((EntityInsentient) entity).L();
+ world.levelEvent(2004, bPos, 0);
+ if (entity instanceof Mob) {
+ ((Mob) entity).spawnAnim();
}
flag = true;
@@ -164,27 +170,25 @@ public class BBaseSpawnerImpl implements BBaseSpawner {
}
/**
- * This method is based on {@link MobSpawnerAbstract#c(World, BlockPosition)}.
+ * This method is based on {@link BaseSpawner#delay(Level, BlockPos)}.
*/
@SuppressWarnings("JavadocReference")
- private void delay(WorldServer world, BlockPosition bPos) {
- if (this.spawner.i <= this.spawner.h) {
- this.spawner.c = this.spawner.h;
+ private void delay(ServerLevel world, BlockPos bPos) {
+ if (this.spawner.maxSpawnDelay <= this.spawner.minSpawnDelay) {
+ this.spawner.spawnDelay = this.spawner.minSpawnDelay;
} else {
- this.spawner.c = this.spawner.h + spawnerFieldO.nextInt(this.spawner.i - this.spawner.h);
+ this.spawner.spawnDelay = this.spawner.minSpawnDelay + spawnerFieldO.nextInt(this.spawner.maxSpawnDelay - this.spawner.minSpawnDelay);
}
- this.spawner.d.b(spawnerFieldO).ifPresent((weightedentry_b) -> {
- this.spawner.a(world, bPos, weightedentry_b.b());
- });
- this.spawner.a(world, bPos, 1);
+ this.spawner.spawnPotentials.getRandom(spawnerFieldO).ifPresent((weightedentry_b) -> this.spawner.setNextSpawnData(world, bPos, weightedentry_b.getData()));
+ this.spawner.broadcastEvent(world, bPos, 1);
}
- private WorldServer getWorld() {
+ private ServerLevel getWorld() {
return ((CraftWorld) this.bukkitSpawner.getWorld()).getHandle();
}
- private BlockPosition getBlockPosition() {
+ private BlockPos getBlockPosition() {
return ((CraftCreatureSpawner) this.bukkitSpawner).getPosition();
}
}
diff --git a/NMS/NMS-v1_18_R2/pom.xml b/NMS/NMS-v1_18_R2/pom.xml
index fec27385..20d4d5fa 100644
--- a/NMS/NMS-v1_18_R2/pom.xml
+++ b/NMS/NMS-v1_18_R2/pom.xml
@@ -4,19 +4,23 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
+
+ com.songoda
+ SongodaCore-Modules
+ 2.6.21
+ ../../pom.xml
+
+ SongodaCore-NMS-v1_18_R2
+
+
+ 17
+ 17
+
+ 1.18.2-R0.1-SNAPSHOT
+
+
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- ${java.version}
-
- ${java.release}
-
-
-
net.md-5
specialsource-maven-plugin
@@ -57,49 +61,28 @@
-
- com.songoda
- SongodaCore-Modules
- 2.6.21
- ../../pom.xml
-
-
-
- 17
- 17
-
- 1.18.2-R0.1-SNAPSHOT
-
-
- SongodaCore-NMS-v1_18_R2
- jar
-
-
- org.spigotmc
- spigot-api
- ${nms.ver}
- provided
-
-
+
org.spigotmc
spigot
${nms.ver}
- provided
remapped-mojang
+ provided
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/NmsImplementationsImpl.java b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/NmsImplementationsImpl.java
new file mode 100644
index 00000000..7c8748ff
--- /dev/null
+++ b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_18_R2;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_18_R2.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_18_R2.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_18_R2.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_18_R2.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_18_R2.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..8f3c81fb
--- /dev/null
+++ b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_18_R2.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.network.protocol.game.ClientboundInitializeBorderPacket;
+import net.minecraft.world.level.border.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
+import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningBlocks(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.lerpSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.lerpSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().connection.send(new ClientboundInitializeBorderPacket(worldBorder));
+ }
+}
diff --git a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SSpawnerImpl.java b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SSpawnerImpl.java
index 5af38e9c..495dbfa6 100644
--- a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SSpawnerImpl.java
+++ b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SSpawnerImpl.java
@@ -40,7 +40,8 @@ public class SSpawnerImpl implements SSpawner {
SpawnData data = new SpawnData();
CompoundTag compound = data.getEntityToSpawn();
- String name = type.name().toLowerCase().replace("snowman", "snow_golem")
+ String name = type.name().toLowerCase()
+ .replace("snowman", "snow_golem")
.replace("mushroom_cow", "mooshroom");
compound.putString("id", "minecraft:" + name);
diff --git a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SWorldImpl.java b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SWorldImpl.java
index a3ac885c..5cf6f6f9 100644
--- a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SWorldImpl.java
+++ b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/SWorldImpl.java
@@ -1,11 +1,16 @@
package com.songoda.core.nms.v1_18_R2.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.entity.LevelEntityGetter;
+import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
+import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
@@ -22,8 +27,8 @@ public class SWorldImpl implements SWorld {
public List getLivingEntities() {
List result = new ArrayList<>();
- ServerLevel worldServer = ((CraftWorld) world).getHandle();
- LevelEntityGetter entities = worldServer.entityManager.getEntityGetter();
+ ServerLevel serverLevel = ((CraftWorld) this.world).getHandle();
+ LevelEntityGetter entities = serverLevel.entityManager.getEntityGetter();
entities.getAll().forEach((mcEnt) -> {
org.bukkit.entity.Entity bukkitEntity = mcEnt.getBukkitEntity();
@@ -35,4 +40,13 @@ public class SWorldImpl implements SWorld {
return result;
}
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ ServerLevel serverLevel = ((CraftWorld) this.world).getHandle();
+ LevelChunk levelChunk = serverLevel.getChunk(x >> 4, z >> 4);
+ BlockState blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setBlockState(new BlockPos(x & 0xF, y, z & 0xF), blockState, true);
+ }
}
diff --git a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/WorldCoreImpl.java
index bbfc8474..882f7e4f 100644
--- a/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_18_R2/src/main/java/com/songoda/core/nms/v1_18_R2/world/WorldCoreImpl.java
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_18_R2.CraftChunk;
import org.bukkit.craftbukkit.v1_18_R2.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -96,11 +97,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ ServerLevel serverLevel = craftBlock.getCraftWorld().getHandle();
- ServerLevel nmsWorld = craftChunk.getHandle().q;
- nmsWorld.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_19_R1v2/pom.xml b/NMS/NMS-v1_19_0/pom.xml
similarity index 81%
rename from NMS/NMS-v1_19_R1v2/pom.xml
rename to NMS/NMS-v1_19_0/pom.xml
index 8dd02dd0..d53e05be 100644
--- a/NMS/NMS-v1_19_R1v2/pom.xml
+++ b/NMS/NMS-v1_19_0/pom.xml
@@ -4,19 +4,23 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
+
+ com.songoda
+ SongodaCore-Modules
+ 2.6.21
+ ../../pom.xml
+
+ SongodaCore-NMS-v1_19_0
+
+
+ 17
+ 17
+
+ 1.19-R0.1-SNAPSHOT
+
+
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- ${java.version}
-
- ${java.release}
-
-
-
net.md-5
specialsource-maven-plugin
@@ -57,49 +61,28 @@
-
- com.songoda
- SongodaCore-Modules
- 2.6.21
- ../../pom.xml
-
-
-
- 17
- 17
-
- 1.19.2-R0.1-SNAPSHOT
-
-
- SongodaCore-NMS-v1_19_R1v2
- jar
-
-
- org.spigotmc
- spigot-api
- ${nms.ver}
- provided
-
-
+
org.spigotmc
spigot
${nms.ver}
- provided
remapped-mojang
+ provided
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/NmsImplementationsImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/NmsImplementationsImpl.java
new file mode 100644
index 00000000..5d097960
--- /dev/null
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_19_0;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_19_0.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_19_0.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_19_0.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_19_0.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_19_0.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/AnvilCore.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/anvil/AnvilCore.java
similarity index 93%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/AnvilCore.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/anvil/AnvilCore.java
index 12c2d06e..abc9a290 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/AnvilCore.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/anvil/AnvilCore.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.anvil;
+package com.songoda.core.nms.v1_19_0.anvil;
import com.songoda.core.nms.anvil.CustomAnvil;
import net.minecraft.server.level.ServerPlayer;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/AnvilInventoryCustom.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/anvil/AnvilInventoryCustom.java
similarity index 93%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/AnvilInventoryCustom.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/anvil/AnvilInventoryCustom.java
index 0a207509..066ea009 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/AnvilInventoryCustom.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/anvil/AnvilInventoryCustom.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.anvil;
+package com.songoda.core.nms.v1_19_0.anvil;
import net.minecraft.world.Container;
import net.minecraft.world.inventory.AnvilMenu;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/AnvilView.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/anvil/AnvilView.java
similarity index 99%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/AnvilView.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/anvil/AnvilView.java
index d11c8a94..3226d9ed 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/AnvilView.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/anvil/AnvilView.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.anvil;
+package com.songoda.core.nms.v1_19_0.anvil;
import com.songoda.core.nms.anvil.CustomAnvil;
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/entity/NMSPlayerImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/entity/NMSPlayerImpl.java
similarity index 88%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/entity/NMSPlayerImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/entity/NMSPlayerImpl.java
index ce1d0de9..60d8e99a 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/entity/NMSPlayerImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/entity/NMSPlayerImpl.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.entity;
+package com.songoda.core.nms.v1_19_0.entity;
import com.songoda.core.nms.entity.NMSPlayer;
import net.minecraft.network.protocol.Packet;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTCompoundImpl.java
similarity index 99%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTCompoundImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTCompoundImpl.java
index 28255a67..d4078a34 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTCompoundImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTCompoundImpl.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.nbt;
+package com.songoda.core.nms.v1_19_0.nbt;
import com.songoda.core.nms.nbt.NBTCompound;
import com.songoda.core.nms.nbt.NBTObject;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTCoreImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTCoreImpl.java
similarity index 95%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTCoreImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTCoreImpl.java
index e2edefe2..8e49fd68 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTCoreImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTCoreImpl.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.nbt;
+package com.songoda.core.nms.v1_19_0.nbt;
import com.songoda.core.nms.nbt.NBTCore;
import com.songoda.core.nms.nbt.NBTEntity;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTEntityImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTEntityImpl.java
similarity index 97%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTEntityImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTEntityImpl.java
index cb9a39e4..bb926e4e 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTEntityImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTEntityImpl.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.nbt;
+package com.songoda.core.nms.v1_19_0.nbt;
import com.songoda.core.nms.nbt.NBTEntity;
import net.minecraft.core.BlockPos;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTItemImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTItemImpl.java
similarity index 93%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTItemImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTItemImpl.java
index 053dafe9..acaf84ec 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTItemImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTItemImpl.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.nbt;
+package com.songoda.core.nms.v1_19_0.nbt;
import com.songoda.core.nms.nbt.NBTItem;
import net.minecraft.nbt.CompoundTag;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTObjectImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTObjectImpl.java
similarity index 96%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTObjectImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTObjectImpl.java
index b2a3856a..84b131b2 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/nbt/NBTObjectImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/nbt/NBTObjectImpl.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.nbt;
+package com.songoda.core.nms.v1_19_0.nbt;
import com.songoda.core.nms.nbt.NBTCompound;
import com.songoda.core.nms.nbt.NBTObject;
diff --git a/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..efbdb0c1
--- /dev/null
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_19_0.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.network.protocol.game.ClientboundInitializeBorderPacket;
+import net.minecraft.world.level.border.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningBlocks(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.lerpSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.lerpSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().connection.send(new ClientboundInitializeBorderPacket(worldBorder));
+ }
+}
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/SItemStackImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/SItemStackImpl.java
similarity index 97%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/SItemStackImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/SItemStackImpl.java
index 18422c81..443a4f54 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/SItemStackImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/SItemStackImpl.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.world;
+package com.songoda.core.nms.v1_19_0.world;
import com.songoda.core.nms.world.SItemStack;
import net.minecraft.core.particles.ItemParticleOption;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/SSpawnerImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/SSpawnerImpl.java
similarity index 99%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/SSpawnerImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/SSpawnerImpl.java
index ac0c837b..420bad03 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/SSpawnerImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/SSpawnerImpl.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.world;
+package com.songoda.core.nms.v1_19_0.world;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.compatibility.CompatibleParticleHandler;
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/SWorldImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/SWorldImpl.java
similarity index 52%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/SWorldImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/SWorldImpl.java
index 7ca2e85c..a9308877 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/SWorldImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/SWorldImpl.java
@@ -1,11 +1,16 @@
-package com.songoda.core.nms.v1_19_R1v2.world;
+package com.songoda.core.nms.v1_19_0.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.entity.LevelEntityGetter;
+import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
@@ -22,8 +27,8 @@ public class SWorldImpl implements SWorld {
public List getLivingEntities() {
List result = new ArrayList<>();
- ServerLevel worldServer = ((CraftWorld) world).getHandle();
- LevelEntityGetter entities = worldServer.getEntities();
+ ServerLevel worldServer = ((CraftWorld) this.world).getHandle();
+ LevelEntityGetter entities = worldServer.entityManager.getEntityGetter();
entities.getAll().forEach((mcEnt) -> {
org.bukkit.entity.Entity bukkitEntity = mcEnt.getBukkitEntity();
@@ -35,4 +40,13 @@ public class SWorldImpl implements SWorld {
return result;
}
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ ServerLevel serverLevel = ((CraftWorld) this.world).getHandle();
+ LevelChunk levelChunk = serverLevel.getChunk(x >> 4, z >> 4);
+ BlockState blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setBlockState(new BlockPos(x & 0xF, y, z & 0xF), blockState, true);
+ }
}
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/WorldCoreImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/WorldCoreImpl.java
similarity index 88%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/WorldCoreImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/WorldCoreImpl.java
index b0015e23..5198c3e5 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/WorldCoreImpl.java
@@ -1,7 +1,7 @@
-package com.songoda.core.nms.v1_19_R1v2.world;
+package com.songoda.core.nms.v1_19_0.world;
import com.songoda.core.nms.ReflectionUtils;
-import com.songoda.core.nms.v1_19_R1v2.world.spawner.BBaseSpawnerImpl;
+import com.songoda.core.nms.v1_19_0.world.spawner.BBaseSpawnerImpl;
import com.songoda.core.nms.world.BBaseSpawner;
import com.songoda.core.nms.world.SItemStack;
import com.songoda.core.nms.world.SSpawner;
@@ -21,8 +21,12 @@ import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_19_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -94,11 +98,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ ServerLevel serverLevel = craftBlock.getCraftWorld().getHandle();
- ServerLevel nmsWorld = craftChunk.getHandle().q;
- nmsWorld.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/spawner/BBaseSpawnerImpl.java b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/spawner/BBaseSpawnerImpl.java
similarity index 99%
rename from NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/spawner/BBaseSpawnerImpl.java
rename to NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/spawner/BBaseSpawnerImpl.java
index 1bd895bf..c8284616 100644
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/world/spawner/BBaseSpawnerImpl.java
+++ b/NMS/NMS-v1_19_0/src/main/java/com/songoda/core/nms/v1_19_0/world/spawner/BBaseSpawnerImpl.java
@@ -1,4 +1,4 @@
-package com.songoda.core.nms.v1_19_R1v2.world.spawner;
+package com.songoda.core.nms.v1_19_0.world.spawner;
import com.songoda.core.nms.world.BBaseSpawner;
import net.minecraft.core.BlockPos;
diff --git a/NMS/NMS-v1_19_R1/pom.xml b/NMS/NMS-v1_19_R1/pom.xml
index 703f3c39..d7cd7ede 100644
--- a/NMS/NMS-v1_19_R1/pom.xml
+++ b/NMS/NMS-v1_19_R1/pom.xml
@@ -4,19 +4,23 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
+
+ com.songoda
+ SongodaCore-Modules
+ 2.6.21
+ ../../pom.xml
+
+ SongodaCore-NMS-v1_19_R1
+
+
+ 17
+ 17
+
+ 1.19.2-R0.1-SNAPSHOT
+
+
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- ${java.version}
-
- ${java.release}
-
-
-
net.md-5
specialsource-maven-plugin
@@ -57,49 +61,36 @@
-
- com.songoda
- SongodaCore-Modules
- 2.6.21
- ../../pom.xml
-
-
-
- 17
- 17
-
- 1.19-R0.1-SNAPSHOT
-
-
- SongodaCore-NMS-v1_19_R1
- jar
-
+
- org.spigotmc
- spigot-api
- ${nms.ver}
- provided
+ ${project.version}
+ SongodaCore-NMS-v1_19_0
+ ${project.groupId}
+ compile
+
org.spigotmc
spigot
${nms.ver}
- provided
remapped-mojang
+ provided
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..48e2fc28
--- /dev/null
+++ b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/NmsImplementationsImpl.java
@@ -0,0 +1,68 @@
+package com.songoda.core.nms.v1_19_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_19_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_19_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_19_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_19_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.bukkit.craftbukkit.v1_19_R1.util.CraftMagicNumbers;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ if (((CraftMagicNumbers) CraftMagicNumbers.INSTANCE).getMappingsVersion().equals("7b9de0da1357e5b251eddde9aa762916")) {
+ var nmsMc1_19_0 = new com.songoda.core.nms.v1_19_0.NmsImplementationsImpl();
+
+ this.player = nmsMc1_19_0.getPlayer();
+ this.world = nmsMc1_19_0.getWorld();
+ this.worldBorder = nmsMc1_19_0.getWorldBorder();
+ this.anvil = nmsMc1_19_0.getAnvil();
+ this.nbt = nmsMc1_19_0.getNbt();
+
+ return;
+ }
+
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_19_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/anvil/AnvilView.java b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/anvil/AnvilView.java
index 5145fc4b..d5235be8 100644
--- a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/anvil/AnvilView.java
+++ b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/anvil/AnvilView.java
@@ -2,7 +2,6 @@ package com.songoda.core.nms.v1_19_R1.anvil;
import com.songoda.core.nms.anvil.CustomAnvil;
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
-import net.md_5.bungee.api.chat.TranslatableComponent;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.contents.TranslatableContents;
diff --git a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..67f630a7
--- /dev/null
+++ b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_19_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.network.protocol.game.ClientboundInitializeBorderPacket;
+import net.minecraft.world.level.border.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningBlocks(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.lerpSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.lerpSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().connection.send(new ClientboundInitializeBorderPacket(worldBorder));
+ }
+}
diff --git a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/SWorldImpl.java b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/SWorldImpl.java
index d04a5e36..90a65137 100644
--- a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/SWorldImpl.java
@@ -1,11 +1,16 @@
package com.songoda.core.nms.v1_19_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.entity.LevelEntityGetter;
+import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
@@ -22,7 +27,7 @@ public class SWorldImpl implements SWorld {
public List getLivingEntities() {
List result = new ArrayList<>();
- ServerLevel worldServer = ((CraftWorld) world).getHandle();
+ ServerLevel worldServer = ((CraftWorld) this.world).getHandle();
LevelEntityGetter entities = worldServer.getEntities();
entities.getAll().forEach((mcEnt) -> {
@@ -35,4 +40,13 @@ public class SWorldImpl implements SWorld {
return result;
}
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ ServerLevel serverLevel = ((CraftWorld) this.world).getHandle();
+ LevelChunk levelChunk = serverLevel.getChunk(x >> 4, z >> 4);
+ BlockState blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setBlockState(new BlockPos(x & 0xF, y, z & 0xF), blockState, true);
+ }
}
diff --git a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/WorldCoreImpl.java
index ef9b1958..eefc3a64 100644
--- a/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_19_R1/src/main/java/com/songoda/core/nms/v1_19_R1/world/WorldCoreImpl.java
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_19_R1.CraftChunk;
import org.bukkit.craftbukkit.v1_19_R1.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -94,11 +95,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ ServerLevel serverLevel = craftBlock.getCraftWorld().getHandle();
- ServerLevel nmsWorld = craftChunk.getHandle().q;
- nmsWorld.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/entity/NMSPlayerImpl.java b/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/entity/NMSPlayerImpl.java
deleted file mode 100644
index c3ff06f0..00000000
--- a/NMS/NMS-v1_19_R1v2/src/main/java/com/songoda/core/nms/v1_19_R1v2/anvil/entity/NMSPlayerImpl.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.songoda.core.nms.v1_19_R1v2.anvil.entity;
-
-import com.songoda.core.nms.entity.NMSPlayer;
-import net.minecraft.network.protocol.Packet;
-import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
-import org.bukkit.entity.Player;
-
-public class NMSPlayerImpl implements NMSPlayer {
- @Override
- public void sendPacket(Player p, Object packet) {
- ((CraftPlayer) p).getHandle().connection.send((Packet>) packet);
- }
-}
diff --git a/NMS/NMS-v1_19_R2/pom.xml b/NMS/NMS-v1_19_R2/pom.xml
index 66321cb1..79c3f141 100644
--- a/NMS/NMS-v1_19_R2/pom.xml
+++ b/NMS/NMS-v1_19_R2/pom.xml
@@ -4,19 +4,23 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
+
+ com.songoda
+ SongodaCore-Modules
+ 2.6.21
+ ../../pom.xml
+
+ SongodaCore-NMS-v1_19_R2
+
+
+ 17
+ 17
+
+ 1.19.3-R0.1-SNAPSHOT
+
+
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- ${java.version}
-
- ${java.release}
-
-
-
net.md-5
specialsource-maven-plugin
@@ -57,49 +61,28 @@
-
- com.songoda
- SongodaCore-Modules
- 2.6.21
- ../../pom.xml
-
-
-
- 17
- 17
-
- 1.19.3-R0.1-SNAPSHOT
-
-
- SongodaCore-NMS-v1_19_R2
- jar
-
-
- org.spigotmc
- spigot-api
- ${nms.ver}
- provided
-
-
+
org.spigotmc
spigot
${nms.ver}
- provided
remapped-mojang
+ provided
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/anvil/AnvilView.java b/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/anvil/AnvilView.java
index 4ec10d7c..63516300 100644
--- a/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/anvil/AnvilView.java
+++ b/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/anvil/AnvilView.java
@@ -2,7 +2,6 @@ package com.songoda.core.nms.v1_19_R2.anvil;
import com.songoda.core.nms.anvil.CustomAnvil;
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
-import net.md_5.bungee.api.chat.TranslatableComponent;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.contents.TranslatableContents;
diff --git a/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/nbt/NBTEntityImpl.java b/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/nbt/NBTEntityImpl.java
index d5db1d35..e177eb80 100644
--- a/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/nbt/NBTEntityImpl.java
+++ b/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/nbt/NBTEntityImpl.java
@@ -2,7 +2,6 @@ package com.songoda.core.nms.v1_19_R2.nbt;
import com.songoda.core.nms.nbt.NBTEntity;
import net.minecraft.core.BlockPos;
-import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.Entity;
diff --git a/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/world/SWorldImpl.java b/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/world/SWorldImpl.java
index 9aff266a..84a83b1f 100644
--- a/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/world/SWorldImpl.java
+++ b/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/world/SWorldImpl.java
@@ -1,11 +1,16 @@
package com.songoda.core.nms.v1_19_R2.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.entity.LevelEntityGetter;
+import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_19_R2.CraftWorld;
+import org.bukkit.craftbukkit.v1_19_R2.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
@@ -22,7 +27,7 @@ public class SWorldImpl implements SWorld {
public List getLivingEntities() {
List result = new ArrayList<>();
- ServerLevel worldServer = ((CraftWorld) world).getHandle();
+ ServerLevel worldServer = ((CraftWorld) this.world).getHandle();
LevelEntityGetter entities = worldServer.getEntities();
entities.getAll().forEach((mcEnt) -> {
@@ -35,4 +40,13 @@ public class SWorldImpl implements SWorld {
return result;
}
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ ServerLevel serverLevel = ((CraftWorld) this.world).getHandle();
+ LevelChunk levelChunk = serverLevel.getChunk(x >> 4, z >> 4);
+ BlockState blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setBlockState(new BlockPos(x & 0xF, y, z & 0xF), blockState, true);
+ }
}
diff --git a/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/world/WorldCoreImpl.java
index cd919101..faf20e96 100644
--- a/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_19_R2/src/main/java/com/songoda/core/nms/v1_19_R2/world/WorldCoreImpl.java
@@ -23,6 +23,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_19_R2.CraftChunk;
import org.bukkit.craftbukkit.v1_19_R2.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -94,11 +95,10 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
+ ServerLevel serverLevel = craftBlock.getCraftWorld().getHandle();
- ServerLevel nmsWorld = craftChunk.getHandle().q;
- nmsWorld.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_19_R3/pom.xml b/NMS/NMS-v1_19_R3/pom.xml
index b067de76..d8124729 100644
--- a/NMS/NMS-v1_19_R3/pom.xml
+++ b/NMS/NMS-v1_19_R3/pom.xml
@@ -4,19 +4,23 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
+
+ com.songoda
+ SongodaCore-Modules
+ 2.6.21
+ ../../pom.xml
+
+ SongodaCore-NMS-v1_19_R3
+
+
+ 17
+ 17
+
+ 1.19.4-R0.1-SNAPSHOT
+
+
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- ${java.version}
-
- ${java.release}
-
-
-
net.md-5
specialsource-maven-plugin
@@ -57,49 +61,28 @@
-
- com.songoda
- SongodaCore-Modules
- 2.6.21
- ../../pom.xml
-
-
-
- 17
- 17
-
- 1.19.4-R0.1-SNAPSHOT
-
-
- SongodaCore-NMS-v1_19_R3
- jar
-
-
- org.spigotmc
- spigot-api
- ${nms.ver}
- provided
-
-
+
org.spigotmc
spigot
${nms.ver}
- provided
remapped-mojang
+ provided
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/anvil/AnvilInventoryCustom.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/anvil/AnvilInventoryCustom.java
index a24d9583..d3dfeaf4 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/anvil/AnvilInventoryCustom.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/anvil/AnvilInventoryCustom.java
@@ -17,6 +17,6 @@ public class AnvilInventoryCustom extends CraftInventoryAnvil {
@Override
public InventoryHolder getHolder() {
- return holder;
+ return this.holder;
}
}
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTCompoundImpl.java
index f0c3b52e..ac9e5a86 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTCompoundImpl.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTCompoundImpl.java
@@ -25,78 +25,78 @@ public class NBTCompoundImpl implements NBTCompound {
@Override
public NBTCompound set(String tag, String s) {
- compound.putString(tag, s);
+ this.compound.putString(tag, s);
return this;
}
@Override
public NBTCompound set(String tag, boolean b) {
- compound.putBoolean(tag, b);
+ this.compound.putBoolean(tag, b);
return this;
}
@Override
public NBTCompound set(String tag, int i) {
- compound.putInt(tag, i);
+ this.compound.putInt(tag, i);
return this;
}
@Override
public NBTCompound set(String tag, double i) {
- compound.putDouble(tag, i);
+ this.compound.putDouble(tag, i);
return this;
}
@Override
public NBTCompound set(String tag, long l) {
- compound.putLong(tag, l);
+ this.compound.putLong(tag, l);
return this;
}
@Override
public NBTCompound set(String tag, short s) {
- compound.putShort(tag, s);
+ this.compound.putShort(tag, s);
return this;
}
@Override
public NBTCompound set(String tag, byte b) {
- compound.putByte(tag, b);
+ this.compound.putByte(tag, b);
return this;
}
@Override
public NBTCompound set(String tag, int[] i) {
- compound.putIntArray(tag, i);
+ this.compound.putIntArray(tag, i);
return this;
}
@Override
public NBTCompound set(String tag, byte[] b) {
- compound.putByteArray(tag, b);
+ this.compound.putByteArray(tag, b);
return this;
}
@Override
public NBTCompound set(String tag, UUID u) {
- compound.putUUID(tag, u);
+ this.compound.putUUID(tag, u);
return this;
}
@Override
public NBTCompound remove(String tag) {
- compound.remove(tag);
+ this.compound.remove(tag);
return this;
}
@Override
public boolean has(String tag) {
- return compound.contains(tag);
+ return this.compound.contains(tag);
}
@Override
public NBTObject getNBTObject(String tag) {
- return new NBTObjectImpl(compound, tag);
+ return new NBTObjectImpl(this.compound, tag);
}
@Override
@@ -151,18 +151,18 @@ public class NBTCompoundImpl implements NBTCompound {
}
CompoundTag newCompound = new CompoundTag();
- compound.put(tag, newCompound);
+ this.compound.put(tag, newCompound);
return new NBTCompoundImpl(newCompound);
}
@Override
public Set getKeys() {
- return compound.getAllKeys();
+ return this.compound.getAllKeys();
}
@Override
public Set getKeys(String tag) {
- return compound.getCompound(tag).getAllKeys();
+ return this.compound.getCompound(tag).getAllKeys();
}
@Override
@@ -190,7 +190,7 @@ public class NBTCompoundImpl implements NBTCompound {
public void deSerialize(byte[] serialized) {
try (ByteArrayInputStream inputStream = new ByteArrayInputStream(serialized);
ObjectInputStream dataInput = new ObjectInputStream(inputStream)) {
- compound = NbtIo.readCompressed(dataInput);
+ this.compound = NbtIo.readCompressed(dataInput);
} catch (Exception ex) {
ex.printStackTrace();
}
@@ -203,6 +203,6 @@ public class NBTCompoundImpl implements NBTCompound {
@Override
public String toString() {
- return compound.toString();
+ return this.compound.toString();
}
}
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTEntityImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTEntityImpl.java
index 8b38113a..cd1b539b 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTEntityImpl.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTEntityImpl.java
@@ -2,7 +2,6 @@ package com.songoda.core.nms.v1_19_R3.nbt;
import com.songoda.core.nms.nbt.NBTEntity;
import net.minecraft.core.BlockPos;
-import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.Entity;
@@ -33,7 +32,7 @@ public class NBTEntityImpl extends NBTCompoundImpl implements NBTEntity {
Entity spawned = optionalEntity.get().spawn(
((CraftWorld) location.getWorld()).getHandle(),
- compound,
+ this.compound,
null,
new BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()),
MobSpawnType.COMMAND,
@@ -42,10 +41,10 @@ public class NBTEntityImpl extends NBTCompoundImpl implements NBTEntity {
);
if (spawned != null) {
- spawned.load(compound);
+ spawned.load(this.compound);
org.bukkit.entity.Entity entity = spawned.getBukkitEntity();
entity.teleport(location);
- nmsEntity = spawned;
+ this.nmsEntity = spawned;
return entity;
}
@@ -56,12 +55,12 @@ public class NBTEntityImpl extends NBTCompoundImpl implements NBTEntity {
@Override
public org.bukkit.entity.Entity reSpawn(Location location) {
- nmsEntity.discard();
+ this.nmsEntity.discard();
return spawn(location);
}
@Override
public void addExtras() {
- compound.putString("entity_type", BuiltInRegistries.ENTITY_TYPE.getKey(nmsEntity.getType()).toString());
+ this.compound.putString("entity_type", BuiltInRegistries.ENTITY_TYPE.getKey(this.nmsEntity.getType()).toString());
}
}
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTItemImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTItemImpl.java
index bdffd1fd..a394c39c 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTItemImpl.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTItemImpl.java
@@ -15,10 +15,10 @@ public class NBTItemImpl extends NBTCompoundImpl implements NBTItem {
}
public org.bukkit.inventory.ItemStack finish() {
- if (nmsItem == null) {
- return CraftItemStack.asBukkitCopy(ItemStack.of(compound));
+ if (this.nmsItem == null) {
+ return CraftItemStack.asBukkitCopy(ItemStack.of(this.compound));
}
- return CraftItemStack.asBukkitCopy(nmsItem);
+ return CraftItemStack.asBukkitCopy(this.nmsItem);
}
}
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTObjectImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTObjectImpl.java
index 1f3cb708..d08f0d0f 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTObjectImpl.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/nbt/NBTObjectImpl.java
@@ -17,56 +17,56 @@ public class NBTObjectImpl implements NBTObject {
@Override
public String asString() {
- return compound.getString(tag);
+ return this.compound.getString(this.tag);
}
@Override
public boolean asBoolean() {
- return compound.getBoolean(tag);
+ return this.compound.getBoolean(this.tag);
}
@Override
public int asInt() {
- return compound.getInt(tag);
+ return this.compound.getInt(this.tag);
}
@Override
public double asDouble() {
- return compound.getDouble(tag);
+ return this.compound.getDouble(this.tag);
}
@Override
public long asLong() {
- return compound.getLong(tag);
+ return this.compound.getLong(this.tag);
}
@Override
public short asShort() {
- return compound.getShort(tag);
+ return this.compound.getShort(this.tag);
}
@Override
public byte asByte() {
- return compound.getByte(tag);
+ return this.compound.getByte(this.tag);
}
@Override
public int[] asIntArray() {
- return compound.getIntArray(tag);
+ return this.compound.getIntArray(this.tag);
}
@Override
public byte[] asByteArray() {
- return compound.getByteArray(tag);
+ return this.compound.getByteArray(this.tag);
}
@Override
public NBTCompound asCompound() {
- return new NBTCompoundImpl(compound.getCompound(tag));
+ return new NBTCompoundImpl(this.compound.getCompound(this.tag));
}
@Override
public Set getKeys() {
- return compound.getAllKeys();
+ return this.compound.getAllKeys();
}
}
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SItemStackImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SItemStackImpl.java
index 5aafa871..c6b56dc7 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SItemStackImpl.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SItemStackImpl.java
@@ -33,7 +33,7 @@ public class SItemStackImpl implements SItemStack {
vec3d1 = vec3d1.yRot(-entityPlayer.getYRot() * 0.017453292F);
vec3d1 = vec3d1.add(entityPlayer.getX(), entityPlayer.getEyeY(), entityPlayer.getZ());
- entityPlayer.level.addParticle(new ItemParticleOption(ParticleTypes.ITEM, CraftItemStack.asNMSCopy(item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
+ entityPlayer.level.addParticle(new ItemParticleOption(ParticleTypes.ITEM, CraftItemStack.asNMSCopy(this.item)), vec3d1.x, vec3d1.y, vec3d1.z, vec3d.x, vec3d.y + 0.05D, vec3d.z);
}
}
}
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SSpawnerImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SSpawnerImpl.java
index 7dd731fa..b4722d8e 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SSpawnerImpl.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SSpawnerImpl.java
@@ -46,13 +46,13 @@ public class SSpawnerImpl implements SSpawner {
short spawnRange = 4;
for (int i = 0; i < 50; i++) {
- assert spawnerLocation.getWorld() != null;
- ServerLevel world = ((CraftWorld) spawnerLocation.getWorld()).getHandle();
+ assert this.spawnerLocation.getWorld() != null;
+ ServerLevel world = ((CraftWorld) this.spawnerLocation.getWorld()).getHandle();
RandomSource 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;
+ double x = this.spawnerLocation.getX() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D;
+ double y = this.spawnerLocation.getY() + random.nextInt(3) - 1;
+ double z = this.spawnerLocation.getZ() + (random.nextDouble() - random.nextDouble()) * (double) spawnRange + 0.5D;
Optional optionalEntity = net.minecraft.world.entity.EntityType.create(compound, world);
if (optionalEntity.isEmpty()) continue;
@@ -67,7 +67,7 @@ public class SSpawnerImpl implements SSpawner {
continue;
}
- Location spot = new Location(spawnerLocation.getWorld(), x, y, z);
+ Location spot = new Location(this.spawnerLocation.getWorld(), x, y, z);
if (!canSpawn(world, entityInsentient, spot, canSpawnOn)) {
continue;
@@ -122,7 +122,7 @@ public class SSpawnerImpl implements SSpawner {
for (CompatibleMaterial material : canSpawnOn) {
if (material == null) continue;
- if (spawnedOn.equals(material) || material.isAir()) {
+ if (spawnedOn == material || material.isAir()) {
return true;
}
}
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SWorldImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SWorldImpl.java
index 4b1a54f8..fa941282 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SWorldImpl.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/SWorldImpl.java
@@ -1,11 +1,16 @@
package com.songoda.core.nms.v1_19_R3.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
+import net.minecraft.world.level.block.state.BlockState;
+import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.entity.LevelEntityGetter;
+import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_19_R3.CraftWorld;
+import org.bukkit.craftbukkit.v1_19_R3.block.data.CraftBlockData;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
@@ -22,7 +27,7 @@ public class SWorldImpl implements SWorld {
public List getLivingEntities() {
List result = new ArrayList<>();
- ServerLevel worldServer = ((CraftWorld) world).getHandle();
+ ServerLevel worldServer = ((CraftWorld) this.world).getHandle();
LevelEntityGetter entities = worldServer.getEntities();
entities.getAll().forEach((mcEnt) -> {
@@ -35,4 +40,13 @@ public class SWorldImpl implements SWorld {
return result;
}
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ ServerLevel serverLevel = ((CraftWorld) this.world).getHandle();
+ LevelChunk levelChunk = serverLevel.getChunk(x >> 4, z >> 4);
+ BlockState blockState = ((CraftBlockData) material.createBlockData()).getState();
+
+ levelChunk.setBlockState(new BlockPos(x & 0xF, y, z & 0xF), blockState, true);
+ }
}
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/WorldCoreImpl.java
index 1a3b56ca..5faf0d79 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/WorldCoreImpl.java
@@ -24,6 +24,7 @@ import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_19_R3.CraftChunk;
import org.bukkit.craftbukkit.v1_19_R3.block.CraftBlock;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -60,46 +61,45 @@ public class WorldCoreImpl implements WorldCore {
public void randomTickChunk(org.bukkit.Chunk bukkitChunk, int tickAmount) {
LevelChunk chunk = (LevelChunk) ((CraftChunk) bukkitChunk).getHandle(ChunkStatus.FULL);
ServerLevel world = chunk.q;
- ProfilerFiller gameProfilerFiller = world.getProfiler();
+ ProfilerFiller gameprofilerfiller = world.getProfiler();
ChunkPos chunkCoordIntPair = chunk.getPos();
int j = chunkCoordIntPair.getMinBlockX();
int k = chunkCoordIntPair.getMinBlockZ();
- gameProfilerFiller.popPush("tickBlocks");
+ gameprofilerfiller.push("tickBlocks");
if (tickAmount > 0) {
LevelChunkSection[] aChunkSection = chunk.getSections();
-
for (LevelChunkSection chunkSection : aChunkSection) {
if (chunkSection.isRandomlyTicking()) {
- int j1 = chunkSection.bottomBlockY();
+ int l1 = chunkSection.bottomBlockY();
- for (int k1 = 0; k1 < tickAmount; ++k1) {
- BlockPos blockposition2 = world.getBlockRandomPos(j, j1, k, 15);
- gameProfilerFiller.push("randomTick");
- BlockState iBlockData1 = chunkSection.getBlockState(blockposition2.getX() - j, blockposition2.getY() - j1, blockposition2.getZ() - k);
- if (iBlockData1.isRandomlyTicking()) {
- iBlockData1.randomTick(world, blockposition2, world.random);
+ for (int l = 0; l < tickAmount; ++l) {
+ BlockPos blockposition2 = world.getBlockRandomPos(j, l1, k, 15);
+ gameprofilerfiller.push("randomTick");
+ BlockState iBlockData3 = chunkSection.getBlockState(blockposition2.getX() - j, blockposition2.getY() - l1, blockposition2.getZ() - k);
+ if (iBlockData3.isRandomlyTicking()) {
+ iBlockData3.randomTick(world, blockposition2, world.random);
}
- FluidState fluid = iBlockData1.getFluidState();
+ FluidState fluid = iBlockData3.getFluidState();
if (fluid.isRandomlyTicking()) {
fluid.randomTick(world, blockposition2, world.random);
}
- gameProfilerFiller.pop();
+ gameprofilerfiller.pop();
}
}
}
}
+ gameprofilerfiller.pop();
}
@Override
- public void updateAdjacentComparators(Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
- LevelChunk nmsChunk = (LevelChunk) craftChunk.getHandle(ChunkStatus.FULL);
+ ServerLevel serverLevel = craftBlock.getCraftWorld().getHandle();
- nmsChunk.q.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
+ serverLevel.updateNeighbourForOutputSignal(craftBlock.getPosition(), craftBlock.getNMS().getBlock());
}
}
diff --git a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/spawner/BBaseSpawnerImpl.java b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/spawner/BBaseSpawnerImpl.java
index 570b2c4a..d2cccf60 100644
--- a/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/spawner/BBaseSpawnerImpl.java
+++ b/NMS/NMS-v1_19_R3/src/main/java/com/songoda/core/nms/v1_19_R3/world/spawner/BBaseSpawnerImpl.java
@@ -70,85 +70,85 @@ public class BBaseSpawnerImpl implements BBaseSpawner {
*/
@Override
public void tick() throws InvocationTargetException, IllegalAccessException {
- ServerLevel worldserver = getWorld();
+ ServerLevel worldServer = getWorld();
BlockPos blockposition = getBlockPosition();
if (this.spawner.spawnDelay == -1) {
- this.delay(worldserver, blockposition);
+ this.delay(worldServer, blockposition);
}
if (this.spawner.spawnDelay > 0) {
--this.spawner.spawnDelay;
} else {
boolean flag = false;
- RandomSource randomsource = worldserver.getRandom();
- SpawnData mobspawnerdata = (SpawnData) this.getOrCreateNextSpawnDataMethod.invoke(this.spawner, worldserver, randomsource, blockposition);
+ RandomSource randomsource = worldServer.getRandom();
+ SpawnData mobSpawnerData = (SpawnData) this.getOrCreateNextSpawnDataMethod.invoke(this.spawner, worldServer, randomsource, blockposition);
int i = 0;
while (true) {
if (i >= this.spawner.spawnCount) {
if (flag) {
- this.delay(worldserver, blockposition);
+ this.delay(worldServer, blockposition);
}
break;
}
- CompoundTag nbttagcompound = mobspawnerdata.getEntityToSpawn();
- Optional> optional = EntityType.by(nbttagcompound);
+ CompoundTag nbtTagCompound = mobSpawnerData.getEntityToSpawn();
+ Optional> optional = EntityType.by(nbtTagCompound);
if (optional.isEmpty()) {
- this.delay(worldserver, blockposition);
+ this.delay(worldServer, blockposition);
return;
}
- ListTag nbttaglist = nbttagcompound.getList("Pos", 6);
- int j = nbttaglist.size();
- double d0 = j >= 1 ? nbttaglist.getDouble(0) : (double) blockposition.getX() + (randomsource.nextDouble() - randomsource.nextDouble()) * (double) this.spawner.spawnRange + 0.5;
- double d1 = j >= 2 ? nbttaglist.getDouble(1) : (double) (blockposition.getY() + randomsource.nextInt(3) - 1);
- double d2 = j >= 3 ? nbttaglist.getDouble(2) : (double) blockposition.getZ() + (randomsource.nextDouble() - randomsource.nextDouble()) * (double) this.spawner.spawnRange + 0.5;
- if (worldserver.noCollision(optional.get().getAABB(d0, d1, d2))) {
+ ListTag nbtTagList = nbtTagCompound.getList("Pos", 6);
+ int j = nbtTagList.size();
+ double d0 = j >= 1 ? nbtTagList.getDouble(0) : (double) blockposition.getX() + (randomsource.nextDouble() - randomsource.nextDouble()) * (double) this.spawner.spawnRange + 0.5;
+ double d1 = j >= 2 ? nbtTagList.getDouble(1) : (double) (blockposition.getY() + randomsource.nextInt(3) - 1);
+ double d2 = j >= 3 ? nbtTagList.getDouble(2) : (double) blockposition.getZ() + (randomsource.nextDouble() - randomsource.nextDouble()) * (double) this.spawner.spawnRange + 0.5;
+ if (worldServer.noCollision(optional.get().getAABB(d0, d1, d2))) {
label128:
{
BlockPos blockposition1 = BlockPos.containing(d0, d1, d2);
- if (mobspawnerdata.getCustomSpawnRules().isPresent()) {
- if (!optional.get().getCategory().isFriendly() && worldserver.getDifficulty() == Difficulty.PEACEFUL) {
+ if (mobSpawnerData.getCustomSpawnRules().isPresent()) {
+ if (!optional.get().getCategory().isFriendly() && worldServer.getDifficulty() == Difficulty.PEACEFUL) {
break label128;
}
- SpawnData.CustomSpawnRules mobspawnerdata_a = mobspawnerdata.getCustomSpawnRules().get();
- if (!mobspawnerdata_a.blockLightLimit().isValueInRange(worldserver.getBrightness(LightLayer.BLOCK, blockposition1)) || !mobspawnerdata_a.skyLightLimit().isValueInRange(worldserver.getBrightness(LightLayer.SKY, blockposition1))) {
+ SpawnData.CustomSpawnRules mobSpawnerData_a = mobSpawnerData.getCustomSpawnRules().get();
+ if (!mobSpawnerData_a.blockLightLimit().isValueInRange(worldServer.getBrightness(LightLayer.BLOCK, blockposition1)) || !mobSpawnerData_a.skyLightLimit().isValueInRange(worldServer.getBrightness(LightLayer.SKY, blockposition1))) {
break label128;
}
- } else if (!SpawnPlacements.checkSpawnRules((EntityType>) optional.get(), worldserver, MobSpawnType.SPAWNER, blockposition1, worldserver.getRandom())) {
+ } else if (!SpawnPlacements.checkSpawnRules((EntityType>) optional.get(), worldServer, MobSpawnType.SPAWNER, blockposition1, worldServer.getRandom())) {
break label128;
}
- Entity entity = EntityType.loadEntityRecursive(nbttagcompound, worldserver, (entity1) -> {
+ Entity entity = EntityType.loadEntityRecursive(nbtTagCompound, worldServer, (entity1) -> {
entity1.moveTo(d0, d1, d2, entity1.getYRot(), entity1.getXRot());
return entity1;
});
if (entity == null) {
- this.delay(worldserver, blockposition);
+ this.delay(worldServer, blockposition);
return;
}
- int k = worldserver.getEntitiesOfClass(entity.getClass(), (new AABB(blockposition.getX(), blockposition.getY(), blockposition.getZ(), blockposition.getX() + 1, blockposition.getY() + 1, blockposition.getZ() + 1)).inflate(this.spawner.spawnRange)).size();
+ int k = worldServer.getEntitiesOfClass(entity.getClass(), (new AABB(blockposition.getX(), blockposition.getY(), blockposition.getZ(), blockposition.getX() + 1, blockposition.getY() + 1, blockposition.getZ() + 1)).inflate(this.spawner.spawnRange)).size();
if (k >= this.spawner.maxNearbyEntities) {
- this.delay(worldserver, blockposition);
+ this.delay(worldServer, blockposition);
return;
}
entity.moveTo(entity.getX(), entity.getY(), entity.getZ(), randomsource.nextFloat() * 360.0F, 0.0F);
- if (entity instanceof Mob entityinsentient) {
- if (mobspawnerdata.getCustomSpawnRules().isEmpty() && !entityinsentient.checkSpawnRules(worldserver, MobSpawnType.SPAWNER) || !entityinsentient.checkSpawnObstruction(worldserver)) {
+ if (entity instanceof Mob entityInsentient) {
+ if (mobSpawnerData.getCustomSpawnRules().isEmpty() && !entityInsentient.checkSpawnRules(worldServer, MobSpawnType.SPAWNER) || !entityInsentient.checkSpawnObstruction(worldServer)) {
break label128;
}
- if (mobspawnerdata.getEntityToSpawn().size() == 1 && mobspawnerdata.getEntityToSpawn().contains("id", 8)) {
- ((Mob) entity).finalizeSpawn(worldserver, worldserver.getCurrentDifficultyAt(entity.blockPosition()), MobSpawnType.SPAWNER, null, null);
+ if (mobSpawnerData.getEntityToSpawn().size() == 1 && mobSpawnerData.getEntityToSpawn().contains("id", 8)) {
+ ((Mob) entity).finalizeSpawn(worldServer, worldServer.getCurrentDifficultyAt(entity.blockPosition()), MobSpawnType.SPAWNER, null, null);
}
- if (entityinsentient.level.spigotConfig.nerfSpawnerMobs) {
- entityinsentient.aware = false;
+ if (entityInsentient.level.spigotConfig.nerfSpawnerMobs) {
+ entityInsentient.aware = false;
}
}
@@ -162,13 +162,13 @@ public class BBaseSpawnerImpl implements BBaseSpawner {
passenger.discard();
}
} else {
- if (!worldserver.tryAddFreshEntityWithPassengers(entity, CreatureSpawnEvent.SpawnReason.SPAWNER)) {
- this.delay(worldserver, blockposition);
+ if (!worldServer.tryAddFreshEntityWithPassengers(entity, CreatureSpawnEvent.SpawnReason.SPAWNER)) {
+ this.delay(worldServer, blockposition);
return;
}
- worldserver.levelEvent(2004, blockposition, 0);
- worldserver.gameEvent(entity, GameEvent.ENTITY_PLACE, blockposition1);
+ worldServer.levelEvent(2004, blockposition, 0);
+ worldServer.gameEvent(entity, GameEvent.ENTITY_PLACE, blockposition1);
if (entity instanceof Mob) {
((Mob) entity).spawnAnim();
}
diff --git a/NMS/NMS-v1_8_R1/pom.xml b/NMS/NMS-v1_8_R1/pom.xml
index d175279d..de4fe019 100644
--- a/NMS/NMS-v1_8_R1/pom.xml
+++ b/NMS/NMS-v1_8_R1/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_8_R1
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..a3c4f19b
--- /dev/null
+++ b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_8_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_8_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_8_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_8_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_8_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_8_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..4fd2b90a
--- /dev/null
+++ b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,33 @@
+package com.songoda.core.nms.v1_8_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_8_R1.EnumWorldBorderAction;
+import net.minecraft.server.v1_8_R1.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_8_R1.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.c(center.getX(), center.getZ());
+ worldBorder.a(size);
+ worldBorder.b(0); // WarningTime
+ worldBorder.c(0); // WarningBlocks
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.a(size - 0.1D, size, Long.MAX_VALUE); // transitionSizeBetween
+ } else if (color == BorderColor.RED) {
+ worldBorder.a(size, size - 1.0D, Long.MAX_VALUE); // transitionSizeBetween
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/SWorldImpl.java b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/SWorldImpl.java
index 2518d072..99cf9790 100644
--- a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/SWorldImpl.java
@@ -1,17 +1,35 @@
package com.songoda.core.nms.v1_8_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_8_R1.Block;
+import net.minecraft.server.v1_8_R1.BlockPosition;
+import net.minecraft.server.v1_8_R1.Chunk;
+import net.minecraft.server.v1_8_R1.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_8_R1.CraftWorld;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+
+ levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0));
}
}
diff --git a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java
index abd021ad..596e787b 100644
--- a/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_8_R1/src/main/java/com/songoda/core/nms/v1_8_R1/world/WorldCoreImpl.java
@@ -18,9 +18,11 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_8_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_8_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_8_R1.util.CraftMagicNumbers;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +42,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -91,12 +93,12 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(org.bukkit.block.Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull org.bukkit.block.Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
- net.minecraft.server.v1_8_R1.World nmsWorld = craftChunk.getHandle().getWorld();
+ WorldServer serverLevel = ((CraftWorld) craftBlock.getWorld()).getHandle();
- BlockPosition blockPosition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
- nmsWorld.updateAdjacentComparators(blockPosition, CraftMagicNumbers.getBlock(craftBlock));
+ BlockPosition blockPos = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
+ Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType());
+ serverLevel.updateAdjacentComparators(blockPos, nmsBlock);
}
}
diff --git a/NMS/NMS-v1_8_R2/pom.xml b/NMS/NMS-v1_8_R2/pom.xml
index 7705dfe3..7446e1bd 100644
--- a/NMS/NMS-v1_8_R2/pom.xml
+++ b/NMS/NMS-v1_8_R2/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_8_R2
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/NmsImplementationsImpl.java b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/NmsImplementationsImpl.java
new file mode 100644
index 00000000..061f20ab
--- /dev/null
+++ b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_8_R2;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_8_R2.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_8_R2.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_8_R2.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_8_R2.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_8_R2.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..dc2b0275
--- /dev/null
+++ b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/NmsWorldBorderImpl.java
@@ -0,0 +1,32 @@
+package com.songoda.core.nms.v1_8_R2.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_8_R2.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_8_R2.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/SWorldImpl.java b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/SWorldImpl.java
index fa2fc439..f516bfef 100644
--- a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/SWorldImpl.java
+++ b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/SWorldImpl.java
@@ -1,17 +1,35 @@
package com.songoda.core.nms.v1_8_R2.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_8_R2.Block;
+import net.minecraft.server.v1_8_R2.BlockPosition;
+import net.minecraft.server.v1_8_R2.Chunk;
+import net.minecraft.server.v1_8_R2.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_8_R2.CraftWorld;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+
+ levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0));
}
}
diff --git a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java
index 158e7a2a..910e1c86 100644
--- a/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_8_R2/src/main/java/com/songoda/core/nms/v1_8_R2/world/WorldCoreImpl.java
@@ -18,9 +18,11 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_8_R2.CraftChunk;
+import org.bukkit.craftbukkit.v1_8_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R2.block.CraftBlock;
import org.bukkit.craftbukkit.v1_8_R2.util.CraftMagicNumbers;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +42,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -91,12 +93,12 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(org.bukkit.block.Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull org.bukkit.block.Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
- net.minecraft.server.v1_8_R2.World nmsWorld = craftChunk.getHandle().getWorld();
+ WorldServer serverLevel = ((CraftWorld) craftBlock.getWorld()).getHandle();
- BlockPosition blockPosition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
- nmsWorld.updateAdjacentComparators(blockPosition, CraftMagicNumbers.getBlock(craftBlock));
+ BlockPosition blockPos = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
+ Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType());
+ serverLevel.updateAdjacentComparators(blockPos, nmsBlock);
}
}
diff --git a/NMS/NMS-v1_8_R3/pom.xml b/NMS/NMS-v1_8_R3/pom.xml
index 5e034f78..8dedbf83 100644
--- a/NMS/NMS-v1_8_R3/pom.xml
+++ b/NMS/NMS-v1_8_R3/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_8_R3
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/NmsImplementationsImpl.java b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/NmsImplementationsImpl.java
new file mode 100644
index 00000000..853430e0
--- /dev/null
+++ b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_8_R3;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_8_R3.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_8_R3.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_8_R3.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_8_R3.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_8_R3.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..5d1e90b2
--- /dev/null
+++ b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/NmsWorldBorderImpl.java
@@ -0,0 +1,32 @@
+package com.songoda.core.nms.v1_8_R3.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_8_R3.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_8_R3.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/SWorldImpl.java b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/SWorldImpl.java
index f8430d5c..189fb6b5 100644
--- a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/SWorldImpl.java
+++ b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/SWorldImpl.java
@@ -1,17 +1,35 @@
package com.songoda.core.nms.v1_8_R3.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_8_R3.Block;
+import net.minecraft.server.v1_8_R3.BlockPosition;
+import net.minecraft.server.v1_8_R3.Chunk;
+import net.minecraft.server.v1_8_R3.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+
+ levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0));
}
}
diff --git a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java
index bba6b4f7..5b5fb3f9 100644
--- a/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_8_R3/src/main/java/com/songoda/core/nms/v1_8_R3/world/WorldCoreImpl.java
@@ -18,9 +18,11 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_8_R3.CraftChunk;
+import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R3.block.CraftBlock;
import org.bukkit.craftbukkit.v1_8_R3.util.CraftMagicNumbers;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +42,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -90,12 +92,12 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(org.bukkit.block.Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull org.bukkit.block.Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
- net.minecraft.server.v1_8_R3.World nmsWorld = craftChunk.getHandle().getWorld();
+ WorldServer serverLevel = ((CraftWorld) craftBlock.getWorld()).getHandle();
- BlockPosition blockPosition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
- nmsWorld.updateAdjacentComparators(blockPosition, CraftMagicNumbers.getBlock(craftBlock));
+ BlockPosition blockPos = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
+ Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType());
+ serverLevel.updateAdjacentComparators(blockPos, nmsBlock);
}
}
diff --git a/NMS/NMS-v1_9_R1/pom.xml b/NMS/NMS-v1_9_R1/pom.xml
index fe3acd62..c30cda24 100644
--- a/NMS/NMS-v1_9_R1/pom.xml
+++ b/NMS/NMS-v1_9_R1/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_9_R1
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/NmsImplementationsImpl.java b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/NmsImplementationsImpl.java
new file mode 100644
index 00000000..4b66b424
--- /dev/null
+++ b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_9_R1;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_9_R1.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_9_R1.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_9_R1.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_9_R1.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_9_R1.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..32a18101
--- /dev/null
+++ b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_9_R1.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_9_R1.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_9_R1.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_9_R1.CraftWorld;
+import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/SWorldImpl.java b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/SWorldImpl.java
index fdfe63fa..49d6b8b0 100644
--- a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/SWorldImpl.java
+++ b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/SWorldImpl.java
@@ -1,17 +1,35 @@
package com.songoda.core.nms.v1_9_R1.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_9_R1.Block;
+import net.minecraft.server.v1_9_R1.BlockPosition;
+import net.minecraft.server.v1_9_R1.Chunk;
+import net.minecraft.server.v1_9_R1.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_9_R1.CraftWorld;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+
+ levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0));
}
}
diff --git a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java
index 1cf86d79..829c8604 100644
--- a/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_9_R1/src/main/java/com/songoda/core/nms/v1_9_R1/world/WorldCoreImpl.java
@@ -18,9 +18,11 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_9_R1.CraftChunk;
+import org.bukkit.craftbukkit.v1_9_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_9_R1.block.CraftBlock;
import org.bukkit.craftbukkit.v1_9_R1.util.CraftMagicNumbers;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +42,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -90,12 +92,12 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(org.bukkit.block.Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull org.bukkit.block.Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
- net.minecraft.server.v1_9_R1.World nmsWorld = craftChunk.getHandle().getWorld();
+ WorldServer serverLevel = ((CraftWorld) craftBlock.getWorld()).getHandle();
- BlockPosition blockPosition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
- nmsWorld.updateAdjacentComparators(blockPosition, CraftMagicNumbers.getBlock(craftBlock));
+ BlockPosition blockPos = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
+ Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType());
+ serverLevel.updateAdjacentComparators(blockPos, nmsBlock);
}
}
diff --git a/NMS/NMS-v1_9_R2/pom.xml b/NMS/NMS-v1_9_R2/pom.xml
index 25899bc2..ff9c1f72 100644
--- a/NMS/NMS-v1_9_R2/pom.xml
+++ b/NMS/NMS-v1_9_R2/pom.xml
@@ -10,9 +10,7 @@
2.6.21
../../pom.xml
-
SongodaCore-NMS-v1_9_R2
- jar
@@ -26,12 +24,14 @@
${project.groupId}
SongodaCore-NMS-API
${project.version}
+ provided
${project.groupId}
SongodaCore-Compatibility
${project.version}
+ provided
diff --git a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/NmsImplementationsImpl.java b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/NmsImplementationsImpl.java
new file mode 100644
index 00000000..ee0b1bc0
--- /dev/null
+++ b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/NmsImplementationsImpl.java
@@ -0,0 +1,55 @@
+package com.songoda.core.nms.v1_9_R2;
+
+import com.songoda.core.nms.NmsImplementations;
+import com.songoda.core.nms.anvil.AnvilCore;
+import com.songoda.core.nms.entity.NMSPlayer;
+import com.songoda.core.nms.nbt.NBTCore;
+import com.songoda.core.nms.v1_9_R2.entity.NMSPlayerImpl;
+import com.songoda.core.nms.v1_9_R2.nbt.NBTCoreImpl;
+import com.songoda.core.nms.v1_9_R2.world.NmsWorldBorderImpl;
+import com.songoda.core.nms.v1_9_R2.world.WorldCoreImpl;
+import com.songoda.core.nms.world.NmsWorldBorder;
+import com.songoda.core.nms.world.WorldCore;
+import org.jetbrains.annotations.NotNull;
+
+@SuppressWarnings("unused")
+public class NmsImplementationsImpl implements NmsImplementations {
+ private final NMSPlayer player;
+ private final WorldCore world;
+ private final NmsWorldBorder worldBorder;
+ private final AnvilCore anvil;
+ private final NBTCore nbt;
+
+ public NmsImplementationsImpl() {
+ this.player = new NMSPlayerImpl();
+ this.world = new WorldCoreImpl();
+ this.worldBorder = new NmsWorldBorderImpl();
+ this.anvil = new com.songoda.core.nms.v1_9_R2.anvil.AnvilCore();
+ this.nbt = new NBTCoreImpl();
+ }
+
+ @Override
+ public @NotNull NMSPlayer getPlayer() {
+ return this.player;
+ }
+
+ @Override
+ public @NotNull WorldCore getWorld() {
+ return this.world;
+ }
+
+ @Override
+ public @NotNull NmsWorldBorder getWorldBorder() {
+ return this.worldBorder;
+ }
+
+ @Override
+ public @NotNull AnvilCore getAnvil() {
+ return this.anvil;
+ }
+
+ @Override
+ public @NotNull NBTCore getNbt() {
+ return this.nbt;
+ }
+}
diff --git a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/NmsWorldBorderImpl.java b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/NmsWorldBorderImpl.java
new file mode 100644
index 00000000..0f4881db
--- /dev/null
+++ b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/NmsWorldBorderImpl.java
@@ -0,0 +1,35 @@
+package com.songoda.core.nms.v1_9_R2.world;
+
+import com.songoda.core.nms.world.NmsWorldBorder;
+import net.minecraft.server.v1_9_R2.PacketPlayOutWorldBorder;
+import net.minecraft.server.v1_9_R2.WorldBorder;
+import org.bukkit.Location;
+import org.bukkit.craftbukkit.v1_9_R2.CraftWorld;
+import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+
+public class NmsWorldBorderImpl implements NmsWorldBorder {
+ @Override
+ public void send(Player player, BorderColor color, double size, @NotNull Location center) {
+ Objects.requireNonNull(center.getWorld());
+
+ WorldBorder worldBorder = new WorldBorder();
+ worldBorder.world = ((CraftWorld) center.getWorld()).getHandle();
+
+ worldBorder.setCenter(center.getX(), center.getZ());
+ worldBorder.setSize(size);
+ worldBorder.setWarningTime(0);
+ worldBorder.setWarningDistance(0);
+
+ if (color == BorderColor.GREEN) {
+ worldBorder.transitionSizeBetween(size - 0.1D, size, Long.MAX_VALUE);
+ } else if (color == BorderColor.RED) {
+ worldBorder.transitionSizeBetween(size, size - 1.0D, Long.MAX_VALUE);
+ }
+
+ ((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutWorldBorder(worldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.INITIALIZE));
+ }
+}
diff --git a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/SWorldImpl.java b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/SWorldImpl.java
index 4e118871..deebc639 100644
--- a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/SWorldImpl.java
+++ b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/SWorldImpl.java
@@ -1,17 +1,35 @@
package com.songoda.core.nms.v1_9_R2.world;
import com.songoda.core.nms.world.SWorld;
+import net.minecraft.server.v1_9_R2.Block;
+import net.minecraft.server.v1_9_R2.BlockPosition;
+import net.minecraft.server.v1_9_R2.Chunk;
+import net.minecraft.server.v1_9_R2.WorldServer;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.craftbukkit.v1_9_R2.CraftWorld;
import org.bukkit.entity.LivingEntity;
import java.util.ArrayList;
import java.util.List;
public class SWorldImpl implements SWorld {
- public SWorldImpl() {
+ private final World world;
+
+ public SWorldImpl(World world) {
+ this.world = world;
}
@Override
public List getLivingEntities() {
- return new ArrayList<>();
+ return new ArrayList<>(); // FIXME
+ }
+
+ @Override
+ public void setBlockFast(int x, int y, int z, Material material) {
+ WorldServer serverLevel = ((CraftWorld) this.world).getHandle();
+ Chunk levelChunk = serverLevel.getChunkIfLoaded(x >> 4, z >> 4);
+
+ levelChunk.a(new BlockPosition(x & 0xF, y, z & 0xF), Block.getByCombinedId(0));
}
}
diff --git a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java
index 41091719..6225f231 100644
--- a/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java
+++ b/NMS/NMS-v1_9_R2/src/main/java/com/songoda/core/nms/v1_9_R2/world/WorldCoreImpl.java
@@ -18,9 +18,11 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.CreatureSpawner;
import org.bukkit.craftbukkit.v1_9_R2.CraftChunk;
+import org.bukkit.craftbukkit.v1_9_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_9_R2.block.CraftBlock;
import org.bukkit.craftbukkit.v1_9_R2.util.CraftMagicNumbers;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
public class WorldCoreImpl implements WorldCore {
@Override
@@ -40,7 +42,7 @@ public class WorldCoreImpl implements WorldCore {
@Override
public SWorld getWorld(World world) {
- return new SWorldImpl();
+ return new SWorldImpl(world);
}
@Override
@@ -89,12 +91,12 @@ public class WorldCoreImpl implements WorldCore {
}
@Override
- public void updateAdjacentComparators(org.bukkit.block.Block bukkitBlock) {
+ public void updateAdjacentComparators(@NotNull org.bukkit.block.Block bukkitBlock) {
CraftBlock craftBlock = (CraftBlock) bukkitBlock;
- CraftChunk craftChunk = (CraftChunk) bukkitBlock.getChunk();
- net.minecraft.server.v1_9_R2.World nmsWorld = craftChunk.getHandle().getWorld();
+ WorldServer serverLevel = ((CraftWorld) craftBlock.getWorld()).getHandle();
- BlockPosition blockPosition = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
- nmsWorld.updateAdjacentComparators(blockPosition, CraftMagicNumbers.getBlock(craftBlock));
+ BlockPosition blockPos = new BlockPosition(craftBlock.getX(), craftBlock.getY(), craftBlock.getZ());
+ Block nmsBlock = CraftMagicNumbers.getBlock(bukkitBlock.getType());
+ serverLevel.updateAdjacentComparators(blockPos, nmsBlock);
}
}
diff --git a/NMS/NMS/pom.xml b/NMS/NMS/pom.xml
new file mode 100644
index 00000000..4c79f6ed
--- /dev/null
+++ b/NMS/NMS/pom.xml
@@ -0,0 +1,145 @@
+
+
+ 4.0.0
+
+
+ com.songoda
+ SongodaCore-Modules
+ 2.6.21
+ ../../pom.xml
+
+ SongodaCore-NMS
+
+
+
+ ${project.groupId}
+ SongodaCore-NMS-API
+ ${project.version}
+ compile
+
+
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_8_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_8_R2
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_8_R3
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_9_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_9_R2
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_10_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_11_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_12_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_13_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_13_R2
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_14_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_15_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_16_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_16_R2
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_16_R3
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_17_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_18_R1
+ ${project.version}
+ compile
+
+
+ ${project.groupId}
+ SongodaCore-NMS-v1_18_R2
+ ${project.version}
+ compile
+
+
+ ${project.version}
+ SongodaCore-NMS-v1_19_R1
+ ${project.groupId}
+ compile
+
+
+ ${project.version}
+ SongodaCore-NMS-v1_19_R2
+ ${project.groupId}
+ compile
+
+
+
diff --git a/pom.xml b/pom.xml
index fda2bfe2..4e99c685 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,14 +10,12 @@
pom
-
+ UTF-8
1.8
8
- UTF-8
-
songoda
https://sonarcloud.io
target/surefire-reports/*.xml
@@ -27,6 +25,8 @@
Core
Compatibility
+
+ NMS/NMS
NMS/NMS-API
NMS/NMS-v1_8_R1
NMS/NMS-v1_8_R2
@@ -46,8 +46,8 @@
NMS/NMS-v1_17_R1
NMS/NMS-v1_18_R1
NMS/NMS-v1_18_R2
+ NMS/NMS-v1_19_0
NMS/NMS-v1_19_R1
- NMS/NMS-v1_19_R1v2
NMS/NMS-v1_19_R2
NMS/NMS-v1_19_R3
@@ -69,7 +69,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.8.1
+ 3.10.1
@@ -81,13 +81,21 @@
+ org.apache.maven.plugins
maven-surefire-plugin
- 2.22.2
+ 3.0.0-M6
+
+
+
+ true
+
+
+ org.apache.maven.plugins
maven-failsafe-plugin
- 3.0.0-M5
+ 3.0.0-M6
@@ -111,17 +119,41 @@
+
+
+ org.pitest
+ pitest-maven
+ 1.10.3
+
+
+
+ com.songoda.core.*
+
+
+
+ com.songoda.core.SongodaCoreConstantsTest
+
+
+
+
+
+ org.pitest
+ pitest-junit5-plugin
+ 1.1.0
+
+
+
- songoda-public
- https://repo.songoda.com/repository/public/
+ songoda
+ https://repo.songoda.com/repository/minecraft-plugins/
- spigotmc-repo
+ SpigotMC
https://hub.spigotmc.org/nexus/content/repositories/snapshots/
@@ -131,7 +163,7 @@
- bg-repo
+ bg-software
https://repo.bg-software.com/repository/api/
@@ -140,6 +172,11 @@
https://repo.viaversion.com/
+
+ PaperMC
+ https://papermc.io/repo/repository/maven-public/
+
+
jitpack.io
https://jitpack.io/
@@ -160,7 +197,7 @@
org.jetbrains
annotations
- 23.0.0
+ 23.1.0
provided
@@ -179,21 +216,14 @@
org.junit.jupiter
junit-jupiter
- 5.8.1
+ 5.9.1
test
-
-
-
-
-
-
-
- com.github.seeseemelk
- MockBukkit-v1.17
- 1.10.3
+ org.mockito
+ mockito-inline
+ 4.11.0
test