ProjectAres/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/chat/TranslatableComponentRender...

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;
}
}
}