Code Patterns
Copy-paste examples for common plugin tasks. Commands, events, ECS, GUI, and more.
All
225
Command
60
Damage
2
Ecs
27
Entity
5
Gui
75
Interaction
2
Inventory
4
Moderation
3
Permission
2
Player
9
Plugin
4
Storage
2
Teleport
3
Ui
22
Util
5
← Back to Patterns
java
command
Traitor Chat Command
/t command using AbstractAsyncCommand
Example Code
package dev.myplugin.example;
// import dev.myplugin.example.PlayerGameModeInfo; // Anonymized
// import dev.myplugin.example.PlayerRole; // Anonymized
// import dev.myplugin.example.MessageId; // Anonymized
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.server.core.Message;
import com.hypixel.hytale.server.core.command.system.CommandContext;
import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg;
import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
import com.hypixel.hytale.server.core.command.system.basecommands.AbstractAsyncCommand;
import com.hypixel.hytale.server.core.entity.entities.Player;
import com.hypixel.hytale.server.core.universe.PlayerRef;
import com.hypixel.hytale.server.core.universe.world.World;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import org.checkerframework.checker.nullness.compatqual.NonNullDecl;
import java.util.concurrent.CompletableFuture;
import static ar.ncode.plugin.ui.hud.PlayerCurrentRoleHud.TRAITOR_COLOR;
public class ExampleCommand extends AbstractAsyncCommand {
RequiredArg<String> message = this.withRequiredArg(
"message", MessageId.TRAITORS_CHAT_COMMAND_DESCRIPTION.get(),
ArgTypes.STRING
);
public ExampleCommand() {
super("t", "description");
}
@NonNullDecl
@Override
protected CompletableFuture<Void> executeAsync(@NonNullDecl CommandContext commandContext) {
return CompletableFuture.runAsync(() -> executeSync(commandContext));
}
protected void executeSync(@NonNullDecl CommandContext ctx) {
if (!ctx.isPlayer() || ctx.senderAsPlayerRef() == null) {
ctx.sendMessage(Message.raw("Command can only be used by players."));
return;
}
World world = ctx.senderAs(Player.class).getWorld();
Ref<EntityStore> ref = ctx.senderAsPlayerRef();
Player player = ctx.senderAs(Player.class);
world.execute(() -> {
PlayerGameModeInfo playerInfo = ref.getStore().getComponent(ref, PlayerGameModeInfo.componentType);
if (player == null || playerInfo == null) {
return;
}
if (!PlayerRole.TRAITOR.equals(playerInfo.getRole())) {
ctx.sendMessage(Message.translation(MessageId.TRAITORS_CHAT_ONLY_FOR_TRAITORS.get()));
return;
}
String chatMessage = ctx.get(this.message);
if (player.getWorld() == null) {
ctx.sendMessage(Message.translation(MessageId.TRAITORS_CHAT_ONLY_FOR_TRAITORS.get()));
return;
}
for (PlayerRef playerRef : player.getWorld().getPlayerRefs()) {
Ref<EntityStore> targetRef = playerRef.getReference();
if (targetRef == null || !targetRef.isValid()) {
continue;
}
PlayerGameModeInfo targetPlayerInfo = targetRef.getStore().getComponent(targetRef, PlayerGameModeInfo.componentType);
PlayerRef targetPlayerRef = targetRef.getStore().getComponent(targetRef, PlayerRef.getComponentType());
Player targetPlayer = targetRef.getStore().getComponent(targetRef, Player.getComponentType());
if (targetPlayerInfo == null || targetPlayerRef == null || targetPlayer == null ||
!PlayerRole.TRAITOR.equals(targetPlayerInfo.getCurrentRoundRole())) {
continue;
}
targetPlayerRef.sendMessage(
Message.join(
Message.translation(MessageId.TRAITORS_CHAT_PREFIX.get())
.color(TRAITOR_COLOR),
Message.raw(" - " + player.getDisplayName() + ": " + chatMessage)
)
);
}
});
}
}