Skip to content

Commit

Permalink
improve server, player chat message sending
Browse files Browse the repository at this point in the history
  • Loading branch information
insanj committed Apr 8, 2019
1 parent ac9ad21 commit 748ecdf
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 70 deletions.
136 changes: 71 additions & 65 deletions plugin/src/main/java/com/insanj/pride/PrideCommandExecutor.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@
import net.minecraft.world.BlockView;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.client.network.packet.PlayerSpawnPositionS2CPacket;
import net.minecraft.text.Style;
import net.minecraft.text.TextComponent;
import net.minecraft.text.TextFormat;
import net.minecraft.text.TranslatableTextComponent;

import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType;
Expand All @@ -82,94 +86,96 @@ public void register() {
private void registerPrideCommand() {
CommandRegistry.INSTANCE.register(false, serverCommandSourceCommandDispatcher -> serverCommandSourceCommandDispatcher.register(
ServerCommandManager.literal("pride")
.executes(context -> {
ServerWorld world = context.getSource().getWorld();
PridePersistentState persis = PridePersistentState.get(world);
String messageString = "";

Map<String, Map<String, Double>> prideAreas = persis.getPrideAreas(world);
if (prideAreas == null || prideAreas.size() <= 0) {
messageString = "No Pride areas found in this world.";
}

else {
for (String areaName: prideAreas.keySet()) {
Map<String, Double> prideArea = prideAreas.get(areaName);
messageString += areaName + " " + prideArea.toString();
}
.executes(context -> {
ServerWorld world = context.getSource().getWorld();
PridePersistentState persis = PridePersistentState.get(world);
String messageString = "";

Map<String, Map<String, Double>> prideAreas = persis.getPrideAreas(world);
if (prideAreas == null || prideAreas.size() <= 0) {
messageString = "No Pride areas found in this world.";
}

else {
for (String areaName: prideAreas.keySet()) {
Map<String, Double> prideArea = prideAreas.get(areaName);
messageString += areaName + " " + prideArea.toString();
}
}

StringTextComponent message = new StringTextComponent(messageString);
context.getSource().getPlayer().addChatMessage(message, false);
return 1;
})
StringTextComponent message = new StringTextComponent(messageString);
context.getSource().getPlayer().addChatMessage(message, false);
return 1;
})
));
}

private void registerSettleCommand() {
CommandRegistry.INSTANCE.register(false, serverCommandSourceCommandDispatcher -> serverCommandSourceCommandDispatcher.register(
ServerCommandManager.literal("settle")
.then(ServerCommandManager.argument("name", StringArgumentType.string())
.executes(context -> {
ServerWorld world = context.getSource().getWorld();
String areaName = StringArgumentType.getString(context, "name");

BlockPos pos = context.getSource().getPlayer().getBlockPos();
Map<String, Double> area = new HashMap();
area.put("x", new Double(pos.getX()));
area.put("y", new Double(pos.getY()));
area.put("z", new Double(pos.getZ()));

PridePersistentState persis = PridePersistentState.get(world);
persis.setPrideArea(world, areaName, area);

StringTextComponent message = new StringTextComponent("Founded " + areaName + "!");
context.getSource().getPlayer().addChatMessage(message, false);
return 1;
}))
.then(ServerCommandManager.argument("name", StringArgumentType.greedyString())
.executes(context -> {
ServerWorld world = context.getSource().getWorld();
String areaName = StringArgumentType.getString(context, "name");

BlockPos pos = context.getSource().getPlayer().getBlockPos();
Map<String, Double> area = new HashMap();
area.put("x", new Double(pos.getX()));
area.put("y", new Double(pos.getY()));
area.put("z", new Double(pos.getZ()));

PridePersistentState persis = PridePersistentState.get(world);
persis.setPrideArea(world, areaName, area);

StringTextComponent message = new StringTextComponent("Founded " + areaName + "!");
message.setStyle(new Style().setColor(TextFormat.GREEN));
context.getSource().getPlayer().addChatMessage(message, false);
return 1;
}))
));
}

private void registerAbandonCommand() {
CommandRegistry.INSTANCE.register(false, serverCommandSourceCommandDispatcher -> serverCommandSourceCommandDispatcher.register(
ServerCommandManager.literal("abandon")
.then(ServerCommandManager.argument("name", StringArgumentType.string())
.executes(context -> {
ServerWorld world = context.getSource().getWorld();
String areaName = StringArgumentType.getString(context, "name");

PridePersistentState persis = PridePersistentState.get(world);
persis.removePrideArea(world, areaName);

StringTextComponent message = new StringTextComponent("Removed " + areaName + "!");
context.getSource().getPlayer().addChatMessage(message, false);
return 1;
}))
));
}


private void registerCompassCommand() {
CommandRegistry.INSTANCE.register(false, serverCommandSourceCommandDispatcher -> serverCommandSourceCommandDispatcher.register(
ServerCommandManager.literal("compass")
.then(ServerCommandManager.argument("name", StringArgumentType.string())
.then(ServerCommandManager.argument("name", StringArgumentType.greedyString())
.executes(context -> {
// translate the area name given in the command to the x/y/z coordinates for the pride area
ServerWorld world = context.getSource().getWorld();
String areaName = StringArgumentType.getString(context, "name");

PridePersistentState persis = PridePersistentState.get(world);
Map<String, Double> area = persis.getPrideArea(world, areaName);
BlockPos pos = new BlockPos((double)area.get("x"), (double)area.get("y"), (double)area.get("z"));

ServerPlayerEntity player = context.getSource().getPlayer();
PlayerSpawnPositionS2CPacket packet = new PlayerSpawnPositionS2CPacket(pos);
player.networkHandler.sendPacket(packet);
persis.removePrideArea(world, areaName);

StringTextComponent message = new StringTextComponent("Compass pointed towards " + areaName + "!");
StringTextComponent message = new StringTextComponent("Removed " + areaName + "!");
message.setStyle(new Style().setColor(TextFormat.GREEN));
context.getSource().getPlayer().addChatMessage(message, false);
return 1;
}))
));
}

private void registerCompassCommand() {
CommandRegistry.INSTANCE.register(false, serverCommandSourceCommandDispatcher -> serverCommandSourceCommandDispatcher.register(
ServerCommandManager.literal("compass")
.then(ServerCommandManager.argument("name", StringArgumentType.greedyString())
.executes(context -> {
// translate the area name given in the command to the x/y/z coordinates for the pride area
ServerWorld world = context.getSource().getWorld();
String areaName = StringArgumentType.getString(context, "name");

PridePersistentState persis = PridePersistentState.get(world);
Map<String, Double> area = persis.getPrideArea(world, areaName);
BlockPos pos = new BlockPos((double)area.get("x"), (double)area.get("y"), (double)area.get("z"));

ServerPlayerEntity player = context.getSource().getPlayer();
PlayerSpawnPositionS2CPacket packet = new PlayerSpawnPositionS2CPacket(pos);
player.networkHandler.sendPacket(packet);

StringTextComponent message = new StringTextComponent("Compass pointed towards " + areaName + "!");
message.setStyle(new Style().setColor(TextFormat.GREEN));
context.getSource().getPlayer().addChatMessage(message, false);
return 1;
}))
));
}
}
32 changes: 27 additions & 5 deletions plugin/src/main/java/com/insanj/pride/PrideEntityTracker.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@
import net.minecraft.entity.EntitySize;
import net.minecraft.entity.EntityType;
import net.minecraft.world.World;
import net.minecraft.text.Style;
import net.minecraft.text.TextComponent;
import net.minecraft.text.TextFormat;
import net.minecraft.text.TranslatableTextComponent;

import com.mojang.brigadier.arguments.IntegerArgumentType;
import com.mojang.brigadier.arguments.StringArgumentType;
Expand Down Expand Up @@ -82,7 +86,7 @@ public void register() {
// loop through all players active on server
for (ServerPlayerEntity player : entities) {
ServerWorld world = player.getServerWorld();
calculateActivatedPrideAreasForPlayer(world, player);
calculateActivatedPrideAreasForPlayer(server, world, player);
}

// reset bottleneck counter at end of execution/for loop
Expand All @@ -91,7 +95,7 @@ public void register() {
}

// async/thread-based function to run calculations for pride areas off main
public void calculateActivatedPrideAreasForPlayer(ServerWorld world, ServerPlayerEntity player) {
public void calculateActivatedPrideAreasForPlayer(MinecraftServer server, ServerWorld world, ServerPlayerEntity player) {
PrideEntityTracker tracker = this;
new Thread(new Runnable() {
public void run() {
Expand Down Expand Up @@ -123,7 +127,9 @@ public void run() {
playerActivatedAreas.add(areaName);

tracker.currentlyActivatedAreas.put(playerName, playerActivatedAreas);
player.addChatMessage(new StringTextComponent(String.format("%s activated %s!", playerName, areaName)), false);

sendServerMessage(server, String.format("%s is entering %s!", playerName, areaName));
sendPlayerMessage(player, String.format("Welcome to the\n%s", areaName));
}

// activate!
Expand All @@ -132,7 +138,9 @@ else if (tracker.currentlyActivatedAreas.get(playerName).contains(areaName) == f
playerActivatedAreas.add(areaName);

tracker.currentlyActivatedAreas.put(playerName, playerActivatedAreas);
player.addChatMessage(new StringTextComponent(String.format("%s activated %s!", playerName, areaName)), false);

sendServerMessage(server, String.format("%s is entering %s!", playerName, areaName));
sendPlayerMessage(player, String.format("Welcome to the\n%s", areaName));
}
}

Expand All @@ -146,6 +154,20 @@ else if (tracker.currentlyActivatedAreas.get(playerName).contains(areaName) == f
}
}
}
}).start();

private void sendPlayerMessage(ServerPlayerEntity player, String message) {
player.addChatMessage(new StringTextComponent(message), true);
}

private void sendServerMessage(MinecraftServer server, String message) {
StringTextComponent component = new StringTextComponent(message);
component.setStyle(new Style().setColor(TextFormat.BLUE));

Set<ServerPlayerEntity> players = (Set<ServerPlayerEntity>)PlayerStream.all(server).collect(Collectors.toSet());
for (ServerPlayerEntity player : players) {
player.addChatMessage(component, false);
}
}
}).start();
}
}

0 comments on commit 748ecdf

Please sign in to comment.