From 9007d32fd57f68deddf14dbe11fcaa3e729ddea7 Mon Sep 17 00:00:00 2001 From: Brianna Date: Wed, 22 Apr 2020 09:36:27 -0400 Subject: [PATCH] Added support for nbt tags. --- .../java/com/songoda/core/gui/AnvilGui.java | 6 +- .../java/com/songoda/core/nms/NmsManager.java | 87 ++-- .../{CoreNMS.java => anvil/AnvilCore.java} | 18 +- .../core/nms/{ => anvil}/CustomAnvil.java | 108 ++--- .../{ => anvil}/methods/AnvilTextChange.java | 12 +- .../com/songoda/core/nms/nbt/NBTCompound.java | 23 + .../src/com/songoda/core/nms/nbt/NBTCore.java | 11 + .../src/com/songoda/core/nms/nbt/NBTItem.java | 9 + .../com/songoda/core/nms/nbt/NBTObject.java | 18 + .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 42 +- .../nms/v1_10_R1/{ => anvil}/AnvilView.java | 406 +++++++++--------- .../nms/v1_10_R1/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_10_R1/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_10_R1/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_10_R1/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 44 +- .../nms/v1_11_R1/{ => anvil}/AnvilView.java | 406 +++++++++--------- .../nms/v1_11_R1/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_11_R1/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_11_R1/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_11_R1/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 44 +- .../nms/v1_12_R1/{ => anvil}/AnvilView.java | 370 ++++++++-------- .../nms/v1_12_R1/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_12_R1/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_12_R1/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_12_R1/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 44 +- .../nms/v1_13_R1/{ => anvil}/AnvilView.java | 376 ++++++++-------- .../nms/v1_13_R1/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_13_R1/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_13_R1/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_13_R1/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 44 +- .../nms/v1_13_R2/{ => anvil}/AnvilView.java | 372 ++++++++-------- .../nms/v1_13_R2/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_13_R2/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_13_R2/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_13_R2/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 7 +- .../{ => anvil}/AnvilInventoryCustom.java | 2 +- .../nms/v1_14_R1/{ => anvil}/AnvilView.java | 6 +- .../nms/v1_14_R1/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_14_R1/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_14_R1/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_14_R1/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 7 +- .../{ => anvil}/AnvilInventoryCustom.java | 2 +- .../nms/v1_15_R1/{ => anvil}/AnvilView.java | 6 +- .../nms/v1_15_R1/nbt/NBTCompoundImpl.java | 68 +++ .../core/nms/v1_15_R1/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_15_R1/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_15_R1/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 40 +- .../nms/v1_8_R1/{ => anvil}/AnvilView.java | 402 ++++++++--------- .../core/nms/v1_8_R1/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_8_R1/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_8_R1/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_8_R1/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 40 +- .../nms/v1_8_R2/{ => anvil}/AnvilView.java | 402 ++++++++--------- .../core/nms/v1_8_R2/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_8_R2/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_8_R2/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_8_R2/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 40 +- .../nms/v1_8_R3/{ => anvil}/AnvilView.java | 402 ++++++++--------- .../core/nms/v1_8_R3/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_8_R3/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_8_R3/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_8_R3/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 42 +- .../nms/v1_9_R1/{ => anvil}/AnvilView.java | 406 +++++++++--------- .../core/nms/v1_9_R1/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_9_R1/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_9_R1/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_9_R1/nbt/NBTObjectImpl.java | 40 ++ .../{NMS.java => anvil/AnvilCore.java} | 41 +- .../{ => anvil}/AnvilInventoryCustom.java | 42 +- .../nms/v1_9_R2/{ => anvil}/AnvilView.java | 404 ++++++++--------- .../core/nms/v1_9_R2/nbt/NBTCompoundImpl.java | 65 +++ .../core/nms/v1_9_R2/nbt/NBTCoreImpl.java | 21 + .../core/nms/v1_9_R2/nbt/NBTItemImpl.java | 20 + .../core/nms/v1_9_R2/nbt/NBTObjectImpl.java | 40 ++ 93 files changed, 4339 insertions(+), 2516 deletions(-) rename NMS/NMS-API/src/com/songoda/core/nms/{CoreNMS.java => anvil/AnvilCore.java} (75%) rename NMS/NMS-API/src/com/songoda/core/nms/{ => anvil}/CustomAnvil.java (88%) rename NMS/NMS-API/src/com/songoda/core/nms/{ => anvil}/methods/AnvilTextChange.java (57%) create mode 100644 NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCompound.java create mode 100644 NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCore.java create mode 100644 NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTItem.java create mode 100644 NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTObject.java rename NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/{ => anvil}/AnvilInventoryCustom.java (90%) rename NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/{ => anvil}/AnvilView.java (94%) create mode 100644 NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTObjectImpl.java rename NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/{ => anvil}/AnvilInventoryCustom.java (91%) rename NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/{ => anvil}/AnvilView.java (94%) create mode 100644 NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTObjectImpl.java rename NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/{ => anvil}/AnvilInventoryCustom.java (91%) rename NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/{ => anvil}/AnvilView.java (94%) create mode 100644 NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTObjectImpl.java rename NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/{ => anvil}/AnvilInventoryCustom.java (91%) rename NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/{ => anvil}/AnvilView.java (79%) create mode 100644 NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTObjectImpl.java rename NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/{ => anvil}/AnvilInventoryCustom.java (91%) rename NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/{ => anvil}/AnvilView.java (94%) create mode 100644 NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTObjectImpl.java rename NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/{NMS.java => anvil/AnvilCore.java} (78%) rename NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/{ => anvil}/AnvilInventoryCustom.java (93%) rename NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/{ => anvil}/AnvilView.java (98%) create mode 100644 NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTObjectImpl.java rename NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/{NMS.java => anvil/AnvilCore.java} (78%) rename NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/{ => anvil}/AnvilInventoryCustom.java (93%) rename NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/{ => anvil}/AnvilView.java (97%) create mode 100644 NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTObjectImpl.java rename NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/{ => anvil}/AnvilInventoryCustom.java (90%) rename NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/{ => anvil}/AnvilView.java (94%) create mode 100644 NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTObjectImpl.java rename NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/{ => anvil}/AnvilInventoryCustom.java (90%) rename NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/{ => anvil}/AnvilView.java (94%) create mode 100644 NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTObjectImpl.java rename NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/{ => anvil}/AnvilInventoryCustom.java (90%) rename NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/{ => anvil}/AnvilView.java (94%) create mode 100644 NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTObjectImpl.java rename NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/{ => anvil}/AnvilInventoryCustom.java (90%) rename NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/{ => anvil}/AnvilView.java (94%) create mode 100644 NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTObjectImpl.java rename NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/{NMS.java => anvil/AnvilCore.java} (72%) rename NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/{ => anvil}/AnvilInventoryCustom.java (90%) rename NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/{ => anvil}/AnvilView.java (94%) create mode 100644 NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCompoundImpl.java create mode 100644 NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCoreImpl.java create mode 100644 NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTItemImpl.java create mode 100644 NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTObjectImpl.java 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 30b70d56..68aff984 100644 --- a/Core/src/main/java/com/songoda/core/gui/AnvilGui.java +++ b/Core/src/main/java/com/songoda/core/gui/AnvilGui.java @@ -2,8 +2,8 @@ package com.songoda.core.gui; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.gui.methods.Clickable; -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; +import com.songoda.core.nms.anvil.AnvilCore; +import com.songoda.core.nms.anvil.CustomAnvil; import com.songoda.core.nms.NmsManager; import java.util.Arrays; import java.util.List; @@ -115,7 +115,7 @@ public class AnvilGui extends Gui { @Override protected void createInventory() { - CoreNMS nms = NmsManager.getNMS(); + AnvilCore nms = NmsManager.getAnvil(); if (nms != null) { anvil = nms.createAnvil(player, new GuiHolder(guiManager, this)); anvil.setCustomTitle(title); 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 d7fe0795..ba215fc6 100644 --- a/Core/src/main/java/com/songoda/core/nms/NmsManager.java +++ b/Core/src/main/java/com/songoda/core/nms/NmsManager.java @@ -1,57 +1,90 @@ package com.songoda.core.nms; +import com.songoda.core.nms.anvil.AnvilCore; +import com.songoda.core.nms.nbt.NBTCore; +import org.bukkit.Bukkit; + import java.util.logging.Level; import java.util.logging.Logger; -import org.bukkit.Bukkit; public class NmsManager { private final static String serverPackagePath = Bukkit.getServer().getClass().getPackage().getName(); private final static String serverPackageVersion = serverPackagePath.substring(serverPackagePath.lastIndexOf('.') + 1); - private final static CoreNMS nms = _getNMS(); + private final static AnvilCore anvil; + private final static NBTCore nbt; - private static CoreNMS _getNMS() { -// try { -// return (CoreNMS) Class.forName("com.songoda.core.nms." + serverPackageVersion + ".NMS").newInstance(); -// } catch (Exception ex) { -// Logger.getLogger(NmsManager.class.getName()).log(Level.SEVERE, "Failed to load NMS for this server version", ex); -// } - // this block was only added to keep minimizeJar happy + static { switch (serverPackageVersion) { case "v1_8_R1": - return new com.songoda.core.nms.v1_8_R1.NMS(); + anvil = new com.songoda.core.nms.v1_8_R1.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_8_R1.nbt.NBTCoreImpl(); + break; case "v1_8_R2": - return new com.songoda.core.nms.v1_8_R2.NMS(); + anvil = new com.songoda.core.nms.v1_8_R2.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_8_R2.nbt.NBTCoreImpl(); + break; case "v1_8_R3": - return new com.songoda.core.nms.v1_8_R3.NMS(); + anvil = new com.songoda.core.nms.v1_8_R3.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_8_R3.nbt.NBTCoreImpl(); + break; case "v1_9_R1": - return new com.songoda.core.nms.v1_9_R1.NMS(); + anvil = new com.songoda.core.nms.v1_9_R1.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_9_R1.nbt.NBTCoreImpl(); + break; case "v1_9_R2": - return new com.songoda.core.nms.v1_9_R2.NMS(); + anvil = new com.songoda.core.nms.v1_9_R2.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_9_R2.nbt.NBTCoreImpl(); + break; case "v1_10_R1": - return new com.songoda.core.nms.v1_10_R1.NMS(); + anvil = new com.songoda.core.nms.v1_10_R1.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_10_R1.nbt.NBTCoreImpl(); + break; case "v1_11_R1": - return new com.songoda.core.nms.v1_11_R1.NMS(); + anvil = new com.songoda.core.nms.v1_11_R1.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_11_R1.nbt.NBTCoreImpl(); + break; case "v1_12_R1": - return new com.songoda.core.nms.v1_12_R1.NMS(); + anvil = new com.songoda.core.nms.v1_12_R1.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_12_R1.nbt.NBTCoreImpl(); + break; case "v1_13_R1": - return new com.songoda.core.nms.v1_13_R1.NMS(); + anvil = new com.songoda.core.nms.v1_13_R1.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_13_R1.nbt.NBTCoreImpl(); + break; case "v1_13_R2": - return new com.songoda.core.nms.v1_13_R2.NMS(); + anvil = new com.songoda.core.nms.v1_13_R2.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_13_R2.nbt.NBTCoreImpl(); + break; case "v1_14_R1": - return new com.songoda.core.nms.v1_14_R1.NMS(); + anvil = new com.songoda.core.nms.v1_14_R1.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_14_R1.nbt.NBTCoreImpl(); + break; case "v1_15_R1": - return new com.songoda.core.nms.v1_15_R1.NMS(); + anvil = new com.songoda.core.nms.v1_15_R1.anvil.AnvilCore(); + nbt = new com.songoda.core.nms.v1_15_R1.nbt.NBTCoreImpl(); + break; + default: + Logger.getLogger(NmsManager.class.getName()).log(Level.SEVERE, "Failed to load NMS for this server version: version {0} not found", serverPackageVersion); + anvil = null; + nbt = null; + break; } - Logger.getLogger(NmsManager.class.getName()).log(Level.SEVERE, "Failed to load NMS for this server version: version {0} not found", serverPackageVersion); - return null; } - public static CoreNMS getNMS() { - return nms; + public static AnvilCore getAnvil() { + return anvil; } - public static boolean hasNMS() { - return nms != null; + public static boolean hasAnvil() { + return anvil != null; + } + + public static NBTCore getNbt() { + return nbt; + } + + public static boolean hasNbt() { + return nbt != null; } } diff --git a/NMS/NMS-API/src/com/songoda/core/nms/CoreNMS.java b/NMS/NMS-API/src/com/songoda/core/nms/anvil/AnvilCore.java similarity index 75% rename from NMS/NMS-API/src/com/songoda/core/nms/CoreNMS.java rename to NMS/NMS-API/src/com/songoda/core/nms/anvil/AnvilCore.java index f521f023..b1db43d8 100644 --- a/NMS/NMS-API/src/com/songoda/core/nms/CoreNMS.java +++ b/NMS/NMS-API/src/com/songoda/core/nms/anvil/AnvilCore.java @@ -1,9 +1,9 @@ -package com.songoda.core.nms; - -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public interface CoreNMS { - public CustomAnvil createAnvil(Player player); - public CustomAnvil createAnvil(Player player, InventoryHolder holder); -} +package com.songoda.core.nms.anvil; + +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public interface AnvilCore { + public CustomAnvil createAnvil(Player player); + public CustomAnvil createAnvil(Player player, InventoryHolder holder); +} diff --git a/NMS/NMS-API/src/com/songoda/core/nms/CustomAnvil.java b/NMS/NMS-API/src/com/songoda/core/nms/anvil/CustomAnvil.java similarity index 88% rename from NMS/NMS-API/src/com/songoda/core/nms/CustomAnvil.java rename to NMS/NMS-API/src/com/songoda/core/nms/anvil/CustomAnvil.java index 93665ddc..aebf137c 100644 --- a/NMS/NMS-API/src/com/songoda/core/nms/CustomAnvil.java +++ b/NMS/NMS-API/src/com/songoda/core/nms/anvil/CustomAnvil.java @@ -1,54 +1,54 @@ -package com.songoda.core.nms; - -import com.songoda.core.nms.methods.AnvilTextChange; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -/** - * NMS interface for creating an anvil view for a single player - * - * @since 2019-09-13 - * @author jascotty2 - */ -public interface CustomAnvil { - - public void setLevelCost(int cost); - - public int getLevelCost(); - - public void setCanUse(boolean bool); - - public String getCustomTitle(); - - public void setCustomTitle(String title); - - public String getRenameText(); - - public void setRenameText(String text); - - public void setOnChange(AnvilTextChange handler); - - public ItemStack getLeftInput(); - - public ItemStack getRightInput(); - - public ItemStack getOutput(); - - public void setLeftInput(ItemStack item); - - public void setRightInput(ItemStack item); - - public void setOutput(ItemStack item); - - public Inventory getInventory(); - - /** - * Open this anvil for the provided player - */ - public void open(); - - /** - * Force a redraw of the output - */ - public void update(); -} +package com.songoda.core.nms.anvil; + +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +/** + * NMS interface for creating an anvil view for a single player + * + * @since 2019-09-13 + * @author jascotty2 + */ +public interface CustomAnvil { + + public void setLevelCost(int cost); + + public int getLevelCost(); + + public void setCanUse(boolean bool); + + public String getCustomTitle(); + + public void setCustomTitle(String title); + + public String getRenameText(); + + public void setRenameText(String text); + + public void setOnChange(AnvilTextChange handler); + + public ItemStack getLeftInput(); + + public ItemStack getRightInput(); + + public ItemStack getOutput(); + + public void setLeftInput(ItemStack item); + + public void setRightInput(ItemStack item); + + public void setOutput(ItemStack item); + + public Inventory getInventory(); + + /** + * Open this anvil for the provided player + */ + public void open(); + + /** + * Force a redraw of the output + */ + public void update(); +} diff --git a/NMS/NMS-API/src/com/songoda/core/nms/methods/AnvilTextChange.java b/NMS/NMS-API/src/com/songoda/core/nms/anvil/methods/AnvilTextChange.java similarity index 57% rename from NMS/NMS-API/src/com/songoda/core/nms/methods/AnvilTextChange.java rename to NMS/NMS-API/src/com/songoda/core/nms/anvil/methods/AnvilTextChange.java index ab35618b..4e6af753 100644 --- a/NMS/NMS-API/src/com/songoda/core/nms/methods/AnvilTextChange.java +++ b/NMS/NMS-API/src/com/songoda/core/nms/anvil/methods/AnvilTextChange.java @@ -1,6 +1,6 @@ -package com.songoda.core.nms.methods; - -public interface AnvilTextChange { - - void onChange(); -} +package com.songoda.core.nms.anvil.methods; + +public interface AnvilTextChange { + + void onChange(); +} diff --git a/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCompound.java b/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCompound.java new file mode 100644 index 00000000..492740d4 --- /dev/null +++ b/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCompound.java @@ -0,0 +1,23 @@ +package com.songoda.core.nms.nbt; + +import java.util.List; + +public interface NBTCompound { + + NBTCompound set(String tag, String s); + + NBTCompound set(String tag, boolean b); + + NBTCompound set(String tag, int i); + + NBTCompound set(String tag, long l); + + NBTCompound set(String tag, short s); + + NBTCompound set(String tag, byte b); + + boolean has(String tag); + + NBTObject getNBTObject(String tag); + +} diff --git a/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCore.java b/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCore.java new file mode 100644 index 00000000..090c46e2 --- /dev/null +++ b/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCore.java @@ -0,0 +1,11 @@ +package com.songoda.core.nms.nbt; + +import org.bukkit.inventory.ItemStack; + +public interface NBTCore { + + NBTItem of(ItemStack item); + + NBTCompound newCompound(); + +} diff --git a/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTItem.java b/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTItem.java new file mode 100644 index 00000000..9df8771b --- /dev/null +++ b/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTItem.java @@ -0,0 +1,9 @@ +package com.songoda.core.nms.nbt; + +import org.bukkit.inventory.ItemStack; + +public interface NBTItem extends NBTCompound { + + ItemStack finish(); + +} diff --git a/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTObject.java b/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTObject.java new file mode 100644 index 00000000..cfd5eb2b --- /dev/null +++ b/NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTObject.java @@ -0,0 +1,18 @@ +package com.songoda.core.nms.nbt; + +import java.util.List; + +public interface NBTObject { + + String asString(); + + boolean asBoolean(); + + int asInt(); + + long asLong(); + + short asShort(); + + byte asByte(); +} diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/NMS.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/NMS.java rename to NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/anvil/AnvilCore.java index 79c9ed9f..07da98de 100644 --- a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/NMS.java +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_10_R1; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_10_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/AnvilInventoryCustom.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/anvil/AnvilInventoryCustom.java similarity index 90% rename from NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/AnvilInventoryCustom.java rename to NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/anvil/AnvilInventoryCustom.java index 59189965..386f4f47 100644 --- a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/anvil/AnvilInventoryCustom.java @@ -1,21 +1,21 @@ -package com.songoda.core.nms.v1_10_R1; - -import net.minecraft.server.v1_10_R1.IInventory; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventoryAnvil; -import org.bukkit.inventory.InventoryHolder; - -public class AnvilInventoryCustom extends CraftInventoryAnvil { - - final InventoryHolder holder; - - public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) { - super(location, inventory, resultInventory); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_10_R1.anvil; + +import net.minecraft.server.v1_10_R1.IInventory; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventoryAnvil; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilInventoryCustom extends CraftInventoryAnvil { + + final InventoryHolder holder; + + public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) { + super(location, inventory, resultInventory); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/AnvilView.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/anvil/AnvilView.java similarity index 94% rename from NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/AnvilView.java rename to NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/anvil/AnvilView.java index 200860f6..6b5fc407 100644 --- a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/AnvilView.java +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/anvil/AnvilView.java @@ -1,203 +1,203 @@ -package com.songoda.core.nms.v1_10_R1; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_10_R1.BlockPosition; -import net.minecraft.server.v1_10_R1.ChatMessage; -import net.minecraft.server.v1_10_R1.ContainerAnvil; -import net.minecraft.server.v1_10_R1.EntityHuman; -import net.minecraft.server.v1_10_R1.EntityPlayer; -import net.minecraft.server.v1_10_R1.IInventory; -import net.minecraft.server.v1_10_R1.PacketPlayOutOpenWindow; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - private final EntityPlayer entity; - private final Inventory inventory; - private String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - // used for grabbing the rename text string - static Field mc_ContainerAnvil_renameText; - - static { - try { - mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); - mc_ContainerAnvil_renameText.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - new Location(entity.world.getWorld(), 0, 0, 0), - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this)); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean a(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void e() { - super.e(); - if (cost >= 0) { - this.a = cost; - } - } - - @Override - public void update() { - e(); - } - - @Override - public String getRenameText() { - try { - //return this.l; - return (String) mc_ContainerAnvil_renameText.get(this); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - return null; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.a; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } - -} +package com.songoda.core.nms.v1_10_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import java.lang.reflect.Field; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_10_R1.BlockPosition; +import net.minecraft.server.v1_10_R1.ChatMessage; +import net.minecraft.server.v1_10_R1.ContainerAnvil; +import net.minecraft.server.v1_10_R1.EntityHuman; +import net.minecraft.server.v1_10_R1.EntityPlayer; +import net.minecraft.server.v1_10_R1.IInventory; +import net.minecraft.server.v1_10_R1.PacketPlayOutOpenWindow; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AnvilView extends ContainerAnvil implements CustomAnvil { + + private final EntityPlayer entity; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + // used for grabbing the rename text string + static Field mc_ContainerAnvil_renameText; + + static { + try { + mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); + mc_ContainerAnvil_renameText.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + new Location(entity.world.getWorld(), 0, 0, 0), + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this)); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean a(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void e() { + super.e(); + if (cost >= 0) { + this.a = cost; + } + } + + @Override + public void update() { + e(); + } + + @Override + public String getRenameText() { + try { + //return this.l; + return (String) mc_ContainerAnvil_renameText.get(this); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + return null; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.a; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } + +} diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..898ef63b --- /dev/null +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_10_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_10_R1.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCoreImpl.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..21aab0f6 --- /dev/null +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_10_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTItemImpl.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTItemImpl.java new file mode 100644 index 00000000..64bab8a0 --- /dev/null +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_10_R1.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_10_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_10_R1.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_10_R1.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTObjectImpl.java b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..9d81f77c --- /dev/null +++ b/NMS/NMS-v1_10_R1/src/com/songoda/core/nms/v1_10_R1/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_10_R1.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_10_R1.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/NMS.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/NMS.java rename to NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/anvil/AnvilCore.java index 790a9cff..25ff6171 100644 --- a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/NMS.java +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_11_R1; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_11_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/AnvilInventoryCustom.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/anvil/AnvilInventoryCustom.java similarity index 91% rename from NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/AnvilInventoryCustom.java rename to NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/anvil/AnvilInventoryCustom.java index 5ae4b2ef..5e224773 100644 --- a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/anvil/AnvilInventoryCustom.java @@ -1,22 +1,22 @@ -package com.songoda.core.nms.v1_11_R1; - -import net.minecraft.server.v1_11_R1.ContainerAnvil; -import net.minecraft.server.v1_11_R1.IInventory; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventoryAnvil; -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) { - super(location, inventory, resultInventory, container); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_11_R1.anvil; + +import net.minecraft.server.v1_11_R1.ContainerAnvil; +import net.minecraft.server.v1_11_R1.IInventory; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventoryAnvil; +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) { + super(location, inventory, resultInventory, container); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/AnvilView.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/anvil/AnvilView.java similarity index 94% rename from NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/AnvilView.java rename to NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/anvil/AnvilView.java index 8bb65e10..fedb7dd0 100644 --- a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/AnvilView.java +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/anvil/AnvilView.java @@ -1,203 +1,203 @@ -package com.songoda.core.nms.v1_11_R1; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_11_R1.BlockPosition; -import net.minecraft.server.v1_11_R1.ChatMessage; -import net.minecraft.server.v1_11_R1.ContainerAnvil; -import net.minecraft.server.v1_11_R1.EntityHuman; -import net.minecraft.server.v1_11_R1.EntityPlayer; -import net.minecraft.server.v1_11_R1.IInventory; -import net.minecraft.server.v1_11_R1.PacketPlayOutOpenWindow; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - private final EntityPlayer entity; - private final Inventory inventory; - private String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - // used for grabbing the rename text string - static Field mc_ContainerAnvil_renameText; - - static { - try { - mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); - mc_ContainerAnvil_renameText.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - new Location(entity.world.getWorld(), 0, 0, 0), - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this), this); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean a(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void e() { - super.e(); - if (cost >= 0) { - this.a = cost; - } - } - - @Override - public void update() { - e(); - } - - @Override - public String getRenameText() { - try { - //return this.l; - return (String) mc_ContainerAnvil_renameText.get(this); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - return null; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.a; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } - -} +package com.songoda.core.nms.v1_11_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import java.lang.reflect.Field; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_11_R1.BlockPosition; +import net.minecraft.server.v1_11_R1.ChatMessage; +import net.minecraft.server.v1_11_R1.ContainerAnvil; +import net.minecraft.server.v1_11_R1.EntityHuman; +import net.minecraft.server.v1_11_R1.EntityPlayer; +import net.minecraft.server.v1_11_R1.IInventory; +import net.minecraft.server.v1_11_R1.PacketPlayOutOpenWindow; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AnvilView extends ContainerAnvil implements CustomAnvil { + + private final EntityPlayer entity; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + // used for grabbing the rename text string + static Field mc_ContainerAnvil_renameText; + + static { + try { + mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); + mc_ContainerAnvil_renameText.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + new Location(entity.world.getWorld(), 0, 0, 0), + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this), this); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean a(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void e() { + super.e(); + if (cost >= 0) { + this.a = cost; + } + } + + @Override + public void update() { + e(); + } + + @Override + public String getRenameText() { + try { + //return this.l; + return (String) mc_ContainerAnvil_renameText.get(this); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + return null; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.a; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } + +} diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..fd9e860c --- /dev/null +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_11_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_11_R1.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCoreImpl.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..1269a30e --- /dev/null +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_11_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTItemImpl.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTItemImpl.java new file mode 100644 index 00000000..e7be3924 --- /dev/null +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_11_R1.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_11_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_11_R1.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_11_R1.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTObjectImpl.java b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..8f39aa0c --- /dev/null +++ b/NMS/NMS-v1_11_R1/src/com/songoda/core/nms/v1_11_R1/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_11_R1.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_11_R1.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/NMS.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/NMS.java rename to NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/anvil/AnvilCore.java index 33dc109f..34efd7b5 100644 --- a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/NMS.java +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_12_R1; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_12_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/AnvilInventoryCustom.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/anvil/AnvilInventoryCustom.java similarity index 91% rename from NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/AnvilInventoryCustom.java rename to NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/anvil/AnvilInventoryCustom.java index b4f9ae63..0577ccbd 100644 --- a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/anvil/AnvilInventoryCustom.java @@ -1,22 +1,22 @@ -package com.songoda.core.nms.v1_12_R1; - -import net.minecraft.server.v1_12_R1.ContainerAnvil; -import net.minecraft.server.v1_12_R1.IInventory; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryAnvil; -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) { - super(location, inventory, resultInventory, container); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_12_R1.anvil; + +import net.minecraft.server.v1_12_R1.ContainerAnvil; +import net.minecraft.server.v1_12_R1.IInventory; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryAnvil; +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) { + super(location, inventory, resultInventory, container); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/AnvilView.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/anvil/AnvilView.java similarity index 94% rename from NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/AnvilView.java rename to NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/anvil/AnvilView.java index 5dd83627..b3b87c34 100644 --- a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/AnvilView.java +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/anvil/AnvilView.java @@ -1,185 +1,185 @@ -package com.songoda.core.nms.v1_12_R1; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_12_R1.BlockPosition; -import net.minecraft.server.v1_12_R1.ChatMessage; -import net.minecraft.server.v1_12_R1.ContainerAnvil; -import net.minecraft.server.v1_12_R1.EntityHuman; -import net.minecraft.server.v1_12_R1.EntityPlayer; -import net.minecraft.server.v1_12_R1.IInventory; -import net.minecraft.server.v1_12_R1.PacketPlayOutOpenWindow; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - private final EntityPlayer entity; - private final Inventory inventory; - private String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - new Location(entity.world.getWorld(), 0, 0, 0), - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this), this); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean canUse(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void e() { - super.e(); - if (cost >= 0) { - this.levelCost = cost; - } - } - - @Override - public void update() { - e(); - } - - @Override - public String getRenameText() { - return this.renameText; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.levelCost; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } - -} +package com.songoda.core.nms.v1_12_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import java.lang.reflect.Field; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_12_R1.BlockPosition; +import net.minecraft.server.v1_12_R1.ChatMessage; +import net.minecraft.server.v1_12_R1.ContainerAnvil; +import net.minecraft.server.v1_12_R1.EntityHuman; +import net.minecraft.server.v1_12_R1.EntityPlayer; +import net.minecraft.server.v1_12_R1.IInventory; +import net.minecraft.server.v1_12_R1.PacketPlayOutOpenWindow; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AnvilView extends ContainerAnvil implements CustomAnvil { + + private final EntityPlayer entity; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + new Location(entity.world.getWorld(), 0, 0, 0), + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this), this); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean canUse(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void e() { + super.e(); + if (cost >= 0) { + this.levelCost = cost; + } + } + + @Override + public void update() { + e(); + } + + @Override + public String getRenameText() { + return this.renameText; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.levelCost; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } + +} diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..7664021d --- /dev/null +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_12_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_12_R1.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCoreImpl.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..2abb9594 --- /dev/null +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_12_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTItemImpl.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTItemImpl.java new file mode 100644 index 00000000..e5e62c0c --- /dev/null +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_12_R1.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_12_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_12_R1.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_12_R1.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTObjectImpl.java b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..2aed8939 --- /dev/null +++ b/NMS/NMS-v1_12_R1/src/com/songoda/core/nms/v1_12_R1/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_12_R1.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_12_R1.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/NMS.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/NMS.java rename to NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/anvil/AnvilCore.java index c63074ae..7701fd14 100644 --- a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/NMS.java +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_13_R1; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_13_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/AnvilInventoryCustom.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/anvil/AnvilInventoryCustom.java similarity index 91% rename from NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/AnvilInventoryCustom.java rename to NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/anvil/AnvilInventoryCustom.java index 2ef4bbde..2d008ed7 100644 --- a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/anvil/AnvilInventoryCustom.java @@ -1,22 +1,22 @@ -package com.songoda.core.nms.v1_13_R1; - -import net.minecraft.server.v1_13_R1.ContainerAnvil; -import net.minecraft.server.v1_13_R1.IInventory; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftInventoryAnvil; -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) { - super(location, inventory, resultInventory, container); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_13_R1.anvil; + +import net.minecraft.server.v1_13_R1.ContainerAnvil; +import net.minecraft.server.v1_13_R1.IInventory; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftInventoryAnvil; +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) { + super(location, inventory, resultInventory, container); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/AnvilView.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/anvil/AnvilView.java similarity index 79% rename from NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/AnvilView.java rename to NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/anvil/AnvilView.java index 726b39be..228ff68b 100644 --- a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/AnvilView.java +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/anvil/AnvilView.java @@ -1,195 +1,181 @@ -package com.songoda.core.nms.v1_13_R1; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_13_R1.BlockPosition; -import net.minecraft.server.v1_13_R1.ChatMessage; -import net.minecraft.server.v1_13_R1.ContainerAnvil; -import net.minecraft.server.v1_13_R1.EntityHuman; -import net.minecraft.server.v1_13_R1.EntityPlayer; -import net.minecraft.server.v1_13_R1.IInventory; -import net.minecraft.server.v1_13_R1.PacketPlayOutOpenWindow; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - EntityPlayer entity; - Inventory inventory; - String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("repairInventory"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("resultInventory"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - } catch (NoSuchFieldException ignore) { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.checkReachable = false; - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - new Location(entity.world.getWorld(), 0, 0, 0), - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this), this); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean canUse(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void d() { - super.d(); - if (cost >= 0) { - this.levelCost = cost; - } - } - - @Override - public void update() { - d(); - } - - @Override - public String getRenameText() { - return this.renameText; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.levelCost; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } - -} +package com.songoda.core.nms.v1_13_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import net.minecraft.server.v1_13_R1.*; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +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; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("repairInventory"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("resultInventory"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.checkReachable = false; + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + new Location(entity.world.getWorld(), 0, 0, 0), + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this), this); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean canUse(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void d() { + super.d(); + if (cost >= 0) { + this.levelCost = cost; + } + } + + @Override + public void update() { + d(); + } + + @Override + public String getRenameText() { + return this.renameText; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.levelCost; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } + +} diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..1d8b3062 --- /dev/null +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_13_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_13_R1.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCoreImpl.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..b8d331a9 --- /dev/null +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_13_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTItemImpl.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTItemImpl.java new file mode 100644 index 00000000..d67ba96e --- /dev/null +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_13_R1.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_13_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_13_R1.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_13_R1.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTObjectImpl.java b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..282c736f --- /dev/null +++ b/NMS/NMS-v1_13_R1/src/com/songoda/core/nms/v1_13_R1/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_13_R1.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_13_R1.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/NMS.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/NMS.java rename to NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/anvil/AnvilCore.java index 8403b149..ab0a8dec 100644 --- a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/NMS.java +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_13_R2; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_13_R2.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/AnvilInventoryCustom.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/anvil/AnvilInventoryCustom.java similarity index 91% rename from NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/AnvilInventoryCustom.java rename to NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/anvil/AnvilInventoryCustom.java index 0d5ee1e5..a337b49b 100644 --- a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/anvil/AnvilInventoryCustom.java @@ -1,22 +1,22 @@ -package com.songoda.core.nms.v1_13_R2; - -import net.minecraft.server.v1_13_R2.ContainerAnvil; -import net.minecraft.server.v1_13_R2.IInventory; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftInventoryAnvil; -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) { - super(location, inventory, resultInventory, container); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_13_R2.anvil; + +import net.minecraft.server.v1_13_R2.ContainerAnvil; +import net.minecraft.server.v1_13_R2.IInventory; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftInventoryAnvil; +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) { + super(location, inventory, resultInventory, container); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/AnvilView.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/anvil/AnvilView.java similarity index 94% rename from NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/AnvilView.java rename to NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/anvil/AnvilView.java index d5aafa33..68f2b7a1 100644 --- a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/AnvilView.java +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/anvil/AnvilView.java @@ -1,186 +1,186 @@ -package com.songoda.core.nms.v1_13_R2; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_13_R2.BlockPosition; -import net.minecraft.server.v1_13_R2.ChatMessage; -import net.minecraft.server.v1_13_R2.ContainerAnvil; -import net.minecraft.server.v1_13_R2.EntityHuman; -import net.minecraft.server.v1_13_R2.EntityPlayer; -import net.minecraft.server.v1_13_R2.IInventory; -import net.minecraft.server.v1_13_R2.PacketPlayOutOpenWindow; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - private final EntityPlayer entity; - private final Inventory inventory; - private String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("repairInventory"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("resultInventory"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.checkReachable = false; - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - new Location(entity.world.getWorld(), 0, 0, 0), - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this), this); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean canUse(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void d() { - super.d(); - if (cost >= 0) { - this.levelCost = cost; - } - } - - @Override - public void update() { - d(); - } - - @Override - public String getRenameText() { - return this.renameText; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.levelCost; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } - -} +package com.songoda.core.nms.v1_13_R2.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import java.lang.reflect.Field; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_13_R2.BlockPosition; +import net.minecraft.server.v1_13_R2.ChatMessage; +import net.minecraft.server.v1_13_R2.ContainerAnvil; +import net.minecraft.server.v1_13_R2.EntityHuman; +import net.minecraft.server.v1_13_R2.EntityPlayer; +import net.minecraft.server.v1_13_R2.IInventory; +import net.minecraft.server.v1_13_R2.PacketPlayOutOpenWindow; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AnvilView extends ContainerAnvil implements CustomAnvil { + + private final EntityPlayer entity; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("repairInventory"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("resultInventory"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.checkReachable = false; + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + new Location(entity.world.getWorld(), 0, 0, 0), + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this), this); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean canUse(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void d() { + super.d(); + if (cost >= 0) { + this.levelCost = cost; + } + } + + @Override + public void update() { + d(); + } + + @Override + public String getRenameText() { + return this.renameText; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.levelCost; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } + +} diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..6805bc1a --- /dev/null +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_13_R2.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_13_R2.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCoreImpl.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..90d38263 --- /dev/null +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_13_R2.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTItemImpl.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTItemImpl.java new file mode 100644 index 00000000..9d33d858 --- /dev/null +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_13_R2.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_13_R2.NBTTagCompound; +import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_13_R2.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_13_R2.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTObjectImpl.java b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..3f01e8cb --- /dev/null +++ b/NMS/NMS-v1_13_R2/src/com/songoda/core/nms/v1_13_R2/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_13_R2.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_13_R2.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/NMS.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/anvil/AnvilCore.java similarity index 78% rename from NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/NMS.java rename to NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/anvil/AnvilCore.java index 499cc38c..b8454093 100644 --- a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/NMS.java +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/anvil/AnvilCore.java @@ -1,13 +1,12 @@ -package com.songoda.core.nms.v1_14_R1; +package com.songoda.core.nms.v1_14_R1.anvil; -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; +import com.songoda.core.nms.anvil.CustomAnvil; import net.minecraft.server.v1_14_R1.EntityPlayer; import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryHolder; -public class NMS implements CoreNMS { +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { @Override public CustomAnvil createAnvil(Player player) { diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/AnvilInventoryCustom.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/anvil/AnvilInventoryCustom.java similarity index 93% rename from NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/AnvilInventoryCustom.java rename to NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/anvil/AnvilInventoryCustom.java index d1b112d4..4a36625a 100644 --- a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/anvil/AnvilInventoryCustom.java @@ -1,4 +1,4 @@ -package com.songoda.core.nms.v1_14_R1; +package com.songoda.core.nms.v1_14_R1.anvil; import net.minecraft.server.v1_14_R1.ContainerAnvil; import net.minecraft.server.v1_14_R1.IInventory; diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/AnvilView.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/anvil/AnvilView.java similarity index 98% rename from NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/AnvilView.java rename to NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/anvil/AnvilView.java index e89f2b65..b5be1a27 100644 --- a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/AnvilView.java +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/anvil/AnvilView.java @@ -1,7 +1,7 @@ -package com.songoda.core.nms.v1_14_R1; +package com.songoda.core.nms.v1_14_R1.anvil; -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.logging.Level; diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..f1b2b0b6 --- /dev/null +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_14_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_14_R1.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCoreImpl.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..0f80ce91 --- /dev/null +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_14_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTItemImpl.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTItemImpl.java new file mode 100644 index 00000000..8a915f26 --- /dev/null +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_14_R1.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_14_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_14_R1.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_14_R1.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTObjectImpl.java b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..cb089795 --- /dev/null +++ b/NMS/NMS-v1_14_R1/src/com/songoda/core/nms/v1_14_R1/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_14_R1.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_14_R1.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/NMS.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/anvil/AnvilCore.java similarity index 78% rename from NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/NMS.java rename to NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/anvil/AnvilCore.java index 2e546a99..ce6e942f 100644 --- a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/NMS.java +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/anvil/AnvilCore.java @@ -1,13 +1,12 @@ -package com.songoda.core.nms.v1_15_R1; +package com.songoda.core.nms.v1_15_R1.anvil; -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; +import com.songoda.core.nms.anvil.CustomAnvil; import net.minecraft.server.v1_15_R1.EntityPlayer; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryHolder; -public class NMS implements CoreNMS { +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { @Override public CustomAnvil createAnvil(Player player) { diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/AnvilInventoryCustom.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/anvil/AnvilInventoryCustom.java similarity index 93% rename from NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/AnvilInventoryCustom.java rename to NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/anvil/AnvilInventoryCustom.java index 3f3d69c4..199fa4c2 100644 --- a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/anvil/AnvilInventoryCustom.java @@ -1,4 +1,4 @@ -package com.songoda.core.nms.v1_15_R1; +package com.songoda.core.nms.v1_15_R1.anvil; import net.minecraft.server.v1_15_R1.ContainerAnvil; import net.minecraft.server.v1_15_R1.IInventory; diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/AnvilView.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/anvil/AnvilView.java similarity index 97% rename from NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/AnvilView.java rename to NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/anvil/AnvilView.java index d6bb7253..1b759d24 100644 --- a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/AnvilView.java +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/anvil/AnvilView.java @@ -1,7 +1,7 @@ -package com.songoda.core.nms.v1_15_R1; +package com.songoda.core.nms.v1_15_R1.anvil; -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..ddbfc3f9 --- /dev/null +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCompoundImpl.java @@ -0,0 +1,68 @@ +package com.songoda.core.nms.v1_15_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_15_R1.NBTTagCompound; +import net.minecraft.server.v1_15_R1.NBTTagList; + +import java.util.List; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCoreImpl.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..41bc07b4 --- /dev/null +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_15_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTItemImpl.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTItemImpl.java new file mode 100644 index 00000000..63b1203c --- /dev/null +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_15_R1.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_15_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_15_R1.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_15_R1.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTObjectImpl.java b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..917edcb7 --- /dev/null +++ b/NMS/NMS-v1_15_R1/src/com/songoda/core/nms/v1_15_R1/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_15_R1.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_15_R1.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/NMS.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/NMS.java rename to NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/anvil/AnvilCore.java index fd5bac2e..a5b00d86 100644 --- a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/NMS.java +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_8_R1; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_8_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/AnvilInventoryCustom.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/anvil/AnvilInventoryCustom.java similarity index 90% rename from NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/AnvilInventoryCustom.java rename to NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/anvil/AnvilInventoryCustom.java index 0978cdf3..7a15c047 100644 --- a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/anvil/AnvilInventoryCustom.java @@ -1,20 +1,20 @@ -package com.songoda.core.nms.v1_8_R1; - -import net.minecraft.server.v1_8_R1.IInventory; -import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryAnvil; -import org.bukkit.inventory.InventoryHolder; - -public class AnvilInventoryCustom extends CraftInventoryAnvil { - - final InventoryHolder holder; - - public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) { - super(inventory, resultInventory); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_8_R1.anvil; + +import net.minecraft.server.v1_8_R1.IInventory; +import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryAnvil; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilInventoryCustom extends CraftInventoryAnvil { + + final InventoryHolder holder; + + public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) { + super(inventory, resultInventory); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/AnvilView.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/anvil/AnvilView.java similarity index 94% rename from NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/AnvilView.java rename to NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/anvil/AnvilView.java index 50e9ea96..d1b06f64 100644 --- a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/AnvilView.java +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/anvil/AnvilView.java @@ -1,201 +1,201 @@ -package com.songoda.core.nms.v1_8_R1; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_8_R1.BlockPosition; -import net.minecraft.server.v1_8_R1.ChatMessage; -import net.minecraft.server.v1_8_R1.ContainerAnvil; -import net.minecraft.server.v1_8_R1.EntityHuman; -import net.minecraft.server.v1_8_R1.EntityPlayer; -import net.minecraft.server.v1_8_R1.IInventory; -import net.minecraft.server.v1_8_R1.PacketPlayOutOpenWindow; -import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - private final EntityPlayer entity; - private final Inventory inventory; - private String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - // used for grabbing the rename text string - static Field mc_ContainerAnvil_renameText; - - static { - try { - mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); - mc_ContainerAnvil_renameText.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this)); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean a(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void e() { - super.e(); - if (cost >= 0) { - this.a = cost; - } - } - - @Override - public void update() { - e(); - } - - @Override - public String getRenameText() { - try { - //return this.l; - return (String) mc_ContainerAnvil_renameText.get(this); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - return null; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.a; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } - -} +package com.songoda.core.nms.v1_8_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import java.lang.reflect.Field; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_8_R1.BlockPosition; +import net.minecraft.server.v1_8_R1.ChatMessage; +import net.minecraft.server.v1_8_R1.ContainerAnvil; +import net.minecraft.server.v1_8_R1.EntityHuman; +import net.minecraft.server.v1_8_R1.EntityPlayer; +import net.minecraft.server.v1_8_R1.IInventory; +import net.minecraft.server.v1_8_R1.PacketPlayOutOpenWindow; +import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AnvilView extends ContainerAnvil implements CustomAnvil { + + private final EntityPlayer entity; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + // used for grabbing the rename text string + static Field mc_ContainerAnvil_renameText; + + static { + try { + mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); + mc_ContainerAnvil_renameText.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this)); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean a(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void e() { + super.e(); + if (cost >= 0) { + this.a = cost; + } + } + + @Override + public void update() { + e(); + } + + @Override + public String getRenameText() { + try { + //return this.l; + return (String) mc_ContainerAnvil_renameText.get(this); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + return null; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.a; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } + +} diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..ae86fcaf --- /dev/null +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_8_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_8_R1.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCoreImpl.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..b2e7fc37 --- /dev/null +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_8_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTItemImpl.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTItemImpl.java new file mode 100644 index 00000000..b81f251d --- /dev/null +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_8_R1.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_8_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_8_R1.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_8_R1.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTObjectImpl.java b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..86b0fa9c --- /dev/null +++ b/NMS/NMS-v1_8_R1/src/com/songoda/core/nms/v1_8_R1/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_8_R1.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_8_R1.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/NMS.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/NMS.java rename to NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/anvil/AnvilCore.java index fa8949a4..e44d1f3f 100644 --- a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/NMS.java +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_8_R2; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_8_R2.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/AnvilInventoryCustom.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/anvil/AnvilInventoryCustom.java similarity index 90% rename from NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/AnvilInventoryCustom.java rename to NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/anvil/AnvilInventoryCustom.java index 62921226..b5824b4a 100644 --- a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/anvil/AnvilInventoryCustom.java @@ -1,20 +1,20 @@ -package com.songoda.core.nms.v1_8_R2; - -import net.minecraft.server.v1_8_R2.IInventory; -import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventoryAnvil; -import org.bukkit.inventory.InventoryHolder; - -public class AnvilInventoryCustom extends CraftInventoryAnvil { - - final InventoryHolder holder; - - public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) { - super(inventory, resultInventory); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_8_R2.anvil; + +import net.minecraft.server.v1_8_R2.IInventory; +import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventoryAnvil; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilInventoryCustom extends CraftInventoryAnvil { + + final InventoryHolder holder; + + public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) { + super(inventory, resultInventory); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/AnvilView.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/anvil/AnvilView.java similarity index 94% rename from NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/AnvilView.java rename to NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/anvil/AnvilView.java index e7d20410..b23debf4 100644 --- a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/AnvilView.java +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/anvil/AnvilView.java @@ -1,201 +1,201 @@ -package com.songoda.core.nms.v1_8_R2; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_8_R2.BlockPosition; -import net.minecraft.server.v1_8_R2.ChatMessage; -import net.minecraft.server.v1_8_R2.ContainerAnvil; -import net.minecraft.server.v1_8_R2.EntityHuman; -import net.minecraft.server.v1_8_R2.EntityPlayer; -import net.minecraft.server.v1_8_R2.IInventory; -import net.minecraft.server.v1_8_R2.PacketPlayOutOpenWindow; -import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - private final EntityPlayer entity; - private final Inventory inventory; - private String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - // used for grabbing the rename text string - static Field mc_ContainerAnvil_renameText; - - static { - try { - mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); - mc_ContainerAnvil_renameText.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this)); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean a(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void e() { - super.e(); - if (cost >= 0) { - this.a = cost; - } - } - - @Override - public void update() { - e(); - } - - @Override - public String getRenameText() { - try { - //return this.l; - return (String) mc_ContainerAnvil_renameText.get(this); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - return null; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.a; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } - -} +package com.songoda.core.nms.v1_8_R2.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import java.lang.reflect.Field; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_8_R2.BlockPosition; +import net.minecraft.server.v1_8_R2.ChatMessage; +import net.minecraft.server.v1_8_R2.ContainerAnvil; +import net.minecraft.server.v1_8_R2.EntityHuman; +import net.minecraft.server.v1_8_R2.EntityPlayer; +import net.minecraft.server.v1_8_R2.IInventory; +import net.minecraft.server.v1_8_R2.PacketPlayOutOpenWindow; +import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AnvilView extends ContainerAnvil implements CustomAnvil { + + private final EntityPlayer entity; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + // used for grabbing the rename text string + static Field mc_ContainerAnvil_renameText; + + static { + try { + mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); + mc_ContainerAnvil_renameText.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this)); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean a(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void e() { + super.e(); + if (cost >= 0) { + this.a = cost; + } + } + + @Override + public void update() { + e(); + } + + @Override + public String getRenameText() { + try { + //return this.l; + return (String) mc_ContainerAnvil_renameText.get(this); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + return null; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.a; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } + +} diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..3b34335e --- /dev/null +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_8_R2.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_8_R2.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCoreImpl.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..3d3447f1 --- /dev/null +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_8_R2.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTItemImpl.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTItemImpl.java new file mode 100644 index 00000000..cee025b6 --- /dev/null +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_8_R2.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_8_R2.NBTTagCompound; +import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_8_R2.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_8_R2.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTObjectImpl.java b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..77f0ce70 --- /dev/null +++ b/NMS/NMS-v1_8_R2/src/com/songoda/core/nms/v1_8_R2/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_8_R2.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_8_R2.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/NMS.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/NMS.java rename to NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/anvil/AnvilCore.java index ffb918f0..7e3f64a3 100644 --- a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/NMS.java +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_8_R3; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_8_R3.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/AnvilInventoryCustom.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/anvil/AnvilInventoryCustom.java similarity index 90% rename from NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/AnvilInventoryCustom.java rename to NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/anvil/AnvilInventoryCustom.java index 3fea2f9b..3fe1e044 100644 --- a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/anvil/AnvilInventoryCustom.java @@ -1,20 +1,20 @@ -package com.songoda.core.nms.v1_8_R3; - -import net.minecraft.server.v1_8_R3.IInventory; -import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryAnvil; -import org.bukkit.inventory.InventoryHolder; - -public class AnvilInventoryCustom extends CraftInventoryAnvil { - - final InventoryHolder holder; - - public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) { - super(inventory, resultInventory); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_8_R3.anvil; + +import net.minecraft.server.v1_8_R3.IInventory; +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryAnvil; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilInventoryCustom extends CraftInventoryAnvil { + + final InventoryHolder holder; + + public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) { + super(inventory, resultInventory); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/AnvilView.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/anvil/AnvilView.java similarity index 94% rename from NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/AnvilView.java rename to NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/anvil/AnvilView.java index 3381c44f..14fcd803 100644 --- a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/AnvilView.java +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/anvil/AnvilView.java @@ -1,201 +1,201 @@ -package com.songoda.core.nms.v1_8_R3; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_8_R3.BlockPosition; -import net.minecraft.server.v1_8_R3.ChatMessage; -import net.minecraft.server.v1_8_R3.ContainerAnvil; -import net.minecraft.server.v1_8_R3.EntityHuman; -import net.minecraft.server.v1_8_R3.EntityPlayer; -import net.minecraft.server.v1_8_R3.IInventory; -import net.minecraft.server.v1_8_R3.PacketPlayOutOpenWindow; -import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - private final EntityPlayer entity; - private final Inventory inventory; - private String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - // used for grabbing the rename text string - static Field mc_ContainerAnvil_renameText; - - static { - try { - mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); - mc_ContainerAnvil_renameText.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this)); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean a(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void e() { - super.e(); - if (cost >= 0) { - this.a = cost; - } - } - - @Override - public void update() { - e(); - } - - @Override - public String getRenameText() { - try { - //return this.l; - return (String) mc_ContainerAnvil_renameText.get(this); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - return null; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.a; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } - -} +package com.songoda.core.nms.v1_8_R3.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import java.lang.reflect.Field; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_8_R3.BlockPosition; +import net.minecraft.server.v1_8_R3.ChatMessage; +import net.minecraft.server.v1_8_R3.ContainerAnvil; +import net.minecraft.server.v1_8_R3.EntityHuman; +import net.minecraft.server.v1_8_R3.EntityPlayer; +import net.minecraft.server.v1_8_R3.IInventory; +import net.minecraft.server.v1_8_R3.PacketPlayOutOpenWindow; +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AnvilView extends ContainerAnvil implements CustomAnvil { + + private final EntityPlayer entity; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + // used for grabbing the rename text string + static Field mc_ContainerAnvil_renameText; + + static { + try { + mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); + mc_ContainerAnvil_renameText.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this)); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean a(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void e() { + super.e(); + if (cost >= 0) { + this.a = cost; + } + } + + @Override + public void update() { + e(); + } + + @Override + public String getRenameText() { + try { + //return this.l; + return (String) mc_ContainerAnvil_renameText.get(this); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + return null; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.a; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } + +} diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..828245de --- /dev/null +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_8_R3.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_8_R3.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCoreImpl.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..3cb35f44 --- /dev/null +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_8_R3.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTItemImpl.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTItemImpl.java new file mode 100644 index 00000000..3b038314 --- /dev/null +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_8_R3.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_8_R3.NBTTagCompound; +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_8_R3.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_8_R3.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTObjectImpl.java b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..b015d8f6 --- /dev/null +++ b/NMS/NMS-v1_8_R3/src/com/songoda/core/nms/v1_8_R3/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_8_R3.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_8_R3.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/NMS.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/NMS.java rename to NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/anvil/AnvilCore.java index 32fc73a5..a587a34e 100644 --- a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/NMS.java +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_9_R1; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_9_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/AnvilInventoryCustom.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/anvil/AnvilInventoryCustom.java similarity index 90% rename from NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/AnvilInventoryCustom.java rename to NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/anvil/AnvilInventoryCustom.java index 7b834c4e..d6b06b06 100644 --- a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/anvil/AnvilInventoryCustom.java @@ -1,21 +1,21 @@ -package com.songoda.core.nms.v1_9_R1; - -import net.minecraft.server.v1_9_R1.IInventory; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventoryAnvil; -import org.bukkit.inventory.InventoryHolder; - -public class AnvilInventoryCustom extends CraftInventoryAnvil { - - final InventoryHolder holder; - - public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) { - super(location, inventory, resultInventory); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_9_R1.anvil; + +import net.minecraft.server.v1_9_R1.IInventory; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventoryAnvil; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilInventoryCustom extends CraftInventoryAnvil { + + final InventoryHolder holder; + + public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) { + super(location, inventory, resultInventory); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/AnvilView.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/anvil/AnvilView.java similarity index 94% rename from NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/AnvilView.java rename to NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/anvil/AnvilView.java index 1a338e94..9f96074c 100644 --- a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/AnvilView.java +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/anvil/AnvilView.java @@ -1,203 +1,203 @@ -package com.songoda.core.nms.v1_9_R1; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_9_R1.BlockPosition; -import net.minecraft.server.v1_9_R1.ChatMessage; -import net.minecraft.server.v1_9_R1.ContainerAnvil; -import net.minecraft.server.v1_9_R1.EntityHuman; -import net.minecraft.server.v1_9_R1.EntityPlayer; -import net.minecraft.server.v1_9_R1.IInventory; -import net.minecraft.server.v1_9_R1.PacketPlayOutOpenWindow; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - private final EntityPlayer entity; - private final Inventory inventory; - private String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - // used for grabbing the rename text string - static Field mc_ContainerAnvil_renameText; - - static { - try { - mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); - mc_ContainerAnvil_renameText.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - new Location(entity.world.getWorld(), 0, 0, 0), - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this)); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean a(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void e() { - super.e(); - if (cost >= 0) { - this.a = cost; - } - } - - @Override - public void update() { - e(); - } - - @Override - public String getRenameText() { - try { - //return this.l; - return (String) mc_ContainerAnvil_renameText.get(this); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - return null; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.a; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } - -} +package com.songoda.core.nms.v1_9_R1.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import java.lang.reflect.Field; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_9_R1.BlockPosition; +import net.minecraft.server.v1_9_R1.ChatMessage; +import net.minecraft.server.v1_9_R1.ContainerAnvil; +import net.minecraft.server.v1_9_R1.EntityHuman; +import net.minecraft.server.v1_9_R1.EntityPlayer; +import net.minecraft.server.v1_9_R1.IInventory; +import net.minecraft.server.v1_9_R1.PacketPlayOutOpenWindow; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AnvilView extends ContainerAnvil implements CustomAnvil { + + private final EntityPlayer entity; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + // used for grabbing the rename text string + static Field mc_ContainerAnvil_renameText; + + static { + try { + mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); + mc_ContainerAnvil_renameText.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + new Location(entity.world.getWorld(), 0, 0, 0), + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this)); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean a(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void e() { + super.e(); + if (cost >= 0) { + this.a = cost; + } + } + + @Override + public void update() { + e(); + } + + @Override + public String getRenameText() { + try { + //return this.l; + return (String) mc_ContainerAnvil_renameText.get(this); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + return null; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.a; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } + +} diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..55556cc1 --- /dev/null +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_9_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_9_R1.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCoreImpl.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..23dd3a45 --- /dev/null +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_9_R1.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTItemImpl.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTItemImpl.java new file mode 100644 index 00000000..2ae70a70 --- /dev/null +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_9_R1.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_9_R1.NBTTagCompound; +import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_9_R1.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_9_R1.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTObjectImpl.java b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..c3fc1c2c --- /dev/null +++ b/NMS/NMS-v1_9_R1/src/com/songoda/core/nms/v1_9_R1/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_9_R1.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_9_R1.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +} diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/NMS.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/anvil/AnvilCore.java similarity index 72% rename from NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/NMS.java rename to NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/anvil/AnvilCore.java index 155c38e2..b7a2905b 100644 --- a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/NMS.java +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/anvil/AnvilCore.java @@ -1,21 +1,20 @@ -package com.songoda.core.nms.v1_9_R2; - -import com.songoda.core.nms.CoreNMS; -import com.songoda.core.nms.CustomAnvil; -import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.inventory.InventoryHolder; - -public class NMS implements CoreNMS { - - @Override - public CustomAnvil createAnvil(Player player) { - return new AnvilView(((CraftPlayer) player).getHandle(), null); - } - - @Override - public CustomAnvil createAnvil(Player player, InventoryHolder holder) { - return new AnvilView(((CraftPlayer) player).getHandle(), holder); - } - -} +package com.songoda.core.nms.v1_9_R2.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore { + + @Override + public CustomAnvil createAnvil(Player player) { + return new AnvilView(((CraftPlayer) player).getHandle(), null); + } + + @Override + public CustomAnvil createAnvil(Player player, InventoryHolder holder) { + return new AnvilView(((CraftPlayer) player).getHandle(), holder); + } + +} diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/AnvilInventoryCustom.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/anvil/AnvilInventoryCustom.java similarity index 90% rename from NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/AnvilInventoryCustom.java rename to NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/anvil/AnvilInventoryCustom.java index b83f3646..77392cb6 100644 --- a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/AnvilInventoryCustom.java +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/anvil/AnvilInventoryCustom.java @@ -1,21 +1,21 @@ -package com.songoda.core.nms.v1_9_R2; - -import net.minecraft.server.v1_9_R2.IInventory; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftInventoryAnvil; -import org.bukkit.inventory.InventoryHolder; - -public class AnvilInventoryCustom extends CraftInventoryAnvil { - - final InventoryHolder holder; - - public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) { - super(location, inventory, resultInventory); - this.holder = holder; - } - - @Override - public InventoryHolder getHolder() { - return holder; - } -} +package com.songoda.core.nms.v1_9_R2.anvil; + +import net.minecraft.server.v1_9_R2.IInventory; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftInventoryAnvil; +import org.bukkit.inventory.InventoryHolder; + +public class AnvilInventoryCustom extends CraftInventoryAnvil { + + final InventoryHolder holder; + + public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) { + super(location, inventory, resultInventory); + this.holder = holder; + } + + @Override + public InventoryHolder getHolder() { + return holder; + } +} diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/AnvilView.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/anvil/AnvilView.java similarity index 94% rename from NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/AnvilView.java rename to NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/anvil/AnvilView.java index 4006628e..b366395c 100644 --- a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/AnvilView.java +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/anvil/AnvilView.java @@ -1,202 +1,202 @@ -package com.songoda.core.nms.v1_9_R2; - -import com.songoda.core.nms.CustomAnvil; -import com.songoda.core.nms.methods.AnvilTextChange; -import java.lang.reflect.Field; -import java.util.logging.Level; -import java.util.logging.Logger; -import net.minecraft.server.v1_9_R2.BlockPosition; -import net.minecraft.server.v1_9_R2.ChatMessage; -import net.minecraft.server.v1_9_R2.ContainerAnvil; -import net.minecraft.server.v1_9_R2.EntityHuman; -import net.minecraft.server.v1_9_R2.EntityPlayer; -import net.minecraft.server.v1_9_R2.IInventory; -import net.minecraft.server.v1_9_R2.PacketPlayOutOpenWindow; -import org.bukkit.Location; -import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftInventoryView; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.InventoryHolder; -import org.bukkit.inventory.ItemStack; - -public class AnvilView extends ContainerAnvil implements CustomAnvil { - - private final EntityPlayer entity; - private final Inventory inventory; - private String title = "Repairing"; - private int cost = -1; - private boolean canUse = true; - private AnvilTextChange textChange = null; - - // used for setting custom inventory - static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result - static Field mc_ContainerAnvil_resultInventory; // full inventory - static Field mc_ContainerAnvil_bukkitEntity; - - static { - try { - mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); - mc_ContainerAnvil_repairInventory.setAccessible(true); - mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); - mc_ContainerAnvil_resultInventory.setAccessible(true); - mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); - mc_ContainerAnvil_bukkitEntity.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - } - - // used for grabbing the rename text string - static Field mc_ContainerAnvil_renameText; - - static { - try { - mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); - mc_ContainerAnvil_renameText.setAccessible(true); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - } - - public AnvilView(EntityPlayer entity, InventoryHolder holder) { - super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); - this.entity = entity; - if (holder != null) { - this.inventory = getBukkitView(entity, holder).getTopInventory(); - } else { - this.inventory = getBukkitView().getTopInventory(); - } - } - - public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { - try { - AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, - new Location(entity.world.getWorld(), 0, 0, 0), - (IInventory) mc_ContainerAnvil_repairInventory.get(this), - (IInventory) mc_ContainerAnvil_resultInventory.get(this)); - CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); - mc_ContainerAnvil_bukkitEntity.set(this, view); - return view; - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); - } - return getBukkitView(); - } - - @Override - public boolean a(EntityHuman entityhuman) { - return canUse; - } - - @Override - public void e() { - super.e(); - if (cost >= 0) { - this.a = cost; - } - } - - @Override - public void update() { - e(); - } - - @Override - public String getRenameText() { - try { - //return this.l; - return (String) mc_ContainerAnvil_renameText.get(this); - } catch (Exception ex) { - Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); - } - return null; - } - - @Override - public void setRenameText(String text) { - this.a(text); - } - - @Override - public void setOnChange(AnvilTextChange handler) { - textChange = handler; - } - - @Override - public String getCustomTitle() { - return title; - } - - @Override - public void setCustomTitle(String title) { - this.title = title; - } - - @Override - public void setLevelCost(int cost) { - this.cost = cost; - } - - @Override - public int getLevelCost() { - return cost >= 0 ? cost : this.a; - } - - @Override - public void setCanUse(boolean bool) { - this.canUse = bool; - } - - @Override - public ItemStack getLeftInput() { - return inventory.getItem(0); - } - - @Override - public ItemStack getRightInput() { - return inventory.getItem(1); - } - - @Override - public ItemStack getOutput() { - return inventory.getItem(2); - } - - @Override - public void setLeftInput(ItemStack item) { - inventory.setItem(0, item); - } - - @Override - public void setRightInput(ItemStack item) { - inventory.setItem(1, item); - } - - @Override - public void setOutput(ItemStack item) { - inventory.setItem(2, item); - } - - @Override - public Inventory getInventory() { - return inventory; - } - - @Override - public void open() { - - // Counter stuff that the game uses to keep track of inventories - int id = entity.nextContainerCounter(); - - // Send the packet - entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); - - // Set their active container to this anvil - entity.activeContainer = this; - - // Set their active container window id to that counter stuff - entity.activeContainer.windowId = id; - - // Add the slot listener - entity.activeContainer.addSlotListener(entity); - } -} +package com.songoda.core.nms.v1_9_R2.anvil; + +import com.songoda.core.nms.anvil.CustomAnvil; +import com.songoda.core.nms.anvil.methods.AnvilTextChange; +import java.lang.reflect.Field; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.v1_9_R2.BlockPosition; +import net.minecraft.server.v1_9_R2.ChatMessage; +import net.minecraft.server.v1_9_R2.ContainerAnvil; +import net.minecraft.server.v1_9_R2.EntityHuman; +import net.minecraft.server.v1_9_R2.EntityPlayer; +import net.minecraft.server.v1_9_R2.IInventory; +import net.minecraft.server.v1_9_R2.PacketPlayOutOpenWindow; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftInventoryView; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; + +public class AnvilView extends ContainerAnvil implements CustomAnvil { + + private final EntityPlayer entity; + private final Inventory inventory; + private String title = "Repairing"; + private int cost = -1; + private boolean canUse = true; + private AnvilTextChange textChange = null; + + // used for setting custom inventory + static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result + static Field mc_ContainerAnvil_resultInventory; // full inventory + static Field mc_ContainerAnvil_bukkitEntity; + + static { + try { + mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h"); + mc_ContainerAnvil_repairInventory.setAccessible(true); + mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g"); + mc_ContainerAnvil_resultInventory.setAccessible(true); + mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity"); + mc_ContainerAnvil_bukkitEntity.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + } + + // used for grabbing the rename text string + static Field mc_ContainerAnvil_renameText; + + static { + try { + mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l"); + mc_ContainerAnvil_renameText.setAccessible(true); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + } + + public AnvilView(EntityPlayer entity, InventoryHolder holder) { + super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity); + this.entity = entity; + if (holder != null) { + this.inventory = getBukkitView(entity, holder).getTopInventory(); + } else { + this.inventory = getBukkitView().getTopInventory(); + } + } + + public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) { + try { + AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder, + new Location(entity.world.getWorld(), 0, 0, 0), + (IInventory) mc_ContainerAnvil_repairInventory.get(this), + (IInventory) mc_ContainerAnvil_resultInventory.get(this)); + CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this); + mc_ContainerAnvil_bukkitEntity.set(this, view); + return view; + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex); + } + return getBukkitView(); + } + + @Override + public boolean a(EntityHuman entityhuman) { + return canUse; + } + + @Override + public void e() { + super.e(); + if (cost >= 0) { + this.a = cost; + } + } + + @Override + public void update() { + e(); + } + + @Override + public String getRenameText() { + try { + //return this.l; + return (String) mc_ContainerAnvil_renameText.get(this); + } catch (Exception ex) { + Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex); + } + return null; + } + + @Override + public void setRenameText(String text) { + this.a(text); + } + + @Override + public void setOnChange(AnvilTextChange handler) { + textChange = handler; + } + + @Override + public String getCustomTitle() { + return title; + } + + @Override + public void setCustomTitle(String title) { + this.title = title; + } + + @Override + public void setLevelCost(int cost) { + this.cost = cost; + } + + @Override + public int getLevelCost() { + return cost >= 0 ? cost : this.a; + } + + @Override + public void setCanUse(boolean bool) { + this.canUse = bool; + } + + @Override + public ItemStack getLeftInput() { + return inventory.getItem(0); + } + + @Override + public ItemStack getRightInput() { + return inventory.getItem(1); + } + + @Override + public ItemStack getOutput() { + return inventory.getItem(2); + } + + @Override + public void setLeftInput(ItemStack item) { + inventory.setItem(0, item); + } + + @Override + public void setRightInput(ItemStack item) { + inventory.setItem(1, item); + } + + @Override + public void setOutput(ItemStack item) { + inventory.setItem(2, item); + } + + @Override + public Inventory getInventory() { + return inventory; + } + + @Override + public void open() { + + // Counter stuff that the game uses to keep track of inventories + int id = entity.nextContainerCounter(); + + // Send the packet + entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0)); + + // Set their active container to this anvil + entity.activeContainer = this; + + // Set their active container window id to that counter stuff + entity.activeContainer.windowId = id; + + // Add the slot listener + entity.activeContainer.addSlotListener(entity); + } +} diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCompoundImpl.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCompoundImpl.java new file mode 100644 index 00000000..7c9a5bf6 --- /dev/null +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCompoundImpl.java @@ -0,0 +1,65 @@ +package com.songoda.core.nms.v1_9_R2.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_9_R2.NBTTagCompound; + +public class NBTCompoundImpl implements NBTCompound { + + protected NBTTagCompound compound; + + protected NBTCompoundImpl(NBTTagCompound compound) { + this.compound = compound; + } + + public NBTCompoundImpl() { + this.compound = new NBTTagCompound(); + } + + @Override + public NBTCompound set(String tag, String s) { + compound.setString(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, boolean b) { + compound.setBoolean(tag, b); + return this; + } + + @Override + public NBTCompound set(String tag, int i) { + compound.setInt(tag, i); + return this; + } + + @Override + public NBTCompound set(String tag, long l) { + compound.setLong(tag, l); + return this; + } + + @Override + public NBTCompound set(String tag, short s) { + compound.setShort(tag, s); + return this; + } + + @Override + public NBTCompound set(String tag, byte b) { + compound.setByte(tag, b); + return this; + } + + @Override + public boolean has(String tag) { + return compound.hasKey(tag); + } + + @Override + public NBTObject getNBTObject(String tag) { + return new NBTObjectImpl(compound, tag); + } + +} diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCoreImpl.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCoreImpl.java new file mode 100644 index 00000000..900a3fd6 --- /dev/null +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTCoreImpl.java @@ -0,0 +1,21 @@ +package com.songoda.core.nms.v1_9_R2.nbt; + +import com.songoda.core.nms.nbt.NBTCompound; +import com.songoda.core.nms.nbt.NBTCore; +import com.songoda.core.nms.nbt.NBTItem; +import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTCoreImpl implements NBTCore { + + @Override + public NBTItem of(ItemStack item) { + return new NBTItemImpl(CraftItemStack.asNMSCopy(item)); + } + + @Override + public NBTCompound newCompound() { + return new NBTCompoundImpl(); + } + +} diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTItemImpl.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTItemImpl.java new file mode 100644 index 00000000..3ce737d5 --- /dev/null +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTItemImpl.java @@ -0,0 +1,20 @@ +package com.songoda.core.nms.v1_9_R2.nbt; + +import com.songoda.core.nms.nbt.NBTItem; +import net.minecraft.server.v1_9_R2.NBTTagCompound; +import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; + +public class NBTItemImpl extends NBTCompoundImpl implements NBTItem { + + private net.minecraft.server.v1_9_R2.ItemStack nmsItem; + + public NBTItemImpl(net.minecraft.server.v1_9_R2.ItemStack nmsItem) { + super(nmsItem.hasTag() ? nmsItem.getTag() : new NBTTagCompound()); + this.nmsItem = nmsItem; + } + + public ItemStack finish() { + return CraftItemStack.asBukkitCopy(nmsItem); + } +} diff --git a/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTObjectImpl.java b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTObjectImpl.java new file mode 100644 index 00000000..51a46dcb --- /dev/null +++ b/NMS/NMS-v1_9_R2/src/com/songoda/core/nms/v1_9_R2/nbt/NBTObjectImpl.java @@ -0,0 +1,40 @@ +package com.songoda.core.nms.v1_9_R2.nbt; + +import com.songoda.core.nms.nbt.NBTObject; +import net.minecraft.server.v1_9_R2.NBTTagCompound; + +public class NBTObjectImpl implements NBTObject { + + private final NBTTagCompound compound; + private final String tag; + + public NBTObjectImpl(NBTTagCompound compound, String tag) { + this.compound = compound; + this.tag = tag; + } + + public String asString() { + return compound.getString(tag); + } + + public boolean asBoolean() { + return compound.getBoolean(tag); + } + + public int asInt() { + return compound.getInt(tag); + } + + public long asLong() { + return compound.getLong(tag); + } + + public short asShort() { + return compound.getShort(tag); + } + + public byte asByte() { + return compound.getByte(tag); + } + +}