mirror of
https://github.com/zDevelopers/ImageOnMap.git
synced 2024-09-29 06:57:29 +02:00
Merge branch 'indev' into feature_give_command
This commit is contained in:
commit
497205fc81
@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
package fr.moribus.imageonmap;
|
package fr.moribus.imageonmap;
|
||||||
|
|
||||||
|
|
||||||
import fr.moribus.imageonmap.commands.maptool.*;
|
import fr.moribus.imageonmap.commands.maptool.*;
|
||||||
import fr.moribus.imageonmap.image.ImageIOExecutor;
|
import fr.moribus.imageonmap.image.ImageIOExecutor;
|
||||||
import fr.moribus.imageonmap.image.ImageRendererExecutor;
|
import fr.moribus.imageonmap.image.ImageRendererExecutor;
|
||||||
@ -44,6 +45,7 @@ import fr.moribus.imageonmap.map.MapManager;
|
|||||||
import fr.moribus.imageonmap.migration.MigratorExecutor;
|
import fr.moribus.imageonmap.migration.MigratorExecutor;
|
||||||
import fr.moribus.imageonmap.migration.V3Migrator;
|
import fr.moribus.imageonmap.migration.V3Migrator;
|
||||||
import fr.moribus.imageonmap.ui.MapItemManager;
|
import fr.moribus.imageonmap.ui.MapItemManager;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandWorkers;
|
||||||
import fr.zcraft.zlib.components.commands.Commands;
|
import fr.zcraft.zlib.components.commands.Commands;
|
||||||
import fr.zcraft.zlib.components.gui.Gui;
|
import fr.zcraft.zlib.components.gui.Gui;
|
||||||
import fr.zcraft.zlib.components.i18n.I18n;
|
import fr.zcraft.zlib.components.i18n.I18n;
|
||||||
@ -60,7 +62,6 @@ public final class ImageOnMap extends ZPlugin
|
|||||||
static private final String IMAGES_DIRECTORY_NAME = "images";
|
static private final String IMAGES_DIRECTORY_NAME = "images";
|
||||||
static private final String MAPS_DIRECTORY_NAME = "maps";
|
static private final String MAPS_DIRECTORY_NAME = "maps";
|
||||||
static private ImageOnMap plugin;
|
static private ImageOnMap plugin;
|
||||||
|
|
||||||
private File imagesDirectory;
|
private File imagesDirectory;
|
||||||
private final File mapsDirectory;
|
private final File mapsDirectory;
|
||||||
|
|
||||||
@ -83,6 +84,7 @@ public final class ImageOnMap extends ZPlugin
|
|||||||
return new File(imagesDirectory, "map"+mapID+".png");
|
return new File(imagesDirectory, "map"+mapID+".png");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SuppressWarnings ("unchecked")
|
@SuppressWarnings ("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public void onEnable()
|
public void onEnable()
|
||||||
@ -100,9 +102,10 @@ public final class ImageOnMap extends ZPlugin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
|
|
||||||
loadComponents(I18n.class, Gui.class, Commands.class, PluginConfiguration.class, ImageIOExecutor.class, ImageRendererExecutor.class);
|
loadComponents(I18n.class, Gui.class, Commands.class, PluginConfiguration.class, ImageIOExecutor.class, ImageRendererExecutor.class, CommandWorkers.class);
|
||||||
|
|
||||||
//Init all the things !
|
//Init all the things !
|
||||||
I18n.setPrimaryLocale(PluginConfiguration.LANG.get());
|
I18n.setPrimaryLocale(PluginConfiguration.LANG.get());
|
||||||
@ -111,16 +114,23 @@ public final class ImageOnMap extends ZPlugin
|
|||||||
MapInitEvent.init();
|
MapInitEvent.init();
|
||||||
MapItemManager.init();
|
MapItemManager.init();
|
||||||
|
|
||||||
|
|
||||||
Commands.register(
|
Commands.register(
|
||||||
"maptool",
|
"maptool",
|
||||||
NewCommand.class,
|
NewCommand.class,
|
||||||
ListCommand.class,
|
ListCommand.class,
|
||||||
|
ListOtherCommand.class,
|
||||||
GetCommand.class,
|
GetCommand.class,
|
||||||
|
GetOtherCommand.class,
|
||||||
|
RenameCommand.class,
|
||||||
DeleteCommand.class,
|
DeleteCommand.class,
|
||||||
|
DeleteOtherCommand.class,
|
||||||
GiveCommand.class,
|
GiveCommand.class,
|
||||||
GetRemainingCommand.class,
|
GetRemainingCommand.class,
|
||||||
ExploreCommand.class,
|
ExploreCommand.class,
|
||||||
MigrateCommand.class
|
ExploreOtherCommand.class,
|
||||||
|
MigrateCommand.class,
|
||||||
|
UpdateCommand.class
|
||||||
);
|
);
|
||||||
|
|
||||||
Commands.registerShortcut("maptool", NewCommand.class, "tomap");
|
Commands.registerShortcut("maptool", NewCommand.class, "tomap");
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
* Copyright or © or Copr. Moribus (2013)
|
* Copyright or © or Copr. Moribus (2013)
|
||||||
* Copyright or © or Copr. ProkopyL <prokopylmc@gmail.com> (2015)
|
* Copyright or © or Copr. ProkopyL <prokopylmc@gmail.com> (2015)
|
||||||
* Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 – 2020)
|
* Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 – 2020)
|
||||||
@ -42,16 +43,20 @@ public enum Permissions
|
|||||||
{
|
{
|
||||||
NEW("imageonmap.new", "imageonmap.userender"),
|
NEW("imageonmap.new", "imageonmap.userender"),
|
||||||
LIST("imageonmap.list"),
|
LIST("imageonmap.list"),
|
||||||
|
LISTOTHER("imageonmap.listother"),
|
||||||
GET("imageonmap.get"),
|
GET("imageonmap.get"),
|
||||||
|
GETOTHER("imageonmap.getother"),
|
||||||
RENAME("imageonmap.rename"),
|
RENAME("imageonmap.rename"),
|
||||||
|
REMOVE_SPLATTER_MAP("imageonmap.removesplattermap"),
|
||||||
DELETE("imageonmap.delete"),
|
DELETE("imageonmap.delete"),
|
||||||
|
DELETEOTHER("imageonmap.deleteother"),
|
||||||
|
UPDATE("imageonmap.update"),
|
||||||
|
UPDATEOTHER("imageonmap.updateother"),
|
||||||
ADMINISTRATIVE("imageonmap.administrative"),
|
ADMINISTRATIVE("imageonmap.administrative"),
|
||||||
BYPASS_SIZE("imageonmap.bypasssize"),
|
BYPASS_SIZE("imageonmap.bypasssize"),
|
||||||
GIVE("imageonmap.give")
|
GIVE("imageonmap.give")
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
private final String permission;
|
private final String permission;
|
||||||
private final String[] aliases;
|
private final String[] aliases;
|
||||||
|
|
||||||
|
@ -40,10 +40,13 @@ import fr.moribus.imageonmap.map.MapManager;
|
|||||||
import fr.zcraft.zlib.components.commands.Command;
|
import fr.zcraft.zlib.components.commands.Command;
|
||||||
import fr.zcraft.zlib.components.commands.CommandException;
|
import fr.zcraft.zlib.components.commands.CommandException;
|
||||||
import fr.zcraft.zlib.components.i18n.I;
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
|
import fr.zcraft.zlib.tools.PluginLogger;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
|
||||||
public abstract class IoMCommand extends Command
|
public abstract class IoMCommand extends Command
|
||||||
@ -52,7 +55,46 @@ public abstract class IoMCommand extends Command
|
|||||||
{
|
{
|
||||||
return getMapFromArgs(playerSender(), 0, true);
|
return getMapFromArgs(playerSender(), 0, true);
|
||||||
}
|
}
|
||||||
|
//TODO:Add the quote system to zlib and refactor this
|
||||||
|
protected ImageMap getMapFromArgs(Player player, int index) throws CommandException
|
||||||
|
{
|
||||||
|
if(args.length <= index) throwInvalidArgument(I.t("You need to give a map name."));
|
||||||
|
|
||||||
|
ImageMap map;
|
||||||
|
String mapName = args[index];
|
||||||
|
for (int i = index + 1, c = args.length; i < c; i++) {
|
||||||
|
mapName += " " + args[i];
|
||||||
|
}
|
||||||
|
String regex="((\"([^\\\"]*(\\\\\\\")*)*([^\\\\\\\"]\"))|([^\\\"\\s\\\\]*(\\\\\\s)*[\\\\]*)*\"?)";
|
||||||
|
|
||||||
|
Pattern pattern=Pattern.compile(regex);
|
||||||
|
Matcher matcher=pattern.matcher(mapName);
|
||||||
|
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
|
||||||
|
matcher.find();
|
||||||
|
result.append(matcher.group(0));
|
||||||
|
if(result!=null)
|
||||||
|
if(result.charAt(0)=='\"')
|
||||||
|
if(result.length()==1){
|
||||||
|
result.deleteCharAt(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if(result.charAt(result.length()-1)=='\"') {
|
||||||
|
result=result.deleteCharAt(result.length() - 1);
|
||||||
|
if(result!=null&&!result.equals("")&&result.charAt(0)=='\"')
|
||||||
|
mapName=result.deleteCharAt(0).toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mapName = mapName.trim();
|
||||||
|
|
||||||
|
map = MapManager.getMap(player.getUniqueId(), mapName);
|
||||||
|
|
||||||
|
if(map == null) error(I.t("This map does not exist."));
|
||||||
|
return map;
|
||||||
|
}
|
||||||
protected ImageMap getMapFromArgs(Player player, int index, boolean expand) throws CommandException
|
protected ImageMap getMapFromArgs(Player player, int index, boolean expand) throws CommandException
|
||||||
{
|
{
|
||||||
if(args.length <= index) throwInvalidArgument(I.t("You need to give a map name."));
|
if(args.length <= index) throwInvalidArgument(I.t("You need to give a map name."));
|
||||||
@ -69,7 +111,6 @@ public abstract class IoMCommand extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
mapName = mapName.trim();
|
mapName = mapName.trim();
|
||||||
|
|
||||||
map = MapManager.getMap(player.getUniqueId(), mapName);
|
map = MapManager.getMap(player.getUniqueId(), mapName);
|
||||||
|
|
||||||
if(map == null) error(I.t("This map does not exist."));
|
if(map == null) error(I.t("This map does not exist."));
|
||||||
|
@ -57,14 +57,9 @@ import java.util.List;
|
|||||||
@WithFlags ({"confirm"})
|
@WithFlags ({"confirm"})
|
||||||
public class DeleteCommand extends IoMCommand
|
public class DeleteCommand extends IoMCommand
|
||||||
{
|
{
|
||||||
@Override
|
|
||||||
protected void run() throws CommandException
|
|
||||||
{
|
|
||||||
ImageMap map = getMapFromArgs();
|
|
||||||
|
|
||||||
if (!hasFlag("confirm"))
|
private static RawText deleteMsg(Class klass,ImageMap map){
|
||||||
{
|
return new RawText(I.t("You are going to delete") + " ")
|
||||||
RawText msg = new RawText(I.t("You are going to delete") + " ")
|
|
||||||
.then(map.getId())
|
.then(map.getId())
|
||||||
.color(ChatColor.GOLD)
|
.color(ChatColor.GOLD)
|
||||||
.then(". " + I.t("Are you sure ? "))
|
.then(". " + I.t("Are you sure ? "))
|
||||||
@ -72,9 +67,18 @@ public class DeleteCommand extends IoMCommand
|
|||||||
.then(I.t("[Confirm]"))
|
.then(I.t("[Confirm]"))
|
||||||
.color(ChatColor.GREEN)
|
.color(ChatColor.GREEN)
|
||||||
.hover(new RawText(I.t("{red}This map will be deleted {bold}forever{red}!")))
|
.hover(new RawText(I.t("{red}This map will be deleted {bold}forever{red}!")))
|
||||||
.command(getClass(), map.getId(), "--confirm")
|
.command(klass, map.getId(), "--confirm")
|
||||||
.build();
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void run() throws CommandException
|
||||||
|
{
|
||||||
|
ImageMap map = getMapFromArgs();
|
||||||
|
|
||||||
|
if (!hasFlag("confirm"))
|
||||||
|
{
|
||||||
|
RawText msg = deleteMsg(getClass(),map);
|
||||||
send(msg);
|
send(msg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -89,7 +93,7 @@ public class DeleteCommand extends IoMCommand
|
|||||||
}
|
}
|
||||||
catch (MapManagerException ex)
|
catch (MapManagerException ex)
|
||||||
{
|
{
|
||||||
PluginLogger.warning("A non-existent map was requested to be deleted", ex);
|
PluginLogger.warning(I.t("A non-existent map was requested to be deleted", ex));
|
||||||
warning(I.t("This map does not exist."));
|
warning(I.t("This map does not exist."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* Copyright or © or Copr. Moribus (2013)
|
||||||
|
* Copyright or © or Copr. ProkopyL <prokopylmc@gmail.com> (2015)
|
||||||
|
* Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 – 2020)
|
||||||
|
* Copyright or © or Copr. Vlammar <valentin.jabre@gmail.com> (2019 – 2020)
|
||||||
|
*
|
||||||
|
* This software is a computer program whose purpose is to allow insertion of
|
||||||
|
* custom images in a Minecraft world.
|
||||||
|
*
|
||||||
|
* This software is governed by the CeCILL-B license under French law and
|
||||||
|
* abiding by the rules of distribution of free software. You can use,
|
||||||
|
* modify and/ or redistribute the software under the terms of the CeCILL-B
|
||||||
|
* license as circulated by CEA, CNRS and INRIA at the following URL
|
||||||
|
* "http://www.cecill.info".
|
||||||
|
*
|
||||||
|
* As a counterpart to the access to the source code and rights to copy,
|
||||||
|
* modify and redistribute granted by the license, users are provided only
|
||||||
|
* with a limited warranty and the software's author, the holder of the
|
||||||
|
* economic rights, and the successive licensors have only limited
|
||||||
|
* liability.
|
||||||
|
*
|
||||||
|
* In this respect, the user's attention is drawn to the risks associated
|
||||||
|
* with loading, using, modifying and/or developing or reproducing the
|
||||||
|
* software by the user in light of its specific status of free software,
|
||||||
|
* that may mean that it is complicated to manipulate, and that also
|
||||||
|
* therefore means that it is reserved for developers and experienced
|
||||||
|
* professionals having in-depth computer knowledge. Users are therefore
|
||||||
|
* encouraged to load and test the software's suitability as regards their
|
||||||
|
* requirements in conditions enabling the security of their systems and/or
|
||||||
|
* data to be ensured and, more generally, to use and operate it in the
|
||||||
|
* same conditions as regards security.
|
||||||
|
*
|
||||||
|
* The fact that you are presently reading this means that you have had
|
||||||
|
* knowledge of the CeCILL-B license and that you accept its terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package fr.moribus.imageonmap.commands.maptool;
|
||||||
|
|
||||||
|
import fr.moribus.imageonmap.Permissions;
|
||||||
|
import fr.moribus.imageonmap.commands.IoMCommand;
|
||||||
|
import fr.moribus.imageonmap.map.ImageMap;
|
||||||
|
import fr.moribus.imageonmap.map.MapManager;
|
||||||
|
import fr.moribus.imageonmap.map.MapManagerException;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandException;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandInfo;
|
||||||
|
import fr.zcraft.zlib.components.commands.WithFlags;
|
||||||
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
|
import fr.zcraft.zlib.tools.PluginLogger;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@CommandInfo (name = "deleteother", usageParameters = "<player name> <map name>")
|
||||||
|
@WithFlags ({"confirm"})
|
||||||
|
public class DeleteOtherCommand extends IoMCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected void run() throws CommandException
|
||||||
|
{
|
||||||
|
if(args.length < 2) {
|
||||||
|
warning(I.t("Not enough parameters! Usage: /maptool deleteother <playername> <mapname>"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = null;
|
||||||
|
UUID uuid = null;
|
||||||
|
OfflinePlayer op = null;
|
||||||
|
player = Bukkit.getPlayer(args[0]);
|
||||||
|
if(player == null){
|
||||||
|
op = Bukkit.getOfflinePlayer(args[0]);
|
||||||
|
if(op.hasPlayedBefore()) uuid = op.getUniqueId();
|
||||||
|
else warning(I.t("We've never seen that player before!"));
|
||||||
|
}
|
||||||
|
else uuid = player.getUniqueId();
|
||||||
|
if(player==null){
|
||||||
|
warning(I.t("Player not found"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ImageMap map = getMapFromArgs(player, 1, true);
|
||||||
|
|
||||||
|
if(player != null) MapManager.clear(player.getInventory(), map);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
MapManager.deleteMap(map);
|
||||||
|
info(I.t("{gray}Map successfully deleted."));
|
||||||
|
}
|
||||||
|
catch (MapManagerException ex)
|
||||||
|
{
|
||||||
|
PluginLogger.warning(I.t("A non-existent map was requested to be deleted", ex));
|
||||||
|
warning(ChatColor.RED+(I.t("This map does not exist.")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<String> complete() throws CommandException
|
||||||
|
{
|
||||||
|
if(args.length == 1)
|
||||||
|
return getMatchingMapNames(playerSender(), args[0]);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canExecute(CommandSender sender)
|
||||||
|
{
|
||||||
|
return Permissions.DELETEOTHER.grantedTo(sender);
|
||||||
|
}
|
||||||
|
}
|
@ -52,7 +52,7 @@ public class ExploreCommand extends IoMCommand
|
|||||||
@Override
|
@Override
|
||||||
protected void run() throws CommandException
|
protected void run() throws CommandException
|
||||||
{
|
{
|
||||||
Gui.open(playerSender(), new MapListGui());
|
Gui.open(playerSender(), new MapListGui(playerSender()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Copyright or © or Copr. Moribus (2013)
|
||||||
|
* Copyright or © or Copr. ProkopyL <prokopylmc@gmail.com> (2015)
|
||||||
|
* Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 – 2020)
|
||||||
|
* Copyright or © or Copr. Vlammar <valentin.jabre@gmail.com> (2019 – 2020)
|
||||||
|
*
|
||||||
|
* This software is a computer program whose purpose is to allow insertion of
|
||||||
|
* custom images in a Minecraft world.
|
||||||
|
*
|
||||||
|
* This software is governed by the CeCILL-B license under French law and
|
||||||
|
* abiding by the rules of distribution of free software. You can use,
|
||||||
|
* modify and/ or redistribute the software under the terms of the CeCILL-B
|
||||||
|
* license as circulated by CEA, CNRS and INRIA at the following URL
|
||||||
|
* "http://www.cecill.info".
|
||||||
|
*
|
||||||
|
* As a counterpart to the access to the source code and rights to copy,
|
||||||
|
* modify and redistribute granted by the license, users are provided only
|
||||||
|
* with a limited warranty and the software's author, the holder of the
|
||||||
|
* economic rights, and the successive licensors have only limited
|
||||||
|
* liability.
|
||||||
|
*
|
||||||
|
* In this respect, the user's attention is drawn to the risks associated
|
||||||
|
* with loading, using, modifying and/or developing or reproducing the
|
||||||
|
* software by the user in light of its specific status of free software,
|
||||||
|
* that may mean that it is complicated to manipulate, and that also
|
||||||
|
* therefore means that it is reserved for developers and experienced
|
||||||
|
* professionals having in-depth computer knowledge. Users are therefore
|
||||||
|
* encouraged to load and test the software's suitability as regards their
|
||||||
|
* requirements in conditions enabling the security of their systems and/or
|
||||||
|
* data to be ensured and, more generally, to use and operate it in the
|
||||||
|
* same conditions as regards security.
|
||||||
|
*
|
||||||
|
* The fact that you are presently reading this means that you have had
|
||||||
|
* knowledge of the CeCILL-B license and that you accept its terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package fr.moribus.imageonmap.commands.maptool;
|
||||||
|
|
||||||
|
import fr.moribus.imageonmap.Permissions;
|
||||||
|
import fr.moribus.imageonmap.commands.IoMCommand;
|
||||||
|
import fr.moribus.imageonmap.gui.MapListGui;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandException;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandInfo;
|
||||||
|
import fr.zcraft.zlib.components.gui.Gui;
|
||||||
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
|
import fr.zcraft.zlib.tools.PluginLogger;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
|
||||||
|
@CommandInfo (name = "exploreother")
|
||||||
|
public class ExploreOtherCommand extends IoMCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected void run() throws CommandException
|
||||||
|
{
|
||||||
|
if(args.length < 1) {
|
||||||
|
warning(I.t("Not enough parameters! Usage: /maptool exploreother <playername>"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String name=args[0];
|
||||||
|
Player sender=playerSender();
|
||||||
|
offlinePlayerParameter(0, uuid -> {
|
||||||
|
if(uuid==null){
|
||||||
|
try {
|
||||||
|
throwInvalidArgument(I.t("Player not found."));
|
||||||
|
} catch (CommandException e) {
|
||||||
|
PluginLogger.error("CommandException "+e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
|
||||||
|
if (offlinePlayer != null) {
|
||||||
|
Gui.open(sender, new MapListGui(offlinePlayer, name));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
PluginLogger.warning(I.t("Can't find player"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canExecute(CommandSender sender)
|
||||||
|
{
|
||||||
|
return Permissions.LISTOTHER.grantedTo(sender);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* Copyright or © or Copr. Moribus (2013)
|
||||||
|
* Copyright or © or Copr. ProkopyL <prokopylmc@gmail.com> (2015)
|
||||||
|
* Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 – 2020)
|
||||||
|
* Copyright or © or Copr. Vlammar <valentin.jabre@gmail.com> (2019 – 2020)
|
||||||
|
*
|
||||||
|
* This software is a computer program whose purpose is to allow insertion of
|
||||||
|
* custom images in a Minecraft world.
|
||||||
|
*
|
||||||
|
* This software is governed by the CeCILL-B license under French law and
|
||||||
|
* abiding by the rules of distribution of free software. You can use,
|
||||||
|
* modify and/ or redistribute the software under the terms of the CeCILL-B
|
||||||
|
* license as circulated by CEA, CNRS and INRIA at the following URL
|
||||||
|
* "http://www.cecill.info".
|
||||||
|
*
|
||||||
|
* As a counterpart to the access to the source code and rights to copy,
|
||||||
|
* modify and redistribute granted by the license, users are provided only
|
||||||
|
* with a limited warranty and the software's author, the holder of the
|
||||||
|
* economic rights, and the successive licensors have only limited
|
||||||
|
* liability.
|
||||||
|
*
|
||||||
|
* In this respect, the user's attention is drawn to the risks associated
|
||||||
|
* with loading, using, modifying and/or developing or reproducing the
|
||||||
|
* software by the user in light of its specific status of free software,
|
||||||
|
* that may mean that it is complicated to manipulate, and that also
|
||||||
|
* therefore means that it is reserved for developers and experienced
|
||||||
|
* professionals having in-depth computer knowledge. Users are therefore
|
||||||
|
* encouraged to load and test the software's suitability as regards their
|
||||||
|
* requirements in conditions enabling the security of their systems and/or
|
||||||
|
* data to be ensured and, more generally, to use and operate it in the
|
||||||
|
* same conditions as regards security.
|
||||||
|
*
|
||||||
|
* The fact that you are presently reading this means that you have had
|
||||||
|
* knowledge of the CeCILL-B license and that you accept its terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package fr.moribus.imageonmap.commands.maptool;
|
||||||
|
|
||||||
|
|
||||||
|
import fr.moribus.imageonmap.Permissions;
|
||||||
|
import fr.moribus.imageonmap.commands.IoMCommand;
|
||||||
|
import fr.moribus.imageonmap.map.ImageMap;
|
||||||
|
import fr.moribus.imageonmap.map.MapManager;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandException;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandInfo;
|
||||||
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
||||||
|
@CommandInfo (name = "getother", usageParameters = "<PlayerName> <MapName>")
|
||||||
|
public class GetOtherCommand extends IoMCommand
|
||||||
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void run() throws CommandException
|
||||||
|
{
|
||||||
|
if(args.length < 2) {
|
||||||
|
warning(I.t("Not enough parameters! Usage: /maptool getother <playername> <mapname>"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = null;
|
||||||
|
UUID uuid = null;
|
||||||
|
player = Bukkit.getPlayer(args[0]);
|
||||||
|
|
||||||
|
if(player == null){
|
||||||
|
OfflinePlayer op = Bukkit.getOfflinePlayer(args[0]);
|
||||||
|
if(op.hasPlayedBefore()) uuid = op.getUniqueId();
|
||||||
|
else warning(I.t("We've never seen that player before!"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
uuid = player.getUniqueId();
|
||||||
|
}
|
||||||
|
ImageMap map = null;
|
||||||
|
String mapName = "";
|
||||||
|
mapName = args[1];
|
||||||
|
if(args.length > 2) {
|
||||||
|
for(int i = 2; i < args.length; i++) {
|
||||||
|
mapName += (" " + args[i - 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
map = MapManager.getMap(uuid, mapName);
|
||||||
|
if(map!=null)
|
||||||
|
map.give(playerSender());
|
||||||
|
else{
|
||||||
|
warning(I.t("Unknown map {0}",mapName));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean canExecute(CommandSender sender)
|
||||||
|
{
|
||||||
|
return Permissions.GETOTHER.grantedTo(sender);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* Copyright or © or Copr. Moribus (2013)
|
||||||
|
* Copyright or © or Copr. ProkopyL <prokopylmc@gmail.com> (2015)
|
||||||
|
* Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 – 2020)
|
||||||
|
* Copyright or © or Copr. Vlammar <valentin.jabre@gmail.com> (2019 – 2020)
|
||||||
|
*
|
||||||
|
* This software is a computer program whose purpose is to allow insertion of
|
||||||
|
* custom images in a Minecraft world.
|
||||||
|
*
|
||||||
|
* This software is governed by the CeCILL-B license under French law and
|
||||||
|
* abiding by the rules of distribution of free software. You can use,
|
||||||
|
* modify and/ or redistribute the software under the terms of the CeCILL-B
|
||||||
|
* license as circulated by CEA, CNRS and INRIA at the following URL
|
||||||
|
* "http://www.cecill.info".
|
||||||
|
*
|
||||||
|
* As a counterpart to the access to the source code and rights to copy,
|
||||||
|
* modify and redistribute granted by the license, users are provided only
|
||||||
|
* with a limited warranty and the software's author, the holder of the
|
||||||
|
* economic rights, and the successive licensors have only limited
|
||||||
|
* liability.
|
||||||
|
*
|
||||||
|
* In this respect, the user's attention is drawn to the risks associated
|
||||||
|
* with loading, using, modifying and/or developing or reproducing the
|
||||||
|
* software by the user in light of its specific status of free software,
|
||||||
|
* that may mean that it is complicated to manipulate, and that also
|
||||||
|
* therefore means that it is reserved for developers and experienced
|
||||||
|
* professionals having in-depth computer knowledge. Users are therefore
|
||||||
|
* encouraged to load and test the software's suitability as regards their
|
||||||
|
* requirements in conditions enabling the security of their systems and/or
|
||||||
|
* data to be ensured and, more generally, to use and operate it in the
|
||||||
|
* same conditions as regards security.
|
||||||
|
*
|
||||||
|
* The fact that you are presently reading this means that you have had
|
||||||
|
* knowledge of the CeCILL-B license and that you accept its terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package fr.moribus.imageonmap.commands.maptool;
|
||||||
|
|
||||||
|
|
||||||
|
import fr.moribus.imageonmap.Permissions;
|
||||||
|
import fr.moribus.imageonmap.commands.IoMCommand;
|
||||||
|
import fr.moribus.imageonmap.map.ImageMap;
|
||||||
|
import fr.moribus.imageonmap.map.MapManager;
|
||||||
|
import fr.moribus.imageonmap.map.PosterMap;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandException;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandInfo;
|
||||||
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
|
import fr.zcraft.zlib.components.rawtext.RawText;
|
||||||
|
import fr.zcraft.zlib.components.rawtext.RawTextPart;
|
||||||
|
import fr.zcraft.zlib.tools.text.RawMessage;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
||||||
|
@CommandInfo (name = "listother", usageParameters = "<PlayerName>")
|
||||||
|
public class ListOtherCommand extends IoMCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected void run() throws CommandException
|
||||||
|
{
|
||||||
|
if(args.length < 1){
|
||||||
|
warning(I.t("Not enough parameters! Usage: /maptool listother <playername>"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Player player = null;
|
||||||
|
UUID uuid = null;
|
||||||
|
player = Bukkit.getPlayer(args[0]);
|
||||||
|
if(player == null){
|
||||||
|
OfflinePlayer op = Bukkit.getOfflinePlayer(args[0]);
|
||||||
|
if(op.hasPlayedBefore()) {
|
||||||
|
uuid = op.getUniqueId();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
warning(I.t("We've never seen that player before!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
uuid = player.getUniqueId();
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ImageMap> mapList = null;
|
||||||
|
try{
|
||||||
|
mapList = MapManager.getMapList(uuid);
|
||||||
|
}
|
||||||
|
catch(Exception e){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mapList.isEmpty())
|
||||||
|
{
|
||||||
|
info(I.t("No map found."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
info(I.tn("{white}{bold}{0} map found.", "{white}{bold}{0} maps found.", mapList.size()));
|
||||||
|
|
||||||
|
RawTextPart rawText = new RawText("");
|
||||||
|
rawText = addMap(rawText, mapList.get(0));
|
||||||
|
|
||||||
|
for(int i = 1, c = mapList.size(); i < c; i++)
|
||||||
|
{
|
||||||
|
rawText = rawText.then(", ").color(ChatColor.GRAY);
|
||||||
|
rawText = addMap(rawText, mapList.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
RawMessage.send(playerSender(), rawText.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
private RawTextPart<?> addMap(RawTextPart<?> rawText, ImageMap map)
|
||||||
|
{
|
||||||
|
final String size = map.getType() == ImageMap.Type.SINGLE ? "1 × 1" : ((PosterMap) map).getColumnCount() + " × " + ((PosterMap) map).getRowCount();
|
||||||
|
|
||||||
|
return rawText
|
||||||
|
.then(map.getId())
|
||||||
|
.color(ChatColor.WHITE)
|
||||||
|
.command(GetCommand.class, map.getId())
|
||||||
|
.hover(new RawText()
|
||||||
|
.then(map.getName()).style(ChatColor.BOLD, ChatColor.GREEN).then("\n")
|
||||||
|
.then(map.getId() + ", " + size).color(ChatColor.GRAY).then("\n\n")
|
||||||
|
.then(I.t("{white}Click{gray} to get this map"))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean canExecute(CommandSender sender)
|
||||||
|
{
|
||||||
|
return Permissions.LISTOTHER.grantedTo(sender);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 Moribus
|
||||||
|
* Copyright (C) 2015 ProkopyL <prokopylmc@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package fr.moribus.imageonmap.commands.maptool;
|
||||||
|
|
||||||
|
import fr.moribus.imageonmap.Permissions;
|
||||||
|
import fr.moribus.imageonmap.commands.IoMCommand;
|
||||||
|
import fr.moribus.imageonmap.map.ImageMap;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandException;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandInfo;
|
||||||
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@CommandInfo(name = "rename",usageParameters = "<original map name> <new map name>")
|
||||||
|
public class RenameCommand extends IoMCommand {
|
||||||
|
@Override
|
||||||
|
protected void run() throws CommandException
|
||||||
|
{
|
||||||
|
if(args.length != 4) {
|
||||||
|
warning(I.t("Not enough or too many arguments! Usage: /maptool rename <map name> <new map name>"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//if(args.length == 2)
|
||||||
|
//{
|
||||||
|
ImageMap map = getMapFromArgs();
|
||||||
|
map.rename(args[2]);
|
||||||
|
// } else {
|
||||||
|
// info(I.t("Not enough or too many arguments"));
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
protected List<String> complete() throws CommandException
|
||||||
|
{
|
||||||
|
|
||||||
|
if(args.length == 1)
|
||||||
|
return getMatchingMapNames(playerSender(), args[0]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean canExecute(CommandSender sender)
|
||||||
|
{
|
||||||
|
return Permissions.RENAME.grantedTo(sender);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,133 @@
|
|||||||
|
/*
|
||||||
|
* Copyright or © or Copr. Moribus (2013)
|
||||||
|
* Copyright or © or Copr. ProkopyL <prokopylmc@gmail.com> (2015)
|
||||||
|
* Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 – 2020)
|
||||||
|
* Copyright or © or Copr. Vlammar <valentin.jabre@gmail.com> (2019 – 2020)
|
||||||
|
*
|
||||||
|
* This software is a computer program whose purpose is to allow insertion of
|
||||||
|
* custom images in a Minecraft world.
|
||||||
|
*
|
||||||
|
* This software is governed by the CeCILL-B license under French law and
|
||||||
|
* abiding by the rules of distribution of free software. You can use,
|
||||||
|
* modify and/ or redistribute the software under the terms of the CeCILL-B
|
||||||
|
* license as circulated by CEA, CNRS and INRIA at the following URL
|
||||||
|
* "http://www.cecill.info".
|
||||||
|
*
|
||||||
|
* As a counterpart to the access to the source code and rights to copy,
|
||||||
|
* modify and redistribute granted by the license, users are provided only
|
||||||
|
* with a limited warranty and the software's author, the holder of the
|
||||||
|
* economic rights, and the successive licensors have only limited
|
||||||
|
* liability.
|
||||||
|
*
|
||||||
|
* In this respect, the user's attention is drawn to the risks associated
|
||||||
|
* with loading, using, modifying and/or developing or reproducing the
|
||||||
|
* software by the user in light of its specific status of free software,
|
||||||
|
* that may mean that it is complicated to manipulate, and that also
|
||||||
|
* therefore means that it is reserved for developers and experienced
|
||||||
|
* professionals having in-depth computer knowledge. Users are therefore
|
||||||
|
* encouraged to load and test the software's suitability as regards their
|
||||||
|
* requirements in conditions enabling the security of their systems and/or
|
||||||
|
* data to be ensured and, more generally, to use and operate it in the
|
||||||
|
* same conditions as regards security.
|
||||||
|
*
|
||||||
|
* The fact that you are presently reading this means that you have had
|
||||||
|
* knowledge of the CeCILL-B license and that you accept its terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package fr.moribus.imageonmap.commands.maptool;
|
||||||
|
|
||||||
|
import fr.moribus.imageonmap.Permissions;
|
||||||
|
import fr.moribus.imageonmap.commands.IoMCommand;
|
||||||
|
import fr.moribus.imageonmap.image.ImageRendererExecutor;
|
||||||
|
import fr.moribus.imageonmap.image.ImageUtils;
|
||||||
|
import fr.moribus.imageonmap.map.ImageMap;
|
||||||
|
import fr.moribus.imageonmap.map.MapManager;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandException;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandInfo;
|
||||||
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
|
import fr.zcraft.zlib.components.worker.WorkerCallback;
|
||||||
|
import fr.zcraft.zlib.tools.PluginLogger;
|
||||||
|
import fr.zcraft.zlib.tools.text.ActionBar;
|
||||||
|
import fr.zcraft.zlib.tools.text.MessageSender;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
@CommandInfo (name = "update", usageParameters = "<new url> [stretched|covered] \"<map name to update>\"")
|
||||||
|
public class UpdateCommand extends IoMCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected void run() throws CommandException
|
||||||
|
{
|
||||||
|
final Player player = playerSender();
|
||||||
|
ImageUtils.ScalingType scaling;
|
||||||
|
|
||||||
|
URL url;
|
||||||
|
|
||||||
|
if(args.length < 1) throwInvalidArgument(I.t("You must give an URL and a map name to update."));
|
||||||
|
if(args.length < 2) throwInvalidArgument(I.t("You must give a map name to update."));
|
||||||
|
|
||||||
|
switch(args[1]) {
|
||||||
|
|
||||||
|
case "stretched":
|
||||||
|
scaling = ImageUtils.ScalingType.STRETCHED;
|
||||||
|
break;
|
||||||
|
case "covered":
|
||||||
|
scaling = ImageUtils.ScalingType.COVERED;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
scaling = ImageUtils.ScalingType.CONTAINED;
|
||||||
|
}
|
||||||
|
ImageMap map;
|
||||||
|
if(scaling.equals(ImageUtils.ScalingType.CONTAINED))
|
||||||
|
map=getMapFromArgs(player,1);
|
||||||
|
else
|
||||||
|
map=getMapFromArgs(player,2);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
url = new URL(args[0]);
|
||||||
|
MapManager.load();
|
||||||
|
|
||||||
|
Integer[] size={1,1};
|
||||||
|
if(map.getType()== ImageMap.Type.POSTER)
|
||||||
|
size=map.getSize( new HashMap<String, Object>(),map.getUserUUID(),map.getId());
|
||||||
|
int width=size[0],height=size[1];
|
||||||
|
try {
|
||||||
|
ActionBar.sendPermanentMessage(player, ChatColor.DARK_GREEN + I.t("Updating..."));
|
||||||
|
ImageRendererExecutor.update(url, scaling, player.getUniqueId(), map, width, height, new WorkerCallback<ImageMap>() {
|
||||||
|
@Override
|
||||||
|
public void finished(ImageMap result) {
|
||||||
|
ActionBar.removeMessage(player);
|
||||||
|
MessageSender.sendActionBarMessage(player, ChatColor.DARK_GREEN + I.t("The map was updated using the new image!"));
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void errored(Throwable exception) {
|
||||||
|
player.sendMessage(I.t("{ce}Map rendering failed: {0}", exception.getMessage()));
|
||||||
|
|
||||||
|
PluginLogger.warning("Rendering from {0} failed: {1}: {2}",
|
||||||
|
player.getName(),
|
||||||
|
exception.getClass().getCanonicalName(),
|
||||||
|
exception.getMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
ActionBar.removeMessage(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(MalformedURLException ex)
|
||||||
|
{
|
||||||
|
throwInvalidArgument(I.t("Invalid URL."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canExecute(CommandSender sender)
|
||||||
|
{
|
||||||
|
return Permissions.UPDATE.grantedTo(sender);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* Copyright or © or Copr. Moribus (2013)
|
||||||
|
* Copyright or © or Copr. ProkopyL <prokopylmc@gmail.com> (2015)
|
||||||
|
* Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 – 2020)
|
||||||
|
* Copyright or © or Copr. Vlammar <valentin.jabre@gmail.com> (2019 – 2020)
|
||||||
|
*
|
||||||
|
* This software is a computer program whose purpose is to allow insertion of
|
||||||
|
* custom images in a Minecraft world.
|
||||||
|
*
|
||||||
|
* This software is governed by the CeCILL-B license under French law and
|
||||||
|
* abiding by the rules of distribution of free software. You can use,
|
||||||
|
* modify and/ or redistribute the software under the terms of the CeCILL-B
|
||||||
|
* license as circulated by CEA, CNRS and INRIA at the following URL
|
||||||
|
* "http://www.cecill.info".
|
||||||
|
*
|
||||||
|
* As a counterpart to the access to the source code and rights to copy,
|
||||||
|
* modify and redistribute granted by the license, users are provided only
|
||||||
|
* with a limited warranty and the software's author, the holder of the
|
||||||
|
* economic rights, and the successive licensors have only limited
|
||||||
|
* liability.
|
||||||
|
*
|
||||||
|
* In this respect, the user's attention is drawn to the risks associated
|
||||||
|
* with loading, using, modifying and/or developing or reproducing the
|
||||||
|
* software by the user in light of its specific status of free software,
|
||||||
|
* that may mean that it is complicated to manipulate, and that also
|
||||||
|
* therefore means that it is reserved for developers and experienced
|
||||||
|
* professionals having in-depth computer knowledge. Users are therefore
|
||||||
|
* encouraged to load and test the software's suitability as regards their
|
||||||
|
* requirements in conditions enabling the security of their systems and/or
|
||||||
|
* data to be ensured and, more generally, to use and operate it in the
|
||||||
|
* same conditions as regards security.
|
||||||
|
*
|
||||||
|
* The fact that you are presently reading this means that you have had
|
||||||
|
* knowledge of the CeCILL-B license and that you accept its terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package fr.moribus.imageonmap.commands.maptool;
|
||||||
|
|
||||||
|
import fr.moribus.imageonmap.Permissions;
|
||||||
|
import fr.moribus.imageonmap.commands.IoMCommand;
|
||||||
|
import fr.moribus.imageonmap.image.ImageRendererExecutor;
|
||||||
|
import fr.moribus.imageonmap.image.ImageUtils;
|
||||||
|
import fr.moribus.imageonmap.map.ImageMap;
|
||||||
|
import fr.moribus.imageonmap.map.MapManager;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandException;
|
||||||
|
import fr.zcraft.zlib.components.commands.CommandInfo;
|
||||||
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
|
import fr.zcraft.zlib.components.worker.WorkerCallback;
|
||||||
|
import fr.zcraft.zlib.tools.PluginLogger;
|
||||||
|
import fr.zcraft.zlib.tools.text.ActionBar;
|
||||||
|
import fr.zcraft.zlib.tools.text.MessageSender;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
@CommandInfo (name = "update", usageParameters = "<new url> [stretched|covered] \"<map name to update>\"")
|
||||||
|
public class UpdateOtherCommand extends IoMCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
protected void run() throws CommandException
|
||||||
|
{
|
||||||
|
//TODO separer les deux update(update et update other)
|
||||||
|
final Player player = playerSender();
|
||||||
|
ImageUtils.ScalingType scaling;
|
||||||
|
|
||||||
|
URL url;
|
||||||
|
|
||||||
|
if(args.length < 1) throwInvalidArgument(I.t("You must give an URL and a map name to update."));
|
||||||
|
if(args.length < 2) throwInvalidArgument(I.t("You must give a map name to update."));
|
||||||
|
|
||||||
|
switch(args[1]) {
|
||||||
|
|
||||||
|
case "stretched":
|
||||||
|
scaling = ImageUtils.ScalingType.STRETCHED;
|
||||||
|
break;
|
||||||
|
case "covered":
|
||||||
|
scaling = ImageUtils.ScalingType.COVERED;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
scaling = ImageUtils.ScalingType.CONTAINED;
|
||||||
|
}
|
||||||
|
ImageMap map;
|
||||||
|
if(scaling.equals(ImageUtils.ScalingType.CONTAINED))
|
||||||
|
map=getMapFromArgs(player,1);
|
||||||
|
else
|
||||||
|
map=getMapFromArgs(player,2);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
url = new URL(args[0]);
|
||||||
|
MapManager.load();
|
||||||
|
|
||||||
|
Integer[] size={1,1};
|
||||||
|
if(map.getType()== ImageMap.Type.POSTER)
|
||||||
|
size=map.getSize( new HashMap<String, Object>(),map.getUserUUID(),map.getId());
|
||||||
|
int width=size[0],height=size[1];
|
||||||
|
try {
|
||||||
|
ActionBar.sendPermanentMessage(player, ChatColor.DARK_GREEN + I.t("Updating..."));
|
||||||
|
ImageRendererExecutor.update(url, scaling, player.getUniqueId(), map, width, height, new WorkerCallback<ImageMap>() {
|
||||||
|
@Override
|
||||||
|
public void finished(ImageMap result) {
|
||||||
|
ActionBar.removeMessage(player);
|
||||||
|
MessageSender.sendActionBarMessage(player, ChatColor.DARK_GREEN + I.t("The map was updated using the new image!"));
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void errored(Throwable exception) {
|
||||||
|
player.sendMessage(I.t("{ce}Map rendering failed: {0}", exception.getMessage()));
|
||||||
|
|
||||||
|
PluginLogger.warning("Rendering from {0} failed: {1}: {2}",
|
||||||
|
player.getName(),
|
||||||
|
exception.getClass().getCanonicalName(),
|
||||||
|
exception.getMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
ActionBar.removeMessage(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(MalformedURLException ex)
|
||||||
|
{
|
||||||
|
throwInvalidArgument(I.t("Invalid URL."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canExecute(CommandSender sender)
|
||||||
|
{
|
||||||
|
return Permissions.UPDATEOTHER.grantedTo(sender);
|
||||||
|
}
|
||||||
|
}
|
@ -174,6 +174,7 @@ public class ConfirmDeleteMapGui extends ActionGui
|
|||||||
@GuiAction ("delete")
|
@GuiAction ("delete")
|
||||||
protected void delete()
|
protected void delete()
|
||||||
{
|
{
|
||||||
|
|
||||||
// Does the player still have the permission to delete a map?
|
// Does the player still have the permission to delete a map?
|
||||||
if (!Permissions.DELETE.grantedTo(getPlayer()))
|
if (!Permissions.DELETE.grantedTo(getPlayer()))
|
||||||
{
|
{
|
||||||
|
@ -47,21 +47,25 @@ import fr.zcraft.zlib.components.gui.GuiAction;
|
|||||||
import fr.zcraft.zlib.components.gui.PromptGui;
|
import fr.zcraft.zlib.components.gui.PromptGui;
|
||||||
import fr.zcraft.zlib.components.i18n.I;
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
import fr.zcraft.zlib.tools.Callback;
|
import fr.zcraft.zlib.tools.Callback;
|
||||||
|
import fr.zcraft.zlib.tools.PluginLogger;
|
||||||
import fr.zcraft.zlib.tools.items.ItemStackBuilder;
|
import fr.zcraft.zlib.tools.items.ItemStackBuilder;
|
||||||
import org.apache.commons.lang.ArrayUtils;
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
|
||||||
public class MapDetailGui extends ExplorerGui<Integer>
|
public class MapDetailGui extends ExplorerGui<Integer>
|
||||||
{
|
{
|
||||||
private final ImageMap map;
|
private final ImageMap map;
|
||||||
|
private OfflinePlayer p;
|
||||||
|
private String name;
|
||||||
|
|
||||||
public MapDetailGui(ImageMap map)
|
public MapDetailGui(ImageMap map, OfflinePlayer p, String name){
|
||||||
{
|
|
||||||
this.map=map;
|
this.map=map;
|
||||||
|
this.p=p;
|
||||||
|
this.name=name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ItemStack getViewItem(int x, int y)
|
protected ItemStack getViewItem(int x, int y)
|
||||||
{
|
{
|
||||||
@ -102,7 +106,7 @@ public class MapDetailGui extends ExplorerGui<Integer>
|
|||||||
|
|
||||||
if (map instanceof SingleMap)
|
if (map instanceof SingleMap)
|
||||||
{
|
{
|
||||||
return MapItemManager.createMapItem((SingleMap)map);
|
return MapItemManager.createMapItem((SingleMap)map,true);
|
||||||
}
|
}
|
||||||
else if (map instanceof PosterMap)
|
else if (map instanceof PosterMap)
|
||||||
{
|
{
|
||||||
@ -136,7 +140,12 @@ public class MapDetailGui extends ExplorerGui<Integer>
|
|||||||
protected void onUpdate()
|
protected void onUpdate()
|
||||||
{
|
{
|
||||||
/// Title of the map details GUI
|
/// Title of the map details GUI
|
||||||
|
if(p.getUniqueId().equals(getPlayer().getUniqueId())) {
|
||||||
setTitle(I.t(getPlayerLocale(), "Your maps » {black}{0}", map.getName()));
|
setTitle(I.t(getPlayerLocale(), "Your maps » {black}{0}", map.getName()));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
setTitle(I.t(getPlayerLocale(), "{1}'s maps » {black}{0}", map.getName(),name));
|
||||||
|
}
|
||||||
setKeepHorizontalScrollingSpace(true);
|
setKeepHorizontalScrollingSpace(true);
|
||||||
|
|
||||||
if (map instanceof PosterMap)
|
if (map instanceof PosterMap)
|
||||||
@ -242,7 +251,6 @@ public class MapDetailGui extends ExplorerGui<Integer>
|
|||||||
update();
|
update();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Gui.open(getPlayer(), new ConfirmDeleteMapGui(map), this);
|
Gui.open(getPlayer(), new ConfirmDeleteMapGui(map), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,12 +49,25 @@ import fr.zcraft.zlib.components.i18n.I;
|
|||||||
import fr.zcraft.zlib.tools.items.ItemStackBuilder;
|
import fr.zcraft.zlib.tools.items.ItemStackBuilder;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.MapMeta;
|
import org.bukkit.inventory.meta.MapMeta;
|
||||||
|
|
||||||
|
|
||||||
public class MapListGui extends ExplorerGui<ImageMap>
|
public class MapListGui extends ExplorerGui<ImageMap>
|
||||||
{
|
{
|
||||||
|
private OfflinePlayer p;
|
||||||
|
private String name;
|
||||||
|
public MapListGui(Player sender){
|
||||||
|
this.p=sender;
|
||||||
|
this.name=sender.getName();
|
||||||
|
}
|
||||||
|
public MapListGui(OfflinePlayer p,String name){
|
||||||
|
this.p=p;
|
||||||
|
this.name=name;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ItemStack getViewItem(ImageMap map)
|
protected ItemStack getViewItem(ImageMap map)
|
||||||
{
|
{
|
||||||
@ -106,23 +119,29 @@ public class MapListGui extends ExplorerGui<ImageMap>
|
|||||||
@Override
|
@Override
|
||||||
protected ItemStack getEmptyViewItem()
|
protected ItemStack getEmptyViewItem()
|
||||||
{
|
{
|
||||||
ItemStackBuilder builder = new ItemStackBuilder(Material.BARRIER)
|
ItemStackBuilder builder = new ItemStackBuilder(Material.BARRIER);
|
||||||
.title(I.tl(getPlayerLocale(), "{red}You don't have any map."));
|
if(p.getUniqueId().equals(getPlayer().getUniqueId())) {
|
||||||
|
|
||||||
|
builder.title(I.tl(getPlayerLocale(), "{red}You don't have any map."));
|
||||||
|
|
||||||
if (Permissions.NEW.grantedTo(getPlayer()))
|
if (Permissions.NEW.grantedTo(getPlayer()))
|
||||||
builder.longLore(I.tl(getPlayerLocale(), "{gray}Get started by creating a new one using {white}/tomap <URL> [resize]{gray}!"));
|
builder.longLore(I.tl(getPlayerLocale(), "{gray}Get started by creating a new one using {white}/tomap <URL> [resize]{gray}!"));
|
||||||
else
|
else
|
||||||
builder.longLore(I.tl(getPlayerLocale(), "{gray}Unfortunately, you are not allowed to create one."));
|
builder.longLore(I.tl(getPlayerLocale(), "{gray}Unfortunately, you are not allowed to create one."));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
builder.title(I.tl(getPlayerLocale(), "{red}{0} doesn't have any map.",name));
|
||||||
|
}
|
||||||
return builder.item();
|
return builder.item();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onRightClick(ImageMap data)
|
protected void onRightClick(ImageMap data)
|
||||||
{
|
{
|
||||||
Gui.open(getPlayer(), new MapDetailGui(data), this);
|
Gui.open(getPlayer(), new MapDetailGui(data,getPlayer(),name), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ItemStack getPickedUpItem(ImageMap map)
|
protected ItemStack getPickedUpItem(ImageMap map)
|
||||||
{
|
{
|
||||||
@ -131,7 +150,7 @@ public class MapListGui extends ExplorerGui<ImageMap>
|
|||||||
|
|
||||||
if (map instanceof SingleMap)
|
if (map instanceof SingleMap)
|
||||||
{
|
{
|
||||||
return MapItemManager.createMapItem(map.getMapsIDs()[0], map.getName(), false);
|
return MapItemManager.createMapItem(map.getMapsIDs()[0], map.getName(), false,true);
|
||||||
}
|
}
|
||||||
else if (map instanceof PosterMap)
|
else if (map instanceof PosterMap)
|
||||||
{
|
{
|
||||||
@ -151,19 +170,22 @@ public class MapListGui extends ExplorerGui<ImageMap>
|
|||||||
@Override
|
@Override
|
||||||
protected void onUpdate()
|
protected void onUpdate()
|
||||||
{
|
{
|
||||||
ImageMap[] maps = MapManager.getMaps(getPlayer().getUniqueId());
|
ImageMap[] maps = MapManager.getMaps(p.getUniqueId());
|
||||||
setData(maps);
|
setData(maps);
|
||||||
|
|
||||||
/// The maps list GUI title
|
/// The maps list GUI title
|
||||||
|
//Equal if the person who send the command is the owner of the mapList
|
||||||
|
if(p.getUniqueId().equals(getPlayer().getUniqueId()))
|
||||||
setTitle(I.tl(getPlayerLocale(), "{black}Your maps {reset}({0})", maps.length));
|
setTitle(I.tl(getPlayerLocale(), "{black}Your maps {reset}({0})", maps.length));
|
||||||
|
else
|
||||||
|
setTitle(I.tl(getPlayerLocale(), "{black}{1}'s maps {reset}({0})", maps.length, name ));
|
||||||
|
|
||||||
setKeepHorizontalScrollingSpace(true);
|
setKeepHorizontalScrollingSpace(true);
|
||||||
|
|
||||||
|
|
||||||
/* ** Statistics ** */
|
/* ** Statistics ** */
|
||||||
|
int imagesCount = MapManager.getMapList(p.getUniqueId()).size();
|
||||||
int imagesCount = MapManager.getMapList(getPlayer().getUniqueId()).size();
|
int mapPartCount = MapManager.getMapPartCount(p.getUniqueId());
|
||||||
int mapPartCount = MapManager.getMapPartCount(getPlayer().getUniqueId());
|
|
||||||
|
|
||||||
int mapGlobalLimit = PluginConfiguration.MAP_GLOBAL_LIMIT.get();
|
int mapGlobalLimit = PluginConfiguration.MAP_GLOBAL_LIMIT.get();
|
||||||
int mapPersonalLimit = PluginConfiguration.MAP_PLAYER_LIMIT.get();
|
int mapPersonalLimit = PluginConfiguration.MAP_PLAYER_LIMIT.get();
|
||||||
|
@ -68,7 +68,6 @@ public class ImageRendererExecutor extends Worker {
|
|||||||
if (connection instanceof HttpURLConnection) {
|
if (connection instanceof HttpURLConnection) {
|
||||||
final HttpURLConnection httpConnection = (HttpURLConnection) connection;
|
final HttpURLConnection httpConnection = (HttpURLConnection) connection;
|
||||||
final int httpCode = httpConnection.getResponseCode();
|
final int httpCode = httpConnection.getResponseCode();
|
||||||
|
|
||||||
if ((httpCode / 100) != 2) {
|
if ((httpCode / 100) != 2) {
|
||||||
throw new IOException(I.t("HTTP error: {0} {1}", httpCode, httpConnection.getResponseMessage()));
|
throw new IOException(I.t("HTTP error: {0} {1}", httpCode, httpConnection.getResponseMessage()));
|
||||||
}
|
}
|
||||||
@ -76,8 +75,30 @@ public class ImageRendererExecutor extends Worker {
|
|||||||
return connection;
|
return connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void render(final URL url, final ImageUtils.ScalingType scaling, final UUID playerUUID, final int width, final int height, WorkerCallback<ImageMap> callback) {
|
static private void checkSizeLimit(final UUID playerUUID, final BufferedImage image) throws IOException {
|
||||||
submitQuery(new WorkerRunnable<ImageMap>() {
|
if ((PluginConfiguration.LIMIT_SIZE_X.get() > 0 || PluginConfiguration.LIMIT_SIZE_Y.get() > 0) && !Permissions.BYPASS_SIZE.grantedTo(Bukkit.getPlayer(playerUUID)))
|
||||||
|
{
|
||||||
|
if (PluginConfiguration.LIMIT_SIZE_X.get() > 0)
|
||||||
|
{
|
||||||
|
if (image.getWidth() > PluginConfiguration.LIMIT_SIZE_X.get())
|
||||||
|
throw new IOException(I.t("The image is too wide!"));
|
||||||
|
}
|
||||||
|
if (PluginConfiguration.LIMIT_SIZE_Y.get() > 0)
|
||||||
|
{
|
||||||
|
if (image.getHeight() > PluginConfiguration.LIMIT_SIZE_Y.get())
|
||||||
|
throw new IOException(I.t("The image is too tall!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum extension{
|
||||||
|
png, jpg, jpeg, gif
|
||||||
|
}
|
||||||
|
|
||||||
|
static public void render(final URL url, final ImageUtils.ScalingType scaling, final UUID playerUUID, final int width, final int height, WorkerCallback<ImageMap> callback)
|
||||||
|
{
|
||||||
|
submitQuery(new WorkerRunnable<ImageMap>()
|
||||||
|
{
|
||||||
@Override
|
@Override
|
||||||
public ImageMap run() throws Throwable {
|
public ImageMap run() throws Throwable {
|
||||||
|
|
||||||
@ -110,29 +131,16 @@ public class ImageRendererExecutor extends Worker {
|
|||||||
}
|
}
|
||||||
//If not an Imgur link
|
//If not an Imgur link
|
||||||
else {
|
else {
|
||||||
|
|
||||||
//Try connecting
|
//Try connecting
|
||||||
URLConnection connection = connecting(url);
|
URLConnection connection = connecting(url);
|
||||||
|
|
||||||
final InputStream stream = connection.getInputStream();
|
final InputStream stream = connection.getInputStream();
|
||||||
|
|
||||||
image = ImageIO.read(stream);
|
image = ImageIO.read(stream);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (image == null) throw new IOException(I.t("The given URL is not a valid image"));
|
if (image == null) throw new IOException(I.t("The given URL is not a valid image"));
|
||||||
// Limits are in place and the player does NOT have rights to avoid them.
|
// Limits are in place and the player does NOT have rights to avoid them.
|
||||||
if ((PluginConfiguration.LIMIT_SIZE_X.get() > 0 || PluginConfiguration.LIMIT_SIZE_Y.get() > 0) && !Permissions.BYPASS_SIZE.grantedTo(Bukkit.getPlayer(playerUUID))) {
|
checkSizeLimit(playerUUID, image);
|
||||||
if (PluginConfiguration.LIMIT_SIZE_X.get() > 0) {
|
|
||||||
if (image.getWidth() > PluginConfiguration.LIMIT_SIZE_X.get())
|
|
||||||
throw new IOException(I.t("The image is too wide!"));
|
|
||||||
}
|
|
||||||
if (PluginConfiguration.LIMIT_SIZE_Y.get() > 0) {
|
|
||||||
if (image.getHeight() > PluginConfiguration.LIMIT_SIZE_Y.get())
|
|
||||||
throw new IOException(I.t("The image is too tall!"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (scaling != ImageUtils.ScalingType.NONE && height <= 1 && width <= 1) {
|
if (scaling != ImageUtils.ScalingType.NONE && height <= 1 && width <= 1) {
|
||||||
ImageMap ret = renderSingle(scaling.resize(image, ImageMap.WIDTH, ImageMap.HEIGHT), playerUUID);
|
ImageMap ret = renderSingle(scaling.resize(image, ImageMap.WIDTH, ImageMap.HEIGHT), playerUUID);
|
||||||
image.flush();//Safe to free
|
image.flush();//Safe to free
|
||||||
@ -140,13 +148,62 @@ public class ImageRendererExecutor extends Worker {
|
|||||||
}
|
}
|
||||||
final BufferedImage resizedImage = scaling.resize(image, ImageMap.WIDTH * width, ImageMap.HEIGHT * height);
|
final BufferedImage resizedImage = scaling.resize(image, ImageMap.WIDTH * width, ImageMap.HEIGHT * height);
|
||||||
image.flush();//Safe to free
|
image.flush();//Safe to free
|
||||||
|
|
||||||
return renderPoster(resizedImage, playerUUID);
|
return renderPoster(resizedImage, playerUUID);
|
||||||
}
|
}
|
||||||
}, callback);
|
}, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
static private ImageMap renderSingle(final BufferedImage image, final UUID playerUUID) throws Throwable {
|
public static void update(final URL url, final ImageUtils.ScalingType scaling, final UUID playerUUID, final ImageMap map, final int width, final int height, WorkerCallback<ImageMap> callback) {
|
||||||
|
submitQuery(new WorkerRunnable<ImageMap>()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public ImageMap run() throws Throwable
|
||||||
|
{
|
||||||
|
|
||||||
|
final URLConnection connection = connecting(url);
|
||||||
|
|
||||||
|
final InputStream stream = connection.getInputStream();
|
||||||
|
final BufferedImage image = ImageIO.read(stream);
|
||||||
|
stream.close();
|
||||||
|
|
||||||
|
if (image == null) throw new IOException(I.t("The given URL is not a valid image"));
|
||||||
|
|
||||||
|
// Limits are in place and the player does NOT have rights to avoid them.
|
||||||
|
checkSizeLimit(playerUUID, image);
|
||||||
|
|
||||||
|
updateMap(scaling.resize(image, width*128, height*128),playerUUID,map.getMapsIDs());
|
||||||
|
return map;
|
||||||
|
|
||||||
|
}
|
||||||
|
}, callback);
|
||||||
|
|
||||||
|
}
|
||||||
|
static private void updateMap(final BufferedImage image, final UUID playerUUID,int[] mapsIDs) throws Throwable
|
||||||
|
{
|
||||||
|
|
||||||
|
final PosterImage poster = new PosterImage(image);
|
||||||
|
poster.splitImages();
|
||||||
|
|
||||||
|
ImageIOExecutor.saveImage(mapsIDs, poster);
|
||||||
|
|
||||||
|
if (PluginConfiguration.SAVE_FULL_IMAGE.get())
|
||||||
|
{
|
||||||
|
ImageIOExecutor.saveImage(ImageMap.getFullImageFile(mapsIDs[0], mapsIDs[mapsIDs.length - 1]), image);
|
||||||
|
}
|
||||||
|
|
||||||
|
submitToMainThread(new Callable<Void>()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public Void call() throws Exception
|
||||||
|
{
|
||||||
|
Renderer.installRenderer(poster, mapsIDs);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static private ImageMap renderSingle(final BufferedImage image, final UUID playerUUID) throws Throwable
|
||||||
|
{
|
||||||
MapManager.checkMapLimit(1, playerUUID);
|
MapManager.checkMapLimit(1, playerUUID);
|
||||||
final Future<Integer> futureMapID = submitToMainThread(new Callable<Integer>() {
|
final Future<Integer> futureMapID = submitToMainThread(new Callable<Integer>() {
|
||||||
@Override
|
@Override
|
||||||
@ -178,6 +235,8 @@ public class ImageRendererExecutor extends Worker {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
poster.splitImages();
|
poster.splitImages();
|
||||||
|
final int[] mapsIDs = futureMapsIds.get();
|
||||||
|
ImageIOExecutor.saveImage(mapsIDs, poster);
|
||||||
|
|
||||||
final int[] mapsIDs = futureMapsIds.get();
|
final int[] mapsIDs = futureMapsIds.get();
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ import fr.moribus.imageonmap.ImageOnMap;
|
|||||||
import fr.moribus.imageonmap.ui.MapItemManager;
|
import fr.moribus.imageonmap.ui.MapItemManager;
|
||||||
import fr.zcraft.zlib.components.i18n.I;
|
import fr.zcraft.zlib.components.i18n.I;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.InvalidConfigurationException;
|
import org.bukkit.configuration.InvalidConfigurationException;
|
||||||
import org.bukkit.configuration.serialization.ConfigurationSerializable;
|
import org.bukkit.configuration.serialization.ConfigurationSerializable;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -47,6 +48,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -151,6 +153,22 @@ public abstract class ImageMap implements ConfigurationSerializable
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public Integer[] getSize(Map<String, Object> map, UUID playerUUID, String id){
|
||||||
|
|
||||||
|
ConfigurationSection section=MapManager.getPlayerMapStore(playerUUID).getToolConfig().getConfigurationSection("PlayerMapStore");
|
||||||
|
|
||||||
|
if(section == null) return null;
|
||||||
|
List<Map<String, Object>> list = (List<Map<String, Object>>) section.getList("mapList");
|
||||||
|
if(list == null) return null;
|
||||||
|
|
||||||
|
for(Map<String, Object> tMap : list)
|
||||||
|
{
|
||||||
|
if(tMap.get("id").equals(id)) {
|
||||||
|
return new Integer[]{(Integer)tMap.get("columns"), (Integer)tMap.get("rows")};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
static protected <T> T getFieldValue(Map<String, Object> map, String fieldName) throws InvalidConfigurationException
|
static protected <T> T getFieldValue(Map<String, Object> map, String fieldName) throws InvalidConfigurationException
|
||||||
{
|
{
|
||||||
T value = getNullableFieldValue(map, fieldName);
|
T value = getNullableFieldValue(map, fieldName);
|
||||||
|
@ -376,7 +376,7 @@ abstract public class MapManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static private PlayerMapStore getPlayerMapStore(UUID playerUUID)
|
static public PlayerMapStore getPlayerMapStore(UUID playerUUID)
|
||||||
{
|
{
|
||||||
PlayerMapStore store;
|
PlayerMapStore store;
|
||||||
synchronized(playerMaps)
|
synchronized(playerMaps)
|
||||||
|
@ -256,7 +256,7 @@ public class PlayerMapStore implements ConfigurationSerializable
|
|||||||
private FileConfiguration mapConfig = null;
|
private FileConfiguration mapConfig = null;
|
||||||
private File mapsFile = null;
|
private File mapsFile = null;
|
||||||
|
|
||||||
private FileConfiguration getToolConfig()
|
public FileConfiguration getToolConfig()
|
||||||
{
|
{
|
||||||
if(mapConfig == null) load();
|
if(mapConfig == null) load();
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
package fr.moribus.imageonmap.ui;
|
package fr.moribus.imageonmap.ui;
|
||||||
|
|
||||||
|
import fr.moribus.imageonmap.Permissions;
|
||||||
import fr.moribus.imageonmap.map.ImageMap;
|
import fr.moribus.imageonmap.map.ImageMap;
|
||||||
import fr.moribus.imageonmap.map.MapManager;
|
import fr.moribus.imageonmap.map.MapManager;
|
||||||
import fr.moribus.imageonmap.map.PosterMap;
|
import fr.moribus.imageonmap.map.PosterMap;
|
||||||
@ -45,6 +46,7 @@ import fr.zcraft.zlib.core.ZLib;
|
|||||||
import fr.zcraft.zlib.tools.items.ItemStackBuilder;
|
import fr.zcraft.zlib.tools.items.ItemStackBuilder;
|
||||||
import fr.zcraft.zlib.tools.items.ItemUtils;
|
import fr.zcraft.zlib.tools.items.ItemUtils;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -87,7 +89,7 @@ public class MapItemManager implements Listener
|
|||||||
|
|
||||||
static public boolean give(Player player, SingleMap map)
|
static public boolean give(Player player, SingleMap map)
|
||||||
{
|
{
|
||||||
return give(player, createMapItem(map));
|
return give(player, createMapItem(map,true));
|
||||||
}
|
}
|
||||||
|
|
||||||
static public boolean give(Player player, PosterMap map)
|
static public boolean give(Player player, PosterMap map)
|
||||||
@ -137,12 +139,16 @@ public class MapItemManager implements Listener
|
|||||||
|
|
||||||
return !given;
|
return !given;
|
||||||
}
|
}
|
||||||
|
|
||||||
static public ItemStack createMapItem(SingleMap map)
|
static public ItemStack createMapItem(SingleMap map)
|
||||||
{
|
{
|
||||||
return createMapItem(map.getMapsIDs()[0], map.getName(), false);
|
return createMapItem(map.getMapsIDs()[0], map.getName(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public ItemStack createMapItem(SingleMap map, boolean goldTitle)
|
||||||
|
{
|
||||||
|
return createMapItem(map.getMapsIDs()[0], map.getName(), false, goldTitle);
|
||||||
|
}
|
||||||
|
|
||||||
static public ItemStack createMapItem(PosterMap map, int index)
|
static public ItemStack createMapItem(PosterMap map, int index)
|
||||||
{
|
{
|
||||||
return createMapItem(map.getMapIdAt(index), getMapTitle(map, index), true);
|
return createMapItem(map.getMapIdAt(index), getMapTitle(map, index), true);
|
||||||
@ -165,20 +171,31 @@ public class MapItemManager implements Listener
|
|||||||
return I.t("{0} (part {1})", map.getName(), index + 1);
|
return I.t("{0} (part {1})", map.getName(), index + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static public ItemStack createMapItem(int mapID, String text, boolean isMapPart)
|
static public ItemStack createMapItem(int mapID, String text, boolean isMapPart, boolean goldTitle)
|
||||||
{
|
{
|
||||||
final ItemStack mapItem = new ItemStackBuilder(Material.FILLED_MAP)
|
ItemStack mapItem;
|
||||||
|
if(goldTitle) {
|
||||||
|
mapItem = new ItemStackBuilder(Material.FILLED_MAP)
|
||||||
|
.title( ChatColor.GOLD, text)
|
||||||
|
.hideAttributes()
|
||||||
|
.item();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
mapItem= new ItemStackBuilder(Material.FILLED_MAP)
|
||||||
.title(text)
|
.title(text)
|
||||||
.hideAttributes()
|
.hideAttributes()
|
||||||
.item();
|
.item();
|
||||||
|
}
|
||||||
final MapMeta meta = (MapMeta) mapItem.getItemMeta();
|
final MapMeta meta = (MapMeta) mapItem.getItemMeta();
|
||||||
meta.setMapId(mapID);
|
meta.setMapId(mapID);
|
||||||
meta.setColor(isMapPart ? Color.LIME : Color.GREEN);
|
meta.setColor(isMapPart ? Color.LIME : Color.GREEN);
|
||||||
mapItem.setItemMeta(meta);
|
mapItem.setItemMeta(meta);
|
||||||
|
|
||||||
return mapItem;
|
return mapItem;
|
||||||
}
|
}
|
||||||
|
static public ItemStack createMapItem(int mapID, String text, boolean isMapPart)
|
||||||
|
{
|
||||||
|
return createMapItem( mapID, text, isMapPart,false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the item to place to display the (col;row) part of the given poster.
|
* Returns the item to place to display the (col;row) part of the given poster.
|
||||||
@ -247,18 +264,22 @@ public class MapItemManager implements Listener
|
|||||||
if (frame.getItem().getType() != Material.AIR) return;
|
if (frame.getItem().getType() != Material.AIR) return;
|
||||||
if (!MapManager.managesMap(mapItem)) return;
|
if (!MapManager.managesMap(mapItem)) return;
|
||||||
|
|
||||||
|
|
||||||
if (SplatterMapManager.hasSplatterAttributes(mapItem))
|
if (SplatterMapManager.hasSplatterAttributes(mapItem))
|
||||||
{
|
{
|
||||||
if (!SplatterMapManager.placeSplatterMap(frame, player,event)){
|
if (!SplatterMapManager.placeSplatterMap(frame, player,event)){
|
||||||
event.setCancelled(true); //In case of an error allow to cancel map placement
|
event.setCancelled(true); //In case of an error allow to cancel map placement
|
||||||
return;}
|
return;
|
||||||
|
}
|
||||||
|
if(frame.getFacing()!= BlockFace.UP&&frame.getFacing()!= BlockFace.DOWN)
|
||||||
|
frame.setRotation(Rotation.NONE.rotateCounterClockwise());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if(frame.getFacing()!= BlockFace.UP&&frame.getFacing()!= BlockFace.DOWN)
|
||||||
|
frame.setRotation(Rotation.NONE.rotateCounterClockwise());
|
||||||
// If the item has a display name, bot not one from an anvil by the player, we remove it
|
// If the item has a display name, bot not one from an anvil by the player, we remove it
|
||||||
// If it is not displayed on hover on the wall.
|
// If it is not displayed on hover on the wall.
|
||||||
if (mapItem.hasItemMeta() && mapItem.getItemMeta().hasDisplayName() && mapItem.getItemMeta().getDisplayName().startsWith("§r"))
|
if (mapItem.hasItemMeta() && mapItem.getItemMeta().hasDisplayName() && mapItem.getItemMeta().getDisplayName().startsWith("§6"))
|
||||||
{
|
{
|
||||||
|
|
||||||
final ItemStack frameItem = mapItem.clone();
|
final ItemStack frameItem = mapItem.clone();
|
||||||
@ -285,6 +306,8 @@ public class MapItemManager implements Listener
|
|||||||
ItemStack item = frame.getItem();
|
ItemStack item = frame.getItem();
|
||||||
if (frame.getItem().getType() != Material.FILLED_MAP) return;
|
if (frame.getItem().getType() != Material.FILLED_MAP) return;
|
||||||
|
|
||||||
|
if (Permissions.REMOVE_SPLATTER_MAP.grantedTo(player))
|
||||||
|
{
|
||||||
if (player.isSneaking())
|
if (player.isSneaking())
|
||||||
{
|
{
|
||||||
PosterMap poster = SplatterMapManager.removeSplatterMap(frame,player);
|
PosterMap poster = SplatterMapManager.removeSplatterMap(frame,player);
|
||||||
@ -298,6 +321,7 @@ public class MapItemManager implements Listener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!MapManager.managesMap(frame.getItem())) return;
|
if (!MapManager.managesMap(frame.getItem())) return;
|
||||||
|
|
||||||
|
@ -298,10 +298,7 @@ abstract public class SplatterMapManager {
|
|||||||
frame.setItem(new ItemStackBuilder(Material.FILLED_MAP).nbt(ImmutableMap.of("map", id)).craftItem());
|
frame.setItem(new ItemStackBuilder(Material.FILLED_MAP).nbt(ImmutableMap.of("map", id)).craftItem());
|
||||||
|
|
||||||
//Force reset of rotation
|
//Force reset of rotation
|
||||||
if(i==0){//First map need to be rotate one time Clockwise
|
frame.setRotation(Rotation.NONE);
|
||||||
frame.setRotation(Rotation.NONE.rotateCounterClockwise());
|
|
||||||
}
|
|
||||||
else{frame.setRotation(Rotation.NONE);}
|
|
||||||
MapInitEvent.initMap(id);
|
MapInitEvent.initMap(id);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
|
|
||||||
# Plugin language. Empty: system language.
|
# Plugin language. Empty: system language.
|
||||||
# Available: en-US (default, fallback), fr-FR, ru-RU, de-DE.
|
# Available: en-US (default, fallback), fr-FR, ru-RU, de-DE, zh-CN, ja-JP.
|
||||||
lang:
|
lang:
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,9 +2,13 @@ This command manages and creates ImagesOnMaps.
|
|||||||
new: Creates a new ImageOnMap
|
new: Creates a new ImageOnMap
|
||||||
delete: Deletes a map.
|
delete: Deletes a map.
|
||||||
delete-noconfirm: Deletes a map. Deletion is permanent and made without confirmation
|
delete-noconfirm: Deletes a map. Deletion is permanent and made without confirmation
|
||||||
|
deleteother: Deletes another map.
|
||||||
get: Gives you a map.
|
get: Gives you a map.
|
||||||
|
getother: Gets another player's map.
|
||||||
getremaining: Gives you the remaining maps that could not fit in your inventory
|
getremaining: Gives you the remaining maps that could not fit in your inventory
|
||||||
list: Lists all the map you currently have.
|
list: Lists all the map you currently have.
|
||||||
|
listother: list all the map of another player.
|
||||||
explore: Opens a GUI to see and manage your maps.
|
explore: Opens a GUI to see and manage your maps.
|
||||||
|
exploreother: Opens a GUI to see and manage another player maps.
|
||||||
migrate: Lauches the migration process from V2.7 to V3.x.
|
migrate: Lauches the migration process from V2.7 to V3.x.
|
||||||
help : Use help for more information about a command.
|
help : Use help for more information about a command.
|
4
src/main/resources/help/maptool/getother.txt
Normal file
4
src/main/resources/help/maptool/getother.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Gets another player's map.
|
||||||
|
|
||||||
|
§6<playername>: §rThe name of the player who owns the map.
|
||||||
|
§6<mapname>: §rThe name of the map. Use /maptool listother to get map names.
|
3
src/main/resources/help/maptool/listother.txt
Normal file
3
src/main/resources/help/maptool/listother.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Lists another player's maps.
|
||||||
|
|
||||||
|
§6<playername>: §rThe name of the player you want to list map from.
|
@ -593,3 +593,12 @@ msgstr ""
|
|||||||
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:101
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:101
|
||||||
msgid "{ce}There is not enough space to place this map ({0} × {1})."
|
msgid "{ce}There is not enough space to place this map ({0} × {1})."
|
||||||
msgstr "{ce}There is not enough space to place this map ({0} × {1})."
|
msgstr "{ce}There is not enough space to place this map ({0} × {1})."
|
||||||
|
|
||||||
|
#New part, added for update (TODO add to other .po file
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java:71
|
||||||
|
msgid "{ce}You must give an URL and a map name to update."
|
||||||
|
msgstr "{ce}You must give an URL and a map name to update."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java:72
|
||||||
|
msgid "{ce}You must give a map name to update.."
|
||||||
|
msgstr "{ce}You must give a map name to update.."
|
||||||
|
@ -568,3 +568,12 @@ msgstr "Carte"
|
|||||||
#~ msgid_plural "{white}{0}{gray} maps left"
|
#~ msgid_plural "{white}{0}{gray} maps left"
|
||||||
#~ msgstr[0] "{white}{0}{gray} carte restante"
|
#~ msgstr[0] "{white}{0}{gray} carte restante"
|
||||||
#~ msgstr[1] "{white}{0}{gray} cartes restantes"
|
#~ msgstr[1] "{white}{0}{gray} cartes restantes"
|
||||||
|
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java:71
|
||||||
|
msgid "{ce}You must give an URL and a map name to update."
|
||||||
|
msgstr "{ce}Veuillez donner une URL et un nom de carte a update."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java:72
|
||||||
|
msgid "{ce}You must give a map name to update."
|
||||||
|
msgstr "{ce}Veuillez un nom de carte a update"
|
594
src/main/resources/i18n/ja_JP.po
Normal file
594
src/main/resources/i18n/ja_JP.po
Normal file
@ -0,0 +1,594 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2020-07-27 21:02+0200\n"
|
||||||
|
"PO-Revision-Date: 2020-07-27 21:38+0200\n"
|
||||||
|
"Last-Translator: Kotlia\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: ja_JP\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n < 1 || n > 1);\n"
|
||||||
|
"X-Generator: Poedit 1.8.7.1\n"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:40
|
||||||
|
msgid "You need to give a map name."
|
||||||
|
msgstr "マップ名が必要です!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:57
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteNoConfirmCommand.java:51
|
||||||
|
msgid "This map does not exist."
|
||||||
|
msgstr "このマップは存在しません"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:39
|
||||||
|
msgid "You are going to delete"
|
||||||
|
msgstr "これを削除します"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:42
|
||||||
|
msgid "Are you sure ? "
|
||||||
|
msgstr "大丈夫ですか?"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:44
|
||||||
|
msgid "[Confirm]"
|
||||||
|
msgstr "[確定]"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:46
|
||||||
|
msgid "{red}This map will be deleted {bold}forever{red}!"
|
||||||
|
msgstr "{red}このマップは {bold}復元不可能になります{red}!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteNoConfirmCommand.java:46
|
||||||
|
msgid "Map successfully deleted."
|
||||||
|
msgstr "削除に成功しました"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:38
|
||||||
|
msgid "The requested map was too big to fit in your inventory."
|
||||||
|
msgstr "マップのサイズがインベントリに対して大きすぎます"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:39
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:71
|
||||||
|
msgid "Use '/maptool getremaining' to get the remaining maps."
|
||||||
|
msgstr "残りのマップを取得するには '/maptool getremaining' を実行して下さい。"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:38
|
||||||
|
msgid "You have no remaining map."
|
||||||
|
msgstr "残りのマップは存在しません"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:46
|
||||||
|
msgid ""
|
||||||
|
"Your inventory is full! Make some space before requesting the remaining maps."
|
||||||
|
msgstr ""
|
||||||
|
"インベントリが一杯です!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:50
|
||||||
|
#, java-format
|
||||||
|
msgid "There is {0} map remaining."
|
||||||
|
msgid_plural "There are {0} maps remaining."
|
||||||
|
msgstr[0] "残り {0} 枚のマップが残っています"
|
||||||
|
msgstr[1] "残り {0} 枚のマップが残っています"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:49
|
||||||
|
msgid "No map found."
|
||||||
|
msgstr "マップが見つかりませんでした"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:53
|
||||||
|
msgid "{white}{bold}{0} map found."
|
||||||
|
msgid_plural "{white}{bold}{0} maps found."
|
||||||
|
msgstr[0] "{white}{bold}{0} 枚のマップを発見しました"
|
||||||
|
msgstr[1] "{white}{bold}{0} 枚のマップを発見しました"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:79
|
||||||
|
msgid "{white}Click{gray} to get this map"
|
||||||
|
msgstr "{gray}マップを取得するには{white}ここをクリック"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:36
|
||||||
|
msgid "A migration process is already running. Check console for details."
|
||||||
|
msgstr "移行中...コンソールで詳細を確認できます"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:40
|
||||||
|
msgid "Migration started. See console for details."
|
||||||
|
msgstr "移行開始...コンソールで詳細を確認できます"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:44
|
||||||
|
msgid "You must give an URL to take the image from."
|
||||||
|
msgstr "画像URLが必要です!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:52
|
||||||
|
msgid "Invalid URL."
|
||||||
|
msgstr "無効なURLです"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:61
|
||||||
|
msgid "Rendering..."
|
||||||
|
msgstr "レンダリング中..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:67
|
||||||
|
msgid "Rendering finished!"
|
||||||
|
msgstr "レンダリング完了!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:70
|
||||||
|
msgid "The rendered map was too big to fit in your inventory."
|
||||||
|
msgstr "レンダリングされたマップはインベントリに対して大きすぎます!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:78
|
||||||
|
msgid "{ce}Map rendering failed: {0}"
|
||||||
|
msgstr "{ce}レンダリング失敗: {0}"
|
||||||
|
|
||||||
|
#. The title of the map deletion GUI. {0}: map name.
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:102
|
||||||
|
msgid "{0} » {black}Confirm deletion"
|
||||||
|
msgstr "{0} » {black}削除確認"
|
||||||
|
|
||||||
|
#. The title of the map deletion item
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:110
|
||||||
|
msgid "{red}You're about to destroy this map..."
|
||||||
|
msgstr "{red}このマップを破壊しようとしています..."
|
||||||
|
|
||||||
|
#. The end, in the lore, of a title starting with “You're about to destroy this map...”.
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:112
|
||||||
|
msgid "{red}...{italic}forever{red}."
|
||||||
|
msgstr "{red}...{italic}永遠{red}."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:114
|
||||||
|
msgid "{gray}Name: {white}{0}"
|
||||||
|
msgstr "{gray}名前: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:115
|
||||||
|
msgid "{gray}Map ID: {white}{0}"
|
||||||
|
msgstr "{gray}マップ ID: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:116
|
||||||
|
msgid "{gray}Maps inside: {white}{0}"
|
||||||
|
msgstr "{gray}マップ: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:178
|
||||||
|
msgid "{gray}Map successfully deleted."
|
||||||
|
msgstr "{gray}マップの削除に成功しました"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:54
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:71
|
||||||
|
msgid "{green}Map part"
|
||||||
|
msgstr "{green}マップ部分"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:55
|
||||||
|
msgid "{gray}Column: {white}{0}"
|
||||||
|
msgstr "{gray}縦: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:56
|
||||||
|
msgid "{gray}Row: {white}{0}"
|
||||||
|
msgstr "{gray}横: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:58
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:74
|
||||||
|
msgid "{gray}» {white}Click{gray} to get only this part"
|
||||||
|
msgstr "{gray}» {gray} ここだけを入手するには {white}クリック"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:72
|
||||||
|
msgid "{gray}Part: {white}{0}"
|
||||||
|
msgstr "{gray}部分: {white}{0}"
|
||||||
|
|
||||||
|
#. Title of the map details GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:114
|
||||||
|
msgid "Your maps » {black}{0}"
|
||||||
|
msgstr "あなたのマップ » {black}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:136
|
||||||
|
msgid "{blue}Rename this image"
|
||||||
|
msgstr "{blue}このイメージの名前を変更"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:137
|
||||||
|
msgid ""
|
||||||
|
"{gray}Click here to rename this image; this is used for your own "
|
||||||
|
"organization."
|
||||||
|
msgstr ""
|
||||||
|
"{gray}このイメージの名前を変更...自分のみに反映されます"
|
||||||
|
""
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:141
|
||||||
|
msgid "{red}Delete this image"
|
||||||
|
msgstr "{red}この写真を削除"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:142
|
||||||
|
msgid ""
|
||||||
|
"{gray}Deletes this map {white}forever{gray}. This action cannot be undone!"
|
||||||
|
msgstr ""
|
||||||
|
"{white}削除・永久{gray} {gray}に復旧出来ません。"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:144
|
||||||
|
msgid "{gray}You will be asked to confirm your choice if you click here."
|
||||||
|
msgstr "{gray}You will be asked to confirm your choice if you click here."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:156
|
||||||
|
msgid "{green}« Back"
|
||||||
|
msgstr "{green}« 戻る"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:157
|
||||||
|
msgid "{gray}Go back to the list."
|
||||||
|
msgstr "{gray}表に戻る"
|
||||||
|
|
||||||
|
#. Displayed subtitle description of a single map on the list GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:44
|
||||||
|
msgid "{white}Single map"
|
||||||
|
msgstr "{white}一つのマップ"
|
||||||
|
|
||||||
|
#. Displayed subtitle description of a poster map on the list GUI (columns × rows in english)
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:52
|
||||||
|
msgid "{white}Poster map ({0} × {1})"
|
||||||
|
msgstr "{white}ポスターマップ ({0} × {1})"
|
||||||
|
|
||||||
|
#. Displayed subtitle description of a poster map without column data on the list GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:57
|
||||||
|
msgid "{white}Poster map ({0} parts)"
|
||||||
|
msgstr "{white}ポスターマップ ({0} 部分)"
|
||||||
|
|
||||||
|
#. Displayed title of a map on the list GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:62
|
||||||
|
msgid "{green}{bold}{0}"
|
||||||
|
msgstr "{green}{bold}{0}"
|
||||||
|
|
||||||
|
#. Map ID displayed in the tooltip of a map on the list GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:67
|
||||||
|
msgid "{gray}Map ID: {0}"
|
||||||
|
msgstr "{gray}マップ ID: {0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:69
|
||||||
|
msgid "{gray}» {white}Left-click{gray} to get this map"
|
||||||
|
msgstr "{gray}» {white}左クリック{gray} でこのマップを入手"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:70
|
||||||
|
msgid "{gray}» {white}Right-click{gray} for details and options"
|
||||||
|
msgstr "{gray}» {white}右クリック{gray} で詳細を表示"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:79
|
||||||
|
msgid "{red}You don't have any map."
|
||||||
|
msgstr "{red}あなたはマップを持っていません!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:80
|
||||||
|
msgid ""
|
||||||
|
"{gray}Get started by creating a new one using {white}/tomap <URL> [resize]"
|
||||||
|
"{gray}!"
|
||||||
|
msgstr ""
|
||||||
|
"{gray}まずは作ってみましょう!コマンド: {white}/tomap <URL> [resize]"
|
||||||
|
"{gray}!"
|
||||||
|
|
||||||
|
#. The maps list GUI title
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:119
|
||||||
|
msgid "{black}Your maps {reset}({0})"
|
||||||
|
msgstr "{black}あなたのマップ {reset}({0})"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:148
|
||||||
|
msgid "{blue}Usage statistics"
|
||||||
|
msgstr "{blue}あなたの統計情報"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:150
|
||||||
|
msgid "{white}{0}{gray} image rendered"
|
||||||
|
msgid_plural "{white}{0}{gray} images rendered"
|
||||||
|
msgstr[0] "{white}{0}{gray} 画像レンダリング完了"
|
||||||
|
msgstr[1] "{white}{0}{gray} 画像レンダリング完了"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:151
|
||||||
|
msgid "{white}{0}{gray} Minecraft map used"
|
||||||
|
msgid_plural "{white}{0}{gray} Minecraft maps used"
|
||||||
|
msgstr[0] "{white}{0}{gray} 使用したマップ"
|
||||||
|
msgstr[1] "{white}{0}{gray} 使用したマップ"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:156
|
||||||
|
msgid "{blue}Minecraft maps limits"
|
||||||
|
msgstr "{blue}minecraftマップリミット"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:158
|
||||||
|
msgid "{gray}Server-wide limit: {white}unlimited"
|
||||||
|
msgstr "{gray}Server-wide limit: {white}unlimited"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:159
|
||||||
|
msgid "{gray}Server-wide limit: {white}{0}"
|
||||||
|
msgstr "{gray}Server-wide limit: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:161
|
||||||
|
msgid "{gray}Per-player limit: {white}unlimited"
|
||||||
|
msgstr "{gray}Per-player limit: {white}unlimited"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:162
|
||||||
|
msgid "{gray}Per-player limit: {white}{0}"
|
||||||
|
msgstr "{gray}Per-player limit: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:164
|
||||||
|
msgid "{white}{0} %{gray} of your quota used"
|
||||||
|
msgstr "{white}{0} %{gray} of your quota used"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:165
|
||||||
|
msgid "{white}{0}{gray} map left"
|
||||||
|
msgid_plural "{white}{0}{gray} maps left"
|
||||||
|
msgstr[0] "{white}{0}{gray} map left"
|
||||||
|
msgstr[1] "{white}{0}{gray} maps left"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:73
|
||||||
|
#, java-format
|
||||||
|
msgid "HTTP error : {0} {1}"
|
||||||
|
msgstr "HTTP error : {0} {1}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:79
|
||||||
|
msgid "The given URL is not a valid image"
|
||||||
|
msgstr "これは有効な画像URLではありません!"
|
||||||
|
|
||||||
|
#. The default display name of a map
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/map/ImageMap.java:44
|
||||||
|
msgid "Map"
|
||||||
|
msgstr "マップ"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:29
|
||||||
|
#, java-format
|
||||||
|
msgid "You have too many maps (maximum : {0})."
|
||||||
|
msgstr "保有するマップが多すぎます! (maximum : {0})."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:30
|
||||||
|
msgid "The server ImageOnMap limit has been reached."
|
||||||
|
msgstr "The server ImageOnMap limit has been reached."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:31
|
||||||
|
msgid "The given map does not exist."
|
||||||
|
msgstr "マップが存在しません."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:34
|
||||||
|
msgid "Migration is already running."
|
||||||
|
msgstr "移行は実行中です"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:50
|
||||||
|
msgid "Waiting for migration to finish..."
|
||||||
|
msgstr "移行終了待ち..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:58
|
||||||
|
msgid ""
|
||||||
|
"Migration thread has been interrupted while waiting to finish. It may not "
|
||||||
|
"have ended correctly."
|
||||||
|
msgstr ""
|
||||||
|
"Migration thread has been interrupted while waiting to finish. It may not "
|
||||||
|
"have ended correctly."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:176
|
||||||
|
msgid "Error while preparing migration"
|
||||||
|
msgstr "Error while preparing migration"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:177
|
||||||
|
msgid "Aborting migration. No change has been made."
|
||||||
|
msgstr "Aborting migration. No change has been made."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:189
|
||||||
|
msgid "Error while migrating"
|
||||||
|
msgstr "Error while migrating"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:190
|
||||||
|
msgid "Aborting migration. Some changes may already have been made."
|
||||||
|
msgstr "Aborting migration. Some changes may already have been made."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:191
|
||||||
|
msgid ""
|
||||||
|
"Before trying to migrate again, you must recover player files from the "
|
||||||
|
"backups, and then move the backups away from the plugin directory to avoid "
|
||||||
|
"overwriting them."
|
||||||
|
msgstr ""
|
||||||
|
"Before trying to migrate again, you must recover player files from the "
|
||||||
|
"backups, and then move the backups away from the plugin directory to avoid "
|
||||||
|
"overwriting them."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:203
|
||||||
|
msgid "Looking for configuration files to migrate..."
|
||||||
|
msgstr "Looking for configuration files to migrate..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:206
|
||||||
|
#, java-format
|
||||||
|
msgid "Detected former posters file {0}"
|
||||||
|
msgstr "Detected former posters file {0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:209
|
||||||
|
#, java-format
|
||||||
|
msgid "Detected former maps file {0}"
|
||||||
|
msgstr "Detected former maps file {0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:213
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:416
|
||||||
|
msgid "There is nothing to migrate. Stopping."
|
||||||
|
msgstr "There is nothing to migrate. Stopping."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:218
|
||||||
|
msgid "Done."
|
||||||
|
msgstr "Done."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:232
|
||||||
|
msgid "Backup directories already exists."
|
||||||
|
msgstr "Backup directories already exists."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:233
|
||||||
|
msgid ""
|
||||||
|
"This means that a migration has already been done, or may not have ended "
|
||||||
|
"well."
|
||||||
|
msgstr ""
|
||||||
|
"This means that a migration has already been done, or may not have ended "
|
||||||
|
"well."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:234
|
||||||
|
msgid ""
|
||||||
|
"To start a new migration, you must move away the backup directories so they "
|
||||||
|
"are not overwritten."
|
||||||
|
msgstr ""
|
||||||
|
"To start a new migration, you must move away the backup directories so they "
|
||||||
|
"are not overwritten."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:247
|
||||||
|
msgid "Backing up map data before migrating..."
|
||||||
|
msgstr "Backing up map data before migrating..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:271
|
||||||
|
msgid "Backup complete."
|
||||||
|
msgstr "Backup complete."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:352
|
||||||
|
msgid "Fetching UUIDs from Mojang..."
|
||||||
|
msgstr "Fetching UUIDs from Mojang..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:359
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:387
|
||||||
|
msgid "An error occurred while fetching the UUIDs from Mojang"
|
||||||
|
msgstr "An error occurred while fetching the UUIDs from Mojang"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:364
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:392
|
||||||
|
msgid "The migration worker has been interrupted"
|
||||||
|
msgstr "The migration worker has been interrupted"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:367
|
||||||
|
#, java-format
|
||||||
|
msgid "Fetching done. {0} UUID have been retrieved."
|
||||||
|
msgid_plural "Fetching done. {0} UUIDs have been retrieved."
|
||||||
|
msgstr[0] "Fetching done. {0} UUID have been retrieved."
|
||||||
|
msgstr[1] "Fetching done. {0} UUIDs have been retrieved."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:378
|
||||||
|
#, java-format
|
||||||
|
msgid "Mojang did not find UUIDs for {0} player at the current time."
|
||||||
|
msgid_plural "Mojang did not find UUIDs for {0} players at the current time."
|
||||||
|
msgstr[0] "Mojang did not find UUIDs for {0} player at the current time."
|
||||||
|
msgstr[1] "Mojang did not find UUIDs for {0} players at the current time."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:379
|
||||||
|
msgid ""
|
||||||
|
"The Mojang servers limit requests rate at one per second, this may take some "
|
||||||
|
"time..."
|
||||||
|
msgstr ""
|
||||||
|
"The Mojang servers limit requests rate at one per second, this may take some "
|
||||||
|
"time..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:398
|
||||||
|
#, java-format
|
||||||
|
msgid "Mojang did not find player data for {0} player"
|
||||||
|
msgid_plural "Mojang did not find player data for {0} players"
|
||||||
|
msgstr[0] "Mojang did not find player data for {0} player"
|
||||||
|
msgstr[1] "Mojang did not find player data for {0} players"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:400
|
||||||
|
msgid "The following players do not exist or do not have paid accounts :"
|
||||||
|
msgstr "The following players do not exist or do not have paid accounts :"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:415
|
||||||
|
msgid "Mojang could not find any of the registered players."
|
||||||
|
msgstr "Mojang could not find any of the registered players."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:425
|
||||||
|
msgid "Merging map data..."
|
||||||
|
msgstr "Merging map data..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:475
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} registered minecraft map is missing from the save."
|
||||||
|
msgid_plural "{0} registered minecraft maps are missing from the save."
|
||||||
|
msgstr[0] "{0} registered minecraft map is missing from the save."
|
||||||
|
msgstr[1] "{0} registered minecraft maps are missing from the save."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:476
|
||||||
|
msgid ""
|
||||||
|
"These maps will not be migrated, but this could mean the save has been "
|
||||||
|
"altered or corrupted."
|
||||||
|
msgstr ""
|
||||||
|
"These maps will not be migrated, but this could mean the save has been "
|
||||||
|
"altered or corrupted."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:477
|
||||||
|
#, java-format
|
||||||
|
msgid "The following maps are missing : {0} "
|
||||||
|
msgstr "The following maps are missing : {0} "
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:483
|
||||||
|
msgid "Saving changes..."
|
||||||
|
msgstr "Saving changes..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:489
|
||||||
|
msgid "Cleaning up old data files..."
|
||||||
|
msgstr "Cleaning up old data files..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:496
|
||||||
|
msgid "Deleting old map data file..."
|
||||||
|
msgstr "Deleting old map data file..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:501
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} map could not be migrated."
|
||||||
|
msgid_plural "{0} maps could not be migrated."
|
||||||
|
msgstr[0] "{0} map could not be migrated."
|
||||||
|
msgstr[1] "{0} maps could not be migrated."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:519
|
||||||
|
msgid "Deleting old poster data file..."
|
||||||
|
msgstr "Deleting old poster data file..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:524
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} poster could not be migrated."
|
||||||
|
msgid_plural "{0} posters could not be migrated."
|
||||||
|
msgstr[0] "{0} poster could not be migrated."
|
||||||
|
msgstr[1] "{0} posters could not be migrated."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:537
|
||||||
|
msgid "Data that has not been migrated will be kept in the old data files."
|
||||||
|
msgstr "Data that has not been migrated will be kept in the old data files."
|
||||||
|
|
||||||
|
#. The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = index.
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:139
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:215
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} (part {1})"
|
||||||
|
msgstr "{0} (部分 {1})"
|
||||||
|
|
||||||
|
#. The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = row; 2 = column.
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:145
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:213
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} (row {1}, column {2})"
|
||||||
|
msgstr "{0} (横 {1}, 縦 {2})"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:44
|
||||||
|
msgid "Splatter Map"
|
||||||
|
msgstr "拡散マップ"
|
||||||
|
|
||||||
|
#. Title in a splatter map tooltip
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:48
|
||||||
|
msgid "Item frames needed"
|
||||||
|
msgstr "アイテムフレームが必要です"
|
||||||
|
|
||||||
|
#. Size of a map stored in a splatter map
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:56
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} × {1}"
|
||||||
|
msgstr "横: {0} × 縦: {1}"
|
||||||
|
|
||||||
|
#. Size of a map stored in a splatter map, including the total frames count
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:62
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} × {1} (total {2} frames)"
|
||||||
|
msgstr "横: {0} × 縦: {1} (合計 {2} フレーム)"
|
||||||
|
|
||||||
|
#. Title in a splatter map tooltip
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:53
|
||||||
|
msgid "How to use this?"
|
||||||
|
msgstr "これをどうやって使いますか?"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:54
|
||||||
|
msgid ""
|
||||||
|
"Place empty item frames on a wall, enough to host the whole map. Then, right-"
|
||||||
|
"click on the bottom-left frame with this map."
|
||||||
|
msgstr ""
|
||||||
|
"アイテムフレームを空にしてから、マップが必要な分のフレームを設置してから、左下のフレームを右クリックして下さい。"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:56
|
||||||
|
msgid ""
|
||||||
|
"Shift-click one of the placed maps to remove the whole poster in one shot."
|
||||||
|
msgstr ""
|
||||||
|
"シフトクリックでマップを一括削除できます"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:101
|
||||||
|
msgid "{ce}There is not enough space to place this map ({0} × {1})."
|
||||||
|
msgstr "{ce}このマップを設置するのに十分なスペースがありません! (横: {0} × 縦: {1})"
|
595
src/main/resources/i18n/zh_CN.po
Normal file
595
src/main/resources/i18n/zh_CN.po
Normal file
@ -0,0 +1,595 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-07-10 03:07+0200\n"
|
||||||
|
"PO-Revision-Date: 2016-07-10 03:08+0200\n"
|
||||||
|
"Last-Translator: Souir_Tommer\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: zh_CN\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n < 1 || n > 1);\n"
|
||||||
|
"X-Generator: Poedit 1.8.7.1\n"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:40
|
||||||
|
msgid "You need to give a map name."
|
||||||
|
msgstr "你需要提供名称"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:57
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteNoConfirmCommand.java:51
|
||||||
|
msgid "This map does not exist."
|
||||||
|
msgstr "该地图不存在"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:39
|
||||||
|
msgid "You are going to delete"
|
||||||
|
msgstr "你将要删除"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:42
|
||||||
|
msgid "Are you sure ? "
|
||||||
|
msgstr "你确定吗? "
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:44
|
||||||
|
msgid "[Confirm]"
|
||||||
|
msgstr "[确定]"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:46
|
||||||
|
msgid "{red}This map will be deleted {bold}forever{red}!"
|
||||||
|
msgstr "{red}这个地图将会永久 {bold}删除{red}!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteNoConfirmCommand.java:46
|
||||||
|
msgid "Map successfully deleted."
|
||||||
|
msgstr "地图已成功删除"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:38
|
||||||
|
msgid "The requested map was too big to fit in your inventory."
|
||||||
|
msgstr "请求的地图太大,无法容纳到您的背包中"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:39
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:71
|
||||||
|
msgid "Use '/maptool getremaining' to get the remaining maps."
|
||||||
|
msgstr "Use '/maptool getremaining' to get the remaining maps."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:38
|
||||||
|
msgid "You have no remaining map."
|
||||||
|
msgstr "你没有剩余的地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:46
|
||||||
|
msgid ""
|
||||||
|
"Your inventory is full! Make some space before requesting the remaining maps."
|
||||||
|
msgstr ""
|
||||||
|
"你的背包已满!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:50
|
||||||
|
#, java-format
|
||||||
|
msgid "There is {0} map remaining."
|
||||||
|
msgid_plural "There are {0} maps remaining."
|
||||||
|
msgstr[0] "剩余 {0} 张地图"
|
||||||
|
msgstr[1] "剩余 {0} 张地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:49
|
||||||
|
msgid "No map found."
|
||||||
|
msgstr "找不到地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:53
|
||||||
|
msgid "{white}{bold}{0} map found."
|
||||||
|
msgid_plural "{white}{bold}{0} maps found."
|
||||||
|
msgstr[0] "{white}{bold}{0} 地图"
|
||||||
|
msgstr[1] "{white}{bold}{0} 地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:79
|
||||||
|
msgid "{white}Click{gray} to get this map"
|
||||||
|
msgstr "{white}点击{gray} 得到这张地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:36
|
||||||
|
msgid "A migration process is already running. Check console for details."
|
||||||
|
msgstr "进程已在运行..请等待"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:40
|
||||||
|
msgid "Migration started. See console for details."
|
||||||
|
msgstr "开始..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:44
|
||||||
|
msgid "You must give an URL to take the image from."
|
||||||
|
msgstr "您必须提供URL才能从中获取图像"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:52
|
||||||
|
msgid "Invalid URL."
|
||||||
|
msgstr "无效的网址"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:61
|
||||||
|
msgid "Rendering..."
|
||||||
|
msgstr "渲染..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:67
|
||||||
|
msgid "Rendering finished!"
|
||||||
|
msgstr "渲染完成!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:70
|
||||||
|
msgid "The rendered map was too big to fit in your inventory."
|
||||||
|
msgstr "渲染的地图太大"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:78
|
||||||
|
msgid "{ce}Map rendering failed: {0}"
|
||||||
|
msgstr "{ce}地图渲染失败: {0}"
|
||||||
|
|
||||||
|
#. The title of the map deletion GUI. {0}: map name.
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:102
|
||||||
|
msgid "{0} » {black}Confirm deletion"
|
||||||
|
msgstr "{0} » {black}确认删除"
|
||||||
|
|
||||||
|
#. The title of the map deletion item
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:110
|
||||||
|
msgid "{red}You're about to destroy this map..."
|
||||||
|
msgstr "{red}您将要销毁这张地图..."
|
||||||
|
|
||||||
|
#. The end, in the lore, of a title starting with “You're about to destroy this map...”.
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:112
|
||||||
|
msgid "{red}...{italic}forever{red}."
|
||||||
|
msgstr "{red}...{italic}永久{red}."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:114
|
||||||
|
msgid "{gray}Name: {white}{0}"
|
||||||
|
msgstr "{gray}名称: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:115
|
||||||
|
msgid "{gray}Map ID: {white}{0}"
|
||||||
|
msgstr "{gray}地图 ID: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:116
|
||||||
|
msgid "{gray}Maps inside: {white}{0}"
|
||||||
|
msgstr "{gray}地图: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:178
|
||||||
|
msgid "{gray}Map successfully deleted."
|
||||||
|
msgstr "{gray}地图已成功删除"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:54
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:71
|
||||||
|
msgid "{green}Map part"
|
||||||
|
msgstr "{green}地图部分"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:55
|
||||||
|
msgid "{gray}Column: {white}{0}"
|
||||||
|
msgstr "{gray}高: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:56
|
||||||
|
msgid "{gray}Row: {white}{0}"
|
||||||
|
msgstr "{gray}宽: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:58
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:74
|
||||||
|
msgid "{gray}» {white}Click{gray} to get only this part"
|
||||||
|
msgstr "{gray}» {white}点击{gray} 得到这部分"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:72
|
||||||
|
msgid "{gray}Part: {white}{0}"
|
||||||
|
msgstr "{gray}部分: {white}{0}"
|
||||||
|
|
||||||
|
#. Title of the map details GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:114
|
||||||
|
msgid "Your maps » {black}{0}"
|
||||||
|
msgstr "你的地图 » {black}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:136
|
||||||
|
msgid "{blue}Rename this image"
|
||||||
|
msgstr "{blue}重命名这张图片"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:137
|
||||||
|
msgid ""
|
||||||
|
"{gray}Click here to rename this image; this is used for your own "
|
||||||
|
"organization."
|
||||||
|
msgstr ""
|
||||||
|
"{gray}点击此处重命名该图像; 这只对自己生效"
|
||||||
|
""
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:141
|
||||||
|
msgid "{red}Delete this image"
|
||||||
|
msgstr "{red}删除这张图片"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:142
|
||||||
|
msgid ""
|
||||||
|
"{gray}Deletes this map {white}forever{gray}. This action cannot be undone!"
|
||||||
|
msgstr ""
|
||||||
|
"{white}永久{gray} {gray}删除这张地图,此操作无法撤消!"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:144
|
||||||
|
msgid "{gray}You will be asked to confirm your choice if you click here."
|
||||||
|
msgstr "{gray}You will be asked to confirm your choice if you click here."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:156
|
||||||
|
msgid "{green}« Back"
|
||||||
|
msgstr "{green}« 返回"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:157
|
||||||
|
msgid "{gray}Go back to the list."
|
||||||
|
msgstr "{gray}返回到列表"
|
||||||
|
|
||||||
|
#. Displayed subtitle description of a single map on the list GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:44
|
||||||
|
msgid "{white}Single map"
|
||||||
|
msgstr "{white}单张地图"
|
||||||
|
|
||||||
|
#. Displayed subtitle description of a poster map on the list GUI (columns × rows in english)
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:52
|
||||||
|
msgid "{white}Poster map ({0} × {1})"
|
||||||
|
msgstr "{white}地图大小 ({0} × {1})"
|
||||||
|
|
||||||
|
#. Displayed subtitle description of a poster map without column data on the list GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:57
|
||||||
|
msgid "{white}Poster map ({0} parts)"
|
||||||
|
msgstr "{white}地图大小 ({0} 部分)"
|
||||||
|
|
||||||
|
#. Displayed title of a map on the list GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:62
|
||||||
|
msgid "{green}{bold}{0}"
|
||||||
|
msgstr "{green}{bold}{0}"
|
||||||
|
|
||||||
|
#. Map ID displayed in the tooltip of a map on the list GUI
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:67
|
||||||
|
msgid "{gray}Map ID: {0}"
|
||||||
|
msgstr "{gray}地图 ID: {0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:69
|
||||||
|
msgid "{gray}» {white}Left-click{gray} to get this map"
|
||||||
|
msgstr "{gray}» {white}左击{gray} 获得地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:70
|
||||||
|
msgid "{gray}» {white}Right-click{gray} for details and options"
|
||||||
|
msgstr "{gray}» {white}右击{gray} 打开更多设置"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:79
|
||||||
|
msgid "{red}You don't have any map."
|
||||||
|
msgstr "{red}你还没有任何地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:80
|
||||||
|
msgid ""
|
||||||
|
"{gray}Get started by creating a new one using {white}/tomap <URL> [resize]"
|
||||||
|
"{gray}!"
|
||||||
|
msgstr ""
|
||||||
|
"{gray}使用指令创建地图吧 {white}/tomap <URL> [resize]"
|
||||||
|
"{gray}!"
|
||||||
|
|
||||||
|
#. The maps list GUI title
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:119
|
||||||
|
msgid "{black}Your maps {reset}({0})"
|
||||||
|
msgstr "{black}你的地图 {reset}({0})"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:148
|
||||||
|
msgid "{blue}Usage statistics"
|
||||||
|
msgstr "{blue}使用状态"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:150
|
||||||
|
msgid "{white}{0}{gray} image rendered"
|
||||||
|
msgid_plural "{white}{0}{gray} images rendered"
|
||||||
|
msgstr[0] "{white}{0}{gray} 渲染地图"
|
||||||
|
msgstr[1] "{white}{0}{gray} 渲染地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:151
|
||||||
|
msgid "{white}{0}{gray} Minecraft map used"
|
||||||
|
msgid_plural "{white}{0}{gray} Minecraft maps used"
|
||||||
|
msgstr[0] "{white}{0}{gray} 张地图用量"
|
||||||
|
msgstr[1] "{white}{0}{gray} 张地图用量"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:156
|
||||||
|
msgid "{blue}Minecraft maps limits"
|
||||||
|
msgstr "{blue}minecraft地图限制"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:158
|
||||||
|
msgid "{gray}Server-wide limit: {white}unlimited"
|
||||||
|
msgstr "{gray}Server-wide limit: {white}unlimited"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:159
|
||||||
|
msgid "{gray}Server-wide limit: {white}{0}"
|
||||||
|
msgstr "{gray}Server-wide limit: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:161
|
||||||
|
msgid "{gray}Per-player limit: {white}unlimited"
|
||||||
|
msgstr "{gray}Per-player limit: {white}unlimited"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:162
|
||||||
|
msgid "{gray}Per-player limit: {white}{0}"
|
||||||
|
msgstr "{gray}Per-player limit: {white}{0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:164
|
||||||
|
msgid "{white}{0} %{gray} of your quota used"
|
||||||
|
msgstr "{white}{0} %{gray} of your quota used"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:165
|
||||||
|
msgid "{white}{0}{gray} map left"
|
||||||
|
msgid_plural "{white}{0}{gray} maps left"
|
||||||
|
msgstr[0] "{white}{0}{gray} map left"
|
||||||
|
msgstr[1] "{white}{0}{gray} maps left"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:73
|
||||||
|
#, java-format
|
||||||
|
msgid "HTTP error : {0} {1}"
|
||||||
|
msgstr "HTTP error : {0} {1}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:79
|
||||||
|
msgid "The given URL is not a valid image"
|
||||||
|
msgstr "指定的网址不是有效的图片"
|
||||||
|
|
||||||
|
#. The default display name of a map
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/map/ImageMap.java:44
|
||||||
|
msgid "Map"
|
||||||
|
msgstr "地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:29
|
||||||
|
#, java-format
|
||||||
|
msgid "You have too many maps (maximum : {0})."
|
||||||
|
msgstr "You have too many maps (maximum : {0})."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:30
|
||||||
|
msgid "The server ImageOnMap limit has been reached."
|
||||||
|
msgstr "The server ImageOnMap limit has been reached."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:31
|
||||||
|
msgid "The given map does not exist."
|
||||||
|
msgstr "地图不存在."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:34
|
||||||
|
msgid "Migration is already running."
|
||||||
|
msgstr "迁移已在运行"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:50
|
||||||
|
msgid "Waiting for migration to finish..."
|
||||||
|
msgstr "等待迁移完成..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:58
|
||||||
|
msgid ""
|
||||||
|
"Migration thread has been interrupted while waiting to finish. It may not "
|
||||||
|
"have ended correctly."
|
||||||
|
msgstr ""
|
||||||
|
"Migration thread has been interrupted while waiting to finish. It may not "
|
||||||
|
"have ended correctly."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:176
|
||||||
|
msgid "Error while preparing migration"
|
||||||
|
msgstr "Error while preparing migration"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:177
|
||||||
|
msgid "Aborting migration. No change has been made."
|
||||||
|
msgstr "Aborting migration. No change has been made."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:189
|
||||||
|
msgid "Error while migrating"
|
||||||
|
msgstr "Error while migrating"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:190
|
||||||
|
msgid "Aborting migration. Some changes may already have been made."
|
||||||
|
msgstr "Aborting migration. Some changes may already have been made."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:191
|
||||||
|
msgid ""
|
||||||
|
"Before trying to migrate again, you must recover player files from the "
|
||||||
|
"backups, and then move the backups away from the plugin directory to avoid "
|
||||||
|
"overwriting them."
|
||||||
|
msgstr ""
|
||||||
|
"Before trying to migrate again, you must recover player files from the "
|
||||||
|
"backups, and then move the backups away from the plugin directory to avoid "
|
||||||
|
"overwriting them."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:203
|
||||||
|
msgid "Looking for configuration files to migrate..."
|
||||||
|
msgstr "Looking for configuration files to migrate..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:206
|
||||||
|
#, java-format
|
||||||
|
msgid "Detected former posters file {0}"
|
||||||
|
msgstr "Detected former posters file {0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:209
|
||||||
|
#, java-format
|
||||||
|
msgid "Detected former maps file {0}"
|
||||||
|
msgstr "Detected former maps file {0}"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:213
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:416
|
||||||
|
msgid "There is nothing to migrate. Stopping."
|
||||||
|
msgstr "There is nothing to migrate. Stopping."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:218
|
||||||
|
msgid "Done."
|
||||||
|
msgstr "Done."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:232
|
||||||
|
msgid "Backup directories already exists."
|
||||||
|
msgstr "Backup directories already exists."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:233
|
||||||
|
msgid ""
|
||||||
|
"This means that a migration has already been done, or may not have ended "
|
||||||
|
"well."
|
||||||
|
msgstr ""
|
||||||
|
"This means that a migration has already been done, or may not have ended "
|
||||||
|
"well."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:234
|
||||||
|
msgid ""
|
||||||
|
"To start a new migration, you must move away the backup directories so they "
|
||||||
|
"are not overwritten."
|
||||||
|
msgstr ""
|
||||||
|
"To start a new migration, you must move away the backup directories so they "
|
||||||
|
"are not overwritten."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:247
|
||||||
|
msgid "Backing up map data before migrating..."
|
||||||
|
msgstr "Backing up map data before migrating..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:271
|
||||||
|
msgid "Backup complete."
|
||||||
|
msgstr "Backup complete."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:352
|
||||||
|
msgid "Fetching UUIDs from Mojang..."
|
||||||
|
msgstr "Fetching UUIDs from Mojang..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:359
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:387
|
||||||
|
msgid "An error occurred while fetching the UUIDs from Mojang"
|
||||||
|
msgstr "An error occurred while fetching the UUIDs from Mojang"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:364
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:392
|
||||||
|
msgid "The migration worker has been interrupted"
|
||||||
|
msgstr "The migration worker has been interrupted"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:367
|
||||||
|
#, java-format
|
||||||
|
msgid "Fetching done. {0} UUID have been retrieved."
|
||||||
|
msgid_plural "Fetching done. {0} UUIDs have been retrieved."
|
||||||
|
msgstr[0] "Fetching done. {0} UUID have been retrieved."
|
||||||
|
msgstr[1] "Fetching done. {0} UUIDs have been retrieved."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:378
|
||||||
|
#, java-format
|
||||||
|
msgid "Mojang did not find UUIDs for {0} player at the current time."
|
||||||
|
msgid_plural "Mojang did not find UUIDs for {0} players at the current time."
|
||||||
|
msgstr[0] "Mojang did not find UUIDs for {0} player at the current time."
|
||||||
|
msgstr[1] "Mojang did not find UUIDs for {0} players at the current time."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:379
|
||||||
|
msgid ""
|
||||||
|
"The Mojang servers limit requests rate at one per second, this may take some "
|
||||||
|
"time..."
|
||||||
|
msgstr ""
|
||||||
|
"The Mojang servers limit requests rate at one per second, this may take some "
|
||||||
|
"time..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:398
|
||||||
|
#, java-format
|
||||||
|
msgid "Mojang did not find player data for {0} player"
|
||||||
|
msgid_plural "Mojang did not find player data for {0} players"
|
||||||
|
msgstr[0] "Mojang did not find player data for {0} player"
|
||||||
|
msgstr[1] "Mojang did not find player data for {0} players"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:400
|
||||||
|
msgid "The following players do not exist or do not have paid accounts :"
|
||||||
|
msgstr "The following players do not exist or do not have paid accounts :"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:415
|
||||||
|
msgid "Mojang could not find any of the registered players."
|
||||||
|
msgstr "Mojang could not find any of the registered players."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:425
|
||||||
|
msgid "Merging map data..."
|
||||||
|
msgstr "Merging map data..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:475
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} registered minecraft map is missing from the save."
|
||||||
|
msgid_plural "{0} registered minecraft maps are missing from the save."
|
||||||
|
msgstr[0] "{0} registered minecraft map is missing from the save."
|
||||||
|
msgstr[1] "{0} registered minecraft maps are missing from the save."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:476
|
||||||
|
msgid ""
|
||||||
|
"These maps will not be migrated, but this could mean the save has been "
|
||||||
|
"altered or corrupted."
|
||||||
|
msgstr ""
|
||||||
|
"These maps will not be migrated, but this could mean the save has been "
|
||||||
|
"altered or corrupted."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:477
|
||||||
|
#, java-format
|
||||||
|
msgid "The following maps are missing : {0} "
|
||||||
|
msgstr "The following maps are missing : {0} "
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:483
|
||||||
|
msgid "Saving changes..."
|
||||||
|
msgstr "Saving changes..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:489
|
||||||
|
msgid "Cleaning up old data files..."
|
||||||
|
msgstr "Cleaning up old data files..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:496
|
||||||
|
msgid "Deleting old map data file..."
|
||||||
|
msgstr "Deleting old map data file..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:501
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} map could not be migrated."
|
||||||
|
msgid_plural "{0} maps could not be migrated."
|
||||||
|
msgstr[0] "{0} map could not be migrated."
|
||||||
|
msgstr[1] "{0} maps could not be migrated."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:519
|
||||||
|
msgid "Deleting old poster data file..."
|
||||||
|
msgstr "Deleting old poster data file..."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:524
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} poster could not be migrated."
|
||||||
|
msgid_plural "{0} posters could not be migrated."
|
||||||
|
msgstr[0] "{0} poster could not be migrated."
|
||||||
|
msgstr[1] "{0} posters could not be migrated."
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:537
|
||||||
|
msgid "Data that has not been migrated will be kept in the old data files."
|
||||||
|
msgstr "Data that has not been migrated will be kept in the old data files."
|
||||||
|
|
||||||
|
#. The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = index.
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:139
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:215
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} (part {1})"
|
||||||
|
msgstr "{0} (部分 {1})"
|
||||||
|
|
||||||
|
#. The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = row; 2 = column.
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:145
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:213
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} (row {1}, column {2})"
|
||||||
|
msgstr "{0} (宽 {1}, 高 {2})"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:44
|
||||||
|
msgid "Splatter Map"
|
||||||
|
msgstr "扩散地图"
|
||||||
|
|
||||||
|
#. Title in a splatter map tooltip
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:48
|
||||||
|
msgid "Item frames needed"
|
||||||
|
msgstr "展示框空间所需"
|
||||||
|
|
||||||
|
#. Size of a map stored in a splatter map
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:56
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} × {1}"
|
||||||
|
msgstr "宽: {0} × 高: {1}"
|
||||||
|
|
||||||
|
#. Size of a map stored in a splatter map, including the total frames count
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:62
|
||||||
|
#, java-format
|
||||||
|
msgid "{0} × {1} (total {2} frames)"
|
||||||
|
msgstr "宽: {0} × 高: {1} (共需要 {2} 展示框)"
|
||||||
|
|
||||||
|
#. Title in a splatter map tooltip
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:53
|
||||||
|
msgid "How to use this?"
|
||||||
|
msgstr "如何使用?"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:54
|
||||||
|
msgid ""
|
||||||
|
"Place empty item frames on a wall, enough to host the whole map. Then, right-"
|
||||||
|
"click on the bottom-left frame with this map."
|
||||||
|
msgstr ""
|
||||||
|
"把一样宽高的展示框全部放在墙上,然后手持此地图右键左下角的"
|
||||||
|
"展示框即可"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:56
|
||||||
|
msgid ""
|
||||||
|
"Shift-click one of the placed maps to remove the whole poster in one shot."
|
||||||
|
msgstr ""
|
||||||
|
"潜行攻击放置的地图,即可收回整张地图"
|
||||||
|
|
||||||
|
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:101
|
||||||
|
msgid "{ce}There is not enough space to place this map ({0} × {1})."
|
||||||
|
msgstr "{ce}这里没有足够的空间 (宽: {0} × 高: {1})"
|
@ -23,33 +23,52 @@ permissions:
|
|||||||
imageonmap.userender: true
|
imageonmap.userender: true
|
||||||
imageonmap.new: true
|
imageonmap.new: true
|
||||||
imageonmap.list: true
|
imageonmap.list: true
|
||||||
|
imageonmap.listother: true
|
||||||
imageonmap.get: true
|
imageonmap.get: true
|
||||||
|
imageonmap.getother: true
|
||||||
imageonmap.explore: true
|
imageonmap.explore: true
|
||||||
|
imageonmap.exploreother: true
|
||||||
imageonmap.rename: true
|
imageonmap.rename: true
|
||||||
|
imageonmap.removesplattermap: true
|
||||||
imageonmap.delete: true
|
imageonmap.delete: true
|
||||||
|
imageonmap.deleteother: false
|
||||||
imageonmap.bypasssize: false
|
imageonmap.bypasssize: false
|
||||||
imageonmap.give: false
|
imageonmap.give: false
|
||||||
|
imageonmap.update: true
|
||||||
|
imageonmap.updateother: false
|
||||||
|
|
||||||
imageonmap.userender:
|
imageonmap.userender:
|
||||||
description: "Allows you to use /tomap and related commands (/maptool getremaing). Alias of imageonmap.new."
|
description: "Allows you to use /tomap and related commands (/maptool getremaining). Alias of imageonmap.new."
|
||||||
default: true
|
default: true
|
||||||
|
|
||||||
imageonmap.new:
|
imageonmap.new:
|
||||||
description: "Allows you to use /tomap and related commands (/maptool getremaing)."
|
description: "Allows you to use /tomap and related commands (/maptool getremaining)."
|
||||||
default: true
|
default: true
|
||||||
|
|
||||||
imageonmap.list:
|
imageonmap.list:
|
||||||
description: "Allows you to list the images you rendered."
|
description: "Allows you to list the images you rendered."
|
||||||
default: true
|
default: true
|
||||||
|
|
||||||
|
imageonmap.listother:
|
||||||
|
description: "Allows you to list the images a player have rendered."
|
||||||
|
default: false
|
||||||
|
|
||||||
imageonmap.get:
|
imageonmap.get:
|
||||||
description: "Allows you to get a new map among the ones you already rendered, and related commands (/maptool getremaing)."
|
description: "Allows you to get a new map among the ones you already rendered, and related commands (/maptool getremaining)."
|
||||||
default: true
|
default: true
|
||||||
|
|
||||||
|
imageonmap.getother:
|
||||||
|
description: "Allows you to get a new map among the ones a player have already rendered."
|
||||||
|
default: false
|
||||||
|
|
||||||
imageonmap.explore:
|
imageonmap.explore:
|
||||||
description: "Allows you to open a GUI with all your maps."
|
description: "Allows you to open a GUI with all your maps."
|
||||||
default: true
|
default: true
|
||||||
|
|
||||||
|
imageonmap.exploreother:
|
||||||
|
description: "Allows you to open a GUI with all of the player maps."
|
||||||
|
default: false
|
||||||
|
|
||||||
imageonmap.rename:
|
imageonmap.rename:
|
||||||
description: "Allows you to rename a map you rendered in the past."
|
description: "Allows you to rename a map you rendered in the past."
|
||||||
default: true
|
default: true
|
||||||
@ -62,6 +81,14 @@ permissions:
|
|||||||
description: "Allows you to give a map to a specified player."
|
description: "Allows you to give a map to a specified player."
|
||||||
default: op
|
default: op
|
||||||
|
|
||||||
|
imageonmap.deleteother:
|
||||||
|
description: "Allows you to delete a map a player rendered in the past."
|
||||||
|
default: false
|
||||||
|
|
||||||
|
imageonmap.removesplattermap:
|
||||||
|
description: "Allows you to remove a splatter map from a wall by sneaking and breaking a map."
|
||||||
|
default: true
|
||||||
|
|
||||||
imageonmap.administrative:
|
imageonmap.administrative:
|
||||||
description: "Allows you to perform administrative tasks (like /maptool migrate)."
|
description: "Allows you to perform administrative tasks (like /maptool migrate)."
|
||||||
default: op
|
default: op
|
||||||
@ -69,3 +96,11 @@ permissions:
|
|||||||
imageonmap.bypasssize:
|
imageonmap.bypasssize:
|
||||||
description: "Allows you to create maps larger than the configured limit."
|
description: "Allows you to create maps larger than the configured limit."
|
||||||
default: op
|
default: op
|
||||||
|
|
||||||
|
imageonmap.update:
|
||||||
|
description: "Allows you to update an existing map with a new image."
|
||||||
|
default: true
|
||||||
|
|
||||||
|
imageonmap.updateother:
|
||||||
|
description: "Allows you to update an existing map of an other player with a new image."
|
||||||
|
default: op
|
||||||
|
Loading…
Reference in New Issue
Block a user