은이 플러그인은 계정 플러그인 두 번 전송,이 클래스 플레이어가 로그인 이벤트를 처리합니다. 어떤 이유 BlockPlaceEvent 들어은 플레이어가 자신의 서버 계정에 로그인하지 않은 상태에서 이벤트를 중지하고 메시지를 보냅니다. 모든 것이 올바르게 해고됩니다. 그러나 어떤 이유로 그것은 메시지를 두 번 보냅니다.Player.sendMessage는()
코드 :
@EventHandler
public void OnPlayerQuit(PlayerQuitEvent PQE) {
// Case the PQE Entity to a player.
Player Player = (Player) PQE.getPlayer();
// Get the players UUID to open the file needed
String UserUUID = Player.getUniqueId().toString();
// Open the file and read it
File Directory = new File("./plugins/ServerUtils/ServerAccounts/" + UserUUID + ".json");
if(Directory.exists()) {
try {
JSONObject NewFinalResult = new JSONObject(this.readFile(Directory));
NewFinalResult.getJSONObject("info").put("loggedin", false);
this.overWriteToFile(Directory, NewFinalResult.toString());
}
catch(Exception E) {
E.printStackTrace();
}
}
}
@EventHandler
public void OnPlayerChat(PlayerChatEvent PCE) {
Player Player = (Player) PCE.getPlayer();
String UserUUID = Player.getUniqueId().toString();
File Directory = new File(Directories.ServerAccounts + "/" + UserUUID + ".json");
JSONObject UserFileJSON = new JSONObject(this.readFile(Directory));
if(UserFileJSON.getJSONObject("info").getBoolean("loggedin") == false) {
PCE.setCancelled(true);
Player.sendMessage(ChatColor.RED + "You must be logged in to do this!");
Player.sendMessage(ChatColor.RED + "To log in, simply type: " + ChatColor.BLUE + "\"/login <password>\"");
}
}
@EventHandler
public void OnBlockBreak(BlockBreakEvent BBE) {
Player Player = (Player) BBE.getPlayer();
String UserUUID = Player.getUniqueId().toString();
File Directory = new File(Directories.ServerAccounts + "/" + UserUUID + ".json");
JSONObject UserFileJSON = new JSONObject(this.readFile(Directory));
if(UserFileJSON.getJSONObject("info").getBoolean("loggedin") == false) {
BBE.setCancelled(true);
Player.sendMessage(ChatColor.RED + "You must be logged in to do this!");
Player.sendMessage(ChatColor.RED + "To log in, simply type: " + ChatColor.BLUE + "\"/login <password>\"");
}
}
@EventHandler
public void OnBlockPlace(BlockPlaceEvent BPE) {
Player Player = (Player) BPE.getPlayer();
String UserUUID = Player.getUniqueId().toString();
File Directory = new File(Directories.ServerAccounts + "/" + UserUUID + ".json");
JSONObject UserFileJSON = new JSONObject(this.readFile(Directory));
if(UserFileJSON.getJSONObject("info").getBoolean("loggedin") == false) {
BPE.setCancelled(true);
Player.sendMessage(ChatColor.RED + "You must be logged in to do this!");
Player.sendMessage(ChatColor.RED + "To log in, simply type: " + ChatColor.BLUE + "\"/login <password>\"");
}
}
있습니까 같은 이벤트가 두 번 열리지는 않습니까? 아니면 동시에 2 개의 다른 이벤트를 받고 있습니까? 각 이벤트의 메시지를 조금씩 바꿀 수 있으므로 어떤 이벤트를 통해 메시지를 보내고 있는지 확인할 수 있습니다. –
@DavidtenHove BlockPlaceEvent가 취소되었을 때 트리거 할 것이라고 생각했기 때문에 BlockBreakEvent를 제거했지만 아무것도 삭제하지 않았기 때문에 제거했습니다. 다른 사건들 중 아무 것도 이것을하지 않습니다. –
@DavidtenHove 나는 당신의 충고를 따랐으며, "이 블록을 놓으라고!"라고 말했습니다. 또는 "채팅!" 그래서 나는 어느 것이 발포하고 있는지, 그리고 "당신은이 블록을 배치하기 위해 로그인해야합니다!"라는 메시지를 알았습니다. 두 번 나타났습니다. 그래서 우리는 같은 사건이 다른 사건이 아닌 두 번씩 발포한다는 것을 압니다. –