geforkt von Mirrors/FastAsyncWorldEdit
Fix piston breaking
Dieser Commit ist enthalten in:
Ursprung
db3718e092
Commit
99745b8e59
@ -19,73 +19,28 @@
|
|||||||
|
|
||||||
package com.sk89q.worldedit.util.formatting;
|
package com.sk89q.worldedit.util.formatting;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.util.formatting.text.Component;
|
import com.sk89q.worldedit.util.formatting.text.Component;
|
||||||
import com.sk89q.worldedit.util.formatting.text.TranslatableComponent;
|
|
||||||
import org.enginehub.piston.config.Config;
|
|
||||||
import org.enginehub.piston.config.ConfigHolder;
|
import org.enginehub.piston.config.ConfigHolder;
|
||||||
|
import org.enginehub.piston.config.ConfigRenderer;
|
||||||
import org.enginehub.piston.config.TextConfig;
|
import org.enginehub.piston.config.TextConfig;
|
||||||
import org.enginehub.piston.util.TextHelper;
|
import org.enginehub.piston.util.TextHelper;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
public class WorldEditText {
|
public class WorldEditText {
|
||||||
|
private static final ConfigRenderer RENDERER = ConfigRenderer.getInstance();
|
||||||
public static final ConfigHolder CONFIG_HOLDER = ConfigHolder.create();
|
public static final ConfigHolder CONFIG_HOLDER = ConfigHolder.create();
|
||||||
private static final Method METHOD_APPLY;
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
CONFIG_HOLDER.getConfig(TextConfig.commandPrefix()).setValue("/");
|
CONFIG_HOLDER.getConfig(TextConfig.commandPrefix()).setValue("/");
|
||||||
try {
|
|
||||||
METHOD_APPLY = Config.class.getDeclaredMethod("apply", List.class);
|
|
||||||
METHOD_APPLY.setAccessible(true);
|
|
||||||
} catch (NoSuchMethodException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Component format(Component component, Locale locale) {
|
public static Component format(Component component, Locale locale) {
|
||||||
return CONFIG_HOLDER.replace(WorldEdit.getInstance().getTranslationManager().convertText(recursiveReplace(component), locale));
|
return WorldEdit.getInstance().getTranslationManager().convertText(
|
||||||
}
|
RENDERER.render(component, CONFIG_HOLDER),
|
||||||
|
locale
|
||||||
private static Component recursiveReplace(Component input) {
|
);
|
||||||
if (input instanceof TranslatableComponent) {
|
|
||||||
TranslatableComponent tc = (TranslatableComponent)input;
|
|
||||||
List<Component> args = tc.args();
|
|
||||||
if (args != (args = replaceChildren(args))) {
|
|
||||||
input = tc = tc.args(args);
|
|
||||||
}
|
|
||||||
if (CONFIG_HOLDER.getConfigs().containsKey(tc.key())) {
|
|
||||||
Config config = CONFIG_HOLDER.getConfigs().get(tc.key());
|
|
||||||
try {
|
|
||||||
return (Component) METHOD_APPLY.invoke(config, replaceChildren(tc.args()));
|
|
||||||
} catch (Throwable e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
List<Component> original = input.children();
|
|
||||||
List<Component> replacement = replaceChildren(original);
|
|
||||||
return original == replacement ? input : input.children(replacement);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static List<Component> replaceChildren(List<Component> input) {
|
|
||||||
if (input.isEmpty()) {
|
|
||||||
return input;
|
|
||||||
}
|
|
||||||
ImmutableList.Builder<Component> copy = ImmutableList.builder();
|
|
||||||
boolean modified = false;
|
|
||||||
for (Component component : input) {
|
|
||||||
Component replacement = recursiveReplace(component);
|
|
||||||
if (replacement != component) {
|
|
||||||
modified = true;
|
|
||||||
}
|
|
||||||
copy.add(replacement);
|
|
||||||
}
|
|
||||||
return modified ? copy.build() : input;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String reduceToText(Component component, Locale locale) {
|
public static String reduceToText(Component component, Locale locale) {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren