Advertisement
Lisenochek

Untitled

Nov 9th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.86 KB | None | 0 0
  1. package ru.proempire.lisenochek.freehack;
  2.  
  3. import org.bukkit.Bukkit;
  4. import org.bukkit.Color;
  5. import org.bukkit.FireworkEffect;
  6. import org.bukkit.Material;
  7. import org.bukkit.entity.Firework;
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.inventory.Inventory;
  10. import org.bukkit.inventory.ItemStack;
  11. import org.bukkit.inventory.meta.FireworkMeta;
  12. import org.bukkit.potion.PotionEffect;
  13. import org.bukkit.potion.PotionEffectType;
  14. import org.bukkit.scheduler.BukkitRunnable;
  15.  
  16. import java.util.*;
  17.  
  18. public class WireGame {
  19.  
  20. private static HashMap<String, WireGame> playersMap = new HashMap<>();
  21. private static List<Integer> wallsList = Arrays.asList(13, 14, 15, 16, 24, 30, 37, 38, 39);
  22.  
  23. private Inventory inventory;
  24. private Player player;
  25. private Type currect;
  26. private HashMap<Integer, Type> wiresList;
  27.  
  28. private int activeSlot;
  29.  
  30. private boolean green;
  31. private boolean blue;
  32. private boolean red;
  33.  
  34. private WireGame(Player player) {
  35. this.inventory = Bukkit.createInventory(null, 54, Utils.stripColor("&2&lПровода"));
  36. this.player = player;
  37. this.wiresList = new HashMap<>();
  38. playersMap.put(player.getName(), this);
  39. }
  40.  
  41. public static WireGame create(Player player) {
  42. return new WireGame(player);
  43. }
  44.  
  45. public static WireGame fromPlayerName(Player player) {
  46. return playersMap.get(player.getName());
  47. }
  48.  
  49. public static List<Integer> getWallsList() {
  50. return wallsList;
  51. }
  52.  
  53. public Type getCurrect() {
  54. return currect;
  55. }
  56.  
  57. public List<Integer> getSlotsFromType(Type type) {
  58. List<Integer> list = new ArrayList<>();
  59. for (Map.Entry<Integer, Type> map : wiresList.entrySet()) if (map.getValue() == type) list.add(map.getKey());
  60. return list;
  61. }
  62.  
  63. public void setCurrect(Type currect) {
  64. this.currect = currect;
  65. }
  66.  
  67. public void addWire(int slot, Type type) {
  68.  
  69. if (!checkWire()) {
  70. removeWire(currect);
  71. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Упс"));
  72. return;
  73. }
  74.  
  75. if (activeSlot != 0 && !getSlotsAround(activeSlot).contains(slot)) {
  76. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Можно продолжить только с конца"));
  77. return;
  78. }
  79.  
  80. ItemStack stack = inventory.getItem(slot);
  81.  
  82. if (stack.getType() == Material.STAINED_GLASS_PANE && stack.getData().getData() == 15) {
  83. clearWires();
  84. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Черт, сигнализация! Все провода перегорели!"));
  85. return;
  86. }
  87.  
  88. if (stack.getType() == Material.STAINED_GLASS_PANE && stack.getData().getData() != 0) {
  89. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Здесь нельзя проложить проводё"));
  90. return;
  91. }
  92.  
  93. activeSlot = slot;
  94. inventory.setItem(slot, type.getWireStack());
  95. wiresList.put(slot, type);
  96.  
  97. if (!checkPlace()) {
  98. removeWire(currect);
  99. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Похоже не осталось места под провод"));
  100. return;
  101. }
  102.  
  103. if (!currect.getWinSlots().contains(slot)) return;
  104.  
  105. completeConnect();
  106. }
  107.  
  108. public void completeConnect() {
  109.  
  110. for (int slots : getSlotsFromType(currect)) inventory.setItem(slots, ISBuilder.getBuilder(inventory.getItem(slots)).setEnchantGlow().hideFlags().getStack());
  111.  
  112. ISBuilder builder;
  113. int setSlot;
  114.  
  115. switch (currect) {
  116. case GREEN: {
  117. green = true;
  118. builder = ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 5, 1, "&a&lЗеленый провод");
  119. setSlot = 26;
  120. break;
  121. }
  122.  
  123. case BLUE: {
  124. blue = true;
  125. builder = ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 11, 1, "&b&lСиний провод");
  126. setSlot = 35;
  127. break;
  128. }
  129.  
  130. case RED: {
  131. red = true;
  132. builder = ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 14, 1, "&c&lКрасный провод");
  133. setSlot = 44;
  134. break;
  135. }
  136.  
  137. default: {
  138. return;
  139. }
  140. }
  141.  
  142. inventory.setItem(setSlot, builder.getStack());
  143. currect = null;
  144. activeSlot = 0;
  145.  
  146. if (!green || !blue || !red) {
  147. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Вы соединили провод, так держать!"));
  148. return;
  149. }
  150.  
  151. player.closeInventory();
  152. playersMap.remove(player.getName());
  153.  
  154. if (Utils.getRandom().nextInt(100) <= 15) {
  155. for (Player players : Bukkit.getOnlinePlayers()) players.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Openned " + player.getName()));
  156. return;
  157. }
  158.  
  159. if (Utils.getRandom().nextInt(100) <= 15) {
  160. for (Player players : Bukkit.getOnlinePlayers()) players.sendMessage(Utils.getPrefix() + Utils.stripColor("&7" + player.getName() + " взломал сервер, античит выключил сервер через 5 минут"));
  161. return;
  162. }
  163.  
  164. if (Utils.getRandom().nextInt(100) <= 15) {
  165. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Вы взломали сервер, но античит защитил его"));
  166. return;
  167. }
  168.  
  169. if (Utils.getRandom().nextInt(100) <= 11) {
  170. player.getWorld().strikeLightning(player.getLocation());
  171. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Видимо боги не одобряют ваши деяния"));
  172. return;
  173. }
  174.  
  175. if (Utils.getRandom().nextInt(100) <= 11) {
  176. player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 1200, 1));
  177. player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 1200, 1));
  178. player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 1200, 1));
  179. player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, 1200, 0));
  180. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Вы взломали свой статус и выдали себе эффекты"));
  181. return;
  182. }
  183.  
  184. if (Utils.getRandom().nextInt(100) <= 11) {
  185. Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + player.getName() + " &7Античит сработал и забанил вас 30s");
  186. return;
  187. }
  188.  
  189. if (Utils.getRandom().nextInt(100) >= 15) return;
  190.  
  191. new BukkitRunnable() {
  192.  
  193. int amount = 0;
  194.  
  195. @Override
  196. public void run() {
  197.  
  198. if (player == null) {
  199. cancel();
  200. return;
  201. }
  202.  
  203. if (amount == 10) {
  204. cancel();
  205. return;
  206. }
  207.  
  208. Firework firework = player.getWorld().spawn(player.getLocation().add(0, 2, 0), Firework.class);
  209. FireworkMeta meta = firework.getFireworkMeta();
  210.  
  211. amount++;
  212. meta.setPower(2);
  213. meta.addEffect(FireworkEffect.builder().withColor(Color.GREEN).flicker(true).withFade(Color.BLUE).trail(true).with(FireworkEffect.Type.STAR).build());
  214. firework.setFireworkMeta(meta);
  215. }
  216. }.runTaskTimer(Main.plugin, 1, 20);
  217. player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7" + player.getName() + " взломал систему фейерверков сервера"));
  218. }
  219.  
  220. public void removeWire(Type type) {
  221. for (Integer slot : getSlotsFromType(type)) {
  222. wiresList.remove(slot);
  223. inventory.setItem(slot, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 0, 1, " ").getStack());
  224. }
  225. currect = null;
  226. activeSlot = 0;
  227. }
  228.  
  229. public void clearWires() {
  230. playersMap.remove(player.getName());
  231. create(player).openGUI();
  232. }
  233.  
  234. public boolean checkPlace() {
  235.  
  236. boolean isValid = false;
  237.  
  238. for (Integer slots : getSlotsAround(activeSlot)) {
  239.  
  240. ItemStack stack = inventory.getItem(slots);
  241.  
  242. if (stack == null) continue;
  243.  
  244. if (stack.getType() == Material.CONCRETE) {
  245. isValid = true;
  246. break;
  247. }
  248.  
  249. if (stack.getType() != Material.STAINED_GLASS_PANE || stack.getData().getData() != 0) continue;
  250.  
  251. isValid = true;
  252. break;
  253. }
  254.  
  255. return isValid;
  256. }
  257.  
  258. public boolean checkWire() {
  259.  
  260. boolean isValid = false;
  261.  
  262. if (activeSlot == 0) return true;
  263.  
  264. for (Integer slots : getSlotsAround(activeSlot)) {
  265.  
  266. ItemStack stack = inventory.getItem(slots);
  267.  
  268. if (stack == null) continue;
  269. if (stack.getType() != currect.getWireStack().getType() || stack.getData().getData() != currect.getWireStack().getData().getData()) continue;
  270.  
  271. isValid = true;
  272. break;
  273. }
  274.  
  275. return isValid;
  276. }
  277.  
  278. private List<Integer> getSlotsAround(int startSlot) {
  279.  
  280. int startX = startSlot % 9;
  281. int startY = startSlot / 9;
  282. List<Integer> list = new ArrayList<>();
  283.  
  284. for (int x = -1; x <= 1; x++) {
  285. for (int y = -1; y <= 1; y++) {
  286.  
  287. if ((x != 0 || y != 0)
  288. && (startX + x) >= 0
  289. && (startX + x) <= 8
  290. && (startY + y) >= 0
  291. && (startY + y) <= 5
  292. && Math.abs(x) + Math.abs(y) <= 1
  293. ) {
  294. list.add(startSlot + x + y * 9);
  295. }
  296. }
  297. }
  298.  
  299. return list;
  300. }
  301.  
  302. public void openGUI() {
  303.  
  304. inventory.setItem(0, ISBuilder.getBuilder(Material.CONCRETE, 5, 1, "&a&lЗеленый вход").setTag("type", Type.GREEN.name()).getStack());
  305. inventory.setItem(9, ISBuilder.getBuilder(Material.CONCRETE, 11, 1, "&b&lСиний вход").setTag("type", Type.BLUE.name()).getStack());
  306. inventory.setItem(18, ISBuilder.getBuilder(Material.CONCRETE, 14, 1, "&c&lКрасный вход").setTag("type", Type.RED.name()).getStack());
  307.  
  308. inventory.setItem(26, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 5, 1, "&a&lЗеленый провод",
  309. "",
  310. "&7Нажми, чтобы протащить провод этого цвета"
  311. ).setTag("wireType", Type.GREEN.name()).getStack());
  312.  
  313. inventory.setItem(35, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 11, 1, "&b&lСиний провод",
  314. "",
  315. "&7Нажми, чтобы протащить провод этого цвета"
  316. ).setTag("wireType", Type.BLUE.name()).getStack());
  317.  
  318. inventory.setItem(44, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 14, 1, "&c&lКрасный провод",
  319. "",
  320. "&7Нажми, чтобы протащить провод этого цвета"
  321. ).setTag("wireType", Type.RED.name()).getStack());
  322.  
  323. for (int slots : wallsList) {
  324. inventory.setItem(slots, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 15, 1, " ",
  325. "",
  326. "&7Система сигнализации, не зацепи ее").getStack()
  327. );
  328. }
  329.  
  330. for (int freeSlot = 0; freeSlot < inventory.getSize(); freeSlot++) if (inventory.getItem(freeSlot) == null) inventory.setItem(freeSlot, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 0, 1, " ").getStack());
  331. player.openInventory(inventory);
  332. }
  333.  
  334. public enum Type {
  335.  
  336. GREEN(ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 5, 1, "&a&lЗеленый провод").getStack(), 1),
  337. BLUE(ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 11, 1, "&b&lСиний провод").getStack(), 10),
  338. RED(ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 14, 1, "&c&lКрасный провод").getStack(), 19, 27);
  339.  
  340. private ItemStack wireStack;
  341. private List<Integer> winSlots;
  342.  
  343. Type(ItemStack wireStack, Integer... winSlots) {
  344. this.wireStack = wireStack;
  345. this.winSlots = Arrays.asList(winSlots);
  346. }
  347.  
  348. public ItemStack getWireStack() {
  349. return wireStack;
  350. }
  351.  
  352. public List<Integer> getWinSlots() {
  353. return winSlots;
  354. }
  355. }
  356. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement