Add command to get map to view al coordinates

This commit is contained in:
SemvdH
2026-02-03 20:47:55 +01:00
parent a07108e141
commit de87781ee1
12 changed files with 170 additions and 64 deletions

View File

@@ -6,7 +6,7 @@ import org.bukkit.plugin.java.JavaPlugin;
import nl.interestingcorner.coordinates.commands.CoordinatesCommand;
import nl.interestingcorner.coordinates.db.CoordinatesDatabaseManager;
// import nl.interestingcorner.coordinates.gui.CoordinatesGUIListener;
import nl.interestingcorner.coordinates.listeners.MapUseListener;
public class App extends JavaPlugin {
@@ -16,7 +16,7 @@ public class App extends JavaPlugin {
CoordinatesDatabaseManager.INSTANCE.initialize(this);
getLogger().info("Successfully initialized database");
// getServer().getPluginManager().registerEvents(new CoordinatesGUIListener(), this);
getServer().getPluginManager().registerEvents(new MapUseListener(), this);
registerCommands();
}

View File

@@ -41,11 +41,6 @@ public class AddCoordinateCommandHandler implements CoordinatesCommandHandler {
return false;
}
sender.sendMessage("Args after parsing:");
sender.sendMessage("0:" + parsedArgs.get(0));
sender.sendMessage("1:" + parsedArgs.get(1));
sender.sendMessage("2:" + parsedArgs.get(2));
String name = parsedArgs.get(0);
String description = parsedArgs.get(1);
String color = parsedArgs.get(2);
@@ -84,12 +79,10 @@ public class AddCoordinateCommandHandler implements CoordinatesCommandHandler {
private List<String> removeFirstArg(String[] args) {
List<String> onlyArgs = new ArrayList<>();
sender.sendMessage("removeFirstArg: size of args is " + String.valueOf(args.length));
for (int i = 1; i < args.length; i++) {
onlyArgs.add(args[i]);
}
sender.sendMessage("removeFirstArg: size of onlyArgs is " + String.valueOf(onlyArgs.size()));
return onlyArgs;
}

View File

@@ -14,14 +14,12 @@ public class CoordinatesCommand implements CommandExecutor{
sb.append(string);
sb.append(" ");
}
sender.sendMessage("Args length: " + String.valueOf(args.length));
sender.sendMessage(sb.toString());
// strategy design pattern
return switch (args[0]) {
case "get" -> new GetCoordinatesCommandHandler().handleCommand(sender, args);
case "add" -> new AddCoordinateCommandHandler().handleCommand(sender, args);
case "map" -> new GetMapCommandHandler().handleCommand(sender, args);
default -> false;
};
}

View File

@@ -30,12 +30,6 @@ public class GetCoordinatesCommandHandler implements CoordinatesCommandHandler {
player.sendMessage("No coordinates found! Add some with the §3/ic-coords §5add §fcommand.");
return true;
}
StringBuilder res = new StringBuilder("Coordinates: ");
for (Coordinate coordinate : coords) {
res.append(coordinate.toString());
}
player.sendMessage(res.toString());
CoordinatesGUI.open(player, coords);
}

View File

@@ -0,0 +1,55 @@
package nl.interestingcorner.coordinates.commands;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import nl.interestingcorner.core.MinecraftColor;
public class GetMapCommandHandler implements CoordinatesCommandHandler {
public static final String MAP_ITEM_NAME = MinecraftColor.LIGHT_PURPLE + "Map of Coordinates";
public static final String MAP_ITEM_LORE = MinecraftColor.AQUA.toColorCode() + "This will take you anywhere!";
@Override
public boolean handleCommand(CommandSender sender, String[] args) {
if (!(sender instanceof Player player)) {
sender.sendMessage("This command can only be used by a player.");
return true;
}
// Create a custom map item
ItemStack map = new ItemStack(Material.FILLED_MAP);
ItemMeta meta = map.getItemMeta();
if (meta != null) {
meta.setDisplayName(MAP_ITEM_NAME);
List<String> lore = new ArrayList<>();
lore.add(MAP_ITEM_LORE);
meta.setLore(lore);
map.setItemMeta(meta);
}
// Give the item to the player
player.getInventory().addItem(map);
player.sendMessage(MinecraftColor.GREEN.toColorCode() + "You received the Coordinates map! Right-click to use it.");
return true;
}
/**
* Check if the given item is the special map item.
* @param item The item to check.
* @return true if it is the special map, false otherwise.
*/
public static boolean isSpecialMap(ItemStack item) {
if (item == null || item.getType() != Material.FILLED_MAP) return false;
ItemMeta meta = item.getItemMeta();
if (meta == null) return false;
return meta.hasDisplayName() && meta.getDisplayName().equals(MAP_ITEM_NAME) &&
meta.hasLore() && meta.getLore() != null && meta.getLore().contains(MAP_ITEM_LORE);
}
}

View File

@@ -33,7 +33,7 @@ public class CoordinatesGUI {
}
GUI gui = new GUI("Coordinates", GUI.DEFAULT_PAGE_SIZE);
gui.setItemClickListener(new TeleportItemClickListener());
gui.addItemClickListener(new TeleportItemClickListener());
gui.setItems(items);
gui.show(player);
}

View File

@@ -24,8 +24,8 @@ public class TeleportItemClickListener implements GUIItemClickListener {
Logger.INSTANCE.info(TAG, "Teleporting player " + player.getName() + " to coordinate " + coordinate.name);
player.sendMessage("Teleporting you to " + coordinate.name);
player.teleport(loc);
player.sendTitle(coordinate.name, coordinate.description, 10, 70, 20);
player.closeInventory();
}
}
}

View File

@@ -0,0 +1,25 @@
package nl.interestingcorner.coordinates.listeners;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import nl.interestingcorner.coordinates.commands.GetMapCommandHandler;
public class MapUseListener implements Listener {
@EventHandler
public void onPlayerUseMap(PlayerInteractEvent event) {
Player player = event.getPlayer();
ItemStack item = event.getItem();
if (GetMapCommandHandler.isSpecialMap(item)) {
event.setCancelled(true);
// execute command to show coordinates of this world
player.performCommand("ic-coords get world");
}
}
}

View File

@@ -7,4 +7,4 @@ depend: [IC-core]
commands:
ic-coords:
description: Main command for the coordinates
usage: /ic-coords get | add
usage: /ic-coords get | add | map