Skip to content
This repository was archived by the owner on Aug 31, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/main/java/tc/oc/minecraft/api/command/Console.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package tc.oc.minecraft.api.command;

public interface Console extends CommandSender {
}

This file was deleted.

4 changes: 2 additions & 2 deletions src/main/java/tc/oc/minecraft/api/server/LocalServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import java.util.Set;

import tc.oc.minecraft.api.command.ConsoleCommandSender;
import tc.oc.minecraft.api.command.Console;
import tc.oc.minecraft.api.logging.Loggable;
import tc.oc.minecraft.api.plugin.PluginFinder;

Expand All @@ -13,7 +13,7 @@ public interface LocalServer extends Loggable, Server {

PluginFinder getPluginFinder();

ConsoleCommandSender getConsoleSender();
Console getConsoleSender();

/**
* All Minecraft protocol versions supported by this server
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/tc/oc/minecraft/api/text/TextRenderContext.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package tc.oc.minecraft.api.text;

import net.md_5.bungee.api.chat.BaseComponent;
import tc.oc.minecraft.api.command.CommandSender;

/**
* A service that "renders" {@link BaseComponent}s for display to a specific {@link CommandSender}.
*
* This may involve translation of {@link net.md_5.bungee.api.chat.TranslatableComponent}s,
* or other operations implemented by plugins. It also may do nothing at all, in which case
* the {@link #render(BaseComponent, CommandSender)} method is likely to return the same
* {@link BaseComponent} that was passed to it.
*
* @see TextRenderer
*/
public interface TextRenderContext {

BaseComponent render(BaseComponent text, CommandSender viewer);
}
44 changes: 44 additions & 0 deletions src/main/java/tc/oc/minecraft/api/text/TextRenderer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package tc.oc.minecraft.api.text;

import net.md_5.bungee.api.chat.BaseComponent;
import tc.oc.minecraft.api.command.CommandSender;
import tc.oc.minecraft.api.command.Console;
import tc.oc.minecraft.api.entity.Player;

/**
* A plugin can register one of these with a {@link TextRendererBinder} in order to process
* {@link BaseComponent}s before they are sent to individual {@link CommandSender}s.
*
* The server will pass most text through all registered {@link TextRenderer}s, in unspecified order.
* Rendering happens on the main thread, just before the text is displayed or transmitted.
*
* Implementors must NOT modify the text passed to the render method. The original text can be
* returned unmodified, or a new object can be returned. Returned objects are not modified
* by the server, so they can be reused for other renderings.
*
* Implementors should try to be fast and minimize object creation, as rendering is called once
* per player, per piece of text displayed, even for broadcasted messages.
*
* @see TextRenderContext
* @see TextRendererBinder
*/
public interface TextRenderer {

default BaseComponent render(TextRenderContext context, BaseComponent text, CommandSender viewer) {
if(viewer instanceof Player) {
return render(context, text, (Player) viewer);
} else if(viewer instanceof Console) {
return render(context, text, (Console) viewer);
} else {
return text;
}
}

default BaseComponent render(TextRenderContext context, BaseComponent text, Player viewer) {
return text;
}

default BaseComponent render(TextRenderContext context, BaseComponent text, Console viewer) {
return text;
}
}
22 changes: 22 additions & 0 deletions src/main/java/tc/oc/minecraft/api/text/TextRendererBinder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package tc.oc.minecraft.api.text;

import com.google.inject.Binder;
import com.google.inject.binder.LinkedBindingBuilder;
import com.google.inject.multibindings.Multibinder;

/**
* Register {@link TextRenderer}s to process all outgoing text from the server,
* for as long as the owning plugin is enabled.
*/
public class TextRendererBinder {

private final Multibinder<TextRenderer> renderers;

public TextRendererBinder(Binder binder) {
this.renderers = Multibinder.newSetBinder(binder, TextRenderer.class);
}

public LinkedBindingBuilder<TextRenderer> bindRenderer() {
return renderers.addBinding();
}
}