simplify code for print

This commit is contained in:
gnembon committed 2020-12-06 16:43:07 -04:00
1 parent 68560c7c5e
commit bbde2bb173
1 file changed
+20 -33
+20 -33
View File
@@ -468,43 +468,30 @@ public class Auxiliary {
{ {
if (lv.size() == 0 || lv.size() > 2) throw new InternalExpressionException("'print' takes one or two arguments"); if (lv.size() == 0 || lv.size() > 2) throw new InternalExpressionException("'print' takes one or two arguments");
ServerCommandSource s = ((CarpetContext)c).s; ServerCommandSource s = ((CarpetContext)c).s;
MinecraftServer server = s.getMinecraftServer();
Value res = lv.get(0).evalValue(c); Value res = lv.get(0).evalValue(c);
Value playersVal = Value.NULL; List<ServerPlayerEntity> targets = null;
if (lv.size() == 2){ if (lv.size() == 2)
playersVal = res; {
List<Value> playerValues = (res instanceof ListValue)?((ListValue) res).getItems():Collections.singletonList(res);
List<ServerPlayerEntity> playerTargets = new ArrayList<>();
playerValues.forEach(pv -> {
ServerPlayerEntity player = EntityValue.getPlayerByValue(server, pv);
if (player == null) throw new InternalExpressionException("Cannot target player "+pv.getString()+" in print");
playerTargets.add(player);
});
targets = playerTargets;
res = lv.get(1).evalValue(c); res = lv.get(1).evalValue(c);
} }
Text message = (res instanceof FormattedTextValue)?((FormattedTextValue) res).getText():new LiteralText(res.getString());
if(playersVal instanceof ListValue){ if (targets == null)
{
List<Value> players = ((ListValue) playersVal).getItems(); s.sendFeedback(message, false);
for(Value playerVal:players){ }
ServerPlayerEntity player = EntityValue.getPlayerByValue(s.getMinecraftServer(), playerVal); else
if (player == null) return LazyValue.NULL; {
if(res instanceof FormattedTextValue) targets.forEach(p -> p.getCommandSource().sendFeedback(message, false));
player.getCommandSource().sendFeedback(((FormattedTextValue) res).getText(), false);
else
Messenger.m(player, "w "+res.getString());
}
} else if(playersVal instanceof EntityValue){
ServerPlayerEntity player = EntityValue.getPlayerByValue(s.getMinecraftServer(), playersVal);
if (player == null) return LazyValue.NULL;
if(res instanceof FormattedTextValue)
player.getCommandSource().sendFeedback(((FormattedTextValue) res).getText(), false);
else
Messenger.m(player, "w "+res.getString());
} else {
if (res instanceof FormattedTextValue)
s.sendFeedback(((FormattedTextValue) res).getText(), false);
else
Messenger.m(s, "w " + res.getString());
} }
Value finalRes = res; Value finalRes = res;
return (_c, _t) -> finalRes; // pass through for variables return (_c, _t) -> finalRes; // pass through for variables
}); });