diff --git a/pom.xml b/pom.xml index 3de3105..7ab811d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 pw.yumc Residence - 2.8.3.2 + 2.8.3.3 Residence 重制版本的领地插件 - 喵♂呜 @@ -58,15 +58,15 @@ http://ci.yumc.pw/job/${project.artifactId}/ - &6GUI菜单上线(&c测试版本 可能存在BUG&6)... + &6GUI菜单上线(&c测试版本&6)... + &b2.8.3.3 - &c添加圈地世界限制(详见dany.yml)...; &b2.8.3.2 - &c去除铁轨修复补丁(1.8开始无需修复)...; &b2.8.3.1 - &4修复菜单监听未启用的问题(请删除一次gui.yml)...; - &b2.8.3.0 - &cGUI菜单测试版上线...; Debug UTF-8 - + spigot-repo diff --git a/src/main/java/pw/yumc/Residence/ResidenceMain.java b/src/main/java/pw/yumc/Residence/ResidenceMain.java index a5511ab..91dc5f8 100644 --- a/src/main/java/pw/yumc/Residence/ResidenceMain.java +++ b/src/main/java/pw/yumc/Residence/ResidenceMain.java @@ -99,6 +99,7 @@ public class ResidenceMain extends JavaPlugin { protected DataBackup backup; protected ChatManager chatmanager; protected FileConfig config; + protected FileConfig deny; protected File dataFolder; protected Map deleteConfirm; protected EconomyInterface economy; @@ -165,6 +166,13 @@ public class ResidenceMain extends JavaPlugin { return deleteConfirm; } + /** + * @return the deny + */ + public FileConfig getDeny() { + return deny; + } + public EconomyInterface getEconomyManager() { return economy; } @@ -301,7 +309,7 @@ public class ResidenceMain extends JavaPlugin { YMLSaveHelper yml; File loadFile; final long time = System.currentTimeMillis(); - final HashMap worlds = new HashMap(); + final HashMap worlds = new HashMap<>(); for (final World world : this.getServer().getWorlds()) { loadFile = new File(worldFolder, "res_" + world.getName() + ".yml"); if (loadFile.isFile()) { @@ -384,8 +392,8 @@ public class ResidenceMain extends JavaPlugin { } catch (final Exception e) { vergt1_8 = false; } - deleteConfirm = new HashMap(); - resadminToggle = new ArrayList(); + deleteConfirm = new HashMap<>(); + resadminToggle = new ArrayList<>(); dataFolder = this.getDataFolder(); if (!dataFolder.isDirectory()) { dataFolder.mkdirs(); @@ -560,11 +568,13 @@ public class ResidenceMain extends JavaPlugin { @Override public void onLoad() { config = new FileConfig(this); + deny = new FileConfig(this, "deny.yml"); } @Override public void reloadConfig() { config.reload(); + deny.reload(); gmanager = new PermissionManager(this); imanager = new WorldItemManager(this.getConfig()); wmanager = new WorldFlagManager(this); diff --git a/src/main/java/pw/yumc/Residence/commandsub/CommandCreate.java b/src/main/java/pw/yumc/Residence/commandsub/CommandCreate.java index 20efcd8..5c442c1 100644 --- a/src/main/java/pw/yumc/Residence/commandsub/CommandCreate.java +++ b/src/main/java/pw/yumc/Residence/commandsub/CommandCreate.java @@ -29,6 +29,10 @@ public class CommandCreate extends BaseCommand { @Override public void execute(final CommandSender sender, final Command command, final String label, final String[] args) throws CommandException { final Player player = (Player) sender; + if (plugin.getDeny().getStringList("world").contains(player.getWorld().getName())) { + player.sendMessage("§c当前世界不允许圈地!"); + return; + } final boolean resadmin = (command != null); final ResidenceManager rmanager = plugin.getResidenceManager(); final Language language = plugin.getLanguage(); diff --git a/src/main/java/pw/yumc/Residence/listeners/ResidencePlayerListener.java b/src/main/java/pw/yumc/Residence/listeners/ResidencePlayerListener.java index a09c78c..d9b65ca 100644 --- a/src/main/java/pw/yumc/Residence/listeners/ResidencePlayerListener.java +++ b/src/main/java/pw/yumc/Residence/listeners/ResidencePlayerListener.java @@ -251,8 +251,7 @@ public class ResidencePlayerListener implements Listener { return; } final Material mat = block.getType(); - if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block) - || event.getAction() == Action.PHYSICAL)) { + if (!((isContainer(mat, block) || isCanUseEntity_RClickOnly(mat, block)) && event.getAction() == Action.RIGHT_CLICK_BLOCK || isCanUseEntity_BothClick(mat, block) || event.getAction() == Action.PHYSICAL)) { final int typeId = player.getItemInHand().getTypeId(); if (typeId != plugin.getConfigManager().getSelectionTooldID() && typeId != plugin.getConfigManager().getInfoToolID() && typeId != 351 && typeId != 416) { return; @@ -284,6 +283,10 @@ public class ResidencePlayerListener implements Listener { } if (event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (player.getItemInHand().getTypeId() == plugin.getConfigManager().getSelectionTooldID()) { + if (plugin.getDeny().getStringList("world").contains(player.getWorld().getName())) { + player.sendMessage("§c当前世界不允许圈地!"); + return; + } final Plugin wep = Bukkit.getPluginManager().getPlugin("WorldEdit"); if (wep != null) { if (((WorldEditPlugin) wep).getConfig().getInt("wand-item") == plugin.getConfigManager().getSelectionTooldID()) { @@ -291,19 +294,19 @@ public class ResidencePlayerListener implements Listener { } } final PermissionGroup group = plugin.getPermissionManager().getGroup(player); - if (player.hasPermission("residence.select") || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") - || group.canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") || resadmin) { + if (player.hasPermission("residence.select") + || player.hasPermission("residence.create") && !player.isPermissionSet("residence.select") + || group.canCreateResidences() && !player.isPermissionSet("residence.create") && !player.isPermissionSet("residence.select") + || resadmin) { if (event.getAction() == Action.LEFT_CLICK_BLOCK) { final Location loc = block.getLocation(); plugin.getSelectionManager().placeLoc1(player, loc); - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectPoint", plugin.getLanguage().getPhrase("Primary")) + ChatColor.RED + "(" + loc.getBlockX() + "," - + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + player.sendMessage(String.format("§a%s§c(%s,%s,%s)§a!", plugin.getLanguage().getPhrase("SelectPoint", plugin.getLanguage().getPhrase("Primary")), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); event.setCancelled(true); } else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { final Location loc = block.getLocation(); plugin.getSelectionManager().placeLoc2(player, loc); - player.sendMessage(ChatColor.GREEN + plugin.getLanguage().getPhrase("SelectPoint", plugin.getLanguage().getPhrase("Secondary")) + ChatColor.RED + "(" + loc.getBlockX() + "," - + loc.getBlockY() + "," + loc.getBlockZ() + ")" + ChatColor.GREEN + "!"); + player.sendMessage(String.format("§a%s§c(%s,%s,%s)§a!", plugin.getLanguage().getPhrase("Secondary", plugin.getLanguage().getPhrase("Primary")), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())); } } } @@ -324,8 +327,8 @@ public class ResidencePlayerListener implements Listener { if (heldItem != null) { if (event.getAction() == Action.RIGHT_CLICK_BLOCK) { if (player.getItemInHand().getTypeId() == 351) { - if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS || player.getItemInHand().getData().getData() == 3 && block.getTypeId() == 17 - && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { + if (player.getItemInHand().getData().getData() == 15 && block.getType() == Material.GRASS + || player.getItemInHand().getData().getData() == 3 && block.getTypeId() == 17 && (block.getData() == 3 || block.getData() == 7 || block.getData() == 11 || block.getData() == 15)) { perms = plugin.getPermsByLocForPlayer(block.getRelative(event.getBlockFace()).getLocation(), player); if (!perms.playerHas(player.getName(), world, "build", true)) { event.setCancelled(true); @@ -500,8 +503,9 @@ public class ResidencePlayerListener implements Listener { final Player player = event.getPlayer(); final ClaimedResidence res = plugin.getResidenceManager().getByLoc(loc); if (res != null) { - if (plugin.isResAdminOn(player) || ((res.getPermissions().playerHas(player.getName(), "tp", true) || player.hasPermission("residence.admin.tp")) - && (res.getPermissions().playerHas(player.getName(), "move", true) || player.hasPermission("residence.admin.move")))) { + if (plugin.isResAdminOn(player) + || ((res.getPermissions().playerHas(player.getName(), "tp", true) || player.hasPermission("residence.admin.tp")) + && (res.getPermissions().playerHas(player.getName(), "move", true) || player.hasPermission("residence.admin.move")))) { handleNewLocation(player, loc, false); } else if (event.getCause() != TeleportCause.PLUGIN) { final String areaname = res.getName(); @@ -527,21 +531,48 @@ public class ResidencePlayerListener implements Listener { } private boolean isCanUseEntity_BothClick(final Material mat, final Block block) { - return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR || mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE - || mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE || mat == Material.DRAGON_EGG || plugin.getConfigManager().getCustomBothClick().contains(block.getTypeId()) - || (plugin.isGt1_8() && (mat == Material.SPRUCE_DOOR || mat == Material.BIRCH_DOOR || mat == Material.JUNGLE_DOOR || mat == Material.ACACIA_DOOR || mat == Material.DARK_OAK_DOOR - || mat == Material.SPRUCE_FENCE_GATE || mat == Material.BIRCH_FENCE_GATE || mat == Material.JUNGLE_FENCE_GATE || mat == Material.ACACIA_FENCE_GATE - || mat == Material.DARK_OAK_FENCE_GATE)); + return mat == Material.LEVER + || mat == Material.STONE_BUTTON + || mat == Material.WOOD_BUTTON + || mat == Material.WOODEN_DOOR + || mat == Material.TRAP_DOOR + || mat == Material.FENCE_GATE + || mat == Material.PISTON_BASE + || mat == Material.PISTON_STICKY_BASE + || mat == Material.DRAGON_EGG + || plugin.getConfigManager().getCustomBothClick().contains(block.getTypeId()) + || (plugin.isGt1_8() + && (mat == Material.SPRUCE_DOOR + || mat == Material.BIRCH_DOOR + || mat == Material.JUNGLE_DOOR + || mat == Material.ACACIA_DOOR + || mat == Material.DARK_OAK_DOOR + || mat == Material.SPRUCE_FENCE_GATE + || mat == Material.BIRCH_FENCE_GATE + || mat == Material.JUNGLE_FENCE_GATE + || mat == Material.ACACIA_FENCE_GATE + || mat == Material.DARK_OAK_FENCE_GATE)); } private boolean isCanUseEntity_RClickOnly(final Material mat, final Block block) { - return mat == Material.ITEM_FRAME || mat == Material.BEACON || mat == Material.FLOWER_POT || mat == Material.COMMAND || mat == Material.ANVIL || mat == Material.CAKE_BLOCK - || mat == Material.NOTE_BLOCK || mat == Material.DIODE || mat == Material.DIODE_BLOCK_OFF || mat == Material.DIODE_BLOCK_ON || mat == Material.BED_BLOCK || mat == Material.WORKBENCH - || mat == Material.BREWING_STAND || mat == Material.ENCHANTMENT_TABLE || plugin.getConfigManager().getCustomRightClick().contains(block.getTypeId()); + return mat == Material.ITEM_FRAME + || mat == Material.BEACON + || mat == Material.FLOWER_POT + || mat == Material.COMMAND + || mat == Material.ANVIL + || mat == Material.CAKE_BLOCK + || mat == Material.NOTE_BLOCK + || mat == Material.DIODE + || mat == Material.DIODE_BLOCK_OFF + || mat == Material.DIODE_BLOCK_ON + || mat == Material.BED_BLOCK + || mat == Material.WORKBENCH + || mat == Material.BREWING_STAND + || mat == Material.ENCHANTMENT_TABLE + || plugin.getConfigManager().getCustomRightClick().contains(block.getTypeId()); } private boolean isContainer(final Material mat, final Block block) { - return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") - || plugin.getConfigManager().getCustomContainers().contains(block.getTypeId()); + return FlagPermissions.getMaterialUseFlagList().containsKey(mat) && FlagPermissions.getMaterialUseFlagList().get(mat).equals("container") || plugin.getConfigManager().getCustomContainers().contains(block.getTypeId()); } } diff --git a/src/main/resources/deny.yml b/src/main/resources/deny.yml new file mode 100644 index 0000000..2befe58 --- /dev/null +++ b/src/main/resources/deny.yml @@ -0,0 +1,3 @@ +#禁止圈地的世界(将会禁止命令和选择) +world: +- 'denyworld' \ No newline at end of file