Skip to content

Commit d0fc832

Browse files
Remake the plugin
1 parent 99b2972 commit d0fc832

File tree

7 files changed

+272
-13
lines changed

7 files changed

+272
-13
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>huihui.crsc</groupId>
88
<artifactId>ClickRailSpawnCar</artifactId>
9-
<version>1.0</version>
9+
<version>2.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>ClickRailSpawnCar</name>
@@ -67,7 +67,7 @@
6767
<dependency>
6868
<groupId>org.spigotmc</groupId>
6969
<artifactId>spigot-api</artifactId>
70-
<version>1.16.5-R0.1-SNAPSHOT</version>
70+
<version>1.13-R0.1-SNAPSHOT</version>
7171
<scope>provided</scope>
7272
</dependency>
7373
</dependencies>
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
package huihui.crsc;
22

3-
import huihui.crsc.minecars.ScanPlayerEvents;
3+
import huihui.crsc.events.ScanPlayerEvents;
44
import org.bukkit.ChatColor;
5-
import org.bukkit.command.ConsoleCommandSender;
65
import org.bukkit.entity.Player;
7-
import org.bukkit.plugin.Plugin;
86
import org.bukkit.plugin.java.JavaPlugin;
9-
import org.bukkit.scheduler.BukkitTask;
107

11-
import java.io.Console;
8+
import java.util.HashMap;
9+
import java.util.Map;
1210

1311

1412
public final class ClickRailSpawnCar extends JavaPlugin {
13+
// 新建一个Map,存放玩家的坐车时长,reload或重启服务器刷新。
14+
public static Map<Player, Long> playerCarTimeCount = new HashMap<>();
15+
// normal
16+
public static String normal = "[Crsc]";
17+
public static ClickRailSpawnCar instance;
1518
@Override
1619
public void onEnable() {
1720
// Plugin startup logic
1821
getServer().getPluginManager().registerEvents(new ScanPlayerEvents(), this);
19-
getConfig().options().copyDefaults();
20-
saveDefaultConfig();
21-
Plugin plugin = huihui.crsc.ClickRailSpawnCar.getPlugin(huihui.crsc.ClickRailSpawnCar.class);
22+
instance = this;
2223
System.out.println(ChatColor.RED + "[crsc]插件已启动");
23-
int tick = plugin.getConfig().getInt("WaitTime") * 20 * 60;
24-
BukkitTask Clean = new huihui.crsc.minecars.CleanMinecars().runTaskTimer(this, 0, tick);
2524
}
2625

2726
@Override
2827
public void onDisable() {
2928
// Plugin shutdown logic
29+
playerCarTimeCount.clear();
3030
System.out.println(ChatColor.RED + "[crsc]插件已注销");
3131
}
3232
}
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package huihui.crsc.events;
2+
3+
import huihui.crsc.utils.PlayerUtils;
4+
import org.bukkit.*;
5+
import org.bukkit.block.Block;
6+
import org.bukkit.entity.EntityType;
7+
import org.bukkit.entity.Player;
8+
import org.bukkit.event.EventHandler;
9+
import org.bukkit.event.Listener;
10+
import org.bukkit.event.block.Action;
11+
import org.bukkit.event.player.PlayerInteractEvent;
12+
import org.bukkit.event.vehicle.VehicleEnterEvent;
13+
import org.bukkit.event.vehicle.VehicleExitEvent;
14+
import org.bukkit.inventory.EquipmentSlot;
15+
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
import java.util.Random;
19+
20+
import static huihui.crsc.ClickRailSpawnCar.playerCarTimeCount;
21+
22+
23+
public class ScanPlayerEvents implements Listener {
24+
25+
// 检测玩家点击
26+
@EventHandler
27+
public void onClickBlock(PlayerInteractEvent event) {
28+
Block block = event.getClickedBlock();
29+
Player player = event.getPlayer();
30+
if (block == null){
31+
return;
32+
}
33+
if (event.getAction() == Action.LEFT_CLICK_BLOCK){
34+
return;
35+
}
36+
if (event.getHand() == EquipmentSlot.OFF_HAND){
37+
return;
38+
}
39+
double x = block.getX();
40+
double y = block.getY() + 1;
41+
double z = block.getZ();
42+
43+
Material clickType = block.getType(); // 获取方块的类型
44+
45+
if (clickType == Material.RAIL) {
46+
spawnCar(x, y, z, player);
47+
}
48+
else if (clickType == Material.POWERED_RAIL){
49+
spawnCar(x, y, z, player);
50+
}
51+
else if (clickType == Material.ACTIVATOR_RAIL){
52+
spawnCar(x, y, z, player);
53+
}
54+
else if (clickType == Material.DETECTOR_RAIL){
55+
spawnCar(x, y, z, player);
56+
}
57+
58+
}
59+
60+
// 检测玩家上车
61+
@EventHandler
62+
public void onEnterCar(VehicleEnterEvent event){
63+
// 获取进入到矿车的玩家
64+
if (event.getVehicle().getType().equals(EntityType.MINECART)){
65+
// 防止动物进入,报错
66+
if (event.getEntered() instanceof Player){
67+
Player player = (Player) event.getEntered();
68+
Long enterTime = System.currentTimeMillis();
69+
// 给玩家计时
70+
playerCarTimeCount.put(player, enterTime);
71+
PlayerUtils.send(player, "#AQUA#欢迎乘坐NameFlying第%d号列车,已开始计时。", randomCarNum());
72+
}
73+
}
74+
75+
}
76+
77+
// 检测玩家下车
78+
@EventHandler
79+
public void onCarUnuseful(VehicleExitEvent event){
80+
if (event.getVehicle().getType().equals(EntityType.MINECART)){
81+
// 防止动物进入,报错
82+
if (event.getExited() instanceof Player){
83+
Player player = (Player) event.getExited();
84+
// 停止计时,并告知玩家
85+
if (playerCarTimeCount.containsKey(player)){
86+
Long enterTime = playerCarTimeCount.get(player);
87+
Long stopTime = System.currentTimeMillis();
88+
double spendTime = (double) (stopTime - enterTime) / 1000;
89+
PlayerUtils.send(player, "#AQUA#本次旅程共花费:#GREEN#" + spendTime + " #AQUA#秒,感谢乘坐NameFlying此次列车。");
90+
// 删除Map中的玩家
91+
playerCarTimeCount.remove(player);
92+
}
93+
// 将车子销毁
94+
event.getVehicle().remove();
95+
}
96+
}
97+
}
98+
99+
public void spawnCar(double x, double y, double z, Player player){
100+
// console报告
101+
System.out.println("玩家:" + player.getName() + "召唤了一个矿车 坐标:(" + x + ", " + y + ", " + z + ")");
102+
// 获取玩家所在world
103+
World world = player.getWorld();
104+
// 定义矿车位置
105+
Location location = new Location(world, x, y, z);
106+
// 生成矿车并让玩家坐上去
107+
world.spawnEntity(location, EntityType.MINECART).addPassenger(player);
108+
}
109+
110+
public int randomCarNum(){
111+
List<Integer> numList = new ArrayList<>();
112+
numList.add(114);
113+
numList.add(514);
114+
numList.add(1919);
115+
numList.add(810);
116+
Random random = new Random();
117+
return numList.get(random.nextInt(4));
118+
}
119+
120+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package huihui.crsc.utils;
2+
3+
import huihui.crsc.ClickRailSpawnCar;
4+
import org.bukkit.Bukkit;
5+
import org.bukkit.ChatColor;
6+
7+
import java.util.regex.Matcher;
8+
import java.util.regex.Pattern;
9+
10+
/**
11+
* Chat工具类
12+
* @author WindLeaf_qwq
13+
*/
14+
public class ChatUtils {
15+
// 存放颜色代码对应的中文
16+
/**
17+
* 将带特殊颜色代码的文本转为带颜色代码的文本
18+
* <p>换行
19+
* 例如:"#RED#你输了!" -> "§c你输了!"
20+
* @param string 带特殊颜色代码的文本
21+
* @return 转换后的文本
22+
*/
23+
public static String translateColor(Object string) {
24+
// 正则表达式替换
25+
String result = (String) string; // #RED#[红队]
26+
Pattern regex = Pattern.compile("#[A-Z_-]+#");
27+
Matcher matcher = regex.matcher(result);
28+
while (matcher.find()) {
29+
String code = matcher.group(); // #RED#
30+
result = result.replaceFirst(
31+
code, // #RED#
32+
"§" + ChatColor.valueOf(code.replaceAll("#", "")).getChar() // §c
33+
);
34+
}
35+
return result;
36+
}
37+
38+
/**
39+
* 将带特殊颜色代码的文本转为带颜色代码的文本 (带占位符)
40+
* <p>
41+
* 例如:"#RED#你输了!" -> "§c你输了!"
42+
* @param string 带特殊颜色代码的文本
43+
* @param args 占位符替换
44+
* @return 转换后的文本
45+
*/
46+
public static String translateColor(Object string, Object... args) {
47+
return translateColor(String.format((String) string, args));
48+
}
49+
50+
/**
51+
* 全服公告消息(带占位符)
52+
* @param message 要公告的消息
53+
* @param args 占位符替换
54+
*/
55+
public static void broadcast(String message, Object... args) {
56+
Bukkit.getOnlinePlayers().forEach(it -> PlayerUtils.send(it, ClickRailSpawnCar.normal + message, args));
57+
}
58+
59+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package huihui.crsc.utils;
2+
3+
4+
import huihui.crsc.ClickRailSpawnCar;
5+
6+
/**
7+
* 日志工具库
8+
* @author X_huihui
9+
*/
10+
public class LogUtils {
11+
// 定义instance
12+
static ClickRailSpawnCar instance = ClickRailSpawnCar.instance;
13+
14+
/**
15+
* LogInfo
16+
* @param log 要输出的info
17+
*/
18+
public static void info(Object log){
19+
instance.getLogger().info(ChatUtils.translateColor(log.toString()));
20+
}
21+
22+
/**
23+
* LogInfo(WithArguments)
24+
* @param log 要输出的info
25+
* @param args 占位符
26+
*/
27+
public static void info(Object log, Object... args){
28+
instance.getLogger().info(ChatUtils.translateColor(log.toString(), args));
29+
}
30+
31+
/**
32+
* LogWarning
33+
* @param log 要输出的warning
34+
*/
35+
public static void warning(Object log){
36+
instance.getLogger().warning(ChatUtils.translateColor(log.toString()));
37+
}
38+
39+
/**
40+
* LogWarning(WithArguments)
41+
* @param log 要输出的warning
42+
* @param args 占位符
43+
*/
44+
public static void warning(Object log, Object... args){
45+
instance.getLogger().warning(ChatUtils.translateColor(log.toString(), args));
46+
}
47+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package huihui.crsc.utils;
2+
3+
import org.bukkit.command.CommandSender;
4+
5+
import java.util.Collections;
6+
7+
/**
8+
* Player工具类
9+
* @author WindLeaf_qwq
10+
*/
11+
public class PlayerUtils {
12+
13+
/**
14+
* 给玩家发送信息
15+
* @param sender 玩家或控制台
16+
* @param message 要发送的消息
17+
*/
18+
public static void send(CommandSender sender, Object message) {
19+
StringBuilder sb = new StringBuilder();
20+
Collections.singletonList(message).forEach(it -> sb.append(it).append(" "));
21+
sender.sendMessage(ChatUtils.translateColor(sb.toString()));
22+
}
23+
24+
/**
25+
* 给玩家发送消息(带占位符)
26+
* @param sender 玩家或控制台
27+
* @param message 要发送的信息
28+
* @param args 占位符替换
29+
*/
30+
public static void send(CommandSender sender, Object message, Object... args) {
31+
send(sender, String.format((String) message, args));
32+
}
33+
}

src/main/resources/plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
name: ClickRailSpawnCar
22
version: '${project.version}'
33
main: huihui.crsc.ClickRailSpawnCar
4-
api-version: 1.16
4+
api-version: 1.13

0 commit comments

Comments
 (0)