1
0
mirror of https://e.coding.net/circlecloud/Residence.git synced 2025-11-24 21:46:16 +00:00

fix: 修复GUI刷物品问题 添加GUI开关

Signed-off-by: 502647092 <admin@yumc.pw>
This commit is contained in:
2017-01-16 17:23:09 +08:00
parent e4ef12f7b7
commit 4a33913a9c
6 changed files with 176 additions and 218 deletions

236
pom.xml
View File

@@ -1,120 +1,120 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>pw.yumc</groupId> <groupId>pw.yumc</groupId>
<artifactId>Residence</artifactId> <artifactId>Residence</artifactId>
<version>2.8.3.5</version> <version>2.8.3.6</version>
<name>Residence</name> <name>Residence</name>
<description>重制版本的领地插件 - 喵♂呜</description> <description>重制版本的领地插件 - 喵♂呜</description>
<build> <build>
<finalName>${project.name}</finalName> <finalName>${project.name}</finalName>
<resources> <resources>
<resource> <resource>
<directory>src/main/resources</directory> <directory>src/main/resources</directory>
<filtering>true</filtering> <filtering>true</filtering>
</resource> </resource>
</resources> </resources>
<plugins> <plugins>
<plugin> <plugin>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version> <version>3.1</version>
<configuration> <configuration>
<source>1.7</source> <source>1.7</source>
<target>1.7</target> <target>1.7</target>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId> <artifactId>maven-shade-plugin</artifactId>
<version>2.3</version> <version>2.3</version>
<configuration> <configuration>
<createDependencyReducedPom>false</createDependencyReducedPom> <createDependencyReducedPom>false</createDependencyReducedPom>
<minimizeJar>true</minimizeJar> <minimizeJar>true</minimizeJar>
<artifactSet> <artifactSet>
<includes> <includes>
<include>cn.citycraft:PluginHelper</include> <include>cn.citycraft:PluginHelper</include>
</includes> </includes>
</artifactSet> </artifactSet>
<relocations> <relocations>
<relocation> <relocation>
<pattern>cn.citycraft.PluginHelper</pattern> <pattern>cn.citycraft.PluginHelper</pattern>
<shadedPattern>${project.groupId}.${project.artifactId}</shadedPattern> <shadedPattern>${project.groupId}.${project.artifactId}</shadedPattern>
</relocation> </relocation>
</relocations> </relocations>
</configuration> </configuration>
<executions> <executions>
<execution> <execution>
<phase>package</phase> <phase>package</phase>
<goals> <goals>
<goal>shade</goal> <goal>shade</goal>
</goals> </goals>
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<ciManagement> <ciManagement>
<system>Jenkins</system> <system>Jenkins</system>
<url>http://ci.yumc.pw/job/${project.artifactId}/</url> <url>http://ci.yumc.pw/job/${project.artifactId}/</url>
</ciManagement> </ciManagement>
<properties> <properties>
<update.description>&amp;6GUI菜单上线(&amp;c测试版本&amp;6)...</update.description> <update.description>§6GUI菜单完善...</update.description>
<update.changes> <update.changes>
&amp;b2.8.3.5 - &amp;c修复世界限制失效问题...; §b2.8.3.6 - §c修复GUI刷物品的问题...;
&amp;b2.8.3.4 - &amp;c圈地世界限制忽略OP和管理...; §b2.8.3.5 - §c修复世界限制失效问题...;
&amp;b2.8.3.3 - &amp;c添加圈地世界限制(详见dany.yml)...; §b2.8.3.4 - §c圈地世界限制忽略OP和管理...;
</update.changes> </update.changes>
<env.GIT_COMMIT>Debug</env.GIT_COMMIT> <env.GIT_COMMIT>Debug</env.GIT_COMMIT>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<repositories> <repositories>
<repository> <repository>
<id>spigot-repo</id> <id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url> <url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
</repository> </repository>
<repository> <repository>
<id>yumc-repo</id> <id>yumc-repo</id>
<url>http://repo.yumc.pw/content/groups/public/</url> <url>http://repo.yumc.pw/content/groups/public/</url>
</repository> </repository>
</repositories> </repositories>
<distributionManagement> <distributionManagement>
<repository> <repository>
<id>jtb</id> <id>jtb</id>
<name>YUMC</name> <name>YUMC</name>
<url>http://repo.yumc.pw/content/repositories/yumcenter/</url> <url>http://repo.yumc.pw/content/repositories/yumcenter/</url>
</repository> </repository>
</distributionManagement> </distributionManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId> <artifactId>spigot-api</artifactId>
<type>jar</type> <type>jar</type>
<version>1.9-R0.1-SNAPSHOT</version> <version>1.11.2-R0.1-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.earth2me</groupId> <groupId>com.earth2me</groupId>
<artifactId>essentials</artifactId> <artifactId>essentials</artifactId>
<version>2.9.6</version> <version>2.9.6</version>
<scope>system</scope> <scope>system</scope>
<systemPath>${project.basedir}/lib/Essentials.jar</systemPath> <systemPath>${project.basedir}/lib/Essentials.jar</systemPath>
</dependency> </dependency>
<dependency> <dependency>
<groupId>net.milkbowl.vault</groupId> <groupId>net.milkbowl.vault</groupId>
<artifactId>Vault</artifactId> <artifactId>Vault</artifactId>
<version>1.5.6</version> <version>1.5.6</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.sk89q</groupId> <groupId>com.sk89q</groupId>
<artifactId>WorldEdit</artifactId> <artifactId>WorldEdit</artifactId>
<version>5.4.5</version> <version>5.4.5</version>
<scope>system</scope> <scope>system</scope>
<systemPath>${project.basedir}/lib/WorldEdit.jar</systemPath> <systemPath>${project.basedir}/lib/WorldEdit.jar</systemPath>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.citycraft</groupId> <groupId>cn.citycraft</groupId>
<artifactId>PluginHelper</artifactId> <artifactId>PluginHelper</artifactId>
<type>jar</type> <type>jar</type>
<version>1.0</version> <version>1.0</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -13,7 +13,6 @@ import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import cn.citycraft.PluginHelper.config.FileConfig; import cn.citycraft.PluginHelper.config.FileConfig;
import pw.yumc.Residence.ResidenceMain; import pw.yumc.Residence.ResidenceMain;
import pw.yumc.Residence.listeners.ResidenceGUIListener;
public class FlagUtil { public class FlagUtil {
public static FileConfig conf; public static FileConfig conf;
@@ -27,6 +26,9 @@ public class FlagUtil {
} }
public static void open(final ClaimedResidence area, final Player player, final String target, final boolean resadmin) { public static void open(final ClaimedResidence area, final Player player, final String target, final boolean resadmin) {
if (!conf.getBoolean("Enable")) {
return; }
final SetFlag flag = new SetFlag(area, player, resadmin); final SetFlag flag = new SetFlag(area, player, resadmin);
if (StringUtils.isEmpty(target)) { if (StringUtils.isEmpty(target)) {
flag.recalculateResidence(area); flag.recalculateResidence(area);
@@ -34,7 +36,6 @@ public class FlagUtil {
flag.setTargePlayer(target); flag.setTargePlayer(target);
flag.recalculatePlayer(area); flag.recalculatePlayer(area);
} }
ResidenceGUIListener.GUI.put(player.getName(), flag);
player.openInventory(flag.getInventory()); player.openInventory(flag.getInventory());
player.sendMessage("§a已打开领地 " + area.getName() + " 的管理界面!"); player.sendMessage("§a已打开领地 " + area.getName() + " 的管理界面!");
} }

View File

@@ -0,0 +1,21 @@
package pw.yumc.Residence.gui;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
public class GuiHolder implements InventoryHolder {
SetFlag flag;
public GuiHolder(SetFlag flag) {
this.flag = flag;
}
public SetFlag getFlag() {
return flag;
}
@Override
public Inventory getInventory() {
return null;
}
}

View File

@@ -52,7 +52,7 @@ public class SetFlag {
if (FlagUtil.description.containsKey(one.getKey())) { if (FlagUtil.description.containsKey(one.getKey())) {
lore.addAll(FlagUtil.description.get(one.getKey())); lore.addAll(FlagUtil.description.get(one.getKey()));
} }
switch (one.getValue().intValue()) { switch (one.getValue()) {
case 0: case 0:
lore.add(ChatColor.GOLD + "权限状态: " + ChatColor.RED + "关闭"); lore.add(ChatColor.GOLD + "权限状态: " + ChatColor.RED + "关闭");
break; break;
@@ -79,7 +79,7 @@ public class SetFlag {
} }
public ItemStack getStatuItem(final Entry<String, Integer> one) { public ItemStack getStatuItem(final Entry<String, Integer> one) {
switch (one.getValue().intValue()) { switch (one.getValue()) {
case 0: case 0:
return Residence.getFlagUtilManager().getGuiFalse(); return Residence.getFlagUtilManager().getGuiFalse();
case 1: case 1:
@@ -114,7 +114,7 @@ public class SetFlag {
resFlags.put(one.getKey(), one.getValue()); resFlags.put(one.getKey(), one.getValue());
} }
} }
Map<String, Boolean> pFlags = null; Map<String, Boolean> pFlags;
if (this.targetPlayer != null) { if (this.targetPlayer != null) {
final ArrayList<String> PosibleResPFlags = res.getPermissions().getposibleFlags(); final ArrayList<String> PosibleResPFlags = res.getPermissions().getposibleFlags();
final Map<String, Boolean> temp = new HashMap<>(); final Map<String, Boolean> temp = new HashMap<>();
@@ -131,22 +131,30 @@ public class SetFlag {
} }
} }
} }
String title = String.format(FlagUtil.getConfig().getMessage("GUI.Pset.Title"), this.targetPlayer, res.getName());
recalculate(title, globalFlags, resFlags, res.getPermissions().getFlags(), flags);
}
public void recalculate(String title, Map<String, Boolean> globalFlags, Map<String, Boolean> resFlags, Map<String, Boolean> resPerm, List<String> flags) {
final LinkedHashMap<String, Integer> TempPermMap = new LinkedHashMap<>(); final LinkedHashMap<String, Integer> TempPermMap = new LinkedHashMap<>();
for (final Entry<String, Boolean> one : resPerm.entrySet()) {
if (flags.contains(one.getKey())) {
resFlags.put(one.getKey(), one.getValue());
}
}
for (final Entry<String, Boolean> one : globalFlags.entrySet()) { for (final Entry<String, Boolean> one : globalFlags.entrySet()) {
if (flags.contains(one.getKey())) { if (flags.contains(one.getKey())) {
if (resFlags.containsKey(one.getKey())) { if (resFlags.containsKey(one.getKey())) {
TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0); TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0);
} else { } else {
TempPermMap.put(one.getKey(), Integer.valueOf(2)); TempPermMap.put(one.getKey(), 2);
} }
} }
} }
String title = "";
title = String.format(FlagUtil.getConfig().getMessage("GUI.Pset.Title"), this.targetPlayer, res.getName());
if (title.length() > 32) { if (title.length() > 32) {
title = title.substring(0, Math.min(title.length(), 32)); title = title.substring(0, Math.min(title.length(), 32));
} }
final Inventory GuiInv = Bukkit.createInventory(null, 54, title); final Inventory GuiInv = Bukkit.createInventory(new GuiHolder(this), 54, title);
final FlagData flagData = Residence.getFlagUtilManager().getFlagData(); final FlagData flagData = Residence.getFlagUtilManager().getFlagData();
this.pageCount = ((int) Math.ceil(TempPermMap.size() / 45.0D)); this.pageCount = ((int) Math.ceil(TempPermMap.size() / 45.0D));
final int start = this.page * 45 - 45; final int start = this.page * 45 - 45;
@@ -168,7 +176,7 @@ public class SetFlag {
if (flagData.contains(one.getKey())) { if (flagData.contains(one.getKey())) {
MiscInfo = flagData.getItem(one.getKey()); MiscInfo = flagData.getItem(one.getKey());
} }
if (one.getValue().intValue() == 1) { if (one.getValue() == 1) {
final ItemMeta im = MiscInfo.getItemMeta(); final ItemMeta im = MiscInfo.getItemMeta();
im.addEnchant(Enchantment.LUCK, 1, true); im.addEnchant(Enchantment.LUCK, 1, true);
MiscInfo.setItemMeta(im); MiscInfo.setItemMeta(im);
@@ -193,65 +201,8 @@ public class SetFlag {
final Map<String, Boolean> globalFlags = Residence.getPermissionManager().getAllFlags().getFlags(); final Map<String, Boolean> globalFlags = Residence.getPermissionManager().getAllFlags().getFlags();
final Map<String, Boolean> resFlags = new HashMap<>(); final Map<String, Boolean> resFlags = new HashMap<>();
final LinkedHashMap<String, Integer> TempPermMap = new LinkedHashMap<>(); final LinkedHashMap<String, Integer> TempPermMap = new LinkedHashMap<>();
for (final Entry<String, Boolean> one : res.getPermissions().getFlags().entrySet()) { String title = String.format(FlagUtil.getConfig().getMessage("GUI.Set.Title"), res.getName());
if (flags.contains(one.getKey())) { recalculate(title, globalFlags, resFlags, res.getPermissions().getFlags(), flags);
resFlags.put(one.getKey(), one.getValue());
}
}
for (final Entry<String, Boolean> one : globalFlags.entrySet()) {
if (flags.contains(one.getKey())) {
if (resFlags.containsKey(one.getKey())) {
TempPermMap.put(one.getKey(), resFlags.get(one.getKey()) ? 1 : 0);
} else {
TempPermMap.put(one.getKey(), 2);
}
}
}
String title = "";
title = String.format(FlagUtil.getConfig().getMessage("GUI.Set.Title"), res.getName());
if (title.length() > 32) {
title = title.substring(0, Math.min(title.length(), 32));
}
final Inventory GuiInv = Bukkit.createInventory(null, 54, title);
final FlagData flagData = Residence.getFlagUtilManager().getFlagData();
this.pageCount = ((int) Math.ceil(TempPermMap.size() / 45.0D));
final int start = this.page * 45 - 45;
final int end = this.page * 45;
int count = -1;
this.permMap.clear();
for (final Entry<String, Integer> one : TempPermMap.entrySet()) {
count++;
if (count >= end) {
break;
}
if (count >= start) {
this.permMap.put(one.getKey(), one.getValue());
}
}
int i = 0;
for (final Entry<String, Integer> one : this.permMap.entrySet()) {
ItemStack MiscInfo = getStatuItem(one);
if (flagData.contains(one.getKey())) {
MiscInfo = flagData.getItem(one.getKey());
}
if (one.getValue().intValue() == 1) {
final ItemMeta im = MiscInfo.getItemMeta();
im.addEnchant(Enchantment.LUCK, 1, true);
MiscInfo.setItemMeta(im);
} else {
MiscInfo.removeEnchantment(Enchantment.LUCK);
}
final ItemMeta MiscInfoMeta = MiscInfo.getItemMeta();
MiscInfoMeta.setDisplayName(ChatColor.GREEN + one.getKey());
MiscInfoMeta.setLore(getFlagLore(one));
MiscInfo.setItemMeta(MiscInfoMeta);
GuiInv.setItem(i, MiscInfo);
i++;
if (i > 53) {
break;
}
}
setPageItem(GuiInv);
} }
public void setAdmin(final boolean state) { public void setAdmin(final boolean state) {
@@ -278,9 +229,7 @@ public class SetFlag {
final ClickType click = event.getClick(); final ClickType click = event.getClick();
final InventoryAction action = event.getAction(); final InventoryAction action = event.getAction();
final ItemStack item = this.inventory.getItem(slot); final ItemStack item = this.inventory.getItem(slot);
if (item == null) { if (item == null) { return; }
return;
}
if (slot == 53) { if (slot == 53) {
if (this.page < this.pageCount) { if (this.page < this.pageCount) {
this.page += 1; this.page += 1;
@@ -302,13 +251,10 @@ public class SetFlag {
command = "false"; command = "false";
} else if ((click.isLeftClick()) && (action == InventoryAction.MOVE_TO_OTHER_INVENTORY)) { } else if ((click.isLeftClick()) && (action == InventoryAction.MOVE_TO_OTHER_INVENTORY)) {
command = "remove"; command = "remove";
} else if ((click.isRightClick()) && (action == InventoryAction.MOVE_TO_OTHER_INVENTORY)) { } else if ((click.isRightClick()) && (action == InventoryAction.MOVE_TO_OTHER_INVENTORY)) { return; }
return;
}
String flag = "";
int i = 0; int i = 0;
for (final Entry<String, Integer> one : this.permMap.entrySet()) { for (final Entry<String, Integer> one : this.permMap.entrySet()) {
flag = one.getKey(); String flag = one.getKey();
if (i == slot) { if (i == slot) {
if (this.targetPlayer == null) { if (this.targetPlayer == null) {
if (this.admin) { if (this.admin) {

View File

@@ -1,39 +1,25 @@
package pw.yumc.Residence.listeners; package pw.yumc.Residence.listeners;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.inventory.InventoryHolder;
import pw.yumc.Residence.gui.GuiHolder;
import pw.yumc.Residence.gui.SetFlag; import pw.yumc.Residence.gui.SetFlag;
public class ResidenceGUIListener implements Listener { public class ResidenceGUIListener implements Listener {
public static Map<String, SetFlag> GUI = new HashMap<>();
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onFlagGuiClick(final InventoryClickEvent event) { public void onFlagGuiClick(final InventoryClickEvent event) {
final String player = event.getWhoClicked().getName(); final String player = event.getWhoClicked().getName();
if (GUI.size() == 0 || !GUI.containsKey(player)) { InventoryHolder guiHolder = event.getInventory().getHolder();
return; if (guiHolder instanceof GuiHolder) {
} event.setCancelled(true);
event.setCancelled(true); final int slot = event.getRawSlot();
final int slot = event.getRawSlot(); if ((slot > 53) || (slot < 0)) { return; }
if ((slot > 53) || (slot < 0)) { final SetFlag setFlag = ((GuiHolder) guiHolder).getFlag();
return; setFlag.toggleFlag(event);
}
final SetFlag setFlag = GUI.get(player);
setFlag.toggleFlag(event);
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onFlagGuiClose(final InventoryCloseEvent event) {
final String player = event.getPlayer().getName();
if (GUI.size() != 0 & GUI.containsKey(player)) {
GUI.remove(player);
} }
} }
} }

View File

@@ -1,3 +1,7 @@
Version: 1.0
#是否开启领地GUI
Enable: true
# 图形化界面的按钮显示 # 图形化界面的按钮显示
GUI: GUI:
setTrue: setTrue: