lectern.txt 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. event.load("player_toss");
  2. event.load("block_click");
  3. par = particle.get("minecraft:witch");
  4. prefix_money = "§2Money";
  5. prefix_commands = "§6Commands";
  6. max_ench_lvl = map.new();
  7. map.add(max_ench_lvl, enchantment.get("efficiency"), 10);
  8. map.add(max_ench_lvl, enchantment.get("smite"), 10);
  9. map.add(max_ench_lvl, enchantment.get("bane_of_arthropods"), 10);
  10. map.add(max_ench_lvl, enchantment.get("loyalty"), 5);
  11. map.add(max_ench_lvl, enchantment.get("piercing"), 5);
  12. map.add(max_ench_lvl, enchantment.get("lure"), 5);
  13. map.add(max_ench_lvl, enchantment.get("luck_of_the_sea"), 5);
  14. map.add(max_ench_lvl, enchantment.get("riptide"), 5);
  15. map.add(max_ench_lvl, enchantment.get("unbreaking"), 5);
  16. map.add(max_ench_lvl, enchantment.get("quick_charge"), 5);
  17. map.add(max_ench_lvl, enchantment.get("protection"), 5);
  18. map.add(max_ench_lvl, enchantment.get("fire_protection"), 5);
  19. map.add(max_ench_lvl, enchantment.get("blast_protection"), 5);
  20. map.add(max_ench_lvl, enchantment.get("projectile_protection"), 5);
  21. map.add(max_ench_lvl, enchantment.get("feather_falling"), 5);
  22. map.add(max_ench_lvl, enchantment.get("respiration"), 5);
  23. map.add(max_ench_lvl, enchantment.get("thorns"), 5);
  24. map.add(max_ench_lvl, enchantment.get("depth_strider"), 5);
  25. map.add(max_ench_lvl, enchantment.get("frost_walker"), 2);
  26. map.add(max_ench_lvl, enchantment.get("soul_speed"), 3);
  27. map.add(max_ench_lvl, enchantment.get("sharpness"), 10);
  28. map.add(max_ench_lvl, enchantment.get("knockback"), 5);
  29. map.add(max_ench_lvl, enchantment.get("fire_aspect"), 2);
  30. map.add(max_ench_lvl, enchantment.get("looting"), 5);
  31. map.add(max_ench_lvl, enchantment.get("sweeping"), 5);
  32. map.add(max_ench_lvl, enchantment.get("power"), 5);
  33. map.add(max_ench_lvl, enchantment.get("punch"), 5);
  34. map.add(max_ench_lvl, enchantment.get("impaling"), 5);
  35. map.add(max_ench_lvl, enchantment.get("fortune"), 5);
  36. msg("dev", "§bLectern §rloaded.");
  37. @wait
  38. wait();
  39. loc = entity.getLocation(player);
  40. world_name = world.getName(loc.getWorld(loc));
  41. if(world.isCreativeName(world_name)) {
  42. goto("wait");
  43. }
  44. ignoreGoto(event);
  45. goto("wait");
  46. @player_toss
  47. target_loc = player.getTarget(player, 5);
  48. block_type = block.getType(target_loc);
  49. if(block_type == "minecraft:lectern") {
  50. cancel = true;
  51. item.entity.spawn(item.entity.new(loc.mod(target_loc, 0.5, 1.5, 0.5), item));
  52. }
  53. goto("wait");
  54. @block_click
  55. if(hand == "OFF_HAND") {
  56. goto("wait");
  57. }
  58. if(action == "left") {
  59. goto("wait");
  60. }
  61. if(block_type != "minecraft:lectern") {
  62. goto("wait");
  63. }
  64. itementity = entity.get(loc.mod(block_loc, 0.5, 0.9, 0.5), 0.2, "net.minecraft.entity.item.ItemEntity");
  65. if(itementity == null) {
  66. goto("wait");
  67. }
  68. list = entity.near(itementity, 0.2);
  69. list.add(list, itementity);
  70. temp_list = list.new();
  71. for(i = 0; i < list.getSize(list); i++) {
  72. entity = list.getIndex(list, i);
  73. if(entity.getType(entity) != "item") {
  74. list.add(temp_list, entity);
  75. }
  76. }
  77. for(i = 0; i < list.getSize(temp_list); i++) {
  78. entity = list.getIndex(temp_list, i);
  79. list.remove(list, entity);
  80. }
  81. if(list.getSize(list) < 2) {
  82. msg.prefix(player, prefix_commands, "Too few items on lectern.");
  83. goto("wait");
  84. }
  85. a = array.new(2, 6); //0 = item, 1 = itementity, 2 = enchantments, 3 = enchanted, 4 = enchanted_book, 5 = book
  86. size = 0;
  87. for(i = 0; i < list.getSize(list); i++) {
  88. entity = list.getIndex(list, i);
  89. item = item.entity.get(entity);
  90. size += item.getAmount(item);
  91. if(size > 2) {
  92. msg.prefix(player, prefix_commands, "Too many items on lectern.");
  93. goto("wait");
  94. }
  95. map = enchantment.readFromItem(item);
  96. a[i, 0] = item;
  97. a[i, 1] = entity;
  98. a[i, 2] = map;
  99. a[i, 4] = false;
  100. a[i, 5] = false;
  101. if(map.getSize(map) > 0) {
  102. //Verzauberte Items
  103. a[i, 3] = true;
  104. if(item.getType(item) == "minecraft:enchanted_book") {
  105. a[i, 4] = true;
  106. }
  107. } else {
  108. //Nicht verzauberte Items
  109. a[i, 3] = false;
  110. if(item.getType(item) == "minecraft:book") {
  111. a[i, 5] = true;
  112. }
  113. }
  114. }
  115. lectern_action = null;
  116. if(a[0, 4] == true && a[1, 4] == true) {
  117. //Beide Items sind verzauberte Bücher
  118. lectern_action = 0;
  119. }
  120. elseif(a[0, 5] == true || a[1, 5] == true) {
  121. //Eines der beiden Items ist ein normales Buch
  122. if(a[0, 4] == true || a[1, 4] == true) {
  123. //Eines der beiden Items ist ein verzaubertes Buch
  124. lectern_action = 1;
  125. } elseif(a[0, 3] == true || a[1, 3] == true) {
  126. //Eines der beiden Items ist ein verzaubertes Item
  127. lectern_action = 2;
  128. }
  129. }
  130. elseif(a[0, 4] == true || a[1, 4] == true) {
  131. lectern_action = 3;
  132. }
  133. if(lectern_action == null) {
  134. goto("wait");
  135. }
  136. if(lectern_action == 0) {
  137. //Verzauberungsbücher mergen
  138. item1 = a[0, 0];
  139. item_entity1 = a[0, 1];
  140. item_entity2 = a[1, 1];
  141. map1 = a[0, 2];
  142. map2 = a[1, 2];
  143. map_size1 = map.getSize(map1);
  144. map_size2 = map.getSize(map2);
  145. iter = map.iterator(map2);
  146. betrag = 0;
  147. extra = 0;
  148. while(hasNext(iter)) {
  149. element = next(iter);
  150. key = map.getKey(element);
  151. level1 = map.getValue(element);
  152. level2 = map.getOrDefault(map1, key, 0);
  153. if(level1 == level2) {
  154. max_lvl = map.get(max_ench_lvl, key);
  155. //max_lvl = map.getOrDefault(max_ench_lvl, key, enchantment.getMaxLevel(key));
  156. if(max_lvl == null) {
  157. msg.prefix(player, prefix_commands, "Unknown enchantment.");
  158. goto("wait");
  159. }
  160. if(level1 >= max_lvl) {
  161. msg.prefix(player, prefix_commands, "Maximum level already reached.");
  162. goto("wait");
  163. }
  164. extra += 200;
  165. level1++;
  166. }
  167. if(level2 > level1) {
  168. level1 = level2;
  169. }
  170. map.add(map1, key, level1);
  171. }
  172. if(map_size1 > map_size2) {
  173. map = map1;
  174. } else {
  175. map = map2;
  176. }
  177. iter = map.iterator(map);
  178. while(hasNext(iter)) {
  179. element = next(iter);
  180. level = map.getValue(element);
  181. betrag += level * 100 + extra;
  182. }
  183. if(!hasEnoughMoney(player.getId(player), betrag)) {
  184. msg.prefix(player, prefix_money, concat("Not enough snuvis in inventory. This action costs ", text.number(betrag), " snuvis."));
  185. goto("wait");
  186. }
  187. subMoney(player, betrag);
  188. enchantment.writeToItem(map1, item1);
  189. item.entity.set(item_entity1, item.clone(item1));
  190. entity.remove(item_entity2);
  191. } elseif(lectern_action == 1) {
  192. //Verzauberungsbuch kopieren
  193. if(a[0, 5]) {
  194. book_index = 0;
  195. other_index = 1;
  196. } else {
  197. book_index = 1;
  198. other_index = 0;
  199. }
  200. item1 = a[book_index, 0];
  201. item_entity1 = a[book_index, 1];
  202. item2 = a[other_index, 0];
  203. item_entity2 = a[other_index, 1];
  204. map2 = a[other_index, 2];
  205. map_size = map.getSize(map2);
  206. betrag = 100 * map_size;
  207. if(!hasEnoughMoney(player.getId(player), betrag)) {
  208. msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
  209. goto("wait");
  210. }
  211. subMoney(player, betrag);
  212. item1 = read.item("minecraft:enchanted_book");
  213. enchantment.writeToItem(map2, item1);
  214. item.entity.set(item_entity1, item1);
  215. item.entity.set(item_entity2, item.clone(item2));
  216. } elseif(lectern_action == 2) {
  217. //Einzelne Verzauberung herunterziehen
  218. if(a[0, 5]) {
  219. book_index = 0;
  220. other_index = 1;
  221. } else {
  222. book_index = 1;
  223. other_index = 0;
  224. }
  225. item_entity1 = a[book_index, 1];
  226. map1 = map.new();
  227. item2 = a[other_index, 0];
  228. item_entity2 = a[other_index, 1];
  229. map2 = a[other_index, 2];
  230. item1 = read.item("minecraft:enchanted_book");
  231. element = next(map.iterator(map2));
  232. key = map.getKey(element);
  233. value = map.getValue(element);
  234. map.add(map1, key, value);
  235. map.remove(map2, key);
  236. betrag = 100 * value;
  237. if(!hasEnoughMoney(player.getId(player), betrag)) {
  238. msg.prefix(player, prefix_money, concat("Not enough snuvis in your ccount. This action costs ", text.number(betrag), " snuvis."));
  239. goto("wait");
  240. }
  241. subMoney(player, betrag);
  242. enchantment.writeToItem(map1, item1);
  243. enchantment.writeToItem(map2, item2);
  244. item.entity.set(item_entity1, item1);
  245. item.entity.set(item_entity2, item.clone(item2));
  246. } elseif(lectern_action == 3) {
  247. //Alle Verzauberungen vom Buch auf das Item übertragen
  248. betrag = 0;
  249. if(a[0, 4]) {
  250. ench_book_index = 0;
  251. other_index = 1;
  252. } else {
  253. ench_book_index = 1;
  254. other_index = 0;
  255. }
  256. item1 = a[ench_book_index, 0];
  257. item_entity1 = a[ench_book_index, 1];
  258. map1 = a[ench_book_index, 2];
  259. item2 = a[other_index, 0];
  260. item_entity2 = a[other_index, 1];
  261. map2 = a[other_index, 2];
  262. map_size1 = map.getSize(map1);
  263. map_size2 = map.getSize(map2);
  264. iter = map.iterator(map1);
  265. while(hasNext(iter)) {
  266. element = next(iter);
  267. key = map.getKey(element);
  268. value = map.getValue(element);
  269. value2 = map.getOrDefault(map2, key, 0);
  270. if(value2 > value) {
  271. value = value2;
  272. }
  273. map.add(map2, key, value);
  274. }
  275. if(map_size1 > map_size2) {
  276. map = map1;
  277. } else {
  278. map = map2;
  279. }
  280. iter = map.iterator(map);
  281. while(hasNext(iter)) {
  282. element = next(iter);
  283. level = map.getValue(element);
  284. betrag += level * 100;
  285. }
  286. if(!hasEnoughMoney(player.getId(player), betrag)) {
  287. msg.prefix(player, prefix_money, concat("Not enough snuvis on your account. This action costs ", text.number(betrag), " snuvis."));
  288. goto("wait");
  289. }
  290. subMoney(player, betrag);
  291. enchantment.writeToItem(map2, item2);
  292. item.entity.set(item_entity2, item.clone(item2));
  293. entity.remove(item_entity1);
  294. }
  295. entity.throw(item_entity1, 0, 0.3, 0);
  296. entity.throw(item_entity2, 0, 0.3, 0);
  297. particle.spawn(loc.mod(block_loc, 0.5, 1.4, 0.5), par, 20, 0, 0.25, 0.25, 0.25);
  298. msg.prefix(player, prefix_money, concat("This cost " , text.number(betrag), " snuvis."));
  299. goto("wait");