+ Added F5 key

+ Added french translation
+ Added lock aspect ratio check box
+ Added a few config options
+ More stuff I forgot
This commit is contained in:
Nicolas BARBOTIN 2018-02-10 04:08:04 +01:00
parent 0e57567faf
commit 7b62fd1980
12 changed files with 296 additions and 36 deletions

View File

@ -1,19 +1,12 @@
# WebDisplays for Minecraft 1.12.2
This is the unfinished port of the WebDisplays mod for Minecraft 1.12.2. The text below is my "TODO" list.
### Missing features
* Read config (see "Config elements" below)
### TODO
* French translations
* Change mod name to WD2
* Auto-find rotation for BOTTOM & TOP screens
### Config elements
* RPMP (Real pixels per Minecraft pixels)
* Screen load/unload distance (max distance = 60.0)
* Disable ownership thief item
* Put a limit on screen resolution
* TESTING
* "Anti-9minecraft"
* Write wiki
* Update website
* Publish
### Delayed things
* Plugin API
@ -22,5 +15,4 @@ This is the unfinished port of the WebDisplays mod for Minecraft 1.12.2. The tex
* Center camera to screen when using keyboard
* minePad management: check GuiContainer.draggedStack for minePad
* In-game command to add/remove blacklisted domains
* Config: RPMP (Real pixels per Minecraft pixels)

View File

@ -102,9 +102,16 @@ public class WebDisplays {
public double padResX;
public double padResY;
private int lastPadId = 0;
public boolean doHardRecipe = true;
public boolean doHardRecipe;
private boolean hasOC;
private String[] blacklist;
public boolean disableOwnershipThief;
public double unloadDistance2;
public double loadDistance2;
public int maxResX;
public int maxResY;
public int miniservPort;
public long miniservQuota;
@Mod.EventHandler
public void onPreInit(FMLPreInitializationEvent ev) {
@ -115,16 +122,42 @@ public class WebDisplays {
Property padHeight = cfg.get("main", "padHeight", 480);
Property hardRecipe = cfg.get("main", "hardRecipes", true);
Property homePage = cfg.get("main", "homepage", "mod://webdisplays/main.html");
Property disableOT = cfg.get("main", "disableOwnershipThief", false);
Property maxResX = cfg.get("main", "maxResolutionX", 7680);
Property maxResY = cfg.get("main", "maxResolutionY", 4320);
Property miniservPort = cfg.get("main", "miniservPort", 25566);
Property miniservQuota = cfg.get("main", "miniservQuota", 1024); //It's stored as a string anyway
Property loadDistance = cfg.get("client", "loadDistance", 30.0);
Property unloadDistance = cfg.get("client", "unloadDistance", 32.0);
blacklist.setComment("An array of domain names you don't want to load.");
padHeight.setComment("The minePad Y resolution in pixels. padWidth = padHeight * " + PAD_RATIO);
hardRecipe.setComment("If true, breaking the minePad is required to craft upgrades.");
homePage.setComment("The URL that will be loaded each time you create a screen");
disableOT.setComment("If true, the ownership thief item will be disabled");
loadDistance.setComment("All screens outside this range will be unloaded");
unloadDistance.setComment("All unloaded screens inside this range will be loaded");
maxResX.setComment("Maximum horizontal screen resolution, in pixels");
maxResY.setComment("Maximum vertical screen resolution, in pixels");
miniservPort.setComment("The port used by miniserv. 0 to disable.");
miniservPort.setMaxValue(Short.MAX_VALUE);
miniservQuota.setComment("The amount of data that can be uploaded to miniserv, in KiB (so 1024 = 1 MiO)");
if(unloadDistance.getDouble() < loadDistance.getDouble() + 2.0)
unloadDistance.set(loadDistance.getDouble() + 2.0);
cfg.save();
this.blacklist = blacklist.getStringList();
this.doHardRecipe = hardRecipe.getBoolean();
doHardRecipe = hardRecipe.getBoolean();
this.homePage = homePage.getString();
disableOwnershipThief = disableOT.getBoolean();
unloadDistance2 = unloadDistance.getDouble() * unloadDistance.getDouble();
loadDistance2 = loadDistance.getDouble() * loadDistance.getDouble();
this.maxResX = maxResX.getInt();
this.maxResY = maxResY.getInt();
this.miniservPort = miniservPort.getInt();
this.miniservQuota = miniservQuota.getLong() * 1024L;
CREATIVE_TAB = new WDCreativeTab();
@ -233,9 +266,12 @@ public class WebDisplays {
}
}
Server sv = Server.getInstance();
sv.setDirectory(new File(worldDir, "wd_filehost"));
sv.start(); //TODO: Configure port
if(miniservPort != 0) {
Server sv = Server.getInstance();
sv.setPort(miniservPort);
sv.setDirectory(new File(worldDir, "wd_filehost"));
sv.start();
}
}
@SubscribeEvent
@ -295,7 +331,7 @@ public class WebDisplays {
@SubscribeEvent
public void onLogIn(PlayerEvent.PlayerLoggedInEvent ev) {
if(!ev.player.world.isRemote && ev.player instanceof EntityPlayerMP)
WebDisplays.NET_HANDLER.sendTo(new CMessageServerInfo(25566), (EntityPlayerMP) ev.player); //TODO: Port config
WebDisplays.NET_HANDLER.sendTo(new CMessageServerInfo(miniservPort), (EntityPlayerMP) ev.player);
}
@SubscribeEvent

View File

@ -105,8 +105,6 @@ public class ClientProxy extends SharedProxy implements IResourceManagerReloadLi
//Tracking
private ArrayList<TileEntityScreen> screenTracking = new ArrayList<>();
private double unloadDistance2 = 32.0 * 32.0;
private double loadDistance2 = 30.0 * 30.0;
private int lastTracked = 0;
//MinePads Management
@ -477,11 +475,11 @@ public class ClientProxy extends SharedProxy implements IResourceManagerReloadLi
double dist2 = mc.player.getDistanceSq(tes.getPos());
if(tes.isLoaded()) {
if(dist2 > unloadDistance2)
if(dist2 > WebDisplays.INSTANCE.unloadDistance2)
tes.unload();
else
tes.updateTrackDistance(dist2);
} else if(dist2 <= loadDistance2)
} else if(dist2 <= WebDisplays.INSTANCE.loadDistance2)
tes.load();
}

View File

@ -29,6 +29,7 @@ public class GuiScreenConfig extends WDScreen {
private int friendRights;
private int otherRights;
private Rotation rotation = Rotation.ROT_0;
private float aspectRatio;
//Autocomplete handling
private boolean waitingAC;
@ -101,6 +102,9 @@ public class GuiScreenConfig extends WDScreen {
@FillControl
private Button btnChangeRot;
@FillControl
private CheckBox cbLockRatio;
private CheckBox[] friendBoxes;
private CheckBox[] otherBoxes;
@ -138,6 +142,7 @@ public class GuiScreenConfig extends WDScreen {
tfResX.setText("" + scr.resolution.x);
tfResY.setText("" + scr.resolution.y);
aspectRatio = ((float) scr.resolution.x) / ((float) scr.resolution.y);
//Hopefully upgrades have been synchronized...
ugUpgrades.setUpgrades(scr.upgrades);
@ -242,6 +247,22 @@ public class GuiScreenConfig extends WDScreen {
}
}
if(cbLockRatio.isChecked()) {
if(ev.getSource() == tfResX) {
try {
float val = (float) Integer.parseInt(ev.getNewContent());
val /= aspectRatio;
tfResY.setText("" + ((int) val));
} catch(NumberFormatException ex) {}
} else {
try {
float val = (float) Integer.parseInt(ev.getNewContent());
val *= aspectRatio;
tfResX.setText("" + ((int) val));
} catch(NumberFormatException ex) {}
}
}
btnSetRes.setDisabled(false);
}
}
@ -270,6 +291,15 @@ public class GuiScreenConfig extends WDScreen {
otherRights &= ~flag;
requestSync();
} else if(ev.getSource() == cbLockRatio && ev.isChecked()) {
try {
int x = Integer.parseInt(tfResX.getText());
int y = Integer.parseInt(tfResY.getText());
aspectRatio = ((float) x) / ((float) y);
} catch(NumberFormatException ex) {
cbLockRatio.setChecked(false);
}
}
}
@ -445,6 +475,7 @@ public class GuiScreenConfig extends WDScreen {
}
public void updateResolution(Vector2i res) {
aspectRatio = ((float) res.x) / ((float) res.y);
tfResX.setText("" + res.x);
tfResY.setText("" + res.y);
btnSetRes.setDisabled(true);

View File

@ -238,6 +238,9 @@ public class GuiServer extends WDScreen {
updateUploadScreen();
} else
startFileUpload(file, true);
} else if(keyCode == Keyboard.KEY_F5) {
uploadCD(uploadDir);
updateUploadScreen();
}
}
@ -553,13 +556,13 @@ public class GuiServer extends WDScreen {
private void updateUploadScreen() {
lines.clear();
lines.add("Choose a file to upload");
lines.add(tr("upload.info"));
lines.add(trimStringL(uploadDir.getPath()));
lines.add("");
for(int i = uploadOffset; i < uploadFiles.size() && lines.size() < MAX_LINES; i++) {
if(i == 0 && uploadFirstIsParent)
lines.add("[Parent directory]");
lines.add(tr("upload.parent"));
else
lines.add(trimStringR(uploadFiles.get(i).getName()));
}

View File

@ -15,6 +15,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.*;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.montoyo.mcef.api.IBrowser;
@ -186,6 +187,20 @@ public class TileEntityScreen extends TileEntity {
}
}
public void clampResolution() {
if(resolution.x > WebDisplays.INSTANCE.maxResX) {
float newY = ((float) resolution.y) * ((float) WebDisplays.INSTANCE.maxResX) / ((float) resolution.x);
resolution.x = WebDisplays.INSTANCE.maxResX;
resolution.y = (int) newY;
}
if(resolution.y > WebDisplays.INSTANCE.maxResY) {
float newX = ((float) resolution.x) * ((float) WebDisplays.INSTANCE.maxResY) / ((float) resolution.y);
resolution.x = (int) newX;
resolution.y = WebDisplays.INSTANCE.maxResY;
}
}
}
private ArrayList<Screen> screens = new ArrayList<>();
@ -256,9 +271,23 @@ public class TileEntityScreen extends TileEntity {
ret.otherRights = ScreenRights.DEFAULTS;
ret.upgrades = new ArrayList<>();
if(owner != null)
if(owner != null) {
ret.owner = new NameUUIDPair(owner.getGameProfile());
if(side == BlockSide.TOP || side == BlockSide.BOTTOM) {
int rot = MathHelper.floor(((double) (owner.rotationYaw * 4.0f / 360.0f)) + 2.5) & 3;
if(side == BlockSide.TOP) {
if(rot == 1)
rot = 3;
else if(rot == 3)
rot = 1;
}
ret.rotation = Rotation.values()[rot];
}
}
if(resolution == null || resolution.x < 1 || resolution.y < 1) {
float psx = ((float) size.x) * 16.f - 4.f;
float psy = ((float) size.y) * 16.f - 4.f;
@ -269,6 +298,8 @@ public class TileEntityScreen extends TileEntity {
} else
ret.resolution = resolution;
ret.clampResolution();
if(!world.isRemote) {
ret.setupRedstoneStatus(world, pos);
@ -380,6 +411,7 @@ public class TileEntityScreen extends TileEntity {
}
scr.resolution = res;
scr.clampResolution();
if(world.isRemote) {
WebDisplays.PROXY.screenUpdateResolutionInGui(new Vector3i(pos), side, res);

View File

@ -8,6 +8,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.data.ServerData;
import net.montoyo.wd.utilities.NameUUIDPair;
import net.montoyo.wd.utilities.Util;
@ -40,10 +41,9 @@ public class TileEntityServer extends TileEntity {
if(world.isRemote)
return true;
//TODO: Check if miniserv is disabled
//Util.toast(ply, "noMiniserv");
if(owner != null && ply instanceof EntityPlayerMP)
if(WebDisplays.INSTANCE.miniservPort == 0)
Util.toast(ply, "noMiniserv");
else if(owner != null && ply instanceof EntityPlayerMP)
(new ServerData(owner)).sendTo((EntityPlayerMP) ply);
return true;

View File

@ -43,6 +43,11 @@ public class ItemOwnershipThief extends Item {
if(world.isRemote)
return EnumActionResult.SUCCESS;
if(WebDisplays.INSTANCE.disableOwnershipThief) {
Util.toast(player, "otDisabled");
return EnumActionResult.SUCCESS;
}
ItemStack stack = player.getHeldItem(hand);
if(stack.hasTagCompound()) {
NBTTagCompound tag = stack.getTagCompound();

View File

@ -4,6 +4,7 @@
package net.montoyo.wd.miniserv.server;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.utilities.Log;
import net.montoyo.wd.utilities.Util;
@ -36,10 +37,13 @@ public class Server implements Runnable {
private final ByteBuffer readBuffer = ByteBuffer.allocateDirect(8192);
private final ClientManager clientMgr = new ClientManager();
private File directory;
private long maxQuota = 1024 * 1024; //1 MiB max
private volatile boolean running;
private volatile Thread thread;
public void setPort(int p) {
port = p;
}
public void start() {
thread = new Thread(this);
thread.setName("MiniServServer");
@ -231,7 +235,7 @@ public class Server implements Runnable {
}
public long getMaxQuota() {
return maxQuota;
return WebDisplays.INSTANCE.miniservQuota;
}
}

View File

@ -180,17 +180,25 @@
"label": "$webdisplays.gui.screencfg.setres",
"disabled": true
},
{
"type": "CheckBox",
"name": "cbLockRatio",
"x": 257,
"y": 99,
"label": "$webdisplays.gui.screencfg.lockratio",
"checked": true
},
{
"type": "Label",
"x": 258,
"y": 105,
"y": 117,
"label": "$webdisplays.gui.screencfg.rotation"
},
{
"type": "Button",
"name": "btnChangeRot",
"x": 260,
"y": 117,
"y": 129,
"width": 84
}
],

View File

@ -51,6 +51,7 @@ webdisplays.message.upgradeError=Upgrade error :( Check logs...
webdisplays.message.upgradeOk=Upgrade installed!
webdisplays.message.linkAbort=Linker reset
webdisplays.message.noMiniserv=Server block is disabled on this server
webdisplays.message.otDisabled=Ownership thief is disabled on this server
webdisplays.gui.screencfg.owner=Screen owner:
webdisplays.gui.screencfg.friends=Friends:
webdisplays.gui.screencfg.permissions=Permissions:
@ -69,6 +70,7 @@ webdisplays.gui.screencfg.rot0=0°
webdisplays.gui.screencfg.rot90=90°
webdisplays.gui.screencfg.rot180=180°
webdisplays.gui.screencfg.rot270=270°
webdisplays.gui.screencfg.lockratio=Lock ratio
webdisplays.linker.selectScreen=Right click on a screen
webdisplays.linker.selectPeripheral=Right click on a peripheral
webdisplays.linker.posInfo=Screen pos: %d %d %d
@ -88,7 +90,7 @@ webdisplays.gui.keyboard.warning2=This means anyone can know what you're up to.
webdisplays.gui.keyboard.warning3=NEVER write one of your passwords using this keyboard.
webdisplays.gui.keyboard.gotcha=Got ya
advancements.webdisplays.root.title=WebDisplays
advancements.webdisplays.root.description=The WebDisplays mod advancements
advancements.webdisplays.root.description=The WebDisplays mod
advancements.webdisplays.screen.title=The internet is for...
advancements.webdisplays.screen.description=Craft your first web display
advancements.webdisplays.minepad.title=This is a revolution
@ -126,6 +128,8 @@ webdisplays.server.fnamearg=Missing file name argument
webdisplays.server.nameerr=Invalid file name
webdisplays.server.urlcopied=Copied URL to clipboard.
webdisplays.server.notfound=File not found
webdisplays.server.upload.info=Choose a file to upload
webdisplays.server.upload.parent=[Parent directory]
webdisplays.server.upload.uploading=Uploading...
webdisplays.server.upload.done=Done
webdisplays.server.upload.exists=Error: File exists

View File

@ -0,0 +1,147 @@
itemGroup.webdisplays=§5Web Displays
tile.webdisplays.screen.name=Ecran
tile.webdisplays.peripheral.name=Périphérique
tile.webdisplays.peripheral.keyboard.name=Clavier
tile.webdisplays.peripheral.remotectrl.name=Télécommande
tile.webdisplays.peripheral.ccinterface.name=Interface ComputerCraft
tile.webdisplays.peripheral.cointerface.name=Interface OpenComputers
tile.webdisplays.peripheral.redstonectrl.name=Contrôleur
tile.webdisplays.peripheral.server.name=Serveur
item.webdisplays.screencfg.name=Gestionnaire d'écran
item.webdisplays.ownerthief.name=Voleur d'écran [ADMIN]
item.webdisplays.linker.name=Outil d'appairage
item.webdisplays.craftcomp.name=Composant de recette
item.webdisplays.craftcomp.stonekey.name=Touche en pierre
item.webdisplays.craftcomp.upgrade.name=Amélioration vide
item.webdisplays.craftcomp.peripheral.name=Base de périphérique
item.webdisplays.craftcomp.batcell.name=Cellule de batterie
item.webdisplays.craftcomp.batpack.name=Batterie
item.webdisplays.craftcomp.laserdiode.name=Diode laser 650nm
item.webdisplays.craftcomp.backlight.name=Rétroéclairage
item.webdisplays.craftcomp.extcard.name=Carte d'extension
item.webdisplays.craftcomp.badextcard.name=Carte d'extension ratée
item.webdisplays.minepad.name=minePad
item.webdisplays.minepad2.name=minePad 2
item.webdisplays.upgrade.name=Amélioration d'écran
item.webdisplays.upgrade.lasermouse.name=Capteur de laser
item.webdisplays.upgrade.redinput.name=Port d'entrée Redstone
item.webdisplays.upgrade.redoutput.name=Port de sortie Redstone
item.webdisplays.upgrade.gps.name=Module GALILEO
item.webdisplays.laserpointer.name=Pointeur laser
item.webdisplays.advicon.name=Icone de progrès
item.webdisplays.advicon.wd.name=WebDisplays
item.webdisplays.advicon.brokenpad.name=minePad cassé
item.webdisplays.advicon.pigeon.name=Pigeon
webdisplays.message.tooSmall=Trop petit ! La taille minimale est de 2x2.
webdisplays.message.invalid=La structure est invalide; regardez vers %s.
webdisplays.message.turnOn=Vous devez d'abord allumer l'écran
webdisplays.message.screenSet=Ecran sélectionné ! Donnez l'item à quelqu'un...
webdisplays.message.newOwner=Vous êtes maintenant le propriétaire de cet écran
webdisplays.message.restrictions=Vous n'avez pas le droit de faire cela :(
webdisplays.message.peripheral=Ce n'est pas un périphérique!
webdisplays.message.linked=Appairé !
webdisplays.message.linkError=Erreur d'appairage... :( vérifiez les logs
webdisplays.message.notAScreen=Vous devez d'abord sélectionner un écran
webdisplays.message.screenSet2=Ecran sélectionné! Maintenant, sélectionnez un périphérique...
webdisplays.message.chunkUnloaded=Le chunk dans lequel se trouve l'écran n'est pas chargé
webdisplays.message.notLinked=Ce périphérique n'a pas encore été appairé
webdisplays.message.missingCC=ComputerCraft non disponible.
webdisplays.message.missingOC=OpenComputers non disponible.
webdisplays.message.upgradeError=Erreur lors de l'amélioration, vérifiez les logs
webdisplays.message.upgradeOk=Amélioration installée !
webdisplays.message.linkAbort=Outil d'appairage remis à zéro.
webdisplays.message.noMiniserv=Le bloc serveur est désactivé
webdisplays.message.otDisabled=Le voleur d'écran est désactivé sur ce serveur
webdisplays.gui.screencfg.owner=Propriétaire :
webdisplays.gui.screencfg.friends=Amis :
webdisplays.gui.screencfg.permissions=Permissions :
webdisplays.gui.screencfg.seturl=Changer l'URL
webdisplays.gui.screencfg.click=Cliquer & écrire
webdisplays.gui.screencfg.friendlist=Gérer les amis
webdisplays.gui.screencfg.otherrights=Gérer les autres
webdisplays.gui.screencfg.mupgrades=Améliorer & appairer
webdisplays.gui.screencfg.mres=Changer la résolution
webdisplays.gui.screencfg.others=Autres
webdisplays.gui.screencfg.upgrades=Améliorations :
webdisplays.gui.screencfg.resolution=Résolution :
webdisplays.gui.screencfg.setres=Déf. Resolution
webdisplays.gui.screencfg.rotation=Rotation
webdisplays.gui.screencfg.rot0=0°
webdisplays.gui.screencfg.rot90=90°
webdisplays.gui.screencfg.rot180=180°
webdisplays.gui.screencfg.rot270=270°
webdisplays.gui.screencfg.lockratio=Verrouiller le ratio
webdisplays.linker.selectScreen=Cliquez droit sur un écran
webdisplays.linker.selectPeripheral=Cliquez droit sur un périphérique
webdisplays.linker.posInfo=Pos. écran : %d %d %d
webdisplays.linker.sideInfo=Côté : %s
webdisplays.gui.seturl.url=URL:
webdisplays.gui.seturl.ok=OK
webdisplays.gui.seturl.cancel=Annuler
webdisplays.gui.seturl.shutdown=Eteindre
webdisplays.minepad.turnon=Pour allumer, s'accroupir et faire clique-droit
webdisplays.minepad2.info=PAS DE REMBOURSEMENT !
webdisplays.extcard.cantcraft1=Vous n'avez pas assez de connaissances
webdisplays.extcard.cantcraft2=Vous ALLEZ RATER la fabrication de cet item
webdisplays.extcard.bad=Quelqu'un a raté la fabrication de cette carte
webdisplays.gui.keyboard.hooked=Clavier attaché. Appuyez sur Echap pour quitter.
webdisplays.gui.keyboard.warning1=ATTENTION ! Le texte que vous tapez ici est envoyé EN CLAIR au serveur.
webdisplays.gui.keyboard.warning2=Cela signifie que tout le monde peut voir ce que vous tapez.
webdisplays.gui.keyboard.warning3=Ne JAMAIS taper de mot de passe avec ce clavier.
webdisplays.gui.keyboard.gotcha=Je comprends
advancements.webdisplays.root.title=WebDisplays
advancements.webdisplays.root.description=Le mod WebDisplays
advancements.webdisplays.screen.title=The internet is for...
advancements.webdisplays.screen.description=Fabriquez votre premier écran
advancements.webdisplays.minepad.title=C'est une révolution
advancements.webdisplays.minepad.description=Essayez notre tout dernier bijoux technologique: le minePad !
advancements.webdisplays.padbreak.title=Rétro-ingénierie
advancements.webdisplays.padbreak.description=Ces trucs là sont fragiles ! Ne les jetez pas de haut pour débloquer les recettes des améliorations !
advancements.webdisplays.minepad2.title=Pigeon
advancements.webdisplays.minepad2.description=Fabriquez un minePad 2. Ecoutez, je sais que c'est très cher, mais ça veut dire que ce qu'il y'a de mieux non ?
advancements.webdisplays.linkperipheral.title=Sans fils !
advancements.webdisplays.linkperipheral.description=Appairez un périphérique à un écran
advancements.webdisplays.keyboardcat.title=PU**IN DE CHATS
advancements.webdisplays.keyboardcat.description=Faites en sorte qu'un ocelot marche sur votre clavier
advancements.webdisplays.upgrade.title=Plus qu'un écran
advancements.webdisplays.upgrade.description=Installez votre première amélioration
advancements.webdisplays.laser.title=Ne pas viser les yeux
advancements.webdisplays.laser.description=Fabriquez un pointeur laser
webdisplays.side.bottom=Bas
webdisplays.side.top=Haut
webdisplays.side.north=Nord
webdisplays.side.south=Sud
webdisplays.side.west=Ouest
webdisplays.side.east=Est
webdisplays.server.info=Tapez "help" pour obtenir de l'aide
webdisplays.server.unknowncmd=Commande inconnue.
webdisplays.server.error=Erreur interne. Vérifiez les logs.
webdisplays.server.error2=Erreur interne %d. Vérifiez les logs.
webdisplays.server.argerror=Argument non reconnu
webdisplays.server.queryerr=Erreur de requête, essayez "reconnect".
webdisplays.server.errowner=Seul le propriétaire peut faire cela.
webdisplays.server.timeout=Le délai est dépaissé. Vérifiez les logs.
webdisplays.server.ownername=Nom du propriétaire : %s
webdisplays.server.owneruuid=UUID du propriétaire :
webdisplays.server.quota=%s/%s utilisés
webdisplays.server.fnamearg=Nom de fichier manquant
webdisplays.server.nameerr=Nom de fichier invalide
webdisplays.server.urlcopied=URL copié dans le presse-papier.
webdisplays.server.notfound=Fichier introuvable
webdisplays.server.upload.info=Choisissez un fichier
webdisplays.server.upload.parent=[Dossier parent]
webdisplays.server.upload.uploading=Mise en ligne...
webdisplays.server.upload.done=Terminé !
webdisplays.server.upload.exists=Erreur : le fichier existe
webdisplays.server.upload.quota=Erreur : taille max atteinte
webdisplays.server.help.help=Affiche ce texte
webdisplays.server.help.clear=Efface l'écran
webdisplays.server.help.exit=Quitte la console
webdisplays.server.help.access=§kPas d'aide disponible
webdisplays.server.help.owner=Affiche le proprio. de ce serveur
webdisplays.server.help.quota=Affiche le quota de stockage
webdisplays.server.help.ls=Liste les fichiers de ce serveur
webdisplays.server.help.url=Copie l'URL d'un fichier
webdisplays.server.help.upload=Ouvre l'assitant de mise en ligne
webdisplays.server.help.rm=Supprime un fichier
webdisplays.server.help.reconnect=Se reco. à Miniserv [DEBUG]