diff --git a/pom.xml b/pom.xml
index b84edf3..e482706 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
pw.yumc
TeleportRandom
- 1.4.2
+ 1.4.3
TeleportRandom
${project.name}
@@ -31,10 +31,15 @@
true
+ pw.yumc:YumCore
cn.citycraft:PluginHelper
+
+ pw.yumc.YumCore
+ ${project.groupId}.${project.artifactId}
+
cn.citycraft.PluginHelper
${project.groupId}.${project.artifactId}
@@ -59,12 +64,8 @@
&a代码重构版本
+ &b1.4.3 - &c修复世界限制无效 添加CD剩余时间...;
&b1.4.2 - &c修复CD只提示无限制的BUG...;
- &b1.4.1 - &c修复AIOOBE错误...;
- &b1.4 - &a添加命令CD...;
- &b1.3.2 - &c修复上个版本的空指针错误...;
- &b1.3.1 - &c修复上个版本一个逻辑错误...;
- &b1.3 - &c修复传送世界限制(区分大小写)...;
DEBUG
UTF-8
@@ -95,5 +96,11 @@
jar
1.0
+
+ pw.yumc
+ YumCore
+ jar
+ 1.0
+
\ No newline at end of file
diff --git a/src/main/java/pw/yumc/TeleportRandom/TeleportRandom.java b/src/main/java/pw/yumc/TeleportRandom/TeleportRandom.java
index e29d18b..078d176 100644
--- a/src/main/java/pw/yumc/TeleportRandom/TeleportRandom.java
+++ b/src/main/java/pw/yumc/TeleportRandom/TeleportRandom.java
@@ -1,8 +1,8 @@
package pw.yumc.TeleportRandom;
-import java.util.HashSet;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Random;
-import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@@ -16,13 +16,14 @@ import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import cn.citycraft.PluginHelper.config.FileConfig;
-import cn.citycraft.PluginHelper.utils.VersionChecker;
+import pw.yumc.YumCore.statistic.Statistics;
+import pw.yumc.YumCore.update.SubscribeTask;
public class TeleportRandom extends JavaPlugin implements CommandExecutor {
public final static Random rr = new Random();
public static FileConfig config;
- private final Set cd = new HashSet<>();
+ private final Map cd = new HashMap<>();
@Override
public boolean onCommand(final CommandSender sender, final Command cmd, final String string, final String[] args) {
@@ -47,6 +48,8 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
} else if (args.length > 1) {
final Player p = Bukkit.getPlayer(args[0]);
switch (args.length) {
+ case 1:
+ throw new IllegalArgumentException();
case 2:
randomTP(Integer.parseInt(args[1]), p.getWorld(), p);
return true;
@@ -56,27 +59,28 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
}
}
} catch (final IllegalArgumentException e) {
+ if (args.length > 0) {
+ if (args[0].equalsIgnoreCase("reload")) {
+ config.reload();
+ sender.sendMessage(getPrefix() + config.getMessage("Message.Reload"));
+ return true;
+ }
+ if (args[0].equalsIgnoreCase("help")) {
+ sender.sendMessage("玩家: /tpr [范围] [世界]");
+ sender.sendMessage("控制台: /tpr <玩家> [范围] [世界]");
+ return true;
+ }
+ }
sender.sendMessage(getPrefix() + "§c非法的参数或不存在的世界!");
}
- if (args.length > 0) {
- if (args[0].equalsIgnoreCase("reload")) {
- config.reload();
- sender.sendMessage(getPrefix() + config.getMessage("Message.Reload"));
- return true;
- }
- if (args[0].equalsIgnoreCase("help")) {
- sender.sendMessage("玩家: /tpr [范围] [世界]");
- sender.sendMessage("控制台: /tpr <玩家> [范围] [世界]");
- return true;
- }
- }
return false;
}
@Override
public void onEnable() {
getCommand("tpr").setExecutor(this);
- new VersionChecker(this);
+ new Statistics();
+ new SubscribeTask();
}
@Override
@@ -88,54 +92,78 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
if (world == null || p == null) {
throw new IllegalArgumentException();
}
- if (!p.hasPermission("tpr.nocd") && cd.contains(p.getName())) {
- p.sendMessage(getPrefix() + config.getMessage("Message.CD"));
- return;
- }
- if (!config.getStringList("AllowWorld").contains(world.getName())) {
- p.sendMessage(getPrefix() + config.getMessage("Message.NoPermWorld"));
- }
- int lr = config.getInt("default");
- if (limit == 0) {
- p.sendMessage(getPrefix() + config.getMessage("Message.default1"));
- p.sendMessage(getPrefix() + config.getMessage("Message.default2"));
- } else {
- lr = limit;
- final int lrLimit = config.getInt("Limit");
- if (lr > lrLimit) {
- lr = lrLimit;
- p.sendMessage(String.format(getPrefix() + config.getMessage("Message.Wran"), lrLimit));
- }
- }
- final Point point = new Point(lr, world);
- checkBlock(point, p);
- point.tp(p);
- cd.add(p.getName());
- getServer().getScheduler().runTaskLater(this, new Runnable() {
+ getServer().getScheduler().runTaskAsynchronously(this, new Runnable() {
@Override
public void run() {
- cd.remove(p.getName());
+ final long t = System.currentTimeMillis();
+ if (!p.hasPermission("tpr.nocd") && cd.keySet().contains(p.getName())) {
+ final long leftTime = config.getLong("CD") / 20 - (t - cd.get(p.getName())) / 1000;
+ p.sendMessage(getPrefix() + config.getMessage("Message.CDs").replace("{0}", String.format("%s", leftTime)));
+ return;
+ }
+ if (!config.getStringList("AllowWorld").contains(world.getName())) {
+ p.sendMessage(getPrefix() + config.getMessage("Message.NoPermWorld"));
+ return;
+ }
+ int lr = config.getInt("default");
+ if (limit == 0) {
+ p.sendMessage(getPrefix() + config.getMessage("Message.default1"));
+ p.sendMessage(getPrefix() + config.getMessage("Message.default2"));
+ } else {
+ lr = limit;
+ final int lrLimit = config.getInt("Limit");
+ if (lr > lrLimit) {
+ lr = lrLimit;
+ p.sendMessage(String.format(getPrefix() + config.getMessage("Message.Wran"), lrLimit));
+ }
+ }
+ final Point point = new Point(lr, world);
+ getServer().getScheduler().runTask(TeleportRandom.this, new Runnable() {
+ @Override
+ public void run() {
+ checkBlock(point, p);
+ tp(point, p);
+ }
+ });
+ cd.put(p.getName(), t);
+ getServer().getScheduler().runTaskLater(TeleportRandom.this, new Runnable() {
+ @Override
+ public void run() {
+ cd.remove(p.getName());
+ }
+ }, config.getLong("CD"));
}
- }, config.getLong("CD"));
+ });
+ }
+
+ public void tp(final Point point, final Player p) {
+ final Location loc = getTpLocation(point);
+ p.teleport(loc);
+ p.sendMessage(String.format(getPluginname() + config.getMessage("Message.Tip"), loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
}
private void checkBlock(final Point point, final Player p) {
- final Material rbm = point.getBlock().getType();
+ final Block bk = getBlock(point);
+ final Material rbm = bk.getType();
final String blockname = rbm.name();
for (final String protectblock : config.getStringList("ProtectBlock")) {
if (protectblock.equalsIgnoreCase(blockname)) {
- point.getBlock().setType(Material.GLASS);
+ bk.setType(Material.GLASS);
p.sendMessage(getPrefix() + config.getMessage("Message.Protect"));
this.getServer().getScheduler().runTaskLater(this, new Runnable() {
@Override
public void run() {
- point.getBlock().setType(rbm);
+ bk.setType(rbm);
}
}, 200);
}
}
}
+ private Block getBlock(final Point point) {
+ return new Location(point.world, point.x, point.world.getHighestBlockYAt(point.x, point.z) - 1, point.z).getBlock();
+ }
+
private String getPluginname() {
return config.getMessage("pluginname");
}
@@ -148,9 +176,12 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
return config.getMessage("servername");
}
+ private Location getTpLocation(final Point point) {
+ return new Location(point.world, point.x + 0.5, point.world.getHighestBlockYAt(point.x, point.z) + 3, point.z + 0.5);
+ }
+
class Point {
public int x;
- public int y;
public int z;
public int limit;
public World world;
@@ -168,23 +199,6 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
if (yf % 2 != 0) {
z = -z;
}
- y = world.getHighestBlockYAt(x, z);
- }
-
- public Block getBlock() {
- return new Location(world, x, y - 1, z).getBlock();
- }
-
- public Location getTpLocation() {
- return new Location(world, x, y + 3, z);
- }
-
- public void sendMessage(final Player p) {
- p.sendMessage(String.format(getPluginname() + config.getMessage("Message.Tip"), world.getName(), x, y, z));
- }
-
- public void tp(final Player p) {
- p.teleport(getTpLocation());
}
}
}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 62cd7f7..c984146 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -1,5 +1,5 @@
#本文件为随机传送插件的主配置文件
-Version: 1.4
+Version: 1.5
#服务器名称
servername: ''
#插件名称
@@ -25,7 +25,7 @@ Message:
#当前世界不允许传送
NoPermWorld: '&c当前世界不允许使用随机传送!'
#当前世界不允许传送
- CD: '&c随机传送冷却中!'
+ CDs: '&c随机传送冷却中 剩余 {0} 秒!'
#允许传送的世界(区分大小写)
AllowWorld:
- world