mirror of
https://e.coding.net/circlecloud/Residence.git
synced 2025-11-26 22:06:07 +00:00
clean up and update...
This commit is contained in:
@@ -24,6 +24,8 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -32,10 +34,16 @@ import org.bukkit.plugin.PluginManager;
|
|||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import com.bekvon.bukkit.residence.chat.ChatManager;
|
import com.bekvon.bukkit.residence.chat.ChatManager;
|
||||||
|
import com.bekvon.bukkit.residence.commandmain.CommandRc;
|
||||||
|
import com.bekvon.bukkit.residence.commandmain.CommandRes;
|
||||||
|
import com.bekvon.bukkit.residence.commandmain.CommandResLoad;
|
||||||
|
import com.bekvon.bukkit.residence.commandmain.CommandResReload;
|
||||||
|
import com.bekvon.bukkit.residence.commandmain.CommandResWorld;
|
||||||
import com.bekvon.bukkit.residence.economy.EconomyInterface;
|
import com.bekvon.bukkit.residence.economy.EconomyInterface;
|
||||||
import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter;
|
import com.bekvon.bukkit.residence.economy.EssentialsEcoAdapter;
|
||||||
import com.bekvon.bukkit.residence.economy.TransactionManager;
|
import com.bekvon.bukkit.residence.economy.TransactionManager;
|
||||||
import com.bekvon.bukkit.residence.economy.rent.RentManager;
|
import com.bekvon.bukkit.residence.economy.rent.RentManager;
|
||||||
|
import com.bekvon.bukkit.residence.event.ResidenceCommandEvent;
|
||||||
import com.bekvon.bukkit.residence.itemlist.WorldItemManager;
|
import com.bekvon.bukkit.residence.itemlist.WorldItemManager;
|
||||||
import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener;
|
import com.bekvon.bukkit.residence.listeners.ResidenceBlockListener;
|
||||||
import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener;
|
import com.bekvon.bukkit.residence.listeners.ResidenceEntityListener;
|
||||||
@@ -49,6 +57,11 @@ import com.bekvon.bukkit.residence.protection.LeaseManager;
|
|||||||
import com.bekvon.bukkit.residence.protection.PermissionListManager;
|
import com.bekvon.bukkit.residence.protection.PermissionListManager;
|
||||||
import com.bekvon.bukkit.residence.protection.ResidenceManager;
|
import com.bekvon.bukkit.residence.protection.ResidenceManager;
|
||||||
import com.bekvon.bukkit.residence.protection.WorldFlagManager;
|
import com.bekvon.bukkit.residence.protection.WorldFlagManager;
|
||||||
|
import com.bekvon.bukkit.residence.runnable.AutoSaveTask;
|
||||||
|
import com.bekvon.bukkit.residence.runnable.HealTask;
|
||||||
|
import com.bekvon.bukkit.residence.runnable.LeaseTask;
|
||||||
|
import com.bekvon.bukkit.residence.runnable.RentTask;
|
||||||
|
import com.bekvon.bukkit.residence.runnable.TaskManager;
|
||||||
import com.bekvon.bukkit.residence.selection.SelectionManager;
|
import com.bekvon.bukkit.residence.selection.SelectionManager;
|
||||||
import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager;
|
import com.bekvon.bukkit.residence.selection.WorldEditSelectionManager;
|
||||||
import com.bekvon.bukkit.residence.text.Language;
|
import com.bekvon.bukkit.residence.text.Language;
|
||||||
@@ -58,6 +71,7 @@ import com.bekvon.bukkit.residence.utils.DataBackup;
|
|||||||
import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter;
|
import com.bekvon.bukkit.residence.vaultinterface.ResidenceVaultAdapter;
|
||||||
import com.earth2me.essentials.Essentials;
|
import com.earth2me.essentials.Essentials;
|
||||||
|
|
||||||
|
import cn.citycraft.PluginHelper.commands.HandlerMainCommand;
|
||||||
import cn.citycraft.PluginHelper.config.FileConfig;
|
import cn.citycraft.PluginHelper.config.FileConfig;
|
||||||
import cn.citycraft.PluginHelper.utils.VersionChecker;
|
import cn.citycraft.PluginHelper.utils.VersionChecker;
|
||||||
|
|
||||||
@@ -69,10 +83,13 @@ import cn.citycraft.PluginHelper.utils.VersionChecker;
|
|||||||
public class Residence extends JavaPlugin {
|
public class Residence extends JavaPlugin {
|
||||||
|
|
||||||
public static float bukkitver;
|
public static float bukkitver;
|
||||||
|
|
||||||
protected static ResidenceManager rmanager;
|
protected static ResidenceManager rmanager;
|
||||||
protected static SelectionManager smanager;
|
protected static SelectionManager smanager;
|
||||||
protected static PermissionManager gmanager;
|
protected static PermissionManager gmanager;
|
||||||
protected static ConfigManager cmanager;
|
protected static ConfigManager cmanager;
|
||||||
|
protected static FlagManager fmanager;
|
||||||
|
protected static TaskManager taskmanager;
|
||||||
protected static ResidenceBlockListener blistener;
|
protected static ResidenceBlockListener blistener;
|
||||||
protected static ResidencePlayerListener plistener;
|
protected static ResidencePlayerListener plistener;
|
||||||
protected static ResidenceEntityListener elistener;
|
protected static ResidenceEntityListener elistener;
|
||||||
@@ -85,7 +102,7 @@ public class Residence extends JavaPlugin {
|
|||||||
protected static RentManager rentmanager;
|
protected static RentManager rentmanager;
|
||||||
protected static ChatManager chatmanager;
|
protected static ChatManager chatmanager;
|
||||||
protected static Server server;
|
protected static Server server;
|
||||||
protected static HelpEntry helppages;
|
public static HelpEntry helppages;
|
||||||
protected static Language language;
|
protected static Language language;
|
||||||
protected static Logger log;
|
protected static Logger log;
|
||||||
protected static boolean useWorldEdit;
|
protected static boolean useWorldEdit;
|
||||||
@@ -96,37 +113,16 @@ public class Residence extends JavaPlugin {
|
|||||||
protected static int rentBukkitId = -1;
|
protected static int rentBukkitId = -1;
|
||||||
protected static int healBukkitId = -1;
|
protected static int healBukkitId = -1;
|
||||||
protected static int autosaveBukkitId = -1;
|
protected static int autosaveBukkitId = -1;
|
||||||
protected static boolean initsuccess = false;
|
|
||||||
protected static List<String> resadminToggle;
|
protected static List<String> resadminToggle;
|
||||||
protected static FileConfig config;
|
protected static FileConfig config;
|
||||||
private final static String[] validLanguages = { "English", "Chinese" };
|
private final static String[] validLanguages = { "English", "Chinese" };
|
||||||
|
public static boolean initsuccess;
|
||||||
|
|
||||||
|
protected HandlerMainCommand hdmcnd;
|
||||||
|
|
||||||
protected boolean firstenable = true;
|
protected boolean firstenable = true;
|
||||||
|
|
||||||
protected Map<String, String> deleteConfirm;
|
public Map<String, String> deleteConfirm;
|
||||||
|
|
||||||
private Runnable doHeals = () -> plistener.doHeals();
|
|
||||||
|
|
||||||
private Runnable rentExpire = () -> {
|
|
||||||
rentmanager.checkCurrentRents();
|
|
||||||
if (cmanager.showIntervalMessages())
|
|
||||||
getLog().info(" - Rent Expirations checked!");
|
|
||||||
};
|
|
||||||
|
|
||||||
private Runnable leaseExpire = () -> {
|
|
||||||
leasemanager.doExpirations();
|
|
||||||
if (cmanager.showIntervalMessages())
|
|
||||||
getLog().info(" - Lease Expirations checked!");
|
|
||||||
};
|
|
||||||
|
|
||||||
private Runnable autoSave = () -> {
|
|
||||||
try {
|
|
||||||
if (initsuccess)
|
|
||||||
saveYml();
|
|
||||||
} catch (Exception ex) {
|
|
||||||
getLog().warning("领地数据保存错误,可能造成部分领地丢失,请尝试恢复备份文件!");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public Residence() {
|
public Residence() {
|
||||||
}
|
}
|
||||||
@@ -282,6 +278,71 @@ public class Residence extends JavaPlugin {
|
|||||||
language = Language.parseText(langconfig, "Language");
|
language = Language.parseText(langconfig, "Language");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public boolean loadYml() throws Exception {
|
||||||
|
File saveFolder = new File(dataFolder, "Save");
|
||||||
|
try {
|
||||||
|
File worldFolder = new File(saveFolder, "Worlds");
|
||||||
|
if (!saveFolder.isDirectory()) {
|
||||||
|
this.getLogger().warning("领地数据保存目录不存在...");
|
||||||
|
this.getLogger().warning("请重新启动服务器生成新的文件...");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
YMLSaveHelper yml;
|
||||||
|
File loadFile;
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
HashMap<String, Object> worlds = new HashMap<String, Object>();
|
||||||
|
for (World world : server.getWorlds()) {
|
||||||
|
loadFile = new File(worldFolder, "res_" + world.getName() + ".yml");
|
||||||
|
if (loadFile.isFile()) {
|
||||||
|
yml = new YMLSaveHelper(loadFile);
|
||||||
|
yml.load();
|
||||||
|
worlds.put(world.getName(), yml.getRoot().get("Residences"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rmanager = ResidenceManager.load(worlds);
|
||||||
|
loadFile = new File(saveFolder, "forsale.yml");
|
||||||
|
if (loadFile.isFile()) {
|
||||||
|
yml = new YMLSaveHelper(loadFile);
|
||||||
|
yml.load();
|
||||||
|
tmanager = TransactionManager.load((Map<?, ?>) yml.getRoot().get("Economy"), gmanager, rmanager);
|
||||||
|
}
|
||||||
|
loadFile = new File(saveFolder, "leases.yml");
|
||||||
|
if (loadFile.isFile()) {
|
||||||
|
yml = new YMLSaveHelper(loadFile);
|
||||||
|
yml.load();
|
||||||
|
leasemanager = LeaseManager.load((Map<String, Long>) yml.getRoot().get("Leases"), rmanager);
|
||||||
|
}
|
||||||
|
loadFile = new File(saveFolder, "permlists.yml");
|
||||||
|
if (loadFile.isFile()) {
|
||||||
|
yml = new YMLSaveHelper(loadFile);
|
||||||
|
yml.load();
|
||||||
|
pmanager = PermissionListManager.load((Map<String, Object>) yml.getRoot().get("PermissionLists"));
|
||||||
|
}
|
||||||
|
loadFile = new File(saveFolder, "rent.yml");
|
||||||
|
if (loadFile.isFile()) {
|
||||||
|
yml = new YMLSaveHelper(loadFile);
|
||||||
|
yml.load();
|
||||||
|
rentmanager = RentManager.load((Map<String, Object>) yml.getRoot().get("RentSystem"));
|
||||||
|
}
|
||||||
|
this.getLogger().info("从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
|
||||||
|
return true;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
this.getLogger().warning("领地数据载入时发生错误,请报告以下内容给作者: ");
|
||||||
|
this.getLogger().warning("错误: " + ex);
|
||||||
|
throw ex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender);
|
||||||
|
server.getPluginManager().callEvent(cevent);
|
||||||
|
if (cevent.isCancelled())
|
||||||
|
return true;
|
||||||
|
return hdmcnd.onCommand(sender, command, label, args);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
server.getScheduler().cancelTask(autosaveBukkitId);
|
server.getScheduler().cancelTask(autosaveBukkitId);
|
||||||
@@ -325,6 +386,7 @@ public class Residence extends JavaPlugin {
|
|||||||
gmanager = new PermissionManager(this.getConfig());
|
gmanager = new PermissionManager(this.getConfig());
|
||||||
imanager = new WorldItemManager(this.getConfig());
|
imanager = new WorldItemManager(this.getConfig());
|
||||||
wmanager = new WorldFlagManager(this.getConfig());
|
wmanager = new WorldFlagManager(this.getConfig());
|
||||||
|
|
||||||
chatmanager = new ChatManager();
|
chatmanager = new ChatManager();
|
||||||
rentmanager = new RentManager();
|
rentmanager = new RentManager();
|
||||||
for (String lang : validLanguages)
|
for (String lang : validLanguages)
|
||||||
@@ -378,6 +440,8 @@ public class Residence extends JavaPlugin {
|
|||||||
tmanager = new TransactionManager(rmanager, gmanager);
|
tmanager = new TransactionManager(rmanager, gmanager);
|
||||||
if (pmanager == null)
|
if (pmanager == null)
|
||||||
pmanager = new PermissionListManager();
|
pmanager = new PermissionListManager();
|
||||||
|
if (taskmanager == null)
|
||||||
|
taskmanager = new TaskManager(this);
|
||||||
if (firstenable) {
|
if (firstenable) {
|
||||||
if (!this.isEnabled())
|
if (!this.isEnabled())
|
||||||
return;
|
return;
|
||||||
@@ -403,28 +467,35 @@ public class Residence extends JavaPlugin {
|
|||||||
if (is1_8())
|
if (is1_8())
|
||||||
pm.registerEvents(plistener1_8, this);
|
pm.registerEvents(plistener1_8, this);
|
||||||
pm.registerEvents(elistener, this);
|
pm.registerEvents(elistener, this);
|
||||||
|
|
||||||
firstenable = false;
|
firstenable = false;
|
||||||
} else
|
} else
|
||||||
plistener.reload();
|
plistener.reload();
|
||||||
|
|
||||||
|
fmanager = new FlagManager(this);
|
||||||
|
fmanager.init();
|
||||||
|
|
||||||
|
taskmanager.add(server.getScheduler().runTaskTimer(this, new HealTask(), 20, 20));
|
||||||
|
|
||||||
|
HandlerMainCommand hdmcnd = new HandlerMainCommand(this);
|
||||||
|
hdmcnd.registerCommand(new CommandRc(this));
|
||||||
|
hdmcnd.registerCommand(new CommandRes(this));
|
||||||
|
hdmcnd.registerCommand(new CommandResLoad(this));
|
||||||
|
hdmcnd.registerCommand(new CommandResReload(this));
|
||||||
|
hdmcnd.registerCommand(new CommandResWorld(this));
|
||||||
|
|
||||||
int autosaveInt = cmanager.getAutoSaveInterval();
|
int autosaveInt = cmanager.getAutoSaveInterval();
|
||||||
if (autosaveInt < 1)
|
autosaveInt = autosaveInt < 1 ? 1 : autosaveInt * 60 * 20;
|
||||||
autosaveInt = 1;
|
taskmanager.add(server.getScheduler().runTaskTimer(this, new AutoSaveTask(this), autosaveInt, autosaveInt));
|
||||||
autosaveInt = autosaveInt * 60 * 20;
|
|
||||||
autosaveBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, autoSave, autosaveInt, autosaveInt);
|
|
||||||
healBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, doHeals, 20, 20);
|
|
||||||
if (cmanager.useLeases()) {
|
if (cmanager.useLeases()) {
|
||||||
int leaseInterval = cmanager.getLeaseCheckInterval();
|
int leaseInterval = cmanager.getLeaseCheckInterval();
|
||||||
if (leaseInterval < 1)
|
leaseInterval = leaseInterval < 1 ? 1 : leaseInterval * 60 * 20;
|
||||||
leaseInterval = 1;
|
taskmanager.add(server.getScheduler().runTaskTimer(this, new LeaseTask(), leaseInterval, leaseInterval));
|
||||||
leaseInterval = leaseInterval * 60 * 20;
|
|
||||||
leaseBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, leaseExpire, leaseInterval, leaseInterval);
|
|
||||||
}
|
}
|
||||||
if (cmanager.enabledRentSystem()) {
|
if (cmanager.enabledRentSystem()) {
|
||||||
int rentint = cmanager.getRentCheckInterval();
|
int rentint = cmanager.getRentCheckInterval();
|
||||||
if (rentint < 1)
|
rentint = rentint < 1 ? 1 : rentint * 60 * 20;
|
||||||
rentint = 1;
|
taskmanager.add(server.getScheduler().runTaskTimer(this, new RentTask(), rentint, rentint));
|
||||||
rentint = rentint * 60 * 20;
|
|
||||||
rentBukkitId = server.getScheduler().scheduleSyncRepeatingTask(this, rentExpire, rentint, rentint);
|
|
||||||
}
|
}
|
||||||
for (Player player : Bukkit.getServer().getOnlinePlayers())
|
for (Player player : Bukkit.getServer().getOnlinePlayers())
|
||||||
if (Residence.getPermissionManager().isResidenceAdmin(player))
|
if (Residence.getPermissionManager().isResidenceAdmin(player))
|
||||||
@@ -448,12 +519,12 @@ public class Residence extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void reloadConfig() {
|
public void reloadConfig() {
|
||||||
config.reload();
|
config.reload();
|
||||||
}
|
};
|
||||||
|
|
||||||
public void reloadPlugin() {
|
public void reloadPlugin() {
|
||||||
this.onDisable();
|
PluginManager pm = server.getPluginManager();
|
||||||
this.reloadConfig();
|
pm.disablePlugin(this);
|
||||||
this.onEnable();
|
pm.enablePlugin(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -461,49 +532,7 @@ public class Residence extends JavaPlugin {
|
|||||||
config.save();
|
config.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException {
|
public void saveYml() throws IOException {
|
||||||
File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml");
|
|
||||||
File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml");
|
|
||||||
if (outFile.isFile()) {
|
|
||||||
FileConfig testconfig = new FileConfig(this, outFile);
|
|
||||||
int oldversion = testconfig.getInt("FieldsVersion", 0);
|
|
||||||
if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false))
|
|
||||||
return false;
|
|
||||||
FileConfig testconfig2 = new FileConfig(this, checkFile);
|
|
||||||
testconfig2.load(checkFile);
|
|
||||||
int newversion = testconfig2.getInt("FieldsVersion", oldversion);
|
|
||||||
if (checkFile.isFile())
|
|
||||||
checkFile.delete();
|
|
||||||
if (newversion > oldversion)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
private void loadEssentialsEconomy() {
|
|
||||||
Plugin p = getServer().getPluginManager().getPlugin("Essentials");
|
|
||||||
if (p != null) {
|
|
||||||
economy = new EssentialsEcoAdapter((Essentials) p);
|
|
||||||
this.getLogger().info("成功关联Essentials Economy!");
|
|
||||||
} else
|
|
||||||
this.getLogger().info("Essentials Economy 未找到!");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadVaultEconomy() {
|
|
||||||
Plugin p = getServer().getPluginManager().getPlugin("Vault");
|
|
||||||
if (p != null) {
|
|
||||||
ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer());
|
|
||||||
if (vault.economyOK()) {
|
|
||||||
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
|
|
||||||
economy = vault;
|
|
||||||
} else
|
|
||||||
this.getLogger().info("发现 Vault, 但是 Vault 未找到经济系统...");
|
|
||||||
} else
|
|
||||||
this.getLogger().info("Vault 未找到!");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void saveYml() throws IOException {
|
|
||||||
File saveFolder = new File(dataFolder, "Save");
|
File saveFolder = new File(dataFolder, "Save");
|
||||||
File worldFolder = new File(saveFolder, "Worlds");
|
File worldFolder = new File(saveFolder, "Worlds");
|
||||||
worldFolder.mkdirs();
|
worldFolder.mkdirs();
|
||||||
@@ -604,6 +633,48 @@ public class Residence extends JavaPlugin {
|
|||||||
this.getLogger().info(" - 保存插件数据...");
|
this.getLogger().info(" - 保存插件数据...");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean checkNewLanguageVersion(String lang) throws IOException, FileNotFoundException, InvalidConfigurationException {
|
||||||
|
File outFile = new File(new File(this.getDataFolder(), "Language"), lang + ".yml");
|
||||||
|
File checkFile = new File(new File(this.getDataFolder(), "Language"), "temp-" + lang + ".yml");
|
||||||
|
if (outFile.isFile()) {
|
||||||
|
FileConfig testconfig = new FileConfig(this, outFile);
|
||||||
|
int oldversion = testconfig.getInt("FieldsVersion", 0);
|
||||||
|
if (!this.writeDefaultFileFromJar(checkFile, "languagefiles/" + lang + ".yml", false))
|
||||||
|
return false;
|
||||||
|
FileConfig testconfig2 = new FileConfig(this, checkFile);
|
||||||
|
testconfig2.load(checkFile);
|
||||||
|
int newversion = testconfig2.getInt("FieldsVersion", oldversion);
|
||||||
|
if (checkFile.isFile())
|
||||||
|
checkFile.delete();
|
||||||
|
if (newversion > oldversion)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadEssentialsEconomy() {
|
||||||
|
Plugin p = getServer().getPluginManager().getPlugin("Essentials");
|
||||||
|
if (p != null) {
|
||||||
|
economy = new EssentialsEcoAdapter((Essentials) p);
|
||||||
|
this.getLogger().info("成功关联Essentials Economy!");
|
||||||
|
} else
|
||||||
|
this.getLogger().info("Essentials Economy 未找到!");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadVaultEconomy() {
|
||||||
|
Plugin p = getServer().getPluginManager().getPlugin("Vault");
|
||||||
|
if (p != null) {
|
||||||
|
ResidenceVaultAdapter vault = new ResidenceVaultAdapter(getServer());
|
||||||
|
if (vault.economyOK()) {
|
||||||
|
this.getLogger().info("发现 Vault 使用经济系统: " + vault.getEconomyName());
|
||||||
|
economy = vault;
|
||||||
|
} else
|
||||||
|
this.getLogger().info("发现 Vault, 但是 Vault 未找到经济系统...");
|
||||||
|
} else
|
||||||
|
this.getLogger().info("Vault 未找到!");
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("resource")
|
@SuppressWarnings("resource")
|
||||||
private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) {
|
private boolean writeDefaultFileFromJar(File writeName, String jarPath, boolean backupOld) {
|
||||||
try {
|
try {
|
||||||
@@ -648,61 +719,4 @@ public class Residence extends JavaPlugin {
|
|||||||
if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true))
|
if (this.writeDefaultFileFromJar(outFile, "languagefiles/" + lang + ".yml", true))
|
||||||
this.getLogger().info("保存默认 " + lang + " 语言文件...");
|
this.getLogger().info("保存默认 " + lang + " 语言文件...");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
protected boolean loadYml() throws Exception {
|
|
||||||
File saveFolder = new File(dataFolder, "Save");
|
|
||||||
try {
|
|
||||||
File worldFolder = new File(saveFolder, "Worlds");
|
|
||||||
if (!saveFolder.isDirectory()) {
|
|
||||||
this.getLogger().warning("领地数据保存目录不存在...");
|
|
||||||
this.getLogger().warning("请重新启动服务器生成新的文件...");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
YMLSaveHelper yml;
|
|
||||||
File loadFile;
|
|
||||||
long time = System.currentTimeMillis();
|
|
||||||
HashMap<String, Object> worlds = new HashMap<String, Object>();
|
|
||||||
for (World world : server.getWorlds()) {
|
|
||||||
loadFile = new File(worldFolder, "res_" + world.getName() + ".yml");
|
|
||||||
if (loadFile.isFile()) {
|
|
||||||
yml = new YMLSaveHelper(loadFile);
|
|
||||||
yml.load();
|
|
||||||
worlds.put(world.getName(), yml.getRoot().get("Residences"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rmanager = ResidenceManager.load(worlds);
|
|
||||||
loadFile = new File(saveFolder, "forsale.yml");
|
|
||||||
if (loadFile.isFile()) {
|
|
||||||
yml = new YMLSaveHelper(loadFile);
|
|
||||||
yml.load();
|
|
||||||
tmanager = TransactionManager.load((Map<?, ?>) yml.getRoot().get("Economy"), gmanager, rmanager);
|
|
||||||
}
|
|
||||||
loadFile = new File(saveFolder, "leases.yml");
|
|
||||||
if (loadFile.isFile()) {
|
|
||||||
yml = new YMLSaveHelper(loadFile);
|
|
||||||
yml.load();
|
|
||||||
leasemanager = LeaseManager.load((Map<String, Long>) yml.getRoot().get("Leases"), rmanager);
|
|
||||||
}
|
|
||||||
loadFile = new File(saveFolder, "permlists.yml");
|
|
||||||
if (loadFile.isFile()) {
|
|
||||||
yml = new YMLSaveHelper(loadFile);
|
|
||||||
yml.load();
|
|
||||||
pmanager = PermissionListManager.load((Map<String, Object>) yml.getRoot().get("PermissionLists"));
|
|
||||||
}
|
|
||||||
loadFile = new File(saveFolder, "rent.yml");
|
|
||||||
if (loadFile.isFile()) {
|
|
||||||
yml = new YMLSaveHelper(loadFile);
|
|
||||||
yml.load();
|
|
||||||
rentmanager = RentManager.load((Map<String, Object>) yml.getRoot().get("RentSystem"));
|
|
||||||
}
|
|
||||||
this.getLogger().info("从配置文件中读取领地数据,耗时" + ((float) (System.currentTimeMillis() - time) / 1000) + " 秒)");
|
|
||||||
// System.out.print("[Residence] Loaded...");
|
|
||||||
return true;
|
|
||||||
} catch (Exception ex) {
|
|
||||||
this.getLogger().warning("领地数据载入时发生错误,请报告以下内容给作者: ");
|
|
||||||
this.getLogger().warning("错误: " + ex);
|
|
||||||
throw ex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.bekvon.bukkit.residence;
|
package com.bekvon.bukkit.residence;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@@ -13,11 +12,8 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.bekvon.bukkit.residence.chat.ChatChannel;
|
|
||||||
import com.bekvon.bukkit.residence.event.ResidenceCommandEvent;
|
|
||||||
import com.bekvon.bukkit.residence.permissions.PermissionGroup;
|
import com.bekvon.bukkit.residence.permissions.PermissionGroup;
|
||||||
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
|
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
|
||||||
import com.bekvon.bukkit.residence.protection.CuboidArea;
|
import com.bekvon.bukkit.residence.protection.CuboidArea;
|
||||||
@@ -26,183 +22,82 @@ import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
|||||||
|
|
||||||
public class ResidenceCommandListener extends Residence {
|
public class ResidenceCommandListener extends Residence {
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender);
|
|
||||||
server.getPluginManager().callEvent(cevent);
|
|
||||||
if (cevent.isCancelled())
|
|
||||||
return true;
|
|
||||||
if (command.getName().equals("resreload") && args.length == 0) {
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
if (Residence.getPermissionManager().isResidenceAdmin(player)) {
|
|
||||||
this.reloadPlugin();
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "[Residence] 重载配置文件.");
|
|
||||||
System.out.println("[Residence] 重载 by " + player.getName() + ".");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.reloadPlugin();
|
|
||||||
System.out.println("[Residence] 重载 by 控制台.");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (command.getName().equals("resload")) {
|
|
||||||
if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender))
|
|
||||||
try {
|
|
||||||
this.loadYml();
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "[Residence] 从配置保存文件重新载入数据...");
|
|
||||||
} catch (Exception ex) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "[Residence] 无法从配置保存文件重新载入数据, 请查看控制台异常信息!");
|
|
||||||
sender.sendMessage(ChatColor.RED + "[Residence] 异常: " + ex.getMessage());
|
|
||||||
Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} else if (command.getName().equals("resworld")) {
|
|
||||||
if (args.length == 2 && args[0].equalsIgnoreCase("remove"))
|
|
||||||
if (sender instanceof ConsoleCommandSender) {
|
|
||||||
rmanager.removeAllFromWorld(sender, args[1]);
|
|
||||||
return true;
|
|
||||||
} else
|
|
||||||
sender.sendMessage(ChatColor.RED + "当前命令必须从控制台执行.");
|
|
||||||
return false;
|
|
||||||
} else if (command.getName().equals("rc")) {
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
String pname = player.getName();
|
|
||||||
if (cmanager.chatEnabled()) {
|
|
||||||
if (args.length == 0)
|
|
||||||
plistener.tooglePlayerResidenceChat(player);
|
|
||||||
else {
|
|
||||||
String area = plistener.getCurrentResidenceName(pname);
|
|
||||||
if (area != null) {
|
|
||||||
ChatChannel channel = chatmanager.getChannel(area);
|
|
||||||
if (channel != null) {
|
|
||||||
String message = "";
|
|
||||||
for (String arg : args)
|
|
||||||
message = message + " " + arg;
|
|
||||||
channel.chat(pname, message);
|
|
||||||
} else
|
|
||||||
player.sendMessage(ChatColor.RED + language.getPhrase("InvalidChannel"));
|
|
||||||
} else
|
|
||||||
player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence"));
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled"));
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) {
|
|
||||||
boolean resadmin = false;
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
if (command.getName().equals("resadmin") && gmanager.isResidenceAdmin((Player) sender))
|
|
||||||
resadmin = true;
|
|
||||||
if (command.getName().equals("resadmin") && !gmanager.isResidenceAdmin((Player) sender)) {
|
|
||||||
((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
resadmin = true;
|
|
||||||
return commandRes(args, resadmin, command, sender);
|
|
||||||
}
|
|
||||||
return super.onCommand(sender, command, label, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender) {
|
|
||||||
if (helppages != null) {
|
|
||||||
String helppath = "res";
|
|
||||||
for (String arg : args) {
|
|
||||||
if (arg.equalsIgnoreCase("?"))
|
|
||||||
break;
|
|
||||||
helppath = helppath + "." + arg;
|
|
||||||
}
|
|
||||||
int page = 1;
|
|
||||||
if (!args[args.length - 1].equalsIgnoreCase("?"))
|
|
||||||
try {
|
|
||||||
page = Integer.parseInt(args[args.length - 1]);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp"));
|
|
||||||
}
|
|
||||||
if (helppages.containesEntry(helppath)) {
|
|
||||||
helppages.printHelp(sender, page, helppath);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
private boolean commandRes(String[] args, boolean resadmin, Command command, CommandSender sender) {
|
public boolean commandRes(String[] args, boolean resadmin, Command command, CommandSender sender) {
|
||||||
if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?"))
|
// if (args.length > 0 && args[args.length - 1].equalsIgnoreCase("?") || args.length > 1 && args[args.length - 2].equals("?"))
|
||||||
return commandHelp(args, resadmin, sender);
|
// return commandHelp(args, resadmin, sender);
|
||||||
int page = 1;
|
int page = 1;
|
||||||
try {
|
// try {
|
||||||
if (args.length > 0)
|
// if (args.length > 0)
|
||||||
page = Integer.parseInt(args[args.length - 1]);
|
// page = Integer.parseInt(args[args.length - 1]);
|
||||||
} catch (Exception ex) {
|
// } catch (Exception ex) {
|
||||||
}
|
// }
|
||||||
Player player = null;
|
Player player = (Player) sender;
|
||||||
PermissionGroup group = null;
|
PermissionGroup group = null;
|
||||||
String pname = null;
|
String pname = null;
|
||||||
if (sender instanceof Player) {
|
// if (sender instanceof Player) {
|
||||||
player = (Player) sender;
|
// player = (Player) sender;
|
||||||
group = Residence.getPermissionManager().getGroup(player);
|
// group = Residence.getPermissionManager().getGroup(player);
|
||||||
pname = player.getName();
|
// pname = player.getName();
|
||||||
} else
|
// } else
|
||||||
resadmin = true;
|
// resadmin = true;
|
||||||
if (cmanager.allowAdminsOnly())
|
// if (cmanager.allowAdminsOnly())
|
||||||
if (!resadmin) {
|
// if (!resadmin) {
|
||||||
sender.sendMessage(ChatColor.RED + language.getPhrase("AdminOnly"));
|
// sender.sendMessage(ChatColor.RED + language.getPhrase("AdminOnly"));
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
if (args.length == 0)
|
// if (args.length == 0)
|
||||||
return false;
|
// return false;
|
||||||
if (args.length == 0) {
|
// if (args.length == 0) {
|
||||||
args = new String[1];
|
// args = new String[1];
|
||||||
args[0] = "?";
|
// args[0] = "?";
|
||||||
}
|
// }
|
||||||
String cmd = args[0].toLowerCase();
|
String cmd = args[0].toLowerCase();
|
||||||
if (cmd.equals("remove") || cmd.equals("delete"))
|
|
||||||
return commandResRemove(args, resadmin, sender, page);
|
// if (cmd.equals("remove") || cmd.equals("delete"))
|
||||||
if (cmd.equals("confirm"))
|
// return commandResRemove(args, resadmin, sender, page);
|
||||||
return commandResConfirm(args, resadmin, sender, page);
|
// if (cmd.equals("confirm"))
|
||||||
if (cmd.equals("version")) {
|
// return commandResConfirm(args, resadmin, sender, page);
|
||||||
sender.sendMessage(ChatColor.GRAY + "------------------------------------");
|
// if (cmd.equals("version")) {
|
||||||
sender.sendMessage(ChatColor.RED + "当前服务器运行的 " + ChatColor.GOLD + "Residence" + ChatColor.RED + " 版本: " + ChatColor.BLUE + this.getDescription().getVersion());
|
// sender.sendMessage(ChatColor.GRAY + "------------------------------------");
|
||||||
sender.sendMessage(ChatColor.GREEN + "创建者: " + ChatColor.YELLOW + "bekvon");
|
// sender.sendMessage(ChatColor.RED + "当前服务器运行的 " + ChatColor.GOLD + "Residence" + ChatColor.RED + " 版本: " + ChatColor.BLUE + this.getDescription().getVersion());
|
||||||
sender.sendMessage(ChatColor.GREEN + "升级到 1.8 by: " + ChatColor.YELLOW + "DartCZ");
|
// sender.sendMessage(ChatColor.GREEN + "创建者: " + ChatColor.YELLOW + "bekvon");
|
||||||
sender.sendMessage(ChatColor.RED + "升级到最新无UUID版本 by: " + ChatColor.YELLOW + "喵♂呜");
|
// sender.sendMessage(ChatColor.GREEN + "升级到 1.8 by: " + ChatColor.YELLOW + "DartCZ");
|
||||||
String names = null;
|
// sender.sendMessage(ChatColor.RED + "升级到最新无UUID版本 by: " + ChatColor.YELLOW + "喵♂呜");
|
||||||
List<String> authlist = this.getDescription().getAuthors();
|
// String names = null;
|
||||||
for (String auth : authlist)
|
// List<String> authlist = this.getDescription().getAuthors();
|
||||||
if (names == null)
|
// for (String auth : authlist)
|
||||||
names = auth;
|
// if (names == null)
|
||||||
else
|
// names = auth;
|
||||||
names = names + ", " + auth;
|
// else
|
||||||
sender.sendMessage(ChatColor.GREEN + "作者: " + ChatColor.YELLOW + names);
|
// names = names + ", " + auth;
|
||||||
sender.sendMessage(ChatColor.DARK_AQUA + "插件命令列表,帮助, 请查看wiki:");
|
// sender.sendMessage(ChatColor.GREEN + "作者: " + ChatColor.YELLOW + names);
|
||||||
sender.sendMessage(ChatColor.GREEN + "http://residencebukkitmod.wikispaces.com/");
|
// sender.sendMessage(ChatColor.DARK_AQUA + "插件命令列表,帮助, 请查看wiki:");
|
||||||
sender.sendMessage(ChatColor.AQUA + "重制版本请查看Jenkins:");
|
// sender.sendMessage(ChatColor.GREEN + "http://residencebukkitmod.wikispaces.com/");
|
||||||
sender.sendMessage(ChatColor.BLUE + this.getDescription().getWebsite());
|
// sender.sendMessage(ChatColor.AQUA + "重制版本请查看Jenkins:");
|
||||||
sender.sendMessage(ChatColor.GRAY + "------------------------------------");
|
// sender.sendMessage(ChatColor.BLUE + this.getDescription().getWebsite());
|
||||||
return true;
|
// sender.sendMessage(ChatColor.GRAY + "------------------------------------");
|
||||||
}
|
// return true;
|
||||||
if (cmd.equals("setowner") && args.length == 3) {
|
// }
|
||||||
if (!resadmin) {
|
// if (cmd.equals("setowner") && args.length == 3) {
|
||||||
sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission"));
|
// if (!resadmin) {
|
||||||
return true;
|
// sender.sendMessage(ChatColor.RED + language.getPhrase("NoPermission"));
|
||||||
}
|
// return true;
|
||||||
ClaimedResidence area = rmanager.getByName(args[1]);
|
// }
|
||||||
if (area != null) {
|
// ClaimedResidence area = rmanager.getByName(args[1]);
|
||||||
area.getPermissions().setOwner(args[2], true);
|
// if (area != null) {
|
||||||
if (area.getParent() == null)
|
// area.getPermissions().setOwner(args[2], true);
|
||||||
sender.sendMessage(ChatColor.GREEN
|
// if (area.getParent() == null)
|
||||||
+ language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN));
|
// sender.sendMessage(ChatColor.GREEN
|
||||||
else
|
// + language.getPhrase("ResidenceOwnerChange", ChatColor.YELLOW + " " + args[1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN));
|
||||||
sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange",
|
// else
|
||||||
ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split("\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN));
|
// sender.sendMessage(ChatColor.GREEN + language.getPhrase("SubzoneOwnerChange",
|
||||||
} else
|
// ChatColor.YELLOW + " " + args[1].split("\\.")[args[1].split("\\.").length - 1] + " " + ChatColor.GREEN + "." + ChatColor.YELLOW + args[2] + ChatColor.GREEN));
|
||||||
sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence"));
|
// } else
|
||||||
return true;
|
// sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence"));
|
||||||
}
|
// return true;
|
||||||
|
// }
|
||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
return true;
|
return true;
|
||||||
if (command.getName().equals("resadmin"))
|
if (command.getName().equals("resadmin"))
|
||||||
@@ -218,6 +113,9 @@ public class ResidenceCommandListener extends Residence {
|
|||||||
if (!resadmin && resadminToggle.contains(player.getName()))
|
if (!resadmin && resadminToggle.contains(player.getName()))
|
||||||
if (!gmanager.isResidenceAdmin(player))
|
if (!gmanager.isResidenceAdmin(player))
|
||||||
resadminToggle.remove(player.getName());
|
resadminToggle.remove(player.getName());
|
||||||
|
|
||||||
|
// 此处开始的命令必须Player执行
|
||||||
|
|
||||||
if (cmd.equals("select"))
|
if (cmd.equals("select"))
|
||||||
return commandResSelect(args, resadmin, player, page);
|
return commandResSelect(args, resadmin, player, page);
|
||||||
if (cmd.equals("create"))
|
if (cmd.equals("create"))
|
||||||
@@ -521,6 +419,110 @@ public class ResidenceCommandListener extends Residence {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
return true;
|
||||||
|
// ResidenceCommandEvent cevent = new ResidenceCommandEvent(command.getName(), args, sender);
|
||||||
|
// server.getPluginManager().callEvent(cevent);
|
||||||
|
// if (cevent.isCancelled())
|
||||||
|
// return true;
|
||||||
|
// if (command.getName().equals("resreload") && args.length == 0) {
|
||||||
|
// if (sender instanceof Player) {
|
||||||
|
// Player player = (Player) sender;
|
||||||
|
// if (Residence.getPermissionManager().isResidenceAdmin(player)) {
|
||||||
|
// this.reloadPlugin();
|
||||||
|
// sender.sendMessage(ChatColor.GREEN + "[Residence] 重载配置文件.");
|
||||||
|
// System.out.println("[Residence] 重载 by " + player.getName() + ".");
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// this.reloadPlugin();
|
||||||
|
// System.out.println("[Residence] 重载 by 控制台.");
|
||||||
|
// }
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// if (command.getName().equals("resload")) {
|
||||||
|
// if (!(sender instanceof Player) || sender instanceof Player && gmanager.isResidenceAdmin((Player) sender))
|
||||||
|
// try {
|
||||||
|
// this.loadYml();
|
||||||
|
// sender.sendMessage(ChatColor.GREEN + "[Residence] 从配置保存文件重新载入数据...");
|
||||||
|
// } catch (Exception ex) {
|
||||||
|
// sender.sendMessage(ChatColor.RED + "[Residence] 无法从配置保存文件重新载入数据, 请查看控制台异常信息!");
|
||||||
|
// sender.sendMessage(ChatColor.RED + "[Residence] 异常: " + ex.getMessage());
|
||||||
|
// Logger.getLogger(Residence.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
|
// }
|
||||||
|
// return true;
|
||||||
|
// } else if (command.getName().equals("resworld")) {
|
||||||
|
// if (args.length == 2 && args[0].equalsIgnoreCase("remove"))
|
||||||
|
// if (sender instanceof ConsoleCommandSender) {
|
||||||
|
// rmanager.removeAllFromWorld(sender, args[1]);
|
||||||
|
// return true;
|
||||||
|
// } else
|
||||||
|
// sender.sendMessage(ChatColor.RED + "当前命令必须从控制台执行.");
|
||||||
|
// return false;
|
||||||
|
// } else if (command.getName().equals("rc")) {
|
||||||
|
// if (sender instanceof Player) {
|
||||||
|
// Player player = (Player) sender;
|
||||||
|
// String pname = player.getName();
|
||||||
|
// if (cmanager.chatEnabled()) {
|
||||||
|
// if (args.length == 0)
|
||||||
|
// plistener.tooglePlayerResidenceChat(player);
|
||||||
|
// else {
|
||||||
|
// String area = plistener.getCurrentResidenceName(pname);
|
||||||
|
// if (area != null) {
|
||||||
|
// ChatChannel channel = chatmanager.getChannel(area);
|
||||||
|
// if (channel != null) {
|
||||||
|
// String message = "";
|
||||||
|
// for (String arg : args)
|
||||||
|
// message = message + " " + arg;
|
||||||
|
// channel.chat(pname, message);
|
||||||
|
// } else
|
||||||
|
// player.sendMessage(ChatColor.RED + language.getPhrase("InvalidChannel"));
|
||||||
|
// } else
|
||||||
|
// player.sendMessage(ChatColor.RED + language.getPhrase("NotInResidence"));
|
||||||
|
// }
|
||||||
|
// } else
|
||||||
|
// player.sendMessage(ChatColor.RED + language.getPhrase("ChatDisabled"));
|
||||||
|
// }
|
||||||
|
// return true;
|
||||||
|
// } else if (command.getName().equals("res") || command.getName().equals("residence") || command.getName().equals("resadmin")) {
|
||||||
|
// boolean resadmin = false;
|
||||||
|
// if (sender instanceof Player) {
|
||||||
|
// if (command.getName().equals("resadmin") && gmanager.isResidenceAdmin((Player) sender))
|
||||||
|
// resadmin = true;
|
||||||
|
// if (command.getName().equals("resadmin") && !gmanager.isResidenceAdmin((Player) sender)) {
|
||||||
|
// ((Player) sender).sendMessage(ChatColor.RED + language.getPhrase("NonAdmin"));
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// } else
|
||||||
|
// resadmin = true;
|
||||||
|
// return commandRes(args, resadmin, command, sender);
|
||||||
|
// }
|
||||||
|
// return super.onCommand(sender, command, label, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
// private boolean commandHelp(String[] args, boolean resadmin, CommandSender sender) {
|
||||||
|
// if (helppages != null) {
|
||||||
|
// String helppath = "res";
|
||||||
|
// for (String arg : args) {
|
||||||
|
// if (arg.equalsIgnoreCase("?"))
|
||||||
|
// break;
|
||||||
|
// helppath = helppath + "." + arg;
|
||||||
|
// }
|
||||||
|
// int page = 1;
|
||||||
|
// if (!args[args.length - 1].equalsIgnoreCase("?"))
|
||||||
|
// try {
|
||||||
|
// page = Integer.parseInt(args[args.length - 1]);
|
||||||
|
// } catch (Exception ex) {
|
||||||
|
// sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidHelp"));
|
||||||
|
// }
|
||||||
|
// if (helppages.containesEntry(helppath)) {
|
||||||
|
// helppages.printHelp(sender, page, helppath);
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
private boolean commandResArea(String[] args, boolean resadmin, Player player, int page) {
|
private boolean commandResArea(String[] args, boolean resadmin, Player player, int page) {
|
||||||
if (args.length == 4)
|
if (args.length == 4)
|
||||||
if (args[1].equals("remove")) {
|
if (args[1].equals("remove")) {
|
||||||
@@ -620,26 +622,26 @@ public class ResidenceCommandListener extends Residence {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender sender, int page) {
|
// private boolean commandResConfirm(String[] args, boolean resadmin, CommandSender sender, int page) {
|
||||||
Player player = null;
|
// Player player = null;
|
||||||
String name = "Console";
|
// String name = "Console";
|
||||||
if (sender instanceof Player) {
|
// if (sender instanceof Player) {
|
||||||
player = (Player) sender;
|
// player = (Player) sender;
|
||||||
name = player.getName();
|
// name = player.getName();
|
||||||
}
|
// }
|
||||||
if (args.length == 1) {
|
// if (args.length == 1) {
|
||||||
String area = deleteConfirm.get(name);
|
// String area = deleteConfirm.get(name);
|
||||||
if (area == null)
|
// if (area == null)
|
||||||
sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence"));
|
// sender.sendMessage(ChatColor.RED + language.getPhrase("InvalidResidence"));
|
||||||
else {
|
// else {
|
||||||
rmanager.removeResidence(player, area, resadmin);
|
// rmanager.removeResidence(player, area, resadmin);
|
||||||
deleteConfirm.remove(name);
|
// deleteConfirm.remove(name);
|
||||||
if (player == null)
|
// if (player == null)
|
||||||
sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN));
|
// sender.sendMessage(ChatColor.GREEN + Residence.getLanguage().getPhrase("ResidenceRemove", ChatColor.YELLOW + name + ChatColor.GREEN));
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
|
|
||||||
private boolean commandResCreate(String[] args, boolean resadmin, Player player, int page) {
|
private boolean commandResCreate(String[] args, boolean resadmin, Player player, int page) {
|
||||||
if (args.length != 2)
|
if (args.length != 2)
|
||||||
@@ -1081,72 +1083,72 @@ public class ResidenceCommandListener extends Residence {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean commandResRemove(String[] args, boolean resadmin, CommandSender sender, int page) {
|
// private boolean commandResRemove(String[] args, boolean resadmin, CommandSender sender, int page) {
|
||||||
Player player = null;
|
// Player player = null;
|
||||||
if (sender instanceof Player) {
|
// if (sender instanceof Player) {
|
||||||
player = (Player) sender;
|
// player = (Player) sender;
|
||||||
if (args.length == 1) {
|
// if (args.length == 1) {
|
||||||
String area = rmanager.getNameByLoc(player.getLocation());
|
// String area = rmanager.getNameByLoc(player.getLocation());
|
||||||
if (area != null) {
|
// if (area != null) {
|
||||||
ClaimedResidence res = rmanager.getByName(area);
|
// ClaimedResidence res = rmanager.getByName(area);
|
||||||
if (res.getParent() != null) {
|
// if (res.getParent() != null) {
|
||||||
String[] split = area.split("\\.");
|
// String[] split = area.split("\\.");
|
||||||
String words = split[split.length - 1];
|
// String words = split[split.length - 1];
|
||||||
if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) {
|
// if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) {
|
||||||
player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED));
|
// player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED));
|
||||||
deleteConfirm.put(player.getName(), area);
|
// deleteConfirm.put(player.getName(), area);
|
||||||
} else
|
// } else
|
||||||
rmanager.removeResidence(player, area, resadmin);
|
// rmanager.removeResidence(player, area, resadmin);
|
||||||
return true;
|
// return true;
|
||||||
} else {
|
// } else {
|
||||||
if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) {
|
// if (!deleteConfirm.containsKey(player.getName()) || !area.equalsIgnoreCase(deleteConfirm.get(player.getName()))) {
|
||||||
player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED));
|
// player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + area + ChatColor.RED));
|
||||||
deleteConfirm.put(player.getName(), area);
|
// deleteConfirm.put(player.getName(), area);
|
||||||
} else
|
// } else
|
||||||
rmanager.removeResidence(player, area, resadmin);
|
// rmanager.removeResidence(player, area, resadmin);
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return false;
|
// return false;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (args.length != 2)
|
// if (args.length != 2)
|
||||||
return false;
|
// return false;
|
||||||
if (player != null) {
|
// if (player != null) {
|
||||||
if (!deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) {
|
// if (!deleteConfirm.containsKey(player.getName()) || !args[1].equalsIgnoreCase(deleteConfirm.get(player.getName()))) {
|
||||||
String words = null;
|
// String words = null;
|
||||||
if (rmanager.getByName(args[1]) != null) {
|
// if (rmanager.getByName(args[1]) != null) {
|
||||||
ClaimedResidence res = rmanager.getByName(args[1]);
|
// ClaimedResidence res = rmanager.getByName(args[1]);
|
||||||
if (res.getParent() != null) {
|
// if (res.getParent() != null) {
|
||||||
String[] split = args[1].split("\\.");
|
// String[] split = args[1].split("\\.");
|
||||||
words = split[split.length - 1];
|
// words = split[split.length - 1];
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (words == null)
|
// if (words == null)
|
||||||
player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED));
|
// player.sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED));
|
||||||
else
|
// else
|
||||||
player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED));
|
// player.sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED));
|
||||||
deleteConfirm.put(player.getName(), args[1]);
|
// deleteConfirm.put(player.getName(), args[1]);
|
||||||
} else
|
// } else
|
||||||
rmanager.removeResidence(player, args[1], resadmin);
|
// rmanager.removeResidence(player, args[1], resadmin);
|
||||||
} else if (!deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) {
|
// } else if (!deleteConfirm.containsKey("Console") || !args[1].equalsIgnoreCase(deleteConfirm.get("Console"))) {
|
||||||
String words = null;
|
// String words = null;
|
||||||
if (rmanager.getByName(args[1]) != null) {
|
// if (rmanager.getByName(args[1]) != null) {
|
||||||
ClaimedResidence res = rmanager.getByName(args[1]);
|
// ClaimedResidence res = rmanager.getByName(args[1]);
|
||||||
if (res.getParent() != null) {
|
// if (res.getParent() != null) {
|
||||||
String[] split = args[1].split("\\.");
|
// String[] split = args[1].split("\\.");
|
||||||
words = split[split.length - 1];
|
// words = split[split.length - 1];
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
if (words == null)
|
// if (words == null)
|
||||||
server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED));
|
// server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteConfirm", ChatColor.YELLOW + args[1] + ChatColor.RED));
|
||||||
else
|
// else
|
||||||
server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED));
|
// server.getConsoleSender().sendMessage(ChatColor.RED + language.getPhrase("DeleteSubzoneConfirm", ChatColor.YELLOW + words + ChatColor.RED));
|
||||||
deleteConfirm.put("Console", args[1]);
|
// deleteConfirm.put("Console", args[1]);
|
||||||
} else
|
// } else
|
||||||
rmanager.removeResidence(args[1]);
|
// rmanager.removeResidence(args[1]);
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
|
|
||||||
private boolean commandResSelect(String[] args, boolean resadmin, Player player, int page) {
|
private boolean commandResSelect(String[] args, boolean resadmin, Player player, int page) {
|
||||||
PermissionGroup group = Residence.getPermissionManager().getGroup(player);
|
PermissionGroup group = Residence.getPermissionManager().getGroup(player);
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Damageable;
|
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Hanging;
|
import org.bukkit.entity.Hanging;
|
||||||
@@ -73,24 +72,6 @@ public class ResidencePlayerListener implements Listener {
|
|||||||
lastUpdate.put(player.getName(), System.currentTimeMillis());
|
lastUpdate.put(player.getName(), System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doHeals() {
|
|
||||||
try {
|
|
||||||
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
|
|
||||||
String resname = Residence.getPlayerListener().getCurrentResidenceName(player.getName());
|
|
||||||
ClaimedResidence res = null;
|
|
||||||
if (resname != null)
|
|
||||||
res = Residence.getResidenceManager().getByName(resname);
|
|
||||||
if (res != null && res.getPermissions().has("healing", false)) {
|
|
||||||
Damageable damage = player;
|
|
||||||
double health = damage.getHealth();
|
|
||||||
if (health < 20 && !player.isDead())
|
|
||||||
player.setHealth(health + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getCurrentResidenceName(String player) {
|
public String getCurrentResidenceName(String player) {
|
||||||
return currentRes.get(player);
|
return currentRes.get(player);
|
||||||
}
|
}
|
||||||
@@ -533,12 +514,12 @@ public class ResidencePlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isCanUseEntity_BothClick(Material mat, Block block) {
|
private boolean isCanUseEntity_BothClick(Material mat, Block block) {
|
||||||
return mat == Material.LEVER || mat == Material.STONE_BUTTON || mat == Material.WOOD_BUTTON || mat == Material.WOODEN_DOOR
|
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
|
||||||
|
|| Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()))
|
||||||
|| (Residence.is1_8() && (mat == Material.SPRUCE_DOOR || mat == Material.BIRCH_DOOR || mat == Material.JUNGLE_DOOR || mat == Material.ACACIA_DOOR || mat == Material.DARK_OAK_DOOR
|
|| (Residence.is1_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.SPRUCE_FENCE_GATE || mat == Material.BIRCH_FENCE_GATE || mat == Material.JUNGLE_FENCE_GATE || mat == Material.ACACIA_FENCE_GATE
|
||||||
|| mat == Material.DARK_OAK_FENCE_GATE))
|
|| mat == Material.DARK_OAK_FENCE_GATE));
|
||||||
|| mat == Material.TRAP_DOOR || mat == Material.FENCE_GATE || mat == Material.PISTON_BASE || mat == Material.PISTON_STICKY_BASE || mat == Material.DRAGON_EGG
|
|
||||||
|| Residence.getConfigManager().getCustomBothClick().contains(Integer.valueOf(block.getTypeId()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isCanUseEntity_RClickOnly(Material mat, Block block) {
|
private boolean isCanUseEntity_RClickOnly(Material mat, Block block) {
|
||||||
|
|||||||
@@ -147,7 +147,9 @@ public class FlagPermissions {
|
|||||||
addResidenceOnlyFlag("spread");
|
addResidenceOnlyFlag("spread");
|
||||||
addResidenceOnlyFlag("hidden");
|
addResidenceOnlyFlag("hidden");
|
||||||
addResidenceOnlyFlag("witherdamage");
|
addResidenceOnlyFlag("witherdamage");
|
||||||
|
|
||||||
addPlayerOrGroupOnlyFlag("admin");
|
addPlayerOrGroupOnlyFlag("admin");
|
||||||
|
|
||||||
addFlagToFlagGroup("redstone", "note");
|
addFlagToFlagGroup("redstone", "note");
|
||||||
addFlagToFlagGroup("redstone", "pressure");
|
addFlagToFlagGroup("redstone", "pressure");
|
||||||
addFlagToFlagGroup("redstone", "lever");
|
addFlagToFlagGroup("redstone", "lever");
|
||||||
@@ -164,6 +166,7 @@ public class FlagPermissions {
|
|||||||
addFlagToFlagGroup("trusted", "move");
|
addFlagToFlagGroup("trusted", "move");
|
||||||
addFlagToFlagGroup("fire", "ignite");
|
addFlagToFlagGroup("fire", "ignite");
|
||||||
addFlagToFlagGroup("fire", "firespread");
|
addFlagToFlagGroup("fire", "firespread");
|
||||||
|
|
||||||
addMaterialToUseFlag(Material.DIODE, "diode");
|
addMaterialToUseFlag(Material.DIODE, "diode");
|
||||||
addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, "diode");
|
addMaterialToUseFlag(Material.DIODE_BLOCK_OFF, "diode");
|
||||||
addMaterialToUseFlag(Material.DIODE_BLOCK_ON, "diode");
|
addMaterialToUseFlag(Material.DIODE_BLOCK_ON, "diode");
|
||||||
|
|||||||
@@ -1,565 +1,521 @@
|
|||||||
# NOTE: 'If you want to modify this file, it is HIGHLY recommended that you make a copy
|
|
||||||
# of this file and modify that instead. This file will be updated automatically by Residence
|
|
||||||
# when a newer version is detected, and your changes will be overwritten. Once you
|
|
||||||
# have a copy of this file, change the Language: 'option under the Residence config.yml
|
|
||||||
# to whatever you named your copy.
|
|
||||||
Version: 22
|
Version: 22
|
||||||
FieldsVersion: 23
|
FieldsVersion: 23
|
||||||
Language:
|
Language:
|
||||||
# The below lines represent various messages residence sends to the players.
|
InvalidResidence: 无效的领地...
|
||||||
# Note that some messages have variables such as %1 that are inserted at runtime.
|
InvalidSubzone: 无效的附属领地...
|
||||||
# Version 1 Fields
|
InvalidDirection: 无效的方向...
|
||||||
InvalidResidence: '无效的领地...'
|
InvalidChannel: 无效频道...
|
||||||
InvalidSubzone: '无效的附属领地...'
|
InvalidAmount: 无效数量...
|
||||||
InvalidDirection: '无效的方向...'
|
InvalidCost: 无效的花费金额...
|
||||||
InvalidChannel: '无效频道...'
|
InvalidDays: 无效的天数...
|
||||||
InvalidAmount: '无效数量...'
|
InvalidMaterial: 无效的材料...
|
||||||
InvalidCost: '无效的花费金额...'
|
InvalidBoolean: 无效值,必须是布尔值,true(t)或者false(f)。
|
||||||
InvalidDays: '无效的天数...'
|
InvalidArea: 无效的区域...
|
||||||
InvalidMaterial: '无效的材料...'
|
InvalidGroup: 无效的权限组...
|
||||||
InvalidBoolean: '无效值,必须是布尔值,true(t)或者false(f)。'
|
InvalidMessageType: 消息类型必须enter(进入)或remove(离开)。
|
||||||
InvalidArea: '无效的区域...'
|
InvalidList: 未知列表的类型,必须是黑名单中的类型.
|
||||||
InvalidGroup: '无效的权限组...'
|
InvalidFlag: 权限不存在...
|
||||||
InvalidMessageType: '消息类型必须enter(进入)或remove(离开)。'
|
InvalidFlagState: 无效的权限状态,必须是true(t)开启,false(f)关闭,或者 remove(r)移除。
|
||||||
InvalidList: '无效的清单...'
|
AreaExists: 区域名字已经存在。
|
||||||
InvalidFlag: '权限不存在...'
|
AreaCreate: 领地ID %1 创建成功
|
||||||
InvalidFlagState: '无效的权限状态,必须是true(t)开启,false(f)关闭,或者 remove(r)移除。'
|
AreaDiffWorld: 区域与领地是在一个不同的世界。
|
||||||
AreaExists: '区域名字已经存在。'
|
AreaCollision: 区域与领地 %1 冲突。
|
||||||
AreaCreate: '领地ID %1 创建成功'
|
AreaSubzoneCollision: 区域和附属领地 %1 冲突。
|
||||||
AreaDiffWorld: '区域与领地是在一个不同的世界。'
|
AreaNonExist: 区域不存在。
|
||||||
AreaCollision: '区域与领地 %1 冲突。'
|
AreaInvalidName: 区域名无效...
|
||||||
AreaSubzoneCollision: '区域和附属领地 %1 冲突。'
|
AreaRename: 区域名从 %1 更改到 %2
|
||||||
AreaNonExist: '区域不存在。'
|
AreaRemove: 移除区域 %1 ...
|
||||||
AreaInvalidName: '区域名无效...'
|
AreaRemoveLast: 不能把最后一个区域从领地中移除。
|
||||||
AreaRename: '区域名从 %1 更改到 %2'
|
AreaNotWithinParent: 这个区域不在父区域之内。
|
||||||
AreaRemove: '移除区域 %1 ...'
|
AreaUpdate: 区域已更新...
|
||||||
AreaRemoveLast: '不能把最后一个区域从领地中移除。'
|
AreaMaxPhysical: 你已经达到你的领地所允许的最大区域。
|
||||||
AreaNotWithinParent: '这个区域不在父区域之内。'
|
AreaSizeLimit: 区域的大小超出你允许的范围上限。
|
||||||
AreaUpdate: '区域已更新...'
|
AreaHighLimit: 你不能保护这样高的领地,你的上限是 %1 。
|
||||||
AreaMaxPhysical: '你已经达到你的领地所允许的最大区域。'
|
AreaLowLimit: 你不能保护这样深的领地,你的上限是 %1 。
|
||||||
AreaSizeLimit: '区域的大小超出你允许的范围上限。'
|
NotInResidence: 你不在一个领地里。
|
||||||
AreaHighLimit: '你不能保护这样高的领地,你的上限是 %1 。'
|
InResidence: 你正站在领地 %1 里。
|
||||||
AreaLowLimit: '你不能保护这样深的领地,你的上限是 %1 。'
|
ResidenceOwnerChange: 领地的拥有者从玩家 %1 改为玩家 %2 。
|
||||||
NotInResidence: '你不在一个领地里。'
|
NonAdmin: 你不是领地的管理员。
|
||||||
InResidence: '你正站在领地 %1 里。'
|
AdminOnly: 只有管理员才能使用这个命令。
|
||||||
ResidenceOwnerChange: '领地的拥有者从玩家 %1 改为玩家 %2 。'
|
ChatDisabled: 领地聊天已关闭...
|
||||||
NonAdmin: '你不是领地的管理员。'
|
SubzoneRename: 附属领地 %1 已重命名为 %2 。
|
||||||
AdminOnly: '只有管理员才能使用这个命令。'
|
SubzoneRemove: 附属领地 %1 已移除.
|
||||||
ChatDisabled: '领地聊天已关闭...'
|
SubzoneCreate: 创建附属领地 %1 。
|
||||||
SubzoneRename: '附属领地 %1 已重命名为 %2 。'
|
SubzoneCreateFail: 不能创建附属领地 %1 。
|
||||||
SubzoneRemove: '附属领地 %1 已移除.'
|
SubzoneExists: 附属领地 %1 已经存在。
|
||||||
SubzoneCreate: '创建附属领地 %1 。'
|
SubzoneCollide: 附属领地与另一个附属领地 %1 冲突。
|
||||||
SubzoneCreateFail: '不能创建附属领地 %1 。'
|
SubzoneMaxDepth: 您已达到了系统允许的最大分区深度。
|
||||||
SubzoneExists: '附属领地 %1 已经存在。'
|
SubzoneSelectInside: 两个选择点必须在领地内。
|
||||||
SubzoneCollide: '附属领地与另一个附属领地 %1 冲突。'
|
SelectPoints: 在用这个命令之前,请先用选择工具选取两个点!
|
||||||
SubzoneMaxDepth: '您已达到了系统允许的最大分区深度。'
|
SelectionSuccess: 选择成功!
|
||||||
SubzoneSelectInside: '两个选择点必须在领地内。'
|
SelectionFail: 无效的选择命令...
|
||||||
SelectPoints: '在用这个命令之前,请先用选择工具选取两个点!'
|
SelectionBedrock: 扩大到允许的最低高度。
|
||||||
SelectionSuccess: '选择成功!'
|
SelectionSky: 扩大到允许的最高高度。
|
||||||
SelectionFail: '无效的选择命令...'
|
SelectionArea: 在领地 %2 中选择区域 %1 。
|
||||||
SelectionBedrock: '扩大到允许的最低高度。'
|
SelectDiabled: 你没有圈地权限。
|
||||||
SelectionSky: '扩大到允许的最高高度。'
|
NoPermission: 你没有使用此命令的权限。
|
||||||
SelectionArea: '在领地 %2 中选择区域 %1 。'
|
OwnerNoPermission: 所有者无此命令的权限。
|
||||||
SelectDiabled: '你没有圈地权限。'
|
ParentNoPermission: 你没有改变父区域的权限。
|
||||||
NoPermission: '你没有使用此命令的权限。'
|
MessageChange: 消息已设置...
|
||||||
OwnerNoPermission: '所有者无此命令的权限。'
|
FlagSet: 权限已设置...
|
||||||
ParentNoPermission: '你没有改变父区域的权限。'
|
FlagCheckTrue: 权限 %1 为玩家 %2 在领地 %3 设置,值为=%4 。
|
||||||
MessageChange: '消息已设置...'
|
FlagCheckFalse: 权限 %1 未为玩家 %2 在领地中设置。
|
||||||
FlagSet: '权限已设置...'
|
FlagsCleared: 权限已清除。
|
||||||
FlagCheckTrue: '权限 %1 为玩家 %2 在领地 %3 设置,值为=%4 。'
|
FlagsDefault: 权限已设置为默认。
|
||||||
FlagCheckFalse: '权限 %1 未为玩家 %2 在领地中设置。'
|
Usage: 命令用法
|
||||||
FlagsCleared: '权限已清除。'
|
InvalidHelp: 无效的帮助页...
|
||||||
FlagsDefault: '权限已设置为默认。'
|
SubCommands: 子命令
|
||||||
Usage: '命令用法'
|
MaterialGet: 材料名称为ID %1 是 %2 。
|
||||||
InvalidHelp: '无效的帮助页...'
|
MarketDisabled: 市场功能已禁用!
|
||||||
SubCommands: '子命令'
|
MarketList: 市场列表
|
||||||
InvalidList: '未知列表的类型,必须是黑名单中的类型.'
|
SelectionTool: 选择工具
|
||||||
MaterialGet: '材料名称为ID %1 是 %2 。'
|
InfoTool: 信息工具
|
||||||
MarketDisabled: '市场功能已禁用!'
|
NoBankAccess: 你没有银行权限...
|
||||||
MarketList: '市场列表'
|
NotEnoughMoney: 你没有足够的钱。
|
||||||
SelectionTool: '选择工具'
|
BankNoMoney: 在银行里没有足够的钱。
|
||||||
InfoTool: '信息工具'
|
BankDeposit: 你存 %1 元到领地银行。
|
||||||
NoBankAccess: '你没有银行权限...'
|
BankWithdraw: 你取出 %1 元从领地银行。
|
||||||
NotEnoughMoney: '你没有足够的钱。'
|
MoneyCharged: 支出 %1 元从 %2 帐户。
|
||||||
BankNoMoney: '在银行里没有足够的钱。'
|
MoneyCredit: 收入 %1 元从 %2 帐户。
|
||||||
BankDeposit: '你存 %1 元到领地银行。'
|
RentDisabled: 出租被禁用...
|
||||||
BankWithdraw: '你取出 %1 元从领地银行。'
|
RentReleaseInvalid: 领地 %1 没有被租用或者被出租。
|
||||||
MoneyCharged: '支出 %1 元从 %2 帐户。'
|
RentSellFail: 不能出售一个被租出去的领地。
|
||||||
MoneyCredit: '收入 %1 元从 %2 帐户。'
|
SellRentFail: 当前领地在出售不能出租领地。
|
||||||
RentDisabled: '租凭系统已关闭。'
|
OwnerBuyFail: 无法购买自己的土地!
|
||||||
RentReleaseInvalid: '领地 %1 没有被租用或者被出租。'
|
OwnerRentFail: 不能租你自己的土地!
|
||||||
RentSellFail: '不能出售一个被租出去的领地。'
|
AlreadySellFail: 领地已经出售!
|
||||||
SellRentFail: '当前领地在出售不能出租领地。'
|
ResidenceBought: 你已经买下了领地 %1 !
|
||||||
OwnerBuyFail: '无法购买自己的土地!'
|
ResidenceBuy: 玩家 %1 从你那买下了领地 %2 。
|
||||||
OwnerRentFail: '不能租你自己的土地!'
|
ResidenceBuyTooBig: 此领地已超过系统允许的最大领域。
|
||||||
AlreadySellFail: '领地已经出售!'
|
ResidenceNotForSale: 领地没有用于出售。
|
||||||
ResidenceBought: '你已经买下了领地 %1 !'
|
ResidenceForSale: 现在以 %2 销售领地 %1 。
|
||||||
ResidenceBuy: '玩家 %1 从你那买下了领地 %2 。'
|
ResidenceStopSelling: 领地不再销售。
|
||||||
ResidenceBuyTooBig: '此领地已超过系统允许的最大领域。'
|
ResidenceTooMany: 已达到系统允许领地的最大上限。
|
||||||
ResidenceNotForSale: '领地没有用于出售。'
|
ResidenceMaxRent: 已达到系统允许你租用领地的最大上限。
|
||||||
ResidenceForSale: '现在以 %2 销售领地 %1 。'
|
ResidenceAlreadyRent: 领地已经被租用...
|
||||||
ResidenceStopSelling: '领地不再销售。'
|
ResidenceNotForRent: 领地不用于出租...
|
||||||
ResidenceTooMany: '已达到系统允许领地的最大上限。'
|
ResidenceNotRented: 领地没有被租用。
|
||||||
ResidenceMaxRent: '已达到系统允许你租用领地的最大上限。'
|
ResidenceUnrent: 领地 %1 已不再出租。
|
||||||
ResidenceAlreadyRent: '领地已经被租用...'
|
ResidenceRemoveRentable: 领地 %1 不再出租。
|
||||||
ResidenceNotForRent: '领地不用于出租...'
|
ResidenceForRentSuccess: 领地 %1 现在租金为 %2 ,每次 %3 天。
|
||||||
ResidenceNotRented: '领地没有被租用。'
|
ResidenceRentSuccess: 你已经租用领地 %1 %2 天...
|
||||||
ResidenceUnrent: '领地 %1 已不再出租。'
|
ResidenceAlreadyRented: 领地 %1 ,目前已出租给 %2 。
|
||||||
ResidenceRemoveRentable: '领地 %1 不再出租。'
|
ResidenceAlreadyExists: 领地 %1 已存在。
|
||||||
ResidenceForRentSuccess: '领地 %1 现在租金为 %2 ,每次 %3 天。'
|
ResidenceCreate: 你创建了领地 %1 !
|
||||||
ResidenceRentSuccess: '你已经租用领地 %1 %2 天...'
|
ResidenceRename: 领地 %1 已改名为 %2 。
|
||||||
ResidenceAlreadyRented: '领地 %1 ,目前已出租给 %2 。'
|
ResidenceRemove: 领地 %1 已经被移除...
|
||||||
ResidenceAlreadyExists: '领地 %1 已存在。'
|
|
||||||
ResidenceCreate: '你创建了领地 %1 !'
|
|
||||||
ResidenceRename: '领地 %1 已改名为 %2 。'
|
|
||||||
ResidenceRemove: '领地 %1 已经被移除...'
|
|
||||||
RentDisabled: '出租被禁用...'
|
|
||||||
RentDisableRenew: '%1 自动到期续约已关闭'
|
RentDisableRenew: '%1 自动到期续约已关闭'
|
||||||
RentEnableRenew: '%1 自动到期续约已开启.'
|
RentEnableRenew: '%1 自动到期续约已开启.'
|
||||||
RentableDisableRenew: '%1 更新可租用状态关闭.'
|
RentableDisableRenew: '%1 更新可租用状态关闭.'
|
||||||
RentableEnableRenew: '%1 更新可租用状态开启.'
|
RentableEnableRenew: '%1 更新可租用状态开启.'
|
||||||
LandForSale: '出售土地'
|
LandForSale: 出售土地
|
||||||
SellAmount: '销售金额'
|
SellAmount: 销售金额
|
||||||
LeaseExpire: '租赁到期时间'
|
LeaseExpire: 租约期满
|
||||||
RentExpire: '租金到期时间'
|
RentExpire: 租金到期时间
|
||||||
RentableAutoRenew: '自动更新可出租的土地'
|
RentableAutoRenew: 自动更新可出租的土地
|
||||||
RentAutoRenew: '租借自动更新'
|
RentAutoRenew: 租借自动更新
|
||||||
RentableLand: '可供出租土地'
|
RentableLand: 可供出租土地
|
||||||
ListMaterialAdd: '%1 添加到领地 %2'
|
ListMaterialAdd: '%1 添加到领地 %2'
|
||||||
ListMaterialRemove: '%1 已从领地 %2 移除'
|
ListMaterialRemove: '%1 已从领地 %2 移除'
|
||||||
ItemBlacklisted: '你不能在这使用被禁止的物品.'
|
ItemBlacklisted: 你不能在这使用被禁止的物品.
|
||||||
RentedModifyDeny: '不能修改一个租来的领地.'
|
RentedModifyDeny: 不能修改一个租来的领地.
|
||||||
WorldPVPDisabled: '当前世界的PvP被禁止.'
|
WorldPVPDisabled: 当前世界的PvP被禁止.
|
||||||
NoPVPZone: '没有PVP的区域.'
|
NoPVPZone: 没有PVP的区域.
|
||||||
FlagDeny: '你没有拥有领地 %1 的权限.'
|
FlagDeny: 你没有拥有领地 %1 的权限.
|
||||||
FlagSetDeny: '所有者不能使用这个权限 %1'
|
FlagSetDeny: 所有者不能使用这个权限 %1
|
||||||
SelectPoint: '选择了 %1 的选择点'
|
SelectPoint: 选择了 %1 的选择点
|
||||||
ResidenceChat: '领地聊天切换到 %1 '
|
ResidenceChat: '领地聊天切换到 %1 '
|
||||||
ResidenceMoveDeny: '你没有领地 %1 的移动权限'
|
ResidenceMoveDeny: 你没有领地 %1 的移动权限
|
||||||
TeleportDeny: '你没有传送权限。'
|
TeleportDeny: 你没有传送权限。
|
||||||
TeleportSuccess: '已传送!'
|
TeleportSuccess: 已传送!
|
||||||
TeleportNear: '已传送到领地的附近。'
|
TeleportNear: 已传送到领地的附近。
|
||||||
TeleportNoFlag: '对不起,你没有传送权限去目标领地。'
|
TeleportNoFlag: 对不起,你没有传送权限去目标领地。
|
||||||
SetTeleportLocation: '传送点已设置...'
|
SetTeleportLocation: 传送点已设置...
|
||||||
HelpPageHeader: '帮助页 - %1 - 第 %2页 共 %3页'
|
HelpPageHeader: 帮助页 - %1 - 第 %2页 共 %3页
|
||||||
ListExists: '列表已经存在...'
|
ListExists: 列表已经存在...
|
||||||
ListRemoved: '列表被移除...'
|
ListRemoved: 列表被移除...
|
||||||
ListCreate: '已创建列表 %1'
|
ListCreate: 已创建列表 %1
|
||||||
LeaseRenew: '租赁有效期至 %1到期'
|
LeaseRenew: 租赁有效期至 %1到期
|
||||||
LeaseRenewMax: '租赁最大的允许值'
|
LeaseRenewMax: 租赁最大的允许值
|
||||||
LeaseNotExpire: '没有这样的租赁或者租赁未到期.'
|
LeaseNotExpire: 没有这样的租赁或者租赁未到期.
|
||||||
LeaseRenewalCost: '更新区域 %1 的花费是 %2'
|
LeaseRenewalCost: 更新区域 %1 的花费是 %2
|
||||||
LeaseInfinite: '租赁时间已设置为无限...'
|
LeaseInfinite: 租赁时间已设置为无限...
|
||||||
PermissionsApply: '权限已应用到领地.'
|
PermissionsApply: 权限已应用到领地.
|
||||||
PhysicalAreas: '物理区域'
|
PhysicalAreas: 物理区域
|
||||||
CurrentArea: '当前区域'
|
CurrentArea: 当前区域
|
||||||
LeaseExpire: '租约期满'
|
NotOnline: 目标玩家必须在线.
|
||||||
NotOnline: '目标玩家必须在线.'
|
ResidenceGiveLimits: 无法给予目标玩家,因为这超过了目标玩家的上线
|
||||||
ResidenceGiveLimits: '无法给予目标玩家,因为这超过了目标玩家的上线'
|
ResidenceGive: 你把领地 %1 给了玩家 %2
|
||||||
ResidenceGive: '你把领地 %1 给了玩家 %2'
|
ResidenceRecieve: 你从玩家 %2 那里接收到了 %1 领地
|
||||||
ResidenceRecieve: '你从玩家 %2 那里接收到了 %1 领地'
|
ResidenceListAllEmpty: 在这个服务器上没有任何的领地...
|
||||||
#Version 4 New Fields
|
InvalidPage: 无效页数...
|
||||||
#ResidenceListAll: 'Residences - <Page %1 of %2> - removed, use GenericPage now
|
NextPage: 下一页
|
||||||
ResidenceListAllEmpty: '在这个服务器上没有任何的领地...'
|
RemovePlayersResidences: 删除了所有这个玩家的领地 %1
|
||||||
InvalidPage: '无效页数...'
|
GenericPage: 页数 %1 / %2
|
||||||
NextPage: '下一页'
|
ResidenceRentedBy: 被 %1 租用
|
||||||
#Version 10 New Fields
|
InvalidCharacters: 侦测到无效名字...
|
||||||
RemovePlayersResidences: '删除了所有这个玩家的领地 %1'
|
InvalidNameCharacters: 名字里包含非法字符...
|
||||||
GenericPage: '页数 %1 / %2'
|
DeleteConfirm: 你确定要删除领地 %1 吗?输入"/res confirm"来确定。
|
||||||
#Version 11 New Fields
|
SelectTooHigh: 警告!你所划分的领地大小已超过服务器限制!
|
||||||
ResidenceRentedBy: '被 %1 租用'
|
SelectTooLow: 警告!你所划分的领地大小已超过服务器限制!
|
||||||
#Version 14 New Fields
|
WorldEditNotFound: 未发现WorldEdit插件。
|
||||||
InvalidCharacters: '侦测到无效名字...'
|
NoResHere: 没有人在这里设置了领地。
|
||||||
InvalidNameCharacters: '名字里包含非法字符...'
|
DeleteSubzoneConfirm: 你确定要删除分区 %1 吗?输入“/res confirm”来确定。
|
||||||
#Version 15 New Fields
|
SubzoneOwnerChange: 分区 %1 所有者改为 %2
|
||||||
DeleteConfirm: '你确定要删除领地 %1 吗?输入"/res confirm"来确定。'
|
CoordsTop: X:%1 Y:%2 Z:%3
|
||||||
#Version 18 New Fields
|
CoordsBottom: X:%1 Y:%2 Z:%3
|
||||||
SelectTooHigh: '警告!你所划分的领地大小已超过服务器限制!'
|
AdminToggle: Automatic resadmin toggle turned %1
|
||||||
SelectTooLow: '警告!你所划分的领地大小已超过服务器限制!'
|
NoSpawn: You do not have move permissions at your spawn point. Relocating
|
||||||
WorldEditNotFound: '未发现WorldEdit插件。'
|
CompassTargetReset: 你的指南针指向已重置
|
||||||
#Version 19 New Fields
|
CompassTargetSet: 你的指南针现在指向领地 %1
|
||||||
NoResHere: '没有人在这里设置了领地。'
|
Description: 描述
|
||||||
DeleteSubzoneConfirm: '你确定要删除分区 %1 吗?输入“/res confirm”来确定。'
|
Land: 土地
|
||||||
#Version 20 New Fields
|
Cost: 花费
|
||||||
SubzoneOwnerChange: '分区 %1 所有者改为 %2'
|
Selection: 选择
|
||||||
CoordsTop: 'X:%1 Y:%2 Z:%3'
|
Total: 总计
|
||||||
CoordsBottom: 'X:%1 Y:%2 Z:%3'
|
Size: 尺寸
|
||||||
#Version 21 New Fields
|
Expanding: 扩张
|
||||||
AdminToggle: 'Automatic resadmin toggle turned %1'
|
Shifting: 移
|
||||||
#Version 22 New Fields
|
Up: 上
|
||||||
NoSpawn: 'You do not have move permissions at your spawn point. Relocating'
|
Down: 下
|
||||||
CompassTargetReset: '你的指南针指向已重置'
|
Error: 错误
|
||||||
CompassTargetSet: '你的指南针现在指向领地 %1'
|
Flags: 权限
|
||||||
|
Your: 你的
|
||||||
|
Group: 组
|
||||||
#The below lines are mostly a word bank for various uses.
|
Others: 其他人
|
||||||
#Version 1 Fields
|
Primary: 第一个
|
||||||
Description: '描述'
|
Secondary: 第二个
|
||||||
Land: '土地'
|
Moved: 移动
|
||||||
Cost: '花费'
|
Status: 状态
|
||||||
Selection: '选择'
|
Available: 可用
|
||||||
Total: '总计'
|
true: 开启
|
||||||
Size: '尺寸'
|
false: 关闭
|
||||||
Expanding: '扩张'
|
Name: 名字
|
||||||
Shifting: '移'
|
Lists: 列表
|
||||||
Up: '上'
|
Residences: 领地
|
||||||
Down: '下'
|
Residence: 领地
|
||||||
Error: '错误'
|
Count: 统计
|
||||||
Flags: '权限'
|
Owner: 所有者
|
||||||
Your: '你的'
|
World: 世界
|
||||||
Group: '组'
|
Subzones: 附属领地
|
||||||
Others: '其他人'
|
CoordsT: 顶坐标
|
||||||
Primary: '第一个'
|
CoordsB: 底部的坐标
|
||||||
Secondary: '第二个'
|
TurnOn: 开
|
||||||
Selection: '选择'
|
TurnOff: 关
|
||||||
Moved: '移动'
|
|
||||||
Status: '状态'
|
|
||||||
Available: '可用'
|
|
||||||
On: '开启'
|
|
||||||
Off: '关闭'
|
|
||||||
Name: '名字'
|
|
||||||
Lists: '列表'
|
|
||||||
Residences: '领地'
|
|
||||||
Residence: '领地'
|
|
||||||
Count: '统计'
|
|
||||||
Owner: '所有者'
|
|
||||||
#Version 4 Fields
|
|
||||||
World: '世界'
|
|
||||||
#Version 12 Fields
|
|
||||||
Subzones: '附属领地'
|
|
||||||
#Version 20 Fields
|
|
||||||
CoordsT: '顶坐标'
|
|
||||||
CoordsB: '底部的坐标'
|
|
||||||
#Version 22 Fields
|
|
||||||
TurnOn: '开'
|
|
||||||
TurnOff: '关'
|
|
||||||
|
|
||||||
# This is the help / usage messages for each command.
|
|
||||||
# It follows this format:
|
|
||||||
# <Command>
|
|
||||||
# Description: '<general description of command, one line of text>
|
|
||||||
# Info: '<extra info lines to describe the command, list of text>
|
|
||||||
# SubCommands:
|
|
||||||
# <SubCommands> - these follow the same format, and each sub command can have its own subcommands
|
|
||||||
# When a user gets help for a command (adds a ? mark on the end), first its Info lines are printed, then its sub commands are printed below that
|
|
||||||
# Pages are automatically generated if the total lines of text exceeds 6 (will be configurable later).
|
|
||||||
# Add a page number after the ? mark to see that page.
|
|
||||||
|
|
||||||
HelpLinesPerPage: 7
|
HelpLinesPerPage: 7
|
||||||
CommandHelp: #this is just a holder node, that holds the entire help
|
CommandHelp:
|
||||||
Description: '领地插件相关帮助 - 汉化 By: 喵♂呜'
|
Description: '领地插件相关帮助 - 汉化 By: 喵♂呜'
|
||||||
SubCommands: #this is the actual beginning of all commands
|
|
||||||
res: #main residence command
|
|
||||||
Description: '领地插件相关帮助 - 汉化 By: 喵♂呜'
|
|
||||||
Info:
|
|
||||||
- '如果有疑问在这里找不到,欢迎访问Wiki'
|
|
||||||
- '地址:residencebukkitmod.wikispaces.com (英文)'
|
|
||||||
- '输入/[命令] ? <页面>获得更多信息'
|
|
||||||
SubCommands:
|
SubCommands:
|
||||||
select: #selection commands
|
res:
|
||||||
Description: '选区命令'
|
Description: '领地插件相关帮助 - 汉化 By: 喵♂呜'
|
||||||
Info:
|
Info:
|
||||||
- '选择此命令的使用范围领地.'
|
- 如果有疑问在这里找不到,欢迎访问Wiki
|
||||||
- '/res select [x] [y] [z] - 选择一个区块在中间, 你的半径.'
|
- 地址:residencebukkitmod.wikispaces.com (英文)
|
||||||
|
- 输入/[命令] ? <页面>获得更多信息
|
||||||
|
SubCommands:
|
||||||
|
select:
|
||||||
|
Description: 选区命令
|
||||||
|
Info:
|
||||||
|
- 选择此命令的使用范围领地.
|
||||||
|
- /res select <长> <宽> <高> - 以自己为中心的半径范围.
|
||||||
SubCommands:
|
SubCommands:
|
||||||
coords:
|
coords:
|
||||||
Description: '显示选定的坐标.'
|
Description: 显示选定的坐标.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res select coords'
|
- '用法: /res select coords'
|
||||||
size:
|
size:
|
||||||
Description: '显示选定的领地大小.'
|
Description: 显示选定的领地大小.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res select size'
|
- '用法: /res select size'
|
||||||
cost:
|
cost:
|
||||||
Description: '显示选定的领地需缴纳金.'
|
Description: 显示选定的领地需缴纳金.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res select cost'
|
- '用法: /res select cost'
|
||||||
vert:
|
vert:
|
||||||
Description: '调整选区至最大允许值.'
|
Description: 调整高度选区至最大允许值.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res select vert'
|
- '用法: /res select vert'
|
||||||
- 'Will expand selection as high and as low as allowed.'
|
- 扩大到允许的最高和最低高度.
|
||||||
sky:
|
sky:
|
||||||
Description: '调整选区到最大高度.'
|
Description: 调整选区到最大高度.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res select sky'
|
- '用法: /res select sky'
|
||||||
- 'Expands as high as your allowed to go.'
|
- 扩大到允许的最高高度.
|
||||||
bedrock:
|
bedrock:
|
||||||
Description: '调整选区到基岩底层.'
|
Description: 调整选区到基岩底层.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res select bedrock'
|
- '用法: /res select bedrock'
|
||||||
- 'Expands as low as your allowed to go.'
|
- 扩大到允许的最低高度.
|
||||||
expand:
|
expand:
|
||||||
Description: 'Expand selection in a direction.'
|
Description: 扩大选区.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res select expand <amount>'
|
- '用法: /res select expand <amount>'
|
||||||
- 'Expands <amount> in the direction your looking.'
|
- 根据你面朝的方向进行扩大,<amount>填写扩大的数值.
|
||||||
shift:
|
shift:
|
||||||
Description: 'Shift selection in a direction'
|
Description: 移动所选区域
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res select shift <amount>'
|
- '用法: /res select shift <amount>'
|
||||||
- 'Pushes your selection by <amount> in the direction your looking.'
|
- 根据你面朝的方向移动选区,<amount>填写移动的格数.
|
||||||
chunk:
|
chunk:
|
||||||
Description: '选取你所在的Chunk区域.'
|
Description: 选取你所在的Chunk区域.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res select chunk'
|
- '用法: /res select chunk'
|
||||||
- 'Selects the chunk your currently standing in.'
|
- 选择你所在的区块(16x16).
|
||||||
residence:
|
residence:
|
||||||
Description: 'Select a existing area in a residence.'
|
Description: Select a existing area in a residence.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage /res select <Residence> <AreaID>'
|
- 用法 /res select <Residence> <AreaID>
|
||||||
- 'Selects a existing area in a residence.'
|
- Selects a existing area in a residence.
|
||||||
worldedit:
|
worldedit:
|
||||||
Description: '设置选区为WorldEdit的已选择区域.'
|
Description: 设置选区为WorldEdit的已选择区域.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage /res select worldedit'
|
- 用法 /res select worldedit
|
||||||
- '设置领地的选区为WorldEdit的已选择区域.'
|
- 设置领地的选区为WorldEdit的已选择区域.
|
||||||
create: #creation command
|
create:
|
||||||
Description: '创建领地'
|
Description: 创建领地
|
||||||
Info:
|
Info:
|
||||||
- Usage: '/res create <领地名字>'
|
- '用法: /res create <领地名字>'
|
||||||
remove: #remove command
|
remove:
|
||||||
Description: '删除领地'
|
Description: 删除领地
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res remove <领地名字>'
|
- '用法: /res remove <领地名字>'
|
||||||
removeall:
|
removeall:
|
||||||
Description: '删除某位玩家所属的全部领地.'
|
Description: 删除某位玩家所属的全部领地.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res removeall [owner]'
|
- '用法: /res removeall [owner]'
|
||||||
- '移除某一个玩家的所有领地.'
|
- 移除某一个玩家的所有领地.
|
||||||
- '必须使用 /resadmin 如果你是移除别人的领地.'
|
- 必须使用 /resadmin 如果你是移除别人的领地.
|
||||||
confirm:
|
confirm:
|
||||||
Description: '确认领地的删除操作.'
|
Description: 确认领地的删除操作.
|
||||||
info:
|
|
||||||
- 'Usage: /res confirm'
|
|
||||||
- '确认你要删除某个领地'
|
|
||||||
subzone:
|
|
||||||
Description: '在某个领地里创建附属领地.'
|
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res subzone <领地名> [附属领地名]'
|
- '用法: /res confirm'
|
||||||
- '如果领地名为空,那么将以你所在的领地为主'
|
- 确认你要删除某个领地
|
||||||
|
subzone:
|
||||||
|
Description: 在某个领地里创建附属领地.
|
||||||
|
Info:
|
||||||
|
- '用法: /res subzone <领地名> [附属领地名]'
|
||||||
|
- 如果领地名为空,那么将以你所在的领地为主
|
||||||
area:
|
area:
|
||||||
Description: '管理一个领地的物理区域.'
|
Description: 管理一个领地的物理区域.
|
||||||
SubCommands:
|
SubCommands:
|
||||||
list:
|
list:
|
||||||
Description: List physical areas in a residence
|
Description: List physical areas in a residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res area list [residence] <page>
|
- '用法: /res area list [residence] <page>'
|
||||||
listall:
|
listall:
|
||||||
Description: List coordinates and other info for areas
|
Description: List coordinates and other info for areas
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res area listall [residence] <page>
|
- '用法: /res area listall [residence] <page>'
|
||||||
add:
|
add:
|
||||||
Description: Add physical areas to a residence
|
Description: Add physical areas to a residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res area add [residence] [areaID]
|
- '用法: /res area add [residence] [areaID]'
|
||||||
- You must first select two points first.
|
- You must first select two points first.
|
||||||
remove:
|
remove:
|
||||||
Description: Remove physical areas from a residence
|
Description: Remove physical areas from a residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res area remove [residence] [areaID]
|
- '用法: /res area remove [residence] [areaID]'
|
||||||
replace:
|
replace:
|
||||||
Description: Replace physical areas in a residence
|
Description: Replace physical areas in a residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res area replace [residence] [areaID]
|
- '用法: /res area replace [residence] [areaID]'
|
||||||
- You must first select two points first.
|
- You must first select two points first.
|
||||||
- Replacing a area will charge the difference in size if the new area is bigger.
|
- Replacing a area will charge the difference in size if the new area is bigger.
|
||||||
info:
|
info:
|
||||||
Description: '显示某个领地的信息.'
|
Description: 显示某个领地的信息.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res info <领地名>
|
- '用法: /res info <领地名>'
|
||||||
- 如果领地名为空,将以你所处的领地为主
|
- 如果领地名为空,将以你所处的领地为主
|
||||||
limits:
|
limits:
|
||||||
Description: 显示领地功能限制.
|
Description: 显示领地功能限制.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res limits
|
- '用法: /res limits'
|
||||||
- 显示你在创建或管理领地时对部分功能的限制.
|
- 显示你在创建或管理领地时对部分功能的限制.
|
||||||
message:
|
message:
|
||||||
Description: 设置领地进入/离开信息.
|
Description: 设置领地进入/离开信息.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res message <领地名> [enter/leave] [信息]'
|
- '用法: /res message <领地名> [enter/leave] [信息]'
|
||||||
- '设置某个领地的进入/离开信息.'
|
- 设置某个领地的进入/离开信息.
|
||||||
- 'Usage: /res message <领地名> remove [enter/leave]'
|
- '用法: /res message <领地名> remove [enter/leave]'
|
||||||
- '删除某个领地的进入/离开信息.'
|
- 删除某个领地的进入/离开信息.
|
||||||
lease:
|
lease:
|
||||||
Description: '管理领地的出租.'
|
Description: 管理领地的出租.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res lease [renew/cost] [residence].'
|
- '用法: /res lease [renew/cost] [领地名].'
|
||||||
- '/res lease cost will show the cost of renewing a residence lease.'
|
- /res lease cost will show the cost of renewing a residence lease.
|
||||||
- '/res lease renew will renew the residence provided you have enough money.'
|
- /res lease renew will renew the residence provided you have enough money.
|
||||||
SubCommands:
|
SubCommands:
|
||||||
set:
|
set:
|
||||||
Description: Set the lease time (admin only)
|
Description: Set the lease time (admin only)
|
||||||
Info:
|
Info:
|
||||||
- Usage: /resadmin lease set [residence] [#days/infinite]
|
- '用法: /resadmin lease set [residence] [#days/infinite]'
|
||||||
- Sets the lease time to a specified number of days, or infinite.
|
- Sets the lease time to a specified number of days, or infinite.
|
||||||
bank:
|
bank:
|
||||||
Description: '管理领地的金钱.'
|
Description: 管理领地的金钱.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res bank [deposit/withdraw] [amount]'
|
- '用法: /res bank [deposit/withdraw] [amount]'
|
||||||
- 'You must be standing in a Residence'
|
- You must be standing in a Residence
|
||||||
- 'You must have the +bank flag.'
|
- You must have the +bank flag.
|
||||||
tp:
|
tp:
|
||||||
Description: '传送到某个领地.'
|
Description: 传送到某个领地.
|
||||||
Info:
|
Info:
|
||||||
- 'Usage: /res tp [领地名].'
|
- '用法: /res tp [领地名].'
|
||||||
- '将你传送到某个领地,前提对应领地允许传送或你是对应领地的主人.'
|
- '将你传送到某个领地,前提对应领地允许传送或你是对应领地的主人.'
|
||||||
- 'Your permission group must also be allowed to teleport by the server admin.'
|
- 'Your permission group must also be allowed to teleport by the server admin.'
|
||||||
tpset:
|
tpset:
|
||||||
Description: '设置某个领地的传送目标.'
|
Description: 设置某个领地的传送目标.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res tpset
|
- '用法: /res tpset'
|
||||||
- This will set the teleport location for a residence to where your standing.
|
- 'This will set the teleport location for a residence to where your standing.'
|
||||||
- You must be standing in the residence to use this command.
|
- 'You must be standing in the residence to use this command.'
|
||||||
- You must also be the owner or have the +admin flag for the residence.
|
- 'You must also be the owner or have the +admin flag for the residence.'
|
||||||
set:
|
set:
|
||||||
Description: '设置领地的全局属性.'
|
Description: 设置领地的全局属性.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res set <residence> [flag] [true/false/remove]
|
- '用法: /res set <residence> [flag] [true/false/remove]'
|
||||||
- To see a list of flags, use /res flags ?
|
- 'To see a list of flags, use /res flags ?'
|
||||||
- These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)
|
- 'These flags apply to any players who do not have the flag applied specifically to them. (see /res pset ?)'
|
||||||
pset:
|
pset:
|
||||||
Description: '设置某个人的领地属性.'
|
Description: 设置某个人的领地属性.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res pset <residence> [player] [flag] [true/false/remove]
|
- '用法: /res pset <residence> [player] [flag] [true/false/remove]'
|
||||||
- Usage: /res pset <residence> [player] removeall
|
- '用法: /res pset <residence> [player] removeall'
|
||||||
- To see a list of flags, use /res flags ?
|
- 'To see a list of flags, use /res flags ?'
|
||||||
gset:
|
gset:
|
||||||
Description: '设置某个组的领地属性.'
|
Description: 设置某个组的领地属性.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res gset <residence> [group] [flag] [true/false/remove]
|
- '用法: /res gset <residence> [group] [flag] [true/false/remove]'
|
||||||
- To see a list of flags, use /res flags ?
|
- To see a list of flags, use /res flags ?
|
||||||
lset:
|
lset:
|
||||||
Description: '改变黑名单和忽略列表.'
|
Description: 改变黑名单和忽略列表.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res lset <residence> [blacklist/ignorelist] [material]
|
- '用法: /res lset <residence> [blacklist/ignorelist] [material]'
|
||||||
- Usage: /res lset <residence> info
|
- '用法: /res lset <residence> info'
|
||||||
- Blacklisting a material prevents it from being placed in the residence.
|
- 'Blacklisting a material prevents it from being placed in the residence.'
|
||||||
- Ignorelist causes a specific material to not be protected by Residence.
|
- 'Ignorelist causes a specific material to not be protected by Residence.'
|
||||||
flags:
|
flags:
|
||||||
Description: 例举所有可配置属性
|
Description: 例举所有可配置属性
|
||||||
Info:
|
Info:
|
||||||
- '对于属性的值, true代表允许, false代表阻止.'
|
- 对于属性的值, true代表允许, false代表阻止.
|
||||||
- 'build - 允许或禁止玩家放置破坏方块'
|
- build - 允许或禁止玩家放置破坏方块
|
||||||
- 'use - 允许或禁止玩家使用门、按钮、拉杆等'
|
- use - 允许或禁止玩家使用门、按钮、拉杆等
|
||||||
- 'move - 允许或禁止玩家进入此领地或在此领地活动'
|
- move - 允许或禁止玩家进入此领地或在此领地活动
|
||||||
- 'container - 允许或禁止玩家使用熔炉、箱子、发射器等'
|
- container - 允许或禁止玩家使用熔炉、箱子、发射器等
|
||||||
- 'trusted - 同时配置 build, use, move, container 和 tp 属性'
|
- trusted - 同时配置 build, use, move, container 和 tp 属性
|
||||||
- 'place - 允许或禁止玩家放置方块, 覆盖build属性.'
|
- place - 允许或禁止玩家放置方块, 覆盖build属性.
|
||||||
- 'destroy - 允许或禁止玩家破坏方块, 覆盖build属性.'
|
- destroy - 允许或禁止玩家破坏方块, 覆盖build属性.
|
||||||
- 'pvp - 允许或禁止玩家在领地内PVP'
|
- pvp - 允许或禁止玩家在领地内PVP
|
||||||
- 'tp - 允许或禁止玩家传送到领地.'
|
- tp - 允许或禁止玩家传送到领地.
|
||||||
- 'admin - 允许或禁止玩家管理领地属性.'
|
- admin - 允许或禁止玩家管理领地属性.
|
||||||
- 'subzone - 允许或禁止玩家在领地内创建子领地.'
|
- subzone - 允许或禁止玩家在领地内创建子领地.
|
||||||
- 'monsters - 允许或禁止领地内刷怪'
|
- monsters - 允许或禁止领地内刷怪
|
||||||
- 'animals - 允许或禁止领地内刷动物.'
|
- animals - 允许或禁止领地内刷动物.
|
||||||
- 'healing - 允许或禁止领地内生命回复'
|
- healing - 允许或禁止领地内生命回复
|
||||||
- 'tnt - 允许或禁止领地内TNT爆炸'
|
- tnt - 允许或禁止领地内TNT爆炸
|
||||||
- 'creeper - 允许或禁止领地内苦力怕爆炸'
|
- creeper - 允许或禁止领地内苦力怕爆炸
|
||||||
- 'ignite - allows or denys fire ignition.'
|
- ignite - allows or denys fire ignition.
|
||||||
- 'firespread - allows or denys fire spread.'
|
- firespread - allows or denys fire spread.
|
||||||
- 'bucket - 允许或禁止领地内使用桶.'
|
- bucket - 允许或禁止领地内使用桶.
|
||||||
- 'flow - 允许或禁止领地内液体流动.'
|
- flow - 允许或禁止领地内液体流动.
|
||||||
- 'lavaflow - 允许或禁止领地内岩浆流动,覆盖flow属性'
|
- lavaflow - 允许或禁止领地内岩浆流动,覆盖flow属性
|
||||||
- 'waterflow - 允许或禁止领地内水流动,覆盖flow属性'
|
- waterflow - 允许或禁止领地内水流动,覆盖flow属性
|
||||||
- 'damage - 允许或禁止领地内所有的实体伤害.'
|
- damage - 允许或禁止领地内所有的实体伤害.
|
||||||
- 'piston - 允许或禁止领地内活塞推动或吸方块.'
|
- piston - 允许或禁止领地内活塞推动或吸方块.
|
||||||
- 'hidden - hides residence from list or listall commands.'
|
- hidden - hides residence from list or listall commands.
|
||||||
- 'cake - 允许或禁止领地内吃蛋糕'
|
- cake - 允许或禁止领地内吃蛋糕
|
||||||
- 'lever - 允许或禁止领地内使用拉杆'
|
- lever - 允许或禁止领地内使用拉杆
|
||||||
- 'button - 允许或禁止领地内使用按钮'
|
- button - 允许或禁止领地内使用按钮
|
||||||
- 'diode - 允许或禁止领地内使用红石中继器'
|
- diode - 允许或禁止领地内使用红石中继器
|
||||||
- 'door - 允许或禁止领地内使用门(铁门,木门,活板门,栅栏门)'
|
- door - 允许或禁止领地内使用门(铁门,木门,活板门,栅栏门)
|
||||||
- 'table - 允许或禁止领地内使用工作台'
|
- table - 允许或禁止领地内使用工作台
|
||||||
- 'enchant - 允许或禁止领地内使用附魔台'
|
- enchant - 允许或禁止领地内使用附魔台
|
||||||
- 'brew - 允许或禁止领地内使用铁毡'
|
- brew - 允许或禁止领地内使用铁毡
|
||||||
- 'bed - 允许或禁止领地内使用床'
|
- bed - 允许或禁止领地内使用床
|
||||||
- 'pressure - allows or denys players to use pressure plates'
|
- pressure - 允许或拒绝玩家使用压力板
|
||||||
- 'note - 允许或禁止领地内使用音符盒'
|
- note - 允许或禁止领地内使用音符盒
|
||||||
- 'redstone - 同时配置 lever, diode, button, pressure, note 属性'
|
- redstone - 同时配置 lever, diode, button, pressure, note 属性
|
||||||
- 'craft - 同时配置 table, enchant, brew 属性'
|
- craft - 同时配置 table, enchant, brew 属性
|
||||||
- ''
|
|
||||||
list:
|
list:
|
||||||
Description: 查看某个玩家领地
|
Description: 查看某个玩家领地
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res list <player> <page>
|
- '用法: /res list <player> <page>'
|
||||||
- Lists all the residences you own.
|
- '列出某个玩家的所有领地.'
|
||||||
- To list everyones residences, use /res listall.
|
- '列出所有玩家的领地, 请使用 /res listall.'
|
||||||
listall:
|
listall:
|
||||||
Description: 查看所有玩家领地
|
Description: 查看所有玩家领地
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res listall <page>
|
- '用法: /res listall <page>'
|
||||||
- Lists all residences on the server.
|
- '列出所有玩家的领地.'
|
||||||
sublist:
|
sublist:
|
||||||
Description: 查看领地内的子区域
|
Description: 查看领地内的子区域
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res sublist <residence> <page>
|
- '用法: /res sublist <residence> <page>'
|
||||||
- List subzones within a residence.
|
- '查看领地内的子区域.'
|
||||||
default:
|
default:
|
||||||
Description: 重置领地属性为默认.
|
Description: 重置领地属性为默认.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res default <residence>
|
- '用法: /res default <residence>'
|
||||||
- Resets the flags on a residence to their default. You must be the owner or an admin to do this.
|
- '重置领地属性为默认.'
|
||||||
rename:
|
rename:
|
||||||
Description: 重命名领地.
|
Description: 重命名领地.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res rename [OldName] [NewName]
|
- '用法: /res rename [OldName] [NewName]'
|
||||||
- You must be the owner or an admin to do this.
|
- You must be the owner or an admin to do this.
|
||||||
- The name must not already be taken by another residence.
|
- The name must not already be taken by another residence.
|
||||||
mirror:
|
mirror:
|
||||||
Description: 复制某个领地的属性
|
Description: 复制某个领地的属性
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res mirror [Source Residence] [Target Residence]
|
- '用法: /res mirror [Source Residence] [Target Residence]'
|
||||||
- Mirrors flags from one residence to another. You must be owner of both or a admin to do this.
|
- Mirrors flags from one residence to another. You must be owner of both or a admin to do this.
|
||||||
market:
|
market:
|
||||||
Description: 购买, 出售, 或 租借 领地
|
Description: 购买, 出售, 或 租借 领地
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res market ? for more info
|
- '用法: /res market ? for more info'
|
||||||
SubCommands:
|
SubCommands:
|
||||||
info:
|
info:
|
||||||
Description: Get economy info on residence
|
Description: Get economy info on residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res market info [residence]
|
- '用法: /res market info [residence]'
|
||||||
- Shows if the Residence is for sale or for rent, and the cost.
|
- Shows if the Residence is for sale or for rent, and the cost.
|
||||||
list:
|
list:
|
||||||
Description: Lists rentable and for sale residences.
|
Description: Lists rentable and for sale residences.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res market list
|
- '用法: /res market list'
|
||||||
sell:
|
sell:
|
||||||
Description: Sell a residence
|
Description: Sell a residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res market sell [residence] [amount]
|
- '用法: /res market sell [residence] [amount]'
|
||||||
- Puts a residence for sale for [amount] of money.
|
- Puts a residence for sale for [amount] of money.
|
||||||
- Another player can buy the residence with /res market buy
|
- Another player can buy the residence with /res market buy
|
||||||
buy:
|
buy:
|
||||||
Description: Buy a residence
|
Description: Buy a residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res market buy [residence]
|
- '用法: /res market buy [residence]'
|
||||||
- Buys a Residence if its for sale.
|
- Buys a Residence if its for sale.
|
||||||
unsell:
|
unsell:
|
||||||
Description: Stops selling a residence
|
Description: Stops selling a residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res market unsell [residence]
|
- '用法: /res market unsell [residence]'
|
||||||
rent:
|
rent:
|
||||||
Description: Rent a residence
|
Description: Rent a residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res market rent [residence] <autorenew>
|
- '用法: /res market rent [residence] <autorenew>'
|
||||||
- Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.
|
- Rents a residence. Autorenew can be either true or false. If true, the residence will be automatically re-rented upon expire if the residence owner has allowed it.
|
||||||
rentable:
|
rentable:
|
||||||
Description: Make a residence rentable.
|
Description: Make a residence rentable.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res market rentable [residence] [cost] [days] <repeat>
|
- '用法: /res market rentable [residence] [cost] [days] <repeat>'
|
||||||
- Makes a residence rentable for [cost] money for every [days] number of days. If <repeat> is true, the residence will automatically be able to be rented again after the current rent expires.
|
- Makes a residence rentable for [cost] money for every [days] number of days. If <repeat> is true, the residence will automatically be able to be rented again after the current rent expires.
|
||||||
release:
|
release:
|
||||||
Description: Remove a residence from rent or rentable.
|
Description: Remove a residence from rent or rentable.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res market release [residence]
|
- '用法: /res market release [residence]'
|
||||||
- If you are the renter, this command releases the rent on the house for you.
|
- If you are the renter, this command releases the rent on the house for you.
|
||||||
- If you are the owner, this command makes the residence not for rent anymore.
|
- If you are the owner, this command makes the residence not for rent anymore.
|
||||||
current:
|
current:
|
||||||
Description: Show residence your currently in.
|
Description: Show residence your currently in.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res current
|
- '用法: /res current'
|
||||||
lists:
|
lists:
|
||||||
Description: Predefined permission lists
|
Description: Predefined permission lists
|
||||||
Info:
|
Info:
|
||||||
@@ -568,51 +524,51 @@ CommandHelp: #this is just a holder node, that holds the entire help
|
|||||||
add:
|
add:
|
||||||
Description: Add a list
|
Description: Add a list
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res lists add <listname>
|
- '用法: /res lists add <listname>'
|
||||||
remove:
|
remove:
|
||||||
Description: Remove a list
|
Description: Remove a list
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res lists remove <listname>
|
- '用法: /res lists remove <listname>'
|
||||||
apply:
|
apply:
|
||||||
Description: Apply a list to a residence
|
Description: Apply a list to a residence
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res lists apply <listname> <residence>
|
- '用法: /res lists apply <listname> <residence>'
|
||||||
set:
|
set:
|
||||||
Description: Set a flag
|
Description: Set a flag
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res lists set <listname> <flag> <value>
|
- '用法: /res lists set <listname> <flag> <value>'
|
||||||
pset:
|
pset:
|
||||||
Description: Set a player flag
|
Description: Set a player flag
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res lists pset <listname> <player> <flag> <value>
|
- '用法: /res lists pset <listname> <player> <flag> <value>'
|
||||||
gset:
|
gset:
|
||||||
Description: Set a group flag
|
Description: Set a group flag
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res lists gset <listname> <group> <flag> <value>
|
- '用法: /res lists gset <listname> <group> <flag> <value>'
|
||||||
view:
|
view:
|
||||||
Description: View a list.
|
Description: View a list.
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res lists view <listname>
|
- '用法: /res lists view <listname>'
|
||||||
server:
|
server:
|
||||||
Description: 设置某个领地为服务器所属(仅限管理员使用)
|
Description: 设置某个领地为服务器所属(仅限管理员使用)
|
||||||
Info:
|
Info:
|
||||||
- Usage: /resadmin server [residence]
|
- '用法: /resadmin server [领地名]'
|
||||||
- 可以让某个领地变为服务器所属
|
- 可以让某个领地变为服务器所属
|
||||||
setowner:
|
setowner:
|
||||||
Description: 设置某个领地的所有者(仅限管理员使用)
|
Description: 设置某个领地的所有者(仅限管理员使用)
|
||||||
Info:
|
Info:
|
||||||
- Usage: /resadmin setowner [领地名] [玩家]
|
- '用法: /resadmin setowner [领地名] [玩家]'
|
||||||
resreload:
|
resreload:
|
||||||
Description: 重新加载插件配置(仅限管理员使用)
|
Description: 重新加载插件配置(仅限管理员使用)
|
||||||
Info:
|
Info:
|
||||||
- Usage: /resreload
|
- '用法: /resreload'
|
||||||
resload:
|
resload:
|
||||||
Description: 载入已保存的配置文件 (不安全, 仅限管理员使用).
|
Description: 载入已保存的配置文件 (不安全, 仅限管理员使用).
|
||||||
Info:
|
Info:
|
||||||
- Usage: /resload
|
- '用法: /resload'
|
||||||
- UNSAFE command, does not save residences first.
|
- UNSAFE command, does not save residences first.
|
||||||
- Loads the residence save file after you have made changes.
|
- Loads the residence save file after you have made changes.
|
||||||
version:
|
version:
|
||||||
Description: 显示领地插件的版本信息
|
Description: 显示领地插件的版本信息
|
||||||
Info:
|
Info:
|
||||||
- Usage: /res version
|
- '用法: /res version'
|
||||||
@@ -7,15 +7,14 @@ authors: [bekvon,nate302,t00thpick1,喵♂呜]
|
|||||||
contributors: [lemon42,smbarbour,inorixu,Shayana_fr]
|
contributors: [lemon42,smbarbour,inorixu,Shayana_fr]
|
||||||
softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit]
|
softdepend: [Vault,Essentials,RealPlugin,BOSEconomy,iConomy,bPermissions,PermissionsBukkit,Permissions,WorldEdit]
|
||||||
commands:
|
commands:
|
||||||
res:
|
|
||||||
description: Manage Residences
|
|
||||||
usage: §c使用/res ? 获取更多帮助.
|
|
||||||
residence:
|
residence:
|
||||||
description: Manage Residences
|
description: 管理领地.
|
||||||
usage: §c使用/residence ? 获取更多帮助.
|
aliese: [res]
|
||||||
|
usage: §c使用/res ? 或 /residence ? 或 /resadmin ? 获取更多帮助.
|
||||||
resadmin:
|
resadmin:
|
||||||
description: Residence admin functions.
|
description: 管理员命令 管理领地.
|
||||||
usage: §c使用/res ? or /resadmin ? 获取更多帮助.
|
permission: residence.admin
|
||||||
|
usage: §c使用/res ? 或 /residence ? 或 /resadmin ? 获取更多帮助.
|
||||||
resreload:
|
resreload:
|
||||||
description: 重载领地插件.
|
description: 重载领地插件.
|
||||||
usage: §c使用/resreload
|
usage: §c使用/resreload
|
||||||
@@ -30,7 +29,7 @@ commands:
|
|||||||
usage: §c使用/resworld remove [world] 移除世界所有领地.
|
usage: §c使用/resworld remove [world] 移除世界所有领地.
|
||||||
permissions:
|
permissions:
|
||||||
residence.admin:
|
residence.admin:
|
||||||
description: Gives you access to /resadmin
|
description: 允许使用 /resadmin.
|
||||||
default: op
|
default: op
|
||||||
residence.admin.tp:
|
residence.admin.tp:
|
||||||
description: Allows to override tp flag
|
description: Allows to override tp flag
|
||||||
|
|||||||
Reference in New Issue
Block a user