From d121520e0f203580d6530d8a171797d750db82fa Mon Sep 17 00:00:00 2001 From: Dico200 Date: Tue, 30 Jan 2018 20:13:39 +0000 Subject: [PATCH] add repository layout, updateAdjacentComparators api --- .gitignore | 4 ++ Nms-v1_12_R1/pom.xml | 49 +++++++++++++++++ .../com/redstoner/nms/v1_12_R1/NmsDriver.java | 29 ++++++++++ pom.xml | 49 +++++++++++++++++ src/com/redstoner/nms/INmsDriver.java | 26 +++++++++ src/com/redstoner/nms/NmsFactory.java | 55 +++++++++++++++++++ 6 files changed, 212 insertions(+) create mode 100644 .gitignore create mode 100644 Nms-v1_12_R1/pom.xml create mode 100644 Nms-v1_12_R1/src/com/redstoner/nms/v1_12_R1/NmsDriver.java create mode 100644 pom.xml create mode 100644 src/com/redstoner/nms/INmsDriver.java create mode 100644 src/com/redstoner/nms/NmsFactory.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1b4101c --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.iml +.idea/ +out/ +target/ \ No newline at end of file diff --git a/Nms-v1_12_R1/pom.xml b/Nms-v1_12_R1/pom.xml new file mode 100644 index 0000000..41d5775 --- /dev/null +++ b/Nms-v1_12_R1/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + com.redstoner.nms + Nms-v1_12_R1 + 0.1 + + jar + + + 1.8 + 1.8 + + + + src + test + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + + + org.spigotmc + spigot + 1.12.2-R0.1-SNAPSHOT + system + D:/Resources/Java/minecraft/spigot-1.12.2.jar + + + + com.redstoner.nms + NmsApi + 0.1 + + + + + \ No newline at end of file diff --git a/Nms-v1_12_R1/src/com/redstoner/nms/v1_12_R1/NmsDriver.java b/Nms-v1_12_R1/src/com/redstoner/nms/v1_12_R1/NmsDriver.java new file mode 100644 index 0000000..4b24ce7 --- /dev/null +++ b/Nms-v1_12_R1/src/com/redstoner/nms/v1_12_R1/NmsDriver.java @@ -0,0 +1,29 @@ +package com.redstoner.nms.v1_12_R1; + +import com.redstoner.nms.INmsDriver; +import net.minecraft.server.v1_12_R1.BlockPosition; +import net.minecraft.server.v1_12_R1.IBlockData; +import net.minecraft.server.v1_12_R1.WorldServer; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; + +final class NmsDriver implements INmsDriver +{ + + @Override + public void updateAdjacentComparators(Block block) + { + updateAdjacentComparators(block.getWorld(), block.getX(), block.getY(), block.getZ()); + } + + @Override + public void updateAdjacentComparators(World world, int blockX, int blockY, int blockZ) + { + WorldServer handle = ((CraftWorld) world).getHandle(); + BlockPosition bp = new BlockPosition(blockX, blockY, blockZ); + IBlockData type = handle.c(bp); + handle.updateAdjacentComparators(bp, type.getBlock()); + } + +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..274328e --- /dev/null +++ b/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + com.redstoner.nms + NmsApi + 0.1 + + jar + + + 1.8 + 1.8 + + + + src + test + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + + + org.spigotmc + spigot-api + 1.8.8-R0.1-SNAPSHOT + provided + + + + org.bukkit + bukkit + 1.8.6-R0.1-SNAPSHOT + provided + + + + + \ No newline at end of file diff --git a/src/com/redstoner/nms/INmsDriver.java b/src/com/redstoner/nms/INmsDriver.java new file mode 100644 index 0000000..6365cb8 --- /dev/null +++ b/src/com/redstoner/nms/INmsDriver.java @@ -0,0 +1,26 @@ +package com.redstoner.nms; + +import org.bukkit.World; +import org.bukkit.block.Block; + +public interface INmsDriver +{ + + /** + * Update comparators adjacent to the given block + * + * @param block the block + */ + void updateAdjacentComparators(Block block); + + /** + * Update comparators adjacent to the given coordinates + * + * @param world the world + * @param blockX x coord + * @param blockY y coord + * @param blockZ z coord + */ + void updateAdjacentComparators(World world, int blockX, int blockY, int blockZ); + +} diff --git a/src/com/redstoner/nms/NmsFactory.java b/src/com/redstoner/nms/NmsFactory.java new file mode 100644 index 0000000..12b9789 --- /dev/null +++ b/src/com/redstoner/nms/NmsFactory.java @@ -0,0 +1,55 @@ +package com.redstoner.nms; + +import org.bukkit.Bukkit; + +import java.lang.reflect.Constructor; + +public class NmsFactory +{ + private static final String NMS_DRIVER_CLASS = "com.redstoner.nms.%s.NmsDriver"; + private static final INmsDriver driver; + private static final String nmsPackage; + + private static void logError(String description, Throwable error) { + Bukkit.getLogger().severe("[Nms API] " + description); + error.printStackTrace(); + } + + static { + /* + Static initialization should never throw an error + This would cause the error to propagate to the code that first uses the driver, + causing arbitrary parts of the server code to fail and other's to get null. + If an exception occurs during initialization, this is instead printed to the console. + */ + // get the nms package from the server + String[] split = Bukkit.getServer().getClass().getPackage().getName().split("\\."); + nmsPackage = split[split.length - 1]; + + // instantiate the driver + INmsDriver localDriver; + try { + String driverClassName = String.format(NMS_DRIVER_CLASS, nmsPackage); + Class driverClass = Class.forName(driverClassName); + // get no-arg constructor explicitly, because direct newInstance() requires the driver to be public + Constructor constructor = driverClass.getConstructor(); + constructor.setAccessible(true); + localDriver = (INmsDriver) constructor.newInstance(); + } catch (Exception ex) { + // could use a mock implementation here to avoid NPE + localDriver = null; + logError("reflectively instantiating the Nms Driver for version " + nmsPackage, ex); + } + + driver = localDriver; + } + + public static INmsDriver getDriver() { + return driver; + } + + public static String getNmsPackage() { + return nmsPackage; + } + +}