Skip to content

Commit 2dddc91

Browse files
committed
コンパス実装
1 parent 1fcb53a commit 2dddc91

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

src/main/java/com/github/elic0de/hungergames/listener/EventListener.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
import net.md_5.bungee.api.chat.ComponentBuilder;
1212
import org.bukkit.ChatColor;
1313
import org.bukkit.GameMode;
14+
import org.bukkit.Location;
1415
import org.bukkit.Material;
1516
import org.bukkit.block.Block;
1617
import org.bukkit.block.BlockFace;
1718
import org.bukkit.entity.Arrow;
1819
import org.bukkit.entity.EnderDragon;
20+
import org.bukkit.entity.Entity;
1921
import org.bukkit.entity.Player;
2022
import org.bukkit.event.EventHandler;
2123
import org.bukkit.event.Listener;
@@ -161,4 +163,58 @@ private String getHeartLevel(Player player) {
161163

162164
return rHeart + lHeart.toString();
163165
}
166+
167+
@EventHandler
168+
private void onCompassInteract(PlayerInteractEvent event) {
169+
if (event.getItem() == null) return;
170+
if (!event.getItem().isSimilar(new ItemStack(Material.COMPASS))) return;
171+
172+
final Player player = event.getPlayer();
173+
final Player nearestPlayer = getNearest(player, 300.0);
174+
final Material material = event.getMaterial();
175+
176+
if (player.getCooldown(material) != 0) return;
177+
178+
final GameUser user = GameUserManager.getGameUser(player);
179+
180+
player.setCooldown(material, 60);
181+
182+
if (nearestPlayer == null) {
183+
user.sendActionBar("&c範囲300ブロック以内のプレイヤーを見つけられませんでした");
184+
return;
185+
}
186+
187+
final String checkPosition = getPosition(player, nearestPlayer);
188+
189+
player.setCompassTarget(nearestPlayer.getLocation());
190+
user.sendActionBar("近くのプレイヤーを指しています。" + checkPosition);
191+
}
192+
193+
public Player getNearest(Player p, Double range) {
194+
final GameUser user = GameUserManager.getGameUser(p);
195+
double distance = Double.POSITIVE_INFINITY; // To make sure the first
196+
// player checked is closest
197+
for (Entity entity : p.getNearbyEntities(range, range, range)) {
198+
if (entity instanceof Player player) {
199+
if (player == p) continue; //Added this check so you don't target yourself.
200+
if (player.getGameMode() == GameMode.SPECTATOR) continue;
201+
if (game.getTeamUsers(user).contains(GameUserManager.getGameUser(player))) continue;
202+
double distanceto = p.getLocation().distance(player.getLocation());
203+
if (distanceto > distance)
204+
continue;
205+
return player;
206+
}
207+
}
208+
return null;
209+
}
210+
211+
public String getPosition(Player player, Player nearestPlayer) {
212+
final Location playerLoc = player.getLocation();
213+
final Location nearestPlayerLoc = nearestPlayer.getLocation();
214+
215+
if (playerLoc.getY() == nearestPlayerLoc.getY()) return "-";
216+
if (playerLoc.getY() <= nearestPlayerLoc.getY()) return "↑";
217+
218+
return "↓";
219+
}
164220
}

0 commit comments

Comments
 (0)