Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ---;
- import java.util.ArrayList;
- import java.util.HashMap;
- import org.bukkit.Material;
- import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
- import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack;
- import org.bukkit.enchantments.Enchantment;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.enchantment.EnchantItemEvent;
- import org.bukkit.event.enchantment.PrepareItemEnchantEvent;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.plugin.Plugin;
- import net.minecraft.server.v1_8_R1.BlockPosition;
- import net.minecraft.server.v1_8_R1.ChatSerializer;
- import net.minecraft.server.v1_8_R1.ContainerEnchantTable;
- import net.minecraft.server.v1_8_R1.EntityHuman;
- import net.minecraft.server.v1_8_R1.EntityPlayer;
- import net.minecraft.server.v1_8_R1.PacketPlayOutOpenWindow;
- public class EnchantingTable implements Listener {
- private static boolean registered;
- private EntityPlayer entityPlayer;
- private String title = "";
- private EnchantingTableContainer container;
- private int costs[] = new int[3];
- private HashMap> ench = new HashMap<>();
- private HashMap power = new HashMap<>();
- public EnchantingTable(Player player, Plugin plugin){
- if(registered != true){
- plugin.getServer().getPluginManager().registerEvents(this, plugin);
- registered = true;
- }
- entityPlayer = ((CraftPlayer) player).getHandle();
- container = new EnchantingTableContainer(entityPlayer);
- }
- public void open(){
- int c = entityPlayer.nextContainerCounter();
- entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(c,"minecraft:enchanting_table", ChatSerializer.a("{'text':'"+title+"'}")));
- entityPlayer.activeContainer = container;
- entityPlayer.activeContainer.windowId = c;
- entityPlayer.activeContainer.addSlotListener(entityPlayer);
- updatePrice();
- }
- public void setTitle(String title){
- this.title = title;
- }
- public void addItem(EnchantingSlot enchantingSlot, ItemStack stack){
- container.setItem(enchantingSlot.getSlot(), CraftItemStack.asNMSCopy(stack));
- updatePrice();
- }
- public enum EnchantingSlot{
- TO_ENCHANT(0),
- LAPIS(1);
- private int slot;
- private EnchantingSlot(int slot) {
- this.slot = slot;
- }
- public int getSlot() {
- return slot;
- }
- }
- public void setLevelEnchantment(LevelSlot levelSlot, int level){
- container.costs[levelSlot.getSlot()] = level;
- costs[levelSlot.getSlot()] = level;
- }
- public enum LevelSlot{
- TOP(0),
- MIDDLE(1),
- BOTTOM(2);
- private int slot;
- private LevelSlot(int slot) {
- this.slot = slot;
- }
- public int getSlot() {
- return slot;
- }
- }
- private void updatePrice(){
- for(int i = 0; i container.costs[i] = costs[i];
- }
- }
- private class EnchantingTableContainer extends ContainerEnchantTable{
- public EnchantingTableContainer(EntityHuman entity) {
- super(entity.inventory, entity.world, new BlockPosition(0, 0, 0));
- }
- @Override
- public boolean a(EntityHuman entityhuman) {
- return true;
- }
- }
- public void addEnchantment(LevelSlot levelSlot, Enchantment enchantment, int level){
- if(ench.containsKey(levelSlot.getSlot())!=true)ench.put(costs[levelSlot.getSlot()], new ArrayList());
- ArrayList enchantments = ench.get(costs[levelSlot.getSlot()]);
- ench.remove(enchantments);
- enchantments.add(enchantment);
- ench.put(levelSlot.getSlot(), enchantments);
- power.put(enchantment, level);
- }
- @EventHandler
- public void onInv(PrepareItemEnchantEvent e){
- if(e.getInventory() != null){
- if(e.getItem() != null){
- updatePrice();
- }
- }
- }
- @EventHandler
- public void Ench(EnchantItemEvent e){
- Player player = e.getEnchanter();
- if(player.getLevel()>=e.getExpLevelCost()){
- player.setLevel(player.getLevel()-e.getExpLevelCost());
- for(Enchantment enchantment : ench.get(e.getExpLevelCost())){
- e.getItem().addUnsafeEnchantment(enchantment, power.get(enchantment));
- }
- ItemStack stack = e.getItem();
- e.getInventory().setItem(0, new ItemStack(Material.AIR));
- e.getInventory().setItem(0, stack);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement