This commit is contained in:
Jesse Boyd 2019-04-03 01:37:49 +11:00
commit b514efecfc
No known key found for this signature in database
GPG Key ID: 59F1DE6293AF6E1F
29 changed files with 680 additions and 454 deletions

View File

@ -1,4 +1,5 @@
# Bug report # Bug report for FastAsyncWorldEdit < 1.12.2
<!--- REPORT ISSUES REGARDING FAWE ON 1.13.x HERE: https://github.com/IntellectualSites/FastAsyncWorldEdit-1.13/issues/new --->
<!--- Follow this template if reporting an issue. --> <!--- Follow this template if reporting an issue. -->
<!--- Remove this template if making a suggestion or asking a question. --> <!--- Remove this template if making a suggestion or asking a question. -->
<!--- Please comment or react to an existing ticket if it exists --> <!--- Please comment or react to an existing ticket if it exists -->
@ -13,7 +14,8 @@
**Checklist**: **Checklist**:
<!--- Make sure you've completed the following steps (put an "X" between of brackets): --> <!--- Make sure you've completed the following steps (put an "X" between of brackets): -->
- [] I made sure that I'm using FAWE on 1.12.2 or lower
- [] I included a `/fawe debugpaste` link - [] I included a `/fawe debugpaste` link
- [] I made sure there aren't duplicates of this report [(Use Search)](https://github.com/boy0001/FastAsyncWorldedit/issues?utf8=%E2%9C%93&q=is%3Aissue) - [] I made sure there aren't duplicates of this report [(Use Search)](https://github.com/boy0001/FastAsyncWorldedit/issues?utf8=%E2%9C%93&q=is%3Aissue)
- [] I made sure I am using an up-to-date version of FAWE - [] I made sure I am using an up-to-date version of [FAWE < 1.12.2](https://ci.athion.net/job/FastAsyncWorldEdit/)
- [] I Made sure the bug/error is not caused by any other plugin - [] I made sure the bug/error is not caused by any other plugin

View File

@ -4,17 +4,31 @@
--- ---
# Report bugs and issues regarding 1.13 [here](https://github.com/IntellectualSites/FastAsyncWorldEdit-1.13/issues/new) after ensuring there isn't already an issue like that. <br> Do NOT do that in this repository!
FAWE is a fork of WorldEdit that has huge speed and memory improvements and considerably more features FAWE is a fork of WorldEdit that has huge speed and memory improvements and considerably more features
It is available for Bukkit, Forge, Sponge and Nukkit. It is available for Bukkit, Forge, Sponge and Nukkit.
## Chat ## Links
### - **`> `**[`Discord`](https://discord.gg/ngZCzbU)`|`[`IRC`](http://webchat.esper.net/?nick=&channels=IntellectualCrafters)` | `[`Spigot Forums`](https://www.spigotmc.org/threads/fast-async-worldedit.100104/)**` <`**
## Releases * [Spigot Page](https://www.spigotmc.org/threads/fast-async-worldedit.100104/)
* [Discord](https://discord.gg/ngZCzbU)
* [Wiki](https://github.com/boy0001/FastAsyncWorldedit/wiki)
### - [**`> Download <`**](https://empcraft.com/fawe/download/) ## Downloads
### - [**`> Jenkins <`**](https://ci.athion.net/job/FastAsyncWorldEdit/) ### <1.12.2
* [Download](https://incendo.org/download/)
* [Jenkins](https://ci.athion.net/job/FastAsyncWorldEdit/)
### 1.13+
* [Download](https://incendo.org/download/)
* [Jenkins](https://ci.athion.net/job/FastAsyncWorldEdit-1.13/)
* [Repository](https://github.com/IntellectualSites/FastAsyncWorldEdit-1.13)
## Developer Resources
* [Maven Repo](http://ci.athion.net/job/FastAsyncWorldEdit/ws/mvn/)
* [API Documentation](https://github.com/boy0001/FastAsyncWorldedit/wiki/API)
## Building ## Building
FAWE uses gradle to build FAWE uses gradle to build
@ -28,4 +42,4 @@ $ gradlew build
Have an idea for an optimization, or a cool feature? Have an idea for an optimization, or a cool feature?
- I'll accept most PR's - I'll accept most PR's
- Let me know what you've tested / what may need further testing - Let me know what you've tested / what may need further testing
- If you need any help, create a ticket or discuss on Discord - If you need any help, create a ticket or discuss on [Discord](https://discord.gg/ngZCzbU)

View File

@ -34,7 +34,7 @@ ext {
date = git.head().date.format("yy.MM.dd") date = git.head().date.format("yy.MM.dd")
revision = "-${git.head().abbreviatedId}" revision = "-${git.head().abbreviatedId}"
parents = git.head().parentIds; parents = git.head().parentIds;
index = -96; // Offset to match CI index = -91; // Offset to match CI
int major, minor, patch; int major, minor, patch;
major = minor = patch = 0; major = minor = patch = 0;
for (; parents != null && !parents.isEmpty(); index++) { for (; parents != null && !parents.isEmpty(); index++) {
@ -99,7 +99,8 @@ subprojects {
maven {url "http://repo.dmulloy2.net/content/groups/public/"} maven {url "http://repo.dmulloy2.net/content/groups/public/"}
maven {url "https://repo.destroystokyo.com/repository/maven-public//"} maven {url "https://repo.destroystokyo.com/repository/maven-public//"}
maven {url "http://ci.emc.gs/nexus/content/groups/aikar/" } maven {url "http://ci.emc.gs/nexus/content/groups/aikar/" }
maven {url "http://ci.athion.net/job/PlotSquared/ws/mvn/"} maven {url "http://ci.athion.net/job/PlotSquared-Legacy/ws/mvn/"}
mavenLocal()
maven {url "http://empcraft.com/maven2"} maven {url "http://empcraft.com/maven2"}
maven {url "https://hub.spigotmc.org/nexus/content/groups/public/"} maven {url "https://hub.spigotmc.org/nexus/content/groups/public/"}
maven {url "http://maven.sk89q.com/repo/"} maven {url "http://maven.sk89q.com/repo/"}
@ -107,7 +108,7 @@ subprojects {
maven {url "http://ci.frostcast.net/plugin/repository/everything"} maven {url "http://ci.frostcast.net/plugin/repository/everything"}
maven {url "http://maven.sk89q.com/artifactory/repo"} maven {url "http://maven.sk89q.com/artifactory/repo"}
maven {url "http://repo.spongepowered.org/maven"} maven {url "http://repo.spongepowered.org/maven"}
maven {url "https://repo.inventivetalent.org/content/groups/public/"}
maven {url "http://dl.bintray.com/tastybento/maven-repo"} maven {url "http://dl.bintray.com/tastybento/maven-repo"}
maven {url "https://repo.inventivetalent.org/content/groups/public/"}
} }
} }

View File

@ -31,7 +31,7 @@ dependencies {
compile 'org.bukkit.craftbukkit:CraftBukkit:1.8.8' compile 'org.bukkit.craftbukkit:CraftBukkit:1.8.8'
compile 'com.comphenix.protocol:ProtocolLib-API:4.4.0-SNAPSHOT' compile 'com.comphenix.protocol:ProtocolLib-API:4.4.0-SNAPSHOT'
compile 'com.wasteofplastic:askyblock:3.0.8.2' compile 'com.wasteofplastic:askyblock:3.0.8.2'
compile('org.inventivetalent:mapmanager:1.4.0-SNAPSHOT') { compile('org.inventivetalent:mapmanager:1.7.2-SNAPSHOT') {
transitive = false transitive = false
} }
} }

View File

@ -348,11 +348,11 @@ public class FaweBukkit implements IFawe, Listener {
public String getDebugInfo() { public String getDebugInfo() {
StringBuilder msg = new StringBuilder(); StringBuilder msg = new StringBuilder();
List<String> pl = new ArrayList<>(); List<String> pl = new ArrayList<>();
msg.append("server.version: " + Bukkit.getVersion() + " / " + Bukkit.getBukkitVersion() + "\n");
msg.append("server.plugins: \n"); msg.append("server.plugins: \n");
for (Plugin p : Bukkit.getPluginManager().getPlugins()) { for (Plugin p : Bukkit.getPluginManager().getPlugins()) {
msg.append(" - " + p.getName() + ": " + p.getDescription().getVersion() + "\n"); msg.append(" - " + p.getName() + ": " + p.getDescription().getVersion() + "\n");
} }
msg.append("server.version: " + Bukkit.getVersion() + " / " + Bukkit.getBukkitVersion() + "\n");
return msg.toString(); return msg.toString();
} }

View File

@ -1,5 +1,6 @@
repositories { repositories {
flatDir {dirs 'lib'} flatDir {dirs 'lib'}
maven {url "http://ci.athion.net/job/PlotSquared-Legacy/ws/mvn/"}
} }
dependencies { dependencies {
testCompile 'junit:junit:4.12' testCompile 'junit:junit:4.12'

View File

@ -433,6 +433,7 @@ public class Fawe {
MainUtil.copyFile(MainUtil.getJarFile(), "nl/message.yml", null); MainUtil.copyFile(MainUtil.getJarFile(), "nl/message.yml", null);
MainUtil.copyFile(MainUtil.getJarFile(), "fr/message.yml", null); MainUtil.copyFile(MainUtil.getJarFile(), "fr/message.yml", null);
MainUtil.copyFile(MainUtil.getJarFile(), "cn/message.yml", null); MainUtil.copyFile(MainUtil.getJarFile(), "cn/message.yml", null);
MainUtil.copyFile(MainUtil.getJarFile(), "it/message.yml", null);
// Setting up config.yml // Setting up config.yml
File file = new File(this.IMP.getDirectory(), "config.yml"); File file = new File(this.IMP.getDirectory(), "config.yml");
Settings.IMP.PLATFORM = IMP.getPlatform().replace("\"", ""); Settings.IMP.PLATFORM = IMP.getPlatform().replace("\"", "");
@ -642,7 +643,7 @@ public class Fawe {
debug(" - AsyncWorldEdit/WorldEditRegions isn't installed"); debug(" - AsyncWorldEdit/WorldEditRegions isn't installed");
debug(" - Any other errors in the startup log"); debug(" - Any other errors in the startup log");
debug("Contact Empire92 if you need assistance:"); debug("Contact Empire92 if you need assistance:");
debug(" - Send me a PM or ask on IRC/Discord"); debug(" - Send me a PM or ask on Discord");
debug(" - https://discord.gg/ngZCzbU"); debug(" - https://discord.gg/ngZCzbU");
debug("======================================="); debug("=======================================");
} }

View File

@ -146,7 +146,6 @@ public enum BBC {
BRUSH_TRANSFORM("Brush transform set", "WorldEdit.Brush"), BRUSH_TRANSFORM("Brush transform set", "WorldEdit.Brush"),
BRUSH_MATERIAL("Brush material set", "WorldEdit.Brush"), BRUSH_MATERIAL("Brush material set", "WorldEdit.Brush"),
ROLLBACK_ELEMENT("Undoing %s0", "WorldEdit.Rollback"), ROLLBACK_ELEMENT("Undoing %s0", "WorldEdit.Rollback"),
TOOL_INSPECT("Inspect tool bound to %s0.", "WorldEdit.Tool"), TOOL_INSPECT("Inspect tool bound to %s0.", "WorldEdit.Tool"),

View File

@ -23,7 +23,7 @@ public class Settings extends Config {
@Final @Final
public String PLATFORM; // These values are set from FAWE before loading public String PLATFORM; // These values are set from FAWE before loading
@Comment({"Options: cn, de, es, fr, nl, ru, tr", @Comment({"Options: cn, de, es, fr, it, nl, ru, tr",
"Create a PR to contribute a translation: https://github.com/boy0001/FastAsyncWorldedit/new/master/core/src/main/resources",}) "Create a PR to contribute a translation: https://github.com/boy0001/FastAsyncWorldedit/new/master/core/src/main/resources",})
public String LANGUAGE = ""; public String LANGUAGE = "";
@Comment({"Enable or disable automatic updates", @Comment({"Enable or disable automatic updates",

View File

@ -160,7 +160,7 @@ public class InstallerFrame extends JFrame {
} catch (Throwable ignore) { } catch (Throwable ignore) {
ignore.printStackTrace(); ignore.printStackTrace();
} }
URL chat = new URL("http://webchat.esper.net/?nick=&channels=IntellectualCrafters&fg_color=000&fg_sec_color=000&bg_color=FFF"); URL chat = new URL("https://discord.gg/ngZCzbU");
URLButton chatButton = new URLButton(chat, "Chat"); URLButton chatButton = new URLButton(chat, "Chat");
bottomBar.add(chatButton); bottomBar.add(chatButton);
URL wiki = new URL("https://github.com/boy0001/FastAsyncWorldedit/wiki"); URL wiki = new URL("https://github.com/boy0001/FastAsyncWorldedit/wiki");

View File

@ -1,107 +0,0 @@
package com.boydti.fawe.util;
import com.boydti.fawe.Fawe;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HastebinUtility {
public static final String BIN_URL = "https://hastebin.com/documents", USER_AGENT = "Mozilla/5.0";
public static final Pattern PATTERN = Pattern.compile("\\{\"key\":\"([\\S\\s]*)\"\\}");
public static String upload(final String string) throws IOException {
final URL url = new URL(BIN_URL);
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("User-Agent", USER_AGENT);
connection.setDoOutput(true);
try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) {
outputStream.write(string.getBytes());
outputStream.flush();
}
StringBuilder response;
try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
}
Matcher matcher = PATTERN.matcher(response.toString());
if (matcher.matches()) {
return "https://hastebin.com/" + matcher.group(1);
} else {
throw new RuntimeException("Couldn't read response!");
}
}
public static String upload(final File file) throws IOException {
final StringBuilder content = new StringBuilder();
List<String> lines = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
int i = 0;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
}
for (int i = Math.max(0, lines.size() - 1000); i < lines.size(); i++) {
content.append(lines.get(i)).append("\n");
}
return upload(content.toString());
}
public static String debugPaste() throws IOException {
String settingsYML = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "config.yml"));
String messagesYML = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "message.yml"));
String commandsYML = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "commands.yml"));
String latestLOG;
try {
latestLOG = HastebinUtility.upload(new File(Fawe.imp().getDirectory(), "../../logs/latest.log"));
} catch (IOException ignored) {
latestLOG = "too big :(";
}
StringBuilder b = new StringBuilder();
b.append(
"# Welcome to this paste\n# It is meant to provide us at IntellectualSites with better information about your "
+ "problem\n\n# We will start with some informational files\n");
b.append("links.config_yml: ").append(settingsYML).append('\n');
b.append("links.messages_yml: ").append(messagesYML).append('\n');
b.append("links.commands_yml: ").append(commandsYML).append('\n');
b.append("links.latest_log: ").append(latestLOG).append('\n');
b.append("\n# Server Information\n");
b.append("server.platform: ").append(Fawe.imp().getPlatform()).append('\n');
b.append(Fawe.imp().getDebugInfo()).append('\n');
b.append("\n\n# YAY! Now, let's see what we can find in your JVM\n");
Runtime runtime = Runtime.getRuntime();
b.append("memory.free: ").append(runtime.freeMemory()).append('\n');
b.append("memory.max: ").append(runtime.maxMemory()).append('\n');
b.append("java.specification.version: '").append(System.getProperty("java.specification.version")).append("'\n");
b.append("java.vendor: '").append(System.getProperty("java.vendor")).append("'\n");
b.append("java.version: '").append(System.getProperty("java.version")).append("'\n");
b.append("os.arch: '").append(System.getProperty("os.arch")).append("'\n");
b.append("os.name: '").append(System.getProperty("os.name")).append("'\n");
b.append("os.version: '").append(System.getProperty("os.version")).append("'\n\n");
b.append("# Okay :D Great. You are now ready to create your bug report!");
b.append("\n# You can do so at https://github.com/boy0001/FastAsyncWorldedit/issues");
String link = HastebinUtility.upload(b.toString());
return link;
}
}

View File

@ -0,0 +1,259 @@
package com.boydti.fawe.util;
import com.boydti.fawe.Fawe;
import com.google.common.base.Charsets;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Files;
import java.util.*;
/**
* Single class paster for the Incendo paste service
*
* @author Sauilitired
*/
@SuppressWarnings({"unused", "WeakerAccess"})
public final class IncendoPaster {
/**
* Upload service URL
*/
public static final String UPLOAD_PATH = "https://incendo.org/paste/upload";
/**
* Valid paste applications
*/
public static final Collection<String>
VALID_APPLICATIONS = Arrays
.asList("plotsquared", "fastasyncworldedit", "incendopermissions", "kvantum");
private final Collection<PasteFile> files = new ArrayList<>();
private final String pasteApplication;
/**
* Construct a new paster
*
* @param pasteApplication The application that is sending the paste
*/
public IncendoPaster(final String pasteApplication) {
if (pasteApplication == null || pasteApplication.isEmpty()) {
throw new IllegalArgumentException("paste application cannot be null, nor empty");
}
if (!VALID_APPLICATIONS.contains(pasteApplication.toLowerCase(Locale.ENGLISH))) {
throw new IllegalArgumentException(
String.format("Unknown application name: %s", pasteApplication));
}
this.pasteApplication = pasteApplication;
}
/**
* Get an immutable collection containing all the files that have been added to this paster
*
* @return Unmodifiable collection
*/
public final Collection<PasteFile> getFiles() {
return Collections.unmodifiableCollection(this.files);
}
/**
* Add a file to the paster
*
* @param file File to paste
*/
public void addFile(final PasteFile file) {
if (file == null) {
throw new IllegalArgumentException("File cannot be null");
}
// Check to see that no duplicate files are submitted
for (final PasteFile pasteFile : this.files) {
if (pasteFile.fileName.equalsIgnoreCase(file.getFileName())) {
throw new IllegalArgumentException(String.format("Found duplicate file with name %s",
file.getFileName()));
}
}
this.files.add(file);
}
/**
* Create a JSON string from the submitted information
*
* @return compiled JSON string
*/
private String toJsonString() {
final StringBuilder builder = new StringBuilder("{\n");
builder.append("\"paste_application\": \"").append(this.pasteApplication).append("\",\n\"files\": \"");
Iterator<PasteFile> fileIterator = this.files.iterator();
while (fileIterator.hasNext()) {
final PasteFile file = fileIterator.next();
builder.append(file.getFileName());
if (fileIterator.hasNext()) {
builder.append(",");
}
}
builder.append("\",\n");
fileIterator = this.files.iterator();
while (fileIterator.hasNext()) {
final PasteFile file = fileIterator.next();
builder.append("\"file-").append(file.getFileName()).append("\": \"")
.append(file.getContent().replaceAll("\"", "\\\\\"")).append("\"");
if (fileIterator.hasNext()) {
builder.append(",\n");
}
}
builder.append("\n}");
return builder.toString();
}
/**
* Upload the paste and return the status message
*
* @return Status message
* @throws Throwable any and all exceptions
*/
public final String upload() throws Throwable {
final URL url = new URL(UPLOAD_PATH);
final URLConnection connection = url.openConnection();
final HttpURLConnection httpURLConnection = (HttpURLConnection) connection;
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
final byte[] content = toJsonString().getBytes(Charsets.UTF_8);
httpURLConnection.setFixedLengthStreamingMode(content.length);
httpURLConnection.setRequestProperty("Content-Type", "application/json");
httpURLConnection.setRequestProperty("Accept", "*/*");
httpURLConnection.connect();
try (final OutputStream stream = httpURLConnection.getOutputStream()) {
stream.write(content);
}
if (!httpURLConnection.getResponseMessage().contains("OK")) {
throw new IllegalStateException(String.format("Server returned status: %d %s",
httpURLConnection.getResponseCode(), httpURLConnection.getResponseMessage()));
}
final StringBuilder input = new StringBuilder();
try (final BufferedReader inputStream = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()))) {
String line;
while ((line = inputStream.readLine()) != null) {
input.append(line).append("\n");
}
}
return input.toString();
}
/**
* Simple class that represents a paste file
*/
public static class PasteFile {
private final String fileName;
private final String content;
/**
* Construct a new paste file
*
* @param fileName File name, cannot be empty, nor null
* @param content File content, cannot be empty, nor null
*/
public PasteFile(final String fileName, final String content) {
if (fileName == null || fileName.isEmpty()) {
throw new IllegalArgumentException("file name cannot be null, nor empty");
}
if (content == null || content.isEmpty()) {
throw new IllegalArgumentException("content cannot be null, nor empty");
}
this.fileName = fileName;
this.content = content;
}
/**
* Get the file name
*
* @return File name
*/
public String getFileName() {
return this.fileName;
}
/**
* Get the file content as a single string
*
* @return File content
*/
public String getContent() {
return this.content;
}
}
public static String debugPaste() throws IOException {
final IncendoPaster incendoPaster = new IncendoPaster("fastasyncworldedit");
StringBuilder b = new StringBuilder();
b.append(
"# Welcome to this paste\n# It is meant to provide us at IntellectualSites with better information about your "
+ "problem\n");
b.append("\n# Server Information\n");
b.append(Fawe.imp().getDebugInfo()).append('\n');
b.append("\n\n# YAY! Now, let's see what we can find in your JVM\n");
Runtime runtime = Runtime.getRuntime();
b.append("memory.free: ").append(runtime.freeMemory()).append('\n');
b.append("memory.max: ").append(runtime.maxMemory()).append('\n');
b.append("java.specification.version: '").append(System.getProperty("java.specification.version")).append("'\n");
b.append("java.vendor: '").append(System.getProperty("java.vendor")).append("'\n");
b.append("java.version: '").append(System.getProperty("java.version")).append("'\n");
b.append("os.arch: '").append(System.getProperty("os.arch")).append("'\n");
b.append("os.name: '").append(System.getProperty("os.name")).append("'\n");
b.append("os.version: '").append(System.getProperty("os.version")).append("'\n\n");
b.append("# Okay :D Great. You are now ready to create your bug report!");
b.append("\n# You can do so at https://github.com/boy0001/FastAsyncWorldedit/issues");
b.append("\n# or via our Discord at https://discord.gg/ngZCzbU");
incendoPaster.addFile(new IncendoPaster.PasteFile("information", b.toString()));
try {
final File logFile = new File(Fawe.imp().getDirectory(), "../../logs/latest.log");
final String file;
if (Files.size(logFile.toPath()) > 14_000_000) {
file = "too big :(";
} else {
file = readFile(logFile);
}
incendoPaster.addFile(new IncendoPaster.PasteFile("latest.log", file));
} catch (IOException ignored) {
}
incendoPaster.addFile(new PasteFile("config.yml", readFile(new File(Fawe.imp().getDirectory(), "config.yml"))));
incendoPaster.addFile(new PasteFile("message.yml", readFile(new File(Fawe.imp().getDirectory(), "message.yml"))));
final String rawResponse;
try {
rawResponse = incendoPaster.upload();
} catch (Throwable throwable) {
throw new IOException(String.format("Failed to create the debug paste: %s", throwable.getMessage()), throwable);
}
final JsonObject jsonObject = new JsonParser().parse(rawResponse).getAsJsonObject();
if (jsonObject.has("created")) {
final String pasteId = jsonObject.get("paste_id").getAsString();
return String.format("https://incendo.org/paste/view/%s", pasteId);
} else {
throw new IOException(String.format("Failed to create the debug paste: %s",
jsonObject.get("response").getAsString()));
}
}
private static String readFile(final File file) throws IOException {
final StringBuilder content = new StringBuilder();
final List<String> lines = new ArrayList<>();
try (final BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
}
for (int i = Math.max(0, lines.size() - 1000); i < lines.size(); i++) {
content.append(lines.get(i)).append("\n");
}
return content.toString();
}
}

View File

@ -745,7 +745,7 @@ public class BrushCommands extends BrushProcessor {
private BrushSettings terrainBrush(Player player, LocalSession session, Expression radius, String image, int rotation, double yscale, boolean flat, boolean randomRotate, boolean layers, boolean smooth, ScalableHeightMap.Shape shape, CommandContext context) throws WorldEditException, FileNotFoundException, ParameterException { private BrushSettings terrainBrush(Player player, LocalSession session, Expression radius, String image, int rotation, double yscale, boolean flat, boolean randomRotate, boolean layers, boolean smooth, ScalableHeightMap.Shape shape, CommandContext context) throws WorldEditException, FileNotFoundException, ParameterException {
checkMaxBrushRadius(radius); checkMaxBrushRadius(radius);
InputStream stream = image == null ? null : getHeightmapStream(image); InputStream stream = (image == null || image.equalsIgnoreCase("null") || image.equalsIgnoreCase("#clipboard")) ? null : getHeightmapStream(image);
HeightBrush brush; HeightBrush brush;
if (flat) { if (flat) {
try { try {

View File

@ -349,6 +349,7 @@ public class UtilityCommands extends MethodCommands {
@Logging(PLACEMENT) @Logging(PLACEMENT)
public void removeNear(Player player, LocalSession session, EditSession editSession, BaseBlock block, @Optional("50") double size) throws WorldEditException { public void removeNear(Player player, LocalSession session, EditSession editSession, BaseBlock block, @Optional("50") double size) throws WorldEditException {
worldEdit.checkMaxRadius(size); worldEdit.checkMaxRadius(size);
size = Math.max(1, size);
int affected = editSession.removeNear(session.getPlacementPosition(player), block.getId(), (int) size); int affected = editSession.removeNear(session.getPlacementPosition(player), block.getId(), (int) size);
player.print(BBC.getPrefix() + affected + " block(s) have been removed."); player.print(BBC.getPrefix() + affected + " block(s) have been removed.");
} }

View File

@ -24,10 +24,7 @@ import com.boydti.fawe.FaweVersion;
import com.boydti.fawe.config.BBC; import com.boydti.fawe.config.BBC;
import com.boydti.fawe.config.Settings; import com.boydti.fawe.config.Settings;
import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.util.HastebinUtility; import com.boydti.fawe.util.*;
import com.boydti.fawe.util.StringMan;
import com.boydti.fawe.util.TaskManager;
import com.boydti.fawe.util.Updater;
import com.sk89q.minecraft.util.commands.Command; import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandPermissions; import com.sk89q.minecraft.util.commands.CommandPermissions;
@ -185,13 +182,13 @@ public class WorldEditCommands {
@Command( @Command(
aliases = {"debugpaste"}, aliases = {"debugpaste"},
usage = "", usage = "",
desc = "Upload debug information to hastebin.com", desc = "Upload latest.log, config.yml and your message.yml to https://incendo.org",
min = 0, min = 0,
max = 0 max = 0
) )
@CommandPermissions("worldedit.debugpaste") @CommandPermissions("worldedit.debugpaste")
public void debugpaste(Actor actor) throws WorldEditException, IOException { public void debugpaste(Actor actor) throws WorldEditException, IOException {
BBC.DOWNLOAD_LINK.send(actor, HastebinUtility.debugPaste()); BBC.DOWNLOAD_LINK.send(actor, IncendoPaster.debugPaste());
} }
@Command( @Command(

View File

@ -1,306 +1,336 @@
#BYGreen_Chennai # 原译者Green_Chennai (MCBBS: ww2498010071)
#MCBBS IDww2498010071 # 2018年12月11日 10:25:15 进行过第8次更新
#来源第#1217号编译文件
#2018年10月14日 08:44:53进行过第7次更新 # 佛壁灯于 2018年12月10日 21:24:35 (UTC+8) 大幅改进翻译质量
# Green_Chennai在2018年12月11日 10:31:43第8次更新时修改由佛壁灯改进翻译后的不协调
# 请勿将 'FAWE' 进行翻译
info: info:
prefix: '&8(&4&lFAWE&8)&r&7' prefix: '&8(&4&lFAWE&8)&r&7'
file_deleted: '%s0 已被删除.' file_deleted: '%s0 已被删除.'
schematic_pasting: '&7原理图粘贴. 这不能被撤消.' schematic_pasting: '&7正在粘贴布局.此操作无法撤销.'
lighting_propogate_selection: '&7照明已经传播 %s0 个区块.(注意:去除光线使用//removelight)' lighting_propogate_selection: '&7光照已在 %s0 个区块内传播.(注:你可使用 //removelight 移除)'
updated_lighting_selection: '&7照明已更新 %s0 个区块. (它可能会为数据包发送一秒钟)' updated_lighting_selection: '&7已更新 %s0 个区块内的光照.(数据包可能要稍后发出)'
set_region: '&7选择设置为您当前允许的区域' set_region: '&7选择区域已设置为你当前允许的区域'
worldedit_command_limit: '&7请等待您当前的操作完成' worldedit_command_limit: '&7请等待完成你的当前操作'
worldedit_delayed: '&7我们处理您的FAWE操作请稍候...' worldedit_delayed: '&7正在处理你的FAWE操作请稍后···'
worldedit_run: '&7:为延误道歉 现在执行 %s' worldedit_run: '&7抱歉造成延误,现正执行 %s'
worldedit_complete: '&7编辑完成.' worldedit_complete: '&7编辑完成.'
require_selection_in_mask: '&7%s 你的选择不在你的圈内. 您只能在允许的地区进行修改.' require_selection_in_mask: '&7你选中的 %s 不在蒙版内.你只能在允许的区域内编辑.'
worldedit_volume: '&7你不能选择%current%的块.最大你可以修改是 %max%.' worldedit_volume: '&7你不能选择 %current% 大小的区域.所允许的最大区域为 %max%.'
worldedit_iterations: '&7您不能重复%current%次. 允许的最大的次数是 %max%.' worldedit_iterations: '&7你不能重复 %current% 次.所允许的最多重复为 %max% 次.'
worldedit_unsafe: '&7访问该命令已被阻止' file_deleted: '%s0 已被删除。'
worldedit_dangerous_worldedit: '&c已处理不安全编辑 %s0 一共 %s1' schematic_pasting: '&7正在粘贴布局。此操作无法撤销。'
lighting_propogate_selection: '&7光照已在 %s0 个区块内传播。(注:您可使用 //removelight 移除)'
updated_lighting_selection: '&7已更新 %s0 个区块内的光照。(数据包可能要稍后发出)'
set_region: '&7选择区域已设置为您当前允许的区域'
worldedit_command_limit: '&7请等待完成您的当前操作'
worldedit_delayed: '&7正在处理您的快异创世操作请稍后···'
worldedit_run: '&7很抱歉造成延误现正执行 %s'
worldedit_complete: '&7编辑完成。'
require_selection_in_mask: '&7您选中的 %s 不在蒙版内。您只能在允许的区域内编辑。'
worldedit_volume: '&7您不能选择 %current% 大小的区域。所允许的最大区域为 %max%。'
worldedit_iterations: '&7您不能重复 %current% 次。所允许的最多重复为 %max% 次。'
worldedit_unsafe: '&7已阻止对此命令的访问'
worldedit_dangerous_worldedit: '&c%s1 在 %s0 处进行了不安全的编辑'
worldedit_toggle_tips_on: '&7已禁用FAWE提示.' worldedit_toggle_tips_on: '&7已禁用FAWE提示.'
worldedit_toggle_tips_off: '&7已启用FAWE提示.' worldedit_toggle_tips_off: '&7已启用FAWE提示.'
worldedit_bypassed: '&7FAWE启用提示.'
worldedit_unmasked: '&6FAWE的版本更新已经开启.' worldedit_bypassed: '&7正绕过FAWE限制.'
worldedit_restricted: '&6您的FAWE版本更新已关闭.' worldedit_unmasked: '&6你的FAWE编辑现已不受限制.'
worldedit_restricted: '&6你的FAWE编辑现正受限制.'
worldedit_oom_admin: |- worldedit_oom_admin: |-
&c可以选择的选项: &c可选项:
&8 - &7//fast &8 - &7//fast
&8 - &7做小编辑 &8 - &7进行小编辑
&8 - &7分配更多内存 &8 - &7分配更多内存
&8 - &7禁用 `max-memory-percent` &8 - &7禁用 `max-memory-percent`
compressed: 修改历史压缩保存 %s0b (%s1x小) compressed: '已压缩历史.保存为 ~ %s0b%s1 倍原大小)'
action_complete: '保存完成,耗时 %s0 秒 ' action_complete: '已在 %s0 秒内完成操作'
error: error:
worldedit_extend: '&c你的WorldEdit编辑超出了允许的范围.' worldedit_extend: '&c你的编辑可能已超过所允许的范围.'
web_unauthorized: :只允许从配置的Web主机的链接 %s0 web_unauthorized: '仅允许来自已配置网页主机的链接: %s0'
command_syntax: '&c用法: &7%s0' command_syntax: '&c用法: &7%s0'
no_perm: '&c您缺少权限: %s0' no_perm: '&c你缺少权限节点: %s0'
setting_disable: '&c缺设置: %s0' setting_disable: '&c缺设置: %s0'
brush_not_found: '&c可用刷子: %s0' brush_not_found: '&c可用画笔: %s0'
brush_incompatible: '&c刷子不兼容此版本' brush_incompatible: '&c画笔与此版本不兼容'
schematic_not_found: '&c没有找到原理图: &7%s0' schematic_not_found: '&c未找到布局: &7%s0'
no_region: '&c你没有当前区域的修改权限' no_region: '&c你当前没有允许修改的区域'
no_mask: '&c你没有当前的掩码集' no_mask: '&c你当前没有蒙版集'
not_player: '&c你必须是执行此操作的玩家!' not_player: '&c你必须为玩家才能执行此操作!'
player_not_found: '&c玩家未找到:&7 %s0' player_not_found: '&c玩家未找到:&7 %s0'
oom: |- oom: |-
&8[&c系统提示&8] &c检测到可用内存 < 1%. 系统将采取以下行动: &8[&c致命错误&8] &c系统检测到可用内存 < 1%.我们将执行下列操作:
&8 - &7结束方块的WE定位 &8 - &7终止创世的方块放置
&8 - &7删除WE的历史记录 &8 - &7清除创世历史
&8 - &7预卸不需要的区块 &8 - &7卸载无用区块
&8 - &7杀死实体 &8 - &7杀死实体
&8 - &7运行系统内存垃圾收集器 &8 - &7收集垃圾
&c如果您尝试使服务器崩溃,请忽略此项 &c若你正尝试使服务器崩溃,请忽略此消息
&7注内存不足可能但不一定由WE引起 &7注:低内存可能但不一定由创世导致
worldedit_some_fails: '&c%s0 无法放置方块,因为你没有该区域的权限' worldedit_some_fails: '&c%s0 个方块由于在你所允许的区域外而无法放置.'
worldedit_some_fails_blockbag: '&c缺少方块: %s0' worldedit_some_fails_blockbag: '&c缺少方块: %s0'
web: web:
generating_link: '上传中%s请稍候...' generating_link: '正在上传 %s请稍后···'
generating_link_failed: '&c无法生成下载链接!' generating_link_failed: '&c生成下载链接失败!'
download_link: '%s' download_link: '%s'
worldedit: worldedit:
general: general:
mask_disabled: 全局掩码禁用 mask_disabled: 已禁用全局蒙版
mask: 全局掩码集 mask: 已设置全局蒙版
source_mask_disabled: 全局源掩码禁用 texture_disabled: 已重置纹理
source_mask: 全局源掩码集 texture_set: 已设置纹理为 %s1
transform_disabled: 全局变换被禁用 source_mask_disabled: 已禁用全局源蒙版
transform: 全局变换集 source_mask: 已设置全局源蒙版
fast_enabled: 启用快速模式,这不会保存操作,并取消放置限制. transform_disabled: 已禁用全局变形
fast_disabled: 快速模式禁用 transform: 已设置全局变形
place_enabled: '现在放在位置 #1.' fast_enabled: 已启用快速模式.历史及编辑将不受限制.
place_disabled: 现在,在你站的位置开始放置方块. fast_disabled: 已禁用快速模式
place_enabled: '放置于位置 #1.'
place_disabled: 放置于你所站的方块.
copy: copy:
command_copy: '%s0 块被复制.' command_copy: '已复制 %s0 个方块.'
cut: cut:
command_cut_slow: '%s0 个方块被复制.' command_cut_slow: '已剪切 %s0 个方块.'
command_cut_lazy: '%s0 个方块被剪切' command_cut_lazy: '%s0 个方块将在粘贴时被移除'
paste: paste:
command_paste: 拷贝方块已粘贴在 %s0 command_paste: 已粘贴剪贴板内容在 %s0
rotate: rotate:
command_rotate: 拷贝方块旋转 command_rotate: 已旋转剪贴板内容
flip: flip:
command_flipped: 拷贝方块翻转 command_flipped: 已翻转剪贴板内容
regen: regen:
command_regen_0: |- command_regen_0: 已重新生成区域.
区域再生. command_regen_1: 已重新生成区域.
生物群落 /regen [biome] command_regen_2: 已重新生成区域.
command_regen_1: |-
区域再生.
使用种子 /regen [biome] [seed]
command_regen_2: 区域再生.
tree: tree:
command_tree: '%s0 创建树.' command_tree: '已生成 %s0 棵树木.'
command_pumpkin: '%s0 创建南瓜.' command_pumpkin: '已生成 %s0 个南瓜.'
flora: flora:
command_flora: '%s0 植物创建.' command_flora: '已生成 %s0 植物.'
history: history:
command_history_clear: 历史记录清除 command_history_clear: 已清除历史记录
command_redo_error: 复原. (查看使用/inspect` 和 `/frb`) command_redo_error: 可重做项.(请使用 `/inspect` 或 `/frb` 查看)
command_history_other_error: 无法找到会话 %s0. command_history_other_error: 无法找到 %s0 的会话.
command_redo_success: 复原成功. command_redo_success: 重做成功%s0.
command_undo_error: 撤销. (查看使用/inspect` 和 `/frb`) command_undo_error: 可撤销项.(请使用 `/inspect` 或 `/frb` 查看)
command_undo_success: 撤消成功. command_undo_success: 撤消成功%s0.
operation: operation:
operation: 放置方块 (%s0) operation: 操作已进入队列 (%s0)
selection: selection:
selection_wand: ' 左键单击:选择点 #1; 右键单击:选择点 #2' selection_wand: '左击: 选择位置 #1右击:选择位置 #2'
selection_wand_disable: 小木斧禁用 selection_wand_disable: 已禁用编辑手杖.
selection_wand_enable: 小木斧启用 selection_wand_enable: 已启用编辑手杖.
selection_chunk: 选中了块 (%s0) selection_chunk: 已选中区块 (%s0)
selection_chunks: 块被选中 (%s0) - (%s1) selection_chunks: 已选中区块 (%s0) - (%s1)
selection_contract: 选中区域共 %s0 块. selection_contract: 区域已缩小 %s0 个方块.
selection_count: %s0 块. selection_count: 共计 %s0 块.
selection_distr: '#总块: %s0' selection_distr: '# 方块总: %s0'
selection_expand: 地区扩大%s0 块 selection_expand: 地区扩大%s0 块
selection_expand_vert: 地区扩大 %s0 快 (从上到下) selection_expand_vert: 区域已增大 %s0 个方块.(从上到下)
selection_inset: 区域插图 selection_inset: 已插入区域
selection_outset: 区域开始 selection_outset: 已移出区域
selection_shift: 地区转移 selection_shift: 已移动区域
selection_cleared: 选择区域清除 selection_cleared: 已清除选择
navigation: navigation:
navigation_wand_error: '&c什么都没有' navigation_wand_error: '&c无可传递项'
anvil: anvil:
world_is_loaded: 执行时不应该使用世界.卸载世界,或使用-f来覆盖 (请先保存) world_is_loaded: 执行操作时世界不能被占用.请先卸载世界,或使用 -f 标记覆盖(请先保存)
brush: brush:
brush_reset: 重置你的画笔 brush_reset: 重置你的画笔.SHIFT + 单击)
brush_none: 没有拿着画笔! brush_none: 未拿画笔!
brush_scroll_action_set: 将滚动操作设置为 %s0 brush_scroll_action_set: 已设置滚动操作至 %s0
brush_scroll_action_unset: 去除了扫荡动 brush_scroll_action_unset: 已移除滚动操
brush_visual_mode_set: 设置视模式 %s0 brush_visual_mode_set: 设置视模式 %s0
brush_target_mode_set: 将目标模式设置为 %s0 brush_target_mode_set: 已设置目标模式为 %s0
brush_target_mask_set: 将目标掩码设置为 %s0 brush_target_mask_set: 已设置目标蒙版为 %s0
brush_target_offset_set: 设置目的地偏移量 %s0 brush_target_offset_set: 设置目的地偏移量 %s0
brush_equipped: 装备刷 %s0 brush_equipped: 已装备画笔 %s0
brush_try_other: |- brush_try_other: |-
&c还有其他更合适的画笔例如. &c 还有其他画笔可用,如:
&8 - &7//br height [半径=5] [#剪贴板|文件=null] [旋转=0] [yscale=1.00] &8 - &7//br height [半径=5] [#剪贴板|文件=null] [旋转=0] [纵坐标=1.00]
brush_copy: 左键单击要复制的对象的基础.右键单击粘贴.如果需要.可以增加刷子半径. brush_copy: 左击要复制的对象,右击粘贴.你可增加画笔半径.
brush_height_invalid: 无效的高度图文件 (%s0) brush_height_invalid: 高度图文件无效 (%s0)
brush_smooth: 注意:如果要平滑悬垂或洞穴,请使用混合刷. brush_smooth: '注:你可用混合刷使凸起与洞穴处变得平滑.'
brush_spline: 点击添加点,点击相同的地方完成 brush_spline: 点击添加点,请点击相同点完成
brush_line_primary: 添加点%s0单击另一个位置创建行 brush_line_primary: 已添加点 %s0请点击其他位置以创建线条
brush_line_secondary: 创造的pline brush_catenary_direction: 已添加点 %s0请点击要创建样条曲线的方向
brush_spline_primary_2: 添加位置,点击相同的地方加入! brush_line_secondary: 已创建样条曲线
brush_spline_secondary_error: 设置不够的位置! brush_spline_primary_2: 已添加位置,请点击相同点合并!
brush_spline_secondary: 创建一个凹槽 brush_spline_secondary_error: 位置集不足!
brush_size: 刷子尺寸设置 brush_spline_secondary: 已创建样条曲线
brush_range: 刷子尺寸设置 brush_size: 已设置画笔尺寸
brush_mask_disabled: 刷子遮罩禁用 brush_range: 已设置画笔尺寸
brush_mask: 刷子套装 brush_mask_disabled: 已禁用画笔蒙版
brush_source_mask_disabled: 画笔源掩码禁用 brush_mask: 已设置画笔蒙版
brush_source_mask: 画笔源掩码启用 brush_source_mask_disabled: 已禁用画笔源蒙版
brush_transform_disabled: 刷子变换禁用 brush_source_mask: 已设置画笔源蒙版
brush_transform: 刷子变换集 brush_transform_disabled: 已禁用画笔变形
brush_material: 刷子材料集 brush_transform: 已设置画笔变形
brush_material: 已设置画笔材料
rollback: rollback:
rollback_element: 撤消 %s0 rollback_element: 正在撤消 %s0
tool: tool:
tool_inspect: 检查工具绑定到 %s0. tool_inspect: 已绑定检查工具至 %s0.
tool_inspect_info: '&7%s0 变 %s1 到 %s2 %s3 前' tool_inspect_info: '&7%s0 在 %s3 前将 %s1 更改为 %s2'
tool_inspect_info_footer: '&6: &7%s0变化' tool_inspect_info_footer: '&6共计: &7%s0 处更改'
tool_none: 工具与您当前的项目未绑定. tool_none: 工具已从你的当前物品上解绑.
tool_info: 信息工具绑定到 %s0. tool_info: 已绑定信息工具至 %s0.
tool_tree: 树工具绑定到 %s0. tool_tree: 已绑定造树工具至 %s0.
tool_tree_error: 树型 %s0 未知. tool_tree_error: 树型 %s0 未知.
tool_repl: 块替代工具绑定到 %s0. tool_repl: 已绑定方块替换工具至 %s0.
tool_cycler: 阻止数据循环仪工具绑定到 %s0. tool_cycler: 已绑定方块数据循环工具至 %s0.
tool_flood_fill: 封闭洪水填充工具绑定到 %s0. tool_flood_fill: 已绑定方块洪水填充工具至 %s0.
tool_range_error: '最大范围: %s0.' tool_range_error: '最大范围: %s0.'
tool_radius_error: '最大允许刷半径: %s0.' tool_radius_error: '最大画笔半径: %s0.'
tool_deltree: 浮动清除工具绑定到 %s0. tool_deltree: 已绑定漂树移除工具至 %s0.
tool_farwand: 远棒工具绑定到 %s0. tool_farwand: 已绑定远程手杖至 %s0.
tool_lrbuild_bound: 远程建筑工具绑定 %s0. tool_lrbuild_bound: 已绑定远程建筑工具至 %s0.
tool_lrbuild_info: 左键单击设置为 %s0; 右键单击设置 %s1. tool_lrbuild_info: 已设置左击为 %s0; 已设置右击为 %s1.
superpickaxe_enabled: 超级镐启用. superpickaxe_enabled: 已启用超级稿子.
superpickaxe_disabled: 超级镐禁用. superpickaxe_disabled: 已禁用超级稿子.
superpickaxe_area_enabled: 模式已更改.左键单击一个镐. // to disable. superpickaxe_area_enabled: 已更改模式.请使用稿子左击,使用 // 禁用此功能.
snapshot: snapshot:
snapshot_loaded: '%s0 装;现在恢复...' snapshot_loaded: '已载入快照 %s0 ;正在恢复···'
snapshot_set: '快照设置: %s0' snapshot_set: '已设置快照为: %s0'
snapshot_newest: 现在使用最新的快照. snapshot_newest: 正使用最新版快照.
snapshot_list_header: '世界快照 (%s0):' snapshot_list_header: '世界快照 (%s0):'
snapshot_list_footer: 使用 /snap use [快照] 或 /snap use latest. snapshot_list_footer: 使用 /snap use [快照] 或 /snap use latest.
biome: biome:
biome_list_header: '生群系 (页 %s0/%s1):' biome_list_header: '生群系 (页 %s0/%s1):'
biome_changed: 生物改变了 %s0 列. biome_changed: 已更改 %s0 列中的生态群系.
utility: utility:
kill_success: '%s0 半径的实体 %s1.' kill_success: '已击杀半径 %s0 内的 %s1 个实体.'
nothing_confirmed: 你没有任何行动等待确认. nothing_confirmed: 你没有待确认的操作.
page_footer: 使用 %s0 去下一页 page_footer: 请使用 %s0 前往下一页
schematic: schematic:
schematic_format: 可用格式 (名称:查找名称) schematic_prompt_clear: '&7你可能需先使用 &c%s0 &7来清除剪贴板'
schematic_loaded: '%s0 加载.粘贴它 //paste' schematic_show: |-
schematic_saved: '%s0 保存.' &7正在显示来自 &a%s1&7 的 &a%s0&7 个原理图:
schematic_page: 页必须 %s &8 - &a左击&7将结构复制到你的剪贴板
schematic_none: 找不到文件. &8 - &a右击&7将结构添加到多重剪贴板
schematic_list: '可用文件 (文件名:格式) [%s0/%s1]:' &8 - &7使用 &a%s2&7 回到原世界
schematic_format: '可用格式 (名称: 搜索名称)'
schematic_loaded: '已加载 %s0.请使用 //paste 粘贴'
schematic_saved: '已保存 %s0.'
schematic_page: 页数必须为 %s
schematic_none: 未找到文件.
schematic_list: '可用文件 (文件名: 格式) [%s0/%s1]:'
schematic_list_elem: '&8 - &a%s0 &8- &7%s1' schematic_list_elem: '&8 - &a%s0 &8- &7%s1'
schematic_move_exists: '&c%s0 已存在'
schematic_move_success: '&a%s0 -> %s1'
schematic_move_failed: '&a%s0 未移动: %s1'
clipboard: clipboard:
clipboard_cleared: 剪贴板已清除 clipboard_cleared: 已清除剪贴板
clipboard_invalid_format: '未知的剪贴板格式: %s0' clipboard_invalid_format: '未知剪贴板格式: %s0'
clipboard_uri_not_found: 你没有加载 %s0 clipboard_uri_not_found: 尚未加载 %s0
visitor: visitor:
visitor_block: '%s0 受影响的区块' visitor_block: '共影响 %s0 个方块'
visitor_entity: '%s0 受影响的实体' visitor_entity: '共影响 %s0 个实体'
visitor_flat: '%s0 受影响的列' visitor_flat: '共影响 %s0 列'
selector: selector:
selector_fuzzy_pos1: 区域设置和扩展 %s0 %s1. selector_fuzzy_pos1: 已从 %s0 %s1 处设置并扩展区域.
selector_fuzzy_pos2: 增加扩充 %s0 %s1. selector_fuzzy_pos2: 已添加 %s0 %s1 的扩展区域.
selector_invalid_coordinates: 坐标无效 %s0 selector_invalid_coordinates: 坐标 %s0 无效
selector_already_set: 位置已经确立. selector_already_set: 已设置位置.
selector_set_default: 现在是默认的区域选择器 %s0. selector_set_default: 你的默认区域选择器已更改为 %s0.
selector_pos: '&a设置点 &b[&f%s0&b] &f为坐标 &b%s1 &a选择的方块&c[%s2]&a个' selector_pos: '已设置点 %s0 在 %s1 选择方块共 (%s2) 个'
selector_center: 中心确定&8%s0 (%s1). selector_center: 已设置中心为 %s0 (%s1).
selector_radius: 无线设置为 &8%s0 (%s1). selector_radius: 已设置半径为 %s0 (%s1).
selector_expanded: 扩大区域为 &(%s0 (%s1) selector_expanded: 已扩大区域至 %s0 (%s1)
timezone: timezone:
timezone_set: '为此会话设置时区: %s0' timezone_set: '为此会话设置时区: %s0'
timezone_display: '该时区当前的时间是: %s0' timezone_display: '此时区的当前时间为: %s0'
command: command:
command_invalid_syntax: 该命令未正确使用 (没有更多的帮助可用). command_invalid_syntax: 命令使用有误 (无帮助可用).
help: help:
command_clarifying_bracket: '&7添加支架 &c%s0' command_clarifying_bracket: '&7已为 &c%s0 &7添加阐述括号'
help_suggest: '&7没找到 %s0.也许尝试其中之一 &c%s1 &7?' help_suggest: '&7无法找到 %s0.试试 &c%s1 &7吗'
help_header_categories: 命令类型 help_header_categories: 命令类型
help_header_subcommands: 子命令 help_header_subcommands: 子命令
help_header_command: '&chelp: &7%s0' help_header_command: '&7%s0 &c帮助'
help_item_allowed: '&a%s0&8 - &7%s1' help_item_allowed: '&a%s0&8 - &7%s1'
help_item_denied: '&c%s0&8 - &7%s1' help_item_denied: '&c%s0&8 - &7%s1'
help_header: '帮助: %s0/%s1' help_header: '帮助: %s0/%s1'
help_footer: '&7维基Wiki: https://git.io/vSKE5' help_footer: '&7维基页面: https://git.io/vSKE5'
progress: progress:
progress_message: '%s1/%s0 (%s2%) @%s3cps %s4s之后完成' progress_message: '剩余 %s1/%s0 (%s2%) @%s3cps %s4s'
progress_finished: '[ 完成! ]' progress_finished: '[ 完成! ]'
cancel: cancel:
worldedit_cancel_count: '&c取消 %s0 编辑.' worldedit_cancel_count: '&c取消 %s0 编辑.'
worldedit_cancel_reason_confirm: '&7你的选择区域很大(%s0 -> %s1)使用 &c//confirm&7确定执行 &c%s2' worldedit_cancel_reason_confirm: '&7你的选择区域过大 (&c%s0 &7-> &c%s1&7内有 &c%s3&7 个方块).请使用 &c//confirm &7继续执行 &c%s2'
worldedit_cancel_reason: '&c您的WorldEdit操作已取消:&7 %s0&c.' worldedit_cancel_reason: '&c已取消你的创世操作:&7 %s0&c.'
worldedit_cancel_reason_manual: '已手动取消' worldedit_cancel_reason_manual: 手动取消
worldedit_cancel_reason_low_memory: '磁盘空间不足' worldedit_cancel_reason_low_memory: 内存不足
worldedit_cancel_reason_max_changes: '太多方块更改了' worldedit_cancel_reason_max_changes: 方块更改过多
worldedit_cancel_reason_max_checks: '块检查太多' worldedit_cancel_reason_max_checks: 方块检查过多
worldedit_cancel_reason_max_tiles: '封锁太多了' worldedit_cancel_reason_max_tiles: 方块状态过多
worldedit_cancel_reason_max_entities: '实体太多' worldedit_cancel_reason_max_entities: 实体过多
worldedit_cancel_reason_max_iterations: '最大重复次数' worldedit_cancel_reason_max_iterations: 最大重复次数
worldedit_cancel_reason_no_region: 使用 /wea来解除限制, 或设置`region-restrictions`选项为false在config.yml内 worldedit_cancel_reason_no_region: 无权限编辑区域 (请使用 /wea 绕过限制,或在 config.yml 中禁用 `region-restrictions`)
worldedit_failed_load_chunk: '&4忽略方块的变化: &7%s0;%s1&c. 尝试增加方块的队列.' worldedit_failed_load_chunk: '&c已跳过区块载入: &7%s0;%s1&c.请尝试增加区块等待时长'
worldedit_cancel_reason_outside_level: '外界' worldedit_cancel_reason_outside_level: 世界外
worldedit_cancel_reason_outside_region: 使用 /wea来解除限制, 或设置`region-restrictions`选项为false在config.yml内 worldedit_cancel_reason_outside_region: 在允许编辑的区域外 (请使用 /wea 绕过限制,或在 config.yml 中禁用 `region-restrictions`)
navigation: navigation:
ascend_fail: 没有找到你上方的空位. ascend_fail: 你上方无空位.
ascended_plural: 上升 %s0 格. ascended_plural: 上升 %s0 格.
ascended_singular: 向上移动一格. ascended_singular: 已向上移动一层.
unstuck: 现在应该会更好 unstuck: 起飞了!
descend_fail: 没有你找到的免费地点. descend_fail: 你下方无空位.
descend_plural: 下降 %s0 水平. descend_plural: 已下降 %s0 格.
descend_singular: 降低了一个水平. descend_singular: 已向下移动一层.
whoosh: 嗖! whoosh: 嗖!
poof: ! poof: !
thru_fail: 没有找到可以放下你的空位. thru_fail: 你前方无空位.
no_block: 没有方块目标或者是太远了 no_block: '视野内无方块!(或距离过远)'
up_fail: 会碰到方块. up_fail: 将碰到上方的物体.
selection: selection:
sel_cuboid: Cuboid:左键点 1, 右键点 2 sel_cuboid: '立方体: 左击点 1, 右击点 2'
sel_cuboid_extend: Cuboid:左键单击起始点,右键单击扩展 sel_cuboid_extend: '立方体: 左击起始点, 右击扩大'
sel_2d_polygon: 2D多边形选择器左/右点击添加一个点. sel_2d_polygon: '2D 多边形选择器: 左/右点击添加点.'
sel_ellipsiod: 椭圆选择器:左键=中心,右键单击扩展 sel_ellipsiod: '椭圆体选择器: 左击选定中心,右击扩大'
sel_sphere: 球体选择器:左击=中心,右键单击设置半径 sel_sphere: '球体选择器: 左击选定中心,右击设置半径'
sel_cylindrical: 圆柱选择器:左击=中心,右键单击扩展. sel_cylindrical: '圆柱选择器: 左击选定中心,右击扩大'
sel_max: '%s0 最高点数.' sel_max: '可选择至多 %s0 个点.'
sel_fuzzy: 模糊选择器:左键单击以选择所有或有块,右键单击添加.要选择一个空气腔,请使用 //pos1. sel_fuzzy: '模糊选择器: 左击选择所有可能的方块,右击添加.要选择气腔,请使用 //pos1.'
sel_convex_polyhedral: 凸多边形选择器:左键=第一个顶点,右键单击以添加更多. sel_convex_polyhedral: '凸多面体选择器: 左击选择首个顶点,右击选择更多顶点.'
sel_list: 有关选择类型的列表使用:&c //sel list sel_list: '要查看选择类型列表,请使用: &c//sel list'
sel_modes: '选择下模式之一:' sel_modes: '选择下模式之一:'
tips: tips:
tip_sel_list: 提示:请参阅不同的选择模式 &c//sel list tip_sel_list: '提示: 请使用 &c//sel list &7查看不同的选择模式'
tip_select_connected: 提示:选择所有连接的块 //sel fuzzy tip_select_connected: '提示: 请使用 //sel fuzzy 选择所有连接为一体的方块'
tip_set_pos1: '提示: 使用pos1作为模式 &c//set pos1' tip_set_pos1: '提示: 使用 &c//set pos1 &7将点 1 作为样式'
tip_farwand: '提示: 选择不同的点 &c//farwand' tip_farwand: '提示: 请使用 &c//farwand &7选择远方的点'
tip_lazycut: '&7提示: 使用更安全 &c//lazycut' tip_lazycut: '&7提示: 使用 &c//lazycut &7更为安全'
tip_fast: '&7提示: 快速设置,不使用撤消 &c//fast' tip_fast: '&7提示: 请使用 &c//fast &7在不撤销的情况下快速放置方块'
tip_cancel: '&7提示: 您可以 &c//cancel &7正在进行编辑' tip_cancel: '&7提示: 你可使用 &c//cancel &7取消进行中的编辑'
tip_mask: '&7提示: 设置全局目标掩码 &c/gmask' tip_mask: '&7提示: 请使用 &c/gmask &7设置全局终点蒙版'
tip_mask_angle: '提示: 更换向上的斜坡在 3-20 块使用&c //replace /[-20][-3]bedrock' tip_mask_angle: '提示: 请使用 &c//replace /[-20][-3] bedrock &7替换 3-20 个方块的上坡'
tip_set_linear: '&7提示: 设置块线性&c //set #l3d[wood,bedrock]' tip_set_linear: '&7提示: 请使用 &c//set #l3d[wood,bedrock] &7线性放置方块'
tip_surface_spread: '&7提示: 用平面展开&c //set #surfacespread[5][0][5][#existing]' tip_surface_spread: '&7提示: 请使用 &c//set #surfacespread[5][0][5][#existing] &7进行平面展开'
tip_set_hand: '&7提示: 你当前的手 &c//set hand' tip_set_hand: '&7提示: 请使用 &c//set hand &7来使用你的手'
tip_replace_id: '&7提示: 只替换块ID:&c //replace woodenstair #id[cobblestair]' tip_replace_id: '&7提示: 请使用 &c//replace woodenstair #编号[石台阶] &7来仅替换方块编号'
tip_replace_light: '提示: 用光源去除&c //replace #brightness[1][15]0' tip_replace_light: '提示: 请使用 &c//replace #brightness[1][15] 0 &7来移除光源'
tip_tab_complete: '提示: 替换命令支持选项卡完成' tip_tab_complete: '提示: 替换命令支持 Tab 键补全功能'
tip_flip: '提示: 镜子与 &c//flip' tip_flip: '提示: 请使用 &c//flip &7创建镜像'
tip_deform: '提示: 重塑与 &c//deform' tip_deform: '提示: 请使用 &c//deform &7重新塑形'
tip_transform: '提示: 设置转换 &c//gtransform' tip_transform: '提示: 请使用 &c//gtransform &7设置变形'
tip_copypaste: '提示: 粘贴点击 &c//br copypaste' tip_copypaste: '提示: 请使用 &c//br copypaste &7在点击时粘贴'
tip_source_mask: '提示: 设置源掩码 &c/gsmask <mask>&7' tip_source_mask: '提示: 请使用 &c/gsmask <蒙版> &7来设置源蒙版'
tip_replace_marker: '提示: 使用完整的剪贴板替换一个块 &c//replace wool #fullcopy' tip_replace_marker: '提示: 使用 &c//replace wool #fullcopy &7使用剪切板完全替换方块'
tip_paste: '提示: 与地方 &c//paste' tip_paste: '提示: 请使用 &c//paste &7放置方块'
tip_lazycopy: '提示: lazycopy更快' tip_lazycopy: '提示: lazycopy 的速度'
tip_download: '提示: &c//download' tip_download: '提示: 来试试 &c//download'
tip_rotate: '提示: 定位与 &c//rotate' tip_rotate: '提示: 请使用 &c//rotate &7确定方位'
tip_copy_pattern: '提示: 作模式尝试 &c#copy' tip_copy_pattern: '提示: 请使用 &c#copy &7来作为样式使用'
tip_regen_0: '提示: 使用生物群 /regen [biome]' tip_regen_0: '提示: 使用 &c/regen [生态群系] &7来重新生成生态群系'
tip_regen_1: '提示: 用一个种子 /regen [biome] [seed]' tip_regen_1: '提示: 使用 &c/regen [生态群系] [种子] &7来重新生成生态群系'
tip_biome_pattern: '提示: 这个 &c#biome:forest&7 模式可以在任何命令中使用' tip_biome_pattern: '提示: &c#biome[forest]&7 样式可用于任意命令中'
tip_biome_mask: '提示: 限制一个生物群 `$jungle` 面具' tip_biome_mask: '提示: 你可使用 `$jungle` 蒙版来限定生态群系'

View File

@ -74,6 +74,8 @@ worldedit:
fast_disabled: Modo rápido inhabilitado. fast_disabled: Modo rápido inhabilitado.
place_enabled: 'Ahora colocando en pos #1.' place_enabled: 'Ahora colocando en pos #1.'
place_disabled: Ahora colocando en el bloque en el que estás. place_disabled: Ahora colocando en el bloque en el que estás.
texture_disabled: Reinicio de texturizado
texture_set: Establecer texturizado en %s1
copy: copy:
command_copy: Se copiaron %s0 bloques. command_copy: Se copiaron %s0 bloques.
cut: cut:
@ -158,6 +160,7 @@ worldedit:
brush_transform_disabled: Transformación de pincel desactivada brush_transform_disabled: Transformación de pincel desactivada
brush_transform: Conjunto de transformación de pincel brush_transform: Conjunto de transformación de pincel
brush_material: Brush material set brush_material: Brush material set
brush_catenary_direction: Punto añadido %s0, Haga clic en la dirección que desee a la spline
rollback: rollback:
rollback_element: Deshacer %s0 rollback_element: Deshacer %s0
tool: tool:
@ -202,10 +205,19 @@ worldedit:
schematic_none: No se han encontrado archivos. schematic_none: No se han encontrado archivos.
schematic_list: 'Archivos disponibles (Filename: Format) [%s0/%s1]:' schematic_list: 'Archivos disponibles (Filename: Format) [%s0/%s1]:'
schematic_list_elem: '&8 - &a%s0 &8- &7%s1' schematic_list_elem: '&8 - &a%s0 &8- &7%s1'
schematic_prompt_clear: '&7Es posible que desee utilizar &c%s0 &7para borrar su actual primera'
schematic_show: |-
&7Mostrando &a%s0&7 esquemas de &a%s1&7:
&8 - &aClick izquierdo &7Una estructura para configurar tu portapapeles
&8 - &aBotón derecho del ratón &7para agregar una estructura a tu multipartículas
&8 - &7Utilizar &a%s2&7 para volver al mundo
schematic_move_exists: '&c%s0 ya existe'
schematic_move_success: '&a%s0 -> %s1'
schematic_move_failed: '&a%s0 no movido: %s1'
clipboard: clipboard:
clipboard_cleared: Portapapeles despejado clipboard_cleared: Portapapeles despejado
clipboard_invalid_format: 'Formato del portapapeles desconocido: %s0' clipboard_invalid_format: 'Formato del portapapeles desconocido: %s0'
clipboard_uri_not_found: You do not have %s0 loaded clipboard_uri_not_found: Usted no tiene %s0 cargado
visitor: visitor:
visitor_block: '%s0 bloques afectados' visitor_block: '%s0 bloques afectados'
visitor_entity: '%s0 entidades afectadas' visitor_entity: '%s0 entidades afectadas'

View File

@ -274,7 +274,7 @@ tips:
tip_fast: '&7Consiglio: Imposta velocemente e senza l''annullamento usando &c//fast' tip_fast: '&7Consiglio: Imposta velocemente e senza l''annullamento usando &c//fast'
tip_cancel: '&7Consiglio: Puoi cancellare con &c//cancel &7una modifica in corso' tip_cancel: '&7Consiglio: Puoi cancellare con &c//cancel &7una modifica in corso'
tip_mask: '&7Consiglio: Imposta una maschera di destinazione globale con &c/gmask' tip_mask: '&7Consiglio: Imposta una maschera di destinazione globale con &c/gmask'
tip_mask_angle: 'Consiglio: Sostituire le pendenze verso l'alto di 3-20 blocchi usando&c //replace /[-20][-3] bedrock' tip_mask_angle: 'Consiglio: Sostituire le pendenze verso l''alto di 3-20 blocchi usando&c //replace /[-20][-3] bedrock'
tip_set_linear: '&7Consiglio: Imposta i blocchi linearmente con&c //set #l3d[wood,bedrock]' tip_set_linear: '&7Consiglio: Imposta i blocchi linearmente con&c //set #l3d[wood,bedrock]'
tip_surface_spread: '&7Consiglio: Propaga una superficie piana con&c //set #surfacespread[5][0][5][#existing]' tip_surface_spread: '&7Consiglio: Propaga una superficie piana con&c //set #surfacespread[5][0][5][#existing]'
tip_set_hand: '&7Consiglio: Usa la tua mano attuale con &c//set hand' tip_set_hand: '&7Consiglio: Usa la tua mano attuale con &c//set hand'

View File

@ -21,7 +21,6 @@ info:
worldedit_unsafe: '&7Доступ к этой команде был заблокирован!' worldedit_unsafe: '&7Доступ к этой команде был заблокирован!'
worldedit_dangerous_worldedit: '&cFAWE обрабатывает небезопасный WorldEdit в %s0 worldedit_dangerous_worldedit: '&cFAWE обрабатывает небезопасный WorldEdit в %s0
на %s1' на %s1'
worldedit_bypass: '&7&oЧтобы обойти ваши ограничения используйте &c/wea'
worldedit_toggle_tips_on: '&7Советы WorldEdit &cвключены&7.' worldedit_toggle_tips_on: '&7Советы WorldEdit &cвключены&7.'
worldedit_toggle_tips_off: '&7Советы WorldEdit &cвключены&7.' worldedit_toggle_tips_off: '&7Советы WorldEdit &cвключены&7.'
worldedit_bypassed: '&7Обход ограничений WorldEdit &cвключен&7.' worldedit_bypassed: '&7Обход ограничений WorldEdit &cвключен&7.'
@ -59,6 +58,8 @@ error:
пределами вашего региона.' пределами вашего региона.'
worldedit_some_fails_blockbag: '&cНедостающие блоки: %s0' worldedit_some_fails_blockbag: '&cНедостающие блоки: %s0'
web_unauthorized: 'Разрешены только ссылки с настроенного веб-хостинга: %s0' web_unauthorized: 'Разрешены только ссылки с настроенного веб-хостинга: %s0'
brush_not_found: '&cДоступные кисти: %s0'
brush_incompatible: '&cКисть не совместима с этой версией'
web: web:
generating_link: Загрузка %s, пожалуйста подождите... generating_link: Загрузка %s, пожалуйста подождите...
generating_link_failed: '&cНе удалось создать ссылку!' generating_link_failed: '&cНе удалось создать ссылку!'
@ -75,6 +76,8 @@ worldedit:
fast_disabled: Быстрый режим отключен fast_disabled: Быстрый режим отключен
place_enabled: 'Теперь размещение в позиции #1.' place_enabled: 'Теперь размещение в позиции #1.'
place_disabled: Теперь размещение в блоке, на котором вы стоите. place_disabled: Теперь размещение в блоке, на котором вы стоите.
texture_disabled: Сброс текстуры
texture_set: Установите текстурирование на %s1
copy: copy:
command_copy: '%s0 блок(ов) скопировано.' command_copy: '%s0 блок(ов) скопировано.'
cut: cut:
@ -129,27 +132,16 @@ worldedit:
selection_cleared: Выделение очищено selection_cleared: Выделение очищено
brush: brush:
brush_none: Вы не держите кисть! brush_none: Вы не держите кисть!
brush_butcher: Кисть мясника сформирована (%s0)
brush_clipboard: Форма кисти буфера обемна сформирована
brush_cylinder: Цилиндрическая форма кисти сформирована (%s0 по %s1).
brush_extinguisher: Форма кисти огнерушения сформирована (%s0).
brush_gravity: Кисть гравитации сформирована (%s0)
brush_height: Кисть высоты сформирована (%s0)
brush_try_other: |- brush_try_other: |-
&cFAWE добавляет другие, более подходящие кисти, например, &cFAWE добавляет другие, более подходящие кисти, например,
&8 - &7//br height [radius=5] [#clipboard|file=null] [rotation=0] [yscale=1.00] &8 - &7//br height [radius=5] [#clipboard|file=null] [rotation=0] [yscale=1.00]
brush_copy: Кисть копирования сформирована (%s0). ПКМ по обьекту для копирования, ПКМ для вставки. При необходимости увеличьте радиус кисти. brush_copy: Кисть копирования сформирована (%s0). ПКМ по обьекту для копирования,
brush_command: Командная кисть сформирована (%s0) ПКМ для вставки. При необходимости увеличьте радиус кисти.
brush_height_invalid: Неверная высота файла карты (%s0) brush_height_invalid: Неверная высота файла карты (%s0)
brush_smooth: Кисть сглаживания сформирована (%s0 x %s1 используя %s2). brush_smooth: Кисть сглаживания сформирована (%s0 x %s1 используя %s2).
brush_sphere: Форма сферической кисти сформирована (%s0).
brush_line: Форма кисти линий сформирована (%s0).
brush_spline: Форма кисти линий сформирована (%s0). ПКМ по концу, чтобы добавить форму brush_spline: Форма кисти линий сформирована (%s0). ПКМ по концу, чтобы добавить форму
brush_spline_secondary_error: Не хватает установленных позиций! brush_spline_secondary_error: Не хватает установленных позиций!
brush_spline_secondary: Склеивание создано brush_spline_secondary: Склеивание создано
brush_blend_ball: Кисть смеси шара сформирована (%s0).
brush_erode: Кисть разрушения сформирована (%s0).
brush_recursive: Кисть рекурсии сформирована (%s0).
brush_size: Размер кисти установлен brush_size: Размер кисти установлен
brush_range: Размер кисти установлен brush_range: Размер кисти установлен
brush_mask_disabled: Маска кисти отключена brush_mask_disabled: Маска кисти отключена
@ -163,10 +155,14 @@ worldedit:
brush_visual_mode_set: Установлен визуальный режим для %s0 brush_visual_mode_set: Установлен визуальный режим для %s0
brush_target_mode_set: Установлен целевой режим для %s0 brush_target_mode_set: Установлен целевой режим для %s0
brush_spline_primary_2: Добавлена ​​позиция, Нажмите на том же месте, чтобы присоединиться! brush_spline_primary_2: Добавлена ​​позиция, Нажмите на том же месте, чтобы присоединиться!
brush_circle: Кисть создания круга оборудована (%s0). Щелкните правой кнопкой мыши, чтобы создать круг. brush_reset: Сбросьте кисть. (SHIFT + Click)
brush_shatter: Форма разрешающей кисти сформирована (%s0, %s1). brush_scroll_action_unset: Удалено действие прокрутки
brush_stencil: Форма кисти по шаблону сформирована (%s0). brush_target_mask_set: Установите целевую маску на %s0
brush_scatter: Форма кисти рассеивания сформирована (%s0, %s1). brush_target_offset_set: Установите смещение цели на %s0
brush_equipped: Оборудованная кисть %s0
brush_line_primary: Добавленная точка %s0, нажмите другую позицию, чтобы создать линию
brush_catenary_direction: Добавленная точка %s0, нажмите другую позицию, чтобы создать сплайн
brush_line_secondary: Созданный сплайн
rollback: rollback:
rollback_element: Отмена %s0 rollback_element: Отмена %s0
tool: tool:
@ -196,9 +192,20 @@ worldedit:
schematic_page: Страница должна быть %s schematic_page: Страница должна быть %s
schematic_none: Схематических фалов не найдено. schematic_none: Схематических фалов не найдено.
schematic_list: 'Доступные схематические файлы (Имя файла: Формат) [%s0/%s1]:' schematic_list: 'Доступные схематические файлы (Имя файла: Формат) [%s0/%s1]:'
schematic_prompt_clear: '&7Вы можете использовать &c%s0 &7очистить свой первый'
schematic_show: |-
&7Отображение &a%s0&7 схемы из &a%s1&7:
&8 - &aЩелчок левой кнопкой мыши &7структура для настройки вашего буфера обмена
&8 - &aЩелкните правойt кнопкой мыши &7добавить структуру в ваш мультибуфер
&8 - &7использование &a%s2&7 вернуться в мир
schematic_move_exists: '&c%s0 уже существует'
schematic_move_success: '&a%s0 -> %s1'
schematic_move_failed: '&a%s0 нет перемещенных: %s1'
schematic_list_elem: '&8 - &a%s0 &8- &7%s1'
clipboard: clipboard:
clipboard_cleared: Буфер обмена очищен clipboard_cleared: Буфер обмена очищен
clipboard_invalid_format: 'Неизвестный формат буфера обмена: %s0' clipboard_invalid_format: 'Неизвестный формат буфера обмена: %s0'
clipboard_uri_not_found: У тебя нет %s0 нагруженный
visitor: visitor:
visitor_block: '%s0 блок(ов) затронуто' visitor_block: '%s0 блок(ов) затронуто'
visitor_entity: '%s0 энтити затронуто' visitor_entity: '%s0 энтити затронуто'
@ -206,11 +213,13 @@ worldedit:
selector: selector:
selector_fuzzy_pos1: Регион установлен и расширен %s0 %s1. selector_fuzzy_pos1: Регион установлен и расширен %s0 %s1.
selector_fuzzy_pos2: Добавлено расширение %s0 %s1. selector_fuzzy_pos2: Добавлено расширение %s0 %s1.
selector_cuboid_pos1: Первая точка установлена на %s0 %s1.
selector_cuboid_pos2: Вторая точка установлена на %s0 %s1.
selector_invalid_coordinates: Неверные координаты %s0 selector_invalid_coordinates: Неверные координаты %s0
selector_already_set: Позиция уже установлена. selector_already_set: Позиция уже установлена.
selector_set_default: Ваш выбранный регион по умолчанию теперь %s0. selector_set_default: Ваш выбранный регион по умолчанию теперь %s0.
selector_pos: pos%s0 установлен в %s1 (%s2).
selector_center: Центр установлен на %s0 (%s1).
selector_radius: Радиус, установленный для %s0 (%s1).
selector_expanded: Расширенная область для %s0 (%s1)
command: command:
command_invalid_syntax: Команда не используется должным образом (нет больше помощи). command_invalid_syntax: Команда не используется должным образом (нет больше помощи).
snapshot: snapshot:
@ -224,9 +233,25 @@ worldedit:
biome_changed: Биом был изменен в %s0 колонн. biome_changed: Биом был изменен в %s0 колонн.
utility: utility:
kill_success: Убито %s0 энтити в радиусе %s1. kill_success: Убито %s0 энтити в радиусе %s1.
nothing_confirmed: У вас нет действий в ожидании подтверждения.
page_footer: использование %s0 to go to the next page
timezone: timezone:
timezone_set: 'Часовой пояс для этой сессии: %s0' timezone_set: 'Часовой пояс для этой сессии: %s0'
timezone_display: 'Текущее время в этом часовом поясе: %s0' timezone_display: 'Текущее время в этом часовом поясе: %s0'
navigation:
navigation_wand_error: '&cНичто не может пройти'
anvil:
world_is_loaded: Мир не должен использоваться во время исполнения. Выгрузить или использовать -f переопределить (сохранить сначала)
help:
command_clarifying_bracket: '&7Added clarifying bracket for &c%s0'
help_suggest: '&7не мог найти %s0. Возможно, попробуйте один из &c%s1 &7?'
help_header_categories: Типы команд
help_header_subcommands: Подкоманды
help_header_command: '&cПомогите за: &7%s0'
help_item_allowed: '&a%s0&8 - &7%s1'
help_item_denied: '&c%s0&8 - &7%s1'
help_header: 'Помогите: страница %s0/%s1'
help_footer: '&7Wiki: https://git.io/vSKE5'
progress: progress:
progress_message: '[ Очередь: %s0 | Отправляется: %s1 ]' progress_message: '[ Очередь: %s0 | Отправляется: %s1 ]'
progress_finished: '[ Готово! ]' progress_finished: '[ Готово! ]'
@ -240,10 +265,11 @@ cancel:
worldedit_cancel_reason_max_tiles: Слишком много blockstates worldedit_cancel_reason_max_tiles: Слишком много blockstates
worldedit_cancel_reason_max_entities: Слишком много энтити worldedit_cancel_reason_max_entities: Слишком много энтити
worldedit_cancel_reason_max_iterations: Максимальное количество итераций worldedit_cancel_reason_max_iterations: Максимальное количество итераций
worldedit_cancel_reason_max_fails: Вне разрешенного региона (обход, используя /wea, или выключите `region-restrictions` в config.yml)
worldedit_cancel_reason_no_region: Нет разрешенного региона (обход, используя /wea, или выключите `region-restrictions` в config.yml) worldedit_cancel_reason_no_region: Нет разрешенного региона (обход, используя /wea, или выключите `region-restrictions` в config.yml)
worldedit_failed_load_chunk: '&cПропущенные загруженные чанки: &7%s0;%s1&c. Попробуйте worldedit_failed_load_chunk: '&cПропущенные загруженные чанки: &7%s0;%s1&c. Попробуйте увеличить ожидание чанка.'
увеличить ожидание чанка.' worldedit_cancel_reason_confirm: '&7Ваш выбор большой (&c%s0 &7-> &c%s1&7, содержащий &c%s3&7 блоки). использование &c//confirm &7выполнить &c%s2'
worldedit_cancel_reason_outside_level: внешний мир
worldedit_cancel_reason_outside_region: Вне допустимой области (обход с /wea, или отключить `region-restrictions` в config.yml)
history: {} history: {}
navigation: navigation:
ascend_fail: Свободного места над вами не найдено. ascend_fail: Свободного места над вами не найдено.
@ -266,10 +292,8 @@ selection:
sel_sphere: 'Сферическое выделение: ЛКМ - центр, ПКМ для установки радиуса' sel_sphere: 'Сферическое выделение: ЛКМ - центр, ПКМ для установки радиуса'
sel_cylindrical: 'Цилиндрическое выделение: ЛКМ - центр, ПКМ для расширения' sel_cylindrical: 'Цилиндрическое выделение: ЛКМ - центр, ПКМ для расширения'
sel_max: '%s0 максимум точек.' sel_max: '%s0 максимум точек.'
sel_fuzzy: 'Нечеткое выделение: ЛКМ, чтобы выбрать все условные блоки, ПКМ, чтобы sel_fuzzy: 'Нечеткое выделение: ЛКМ, чтобы выбрать все условные блоки, ПКМ, чтобы добавить'
добавить' sel_convex_polyhedral: 'Выпуклое многогранное выделение: ЛКМ - первая вершина, ПКМ для добавления больше.'
sel_convex_polyhedral: 'Выпуклое многогранное выделение: ЛКМ - первая вершина, ПКМ
для добавления больше.'
sel_list: Для получения списка типов выделения используйте:&c //sel list sel_list: Для получения списка типов выделения используйте:&c //sel list
sel_modes: 'Выберите один из перечисленных режимов ниже:' sel_modes: 'Выберите один из перечисленных режимов ниже:'
tips: tips:
@ -280,37 +304,26 @@ tips:
tip_fast: '&7Совет: Установить быстро и без отмены, используя &c//fast' tip_fast: '&7Совет: Установить быстро и без отмены, используя &c//fast'
tip_cancel: '&7Совет: Вы можете &c//cancel &7от изменений в процессе' tip_cancel: '&7Совет: Вы можете &c//cancel &7от изменений в процессе'
tip_mask: '&7Совет: Задайте маску глобального назначения - &c/gmask' tip_mask: '&7Совет: Задайте маску глобального назначения - &c/gmask'
tip_mask_angle: 'Совет: Заменить верхний слой 3-20 блоков -&c //replace /-20:-3 tip_mask_angle: 'Совет: Заменить верхний слой 3-20 блоков -&c //replace /-20:-3 bedrock'
bedrock'
tip_set_linear: '&7Совет: Установка блоков -&c //set #l3d:wood,bedrock' tip_set_linear: '&7Совет: Установка блоков -&c //set #l3d:wood,bedrock'
tip_surface_spread: '&7Совет: Распространение плоской поверхности -&c //set #surfacespread:5:0:5:#existing' tip_surface_spread: '&7Совет: Распространение плоской поверхности -&c //set #surfacespread:5:0:5:#existing'
tip_set_hand: '&7Совет: Используйте свою текущую руку - &c//set hand' tip_set_hand: '&7Совет: Используйте свою текущую руку - &c//set hand'
tip_replace_id: '&7Совет: Заменить только ID блока -&c //replace woodenstair #id:cobblestair' tip_replace_id: '&7Совет: Заменить только ID блока -&c //replace woodenstair #id:cobblestair'
tip_replace_light: 'Совет: Удалить источники света -&c //replace #brightness:1:15 tip_replace_light: 'Совет: Удалить источники света -&c //replace #brightness:1:15 0'
0'
tip_tab_complete: 'Совет: Команда replace поддерживает автозаполение' tip_tab_complete: 'Совет: Команда replace поддерживает автозаполение'
tip_flip: 'Совет: Отобразить - &c//flip' tip_flip: 'Совет: Отобразить - &c//flip'
tip_deform: 'Совет: Изменить - &c//deform' tip_deform: 'Совет: Изменить - &c//deform'
tip_transform: 'Совет: Установка преобразования - &c//gtransform' tip_transform: 'Совет: Установка преобразования - &c//gtransform'
tip_copypaste: 'Совет: Вставка по клику - &c//br copypaste' tip_copypaste: 'Совет: Вставка по клику - &c//br copypaste'
tip_source_mask: 'Совет: Установить маску источника - &c/gsmask <mask>&7' tip_source_mask: 'Совет: Установить маску источника - &c/gsmask <mask>&7'
tip_replace_marker: 'Совет: Замените блок с помощью полного буфера обмена - &c//replace tip_replace_marker: 'Совет: Замените блок с помощью полного буфера обмена - &c//replace wool #fullcopy'
wool #fullcopy'
tip_paste: 'Совет: Вставить - &c//paste' tip_paste: 'Совет: Вставить - &c//paste'
tip_lazycopy: 'Совет: lazycopy быстрее' tip_lazycopy: 'Совет: lazycopy быстрее'
tip_download: 'Совет: Попробовать - &c//download' tip_download: 'Совет: Попробовать - &c//download'
tip_rotate: 'Совет: Ориентация - &c//rotate' tip_rotate: 'Совет: Ориентация - &c//rotate'
tip_copy_pattern: 'Совет: Для использования шаблона используйте &c#copy' tip_copy_pattern: 'Совет: Для использования шаблона используйте &c#copy'
tip_brush_spline: '&7Совет: Команда &c//brush &7соединяет несколько фигур вместе'
tip_brush_height: '&7Совет: Команда &c//brush &7плавно повышает или понижает ландшафт'
tip_brush_copy: '&7Совет: Команда &c//brush &7позволяет легко копировать и вставлять
объекты'
tip_brush_mask: '&7Совет: Задайте маску назначения кисти - &c/mask'
tip_brush_mask_source: '&7Совет: Задайте маску источника кисти - &c/smask'
tip_brush_transform: '&7Совет: Установите кисть преобразования - &c/transform'
tip_brush_relative: '&7Совет: Используйте шаблон относительного буфера обмена -
//br sphere #~:#copy'
tip_brush_command: '&7Совет: Попробуйте командную кисть - &c//br cmd <radius> <cmd1;cmd2>'
tip_lazycut: '&7Совет: Это безопаснее использовать &c//lazycut' tip_lazycut: '&7Совет: Это безопаснее использовать &c//lazycut'
tip_regen_0: 'Совет: Используйте биом - &c/regen [biome]' tip_regen_0: 'Совет: Используйте биом - &c/regen [biome]'
tip_regen_1: 'Совет: Используйте сид - &c/regen [biome] [seed]' tip_regen_1: 'Совет: Используйте сид - &c/regen [biome] [seed]'
tip_biome_pattern: 'Tip: The &c#biome[forest]&7 pattern can be used in any command'
tip_biome_mask: 'Tip: Restrict to a biome with the `$jungle` mask'

View File

@ -35,13 +35,13 @@ repositories {
name = "Sponge" name = "Sponge"
url = "https://repo.spongepowered.org/maven" url = "https://repo.spongepowered.org/maven"
} }
maven { // maven {
name = "Sponge Metrics" // name = "Sponge Metrics"
url = "http://repo.mcstats.org/content/repositories/releases/" // url = "http://repo.mcstats.org/content/repositories/releases/"
} // }
} }
minecraft { minecraft {
version = "2014" version = "1.10.2-12.18.3.2511"
mappings = "snapshot_20160629" mappings = "snapshot_20160629"
runDir = 'run' runDir = 'run'
} }

View File

@ -35,10 +35,10 @@ repositories {
name = "Sponge" name = "Sponge"
url = "https://repo.spongepowered.org/maven" url = "https://repo.spongepowered.org/maven"
} }
maven { // maven {
name = "Sponge Metrics" // name = "Sponge Metrics"
url = "http://repo.mcstats.org/content/repositories/releases/" // url = "http://repo.mcstats.org/content/repositories/releases/"
} // }
} }
minecraft { minecraft {
version = "1.11-13.19.0.2157" version = "1.11-13.19.0.2157"

View File

@ -35,10 +35,10 @@ repositories {
name = "Sponge" name = "Sponge"
url = "https://repo.spongepowered.org/maven" url = "https://repo.spongepowered.org/maven"
} }
maven { // maven {
name = "Sponge Metrics" // name = "Sponge Metrics"
url = "http://repo.mcstats.org/content/repositories/releases/" // url = "http://repo.mcstats.org/content/repositories/releases/"
} // }
} }
minecraft { minecraft {
version = "1.12.2-14.23.0.2532" version = "1.12.2-14.23.0.2532"

View File

@ -13,6 +13,7 @@ import com.boydti.fawe.util.TaskManager;
import com.boydti.fawe.wrappers.WorldWrapper; import com.boydti.fawe.wrappers.WorldWrapper;
import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.forge.ForgeWorld; import com.sk89q.worldedit.forge.ForgeWorld;
import com.sk89q.worldedit.internal.LocalWorldAdapter;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.ModMetadata; import cpw.mods.fml.common.ModMetadata;
@ -148,6 +149,8 @@ public class FaweForge implements IFawe {
e.printStackTrace(); e.printStackTrace();
return world.getName(); return world.getName();
} }
}else if (world instanceof LocalWorldAdapter){
return world.getName();
} }
return getWorldName(((ForgeWorld) world).getWorld()); return getWorldName(((ForgeWorld) world).getWorld());
} }

View File

@ -35,13 +35,13 @@ repositories {
name = "Sponge" name = "Sponge"
url = "https://repo.spongepowered.org/maven" url = "https://repo.spongepowered.org/maven"
} }
maven { // maven {
name = "Sponge Metrics" // name = "Sponge Metrics"
url = "http://repo.mcstats.org/content/repositories/releases/" // url = "http://repo.mcstats.org/content/repositories/releases/"
} // }
} }
minecraft { minecraft {
version = "1855" version = "1.8.9-11.15.1.1722"
mappings = "stable_22" mappings = "stable_22"
runDir = 'run' runDir = 'run'
} }

View File

@ -34,13 +34,13 @@ repositories {
name = "Sponge" name = "Sponge"
url = "https://repo.spongepowered.org/maven" url = "https://repo.spongepowered.org/maven"
} }
maven { // maven {
name = "Sponge Metrics" // name = "Sponge Metrics"
url = "http://repo.mcstats.org/content/repositories/releases/" // url = "http://repo.mcstats.org/content/repositories/releases/"
} // }
} }
minecraft { minecraft {
version = "1965" version = "1.9.4-12.17.0.2051"
mappings = "stable_26" mappings = "stable_26"
runDir = 'run' runDir = 'run'
} }

View File

@ -1,6 +1,6 @@
#Fri Jan 12 10:28:44 AEDT 2018 #Tue Feb 26 14:36:53 CET 2019
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

View File

@ -1,3 +1,3 @@
rootProject.name = 'FastAsyncWorldEdit' rootProject.name = 'FastAsyncWorldEdit'
include 'core', 'bukkit', 'favs', 'nukkit', 'forge1710', 'forge189', 'forge194', 'forge110', 'forge111', 'sponge112', 'forge112', 'sponge111' include 'core', 'bukkit', 'favs', 'nukkit', 'forge189', 'forge194', 'forge110', 'forge111', 'forge112', 'sponge111', 'sponge112' // 'forge1710'

View File

@ -43,10 +43,10 @@ repositories {
name = "Sponge" name = "Sponge"
url = "https://repo.spongepowered.org/maven" url = "https://repo.spongepowered.org/maven"
} }
maven { // maven {
name = "Sponge Metrics" // name = "Sponge Metrics"
url = "http://repo.mcstats.org/content/repositories/releases/" // url = "http://repo.mcstats.org/content/repositories/releases/"
} // }
} }
dependencies { dependencies {

View File

@ -36,10 +36,10 @@ repositories {
name = "Sponge" name = "Sponge"
url = "https://repo.spongepowered.org/maven" url = "https://repo.spongepowered.org/maven"
} }
maven { // maven {
name = "Sponge Metrics" // name = "Sponge Metrics"
url = "http://repo.mcstats.org/content/repositories/releases/" // url = "http://repo.mcstats.org/content/repositories/releases/"
} // }
} }
dependencies { dependencies {