mirror of
https://github.com/songoda/SongodaCore.git
synced 2025-02-02 20:51:27 +01:00
Added support for nbt tags.
This commit is contained in:
parent
959193699a
commit
9007d32fd5
@ -2,8 +2,8 @@ package com.songoda.core.gui;
|
|||||||
|
|
||||||
import com.songoda.core.compatibility.CompatibleMaterial;
|
import com.songoda.core.compatibility.CompatibleMaterial;
|
||||||
import com.songoda.core.gui.methods.Clickable;
|
import com.songoda.core.gui.methods.Clickable;
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.AnvilCore;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.NmsManager;
|
import com.songoda.core.nms.NmsManager;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -115,7 +115,7 @@ public class AnvilGui extends Gui {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createInventory() {
|
protected void createInventory() {
|
||||||
CoreNMS nms = NmsManager.getNMS();
|
AnvilCore nms = NmsManager.getAnvil();
|
||||||
if (nms != null) {
|
if (nms != null) {
|
||||||
anvil = nms.createAnvil(player, new GuiHolder(guiManager, this));
|
anvil = nms.createAnvil(player, new GuiHolder(guiManager, this));
|
||||||
anvil.setCustomTitle(title);
|
anvil.setCustomTitle(title);
|
||||||
|
@ -1,57 +1,90 @@
|
|||||||
package com.songoda.core.nms;
|
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.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
|
|
||||||
public class NmsManager {
|
public class NmsManager {
|
||||||
|
|
||||||
private final static String serverPackagePath = Bukkit.getServer().getClass().getPackage().getName();
|
private final static String serverPackagePath = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
private final static String serverPackageVersion = serverPackagePath.substring(serverPackagePath.lastIndexOf('.') + 1);
|
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() {
|
static {
|
||||||
// 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
|
|
||||||
switch (serverPackageVersion) {
|
switch (serverPackageVersion) {
|
||||||
case "v1_8_R1":
|
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":
|
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":
|
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":
|
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":
|
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":
|
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":
|
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":
|
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":
|
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":
|
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":
|
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":
|
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() {
|
public static AnvilCore getAnvil() {
|
||||||
return nms;
|
return anvil;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasNMS() {
|
public static boolean hasAnvil() {
|
||||||
return nms != null;
|
return anvil != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static NBTCore getNbt() {
|
||||||
|
return nbt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasNbt() {
|
||||||
|
return nbt != null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package com.songoda.core.nms;
|
package com.songoda.core.nms.anvil;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public interface CoreNMS {
|
public interface AnvilCore {
|
||||||
public CustomAnvil createAnvil(Player player);
|
public CustomAnvil createAnvil(Player player);
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder);
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder);
|
||||||
}
|
}
|
@ -1,54 +1,54 @@
|
|||||||
package com.songoda.core.nms;
|
package com.songoda.core.nms.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NMS interface for creating an anvil view for a single player
|
* NMS interface for creating an anvil view for a single player
|
||||||
*
|
*
|
||||||
* @since 2019-09-13
|
* @since 2019-09-13
|
||||||
* @author jascotty2
|
* @author jascotty2
|
||||||
*/
|
*/
|
||||||
public interface CustomAnvil {
|
public interface CustomAnvil {
|
||||||
|
|
||||||
public void setLevelCost(int cost);
|
public void setLevelCost(int cost);
|
||||||
|
|
||||||
public int getLevelCost();
|
public int getLevelCost();
|
||||||
|
|
||||||
public void setCanUse(boolean bool);
|
public void setCanUse(boolean bool);
|
||||||
|
|
||||||
public String getCustomTitle();
|
public String getCustomTitle();
|
||||||
|
|
||||||
public void setCustomTitle(String title);
|
public void setCustomTitle(String title);
|
||||||
|
|
||||||
public String getRenameText();
|
public String getRenameText();
|
||||||
|
|
||||||
public void setRenameText(String text);
|
public void setRenameText(String text);
|
||||||
|
|
||||||
public void setOnChange(AnvilTextChange handler);
|
public void setOnChange(AnvilTextChange handler);
|
||||||
|
|
||||||
public ItemStack getLeftInput();
|
public ItemStack getLeftInput();
|
||||||
|
|
||||||
public ItemStack getRightInput();
|
public ItemStack getRightInput();
|
||||||
|
|
||||||
public ItemStack getOutput();
|
public ItemStack getOutput();
|
||||||
|
|
||||||
public void setLeftInput(ItemStack item);
|
public void setLeftInput(ItemStack item);
|
||||||
|
|
||||||
public void setRightInput(ItemStack item);
|
public void setRightInput(ItemStack item);
|
||||||
|
|
||||||
public void setOutput(ItemStack item);
|
public void setOutput(ItemStack item);
|
||||||
|
|
||||||
public Inventory getInventory();
|
public Inventory getInventory();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open this anvil for the provided player
|
* Open this anvil for the provided player
|
||||||
*/
|
*/
|
||||||
public void open();
|
public void open();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Force a redraw of the output
|
* Force a redraw of the output
|
||||||
*/
|
*/
|
||||||
public void update();
|
public void update();
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
package com.songoda.core.nms.methods;
|
package com.songoda.core.nms.anvil.methods;
|
||||||
|
|
||||||
public interface AnvilTextChange {
|
public interface AnvilTextChange {
|
||||||
|
|
||||||
void onChange();
|
void onChange();
|
||||||
}
|
}
|
23
NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCompound.java
Normal file
23
NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCompound.java
Normal file
@ -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);
|
||||||
|
|
||||||
|
}
|
11
NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCore.java
Normal file
11
NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTCore.java
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package com.songoda.core.nms.nbt;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public interface NBTCore {
|
||||||
|
|
||||||
|
NBTItem of(ItemStack item);
|
||||||
|
|
||||||
|
NBTCompound newCompound();
|
||||||
|
|
||||||
|
}
|
9
NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTItem.java
Normal file
9
NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTItem.java
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package com.songoda.core.nms.nbt;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public interface NBTItem extends NBTCompound {
|
||||||
|
|
||||||
|
ItemStack finish();
|
||||||
|
|
||||||
|
}
|
18
NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTObject.java
Normal file
18
NMS/NMS-API/src/com/songoda/core/nms/nbt/NBTObject.java
Normal file
@ -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();
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_10_R1;
|
package com.songoda.core.nms.v1_10_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,21 +1,21 @@
|
|||||||
package com.songoda.core.nms.v1_10_R1;
|
package com.songoda.core.nms.v1_10_R1.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_10_R1.IInventory;
|
import net.minecraft.server.v1_10_R1.IInventory;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) {
|
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) {
|
||||||
super(location, inventory, resultInventory);
|
super(location, inventory, resultInventory);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,203 +1,203 @@
|
|||||||
package com.songoda.core.nms.v1_10_R1;
|
package com.songoda.core.nms.v1_10_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.v1_10_R1.BlockPosition;
|
import net.minecraft.server.v1_10_R1.BlockPosition;
|
||||||
import net.minecraft.server.v1_10_R1.ChatMessage;
|
import net.minecraft.server.v1_10_R1.ChatMessage;
|
||||||
import net.minecraft.server.v1_10_R1.ContainerAnvil;
|
import net.minecraft.server.v1_10_R1.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_10_R1.EntityHuman;
|
import net.minecraft.server.v1_10_R1.EntityHuman;
|
||||||
import net.minecraft.server.v1_10_R1.EntityPlayer;
|
import net.minecraft.server.v1_10_R1.EntityPlayer;
|
||||||
import net.minecraft.server.v1_10_R1.IInventory;
|
import net.minecraft.server.v1_10_R1.IInventory;
|
||||||
import net.minecraft.server.v1_10_R1.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_10_R1.PacketPlayOutOpenWindow;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventoryView;
|
import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftInventoryView;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
private final EntityPlayer entity;
|
private final EntityPlayer entity;
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
private String title = "Repairing";
|
private String title = "Repairing";
|
||||||
private int cost = -1;
|
private int cost = -1;
|
||||||
private boolean canUse = true;
|
private boolean canUse = true;
|
||||||
private AnvilTextChange textChange = null;
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
// used for setting custom inventory
|
// used for setting custom inventory
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for grabbing the rename text string
|
// used for grabbing the rename text string
|
||||||
static Field mc_ContainerAnvil_renameText;
|
static Field mc_ContainerAnvil_renameText;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
||||||
mc_ContainerAnvil_renameText.setAccessible(true);
|
mc_ContainerAnvil_renameText.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} else {
|
} else {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
try {
|
try {
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
new Location(entity.world.getWorld(), 0, 0, 0),
|
new Location(entity.world.getWorld(), 0, 0, 0),
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
return view;
|
return view;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
return getBukkitView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean a(EntityHuman entityhuman) {
|
public boolean a(EntityHuman entityhuman) {
|
||||||
return canUse;
|
return canUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void e() {
|
public void e() {
|
||||||
super.e();
|
super.e();
|
||||||
if (cost >= 0) {
|
if (cost >= 0) {
|
||||||
this.a = cost;
|
this.a = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
e();
|
e();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRenameText() {
|
public String getRenameText() {
|
||||||
try {
|
try {
|
||||||
//return this.l;
|
//return this.l;
|
||||||
return (String) mc_ContainerAnvil_renameText.get(this);
|
return (String) mc_ContainerAnvil_renameText.get(this);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRenameText(String text) {
|
public void setRenameText(String text) {
|
||||||
this.a(text);
|
this.a(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
textChange = handler;
|
textChange = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomTitle() {
|
public String getCustomTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCustomTitle(String title) {
|
public void setCustomTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevelCost(int cost) {
|
public void setLevelCost(int cost) {
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
return cost >= 0 ? cost : this.a;
|
return cost >= 0 ? cost : this.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCanUse(boolean bool) {
|
public void setCanUse(boolean bool) {
|
||||||
this.canUse = bool;
|
this.canUse = bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getLeftInput() {
|
public ItemStack getLeftInput() {
|
||||||
return inventory.getItem(0);
|
return inventory.getItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getRightInput() {
|
public ItemStack getRightInput() {
|
||||||
return inventory.getItem(1);
|
return inventory.getItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getOutput() {
|
public ItemStack getOutput() {
|
||||||
return inventory.getItem(2);
|
return inventory.getItem(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLeftInput(ItemStack item) {
|
public void setLeftInput(ItemStack item) {
|
||||||
inventory.setItem(0, item);
|
inventory.setItem(0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRightInput(ItemStack item) {
|
public void setRightInput(ItemStack item) {
|
||||||
inventory.setItem(1, item);
|
inventory.setItem(1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOutput(ItemStack item) {
|
public void setOutput(ItemStack item) {
|
||||||
inventory.setItem(2, item);
|
inventory.setItem(2, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getInventory() {
|
public Inventory getInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
|
||||||
// Counter stuff that the game uses to keep track of inventories
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
int id = entity.nextContainerCounter();
|
int id = entity.nextContainerCounter();
|
||||||
|
|
||||||
// Send the packet
|
// Send the packet
|
||||||
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
// Set their active container to this anvil
|
// Set their active container to this anvil
|
||||||
entity.activeContainer = this;
|
entity.activeContainer = this;
|
||||||
|
|
||||||
// Set their active container window id to that counter stuff
|
// Set their active container window id to that counter stuff
|
||||||
entity.activeContainer.windowId = id;
|
entity.activeContainer.windowId = id;
|
||||||
|
|
||||||
// Add the slot listener
|
// Add the slot listener
|
||||||
entity.activeContainer.addSlotListener(entity);
|
entity.activeContainer.addSlotListener(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_11_R1;
|
package com.songoda.core.nms.v1_11_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,22 +1,22 @@
|
|||||||
package com.songoda.core.nms.v1_11_R1;
|
package com.songoda.core.nms.v1_11_R1.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_11_R1.ContainerAnvil;
|
import net.minecraft.server.v1_11_R1.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_11_R1.IInventory;
|
import net.minecraft.server.v1_11_R1.IInventory;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
|
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
|
||||||
super(location, inventory, resultInventory, container);
|
super(location, inventory, resultInventory, container);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,203 +1,203 @@
|
|||||||
package com.songoda.core.nms.v1_11_R1;
|
package com.songoda.core.nms.v1_11_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.v1_11_R1.BlockPosition;
|
import net.minecraft.server.v1_11_R1.BlockPosition;
|
||||||
import net.minecraft.server.v1_11_R1.ChatMessage;
|
import net.minecraft.server.v1_11_R1.ChatMessage;
|
||||||
import net.minecraft.server.v1_11_R1.ContainerAnvil;
|
import net.minecraft.server.v1_11_R1.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_11_R1.EntityHuman;
|
import net.minecraft.server.v1_11_R1.EntityHuman;
|
||||||
import net.minecraft.server.v1_11_R1.EntityPlayer;
|
import net.minecraft.server.v1_11_R1.EntityPlayer;
|
||||||
import net.minecraft.server.v1_11_R1.IInventory;
|
import net.minecraft.server.v1_11_R1.IInventory;
|
||||||
import net.minecraft.server.v1_11_R1.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_11_R1.PacketPlayOutOpenWindow;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventoryView;
|
import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftInventoryView;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
private final EntityPlayer entity;
|
private final EntityPlayer entity;
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
private String title = "Repairing";
|
private String title = "Repairing";
|
||||||
private int cost = -1;
|
private int cost = -1;
|
||||||
private boolean canUse = true;
|
private boolean canUse = true;
|
||||||
private AnvilTextChange textChange = null;
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
// used for setting custom inventory
|
// used for setting custom inventory
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for grabbing the rename text string
|
// used for grabbing the rename text string
|
||||||
static Field mc_ContainerAnvil_renameText;
|
static Field mc_ContainerAnvil_renameText;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
||||||
mc_ContainerAnvil_renameText.setAccessible(true);
|
mc_ContainerAnvil_renameText.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} else {
|
} else {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
try {
|
try {
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
new Location(entity.world.getWorld(), 0, 0, 0),
|
new Location(entity.world.getWorld(), 0, 0, 0),
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
return view;
|
return view;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
return getBukkitView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean a(EntityHuman entityhuman) {
|
public boolean a(EntityHuman entityhuman) {
|
||||||
return canUse;
|
return canUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void e() {
|
public void e() {
|
||||||
super.e();
|
super.e();
|
||||||
if (cost >= 0) {
|
if (cost >= 0) {
|
||||||
this.a = cost;
|
this.a = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
e();
|
e();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRenameText() {
|
public String getRenameText() {
|
||||||
try {
|
try {
|
||||||
//return this.l;
|
//return this.l;
|
||||||
return (String) mc_ContainerAnvil_renameText.get(this);
|
return (String) mc_ContainerAnvil_renameText.get(this);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRenameText(String text) {
|
public void setRenameText(String text) {
|
||||||
this.a(text);
|
this.a(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
textChange = handler;
|
textChange = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomTitle() {
|
public String getCustomTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCustomTitle(String title) {
|
public void setCustomTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevelCost(int cost) {
|
public void setLevelCost(int cost) {
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
return cost >= 0 ? cost : this.a;
|
return cost >= 0 ? cost : this.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCanUse(boolean bool) {
|
public void setCanUse(boolean bool) {
|
||||||
this.canUse = bool;
|
this.canUse = bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getLeftInput() {
|
public ItemStack getLeftInput() {
|
||||||
return inventory.getItem(0);
|
return inventory.getItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getRightInput() {
|
public ItemStack getRightInput() {
|
||||||
return inventory.getItem(1);
|
return inventory.getItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getOutput() {
|
public ItemStack getOutput() {
|
||||||
return inventory.getItem(2);
|
return inventory.getItem(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLeftInput(ItemStack item) {
|
public void setLeftInput(ItemStack item) {
|
||||||
inventory.setItem(0, item);
|
inventory.setItem(0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRightInput(ItemStack item) {
|
public void setRightInput(ItemStack item) {
|
||||||
inventory.setItem(1, item);
|
inventory.setItem(1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOutput(ItemStack item) {
|
public void setOutput(ItemStack item) {
|
||||||
inventory.setItem(2, item);
|
inventory.setItem(2, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getInventory() {
|
public Inventory getInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
|
||||||
// Counter stuff that the game uses to keep track of inventories
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
int id = entity.nextContainerCounter();
|
int id = entity.nextContainerCounter();
|
||||||
|
|
||||||
// Send the packet
|
// Send the packet
|
||||||
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
// Set their active container to this anvil
|
// Set their active container to this anvil
|
||||||
entity.activeContainer = this;
|
entity.activeContainer = this;
|
||||||
|
|
||||||
// Set their active container window id to that counter stuff
|
// Set their active container window id to that counter stuff
|
||||||
entity.activeContainer.windowId = id;
|
entity.activeContainer.windowId = id;
|
||||||
|
|
||||||
// Add the slot listener
|
// Add the slot listener
|
||||||
entity.activeContainer.addSlotListener(entity);
|
entity.activeContainer.addSlotListener(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_12_R1;
|
package com.songoda.core.nms.v1_12_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,22 +1,22 @@
|
|||||||
package com.songoda.core.nms.v1_12_R1;
|
package com.songoda.core.nms.v1_12_R1.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_12_R1.ContainerAnvil;
|
import net.minecraft.server.v1_12_R1.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_12_R1.IInventory;
|
import net.minecraft.server.v1_12_R1.IInventory;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
|
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
|
||||||
super(location, inventory, resultInventory, container);
|
super(location, inventory, resultInventory, container);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,185 +1,185 @@
|
|||||||
package com.songoda.core.nms.v1_12_R1;
|
package com.songoda.core.nms.v1_12_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.v1_12_R1.BlockPosition;
|
import net.minecraft.server.v1_12_R1.BlockPosition;
|
||||||
import net.minecraft.server.v1_12_R1.ChatMessage;
|
import net.minecraft.server.v1_12_R1.ChatMessage;
|
||||||
import net.minecraft.server.v1_12_R1.ContainerAnvil;
|
import net.minecraft.server.v1_12_R1.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_12_R1.EntityHuman;
|
import net.minecraft.server.v1_12_R1.EntityHuman;
|
||||||
import net.minecraft.server.v1_12_R1.EntityPlayer;
|
import net.minecraft.server.v1_12_R1.EntityPlayer;
|
||||||
import net.minecraft.server.v1_12_R1.IInventory;
|
import net.minecraft.server.v1_12_R1.IInventory;
|
||||||
import net.minecraft.server.v1_12_R1.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_12_R1.PacketPlayOutOpenWindow;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryView;
|
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftInventoryView;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
private final EntityPlayer entity;
|
private final EntityPlayer entity;
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
private String title = "Repairing";
|
private String title = "Repairing";
|
||||||
private int cost = -1;
|
private int cost = -1;
|
||||||
private boolean canUse = true;
|
private boolean canUse = true;
|
||||||
private AnvilTextChange textChange = null;
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
// used for setting custom inventory
|
// used for setting custom inventory
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} else {
|
} else {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
try {
|
try {
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
new Location(entity.world.getWorld(), 0, 0, 0),
|
new Location(entity.world.getWorld(), 0, 0, 0),
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
return view;
|
return view;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
return getBukkitView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canUse(EntityHuman entityhuman) {
|
public boolean canUse(EntityHuman entityhuman) {
|
||||||
return canUse;
|
return canUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void e() {
|
public void e() {
|
||||||
super.e();
|
super.e();
|
||||||
if (cost >= 0) {
|
if (cost >= 0) {
|
||||||
this.levelCost = cost;
|
this.levelCost = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
e();
|
e();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRenameText() {
|
public String getRenameText() {
|
||||||
return this.renameText;
|
return this.renameText;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRenameText(String text) {
|
public void setRenameText(String text) {
|
||||||
this.a(text);
|
this.a(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomTitle() {
|
public String getCustomTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
textChange = handler;
|
textChange = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCustomTitle(String title) {
|
public void setCustomTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevelCost(int cost) {
|
public void setLevelCost(int cost) {
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
return cost >= 0 ? cost : this.levelCost;
|
return cost >= 0 ? cost : this.levelCost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCanUse(boolean bool) {
|
public void setCanUse(boolean bool) {
|
||||||
this.canUse = bool;
|
this.canUse = bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getLeftInput() {
|
public ItemStack getLeftInput() {
|
||||||
return inventory.getItem(0);
|
return inventory.getItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getRightInput() {
|
public ItemStack getRightInput() {
|
||||||
return inventory.getItem(1);
|
return inventory.getItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getOutput() {
|
public ItemStack getOutput() {
|
||||||
return inventory.getItem(2);
|
return inventory.getItem(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLeftInput(ItemStack item) {
|
public void setLeftInput(ItemStack item) {
|
||||||
inventory.setItem(0, item);
|
inventory.setItem(0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRightInput(ItemStack item) {
|
public void setRightInput(ItemStack item) {
|
||||||
inventory.setItem(1, item);
|
inventory.setItem(1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOutput(ItemStack item) {
|
public void setOutput(ItemStack item) {
|
||||||
inventory.setItem(2, item);
|
inventory.setItem(2, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getInventory() {
|
public Inventory getInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
|
||||||
// Counter stuff that the game uses to keep track of inventories
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
int id = entity.nextContainerCounter();
|
int id = entity.nextContainerCounter();
|
||||||
|
|
||||||
// Send the packet
|
// Send the packet
|
||||||
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
// Set their active container to this anvil
|
// Set their active container to this anvil
|
||||||
entity.activeContainer = this;
|
entity.activeContainer = this;
|
||||||
|
|
||||||
// Set their active container window id to that counter stuff
|
// Set their active container window id to that counter stuff
|
||||||
entity.activeContainer.windowId = id;
|
entity.activeContainer.windowId = id;
|
||||||
|
|
||||||
// Add the slot listener
|
// Add the slot listener
|
||||||
entity.activeContainer.addSlotListener(entity);
|
entity.activeContainer.addSlotListener(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_13_R1;
|
package com.songoda.core.nms.v1_13_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,22 +1,22 @@
|
|||||||
package com.songoda.core.nms.v1_13_R1;
|
package com.songoda.core.nms.v1_13_R1.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_13_R1.ContainerAnvil;
|
import net.minecraft.server.v1_13_R1.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_13_R1.IInventory;
|
import net.minecraft.server.v1_13_R1.IInventory;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
|
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
|
||||||
super(location, inventory, resultInventory, container);
|
super(location, inventory, resultInventory, container);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,195 +1,181 @@
|
|||||||
package com.songoda.core.nms.v1_13_R1;
|
package com.songoda.core.nms.v1_13_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import net.minecraft.server.v1_13_R1.*;
|
||||||
import java.util.logging.Level;
|
import org.bukkit.Location;
|
||||||
import java.util.logging.Logger;
|
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftInventoryView;
|
||||||
import net.minecraft.server.v1_13_R1.BlockPosition;
|
import org.bukkit.inventory.Inventory;
|
||||||
import net.minecraft.server.v1_13_R1.ChatMessage;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import net.minecraft.server.v1_13_R1.ContainerAnvil;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import net.minecraft.server.v1_13_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_13_R1.EntityPlayer;
|
import java.lang.reflect.Field;
|
||||||
import net.minecraft.server.v1_13_R1.IInventory;
|
import java.util.logging.Level;
|
||||||
import net.minecraft.server.v1_13_R1.PacketPlayOutOpenWindow;
|
import java.util.logging.Logger;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftInventoryView;
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
private final EntityPlayer entity;
|
||||||
import org.bukkit.inventory.ItemStack;
|
private final Inventory inventory;
|
||||||
|
private String title = "Repairing";
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
private int cost = -1;
|
||||||
|
private boolean canUse = true;
|
||||||
EntityPlayer entity;
|
private AnvilTextChange textChange = null;
|
||||||
Inventory inventory;
|
|
||||||
String title = "Repairing";
|
// used for setting custom inventory
|
||||||
private int cost = -1;
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
private boolean canUse = true;
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
private AnvilTextChange textChange = null;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
// used for setting custom inventory
|
static {
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
try {
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("repairInventory");
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("resultInventory");
|
||||||
static {
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
try {
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
} catch (Exception ex) {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("repairInventory");
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
}
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("resultInventory");
|
}
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
|
||||||
} catch (NoSuchFieldException ignore) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
try {
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
this.checkReachable = false;
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
this.entity = entity;
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
if (holder != null) {
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} catch (Exception ex) {
|
} else {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
}
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
|
||||||
}
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
}
|
try {
|
||||||
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
new Location(entity.world.getWorld(), 0, 0, 0),
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
this.checkReachable = false;
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
|
||||||
this.entity = entity;
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
if (holder != null) {
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
return view;
|
||||||
} else {
|
} catch (Exception ex) {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
return getBukkitView();
|
||||||
|
}
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
|
||||||
try {
|
@Override
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
public boolean canUse(EntityHuman entityhuman) {
|
||||||
new Location(entity.world.getWorld(), 0, 0, 0),
|
return canUse;
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
}
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
|
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
@Override
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
public void d() {
|
||||||
return view;
|
super.d();
|
||||||
} catch (Exception ex) {
|
if (cost >= 0) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
this.levelCost = cost;
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public void update() {
|
||||||
public boolean canUse(EntityHuman entityhuman) {
|
d();
|
||||||
return canUse;
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public String getRenameText() {
|
||||||
public void d() {
|
return this.renameText;
|
||||||
super.d();
|
}
|
||||||
if (cost >= 0) {
|
|
||||||
this.levelCost = cost;
|
@Override
|
||||||
}
|
public void setRenameText(String text) {
|
||||||
}
|
this.a(text);
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void update() {
|
@Override
|
||||||
d();
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
}
|
textChange = handler;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public String getRenameText() {
|
@Override
|
||||||
return this.renameText;
|
public String getCustomTitle() {
|
||||||
}
|
return title;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void setRenameText(String text) {
|
@Override
|
||||||
this.a(text);
|
public void setCustomTitle(String title) {
|
||||||
}
|
this.title = title;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
@Override
|
||||||
textChange = handler;
|
public void setLevelCost(int cost) {
|
||||||
}
|
this.cost = cost;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public String getCustomTitle() {
|
@Override
|
||||||
return title;
|
public int getLevelCost() {
|
||||||
}
|
return cost >= 0 ? cost : this.levelCost;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void setCustomTitle(String title) {
|
@Override
|
||||||
this.title = title;
|
public void setCanUse(boolean bool) {
|
||||||
}
|
this.canUse = bool;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void setLevelCost(int cost) {
|
@Override
|
||||||
this.cost = cost;
|
public ItemStack getLeftInput() {
|
||||||
}
|
return inventory.getItem(0);
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public int getLevelCost() {
|
@Override
|
||||||
return cost >= 0 ? cost : this.levelCost;
|
public ItemStack getRightInput() {
|
||||||
}
|
return inventory.getItem(1);
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void setCanUse(boolean bool) {
|
@Override
|
||||||
this.canUse = bool;
|
public ItemStack getOutput() {
|
||||||
}
|
return inventory.getItem(2);
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public ItemStack getLeftInput() {
|
@Override
|
||||||
return inventory.getItem(0);
|
public void setLeftInput(ItemStack item) {
|
||||||
}
|
inventory.setItem(0, item);
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public ItemStack getRightInput() {
|
@Override
|
||||||
return inventory.getItem(1);
|
public void setRightInput(ItemStack item) {
|
||||||
}
|
inventory.setItem(1, item);
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public ItemStack getOutput() {
|
@Override
|
||||||
return inventory.getItem(2);
|
public void setOutput(ItemStack item) {
|
||||||
}
|
inventory.setItem(2, item);
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void setLeftInput(ItemStack item) {
|
@Override
|
||||||
inventory.setItem(0, item);
|
public Inventory getInventory() {
|
||||||
}
|
return inventory;
|
||||||
|
}
|
||||||
@Override
|
|
||||||
public void setRightInput(ItemStack item) {
|
@Override
|
||||||
inventory.setItem(1, item);
|
public void open() {
|
||||||
}
|
|
||||||
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
@Override
|
int id = entity.nextContainerCounter();
|
||||||
public void setOutput(ItemStack item) {
|
|
||||||
inventory.setItem(2, item);
|
// Send the packet
|
||||||
}
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
@Override
|
// Set their active container to this anvil
|
||||||
public Inventory getInventory() {
|
entity.activeContainer = this;
|
||||||
return inventory;
|
|
||||||
}
|
// Set their active container window id to that counter stuff
|
||||||
|
entity.activeContainer.windowId = id;
|
||||||
@Override
|
|
||||||
public void open() {
|
// Add the slot listener
|
||||||
|
entity.activeContainer.addSlotListener(entity);
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_13_R2;
|
package com.songoda.core.nms.v1_13_R2.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,22 +1,22 @@
|
|||||||
package com.songoda.core.nms.v1_13_R2;
|
package com.songoda.core.nms.v1_13_R2.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_13_R2.ContainerAnvil;
|
import net.minecraft.server.v1_13_R2.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_13_R2.IInventory;
|
import net.minecraft.server.v1_13_R2.IInventory;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
|
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory, ContainerAnvil container) {
|
||||||
super(location, inventory, resultInventory, container);
|
super(location, inventory, resultInventory, container);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,186 +1,186 @@
|
|||||||
package com.songoda.core.nms.v1_13_R2;
|
package com.songoda.core.nms.v1_13_R2.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.v1_13_R2.BlockPosition;
|
import net.minecraft.server.v1_13_R2.BlockPosition;
|
||||||
import net.minecraft.server.v1_13_R2.ChatMessage;
|
import net.minecraft.server.v1_13_R2.ChatMessage;
|
||||||
import net.minecraft.server.v1_13_R2.ContainerAnvil;
|
import net.minecraft.server.v1_13_R2.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_13_R2.EntityHuman;
|
import net.minecraft.server.v1_13_R2.EntityHuman;
|
||||||
import net.minecraft.server.v1_13_R2.EntityPlayer;
|
import net.minecraft.server.v1_13_R2.EntityPlayer;
|
||||||
import net.minecraft.server.v1_13_R2.IInventory;
|
import net.minecraft.server.v1_13_R2.IInventory;
|
||||||
import net.minecraft.server.v1_13_R2.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_13_R2.PacketPlayOutOpenWindow;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftInventoryView;
|
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftInventoryView;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
private final EntityPlayer entity;
|
private final EntityPlayer entity;
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
private String title = "Repairing";
|
private String title = "Repairing";
|
||||||
private int cost = -1;
|
private int cost = -1;
|
||||||
private boolean canUse = true;
|
private boolean canUse = true;
|
||||||
private AnvilTextChange textChange = null;
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
// used for setting custom inventory
|
// used for setting custom inventory
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("repairInventory");
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("repairInventory");
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("resultInventory");
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("resultInventory");
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
this.checkReachable = false;
|
this.checkReachable = false;
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} else {
|
} else {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
try {
|
try {
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
new Location(entity.world.getWorld(), 0, 0, 0),
|
new Location(entity.world.getWorld(), 0, 0, 0),
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this), this);
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
return view;
|
return view;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
return getBukkitView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canUse(EntityHuman entityhuman) {
|
public boolean canUse(EntityHuman entityhuman) {
|
||||||
return canUse;
|
return canUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void d() {
|
public void d() {
|
||||||
super.d();
|
super.d();
|
||||||
if (cost >= 0) {
|
if (cost >= 0) {
|
||||||
this.levelCost = cost;
|
this.levelCost = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
d();
|
d();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRenameText() {
|
public String getRenameText() {
|
||||||
return this.renameText;
|
return this.renameText;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRenameText(String text) {
|
public void setRenameText(String text) {
|
||||||
this.a(text);
|
this.a(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
textChange = handler;
|
textChange = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomTitle() {
|
public String getCustomTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCustomTitle(String title) {
|
public void setCustomTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevelCost(int cost) {
|
public void setLevelCost(int cost) {
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
return cost >= 0 ? cost : this.levelCost;
|
return cost >= 0 ? cost : this.levelCost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCanUse(boolean bool) {
|
public void setCanUse(boolean bool) {
|
||||||
this.canUse = bool;
|
this.canUse = bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getLeftInput() {
|
public ItemStack getLeftInput() {
|
||||||
return inventory.getItem(0);
|
return inventory.getItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getRightInput() {
|
public ItemStack getRightInput() {
|
||||||
return inventory.getItem(1);
|
return inventory.getItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getOutput() {
|
public ItemStack getOutput() {
|
||||||
return inventory.getItem(2);
|
return inventory.getItem(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLeftInput(ItemStack item) {
|
public void setLeftInput(ItemStack item) {
|
||||||
inventory.setItem(0, item);
|
inventory.setItem(0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRightInput(ItemStack item) {
|
public void setRightInput(ItemStack item) {
|
||||||
inventory.setItem(1, item);
|
inventory.setItem(1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOutput(ItemStack item) {
|
public void setOutput(ItemStack item) {
|
||||||
inventory.setItem(2, item);
|
inventory.setItem(2, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getInventory() {
|
public Inventory getInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
|
||||||
// Counter stuff that the game uses to keep track of inventories
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
int id = entity.nextContainerCounter();
|
int id = entity.nextContainerCounter();
|
||||||
|
|
||||||
// Send the packet
|
// Send the packet
|
||||||
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
// Set their active container to this anvil
|
// Set their active container to this anvil
|
||||||
entity.activeContainer = this;
|
entity.activeContainer = this;
|
||||||
|
|
||||||
// Set their active container window id to that counter stuff
|
// Set their active container window id to that counter stuff
|
||||||
entity.activeContainer.windowId = id;
|
entity.activeContainer.windowId = id;
|
||||||
|
|
||||||
// Add the slot listener
|
// Add the slot listener
|
||||||
entity.activeContainer.addSlotListener(entity);
|
entity.activeContainer.addSlotListener(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
|
||||||
import net.minecraft.server.v1_14_R1.EntityPlayer;
|
import net.minecraft.server.v1_14_R1.EntityPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class NMS implements CoreNMS {
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CustomAnvil createAnvil(Player player) {
|
public CustomAnvil createAnvil(Player player) {
|
@ -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.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_14_R1.IInventory;
|
import net.minecraft.server.v1_14_R1.IInventory;
|
@ -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.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
|
||||||
import net.minecraft.server.v1_15_R1.EntityPlayer;
|
import net.minecraft.server.v1_15_R1.EntityPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class NMS implements CoreNMS {
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CustomAnvil createAnvil(Player player) {
|
public CustomAnvil createAnvil(Player player) {
|
@ -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.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_15_R1.IInventory;
|
import net.minecraft.server.v1_15_R1.IInventory;
|
@ -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.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_8_R1;
|
package com.songoda.core.nms.v1_8_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,20 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_8_R1;
|
package com.songoda.core.nms.v1_8_R1.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_8_R1.IInventory;
|
import net.minecraft.server.v1_8_R1.IInventory;
|
||||||
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) {
|
public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) {
|
||||||
super(inventory, resultInventory);
|
super(inventory, resultInventory);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,201 +1,201 @@
|
|||||||
package com.songoda.core.nms.v1_8_R1;
|
package com.songoda.core.nms.v1_8_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.v1_8_R1.BlockPosition;
|
import net.minecraft.server.v1_8_R1.BlockPosition;
|
||||||
import net.minecraft.server.v1_8_R1.ChatMessage;
|
import net.minecraft.server.v1_8_R1.ChatMessage;
|
||||||
import net.minecraft.server.v1_8_R1.ContainerAnvil;
|
import net.minecraft.server.v1_8_R1.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_8_R1.EntityHuman;
|
import net.minecraft.server.v1_8_R1.EntityHuman;
|
||||||
import net.minecraft.server.v1_8_R1.EntityPlayer;
|
import net.minecraft.server.v1_8_R1.EntityPlayer;
|
||||||
import net.minecraft.server.v1_8_R1.IInventory;
|
import net.minecraft.server.v1_8_R1.IInventory;
|
||||||
import net.minecraft.server.v1_8_R1.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_8_R1.PacketPlayOutOpenWindow;
|
||||||
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryView;
|
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventoryView;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
private final EntityPlayer entity;
|
private final EntityPlayer entity;
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
private String title = "Repairing";
|
private String title = "Repairing";
|
||||||
private int cost = -1;
|
private int cost = -1;
|
||||||
private boolean canUse = true;
|
private boolean canUse = true;
|
||||||
private AnvilTextChange textChange = null;
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
// used for setting custom inventory
|
// used for setting custom inventory
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for grabbing the rename text string
|
// used for grabbing the rename text string
|
||||||
static Field mc_ContainerAnvil_renameText;
|
static Field mc_ContainerAnvil_renameText;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
||||||
mc_ContainerAnvil_renameText.setAccessible(true);
|
mc_ContainerAnvil_renameText.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} else {
|
} else {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
try {
|
try {
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
return view;
|
return view;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
return getBukkitView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean a(EntityHuman entityhuman) {
|
public boolean a(EntityHuman entityhuman) {
|
||||||
return canUse;
|
return canUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void e() {
|
public void e() {
|
||||||
super.e();
|
super.e();
|
||||||
if (cost >= 0) {
|
if (cost >= 0) {
|
||||||
this.a = cost;
|
this.a = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
e();
|
e();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRenameText() {
|
public String getRenameText() {
|
||||||
try {
|
try {
|
||||||
//return this.l;
|
//return this.l;
|
||||||
return (String) mc_ContainerAnvil_renameText.get(this);
|
return (String) mc_ContainerAnvil_renameText.get(this);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRenameText(String text) {
|
public void setRenameText(String text) {
|
||||||
this.a(text);
|
this.a(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
textChange = handler;
|
textChange = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomTitle() {
|
public String getCustomTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCustomTitle(String title) {
|
public void setCustomTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevelCost(int cost) {
|
public void setLevelCost(int cost) {
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
return cost >= 0 ? cost : this.a;
|
return cost >= 0 ? cost : this.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCanUse(boolean bool) {
|
public void setCanUse(boolean bool) {
|
||||||
this.canUse = bool;
|
this.canUse = bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getLeftInput() {
|
public ItemStack getLeftInput() {
|
||||||
return inventory.getItem(0);
|
return inventory.getItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getRightInput() {
|
public ItemStack getRightInput() {
|
||||||
return inventory.getItem(1);
|
return inventory.getItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getOutput() {
|
public ItemStack getOutput() {
|
||||||
return inventory.getItem(2);
|
return inventory.getItem(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLeftInput(ItemStack item) {
|
public void setLeftInput(ItemStack item) {
|
||||||
inventory.setItem(0, item);
|
inventory.setItem(0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRightInput(ItemStack item) {
|
public void setRightInput(ItemStack item) {
|
||||||
inventory.setItem(1, item);
|
inventory.setItem(1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOutput(ItemStack item) {
|
public void setOutput(ItemStack item) {
|
||||||
inventory.setItem(2, item);
|
inventory.setItem(2, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getInventory() {
|
public Inventory getInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
|
||||||
// Counter stuff that the game uses to keep track of inventories
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
int id = entity.nextContainerCounter();
|
int id = entity.nextContainerCounter();
|
||||||
|
|
||||||
// Send the packet
|
// Send the packet
|
||||||
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
// Set their active container to this anvil
|
// Set their active container to this anvil
|
||||||
entity.activeContainer = this;
|
entity.activeContainer = this;
|
||||||
|
|
||||||
// Set their active container window id to that counter stuff
|
// Set their active container window id to that counter stuff
|
||||||
entity.activeContainer.windowId = id;
|
entity.activeContainer.windowId = id;
|
||||||
|
|
||||||
// Add the slot listener
|
// Add the slot listener
|
||||||
entity.activeContainer.addSlotListener(entity);
|
entity.activeContainer.addSlotListener(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_8_R2;
|
package com.songoda.core.nms.v1_8_R2.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,20 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_8_R2;
|
package com.songoda.core.nms.v1_8_R2.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_8_R2.IInventory;
|
import net.minecraft.server.v1_8_R2.IInventory;
|
||||||
import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) {
|
public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) {
|
||||||
super(inventory, resultInventory);
|
super(inventory, resultInventory);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,201 +1,201 @@
|
|||||||
package com.songoda.core.nms.v1_8_R2;
|
package com.songoda.core.nms.v1_8_R2.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.v1_8_R2.BlockPosition;
|
import net.minecraft.server.v1_8_R2.BlockPosition;
|
||||||
import net.minecraft.server.v1_8_R2.ChatMessage;
|
import net.minecraft.server.v1_8_R2.ChatMessage;
|
||||||
import net.minecraft.server.v1_8_R2.ContainerAnvil;
|
import net.minecraft.server.v1_8_R2.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_8_R2.EntityHuman;
|
import net.minecraft.server.v1_8_R2.EntityHuman;
|
||||||
import net.minecraft.server.v1_8_R2.EntityPlayer;
|
import net.minecraft.server.v1_8_R2.EntityPlayer;
|
||||||
import net.minecraft.server.v1_8_R2.IInventory;
|
import net.minecraft.server.v1_8_R2.IInventory;
|
||||||
import net.minecraft.server.v1_8_R2.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_8_R2.PacketPlayOutOpenWindow;
|
||||||
import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventoryView;
|
import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftInventoryView;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
private final EntityPlayer entity;
|
private final EntityPlayer entity;
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
private String title = "Repairing";
|
private String title = "Repairing";
|
||||||
private int cost = -1;
|
private int cost = -1;
|
||||||
private boolean canUse = true;
|
private boolean canUse = true;
|
||||||
private AnvilTextChange textChange = null;
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
// used for setting custom inventory
|
// used for setting custom inventory
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for grabbing the rename text string
|
// used for grabbing the rename text string
|
||||||
static Field mc_ContainerAnvil_renameText;
|
static Field mc_ContainerAnvil_renameText;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
||||||
mc_ContainerAnvil_renameText.setAccessible(true);
|
mc_ContainerAnvil_renameText.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} else {
|
} else {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
try {
|
try {
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
return view;
|
return view;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
return getBukkitView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean a(EntityHuman entityhuman) {
|
public boolean a(EntityHuman entityhuman) {
|
||||||
return canUse;
|
return canUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void e() {
|
public void e() {
|
||||||
super.e();
|
super.e();
|
||||||
if (cost >= 0) {
|
if (cost >= 0) {
|
||||||
this.a = cost;
|
this.a = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
e();
|
e();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRenameText() {
|
public String getRenameText() {
|
||||||
try {
|
try {
|
||||||
//return this.l;
|
//return this.l;
|
||||||
return (String) mc_ContainerAnvil_renameText.get(this);
|
return (String) mc_ContainerAnvil_renameText.get(this);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRenameText(String text) {
|
public void setRenameText(String text) {
|
||||||
this.a(text);
|
this.a(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
textChange = handler;
|
textChange = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomTitle() {
|
public String getCustomTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCustomTitle(String title) {
|
public void setCustomTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevelCost(int cost) {
|
public void setLevelCost(int cost) {
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
return cost >= 0 ? cost : this.a;
|
return cost >= 0 ? cost : this.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCanUse(boolean bool) {
|
public void setCanUse(boolean bool) {
|
||||||
this.canUse = bool;
|
this.canUse = bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getLeftInput() {
|
public ItemStack getLeftInput() {
|
||||||
return inventory.getItem(0);
|
return inventory.getItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getRightInput() {
|
public ItemStack getRightInput() {
|
||||||
return inventory.getItem(1);
|
return inventory.getItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getOutput() {
|
public ItemStack getOutput() {
|
||||||
return inventory.getItem(2);
|
return inventory.getItem(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLeftInput(ItemStack item) {
|
public void setLeftInput(ItemStack item) {
|
||||||
inventory.setItem(0, item);
|
inventory.setItem(0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRightInput(ItemStack item) {
|
public void setRightInput(ItemStack item) {
|
||||||
inventory.setItem(1, item);
|
inventory.setItem(1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOutput(ItemStack item) {
|
public void setOutput(ItemStack item) {
|
||||||
inventory.setItem(2, item);
|
inventory.setItem(2, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getInventory() {
|
public Inventory getInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
|
||||||
// Counter stuff that the game uses to keep track of inventories
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
int id = entity.nextContainerCounter();
|
int id = entity.nextContainerCounter();
|
||||||
|
|
||||||
// Send the packet
|
// Send the packet
|
||||||
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
// Set their active container to this anvil
|
// Set their active container to this anvil
|
||||||
entity.activeContainer = this;
|
entity.activeContainer = this;
|
||||||
|
|
||||||
// Set their active container window id to that counter stuff
|
// Set their active container window id to that counter stuff
|
||||||
entity.activeContainer.windowId = id;
|
entity.activeContainer.windowId = id;
|
||||||
|
|
||||||
// Add the slot listener
|
// Add the slot listener
|
||||||
entity.activeContainer.addSlotListener(entity);
|
entity.activeContainer.addSlotListener(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_8_R3;
|
package com.songoda.core.nms.v1_8_R3.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,20 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_8_R3;
|
package com.songoda.core.nms.v1_8_R3.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_8_R3.IInventory;
|
import net.minecraft.server.v1_8_R3.IInventory;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) {
|
public AnvilInventoryCustom(InventoryHolder holder, IInventory inventory, IInventory resultInventory) {
|
||||||
super(inventory, resultInventory);
|
super(inventory, resultInventory);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,201 +1,201 @@
|
|||||||
package com.songoda.core.nms.v1_8_R3;
|
package com.songoda.core.nms.v1_8_R3.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.v1_8_R3.BlockPosition;
|
import net.minecraft.server.v1_8_R3.BlockPosition;
|
||||||
import net.minecraft.server.v1_8_R3.ChatMessage;
|
import net.minecraft.server.v1_8_R3.ChatMessage;
|
||||||
import net.minecraft.server.v1_8_R3.ContainerAnvil;
|
import net.minecraft.server.v1_8_R3.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_8_R3.EntityHuman;
|
import net.minecraft.server.v1_8_R3.EntityHuman;
|
||||||
import net.minecraft.server.v1_8_R3.EntityPlayer;
|
import net.minecraft.server.v1_8_R3.EntityPlayer;
|
||||||
import net.minecraft.server.v1_8_R3.IInventory;
|
import net.minecraft.server.v1_8_R3.IInventory;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_8_R3.PacketPlayOutOpenWindow;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryView;
|
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryView;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
private final EntityPlayer entity;
|
private final EntityPlayer entity;
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
private String title = "Repairing";
|
private String title = "Repairing";
|
||||||
private int cost = -1;
|
private int cost = -1;
|
||||||
private boolean canUse = true;
|
private boolean canUse = true;
|
||||||
private AnvilTextChange textChange = null;
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
// used for setting custom inventory
|
// used for setting custom inventory
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for grabbing the rename text string
|
// used for grabbing the rename text string
|
||||||
static Field mc_ContainerAnvil_renameText;
|
static Field mc_ContainerAnvil_renameText;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
||||||
mc_ContainerAnvil_renameText.setAccessible(true);
|
mc_ContainerAnvil_renameText.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} else {
|
} else {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
try {
|
try {
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
return view;
|
return view;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
return getBukkitView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean a(EntityHuman entityhuman) {
|
public boolean a(EntityHuman entityhuman) {
|
||||||
return canUse;
|
return canUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void e() {
|
public void e() {
|
||||||
super.e();
|
super.e();
|
||||||
if (cost >= 0) {
|
if (cost >= 0) {
|
||||||
this.a = cost;
|
this.a = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
e();
|
e();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRenameText() {
|
public String getRenameText() {
|
||||||
try {
|
try {
|
||||||
//return this.l;
|
//return this.l;
|
||||||
return (String) mc_ContainerAnvil_renameText.get(this);
|
return (String) mc_ContainerAnvil_renameText.get(this);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRenameText(String text) {
|
public void setRenameText(String text) {
|
||||||
this.a(text);
|
this.a(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
textChange = handler;
|
textChange = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomTitle() {
|
public String getCustomTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCustomTitle(String title) {
|
public void setCustomTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevelCost(int cost) {
|
public void setLevelCost(int cost) {
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
return cost >= 0 ? cost : this.a;
|
return cost >= 0 ? cost : this.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCanUse(boolean bool) {
|
public void setCanUse(boolean bool) {
|
||||||
this.canUse = bool;
|
this.canUse = bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getLeftInput() {
|
public ItemStack getLeftInput() {
|
||||||
return inventory.getItem(0);
|
return inventory.getItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getRightInput() {
|
public ItemStack getRightInput() {
|
||||||
return inventory.getItem(1);
|
return inventory.getItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getOutput() {
|
public ItemStack getOutput() {
|
||||||
return inventory.getItem(2);
|
return inventory.getItem(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLeftInput(ItemStack item) {
|
public void setLeftInput(ItemStack item) {
|
||||||
inventory.setItem(0, item);
|
inventory.setItem(0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRightInput(ItemStack item) {
|
public void setRightInput(ItemStack item) {
|
||||||
inventory.setItem(1, item);
|
inventory.setItem(1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOutput(ItemStack item) {
|
public void setOutput(ItemStack item) {
|
||||||
inventory.setItem(2, item);
|
inventory.setItem(2, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getInventory() {
|
public Inventory getInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
|
||||||
// Counter stuff that the game uses to keep track of inventories
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
int id = entity.nextContainerCounter();
|
int id = entity.nextContainerCounter();
|
||||||
|
|
||||||
// Send the packet
|
// Send the packet
|
||||||
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
// Set their active container to this anvil
|
// Set their active container to this anvil
|
||||||
entity.activeContainer = this;
|
entity.activeContainer = this;
|
||||||
|
|
||||||
// Set their active container window id to that counter stuff
|
// Set their active container window id to that counter stuff
|
||||||
entity.activeContainer.windowId = id;
|
entity.activeContainer.windowId = id;
|
||||||
|
|
||||||
// Add the slot listener
|
// Add the slot listener
|
||||||
entity.activeContainer.addSlotListener(entity);
|
entity.activeContainer.addSlotListener(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_9_R1;
|
package com.songoda.core.nms.v1_9_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,21 +1,21 @@
|
|||||||
package com.songoda.core.nms.v1_9_R1;
|
package com.songoda.core.nms.v1_9_R1.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_9_R1.IInventory;
|
import net.minecraft.server.v1_9_R1.IInventory;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) {
|
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) {
|
||||||
super(location, inventory, resultInventory);
|
super(location, inventory, resultInventory);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,203 +1,203 @@
|
|||||||
package com.songoda.core.nms.v1_9_R1;
|
package com.songoda.core.nms.v1_9_R1.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.v1_9_R1.BlockPosition;
|
import net.minecraft.server.v1_9_R1.BlockPosition;
|
||||||
import net.minecraft.server.v1_9_R1.ChatMessage;
|
import net.minecraft.server.v1_9_R1.ChatMessage;
|
||||||
import net.minecraft.server.v1_9_R1.ContainerAnvil;
|
import net.minecraft.server.v1_9_R1.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_9_R1.EntityHuman;
|
import net.minecraft.server.v1_9_R1.EntityHuman;
|
||||||
import net.minecraft.server.v1_9_R1.EntityPlayer;
|
import net.minecraft.server.v1_9_R1.EntityPlayer;
|
||||||
import net.minecraft.server.v1_9_R1.IInventory;
|
import net.minecraft.server.v1_9_R1.IInventory;
|
||||||
import net.minecraft.server.v1_9_R1.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_9_R1.PacketPlayOutOpenWindow;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventoryView;
|
import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftInventoryView;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
private final EntityPlayer entity;
|
private final EntityPlayer entity;
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
private String title = "Repairing";
|
private String title = "Repairing";
|
||||||
private int cost = -1;
|
private int cost = -1;
|
||||||
private boolean canUse = true;
|
private boolean canUse = true;
|
||||||
private AnvilTextChange textChange = null;
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
// used for setting custom inventory
|
// used for setting custom inventory
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for grabbing the rename text string
|
// used for grabbing the rename text string
|
||||||
static Field mc_ContainerAnvil_renameText;
|
static Field mc_ContainerAnvil_renameText;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
||||||
mc_ContainerAnvil_renameText.setAccessible(true);
|
mc_ContainerAnvil_renameText.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} else {
|
} else {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
try {
|
try {
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
new Location(entity.world.getWorld(), 0, 0, 0),
|
new Location(entity.world.getWorld(), 0, 0, 0),
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
return view;
|
return view;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
return getBukkitView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean a(EntityHuman entityhuman) {
|
public boolean a(EntityHuman entityhuman) {
|
||||||
return canUse;
|
return canUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void e() {
|
public void e() {
|
||||||
super.e();
|
super.e();
|
||||||
if (cost >= 0) {
|
if (cost >= 0) {
|
||||||
this.a = cost;
|
this.a = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
e();
|
e();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRenameText() {
|
public String getRenameText() {
|
||||||
try {
|
try {
|
||||||
//return this.l;
|
//return this.l;
|
||||||
return (String) mc_ContainerAnvil_renameText.get(this);
|
return (String) mc_ContainerAnvil_renameText.get(this);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRenameText(String text) {
|
public void setRenameText(String text) {
|
||||||
this.a(text);
|
this.a(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
textChange = handler;
|
textChange = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomTitle() {
|
public String getCustomTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCustomTitle(String title) {
|
public void setCustomTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevelCost(int cost) {
|
public void setLevelCost(int cost) {
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
return cost >= 0 ? cost : this.a;
|
return cost >= 0 ? cost : this.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCanUse(boolean bool) {
|
public void setCanUse(boolean bool) {
|
||||||
this.canUse = bool;
|
this.canUse = bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getLeftInput() {
|
public ItemStack getLeftInput() {
|
||||||
return inventory.getItem(0);
|
return inventory.getItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getRightInput() {
|
public ItemStack getRightInput() {
|
||||||
return inventory.getItem(1);
|
return inventory.getItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getOutput() {
|
public ItemStack getOutput() {
|
||||||
return inventory.getItem(2);
|
return inventory.getItem(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLeftInput(ItemStack item) {
|
public void setLeftInput(ItemStack item) {
|
||||||
inventory.setItem(0, item);
|
inventory.setItem(0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRightInput(ItemStack item) {
|
public void setRightInput(ItemStack item) {
|
||||||
inventory.setItem(1, item);
|
inventory.setItem(1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOutput(ItemStack item) {
|
public void setOutput(ItemStack item) {
|
||||||
inventory.setItem(2, item);
|
inventory.setItem(2, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getInventory() {
|
public Inventory getInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
|
||||||
// Counter stuff that the game uses to keep track of inventories
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
int id = entity.nextContainerCounter();
|
int id = entity.nextContainerCounter();
|
||||||
|
|
||||||
// Send the packet
|
// Send the packet
|
||||||
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
// Set their active container to this anvil
|
// Set their active container to this anvil
|
||||||
entity.activeContainer = this;
|
entity.activeContainer = this;
|
||||||
|
|
||||||
// Set their active container window id to that counter stuff
|
// Set their active container window id to that counter stuff
|
||||||
entity.activeContainer.windowId = id;
|
entity.activeContainer.windowId = id;
|
||||||
|
|
||||||
// Add the slot listener
|
// Add the slot listener
|
||||||
entity.activeContainer.addSlotListener(entity);
|
entity.activeContainer.addSlotListener(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
package com.songoda.core.nms.v1_9_R2;
|
package com.songoda.core.nms.v1_9_R2.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CoreNMS;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
|
||||||
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
|
||||||
|
public class AnvilCore implements com.songoda.core.nms.anvil.AnvilCore {
|
||||||
public class NMS implements CoreNMS {
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player) {
|
||||||
public CustomAnvil createAnvil(Player player) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), null);
|
}
|
||||||
}
|
|
||||||
|
@Override
|
||||||
@Override
|
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
||||||
public CustomAnvil createAnvil(Player player, InventoryHolder holder) {
|
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
||||||
return new AnvilView(((CraftPlayer) player).getHandle(), holder);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
@ -1,21 +1,21 @@
|
|||||||
package com.songoda.core.nms.v1_9_R2;
|
package com.songoda.core.nms.v1_9_R2.anvil;
|
||||||
|
|
||||||
import net.minecraft.server.v1_9_R2.IInventory;
|
import net.minecraft.server.v1_9_R2.IInventory;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftInventoryAnvil;
|
import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftInventoryAnvil;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
|
|
||||||
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
public class AnvilInventoryCustom extends CraftInventoryAnvil {
|
||||||
|
|
||||||
final InventoryHolder holder;
|
final InventoryHolder holder;
|
||||||
|
|
||||||
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) {
|
public AnvilInventoryCustom(InventoryHolder holder, Location location, IInventory inventory, IInventory resultInventory) {
|
||||||
super(location, inventory, resultInventory);
|
super(location, inventory, resultInventory);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InventoryHolder getHolder() {
|
public InventoryHolder getHolder() {
|
||||||
return holder;
|
return holder;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,202 +1,202 @@
|
|||||||
package com.songoda.core.nms.v1_9_R2;
|
package com.songoda.core.nms.v1_9_R2.anvil;
|
||||||
|
|
||||||
import com.songoda.core.nms.CustomAnvil;
|
import com.songoda.core.nms.anvil.CustomAnvil;
|
||||||
import com.songoda.core.nms.methods.AnvilTextChange;
|
import com.songoda.core.nms.anvil.methods.AnvilTextChange;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import net.minecraft.server.v1_9_R2.BlockPosition;
|
import net.minecraft.server.v1_9_R2.BlockPosition;
|
||||||
import net.minecraft.server.v1_9_R2.ChatMessage;
|
import net.minecraft.server.v1_9_R2.ChatMessage;
|
||||||
import net.minecraft.server.v1_9_R2.ContainerAnvil;
|
import net.minecraft.server.v1_9_R2.ContainerAnvil;
|
||||||
import net.minecraft.server.v1_9_R2.EntityHuman;
|
import net.minecraft.server.v1_9_R2.EntityHuman;
|
||||||
import net.minecraft.server.v1_9_R2.EntityPlayer;
|
import net.minecraft.server.v1_9_R2.EntityPlayer;
|
||||||
import net.minecraft.server.v1_9_R2.IInventory;
|
import net.minecraft.server.v1_9_R2.IInventory;
|
||||||
import net.minecraft.server.v1_9_R2.PacketPlayOutOpenWindow;
|
import net.minecraft.server.v1_9_R2.PacketPlayOutOpenWindow;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftInventoryView;
|
import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftInventoryView;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
public class AnvilView extends ContainerAnvil implements CustomAnvil {
|
||||||
|
|
||||||
private final EntityPlayer entity;
|
private final EntityPlayer entity;
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
private String title = "Repairing";
|
private String title = "Repairing";
|
||||||
private int cost = -1;
|
private int cost = -1;
|
||||||
private boolean canUse = true;
|
private boolean canUse = true;
|
||||||
private AnvilTextChange textChange = null;
|
private AnvilTextChange textChange = null;
|
||||||
|
|
||||||
// used for setting custom inventory
|
// used for setting custom inventory
|
||||||
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
static Field mc_ContainerAnvil_repairInventory; // subcontainer with only the result
|
||||||
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
static Field mc_ContainerAnvil_resultInventory; // full inventory
|
||||||
static Field mc_ContainerAnvil_bukkitEntity;
|
static Field mc_ContainerAnvil_bukkitEntity;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
mc_ContainerAnvil_repairInventory = ContainerAnvil.class.getDeclaredField("h");
|
||||||
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
mc_ContainerAnvil_repairInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
mc_ContainerAnvil_resultInventory = ContainerAnvil.class.getDeclaredField("g");
|
||||||
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
mc_ContainerAnvil_resultInventory.setAccessible(true);
|
||||||
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
mc_ContainerAnvil_bukkitEntity = ContainerAnvil.class.getDeclaredField("bukkitEntity");
|
||||||
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
mc_ContainerAnvil_bukkitEntity.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// used for grabbing the rename text string
|
// used for grabbing the rename text string
|
||||||
static Field mc_ContainerAnvil_renameText;
|
static Field mc_ContainerAnvil_renameText;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
mc_ContainerAnvil_renameText = ContainerAnvil.class.getDeclaredField("l");
|
||||||
mc_ContainerAnvil_renameText.setAccessible(true);
|
mc_ContainerAnvil_renameText.setAccessible(true);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
public AnvilView(EntityPlayer entity, InventoryHolder holder) {
|
||||||
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
this.inventory = getBukkitView(entity, holder).getTopInventory();
|
||||||
} else {
|
} else {
|
||||||
this.inventory = getBukkitView().getTopInventory();
|
this.inventory = getBukkitView().getTopInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
public CraftInventoryView getBukkitView(EntityHuman player, InventoryHolder holder) {
|
||||||
try {
|
try {
|
||||||
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
AnvilInventoryCustom craftInventory = new AnvilInventoryCustom(holder,
|
||||||
new Location(entity.world.getWorld(), 0, 0, 0),
|
new Location(entity.world.getWorld(), 0, 0, 0),
|
||||||
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
(IInventory) mc_ContainerAnvil_repairInventory.get(this),
|
||||||
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
(IInventory) mc_ContainerAnvil_resultInventory.get(this));
|
||||||
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
CraftInventoryView view = new CraftInventoryView(player.getBukkitEntity(), craftInventory, this);
|
||||||
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
mc_ContainerAnvil_bukkitEntity.set(this, view);
|
||||||
return view;
|
return view;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Setup Error", ex);
|
||||||
}
|
}
|
||||||
return getBukkitView();
|
return getBukkitView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean a(EntityHuman entityhuman) {
|
public boolean a(EntityHuman entityhuman) {
|
||||||
return canUse;
|
return canUse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void e() {
|
public void e() {
|
||||||
super.e();
|
super.e();
|
||||||
if (cost >= 0) {
|
if (cost >= 0) {
|
||||||
this.a = cost;
|
this.a = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
e();
|
e();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getRenameText() {
|
public String getRenameText() {
|
||||||
try {
|
try {
|
||||||
//return this.l;
|
//return this.l;
|
||||||
return (String) mc_ContainerAnvil_renameText.get(this);
|
return (String) mc_ContainerAnvil_renameText.get(this);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
Logger.getLogger(AnvilView.class.getName()).log(Level.SEVERE, "Anvil Error", ex);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRenameText(String text) {
|
public void setRenameText(String text) {
|
||||||
this.a(text);
|
this.a(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOnChange(AnvilTextChange handler) {
|
public void setOnChange(AnvilTextChange handler) {
|
||||||
textChange = handler;
|
textChange = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCustomTitle() {
|
public String getCustomTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCustomTitle(String title) {
|
public void setCustomTitle(String title) {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLevelCost(int cost) {
|
public void setLevelCost(int cost) {
|
||||||
this.cost = cost;
|
this.cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLevelCost() {
|
public int getLevelCost() {
|
||||||
return cost >= 0 ? cost : this.a;
|
return cost >= 0 ? cost : this.a;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCanUse(boolean bool) {
|
public void setCanUse(boolean bool) {
|
||||||
this.canUse = bool;
|
this.canUse = bool;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getLeftInput() {
|
public ItemStack getLeftInput() {
|
||||||
return inventory.getItem(0);
|
return inventory.getItem(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getRightInput() {
|
public ItemStack getRightInput() {
|
||||||
return inventory.getItem(1);
|
return inventory.getItem(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getOutput() {
|
public ItemStack getOutput() {
|
||||||
return inventory.getItem(2);
|
return inventory.getItem(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setLeftInput(ItemStack item) {
|
public void setLeftInput(ItemStack item) {
|
||||||
inventory.setItem(0, item);
|
inventory.setItem(0, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRightInput(ItemStack item) {
|
public void setRightInput(ItemStack item) {
|
||||||
inventory.setItem(1, item);
|
inventory.setItem(1, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setOutput(ItemStack item) {
|
public void setOutput(ItemStack item) {
|
||||||
inventory.setItem(2, item);
|
inventory.setItem(2, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Inventory getInventory() {
|
public Inventory getInventory() {
|
||||||
return inventory;
|
return inventory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open() {
|
public void open() {
|
||||||
|
|
||||||
// Counter stuff that the game uses to keep track of inventories
|
// Counter stuff that the game uses to keep track of inventories
|
||||||
int id = entity.nextContainerCounter();
|
int id = entity.nextContainerCounter();
|
||||||
|
|
||||||
// Send the packet
|
// Send the packet
|
||||||
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
entity.playerConnection.sendPacket(new PacketPlayOutOpenWindow(id, "minecraft:anvil", new ChatMessage(title != null ? title : ""), 0));
|
||||||
|
|
||||||
// Set their active container to this anvil
|
// Set their active container to this anvil
|
||||||
entity.activeContainer = this;
|
entity.activeContainer = this;
|
||||||
|
|
||||||
// Set their active container window id to that counter stuff
|
// Set their active container window id to that counter stuff
|
||||||
entity.activeContainer.windowId = id;
|
entity.activeContainer.windowId = id;
|
||||||
|
|
||||||
// Add the slot listener
|
// Add the slot listener
|
||||||
entity.activeContainer.addSlotListener(entity);
|
entity.activeContainer.addSlotListener(entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user