Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1. package ---;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5.  
  6. import org.bukkit.Material;
  7. import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
  8. import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack;
  9. import org.bukkit.enchantments.Enchantment;
  10. import org.bukkit.entity.Player;
  11. import org.bukkit.event.EventHandler;
  12. import org.bukkit.event.Listener;
  13. import org.bukkit.event.enchantment.EnchantItemEvent;
  14. import org.bukkit.event.enchantment.PrepareItemEnchantEvent;
  15. import org.bukkit.inventory.ItemStack;
  16. import org.bukkit.plugin.Plugin;
  17.  
  18. import net.minecraft.server.v1_8_R1.BlockPosition;
  19. import net.minecraft.server.v1_8_R1.ChatSerializer;
  20. import net.minecraft.server.v1_8_R1.ContainerEnchantTable;
  21. import net.minecraft.server.v1_8_R1.EntityHuman;
  22. import net.minecraft.server.v1_8_R1.EntityPlayer;
  23. import net.minecraft.server.v1_8_R1.PacketPlayOutOpenWindow;
  24.  
  25. public class EnchantingTable implements Listener {
  26.  
  27. private static boolean registered;
  28.  
  29. private EntityPlayer entityPlayer;
  30. private String title = "";
  31. private EnchantingTableContainer container;
  32. private int costs[] = new int[3];
  33.  
  34. private HashMap> ench = new HashMap<>();
  35. private HashMap power = new HashMap<>();
  36.  
  37. public EnchantingTable(Player player, Plugin plugin){
  38. if(registered != true){
  39. plugin.getServer().getPluginManager().registerEvents(this, plugin);
  40. registered = true;
  41. }
  42. entityPlayer = ((CraftPlayer) player).getHandle();
  43. container = new EnchantingTableContainer(entityPlayer);
  44. }
  45.  
  46. public void open(){
  47. int c = entityPlayer.nextContainerCounter();
  48.  
  49. entityPlayer.playerConnection.sendPacket(new PacketPlayOutOpenWindow(c,"minecraft:enchanting_table", ChatSerializer.a("{'text':'"+title+"'}")));
  50.  
  51.  
  52. entityPlayer.activeContainer = container;
  53. entityPlayer.activeContainer.windowId = c;
  54. entityPlayer.activeContainer.addSlotListener(entityPlayer);
  55. updatePrice();
  56. }
  57. public void setTitle(String title){
  58. this.title = title;
  59. }
  60.  
  61. public void addItem(EnchantingSlot enchantingSlot, ItemStack stack){
  62. container.setItem(enchantingSlot.getSlot(), CraftItemStack.asNMSCopy(stack));
  63. updatePrice();
  64. }
  65.  
  66. public enum EnchantingSlot{
  67. TO_ENCHANT(0),
  68. LAPIS(1);
  69.  
  70. private int slot;
  71. private EnchantingSlot(int slot) {
  72. this.slot = slot;
  73. }
  74. public int getSlot() {
  75. return slot;
  76. }
  77. }
  78.  
  79. public void setLevelEnchantment(LevelSlot levelSlot, int level){
  80. container.costs[levelSlot.getSlot()] = level;
  81. costs[levelSlot.getSlot()] = level;
  82. }
  83.  
  84. public enum LevelSlot{
  85. TOP(0),
  86. MIDDLE(1),
  87. BOTTOM(2);
  88.  
  89. private int slot;
  90. private LevelSlot(int slot) {
  91. this.slot = slot;
  92. }
  93. public int getSlot() {
  94. return slot;
  95. }
  96. }
  97.  
  98. private void updatePrice(){
  99. for(int i = 0; i container.costs[i] = costs[i];
  100. }
  101. }
  102. private class EnchantingTableContainer extends ContainerEnchantTable{
  103. public EnchantingTableContainer(EntityHuman entity) {
  104. super(entity.inventory, entity.world, new BlockPosition(0, 0, 0));
  105. }
  106.  
  107. @Override
  108. public boolean a(EntityHuman entityhuman) {
  109. return true;
  110. }
  111. }
  112.  
  113. public void addEnchantment(LevelSlot levelSlot, Enchantment enchantment, int level){
  114. if(ench.containsKey(levelSlot.getSlot())!=true)ench.put(costs[levelSlot.getSlot()], new ArrayList());
  115. ArrayList enchantments = ench.get(costs[levelSlot.getSlot()]);
  116. ench.remove(enchantments);
  117. enchantments.add(enchantment);
  118. ench.put(levelSlot.getSlot(), enchantments);
  119. power.put(enchantment, level);
  120. }
  121.  
  122.  
  123.  
  124. @EventHandler
  125. public void onInv(PrepareItemEnchantEvent e){
  126. if(e.getInventory() != null){
  127. if(e.getItem() != null){
  128. updatePrice();
  129. }
  130. }
  131. }
  132. @EventHandler
  133. public void Ench(EnchantItemEvent e){
  134. Player player = e.getEnchanter();
  135. if(player.getLevel()>=e.getExpLevelCost()){
  136. player.setLevel(player.getLevel()-e.getExpLevelCost());
  137. for(Enchantment enchantment : ench.get(e.getExpLevelCost())){
  138. e.getItem().addUnsafeEnchantment(enchantment, power.get(enchantment));
  139. }
  140. ItemStack stack = e.getItem();
  141. e.getInventory().setItem(0, new ItemStack(Material.AIR));
  142. e.getInventory().setItem(0, stack);
  143.  
  144. }
  145. }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement