mirror of
https://github.com/zDevelopers/ImageOnMap.git
synced 2024-11-29 05:26:18 +01:00
Maps titles are now hidden when placed on an item frame.
* NEW: MapItemManager: now handles item frame events, allowing to hide the map's title only when needed. * NEW: Map files are now all loaded on start, rather than on demand. * NEW: Rewrote DeleteConfirmCommand using the new RawText API. * NEW: Use the new ZLib.registerEvents() API. * OPT: MapManager's and PlayerMapStore's managesMap() methods now return early when given a non-map ItemStack.
This commit is contained in:
parent
154c2fde36
commit
a285d782be
@ -92,7 +92,7 @@ public final class ImageOnMap extends ZPlugin
|
|||||||
PluginConfiguration.init(this);
|
PluginConfiguration.init(this);
|
||||||
MetricsLite.startMetrics();
|
MetricsLite.startMetrics();
|
||||||
MapManager.init();
|
MapManager.init();
|
||||||
MapInitEvent.init(this);
|
MapInitEvent.init();
|
||||||
MapItemManager.init();
|
MapItemManager.init();
|
||||||
|
|
||||||
Commands.register(
|
Commands.register(
|
||||||
|
@ -22,8 +22,10 @@ import fr.moribus.imageonmap.commands.IoMCommand;
|
|||||||
import fr.moribus.imageonmap.map.ImageMap;
|
import fr.moribus.imageonmap.map.ImageMap;
|
||||||
import fr.zcraft.zlib.components.commands.CommandException;
|
import fr.zcraft.zlib.components.commands.CommandException;
|
||||||
import fr.zcraft.zlib.components.commands.CommandInfo;
|
import fr.zcraft.zlib.components.commands.CommandInfo;
|
||||||
|
import fr.zcraft.zlib.components.rawtext.RawText;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
|
||||||
@CommandInfo (name = "delete", usageParameters = "[tool name]")
|
@CommandInfo (name = "delete", usageParameters = "[tool name]")
|
||||||
public class DeleteConfirmCommand extends IoMCommand
|
public class DeleteConfirmCommand extends IoMCommand
|
||||||
@ -32,11 +34,26 @@ public class DeleteConfirmCommand extends IoMCommand
|
|||||||
protected void run() throws CommandException
|
protected void run() throws CommandException
|
||||||
{
|
{
|
||||||
ImageMap map = getMapFromArgs();
|
ImageMap map = getMapFromArgs();
|
||||||
String msg ="{\"text\":\"You are going to delete \",\"extra\":[{\"text\":\""+ map.getId() +"\",\"color\":\"gold\"},{\"text\":\". Are you sure ? \",\"color\":\"white\"}," +
|
|
||||||
"{\"text\":\"[Confirm]\", \"color\":\"green\", \"clickEvent\":{\"action\":\"run_command\",\"value\":\"/maptool delete-noconfirm "+ map.getId() +"\"}, " +
|
|
||||||
"\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"This map will be deleted \",\"extra\":[{\"text\":\"forever\",\"color\":\"red\",\"bold\":true,\"italic\":true,\"underlined\":true}, {\"text\":\" !\", \"underlined\":true}],\"underlined\":true}}}]}";
|
|
||||||
|
|
||||||
tellRaw( msg);
|
RawText hoverText = new RawText("This map will be deleted ")
|
||||||
|
.style(ChatColor.UNDERLINE)
|
||||||
|
.then("forever")
|
||||||
|
.style(ChatColor.RED, ChatColor.UNDERLINE, ChatColor.ITALIC, ChatColor.BOLD)
|
||||||
|
.then(" !")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
RawText msg = new RawText("You are going to delete ")
|
||||||
|
.then(map.getId())
|
||||||
|
.color(ChatColor.GOLD)
|
||||||
|
.then(". Are you sure ? ")
|
||||||
|
.color(ChatColor.WHITE)
|
||||||
|
.then("[Confirm]")
|
||||||
|
.color(ChatColor.GREEN)
|
||||||
|
.hover(hoverText)
|
||||||
|
.command(DeleteNoConfirmCommand.class, map.getId())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
send(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package fr.moribus.imageonmap.image;
|
package fr.moribus.imageonmap.image;
|
||||||
|
|
||||||
import fr.moribus.imageonmap.ImageOnMap;
|
import fr.moribus.imageonmap.ImageOnMap;
|
||||||
|
import fr.zcraft.zlib.core.ZLib;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -34,13 +35,12 @@ import org.bukkit.event.player.PlayerPickupItemEvent;
|
|||||||
import org.bukkit.event.world.ChunkLoadEvent;
|
import org.bukkit.event.world.ChunkLoadEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.map.MapView;
|
import org.bukkit.map.MapView;
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
public class MapInitEvent implements Listener
|
public class MapInitEvent implements Listener
|
||||||
{
|
{
|
||||||
static public void init(Plugin plugin)
|
static public void init()
|
||||||
{
|
{
|
||||||
plugin.getServer().getPluginManager().registerEvents(new MapInitEvent(), plugin);
|
ZLib.registerEvents(new MapInitEvent());
|
||||||
|
|
||||||
for(World world : Bukkit.getWorlds())
|
for(World world : Bukkit.getWorlds())
|
||||||
{
|
{
|
||||||
|
@ -23,6 +23,8 @@ import fr.moribus.imageonmap.PluginConfiguration;
|
|||||||
import fr.moribus.imageonmap.image.ImageIOExecutor;
|
import fr.moribus.imageonmap.image.ImageIOExecutor;
|
||||||
import fr.moribus.imageonmap.image.PosterImage;
|
import fr.moribus.imageonmap.image.PosterImage;
|
||||||
import fr.moribus.imageonmap.map.MapManagerException.Reason;
|
import fr.moribus.imageonmap.map.MapManagerException.Reason;
|
||||||
|
import fr.zcraft.zlib.tools.PluginLogger;
|
||||||
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -40,7 +42,7 @@ abstract public class MapManager
|
|||||||
|
|
||||||
static public void init()
|
static public void init()
|
||||||
{
|
{
|
||||||
|
load();
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void exit()
|
static public void exit()
|
||||||
@ -64,6 +66,9 @@ abstract public class MapManager
|
|||||||
|
|
||||||
static public boolean managesMap(ItemStack item)
|
static public boolean managesMap(ItemStack item)
|
||||||
{
|
{
|
||||||
|
if(item == null) return false;
|
||||||
|
if(item.getType() != Material.MAP) return false;
|
||||||
|
|
||||||
synchronized(playerMaps)
|
synchronized(playerMaps)
|
||||||
{
|
{
|
||||||
for(PlayerMapStore mapStore : playerMaps)
|
for(PlayerMapStore mapStore : playerMaps)
|
||||||
@ -222,6 +227,39 @@ abstract public class MapManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static private UUID getUUIDFromFile(File file)
|
||||||
|
{
|
||||||
|
String fileName = file.getName();
|
||||||
|
int fileExtPos = fileName.lastIndexOf('.');
|
||||||
|
if(fileExtPos <= 0) return null;
|
||||||
|
|
||||||
|
String fileExt = fileName.substring(fileExtPos + 1);
|
||||||
|
if(!fileExt.equals("yml")) return null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return UUID.fromString(fileName.substring(0, fileExtPos));
|
||||||
|
}
|
||||||
|
catch(IllegalArgumentException ex)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static public void load()
|
||||||
|
{
|
||||||
|
int loadedFilesCount = 0;
|
||||||
|
for(File file : ImageOnMap.getPlugin().getMapsDirectory().listFiles())
|
||||||
|
{
|
||||||
|
UUID uuid = getUUIDFromFile(file);
|
||||||
|
if(uuid == null) continue;
|
||||||
|
getPlayerMapStore(uuid);
|
||||||
|
++loadedFilesCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
PluginLogger.info("Loaded {0} player map files.", loadedFilesCount);
|
||||||
|
}
|
||||||
|
|
||||||
static public void save()
|
static public void save()
|
||||||
{
|
{
|
||||||
synchronized(playerMaps)
|
synchronized(playerMaps)
|
||||||
|
@ -36,6 +36,7 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
public class PlayerMapStore implements ConfigurationSerializable
|
public class PlayerMapStore implements ConfigurationSerializable
|
||||||
{
|
{
|
||||||
@ -60,6 +61,9 @@ public class PlayerMapStore implements ConfigurationSerializable
|
|||||||
|
|
||||||
public synchronized boolean managesMap(ItemStack item)
|
public synchronized boolean managesMap(ItemStack item)
|
||||||
{
|
{
|
||||||
|
if(item == null) return false;
|
||||||
|
if(item.getType() != Material.MAP) return false;
|
||||||
|
|
||||||
for(ImageMap map : mapList)
|
for(ImageMap map : mapList)
|
||||||
{
|
{
|
||||||
if(map.managesMap(item)) return true;
|
if(map.managesMap(item)) return true;
|
||||||
|
@ -142,4 +142,14 @@ public class PosterMap extends ImageMap
|
|||||||
return mapsIDs.length;
|
return mapsIDs.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getIndex(short mapID)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < mapsIDs.length; i++)
|
||||||
|
{
|
||||||
|
if(mapsIDs[i] == mapID) return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new IllegalArgumentException("Invalid map ID");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,12 @@
|
|||||||
package fr.moribus.imageonmap.ui;
|
package fr.moribus.imageonmap.ui;
|
||||||
|
|
||||||
import fr.moribus.imageonmap.map.ImageMap;
|
import fr.moribus.imageonmap.map.ImageMap;
|
||||||
|
import fr.moribus.imageonmap.map.MapManager;
|
||||||
import fr.moribus.imageonmap.map.PosterMap;
|
import fr.moribus.imageonmap.map.PosterMap;
|
||||||
import fr.moribus.imageonmap.map.SingleMap;
|
import fr.moribus.imageonmap.map.SingleMap;
|
||||||
import fr.zcraft.zlib.components.gui.GuiUtils;
|
import fr.zcraft.zlib.components.gui.GuiUtils;
|
||||||
|
import fr.zcraft.zlib.core.ZLib;
|
||||||
|
import fr.zcraft.zlib.tools.items.ItemUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -34,6 +37,10 @@ import java.util.ArrayDeque;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import org.bukkit.entity.ItemFrame;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||||
|
|
||||||
public class MapItemManager implements Listener
|
public class MapItemManager implements Listener
|
||||||
{
|
{
|
||||||
@ -42,6 +49,7 @@ public class MapItemManager implements Listener
|
|||||||
static public void init()
|
static public void init()
|
||||||
{
|
{
|
||||||
mapItemCache = new HashMap();
|
mapItemCache = new HashMap();
|
||||||
|
ZLib.registerEvents(new MapItemManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void exit()
|
static public void exit()
|
||||||
@ -195,4 +203,59 @@ public class MapItemManager implements Listener
|
|||||||
}
|
}
|
||||||
return cache;
|
return cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static private String getMapTitle(ItemStack item)
|
||||||
|
{
|
||||||
|
ImageMap map = MapManager.getMap(item);
|
||||||
|
if(map instanceof SingleMap)
|
||||||
|
{
|
||||||
|
return map.getName();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PosterMap poster = (PosterMap) map;
|
||||||
|
int index = poster.getIndex(item.getDurability());
|
||||||
|
return map.getName() + " (row " + (poster.getRowAt(index)) +
|
||||||
|
", column " + (poster.getColumnAt(index)) + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static private void onItemFramePlace(ItemFrame frame, Player player, PlayerInteractEntityEvent event)
|
||||||
|
{
|
||||||
|
if(frame.getItem().getType() != Material.AIR) return;
|
||||||
|
if(!MapManager.managesMap(player.getItemInHand())) return;
|
||||||
|
|
||||||
|
|
||||||
|
event.setCancelled(true);
|
||||||
|
ItemStack is = new ItemStack(Material.MAP, 1, player.getItemInHand().getDurability());
|
||||||
|
frame.setItem(is);
|
||||||
|
|
||||||
|
ItemUtils.consumeItem(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
static private void onItemFrameRemove(ItemFrame frame, Player player)
|
||||||
|
{
|
||||||
|
ItemStack item = frame.getItem();
|
||||||
|
if(frame.getItem().getType() != Material.MAP) return;
|
||||||
|
if(!MapManager.managesMap(frame.getItem())) return;
|
||||||
|
|
||||||
|
frame.setItem(ItemUtils.setDisplayName(item, getMapTitle(item)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
static public void onEntityDamage(EntityDamageByEntityEvent event)
|
||||||
|
{
|
||||||
|
if(!(event.getEntity() instanceof ItemFrame)) return;
|
||||||
|
if(!(event.getDamager() instanceof Player)) return;
|
||||||
|
|
||||||
|
onItemFrameRemove((ItemFrame)event.getEntity(), (Player)event.getDamager());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
static public void onEntityInteract(PlayerInteractEntityEvent event)
|
||||||
|
{
|
||||||
|
if(!(event.getRightClicked() instanceof ItemFrame)) return;
|
||||||
|
|
||||||
|
onItemFramePlace((ItemFrame)event.getRightClicked(), event.getPlayer(), event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user