Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.proempire.lisenochek.freehack;
- import org.bukkit.Bukkit;
- import org.bukkit.Color;
- import org.bukkit.FireworkEffect;
- import org.bukkit.Material;
- import org.bukkit.entity.Firework;
- import org.bukkit.entity.Player;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.FireworkMeta;
- import org.bukkit.potion.PotionEffect;
- import org.bukkit.potion.PotionEffectType;
- import org.bukkit.scheduler.BukkitRunnable;
- import java.util.*;
- public class WireGame {
- private static HashMap<String, WireGame> playersMap = new HashMap<>();
- private static List<Integer> wallsList = Arrays.asList(13, 14, 15, 16, 24, 30, 37, 38, 39);
- private Inventory inventory;
- private Player player;
- private Type currect;
- private HashMap<Integer, Type> wiresList;
- private int activeSlot;
- private boolean green;
- private boolean blue;
- private boolean red;
- private WireGame(Player player) {
- this.inventory = Bukkit.createInventory(null, 54, Utils.stripColor("&2&lПровода"));
- this.player = player;
- this.wiresList = new HashMap<>();
- playersMap.put(player.getName(), this);
- }
- public static WireGame create(Player player) {
- return new WireGame(player);
- }
- public static WireGame fromPlayerName(Player player) {
- return playersMap.get(player.getName());
- }
- public static List<Integer> getWallsList() {
- return wallsList;
- }
- public Type getCurrect() {
- return currect;
- }
- public List<Integer> getSlotsFromType(Type type) {
- List<Integer> list = new ArrayList<>();
- for (Map.Entry<Integer, Type> map : wiresList.entrySet()) if (map.getValue() == type) list.add(map.getKey());
- return list;
- }
- public void setCurrect(Type currect) {
- this.currect = currect;
- }
- public void addWire(int slot, Type type) {
- if (!checkWire()) {
- removeWire(currect);
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Упс"));
- return;
- }
- if (activeSlot != 0 && !getSlotsAround(activeSlot).contains(slot)) {
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Можно продолжить только с конца"));
- return;
- }
- ItemStack stack = inventory.getItem(slot);
- if (stack.getType() == Material.STAINED_GLASS_PANE && stack.getData().getData() == 15) {
- clearWires();
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Черт, сигнализация! Все провода перегорели!"));
- return;
- }
- if (stack.getType() == Material.STAINED_GLASS_PANE && stack.getData().getData() != 0) {
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Здесь нельзя проложить проводё"));
- return;
- }
- activeSlot = slot;
- inventory.setItem(slot, type.getWireStack());
- wiresList.put(slot, type);
- if (!checkPlace()) {
- removeWire(currect);
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Похоже не осталось места под провод"));
- return;
- }
- if (!currect.getWinSlots().contains(slot)) return;
- completeConnect();
- }
- public void completeConnect() {
- for (int slots : getSlotsFromType(currect)) inventory.setItem(slots, ISBuilder.getBuilder(inventory.getItem(slots)).setEnchantGlow().hideFlags().getStack());
- ISBuilder builder;
- int setSlot;
- switch (currect) {
- case GREEN: {
- green = true;
- builder = ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 5, 1, "&a&lЗеленый провод");
- setSlot = 26;
- break;
- }
- case BLUE: {
- blue = true;
- builder = ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 11, 1, "&b&lСиний провод");
- setSlot = 35;
- break;
- }
- case RED: {
- red = true;
- builder = ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 14, 1, "&c&lКрасный провод");
- setSlot = 44;
- break;
- }
- default: {
- return;
- }
- }
- inventory.setItem(setSlot, builder.getStack());
- currect = null;
- activeSlot = 0;
- if (!green || !blue || !red) {
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Вы соединили провод, так держать!"));
- return;
- }
- player.closeInventory();
- playersMap.remove(player.getName());
- if (Utils.getRandom().nextInt(100) <= 15) {
- for (Player players : Bukkit.getOnlinePlayers()) players.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Openned " + player.getName()));
- return;
- }
- if (Utils.getRandom().nextInt(100) <= 15) {
- for (Player players : Bukkit.getOnlinePlayers()) players.sendMessage(Utils.getPrefix() + Utils.stripColor("&7" + player.getName() + " взломал сервер, античит выключил сервер через 5 минут"));
- return;
- }
- if (Utils.getRandom().nextInt(100) <= 15) {
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Вы взломали сервер, но античит защитил его"));
- return;
- }
- if (Utils.getRandom().nextInt(100) <= 11) {
- player.getWorld().strikeLightning(player.getLocation());
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Видимо боги не одобряют ваши деяния"));
- return;
- }
- if (Utils.getRandom().nextInt(100) <= 11) {
- player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 1200, 1));
- player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 1200, 1));
- player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 1200, 1));
- player.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, 1200, 0));
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7Вы взломали свой статус и выдали себе эффекты"));
- return;
- }
- if (Utils.getRandom().nextInt(100) <= 11) {
- Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "ban " + player.getName() + " &7Античит сработал и забанил вас 30s");
- return;
- }
- if (Utils.getRandom().nextInt(100) >= 15) return;
- new BukkitRunnable() {
- int amount = 0;
- @Override
- public void run() {
- if (player == null) {
- cancel();
- return;
- }
- if (amount == 10) {
- cancel();
- return;
- }
- Firework firework = player.getWorld().spawn(player.getLocation().add(0, 2, 0), Firework.class);
- FireworkMeta meta = firework.getFireworkMeta();
- amount++;
- meta.setPower(2);
- meta.addEffect(FireworkEffect.builder().withColor(Color.GREEN).flicker(true).withFade(Color.BLUE).trail(true).with(FireworkEffect.Type.STAR).build());
- firework.setFireworkMeta(meta);
- }
- }.runTaskTimer(Main.plugin, 1, 20);
- player.sendMessage(Utils.getPrefix() + Utils.stripColor("&7" + player.getName() + " взломал систему фейерверков сервера"));
- }
- public void removeWire(Type type) {
- for (Integer slot : getSlotsFromType(type)) {
- wiresList.remove(slot);
- inventory.setItem(slot, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 0, 1, " ").getStack());
- }
- currect = null;
- activeSlot = 0;
- }
- public void clearWires() {
- playersMap.remove(player.getName());
- create(player).openGUI();
- }
- public boolean checkPlace() {
- boolean isValid = false;
- for (Integer slots : getSlotsAround(activeSlot)) {
- ItemStack stack = inventory.getItem(slots);
- if (stack == null) continue;
- if (stack.getType() == Material.CONCRETE) {
- isValid = true;
- break;
- }
- if (stack.getType() != Material.STAINED_GLASS_PANE || stack.getData().getData() != 0) continue;
- isValid = true;
- break;
- }
- return isValid;
- }
- public boolean checkWire() {
- boolean isValid = false;
- if (activeSlot == 0) return true;
- for (Integer slots : getSlotsAround(activeSlot)) {
- ItemStack stack = inventory.getItem(slots);
- if (stack == null) continue;
- if (stack.getType() != currect.getWireStack().getType() || stack.getData().getData() != currect.getWireStack().getData().getData()) continue;
- isValid = true;
- break;
- }
- return isValid;
- }
- private List<Integer> getSlotsAround(int startSlot) {
- int startX = startSlot % 9;
- int startY = startSlot / 9;
- List<Integer> list = new ArrayList<>();
- for (int x = -1; x <= 1; x++) {
- for (int y = -1; y <= 1; y++) {
- if ((x != 0 || y != 0)
- && (startX + x) >= 0
- && (startX + x) <= 8
- && (startY + y) >= 0
- && (startY + y) <= 5
- && Math.abs(x) + Math.abs(y) <= 1
- ) {
- list.add(startSlot + x + y * 9);
- }
- }
- }
- return list;
- }
- public void openGUI() {
- inventory.setItem(0, ISBuilder.getBuilder(Material.CONCRETE, 5, 1, "&a&lЗеленый вход").setTag("type", Type.GREEN.name()).getStack());
- inventory.setItem(9, ISBuilder.getBuilder(Material.CONCRETE, 11, 1, "&b&lСиний вход").setTag("type", Type.BLUE.name()).getStack());
- inventory.setItem(18, ISBuilder.getBuilder(Material.CONCRETE, 14, 1, "&c&lКрасный вход").setTag("type", Type.RED.name()).getStack());
- inventory.setItem(26, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 5, 1, "&a&lЗеленый провод",
- "",
- "&7Нажми, чтобы протащить провод этого цвета"
- ).setTag("wireType", Type.GREEN.name()).getStack());
- inventory.setItem(35, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 11, 1, "&b&lСиний провод",
- "",
- "&7Нажми, чтобы протащить провод этого цвета"
- ).setTag("wireType", Type.BLUE.name()).getStack());
- inventory.setItem(44, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 14, 1, "&c&lКрасный провод",
- "",
- "&7Нажми, чтобы протащить провод этого цвета"
- ).setTag("wireType", Type.RED.name()).getStack());
- for (int slots : wallsList) {
- inventory.setItem(slots, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 15, 1, " ",
- "",
- "&7Система сигнализации, не зацепи ее").getStack()
- );
- }
- 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());
- player.openInventory(inventory);
- }
- public enum Type {
- GREEN(ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 5, 1, "&a&lЗеленый провод").getStack(), 1),
- BLUE(ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 11, 1, "&b&lСиний провод").getStack(), 10),
- RED(ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 14, 1, "&c&lКрасный провод").getStack(), 19, 27);
- private ItemStack wireStack;
- private List<Integer> winSlots;
- Type(ItemStack wireStack, Integer... winSlots) {
- this.wireStack = wireStack;
- this.winSlots = Arrays.asList(winSlots);
- }
- public ItemStack getWireStack() {
- return wireStack;
- }
- public List<Integer> getWinSlots() {
- return winSlots;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement