43 lines
1.6 KiB
Java
43 lines
1.6 KiB
Java
package tc.oc.commons.bukkit.chat;
|
|
|
|
import java.text.MessageFormat;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
import javax.inject.Inject;
|
|
import javax.inject.Singleton;
|
|
import net.md_5.bungee.api.chat.BaseComponent;
|
|
import net.md_5.bungee.api.chat.TranslatableComponent;
|
|
import org.bukkit.command.CommandSender;
|
|
import tc.oc.commons.bukkit.localization.Translator;
|
|
import tc.oc.commons.core.chat.Component;
|
|
import tc.oc.commons.core.chat.Components;
|
|
|
|
@Singleton
|
|
public class TranslatableComponentRenderer extends BaseComponentRenderer<TranslatableComponent> {
|
|
|
|
private final Translator translations;
|
|
|
|
@Inject TranslatableComponentRenderer(Translator translations) {
|
|
this.translations = translations;
|
|
}
|
|
|
|
@Override
|
|
public BaseComponent renderContent(ComponentRenderContext context, TranslatableComponent original, CommandSender viewer) {
|
|
final List<BaseComponent> with = context.render(original.getWith(), viewer);
|
|
final Optional<MessageFormat> pattern = translations.pattern(original.getTranslate(), viewer);
|
|
|
|
if(pattern.isPresent()) {
|
|
// Found a TranslatableComponent with one of our keys
|
|
return new Component(Components.format(pattern.get(), with));
|
|
} else if(with != original.getWith()) {
|
|
// Not our key, but something in with was replaced
|
|
final TranslatableComponent replacement = new TranslatableComponent(original.getTranslate());
|
|
replacement.setWith(with);
|
|
return replacement;
|
|
} else {
|
|
// Nothing was replaced
|
|
return original;
|
|
}
|
|
}
|
|
}
|