Compare commits

...

47 Commits

Author SHA1 Message Date
Vlammar 352774f677
Merge pull request #266 from elyrodso/patch-1
Create pt_BR.po
2022-07-13 15:23:51 +02:00
ely 4f1ceddddd
Create pt_BR.po
Add the language Brazilian Portuguese
2022-05-27 12:48:09 -03:00
Vlammar 243cfc2402
Update pom.xml 2022-01-15 00:41:27 +01:00
Vlammar 2cb33b9bf6
Update plugin.yml
Update numver
2022-01-15 00:19:52 +01:00
Vlammar 0053c7bbc5
Update pom.xml
Updated QL version (fix the issue with IoM 4.2.1 and 1.17.1 and 1.18.1)
2022-01-15 00:18:27 +01:00
Vlammar 900cc7512b
Merge pull request #240 from zDevelopers/fix/missing-check-for-updates-in-config-file
Adds missing `check-for-updates` in the default config file
2021-12-25 14:55:20 +01:00
Amaury Carrade 9406c5be9e
Adds missing `check-for-updates` in the default config file 2021-12-24 19:55:58 +01:00
Vlammar 8092187b26 Fixed issue with the yml list 2021-12-19 02:55:40 +01:00
Vlammar 22a24336b0
Merge pull request #222 from zDevelopers/fix/lag_4.2.0
Edited Readme and fixed various issues
2021-12-13 16:10:57 +01:00
Vlammar 1097ca69c0 Update readme 2021-12-13 16:09:57 +01:00
Vlammar dcf4d208ff Update readme 2021-12-13 16:08:08 +01:00
Vlammar 72a45af77e removed useless consume 2021-12-12 20:28:56 +01:00
Vlammar f18bd12880 Fixed various bugs and now use QL 0.0.5 (awaiting for the 0.0.5 release) 2021-12-12 20:24:14 +01:00
Vlammar 9c5758d654
Merge pull request #229 from NamiUni/indev
Correct the number of MapIDs to the correct value.
2021-12-08 00:13:30 +01:00
Namiu/うにたろう fbfbcd73a2
Merge pull request #1 from NamiUni/NamiUni-patch-1
Correct the number of MapIDs to the correct value.
2021-12-07 12:01:23 +09:00
Namiu/うにたろう ce2b6110a4
Correct the number of MapIDs to the correct value.
The number of MAPIDs available to Minecraft has been changed from 32,767 to 2,147,483,647 in 1.13.
2021-12-07 12:00:08 +09:00
Vlammar d6a5709249 Edited Readme and fixed a lag issue 2021-11-21 17:40:09 +01:00
Vlammar 5191dca932
Merge pull request #219 from zDevelopers/update/1.17
4.2.0
2021-11-15 21:06:01 +01:00
Vlammar 7729565a13 Pr commentaries resolved 2021-11-14 13:39:29 +01:00
Vlammar 08cb90f560 1.16 invisible map support 2021-11-13 13:48:54 +01:00
Vlammar 7ef03a0eae Image are now protected against creeper explosion, arrows, and other unwanted events that could grief maps 2021-11-12 04:46:00 +01:00
Vlammar 52ba80ab70 Fixed an issue with image loading on paper and added allow list for image hosting sites 2021-11-11 21:41:37 +01:00
Vlammar 0f05a05d84 Merge branch 'update/1.17' of https://github.com/zDevelopers/ImageOnMap into update/1.17 2021-11-08 18:33:32 +01:00
Vlammar 6a2c531a4d Add new feature, can now use permode to give image/map count for each player/group. #154 2021-11-08 18:29:31 +01:00
Vlammar 17e1fd7a00
Update ci.yml
Added java 16 and 17
2021-11-07 15:49:57 +01:00
Vlammar 68f37d8247 Removed unused migration tool 2021-11-07 14:33:36 +01:00
Vlammar 548e4154a6
Update licenseheader.txt 2021-10-19 00:11:35 +02:00
Vlammar a74734dfb7 fixed the loading issue 2021-09-19 15:22:04 +02:00
Vlammar c1f793d50a Fixed part of the issues, still splattermap and renaming from GUI to fix 2021-09-03 00:26:27 +02:00
Vlammar 094905324e
Merge pull request #173 from zDevelopers/fix/Sterilized_input_data
fixed the issue with number sterilization and added support format fo…
2021-09-02 22:27:50 +02:00
Vlammar ac51032e1a
Merge pull request #186 from zDevelopers/fix/UUID_command
Fix UUIDs issues
2021-05-31 22:35:40 +02:00
Vlammar e1fd9ca2d8 Renamed the method consumePlayerCommand 2021-05-31 22:34:49 +02:00
Vlammar 468d3af7d5 removed a debugg print 2021-05-30 20:21:58 +02:00
Vlammar 78de6a4144 fixed the issue for offline server and for paper servers 2021-05-30 20:05:10 +02:00
Vlammar 20d2a60d29
Merge pull request #185 from zDevelopers/fix/glow_xp_bug
Unlimited xp issue with glow effect
2021-05-30 18:09:09 +02:00
Vlammar fdcb028b20 Use the quartzlib gloweffect. That should fix the xp issue 2021-05-29 22:10:22 +02:00
Vlammar e0dc356f36
Merge pull request #183 from forerosantiago/spanish-translation
Spanish translation
2021-05-26 00:14:05 +02:00
Vlammar 99f4263d66
Update config.yml 2021-05-26 00:12:11 +02:00
Santiago Forero 5258de55df add spanish translations. 2021-05-25 15:31:49 +00:00
Santiago Forero 62117e90ec
Create es_ES.po 2021-05-20 10:20:20 -05:00
Vlammar 0662e6343e
Merge pull request #180 from Boy0000/indev
Adding permission for placing maps
2021-05-16 19:45:23 +02:00
Boy 02f596fc3a adding requested changes 2021-05-16 14:31:45 +02:00
Boy 5f2623d709 Adding place splattermap permission 2021-05-16 02:35:14 +02:00
Vlammar 483a0a29f0
Merge pull request #170 from pierluigizagaria/new-command-arg-fix
Changed resize args.
2021-04-30 01:34:03 +02:00
Vlammar a45638b86c fixed the issue with number sterilization and added support format for nxm and n*m 2021-04-19 23:10:28 +02:00
ArciducaZagaria 8f6987abd3 Added previous command args for compatibility. 2021-04-19 11:08:42 +02:00
ArciducaZagaria 24ded8d2f7 Changed resize args. 2021-04-18 21:07:05 +02:00
24 changed files with 1643 additions and 160 deletions

View File

@ -15,7 +15,7 @@ jobs:
strategy:
matrix:
java: [8, 9, 10, 11, 12, 13, 14, 15]
java: [8, 11, 16, 17]
steps:
- name: Checkout

View File

@ -209,6 +209,40 @@ This version fixes some small console spam bugs and improves the performance of
- Updates to [QuartzLib 0.0.4](https://github.com/zDevelopers/QuartzLib/blob/master/CHANGELOG.md#quartzlib-004),
where all these improvements were made.
### 4.2.0 —The permission and cliffhanger part 1 Update
Permission and cliffhanger Update finally allow a full official support of minecraft 1.17 and java 17. This comes with bugfixes and new features. We are working on the next big update that will be the 5.0. If you want to know more about this checkout our 5.0 milestone.
This version is only compatible with Minecraft 1.15+. We have no clue if this will work with minecraft 1.18 (it should, but we are not sure)
This was tested on Paper 1.17, 1.16 and spigot 1.17, 1.15. If there are any errors on a 1.15+ version of spigot/paper please contact us on our discord or create a ticket on the issues page (better)
- 1.17 support
- Permissions to limit the number of map/image used/owned is now possible. (permissions imageonmap.mapLimit.XX and imageonmap.imageLimit.XX where XX is an integer and will define the limit allowed for the player)
- Added an allowlist for trusted image hosting website (Add this in config.yml allowlist_hostingsite: , you then have to put the url of trusted websites. There is also a permission to ignore the allow list imageonmap.bypasswhitelist)
- Images are now protected against non player based interaction. (Bye bye sneaky skeleton that used to grief art)
- Now by default when deploying a map the item frame turn invisible and returned to visible hen removing the map from the frame (there is a permission to allow this behaviour imageonmap.placeinvisiblesplattermap)
- Bug fixes & optimizations.
- Dropped migrator (no more error when reloading or when sometimes loading the server)
- Fixed an issue when resizing with resize 0 0
- Fixed a map loading issue. (map did not render at all if they weren't in a player inventory
- Added a fix for map loading on paper. (map did not render fully on paper)
### 4.2.1 — The permission and cliffhanger part 1 Update Two
- Fixed a lag issue caused by the map loading changes of 4.2.0
- 1.18 support
- Fixed an issue with map part not working properly
- Fixed an issue in survival where an incorrect amount of map were consumed
- Fixed an issue where image map folder was not created and cause issues
## Data collection
We use metrics to collect [basic information about the usage of this plugin](https://bstats.org/plugin/bukkit/ImageOnMap).

View File

@ -3,8 +3,8 @@ ${licenseFirst}
</#if>
${licensePrefix}Copyright or © or Copr. Moribus (2013)
${licensePrefix}Copyright or © or Copr. ProkopyL <prokopylmc@gmail.com> (2015)
${licensePrefix}Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 2020)
${licensePrefix}Copyright or © or Copr. Vlammar <valentin.jabre@gmail.com> (2019 2020)
${licensePrefix}Copyright or © or Copr. Amaury Carrade <amaury@carrade.eu> (2016 2021)
${licensePrefix}Copyright or © or Copr. Vlammar <valentin.jabre@gmail.com> (2019 2021)
${licensePrefix?replace(" +$", "", "r")}
${licensePrefix}This software is a computer program whose purpose is to allow insertion of
${licensePrefix}custom images in a Minecraft word.

View File

@ -39,7 +39,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>fr.moribus</groupId>
<artifactId>ImageOnMap</artifactId>
<version>4.1.2</version>
<version>4.2.2</version>
<packaging>jar</packaging>
<properties>
@ -134,7 +134,7 @@
<dependency>
<groupId>fr.zcraft</groupId>
<artifactId>quartzlib</artifactId>
<version>0.0.4</version>
<version>0.0.6</version>
</dependency>
<dependency>
<groupId>org.bstats</groupId>

View File

@ -43,7 +43,6 @@ import fr.moribus.imageonmap.commands.maptool.GetCommand;
import fr.moribus.imageonmap.commands.maptool.GetRemainingCommand;
import fr.moribus.imageonmap.commands.maptool.GiveCommand;
import fr.moribus.imageonmap.commands.maptool.ListCommand;
import fr.moribus.imageonmap.commands.maptool.MigrateCommand;
import fr.moribus.imageonmap.commands.maptool.NewCommand;
import fr.moribus.imageonmap.commands.maptool.RenameCommand;
import fr.moribus.imageonmap.commands.maptool.UpdateCommand;
@ -51,8 +50,6 @@ import fr.moribus.imageonmap.image.ImageIOExecutor;
import fr.moribus.imageonmap.image.ImageRendererExecutor;
import fr.moribus.imageonmap.image.MapInitEvent;
import fr.moribus.imageonmap.map.MapManager;
import fr.moribus.imageonmap.migration.MigratorExecutor;
import fr.moribus.imageonmap.migration.V3Migrator;
import fr.moribus.imageonmap.ui.MapItemManager;
import fr.zcraft.quartzlib.components.commands.CommandWorkers;
import fr.zcraft.quartzlib.components.commands.Commands;
@ -104,8 +101,9 @@ public final class ImageOnMap extends QuartzPlugin {
public void onEnable() {
// Creating the images and maps directories if necessary
try {
imagesDirectory = checkPluginDirectory(imagesDirectory, V3Migrator.getOldImagesDirectory(this));
//imagesDirectory = checkPluginDirectory(imagesDirectory, V3Migrator.getOldImagesDirectory(this));
checkPluginDirectory(mapsDirectory);
checkPluginDirectory(imagesDirectory);
} catch (final IOException ex) {
PluginLogger.error("FATAL: " + ex.getMessage());
this.setEnabled(false);
@ -136,7 +134,7 @@ public final class ImageOnMap extends QuartzPlugin {
GiveCommand.class,
GetRemainingCommand.class,
ExploreCommand.class,
MigrateCommand.class,
//MigrateCommand.class,//Removed for now doesn't work nor is useful, maybe useful later on
UpdateCommand.class
);
@ -161,7 +159,7 @@ public final class ImageOnMap extends QuartzPlugin {
public void onDisable() {
MapManager.exit();
MapItemManager.exit();
MigratorExecutor.waitForMigration();
//MigratorExecutor.waitForMigration();//Removed for now doesn't work nor is useful, maybe useful later on
super.onDisable();
}

View File

@ -37,7 +37,11 @@
package fr.moribus.imageonmap;
import fr.zcraft.quartzlib.components.i18n.I;
import fr.zcraft.quartzlib.tools.PluginLogger;
import java.util.Set;
import org.bukkit.permissions.Permissible;
import org.bukkit.permissions.PermissionAttachmentInfo;
public enum Permissions {
NEW("imageonmap.new", "imageonmap.userender"),
@ -46,6 +50,8 @@ public enum Permissions {
GET("imageonmap.get"),
GETOTHER("imageonmap.getother"),
RENAME("imageonmap.rename"),
PLACE_SPLATTER_MAP("imageonmap.placesplattermap"),
PLACE_INVISIBLE_SPLATTER_MAP("imageonmap.placeinvisiblesplattermap"),
REMOVE_SPLATTER_MAP("imageonmap.removesplattermap"),
DELETE("imageonmap.delete"),
DELETEOTHER("imageonmap.deleteother"),
@ -53,7 +59,10 @@ public enum Permissions {
UPDATEOTHER("imageonmap.updateother"),
ADMINISTRATIVE("imageonmap.administrative"),
BYPASS_SIZE("imageonmap.bypasssize"),
GIVE("imageonmap.give");
BYPASS_IMAGE_LIMIT("imageonmap.bypassimagelimit"),
BYPASS_MAP_LIMIT("imageonmap.bypassmaplimit"),
GIVE("imageonmap.give"),
BYPASS_WHITELIST("imageonmap.bypasswhitelist");
private final String permission;
private final String[] aliases;
@ -82,4 +91,37 @@ public enum Permissions {
return false;
}
/**
* Return the limit of map the user is allowed to make
*
* @param permissible The permissible to check.
* @return the limit
*/
public int getLimitPermission(Permissible permissible, LimitType type) {
Set<PermissionAttachmentInfo> perms = permissible.getEffectivePermissions();
String prefix = String.format("imageonmap.%slimit.", type.name());
for (PermissionAttachmentInfo pai : perms) {
String permString = pai.getPermission().toLowerCase();
if (permString.startsWith(prefix)) {
if (pai.getValue()) {
try {
int limit = Integer.parseInt(permString.split(prefix)[1].trim());
return limit;
} catch (Exception e) {
PluginLogger.warning(
I.t("The correct syntax for setting map limit node is: ImageOnMap.mapLimit.X "
+ "where you can replace X with the limit of map a player is allowed to have"));
}
}
}
}
return 2147483647; //Virtually no limit
}
public enum LimitType {
map,
image
}
}

View File

@ -37,9 +37,11 @@
package fr.moribus.imageonmap;
import static fr.zcraft.quartzlib.components.configuration.ConfigurationItem.item;
import static fr.zcraft.quartzlib.components.configuration.ConfigurationItem.list;
import fr.zcraft.quartzlib.components.configuration.Configuration;
import fr.zcraft.quartzlib.components.configuration.ConfigurationItem;
import fr.zcraft.quartzlib.components.configuration.ConfigurationList;
import java.util.Locale;
@ -59,4 +61,7 @@ public final class PluginConfiguration extends Configuration {
public static ConfigurationItem<Integer> LIMIT_SIZE_X = item("limit-map-size-x", 0);
public static ConfigurationItem<Integer> LIMIT_SIZE_Y = item("limit-map-size-y", 0);
public static ConfigurationList<String> IMAGES_HOSTNAMES_WHITELIST =
list("images-hostnames-whitelist", String.class);
}

View File

@ -36,23 +36,52 @@
package fr.moribus.imageonmap.commands;
import fr.moribus.imageonmap.PluginConfiguration;
import fr.moribus.imageonmap.map.ImageMap;
import fr.moribus.imageonmap.map.MapManager;
import fr.zcraft.quartzlib.components.commands.Command;
import fr.zcraft.quartzlib.components.commands.CommandException;
import fr.zcraft.quartzlib.components.i18n.I;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
public abstract class IoMCommand extends Command {
protected boolean checkHostnameWhitelist(final URL url) {
final List<String> hostnames = PluginConfiguration.IMAGES_HOSTNAMES_WHITELIST.get()
.stream()
.map(String::trim)
.filter(h -> !h.isEmpty())
.collect(Collectors.toList());
if (hostnames.isEmpty()) {
return true;
}
return hostnames
.stream()
.map(h -> h.replaceAll("https://", "").replaceAll("http://", ""))
.anyMatch(h -> h.equalsIgnoreCase(url.getHost()));
}
protected void retrieveUUID(final String arg, final Consumer<UUID> consumer) {
// If it is being removed we may have to use Mojang services
consumer.accept(Bukkit.getOfflinePlayer(arg).getUniqueId());
}
protected ImageMap getMapFromArgs() throws CommandException {
return getMapFromArgs(playerSender(), 0, true);
}
protected ImageMap getMapFromArgs(Player player, int index, boolean expand) throws CommandException {
protected ImageMap getMapFromArgs(final Player player, final int index, boolean expand) throws CommandException {
if (args.length <= index) {
throwInvalidArgument(I.t("You need to give a map name."));
}

View File

@ -36,7 +36,6 @@
package fr.moribus.imageonmap.commands.maptool;
import fr.moribus.imageonmap.ImageOnMap;
import fr.moribus.imageonmap.Permissions;
import fr.moribus.imageonmap.commands.IoMCommand;
import fr.moribus.imageonmap.map.ImageMap;
@ -102,13 +101,7 @@ public class DeleteCommand extends IoMCommand {
mapName = arguments.get(0);
}
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
if (uuid == null) {
warning(sender, I.t("The player {0} does not exist.", playerName));
return;
}
retrieveUUID(playerName, uuid -> {
ImageMap map = MapManager.getMap(uuid, mapName);
if (map == null) {

View File

@ -37,7 +37,6 @@
package fr.moribus.imageonmap.commands.maptool;
import fr.moribus.imageonmap.ImageOnMap;
import fr.moribus.imageonmap.Permissions;
import fr.moribus.imageonmap.commands.IoMCommand;
import fr.moribus.imageonmap.gui.MapListGui;
@ -45,6 +44,7 @@ import fr.zcraft.quartzlib.components.commands.CommandException;
import fr.zcraft.quartzlib.components.commands.CommandInfo;
import fr.zcraft.quartzlib.components.gui.Gui;
import fr.zcraft.quartzlib.components.i18n.I;
import fr.zcraft.quartzlib.tools.PluginLogger;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
@ -52,7 +52,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandInfo(name = "explore",usageParameters = "[player name]")
@CommandInfo(name = "explore", usageParameters = "[player name]")
public class ExploreCommand extends IoMCommand {
@Override
protected void run() throws CommandException {
@ -74,15 +74,11 @@ public class ExploreCommand extends IoMCommand {
playerName = sender.getName();
}
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
if (uuid == null) {
warning(sender, I.t("The player {0} does not exist.", playerName));
return;
}
retrieveUUID(playerName, uuid -> {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
if (sender.isOnline()) {
Gui.open(sender, new MapListGui(offlinePlayer,playerName));
Gui.open(sender, new MapListGui(offlinePlayer, playerName));
}
});

View File

@ -82,16 +82,13 @@ public class GetCommand extends IoMCommand {
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
retrieveUUID(playerName, uuid -> {
if (!sender.isOnline()) {
return;
}
if (uuid == null) {
warning(sender, I.t("The player {0} does not exist.", playerName));
return;
}
ImageMap map = MapManager.getMap(uuid, mapName);
if (map == null) {

View File

@ -36,7 +36,6 @@
package fr.moribus.imageonmap.commands.maptool;
import fr.moribus.imageonmap.ImageOnMap;
import fr.moribus.imageonmap.Permissions;
import fr.moribus.imageonmap.commands.IoMCommand;
import fr.moribus.imageonmap.map.ImageMap;
@ -44,10 +43,7 @@ import fr.moribus.imageonmap.map.MapManager;
import fr.zcraft.quartzlib.components.commands.CommandException;
import fr.zcraft.quartzlib.components.commands.CommandInfo;
import fr.zcraft.quartzlib.components.i18n.I;
import fr.zcraft.quartzlib.tools.mojang.UUIDFetcher;
import java.io.IOException;
import java.util.ArrayList;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -106,42 +102,21 @@ public class GiveCommand extends IoMCommand {
final Player sender = playerSender();
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(from, uuid -> {
if (uuid == null) {
warning(sender, I.t("The player {0} does not exist.", from));
return;
}
retrieveUUID(from, uuid -> {
final ImageMap map = MapManager.getMap(uuid, mapName);
if (map == null) {
warning(sender, I.t("This map does not exist."));
return;
}
try {
UUID uuid2 = UUIDFetcher.fetch(playerName);
if (uuid2 == null) {
warning(sender, I.t("The player {0} does not exist.", playerName));
return;
}
if (Bukkit.getPlayer((uuid2)) == null || !Bukkit.getPlayer((uuid2)).isOnline()) {
warning(sender, I.t("The player {0} is not connected.", playerName));
return;
}
retrieveUUID(playerName, uuid2 -> {
if (Bukkit.getPlayer((uuid2)) != null && Bukkit.getPlayer((uuid2)).isOnline()
&& map.give(Bukkit.getPlayer(uuid2))) {
info(I.t("The requested map was too big to fit in your inventory."));
info(I.t("Use '/maptool getremaining' to get the remaining maps."));
}
} catch (IOException | InterruptedException e) {
try {
throwInvalidArgument(I.t("The player {0} does not exist.", playerName));
} catch (CommandException ex) {
ex.printStackTrace();
}
return;
}
});
});
}

View File

@ -36,7 +36,6 @@
package fr.moribus.imageonmap.commands.maptool;
import fr.moribus.imageonmap.ImageOnMap;
import fr.moribus.imageonmap.Permissions;
import fr.moribus.imageonmap.commands.IoMCommand;
import fr.moribus.imageonmap.map.ImageMap;
@ -78,17 +77,9 @@ public class ListCommand extends IoMCommand {
final Player sender = playerSender();
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
retrieveUUID(playerName, uuid -> {
List<ImageMap> mapList = MapManager.getMapList(uuid);
if (uuid == null) {
try {
throwInvalidArgument(I.t("Player {} not found.", playerName));
} catch (CommandException e) {
e.printStackTrace();
}
return;
}
if (mapList.isEmpty()) {
info(sender, I.t("No map found."));
return;

View File

@ -41,6 +41,7 @@ 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.moribus.imageonmap.map.PosterMap;
import fr.zcraft.quartzlib.components.commands.CommandException;
import fr.zcraft.quartzlib.components.commands.CommandInfo;
@ -62,8 +63,12 @@ public class NewCommand extends IoMCommand {
switch (args[1]) {
case "resize":
return ImageUtils.ScalingType.CONTAINED;
case "stretch":
case "stretched":
case "resize-stretched":
return ImageUtils.ScalingType.STRETCHED;
case "cover":
case "covered":
case "resize-covered":
return ImageUtils.ScalingType.COVERED;
default:
@ -83,21 +88,70 @@ public class NewCommand extends IoMCommand {
if (args.length < 1) {
throwInvalidArgument(I.t("You must give an URL to take the image from."));
}
//Checking if the map limit and image limit
if (!Permissions.BYPASS_IMAGE_LIMIT.grantedTo(player)) {
int imageLimit = Permissions.NEW.getLimitPermission(player, Permissions.LimitType.image);
int imageCount = MapManager.getPlayerMapStore(player.getUniqueId()).getImagesCount();
if (imageLimit <= imageCount) {
throwInvalidArgument(
I.t("Your image limit is set to {0} and you currently have {1} loaded image(s)",
imageLimit,
imageCount));
}
}
if (!Permissions.BYPASS_MAP_LIMIT.grantedTo(player)) {
int mapLimit = Permissions.NEW.getLimitPermission(player, Permissions.LimitType.map);
int mapCount = MapManager.getPlayerMapStore(player.getUniqueId()).getMapCount();
if (mapLimit <= mapCount) {
throwInvalidArgument(
I.t("Your map limit is set to {0} and you currently have {1} loaded map(s)",
mapLimit,
mapCount));
}
}
try {
url = new URL(args[0]);
if (!Permissions.BYPASS_WHITELIST.grantedTo(player) && !checkHostnameWhitelist(url)) {
throwInvalidArgument(I.t("This hosting website is not trusted, if you think that this is an error "
+ " contact your server administrator"));
return;
}
} catch (MalformedURLException ex) {
throwInvalidArgument(I.t("Invalid URL."));
return;
}
if (args.length >= 2) {
if (args.length >= 4) {
width = Integer.parseInt(args[2]);
height = Integer.parseInt(args[3]);
if (args.length >= 3) {
try {
if (args.length >= 4) {
width = Integer.parseInt(args[2]);
height = Integer.parseInt(args[3]);
} else {
String[] size;
if (args[2].contains("*") && !args[2].contains("x")) {
size = args[2].split("\\*");
width = Integer.parseInt(size[0]);
height = Integer.parseInt(size[1]);
}
if (!args[2].contains("*") && args[2].contains("x")) {
size = args[2].split("x");
width = Integer.parseInt(size[0]);
height = Integer.parseInt(size[1]);
}
}
} catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
throwInvalidArgument(I.t("resize dimension as to be in format <n m> or <nxm> or <n*m>."));
return;
}
}
scaling = resizeMode();
}
if (width < 0 || height < 0) {
throwInvalidArgument(I.t("You need to specify a valid size. e.g. resize 4 5"));
return;
}
try {
ActionBar.sendPermanentMessage(player, ChatColor.DARK_GREEN + I.t("Rendering..."));
ImageRendererExecutor

View File

@ -36,7 +36,6 @@
package fr.moribus.imageonmap.commands.maptool;
import fr.moribus.imageonmap.ImageOnMap;
import fr.moribus.imageonmap.Permissions;
import fr.moribus.imageonmap.commands.IoMCommand;
import fr.moribus.imageonmap.image.ImageRendererExecutor;
@ -155,11 +154,9 @@ public class UpdateCommand extends IoMCommand {
}
//TODO passer en static
ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
if (uuid == null) {
warning(sender, I.t("The player {0} does not exist.", playerName));
return;
}
//ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> {
retrieveUUID(playerName, uuid -> {
ImageMap map = MapManager.getMap(uuid, mapName);
if (map == null) {
@ -170,6 +167,12 @@ public class UpdateCommand extends IoMCommand {
URL url1;
try {
url1 = new URL(url);
if (!Permissions.BYPASS_WHITELIST.grantedTo(playerSender) && !checkHostnameWhitelist(url1)) {
throwInvalidArgument(I.t("This hosting website is not trusted, if you think that this is an error "
+ " contact your server administrator"));
return;
}
//TODO replace by a check of the load status.(if not loaded load the mapmanager)
MapManager.load(false);//we don't want to spam the console each time we reload the mapManager
@ -213,7 +216,7 @@ public class UpdateCommand extends IoMCommand {
ActionBar.removeMessage(playerSender);
}
}
} catch (MalformedURLException ex) {
} catch (MalformedURLException | CommandException ex) {
warning(sender, I.t("Invalid URL."));
}
});

View File

@ -46,6 +46,7 @@ import fr.zcraft.quartzlib.components.gui.Gui;
import fr.zcraft.quartzlib.components.gui.GuiAction;
import fr.zcraft.quartzlib.components.gui.PromptGui;
import fr.zcraft.quartzlib.components.i18n.I;
import fr.zcraft.quartzlib.tools.PluginLogger;
import fr.zcraft.quartzlib.tools.items.ItemStackBuilder;
import fr.zcraft.quartzlib.tools.runners.RunTask;
import org.apache.commons.lang.ArrayUtils;
@ -208,32 +209,35 @@ public class MapDetailGui extends ExplorerGui<Integer> {
return;
}
PromptGui.prompt(getPlayer(), newName -> {
if (!Permissions.RENAME.grantedTo(getPlayer())) {
I.sendT(getPlayer(), "{ce}You are no longer allowed to do that.");
return;
}
try {
PromptGui.prompt(getPlayer(), newName -> {
if (!Permissions.RENAME.grantedTo(getPlayer())) {
I.sendT(getPlayer(), "{ce}You are no longer allowed to do that.");
return;
}
if (newName == null || newName.isEmpty()) {
I.sendT(getPlayer(), "{ce}Map names can't be empty.");
return;
}
if (newName.equals(map.getName())) {
return;
}
if (newName == null || newName.isEmpty()) {
I.sendT(getPlayer(), "{ce}Map names can't be empty.");
return;
}
if (newName.equals(map.getName())) {
return;
}
map.rename(newName);
I.sendT(getPlayer(), "{cs}Map successfully renamed.");
map.rename(newName);
I.sendT(getPlayer(), "{cs}Map successfully renamed.");
if (getParent() != null) {
RunTask.later(() -> Gui.open(getPlayer(), this), 1L);
} else {
close();
}
}, map.getName(), this);
if (getParent() != null) {
RunTask.later(() -> Gui.open(getPlayer(), this), 1L);
} else {
close();
}
}, map.getName(), this);
} catch (IllegalStateException e) {
PluginLogger.error("Error while renaming map: ", e);
}
}
@GuiAction("delete")

View File

@ -98,6 +98,7 @@ public class ImageRendererExecutor extends Worker {
public ImageMap run() throws Throwable {
BufferedImage image = null;
//If the link is an imgur one
if (url.toString().toLowerCase().startsWith("https://imgur.com/")) {
@ -162,7 +163,6 @@ public class ImageRendererExecutor extends Worker {
submitQuery(new WorkerRunnable<ImageMap>() {
@Override
public ImageMap run() throws Throwable {
final URLConnection connection = connecting(url);
final InputStream stream = connection.getInputStream();

View File

@ -38,8 +38,15 @@ package fr.moribus.imageonmap.image;
import fr.moribus.imageonmap.ImageOnMap;
import fr.moribus.imageonmap.map.MapManager;
import fr.zcraft.quartzlib.components.events.FutureEventHandler;
import fr.zcraft.quartzlib.components.events.FutureEvents;
import fr.zcraft.quartzlib.components.events.WrappedEvent;
import fr.zcraft.quartzlib.core.QuartzLib;
import fr.zcraft.quartzlib.tools.PluginLogger;
import fr.zcraft.quartzlib.tools.reflection.Reflection;
import fr.zcraft.quartzlib.tools.runners.RunTask;
import java.io.File;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
@ -49,7 +56,10 @@ import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.hanging.HangingBreakEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerItemHeldEvent;
import org.bukkit.event.world.ChunkLoadEvent;
@ -57,8 +67,11 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.map.MapView;
public class MapInitEvent implements Listener {
public static void init() {
QuartzLib.registerEvents(new MapInitEvent());
FutureEvents.registerFutureEvents(new EntitiesLoadListener());
for (World world : Bukkit.getWorlds()) {
for (ItemFrame frame : world.getEntitiesByClass(ItemFrame.class)) {
@ -97,11 +110,13 @@ public class MapInitEvent implements Listener {
@EventHandler
public void onChunkLoad(ChunkLoadEvent event) {
for (Entity entity : event.getChunk().getEntities()) {
if (entity instanceof ItemFrame) {
initMap(((ItemFrame) entity).getItem());
RunTask.later(() -> {
for (Entity entity : event.getChunk().getEntities()) {
if (entity instanceof ItemFrame) {
initMap(((ItemFrame) entity).getItem());
}
}
}
}, 5L);
}
@EventHandler
@ -131,4 +146,100 @@ public class MapInitEvent implements Listener {
}
}
@EventHandler
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
//Negate entity interaction with item frame containing IoM maps.
Entity entity = event.getEntity();
if (!(entity instanceof ItemFrame)) {
return;
}
Entity damager = event.getDamager();
if (damager instanceof Player) {
//can solve the dup with the map here by doing a better handling
return;
}
ItemStack item = ((ItemFrame) entity).getItem();
if (item.getType() == Material.FILLED_MAP) {
//if the map exist we canceled the event
if (MapManager.getMap(item) != null) {
event.setCancelled(true);
}
}
}
@EventHandler
public void onEntityDamageByBlockEvent(EntityDamageByBlockEvent event) {
//Negate damage done to IoM maps by some blocks
Entity entity = event.getEntity();
if (!(entity instanceof ItemFrame)) {
return;
}
ItemStack item = ((ItemFrame) entity).getItem();
if (item.getType() == Material.FILLED_MAP) {
//if the map exist we canceled the event
if (MapManager.getMap(item) != null) {
switch (event.getCause()) {
case MAGIC:
case ENTITY_EXPLOSION:
case FIRE_TICK:
case LIGHTNING:
case CRAMMING:
case WITHER:
case SUFFOCATION:
case DROWNING:
case BLOCK_EXPLOSION:
event.setCancelled(true);
break;
default:
}
}
}
}
@EventHandler
public void onHangingBreakEvent(HangingBreakEvent event) {
Entity entity = event.getEntity();
if (!(entity instanceof ItemFrame)) {
return;
}
ItemStack item = ((ItemFrame) entity).getItem();
if (item.getType() == Material.FILLED_MAP) {
//if the map exist we canceled the event
if (MapManager.getMap(item) != null) {
if (event.getCause() == HangingBreakEvent.RemoveCause.EXPLOSION) {
//creeper goes boom
event.setCancelled(true);
}
}
}
}
protected static final class EntitiesLoadListener implements Listener {
@FutureEventHandler(event = "world.EntitiesLoadEvent")
public void onEntitiesLoad(WrappedEvent event) {
//New in 1.17
//Used to make sure map are really loaded in 1.17 on Paper (else some won't render or update properly)
RunTask.later(() -> {
try {
List<Entity> entities = (List) Reflection.call(event.getEvent(), "getEntities");
for (Entity entity : entities) {
if (entity instanceof ItemFrame) {
initMap(((ItemFrame) entity).getItem());
}
}
} catch (Exception e) {
PluginLogger.error(e.toString());
return;
}
}, 5L);
}
}
}

View File

@ -43,6 +43,7 @@ import fr.moribus.imageonmap.map.PosterMap;
import fr.moribus.imageonmap.map.SingleMap;
import fr.zcraft.quartzlib.components.i18n.I;
import fr.zcraft.quartzlib.core.QuartzLib;
import fr.zcraft.quartzlib.tools.PluginLogger;
import fr.zcraft.quartzlib.tools.items.ItemStackBuilder;
import fr.zcraft.quartzlib.tools.items.ItemUtils;
import fr.zcraft.quartzlib.tools.runners.RunTask;
@ -251,10 +252,17 @@ public class MapItemManager implements Listener {
if (!MapManager.managesMap(mapItem)) {
return;
}
if (!Permissions.PLACE_SPLATTER_MAP.grantedTo(player)) {
player.sendMessage(I.t(ChatColor.RED + "You do not have permission to place splatter maps."));
event.setCancelled(true);
return;
}
frame.setItem(new ItemStack(Material.AIR));
if (SplatterMapManager.hasSplatterAttributes(mapItem)) {
if (!SplatterMapManager.placeSplatterMap(frame, player, event)) {
event.setCancelled(true); //In case of an error allow to cancel map placement
return;
}
@ -267,33 +275,20 @@ public class MapItemManager implements Listener {
if (frame.getFacing() != BlockFace.UP && frame.getFacing() != BlockFace.DOWN) {
frame.setRotation(Rotation.NONE);
}
// 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 (mapItem.hasItemMeta() && mapItem.getItemMeta().hasDisplayName()
&& mapItem.getItemMeta().getDisplayName().startsWith("§6")) {
//runtask
//TODO utiliser run task.later pour essayer de regler le pb d'itemframe bas gauche sans carte
final ItemStack frameItem = mapItem.clone();
final ItemMeta meta = frameItem.getItemMeta();
meta.setDisplayName(null);
frameItem.setItemMeta(meta);
RunTask.later(() -> {
frame.setItem(frameItem);
frame.setRotation(Rotation.NONE);
}, 5L);
} else {
final ItemStack frameItem = mapItem.clone();
final ItemMeta meta = frameItem.getItemMeta();
meta.setDisplayName(null);
frameItem.setItemMeta(meta);
RunTask.later(() -> {
frame.setItem(frameItem);
frame.setRotation(Rotation.NONE);
RunTask.later(() -> {
frame.setItem(mapItem);
}, 5L);
}
}, 5L);
}
ItemUtils.consumeItem(player, mapItem);
//ItemUtils.consumeItem(player, mapItem); //useless no?
}
private static void onItemFrameRemove(ItemFrame frame, Player player, EntityDamageByEntityEvent event) {
@ -312,7 +307,6 @@ public class MapItemManager implements Listener {
|| !SplatterMapManager.hasSplatterMap(player, poster)) {
poster.give(player);
}
return;
}
}
@ -321,7 +315,7 @@ public class MapItemManager implements Listener {
if (!MapManager.managesMap(frame.getItem())) {
return;
}
SplatterMapManager.removePropertiesFromFrames(player, frame);
frame.setItem(new ItemStackBuilder(item)
.title(getMapTitle(item))
.hideAllAttributes()

View File

@ -37,6 +37,7 @@
package fr.moribus.imageonmap.ui;
import com.google.common.collect.ImmutableMap;
import fr.moribus.imageonmap.Permissions;
import fr.moribus.imageonmap.image.MapInitEvent;
import fr.moribus.imageonmap.map.ImageMap;
import fr.moribus.imageonmap.map.MapManager;
@ -44,15 +45,16 @@ import fr.moribus.imageonmap.map.PosterMap;
import fr.zcraft.quartzlib.components.i18n.I;
import fr.zcraft.quartzlib.components.nbt.NBT;
import fr.zcraft.quartzlib.components.nbt.NBTCompound;
import fr.zcraft.quartzlib.components.nbt.NBTException;
import fr.zcraft.quartzlib.components.nbt.NBTList;
import fr.zcraft.quartzlib.tools.PluginLogger;
import fr.zcraft.quartzlib.tools.items.GlowEffect;
import fr.zcraft.quartzlib.tools.items.ItemStackBuilder;
import fr.zcraft.quartzlib.tools.reflection.NMSException;
import fr.zcraft.quartzlib.tools.runners.RunTask;
import fr.zcraft.quartzlib.tools.text.MessageSender;
import fr.zcraft.quartzlib.tools.world.FlatLocation;
import fr.zcraft.quartzlib.tools.world.WorldUtils;
import java.lang.reflect.Method;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.Material;
@ -65,7 +67,8 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.MapMeta;
//TODO rework splatter effect, using ID is far more stable than nbt tags.
// To update when adding small picture previsualization.
public abstract class SplatterMapManager {
private SplatterMapManager() {
}
@ -125,22 +128,8 @@ public abstract class SplatterMapManager {
* @return The modified item stack. The instance may be different if the passed item stack is not a craft itemstack.
*/
public static ItemStack addSplatterAttribute(final ItemStack itemStack) {
try {
final NBTCompound nbt = NBT.fromItemStack(itemStack);
final NBTList enchantments = new NBTList();
final NBTCompound protection = new NBTCompound();
protection.put("id", "minecraft:mending");
protection.put("lvl", 1);
enchantments.add(protection);
nbt.put("Enchantments", enchantments);
return NBT.addToItemStack(itemStack, nbt, false);
} catch (NBTException | NMSException e) {
PluginLogger.error("Unable to set Splatter Map attribute on item", e);
return itemStack;
}
GlowEffect.addGlow(itemStack);
return itemStack;
}
/**
@ -151,6 +140,7 @@ public abstract class SplatterMapManager {
* @return True if the attribute was detected.
*/
public static boolean hasSplatterAttributes(ItemStack itemStack) {
try {
final NBTCompound nbt = NBT.fromItemStack(itemStack);
if (!nbt.containsKey("Enchantments")) {
@ -185,7 +175,7 @@ public abstract class SplatterMapManager {
* Return true if it has a specified splatter map
*
* @param player The player to check.
* @param map The map to check.
* @param map The map to check.
* @return True if the player has this map
*/
public static boolean hasSplatterMap(Player player, PosterMap map) {
@ -254,6 +244,7 @@ public abstract class SplatterMapManager {
//Rotation management relative to player rotation the default position is North,
// when on ceiling we flipped the rotation
RunTask.later(() -> {
addPropertiesToFrames(player, frame);
frame.setItem(
new ItemStackBuilder(Material.FILLED_MAP).nbt(ImmutableMap.of("map", id)).craftItem());
}, 5L);
@ -315,6 +306,7 @@ public abstract class SplatterMapManager {
int id = poster.getMapIdAtReverseY(i);
RunTask.later(() -> {
addPropertiesToFrames(player, frame);
frame.setItem(
new ItemStackBuilder(Material.FILLED_MAP).nbt(ImmutableMap.of("map", id)).craftItem());
}, 5L);
@ -373,10 +365,31 @@ public abstract class SplatterMapManager {
for (ItemFrame frame : matchingFrames) {
if (frame != null) {
removePropertiesFromFrames(player, frame);
frame.setItem(null);
}
}
return poster;
}
public static void addPropertiesToFrames(Player player, ItemFrame frame) {
if (Permissions.PLACE_INVISIBLE_SPLATTER_MAP.grantedTo(player)) {
try {
Method setVisible = frame.getClass().getMethod("setVisible", boolean.class);
setVisible.invoke(frame, false);
} catch (Exception e) {
//1.16-
}
}
}
public static void removePropertiesFromFrames(Player player, ItemFrame frame) {
try {
Method setVisible = frame.getClass().getMethod("setVisible", boolean.class);
setVisible.invoke(frame, true);
} catch (Exception e) {
//1.16-
}
}
}

View File

@ -2,7 +2,7 @@
# Plugin language. Empty: system language.
# Available: en-US (default, fallback), fr-FR, ru-RU, de-DE, zh-CN, ja-JP.
# Available: en-US (default, fallback), fr-FR, ru-RU, de-DE, zh-CN, ja-JP, es-ES.
lang:
@ -10,8 +10,11 @@ lang:
# The statistics are publicly visible here: http://mcstats.org/plugin/ImageOnMap
collect-data: true
# Displays a message to administrators (ops and console) when a new version is available.
check-for-updates: true
# Images rendered on maps consume Minecraft maps ID, and there are only 32 767 of them.
# Images rendered on maps consume Minecraft maps ID, and there are only 2 147 483 647 of them.
# You can limit the maximum number of maps a player, or the whole server, can use with ImageOnMap.
# 0 means unlimited.
map-global-limit: 0
@ -26,3 +29,14 @@ limit-map-size-y: 0
# Should the full image be saved when a map is rendered?
save-full-image: false
# If you want to restrict what domains can be used to download images from, list them below.
# If you don't, leave the list empty.
# Example:
#
# images-hostnames-whitelist:
# - imgur.com
# - i.imgur.com
# - cdn.discordapp.com
images-hostnames-whitelist:

View File

@ -0,0 +1,601 @@
# 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-05-10 10:23+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: Santiago Forero\n"
"Language-Team: \n"
"Language: es_ES\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 "Tienes que nombrar un mapa."
#: 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 "Este mapa no existe."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:39
msgid "You are going to delete"
msgstr "Vas a borrar"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:42
msgid "Are you sure ? "
msgstr "¿Estás seguro? "
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:44
msgid "[Confirm]"
msgstr "[Confirmar]"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:46
msgid "{red}This map will be deleted {bold}forever{red}!"
msgstr "{red}¡Este mapa será borrado {bold}para siempre{red}!"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteNoConfirmCommand.java:46
msgid "Map successfully deleted."
msgstr "Mapa borrado exitosamente."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:38
msgid "The requested map was too big to fit in your inventory."
msgstr "El mapa solicitado era muy grande para caber en tu inventario."
#: 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 "Usa '/maptool getremaining' para obtener los mapas restantes."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:38
msgid "You have no remaining map."
msgstr "No te quedan mapas."
#: 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 ""
"¡Tu inventario está lleno! Haz un espacio antes de solicitar mapas."
#: 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] "Queda {0} mapa restante."
msgstr[1] "Quedan {0} mapas restantes."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:49
msgid "No map found."
msgstr "No se encontró ningún mapa."
#: 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} mapa encontrado."
msgstr[1] "{white}{bold}{0} mapas encontrados."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:79
msgid "{white}Click{gray} to get this map"
msgstr "{white}Click aquí{gray} para obtener este mapa"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:36
msgid "A migration process is already running. Check console for details."
msgstr "Un proceso de migración ya está ejecutándose. Revisa la consola para obtener detalles."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:40
msgid "Migration started. See console for details."
msgstr "Migración comenzada. Revisa la consola para obtener detalles."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:44
msgid "You must give an URL to take the image from."
msgstr "Tienes que dar un URL para obtener la imágen."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:52
msgid "Invalid URL."
msgstr "URL inválido."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:61
msgid "Rendering..."
msgstr "Renderizando..."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:67
msgid "Rendering finished!"
msgstr "¡Renderización terminada!"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:70
msgid "The rendered map was too big to fit in your inventory."
msgstr "El mapa renderizado era muy grande para caber en tu inventario."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:78
msgid "{ce}Map rendering failed: {0}"
msgstr "{ce}Renderización del mapa fallida: {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}Confirmar"
#. 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}Estás a punto de destruir este mapa..."
#. 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}para siempre{red}."
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:114
msgid "{gray}Name: {white}{0}"
msgstr "{gray}Nombre: {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}Mapas dentro: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:178
msgid "{gray}Map successfully deleted."
msgstr "{gray}Mapa borrado satisfactoriamente."
#: 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}Parte de mapa"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:55
msgid "{gray}Column: {white}{0}"
msgstr "{gray}Columna: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:56
msgid "{gray}Row: {white}{0}"
msgstr "{gray}Fila: {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}Click{gray} para obtener solo esta parte"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:72
msgid "{gray}Part: {white}{0}"
msgstr "{gray}Parte: {white}{0}"
#. Title of the map details GUI
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:114
msgid "Your maps » {black}{0}"
msgstr "Tus mapas » {black}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:136
msgid "{blue}Rename this image"
msgstr "{blue}Renombrar esta imágen"
#: 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}Click aquí para renombrar esta imágen; para tu propia "
"organización."
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:141
msgid "{red}Delete this image"
msgstr "{red}Borrar esta imágen"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:142
msgid ""
"{gray}Deletes this map {white}forever{gray}. This action cannot be undone!"
msgstr ""
"{gray}Borrar este mapa {white}para siempre{gray}. ¡Esta acción no se puede deshacer!"
#: 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}Se te pedirá que confirmes tu elección si haces click aquí.."
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:156
msgid "{green}« Back"
msgstr "{green}« Atrás"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:157
msgid "{gray}Go back to the list."
msgstr "{gray}Volver a la lista."
#. 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}Mapa individual"
#. 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}Mapa Póster ({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}Mapa Póster ({0} partes)"
#. 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}Click izquierdo{gray} para obtener este mapa"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:70
msgid "{gray}» {white}Right-click{gray} for details and options"
msgstr "{gray}» {white}Click derecho{gray} para obtener detalles y opciones"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:79
msgid "{red}You don't have any map."
msgstr "{red}No tienes ningún mapa."
#: 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}Empieza creando un nuevo mapa con {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}Tus mapas {reset}({0})"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:148
msgid "{blue}Usage statistics"
msgstr "{blue}Estadísticas de uso"
#: 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} imáge renderizada"
msgstr[1] "{white}{0}{gray} imágenes renderizadas"
#: 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} Mapa usado"
msgstr[1] "{white}{0}{gray} Mapas usados"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:156
msgid "{blue}Minecraft maps limits"
msgstr "{blue}Mapas limite"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:158
msgid "{gray}Server-wide limit: {white}unlimited"
msgstr "{gray}Límite del servidor: {white}ilimitado"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:159
msgid "{gray}Server-wide limit: {white}{0}"
msgstr "{gray}Límite del servidor: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:161
msgid "{gray}Per-player limit: {white}unlimited"
msgstr "{gray}Límite por jugador: {white}ilimitado"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:162
msgid "{gray}Per-player limit: {white}{0}"
msgstr "{gray}Límite por jugador: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:164
msgid "{white}{0} %{gray} of your quota used"
msgstr "{white}{0} %{gray} de tus mapas usado"
#: 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} mapa restante"
msgstr[1] "{white}{0}{gray} mapas restantes"
#: 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 "El URL no es una imágen válida."
#. The default display name of a map
#: src/main/java/fr/moribus/imageonmap/map/ImageMap.java:44
msgid "Map"
msgstr "Mapa"
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:29
#, java-format
msgid "You have too many maps (maximum : {0})."
msgstr "Tienes muchos mapas (máximo : {0})."
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:30
msgid "The server ImageOnMap limit has been reached."
msgstr "El límite del servidor ImageOnMap ha sido alcanzado."
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:31
msgid "The given map does not exist."
msgstr "El mapa no existe."
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:34
msgid "Migration is already running."
msgstr "La migración ya está ejecutándose."
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:50
msgid "Waiting for migration to finish..."
msgstr "Esperando a que la migración termine..."
#: 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 ""
"El hilo de migración se ha interrumpido mientras se esperaba para finalizar. Es posible que no haya sido terminado."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:176
msgid "Error while preparing migration"
msgstr "Error preparando la migración"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:177
msgid "Aborting migration. No change has been made."
msgstr "Abortando migración. Ningún cambio ha sido efectuado."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:189
msgid "Error while migrating"
msgstr "Error migrando"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:190
msgid "Aborting migration. Some changes may already have been made."
msgstr "Abortando migración. Es posible que algunos cambios ya se hayan efectuado."
#: 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 ""
"Antes de intentar migrar otra vez, debes recuperar los archivos de los jugadores de "
"la copia de seguridad, y moverlo a otro lugar "
"para evitar sobreescribirlos."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:203
msgid "Looking for configuration files to migrate..."
msgstr "Buscando archivos de configuración para migrar..."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:206
#, java-format
msgid "Detected former posters file {0}"
msgstr "Archivo de pósters detectado {0}"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:209
#, java-format
msgid "Detected former maps file {0}"
msgstr "Archivo de mapas encontrado {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 "No hay nada que migrar. Deteniendo."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:218
msgid "Done."
msgstr "Terminado."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:232
msgid "Backup directories already exists."
msgstr "La carpeta de backup ya existe."
#: 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 ""
"Esto significa que la migración ya se ha ejecutado, o puede que no haya terminado bien."
#: 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 ""
"Para comenzar una nueva migración, debes mover el directorio de backup para que no sea sobreescrito."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:247
msgid "Backing up map data before migrating..."
msgstr "Creando copia de seguridad antes de migrar..."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:271
msgid "Backup complete."
msgstr "Backup completado."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:352
msgid "Fetching UUIDs from Mojang..."
msgstr "Extrayendo UUIDs de 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 "Un error ocurrió extrayendo los UUIDs de 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 "El proceso de migración ha sido interrumpido"
#: 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] "Extracción finalizada. {0} UUID fue extraído."
msgstr[1] "Extracción finalizada. {0} UUIDs fueron extraídos."
#: 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 no encontró UUIDs para {0}."
msgstr[1] "Mojang no encontró UUIDs para {0}."
#: 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 ""
"Los servidores de Mojang límitan a una solicitud por segundo, puede que esto "
"demore..."
#: 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 no encontró información de {0} jugandor"
msgstr[1] "Mojang no encontró información de {0} jugadores"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:400
msgid "The following players do not exist or do not have paid accounts :"
msgstr "Los siguientes jugadores no existen o no tienen cuentas pagas :"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:415
msgid "Mojang could not find any of the registered players."
msgstr "Mojang no pudo encontrar ninguno de los jugadores registrados."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:425
msgid "Merging map data..."
msgstr "Uniendo datos de map..."
#: 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} mapa registrado falta del guardado."
msgstr[1] "{0} mapas registrados faltan del guardado."
#: 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 ""
"Estos mapas no serán migrados, pero esto podría significar que el guardado "
"ha sido alterado o corrupto."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:477
#, java-format
msgid "The following maps are missing : {0} "
msgstr "Los siguientes mapas faltan : {0} "
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:483
msgid "Saving changes..."
msgstr "Guardando cambios..."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:489
msgid "Cleaning up old data files..."
msgstr "Limpiando archivos viejos..."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:496
msgid "Deleting old map data file..."
msgstr "Borrando archivo de datos viejos..."
#: 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} mapa no pudo ser migrado."
msgstr[1] "{0} mapss no pudieron ser migrados."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:519
msgid "Deleting old poster data file..."
msgstr "Eliminando archivo de datos de póster viejo ..."
#: 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} póster no pudo ser migrado."
msgstr[1] "{0} pósters no pudieron ser migrados."
#: 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 "Los datos que no han sido migrados serán conservados en los archivos de datos antiguos."
#. 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} (parte {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} (fila {1}, columna {2})"
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:44
msgid "Splatter Map"
msgstr "Mapa Splatter"
#. Title in a splatter map tooltip
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:48
msgid "Item frames needed"
msgstr "Se necesitan marcos"
#. 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} (total {2} marcos)"
#. Title in a splatter map tooltip
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:53
msgid "How to use this?"
msgstr "¿Cómo usar esto?"
#: 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 ""
"Poner marcos vacios en una pared, los necesarios para albergar todo el mapa. "
"Luego, click derecho en el marco en la esquina inferior izquierda con este mapa."
#: 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 ""
"Shift-click en una de los mapas para remover el póster entero de una vez."
#: 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}No hay suficiente espacio para poner este mapa ({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}Tienes que dar un URL y un nombre para actualizar el mapa."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java:72
msgid "{ce}You must give a map name to update.."
msgstr "{ce}Debes nombrar el mapa para actualizar.."

View File

@ -0,0 +1,604 @@
# 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: 2022-05-27 03:07-0300\n"
"PO-Revision-Date: 2022-05-27 03:08-0300\n"
"Last-Translator: elyrodso\n"
"Language-Team: \n"
"Language: pt_BR\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 "Você precisa dar um nome de mapa."
#: 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 "Este mapa não existe."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:39
msgid "You are going to delete"
msgstr "Você vai deletar"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:42
msgid "Are you sure ? "
msgstr "Você tem certeza ? "
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:44
msgid "[Confirm]"
msgstr "[Confirmar]"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:46
msgid "{red}This map will be deleted {bold}forever{red}!"
msgstr "{red}Este mapa vai ser deletado {bold}para sempre{red}!"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteNoConfirmCommand.java:46
msgid "Map successfully deleted."
msgstr "Mapa apagado com sucesso."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:38
msgid "The requested map was too big to fit in your inventory."
msgstr "O mapa solicitado era muito grande para caber no seu inventário."
#: 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' para obter os mapas restantes."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:38
msgid "You have no remaining map."
msgstr "Você não tem mapa restante."
#: 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 ""
"Seu inventário está lotado! Limpe um espaço antes de solicitar os mapas restantes."
#: 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] "Tem {0} mapa restante."
msgstr[1] "Tem {0} mapas restantes."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:49
msgid "No map found."
msgstr "Nenhum mapa encontrado."
#: 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} mapa encontrado."
msgstr[1] "{white}{bold}{0} mapas encontrados."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:79
msgid "{white}Click{gray} to get this map"
msgstr "{white}Clique{gray} para ter este mapa"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:36
msgid "A migration process is already running. Check console for details."
msgstr "Um processo de migração já está rodando. Cheque o console para detalhes."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:40
msgid "Migration started. See console for details."
msgstr "Migração iniciada. Veja o console para detalhes."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:44
msgid "You must give an URL to take the image from."
msgstr "Você deve usar uma URL para tirar a imagem."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:52
msgid "Invalid URL."
msgstr "URL inválida."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:61
msgid "Rendering..."
msgstr "Renderizando..."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:67
msgid "Rendering finished!"
msgstr "Renderizamento terminado!"
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:70
msgid "The rendered map was too big to fit in your inventory."
msgstr "O mapa renderizado era muito grande para caber no seu inventário."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:78
msgid "{ce}Map rendering failed: {0}"
msgstr "{ce}Renderizamento de mapa falhou: {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}Confirmar apagamento"
#. 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}Você está prestes a destruir este mapa..."
#. 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}para sempre{red}."
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:114
msgid "{gray}Name: {white}{0}"
msgstr "{gray}Nome: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:115
msgid "{gray}Map ID: {white}{0}"
msgstr "{gray}ID do mapa: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:116
msgid "{gray}Maps inside: {white}{0}"
msgstr "{gray}Interior do Mapa: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:178
msgid "{gray}Map successfully deleted."
msgstr "{gray}Mapa deletado com sucesso."
#: 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}Parte do mapa"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:55
msgid "{gray}Column: {white}{0}"
msgstr "{gray}Coluna: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:56
msgid "{gray}Row: {white}{0}"
msgstr "{gray}Linha: {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}Clique{gray} para pegar apenas esta parte"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:72
msgid "{gray}Part: {white}{0}"
msgstr "{gray}Parte: {white}{0}"
#. Title of the map details GUI
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:114
msgid "Your maps » {black}{0}"
msgstr "Seus mapas » {black}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:136
msgid "{blue}Rename this image"
msgstr "{blue}Renomeie esta imagem"
#: 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}Clique aqui para renomar esta imagem; isto é usado para sua própria "
"organização."
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:141
msgid "{red}Delete this image"
msgstr "{red}Delete esta imagem"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:142
msgid ""
"{gray}Deletes this map {white}forever{gray}. This action cannot be undone!"
msgstr ""
"{gray}Delete este mapa {white}forever{gray}. Esta ação não pode ser desfeita!"
#: 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}Você vai ser solicitado para confirmar sua decisão se clicar aqui."
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:156
msgid "{green}« Back"
msgstr "{green}« Voltar"
#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:157
msgid "{gray}Go back to the list."
msgstr "{gray}Volte para a lista."
#. 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}Único mapa"
#. 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}Mapa de cartaz ({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}Mapa de cartaz ({0} parts)"
#. 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 do mapa: {0}"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:69
msgid "{gray}» {white}Left-click{gray} to get this map"
msgstr "{gray}» {white}Clique-esquerdo{gray} para pegar este mapa"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:70
msgid "{gray}» {white}Right-click{gray} for details and options"
msgstr "{gray}» {white}Botão-direito{gray} para detalhes e opções"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:79
msgid "{red}You don't have any map."
msgstr "{red}Você não tem nenhum mapa."
#: 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}Comece por criar um novo usando {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}Seus mapas {reset}({0})"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:148
msgid "{blue}Usage statistics"
msgstr "{blue}Estatísticas de uso"
#: 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} imagem renderizada"
msgstr[1] "{white}{0}{gray} imagens renderizadas"
#: 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} Mapa do Minecraft usado"
msgstr[1] "{white}{0}{gray} Mapas do Minecraft usados"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:156
msgid "{blue}Minecraft maps limits"
msgstr "{blue}Limites dos mapas do Minecraft"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:158
msgid "{gray}Server-wide limit: {white}unlimited"
msgstr "{gray}Limite Server-wide: {white}ilimitado"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:159
msgid "{gray}Server-wide limit: {white}{0}"
msgstr "{gray}Limite Server-wide: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:161
msgid "{gray}Per-player limit: {white}unlimited"
msgstr "{gray}Limite por jogador: {white}ilimitado"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:162
msgid "{gray}Per-player limit: {white}{0}"
msgstr "{gray}Limite por jogador: {white}{0}"
#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:164
msgid "{white}{0} %{gray} of your quota used"
msgstr "{white}{0} %{gray} de sua cota utilizada"
#: 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} mapa restante"
msgstr[1] "{white}{0}{gray} mapas restantes"
#: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:73
#, java-format
msgid "HTTP error : {0} {1}"
msgstr "Erro HTTP : {0} {1}"
#: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:79
msgid "The given URL is not a valid image"
msgstr "O URL entregue não é uma imagem válida"
#. The default display name of a map
#: src/main/java/fr/moribus/imageonmap/map/ImageMap.java:44
msgid "Map"
msgstr "Mapa"
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:29
#, java-format
msgid "You have too many maps (maximum : {0})."
msgstr "Você tem muitos mapas (máximo : {0})."
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:30
msgid "The server ImageOnMap limit has been reached."
msgstr "O limite do servidor ImageOnMap foi atingido."
#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:31
msgid "The given map does not exist."
msgstr "O mapa solicitado não existe."
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:34
msgid "Migration is already running."
msgstr "A migração já está rodando."
#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:50
msgid "Waiting for migration to finish..."
msgstr "Esperando pela migração terminar..."
#: 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 ""
"A thread da migração foi interrompido enquanto esperava terminar. Talvez não "
"conseguiu terminar corretamente."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:176
msgid "Error while preparing migration"
msgstr "Erro enquanto migração foi preparada"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:177
msgid "Aborting migration. No change has been made."
msgstr "Abortando migração. Nenhuma mudança foi realizada."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:189
msgid "Error while migrating"
msgstr "Erro enquanto migrava"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:190
msgid "Aborting migration. Some changes may already have been made."
msgstr "Abortando migração. Algumas mudanças talvez já possam ter sido feitas."
#: 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 ""
"Antes de tentar migrar novamente, você deve recuperar os arquivos de jogadores dos "
"backups, e então mover os backups para fora do diretório do plugin para evitar "
"sobrepor eles."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:203
msgid "Looking for configuration files to migrate..."
msgstr "Procurando por arquivos de configuração para migrar..."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:206
#, java-format
msgid "Detected former posters file {0}"
msgstr "Detectado arquivo de cartazes anteriores {0}"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:209
#, java-format
msgid "Detected former maps file {0}"
msgstr "Detectado arquivo de mapas anteriores {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 "Não há nada para migrar. Parando."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:218
msgid "Done."
msgstr "Feito."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:232
msgid "Backup directories already exists."
msgstr "Diretórios de backup já existem."
#: 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 ""
"Isto significa que uma migração já foi feita, ou talvez não tenha terminado "
"bem."
#: 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 ""
"Para iniciar uma nova migração, mover os diretórios de backups para fora para eles "
"não serem sobrepostos."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:247
msgid "Backing up map data before migrating..."
msgstr "Criando backup de segurança dos dados do mapa antes de migrar..."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:271
msgid "Backup complete."
msgstr "Backup completo."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:352
msgid "Fetching UUIDs from Mojang..."
msgstr "Obtendo UUIDs da 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 "Um erro ocorreu enquanto obtinha os UUIDs da 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 "O trabalho de migração foi interrompido"
#: 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] "Obtenção completa. {0} UUID foi recuperado."
msgstr[1] "Obtenção completa. {0} UUIDs foram recuperados."
#: 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 não encontrou UUIDs para {0} jogador no momento."
msgstr[1] "Mojang não encontrou UUIDs para {0} jogadores no momento."
#: 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 ""
"Os servidores da Mojang limita os pedidos para um por segundo, isto pode levar um "
"tempo..."
#: 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 não encontrou dado de jogador para {0} jogador"
msgstr[1] "Mojang não encontrou dados de jogadores para {0} jogadores"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:400
msgid "The following players do not exist or do not have paid accounts :"
msgstr "Os jogadores seguintes não existem ou não tem contas originais :"
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:415
msgid "Mojang could not find any of the registered players."
msgstr "Mojang não pôde encontrar nenhum dos jogadores registados."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:425
msgid "Merging map data..."
msgstr "Fundindo dados de mapa..."
#: 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} mapa minecraft registrado está faltando do save."
msgstr[1] "{0} mapas minecraft registrados estão faltando do 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 ""
"Estes mapas não serão migrados, mas isto pode significar que o save foi "
"alterado ou corrompido."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:477
#, java-format
msgid "The following maps are missing : {0} "
msgstr "Os mapas seguintes estão faltando : {0} "
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:483
msgid "Saving changes..."
msgstr "Salvando mudanças..."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:489
msgid "Cleaning up old data files..."
msgstr "Limpando arquivos de dados antigos..."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:496
msgid "Deleting old map data file..."
msgstr "Deletando arquivo de dados de mapa..."
#: 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} mapa não pôde ser migrado."
msgstr[1] "{0} mapas não puderam ser migrados."
#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:519
msgid "Deleting old poster data file..."
msgstr "Deletando arquivo de dados antigos de cartazes..."
#: 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} cartaz não pôde ser migrado."
msgstr[1] "{0} cartazes não puderam ser migrados."
#: 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 "Dados que não foram migrados permanecerão nos arquivos antigos de dados."
#. 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} (parte {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} (linha {1}, coluna {2})"
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:44
msgid "Splatter Map"
msgstr "Mapa Cortado"
#. Title in a splatter map tooltip
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:48
msgid "Item frames needed"
msgstr "Molduras necessário"
#. 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} (total {2} frames)"
#. Title in a splatter map tooltip
#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:53
msgid "How to use this?"
msgstr "Como usar isto?"
#: 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 ""
"Posicione molduras vazias na parede, suficiente para hospedar todo o mapa. Então, use botão-"
"direito no mapa inferior esquerdo com este mapa."
#: 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 ""
"Shift-clique um dos mapas colocados para remover todo o cartaz de uma vez."
#: 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}Não tem espaço suficiente para colocar este mapa ({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}Você deve usar uma URL e um nome de mapa para atualizar."
#: src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java:72
msgid "{ce}You must give a map name to update.."
msgstr "{ce}Você deve usar um nome de mapa para atualizar.."

View File

@ -1,6 +1,6 @@
name: ImageOnMap
main: fr.moribus.imageonmap.ImageOnMap
version: "4.1.2"
version: "4.2.2"
api-version: "1.13"
@ -30,6 +30,7 @@ permissions:
imageonmap.explore: true
imageonmap.exploreother: false
imageonmap.rename: true
imageonmap.placesplattermap: true
imageonmap.removesplattermap: true
imageonmap.delete: true
imageonmap.deleteother: false
@ -37,6 +38,10 @@ permissions:
imageonmap.give: false
imageonmap.update: true
imageonmap.updateother: false
imageonmap.bypassmaplimit: false
imageonmap.bypassimagelimit: false
imageonmap.bypasswhitelist: true
imageonmap.placeinvisiblesplattermap: true
imageonmap.userender:
description: "Allows you to use /tomap and related commands (/maptool getremaining). Alias of imageonmap.new."
@ -86,6 +91,10 @@ permissions:
description: "Allows you to delete a map a player rendered in the past."
default: op
imageonmap.placesplattermap:
description: "Allows you to place a splatter map."
default: true
imageonmap.removesplattermap:
description: "Allows you to remove a splatter map from a wall by sneaking and breaking a map."
default: true
@ -105,3 +114,19 @@ permissions:
imageonmap.updateother:
description: "Allows you to update an existing map of an other player with a new image."
default: op
imageonmap.bypassmaplimit:
description: "Allows you to bypass permission node check for the number of used map (by default users have an unlimited amount of maps)."
default: op
imageonmap.bypassimagelimit:
description: "Allows you to bypass permission node check for the number of images in the playerMapStore (by default users have an unlimited amount of images)."
default: op
imageonmap.bypasswhitelist:
description: "Allows you to ignore the restriction on the allow list for image hosting website."
default: true
imageonmap.placeinvisiblesplattermap:
description: "Allows you to make the item frame on which you placed your splatter map invisible."
default: true