Search in sources :

Example 1 with Tag

use of br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.Tag in project RedProtect by FabioZumbi12.

the class RPPlayerListener method onPlayerInteract.

@EventHandler(priority = EventPriority.LOW)
public void onPlayerInteract(PlayerInteractEvent event) {
    RedProtect.get().logger.debug("RPPlayerListener - PlayerInteractEvent canceled? " + event.isCancelled());
    final Player p = event.getPlayer();
    Block b = event.getClickedBlock();
    ItemStack itemInHand = event.getItem();
    Location l;
    if (RedProtect.get().tpWait.contains(p.getName())) {
        RedProtect.get().tpWait.remove(p.getName());
        RPLang.sendMessage(p, "cmdmanager.region.tpcancelled");
    }
    if (b != null) {
        l = b.getLocation();
        RedProtect.get().logger.debug("RPPlayerListener - Is PlayerInteractEvent event. The block is " + b.getType().name());
    } else {
        l = p.getLocation();
    }
    if (itemInHand != null && !itemInHand.getType().equals(Material.AIR)) {
        String claimmode = RPConfig.getWorldClaimType(p.getWorld().getName());
        if (itemInHand.getType().name().equalsIgnoreCase(RPConfig.getString("wands.adminWandID")) && ((claimmode.equalsIgnoreCase("WAND") || claimmode.equalsIgnoreCase("BOTH")) || p.hasPermission("redprotect.admin.claim"))) {
            if (event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || event.getAction().equals(Action.RIGHT_CLICK_AIR)) {
                if (!RPUtil.canBuildNear(p, l)) {
                    event.setCancelled(true);
                    return;
                }
                RedProtect.get().secondLocationSelections.put(p, l);
                p.sendMessage(RPLang.get("playerlistener.wand2") + RPLang.get("general.color") + " (" + ChatColor.GOLD + l.getBlockX() + RPLang.get("general.color") + ", " + ChatColor.GOLD + l.getBlockY() + RPLang.get("general.color") + ", " + ChatColor.GOLD + l.getBlockZ() + RPLang.get("general.color") + ").");
                event.setCancelled(true);
            } else if (event.getAction().equals(Action.LEFT_CLICK_BLOCK) || event.getAction().equals(Action.LEFT_CLICK_AIR)) {
                if (!RPUtil.canBuildNear(p, l)) {
                    event.setCancelled(true);
                    return;
                }
                RedProtect.get().firstLocationSelections.put(p, l);
                p.sendMessage(RPLang.get("playerlistener.wand1") + RPLang.get("general.color") + " (" + ChatColor.GOLD + l.getBlockX() + RPLang.get("general.color") + ", " + ChatColor.GOLD + l.getBlockY() + RPLang.get("general.color") + ", " + ChatColor.GOLD + l.getBlockZ() + RPLang.get("general.color") + ").");
                event.setCancelled(true);
            }
            // show preview border
            if (RedProtect.get().firstLocationSelections.containsKey(p) && RedProtect.get().secondLocationSelections.containsKey(p)) {
                Location loc1 = RedProtect.get().firstLocationSelections.get(p);
                Location loc2 = RedProtect.get().secondLocationSelections.get(p);
                if (loc1.getWorld().equals(loc2.getWorld()) && loc1.distanceSquared(loc2) > RPConfig.getInt("region-settings.define-max-distance") && !RedProtect.get().ph.hasPerm(p, "redprotect.bypass.define-max-distance")) {
                    Double dist = loc1.distanceSquared(loc2);
                    RPLang.sendMessage(p, String.format(RPLang.get("regionbuilder.selection.maxdefine"), RPConfig.getInt("region-settings.define-max-distance"), dist.intValue()));
                } else {
                    RPUtil.addBorder(p, RPUtil.get4Points(loc1, loc2, p.getLocation().getBlockY()));
                }
            }
            return;
        }
        if (itemInHand.getType().name().equalsIgnoreCase(RPConfig.getString("wands.infoWandID"))) {
            Region r = RedProtect.get().rm.getTopRegion(l);
            if (p.hasPermission("redprotect.infowand")) {
                if (r == null) {
                    RPLang.sendMessage(p, "playerlistener.noregion.atblock");
                } else if (r.canBuild(p)) {
                    p.sendMessage(RPLang.get("general.color") + "--------------- [" + ChatColor.GOLD + r.getName() + RPLang.get("general.color") + "] ---------------");
                    p.sendMessage(r.info());
                    p.sendMessage(RPLang.get("general.color") + "-----------------------------------------");
                } else {
                    p.sendMessage(RPLang.get("playerlistener.region.entered").replace("{region}", r.getName()).replace("{leaders}", r.getLeadersDesc()));
                }
                event.setCancelled(true);
                return;
            }
        }
    }
    if (event.isCancelled()) {
        return;
    }
    Region r = RedProtect.get().rm.getTopRegion(l);
    // start player checks
    if (r == null) {
        if (b != null && (b.getType().equals(Material.ANVIL) || b.getState() instanceof InventoryHolder || RPConfig.getStringList("private.allowed-blocks").contains(b.getType().name()))) {
            Boolean out = RPConfig.getBool("private.allow-outside");
            if (out && !cont.canOpen(b, p)) {
                RPLang.sendMessage(p, "playerlistener.region.cantopen");
                event.setCancelled(true);
            }
        }
    } else {
        // other blocks and interactions
        if (itemInHand != null && (event.getAction().name().equals("RIGHT_CLICK_BLOCK") || b == null)) {
            Material hand = itemInHand.getType();
            if (hand.equals(Material.ENDER_PEARL) && !r.canTeleport(p)) {
                RPLang.sendMessage(p, "playerlistener.region.cantuse");
                event.setCancelled(true);
                event.setUseItemInHand(Event.Result.DENY);
                return;
            } else if ((hand.equals(Material.BOW) || (hand.name().contains("SNOW") && hand.name().contains("BALL")) || hand.name().contains("FIREWORK") || hand.equals(Material.EGG)) && !r.canProtectiles(p)) {
                RPLang.sendMessage(p, "playerlistener.region.cantuse");
                event.setCancelled(true);
                event.setUseItemInHand(Event.Result.DENY);
                return;
            } else if (hand.equals(Material.POTION) && !r.usePotions(p)) {
                RPLang.sendMessage(p, "playerlistener.region.cantuse");
                event.setCancelled(true);
                event.setUseItemInHand(Event.Result.DENY);
                return;
            } else if (hand.name().contains("_EGG") && !r.canInteractPassives(p)) {
                RPLang.sendMessage(p, "playerlistener.region.cantuse");
                event.setCancelled(true);
                event.setUseItemInHand(Event.Result.DENY);
                return;
            }
        }
        // if (r != null) && (b != null) >>
        if (b != null) {
            if (b.getType().equals(Material.DRAGON_EGG) || b.getType().name().equalsIgnoreCase("BED") || b.getType().name().contains("NOTE_BLOCK") || b.getType().name().contains("CAKE")) {
                if (!r.canBuild(p)) {
                    RPLang.sendMessage(p, "playerlistener.region.cantinteract");
                    event.setCancelled(true);
                }
            } else if (b.getState() instanceof Sign && RPConfig.getBool("region-settings.enable-flag-sign")) {
                Sign s = (Sign) b.getState();
                String[] lines = s.getLines();
                if (lines[0].equalsIgnoreCase("[flag]") && r.flags.containsKey(lines[1])) {
                    String flag = lines[1];
                    if (!(r.flags.get(flag) instanceof Boolean)) {
                        RPLang.sendMessage(p, RPLang.get("playerlistener.region.sign.cantflag"));
                        return;
                    }
                    if (RedProtect.get().ph.hasPerm(p, "redprotect.flag." + flag)) {
                        if (r.isAdmin(p) || r.isLeader(p) || RedProtect.get().ph.hasPerm(p, "redprotect.admin.flag." + flag)) {
                            if (RPConfig.getBool("flags-configuration.change-flag-delay.enable")) {
                                if (RPConfig.getStringList("flags-configuration.change-flag-delay.flags").contains(flag)) {
                                    if (!RedProtect.get().changeWait.contains(r.getName() + flag)) {
                                        RPUtil.startFlagChanger(r.getName(), flag, p);
                                        changeFlag(r, flag, p, s);
                                        return;
                                    } else {
                                        RPLang.sendMessage(p, RPLang.get("gui.needwait.tochange").replace("{seconds}", RPConfig.getString("flags-configuration.change-flag-delay.seconds")));
                                        return;
                                    }
                                }
                            }
                            changeFlag(r, flag, p, s);
                            return;
                        }
                    }
                    RPLang.sendMessage(p, "cmdmanager.region.flag.nopermregion");
                }
            } else if (b.getType().equals(Material.ENDER_CHEST)) {
                if (!r.canEnderChest(p)) {
                    RPLang.sendMessage(p, "playerlistener.region.cantopen");
                    event.setCancelled(true);
                }
            } else if (!b.getType().equals(Material.ENDER_CHEST) && (b.getType().equals(Material.ANVIL) || b.getState() instanceof InventoryHolder || RPConfig.getStringList("private.allowed-blocks").contains(b.getType().name()))) {
                if ((r.canChest(p) && !cont.canOpen(b, p) || (!r.canChest(p) && cont.canOpen(b, p)) || (!r.canChest(p) && !cont.canOpen(b, p)))) {
                    RPLang.sendMessage(p, "playerlistener.region.cantopen");
                    event.setCancelled(true);
                }
            } else if (b.getType().name().contains("LEVER") || (b.getType().name().contains("REDSTONE") && !b.getType().equals(Material.REDSTONE_ORE))) {
                if (!r.canLever(p)) {
                    RPLang.sendMessage(p, "playerlistener.region.cantlever");
                    event.setCancelled(true);
                }
            } else if (b.getType().name().contains("BUTTON")) {
                if (!r.canButton(p)) {
                    RPLang.sendMessage(p, "playerlistener.region.cantbutton");
                    event.setCancelled(true);
                }
            } else if (RPDoor.isOpenable(b) && event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
                if (!r.canDoor(p)) /* || (r.canDoor(p) && !cont.canOpen(b, p))*/
                {
                    RPLang.sendMessage(p, "playerlistener.region.cantdoor");
                    event.setCancelled(true);
                } else {
                    RPDoor.ChangeDoor(b, r);
                }
            } else if (itemInHand != null && (itemInHand.getType().name().startsWith("BOAT") || itemInHand.getType().name().contains("MINECART"))) {
                if (!r.canMinecart(p)) {
                    RPLang.sendMessage(p, "blocklistener.region.cantplace");
                    event.setUseItemInHand(Event.Result.DENY);
                    event.setCancelled(true);
                }
            } else if ((event.getAction().equals(Action.LEFT_CLICK_BLOCK) || event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) && b.getType().name().contains("SIGN") && !r.canSign(p)) {
                Sign sign = (Sign) b.getState();
                for (String tag : RPConfig.getStringList("region-settings.allow-sign-interact-tags")) {
                    // check first rule
                    if (sign != null && tag.equalsIgnoreCase(sign.getLine(0))) {
                        return;
                    }
                    // check if tag is owners or members names
                    if (tag.equalsIgnoreCase("{membername}")) {
                        for (String leader : r.getLeaders()) {
                            if (sign.getLine(0).equalsIgnoreCase(RPUtil.UUIDtoPlayer(leader))) {
                                return;
                            }
                        }
                        for (String admin : r.getAdmins()) {
                            if (sign.getLine(0).equalsIgnoreCase(RPUtil.UUIDtoPlayer(admin))) {
                                return;
                            }
                        }
                        for (String member : r.getMembers()) {
                            if (sign.getLine(0).equalsIgnoreCase(RPUtil.UUIDtoPlayer(member))) {
                                return;
                            }
                        }
                    }
                    // check if tag is player name
                    if (tag.equalsIgnoreCase("{playername}")) {
                        if (sign.getLine(0).equalsIgnoreCase(RPUtil.UUIDtoPlayer(p.getName()))) {
                            return;
                        }
                    }
                }
                RPLang.sendMessage(p, "playerlistener.region.cantinteract.signs");
                event.setUseItemInHand(Event.Result.DENY);
                event.setCancelled(true);
            } else if ((itemInHand != null && !itemInHand.getType().equals(Material.AIR)) && !r.canBuild(p) && !r.canPlace(itemInHand.getType()) && (itemInHand.getType().equals(Material.FLINT_AND_STEEL) || itemInHand.getType().equals(Material.WATER_BUCKET) || itemInHand.getType().equals(Material.BUCKET) || itemInHand.getType().equals(Material.LAVA_BUCKET) || itemInHand.getType().equals(Material.ITEM_FRAME) || itemInHand.getType().equals(Material.PAINTING))) {
                RPLang.sendMessage(p, "playerlistener.region.cantuse");
                event.setCancelled(true);
                event.setUseItemInHand(Event.Result.DENY);
                event.setUseInteractedBlock(Event.Result.DENY);
            } else if (!r.allowMod(p) && !RPUtil.isBukkitBlock(b)) {
                RPLang.sendMessage(p, "playerlistener.region.cantinteract");
                event.setCancelled(true);
                event.setUseInteractedBlock(Event.Result.DENY);
            }
        }
    }
}
Also used : Player(org.bukkit.entity.Player) PvPlayer(me.NoChance.PvPManager.PvPlayer) MyPetPlayer(de.Keyle.MyPet.api.player.MyPetPlayer) Block(org.bukkit.block.Block) Region(br.net.fabiozumbi12.RedProtect.Bukkit.Region) Material(org.bukkit.Material) Sign(org.bukkit.block.Sign) ItemStack(org.bukkit.inventory.ItemStack) InventoryHolder(org.bukkit.inventory.InventoryHolder) Location(org.bukkit.Location) EventHandler(org.bukkit.event.EventHandler)

Example 2 with Tag

use of br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.Tag in project RedProtect by FabioZumbi12.

the class RPSchematics method pasteSchematic.

public static void pasteSchematic(Player p) throws IOException {
    File file = new File(RedProtect.get().getDataFolder(), "schematics" + File.separator + RPConfig.getString("schematics.first-house-file"));
    FileInputStream stream = new FileInputStream(file);
    World world = p.getWorld();
    Location loc = p.getLocation();
    NBTInputStream nbtStream = new NBTInputStream(new GZIPInputStream(stream));
    NamedTag rootTag = nbtStream.readNamedTag();
    nbtStream.close();
    if (!rootTag.getName().equals("Schematic")) {
        throw new IllegalArgumentException("Tag \"Schematic\" does not exist or is not first");
    }
    CompoundTag schematicTag = (CompoundTag) rootTag.getTag();
    Map<String, Tag> schematic = schematicTag.getValue();
    if (!schematic.containsKey("Blocks")) {
        throw new IllegalArgumentException("Schematic file is missing a \"Blocks\" tag");
    }
    short width = getChildTag(schematic, "Width", ShortTag.class).getValue();
    short length = getChildTag(schematic, "Length", ShortTag.class).getValue();
    short height = getChildTag(schematic, "Height", ShortTag.class).getValue();
    String materials = getChildTag(schematic, "Materials", StringTag.class).getValue();
    if (!materials.equals("Alpha")) {
        throw new IllegalArgumentException("Schematic file is not an Alpha schematic");
    }
    // Get blocks
    byte[] blockId = getChildTag(schematic, "Blocks", ByteArrayTag.class).getValue();
    byte[] blockData = getChildTag(schematic, "Data", ByteArrayTag.class).getValue();
    byte[] addId = new byte[0];
    // Have to later combine IDs
    short[] blocks = new short[blockId.length];
    // the highest 4 bits are stored in a separate byte array.
    if (schematic.containsKey("AddBlocks")) {
        addId = getChildTag(schematic, "AddBlocks", ByteArrayTag.class).getValue();
    }
    // Combine the AddBlocks data with the first 8-bit block ID
    for (int index = 0; index < blockId.length; index++) {
        if ((index >> 1) >= addId.length) {
            // No corresponding AddBlocks index
            blocks[index] = (short) (blockId[index] & 0xFF);
        } else {
            if ((index & 1) == 0) {
                blocks[index] = (short) (((addId[index >> 1] & 0x0F) << 8) + (blockId[index] & 0xFF));
            } else {
                blocks[index] = (short) (((addId[index >> 1] & 0xF0) << 4) + (blockId[index] & 0xFF));
            }
        }
    }
    int offsetX = 0;
    int offsetY = 0;
    int offsetZ = 0;
    try {
        offsetX = getChildTag(schematic, "WEOffsetX", IntTag.class).getValue();
        offsetY = getChildTag(schematic, "WEOffsetY", IntTag.class).getValue();
        offsetZ = getChildTag(schematic, "WEOffsetZ", IntTag.class).getValue();
    } catch (Exception e) {
    // No offset data
    }
    Map<Integer, BlockState> blist = new HashMap<>();
    Location pos1 = loc;
    Location pos2 = loc;
    int order = 0;
    int base = 0;
    int validBlock = 0;
    for (int x = 0; x < width; ++x) {
        for (int y = 0; y < height; ++y) {
            for (int z = 0; z < length; ++z) {
                int index = y * width * length + z * width + x;
                Location locblock = new Location(world, x + loc.getX() + offsetX, y + loc.getY() + offsetY, z + loc.getZ() + offsetZ);
                Block block = locblock.getBlock();
                BlockState bstate = block.getState();
                blist.put(index, bstate);
                if (order == 0) {
                    pos1 = locblock;
                } else {
                    pos2 = locblock;
                }
                // get ground blocks
                if (block.getLocation().getBlockY() == pos1.getBlockY()) {
                    base++;
                    if (block.getType().isSolid()) {
                        validBlock++;
                    }
                }
                order++;
            }
        }
    }
    // check if can place the schematic
    if (validBlock < base / 2) {
        RPLang.sendMessage(p, "playerlistener.region.needground");
        return;
    }
    String regionName = RPUtil.regionNameConfiorm("", p);
    String pName = RPUtil.PlayerToUUID(p.getName());
    // check if player already have claims
    int claimused = RedProtect.get().rm.getPlayerRegions(p.getName(), p.getWorld());
    if (claimused > 0 && !p.hasPermission("RedProtect.get().bypass")) {
        RPLang.sendMessage(p, "playerlistener.region.claimlimit.start");
        return;
    }
    Region region = new Region(regionName, new ArrayList<>(), new ArrayList<>(), Collections.singletonList(pName), new int[] { pos1.getBlockX(), pos1.getBlockX(), pos2.getBlockX(), pos2.getBlockX() }, new int[] { pos1.getBlockZ(), pos1.getBlockZ(), pos2.getBlockZ(), pos2.getBlockZ() }, 0, p.getWorld().getMaxHeight(), 0, p.getWorld().getName(), RPUtil.DateNow(), RPConfig.getDefFlagsValues(), "", 0, null, false);
    List<String> othersName = new ArrayList<>();
    Region otherrg = null;
    // check if same area
    otherrg = RedProtect.get().rm.getTopRegion(region.getCenterLoc());
    if (otherrg != null && otherrg.get4Points(region.getCenterY()).equals(region.get4Points(region.getCenterY()))) {
        p.sendMessage(RPLang.get("regionbuilder.region.overlapping").replace("{location}", "x: " + otherrg.getCenterX() + ", z: " + otherrg.getCenterZ()).replace("{player}", otherrg.getLeadersDesc()));
        return;
    }
    // check regions inside region
    for (Region r : RedProtect.get().rm.getRegionsByWorld(p.getWorld())) {
        if (r.getMaxMbrX() <= region.getMaxMbrX() && r.getMaxY() <= region.getMaxY() && r.getMaxMbrZ() <= region.getMaxMbrZ() && r.getMinMbrX() >= region.getMinMbrX() && r.getMinY() >= region.getMinY() && r.getMinMbrZ() >= region.getMinMbrZ()) {
            if (!r.isLeader(p) && !p.hasPermission("RedProtect.get().bypass")) {
                p.sendMessage(RPLang.get("regionbuilder.region.overlapping").replace("{location}", "x: " + otherrg.getCenterX() + ", z: " + otherrg.getCenterZ()).replace("{player}", otherrg.getLeadersDesc()));
                return;
            }
            if (!othersName.contains(r.getName())) {
                othersName.add(r.getName());
            }
        }
    }
    // check borders for other regions
    List<Location> limitlocs = region.getLimitLocs(region.getMinY(), region.getMaxY(), true);
    for (Location locr : limitlocs) {
        /*
        	//check regions near
        	if (!RPUtil.canBuildNear(p, loc)){
            	return;    	
            }*/
        otherrg = RedProtect.get().rm.getTopRegion(locr);
        RedProtect.get().logger.debug("protection Block is: " + locr.getBlock().getType().name());
        if (otherrg != null) {
            if (!otherrg.isLeader(p) && !p.hasPermission("RedProtect.get().bypass")) {
                p.sendMessage(RPLang.get("regionbuilder.region.overlapping").replace("{location}", "x: " + otherrg.getCenterX() + ", z: " + otherrg.getCenterZ()).replace("{player}", otherrg.getLeadersDesc()));
                return;
            }
            if (!othersName.contains(otherrg.getName())) {
                othersName.add(otherrg.getName());
            }
        }
    }
    // check cost per block
    if (RPConfig.getEcoBool("claim-cost-per-block.enable") && RedProtect.get().Vault && !p.hasPermission("RedProtect.get().eco.bypass")) {
        Double peco = RedProtect.get().econ.getBalance(p);
        long reco = region.getArea() * RPConfig.getEcoInt("claim-cost-per-block.cost-per-block");
        if (!RPConfig.getEcoBool("claim-cost-per-block.y-is-free")) {
            reco = reco * Math.abs(region.getMaxY() - region.getMinY());
        }
        if (peco >= reco) {
            RedProtect.get().econ.withdrawPlayer(p, reco);
            p.sendMessage(RPLang.get("economy.region.claimed").replace("{price}", RPConfig.getEcoString("economy-symbol") + reco + " " + RPConfig.getEcoString("economy-name")));
        } else {
            RPLang.sendMessage(p, RPLang.get("regionbuilder.notenought.money").replace("{price}", RPConfig.getEcoString("economy-symbol") + reco));
            return;
        }
    }
    if (RPConfig.getBool("hooks.worldedit.use-for-schematics") && RedProtect.get().WE) {
        WEListener.pasteWithWE(p, file);
    } else {
        for (Integer key : blist.keySet()) {
            Block b = blist.get(key).getBlock();
            // paste schematic
            b.setTypeIdAndData(blocks[key], blockData[key], true);
        }
    }
    p.sendMessage(RPLang.get("general.color") + "------------------------------------");
    RPLang.sendMessage(p, "playerlistener.region.startdone");
    p.sendMessage(RPLang.get("general.color") + "------------------------------------");
    RPLang.sendMessage(p, "cmdmanager.region.firstwarning");
    p.sendMessage(RPLang.get("general.color") + "------------------------------------");
    RedProtect.get().logger.addLog("(World " + region.getWorld() + ") Player " + p.getName() + " CREATED(SCHEMATIC) region " + region.getName());
    RedProtect.get().rm.add(region, p.getWorld());
}
Also used : StringTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.StringTag) World(org.bukkit.World) GZIPInputStream(java.util.zip.GZIPInputStream) NamedTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.NamedTag) CompoundTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.CompoundTag) FileInputStream(java.io.FileInputStream) ShortTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.ShortTag) IOException(java.io.IOException) BlockState(org.bukkit.block.BlockState) NBTInputStream(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.NBTInputStream) Block(org.bukkit.block.Block) Region(br.net.fabiozumbi12.RedProtect.Bukkit.Region) CompoundTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.CompoundTag) Tag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.Tag) StringTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.StringTag) ShortTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.ShortTag) IntTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.IntTag) NamedTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.NamedTag) ByteArrayTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.ByteArrayTag) File(java.io.File) Location(org.bukkit.Location) ByteArrayTag(br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.ByteArrayTag)

Example 3 with Tag

use of br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.Tag in project RedProtect by FabioZumbi12.

the class RPPlayerListener method onInteractBlock.

// listen all
@Listener(order = Order.FIRST, beforeModifications = true)
public void onInteractBlock(InteractBlockEvent event, @First Player p) {
    RedProtect.get().logger.debug("player", "RPPlayerListener - InteractBlockEvent canceled? " + event.isCancelled());
    BlockSnapshot b = event.getTargetBlock();
    BlockState bstate = b.getState();
    Location<World> l = null;
    if (!b.getState().getType().equals(BlockTypes.AIR)) {
        l = b.getLocation().get();
        RedProtect.get().logger.debug("player", "RPPlayerListener - Is InteractBlockEvent event. The block is " + bstate.getType().getName());
    } else {
        l = p.getLocation();
    }
    Region r = RedProtect.get().rm.getTopRegion(l);
    ItemType itemInHand = ItemTypes.NONE;
    ItemStack stack = ItemStack.of(ItemTypes.NONE, 1);
    if (p.getItemInHand(HandTypes.MAIN_HAND).isPresent()) {
        stack = p.getItemInHand(HandTypes.MAIN_HAND).get();
        itemInHand = stack.getItem();
        if (RPUtil.removeGuiItem(stack)) {
            p.setItemInHand(HandTypes.MAIN_HAND, ItemStack.of(ItemTypes.NONE, 1));
            event.setCancelled(true);
        }
    } else if (p.getItemInHand(HandTypes.OFF_HAND).isPresent()) {
        stack = p.getItemInHand(HandTypes.OFF_HAND).get();
        itemInHand = stack.getItem();
        if (RPUtil.removeGuiItem(stack)) {
            p.setItemInHand(HandTypes.OFF_HAND, ItemStack.of(ItemTypes.NONE, 1));
            event.setCancelled(true);
        }
    }
    if (itemInHand.getId().equalsIgnoreCase(RedProtect.get().cfgs.getString("wands.infoWandID"))) {
        r = RedProtect.get().rm.getTopRegion(l);
        if (RedProtect.get().ph.hasUserPerm(p, "RedProtect.get().infowand")) {
            if (r == null) {
                RPLang.sendMessage(p, "playerlistener.noregion.atblock");
            } else if (r.canBuild(p)) {
                p.sendMessage(RPUtil.toText(RPLang.get("general.color") + "--------------- [&e" + r.getName() + RPLang.get("general.color") + "] ---------------"));
                p.sendMessage(r.info());
                p.sendMessage(RPUtil.toText(RPLang.get("general.color") + "-----------------------------------------"));
            } else {
                p.sendMessage(RPUtil.toText(RPLang.get("playerlistener.region.entered").replace("{region}", r.getName()).replace("{leaders}", RPUtil.UUIDtoPlayer(r.getLeadersDesc()))));
            }
            event.setCancelled(true);
            return;
        }
    }
    // start player checks
    if (r == null) {
        if (b != null && (bstate instanceof Container || RedProtect.get().cfgs.getStringList("private.allowed-blocks").contains(bstate.getType().getName()))) {
            Boolean out = RedProtect.get().cfgs.getBool("private.allow-outside");
            if (out && !cont.canOpen(b, p)) {
                if (!RedProtect.get().ph.hasPerm(p, "RedProtect.get().bypass")) {
                    RPLang.sendMessage(p, "playerlistener.region.cantopen");
                    event.setCancelled(true);
                } else {
                    int x = b.getLocation().get().getBlockX();
                    int y = b.getLocation().get().getBlockY();
                    int z = b.getLocation().get().getBlockZ();
                    RPLang.sendMessage(p, RPLang.get("playerlistener.region.opened").replace("{region}", "X:" + x + " Y:" + y + " Z:" + z));
                }
            }
        }
    } else {
        // if (r != null) && (b != null) >>
        if (b != null) {
            if (bstate.getType().equals(BlockTypes.DRAGON_EGG) || bstate.getType().equals(BlockTypes.BED) || bstate.getType().equals(BlockTypes.NOTEBLOCK) || bstate.getType().getName().contains("repeater") || bstate.getType().getName().contains("comparator")) {
                if (!r.canBuild(p)) {
                    RPLang.sendMessage(p, "playerlistener.region.cantinteract");
                    event.setCancelled(true);
                }
            } else if ((b.getState() instanceof Carrier) || RedProtect.get().cfgs.getStringList("private.allowed-blocks").contains(bstate.getType().getName())) {
                if ((r.canChest(p) && !cont.canOpen(b, p) || (!r.canChest(p) && cont.canOpen(b, p)) || (!r.canChest(p) && !cont.canOpen(b, p)))) {
                    if (!RedProtect.get().ph.hasPerm(p, "RedProtect.get().bypass")) {
                        RPLang.sendMessage(p, "playerlistener.region.cantopen");
                        event.setCancelled(true);
                    } else {
                        RPLang.sendMessage(p, RPLang.get("playerlistener.region.opened").replace("{region}", RPUtil.UUIDtoPlayer(r.getLeadersDesc())));
                    }
                }
            } else if (bstate.getType().getName().contains("lever")) {
                if (!r.canLever(p)) {
                    if (!RedProtect.get().ph.hasPerm(p, "RedProtect.get().bypass")) {
                        RPLang.sendMessage(p, "playerlistener.region.cantlever");
                        event.setCancelled(true);
                    } else {
                        RPLang.sendMessage(p, RPLang.get("playerlistener.region.levertoggled").replace("{region}", RPUtil.UUIDtoPlayer(r.getLeadersDesc())));
                    }
                }
            } else if (bstate.getType().getName().contains("button")) {
                if (!r.canButton(p)) {
                    if (!RedProtect.get().ph.hasPerm(p, "RedProtect.get().bypass")) {
                        RPLang.sendMessage(p, "playerlistener.region.cantbutton");
                        event.setCancelled(true);
                    } else {
                        RPLang.sendMessage(p, RPLang.get("playerlistener.region.buttonactivated").replace("{region}", RPUtil.UUIDtoPlayer(r.getLeadersDesc())));
                    }
                }
            } else if (RPDoor.isOpenable(b)) {
                if (!r.canDoor(p)) /* || (r.canDoor(p) && !cont.canOpen(b, p))*/
                {
                    if (!RedProtect.get().ph.hasPerm(p, "RedProtect.get().bypass")) {
                        RPLang.sendMessage(p, "playerlistener.region.cantdoor");
                        event.setCancelled(true);
                    } else {
                        RPLang.sendMessage(p, "playerlistener.region.opendoor");
                        RPDoor.ChangeDoor(b, r);
                    }
                } else {
                    RPDoor.ChangeDoor(b, r);
                }
            } else if (bstate.getType().getName().contains("rail")) {
                if (!r.canMinecart(p)) {
                    RPLang.sendMessage(p, "blocklistener.region.cantplace");
                    event.setCancelled(true);
                }
            } else if (bstate.getType().getName().contains("sign") && !r.canSign(p)) {
                if (b.get(Keys.SIGN_LINES).isPresent()) {
                    List<Text> sign = b.get(Keys.SIGN_LINES).get();
                    for (String tag : RedProtect.get().cfgs.getStringList("region-settings.allow-sign-interact-tags")) {
                        // check first rule
                        if (tag.equalsIgnoreCase(sign.get(0).toPlain())) {
                            return;
                        }
                        // check if tag is leaders or members names
                        if (tag.equalsIgnoreCase("{membername}")) {
                            for (String leader : r.getLeaders()) {
                                if (sign.get(0).toPlain().equalsIgnoreCase(RPUtil.UUIDtoPlayer(leader))) {
                                    return;
                                }
                            }
                            for (String member : r.getMembers()) {
                                if (sign.get(0).toPlain().equalsIgnoreCase(RPUtil.UUIDtoPlayer(member))) {
                                    return;
                                }
                            }
                            for (String admin : r.getAdmins()) {
                                if (sign.get(0).toPlain().equalsIgnoreCase(RPUtil.UUIDtoPlayer(admin))) {
                                    return;
                                }
                            }
                        }
                        // check if tag is player name
                        if (tag.equalsIgnoreCase("{playername}")) {
                            if (sign.get(0).toPlain().equalsIgnoreCase(RPUtil.UUIDtoPlayer(p.getName()))) {
                                return;
                            }
                        }
                    }
                }
                RPLang.sendMessage(p, "playerlistener.region.cantinteract.signs");
                event.setCancelled(true);
            } else if ((itemInHand.equals(ItemTypes.FLINT_AND_STEEL) || itemInHand.equals(ItemTypes.WATER_BUCKET) || itemInHand.equals(ItemTypes.BUCKET) || itemInHand.equals(ItemTypes.LAVA_BUCKET) || itemInHand.equals(ItemTypes.ITEM_FRAME) || itemInHand.equals(ItemTypes.PAINTING)) && !r.canBuild(p)) {
                RPLang.sendMessage(p, RPLang.get("playerlistener.region.cantuse"));
                event.setCancelled(true);
            } else if (!r.allowMod(p) && !RPUtil.isBukkitBlock(bstate)) {
                RPLang.sendMessage(p, "playerlistener.region.cantinteract");
                event.setCancelled(true);
            }
        }
    }
}
Also used : ItemType(org.spongepowered.api.item.ItemType) BlockSnapshot(org.spongepowered.api.block.BlockSnapshot) Text(org.spongepowered.api.text.Text) World(org.spongepowered.api.world.World) RPContainer(br.net.fabiozumbi12.RedProtect.Sponge.RPContainer) Container(org.spongepowered.api.item.inventory.Container) BlockState(org.spongepowered.api.block.BlockState) Region(br.net.fabiozumbi12.RedProtect.Sponge.Region) Carrier(org.spongepowered.api.item.inventory.Carrier) ItemStack(org.spongepowered.api.item.inventory.ItemStack) Listener(org.spongepowered.api.event.Listener)

Example 4 with Tag

use of br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.Tag in project UltimateChat by FabioZumbi12.

the class UChat method onEnable.

public void onEnable() {
    try {
        uchat = this;
        logger = new UCLogger(this);
        config = new UCConfig(this);
        lang = new UCLang();
        amConfig = new YamlConfiguration();
        // check hooks
        Vault = checkVault();
        SClans = checkSC();
        MarryReloded = checkMR();
        MarryMaster = checkMM();
        ProtocolLib = checkPL();
        PlaceHolderAPI = checkPHAPI();
        Factions = checkFac();
        listener = new UCListener();
        getServer().getPluginCommand("uchat").setExecutor(listener);
        getServer().getPluginManager().registerEvents(listener, this);
        getServer().getPluginManager().registerEvents(new UCChatProtection(), this);
        getServer().getMessenger().registerOutgoingPluginChannel(this, "uChat");
        getServer().getMessenger().registerIncomingPluginChannel(this, "uChat", new UChatBungee());
        // register aliases
        registerAliases();
        if (ProtocolLib) {
            logger.info("ProtocolLib found. Hooked.");
        }
        if (PlaceHolderAPI) {
            try {
                Class.forName("me.clip.placeholderapi.expansion.Relational");
                if (new UCPlaceHoldersRelational(this).register()) {
                    isRelation = true;
                    logger.info("PlaceHolderAPI found. Hooked and registered some chat placeholders with relational tag feature.");
                }
            } catch (ClassNotFoundException ex) {
                if (new UCPlaceHolders(this).register()) {
                    isRelation = false;
                    logger.info("PlaceHolderAPI found. Hooked and registered some chat placeholders.");
                }
            }
        }
        if (MarryReloded) {
            mapi = MarriageAPI.getInstance();
            logger.info("Marriage Reloaded found. Hooked.");
        }
        if (MarryMaster) {
            mm = (MarriageMaster) Bukkit.getPluginManager().getPlugin("MarriageMaster");
            logger.info("MarryMaster found. Hooked.");
        }
        if (SClans) {
            sc = SimpleClans.getInstance();
            logger.info("SimpleClans found. Hooked.");
        }
        if (Vault) {
            RegisteredServiceProvider<Economy> rsp = getServer().getServicesManager().getRegistration(Economy.class);
            RegisteredServiceProvider<Chat> rschat = getServer().getServicesManager().getRegistration(Chat.class);
            RegisteredServiceProvider<Permission> rsperm = getServer().getServicesManager().getRegistration(Permission.class);
            // Economy
            if (rsp == null) {
                logger.warning("Vault found Economy, but for some reason cant be used.");
            } else {
                econ = rsp.getProvider();
                logger.info("Vault economy found. Hooked.");
            }
            // Chat
            if (rschat == null) {
                logger.warning("Vault found chat, but for some reason cant be used.");
            } else {
                chat = rschat.getProvider();
                logger.info("Vault chat found. Hooked.");
            }
            // Perms
            if (rsperm == null) {
                logger.warning("Vault found permissions, but for some reason cant be used.");
            } else {
                perms = rsperm.getProvider();
                logger.info("Vault perms found. Hooked.");
            }
        }
        logger.info("Init API module...");
        this.ucapi = new uChatAPI();
        // init other features
        // Jedis
        registerJedis();
        // JDA
        registerJDA();
        initAutomessage();
        getUCLogger().info("Server Version: " + getServer().getBukkitVersion());
        getUCLogger().logClear(ChatColor.translateAlternateColorCodes('&', "\n" + "&b  _    _ _ _   _                 _        _____ _           _  \n" + " | |  | | | | (_)               | |      / ____| |         | |  \n" + " | |  | | | |_ _ _ __ ___   __ _| |_ ___| |    | |__   __ _| |_ \n" + " | |  | | | __| | '_ ` _ \\ / _` | __/ _ \\ |    | '_ \\ / _` | __|\n" + " | |__| | | |_| | | | | | | (_| | ||  __/ |____| | | | (_| | |_ \n" + "  \\____/|_|\\__|_|_| |_| |_|\\__,_|\\__\\___|\\_____|_| |_|\\__,_|\\__|\n" + "                                                                \n" + "&a" + getDescription().getFullName() + " enabled!\n"));
        if (this.UCJDA != null) {
            this.UCJDA.sendRawToDiscord(lang.get("discord.start"));
        }
    } catch (Exception e) {
        e.printStackTrace();
        super.setEnabled(false);
    }
}
Also used : API.uChatAPI(br.net.fabiozumbi12.UltimateChat.Bukkit.API.uChatAPI) UChatBungee(br.net.fabiozumbi12.UltimateChat.Bukkit.Bungee.UChatBungee) YamlConfiguration(org.bukkit.configuration.file.YamlConfiguration) IOException(java.io.IOException) InvalidConfigurationException(org.bukkit.configuration.InvalidConfigurationException) Economy(net.milkbowl.vault.economy.Economy) Chat(net.milkbowl.vault.chat.Chat) Permission(net.milkbowl.vault.permission.Permission) UCConfig(br.net.fabiozumbi12.UltimateChat.Bukkit.config.UCConfig) UCLang(br.net.fabiozumbi12.UltimateChat.Bukkit.config.UCLang)

Example 5 with Tag

use of br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.Tag in project UltimateChat by FabioZumbi12.

the class uChatAPI method registerNewChannel.

@Deprecated
public boolean registerNewChannel(String chName, String chAlias, boolean crossWorlds, int distance, String color, String tagBuilder, boolean needFocus, boolean receiverMsg, double cost, String ddmode, String ddmcformat, String mcddformat, String ddhover, boolean ddallowcmds, boolean bungee) throws IOException {
    if (UChat.get().getChannel(chName) != null) {
        return false;
    }
    if (tagBuilder == null || tagBuilder.equals("")) {
        tagBuilder = UChat.get().getUCConfig().getString("general.default-tag-builder");
    }
    UCChannel ch = new UCChannel(chName, chAlias, crossWorlds, distance, color, tagBuilder, needFocus, receiverMsg, cost, bungee, false, false, "player", "", new ArrayList<>(), "", ddmode, ddmcformat, mcddformat, ddhover, ddallowcmds, true);
    UChat.get().getUCConfig().addChannel(ch);
    UChat.get().reload();
    return true;
}
Also used : UCChannel(br.net.fabiozumbi12.UltimateChat.Bukkit.UCChannel)

Aggregations

Region (br.net.fabiozumbi12.RedProtect.Bukkit.Region)2 IOException (java.io.IOException)2 Location (org.bukkit.Location)2 Block (org.bukkit.block.Block)2 ByteArrayTag (br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.ByteArrayTag)1 CompoundTag (br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.CompoundTag)1 IntTag (br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.IntTag)1 NBTInputStream (br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.NBTInputStream)1 NamedTag (br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.NamedTag)1 ShortTag (br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.ShortTag)1 StringTag (br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.StringTag)1 Tag (br.net.fabiozumbi12.RedProtect.Bukkit.schematics.org.jnbt.Tag)1 RPContainer (br.net.fabiozumbi12.RedProtect.Sponge.RPContainer)1 Region (br.net.fabiozumbi12.RedProtect.Sponge.Region)1 API.uChatAPI (br.net.fabiozumbi12.UltimateChat.Bukkit.API.uChatAPI)1 UChatBungee (br.net.fabiozumbi12.UltimateChat.Bukkit.Bungee.UChatBungee)1 UCChannel (br.net.fabiozumbi12.UltimateChat.Bukkit.UCChannel)1 UCConfig (br.net.fabiozumbi12.UltimateChat.Bukkit.config.UCConfig)1 UCLang (br.net.fabiozumbi12.UltimateChat.Bukkit.config.UCLang)1 MyPetPlayer (de.Keyle.MyPet.api.player.MyPetPlayer)1