Merge branch 'master' into 1.16

# Conflicts:
#	src/main/java/carpet/utils/Messenger.java
This commit is contained in:
gnembon committed 2020-04-28 19:40:46 -03:00
commit 5713d2bffc
4 files changed
+53 -31

No files matched your search

+13 -6
View File
@@ -2217,11 +2217,15 @@ It returns a `map` with a report indicating how many chunks were affected, and h
These functions help scan larger areas of blocks without using generic loop functions, like nested `loop`. These functions help scan larger areas of blocks without using generic loop functions, like nested `loop`.
### `scan(cx, cy, cz, dx, dy, dz, px?, py?, pz?, expr)` ### `scan(cx, cy, cz, dx, dy, dz, px?, py?, pz?, expr)`, `scan(center, range, lower_range?, expr)`
Evaluates expression over area of blocks defined by its center (`cx, cy, cz`), expanded in all directions Evaluates expression over area of blocks defined by its center `center = (cx, cy, cz)`, expanded in all directions
by `dx, dy, dz` blocks, or optionally in negative with `d` coords, and `p` coords in positive values. `expr` by `range = (dx, dy, dz)` blocks, or optionally in negative with `range` coords, and `upper_range` coords in
receives `_x, _y, _z` as coords of current analyzed block and `_`, which represents the block itself. positive values.
`center` can be defined either as a three coordinates, list of three coords, or block value.
`range` and `lower_range` can have the same representations, just if its a block, it computes the distance to the center
as range instead of taking the values as is.
`expr` receives `_x, _y, _z` as coords of current analyzed block and `_`, which represents the block itself.
Returns number of successful evaluations of `expr` (with `true` boolean result) unless called in void context, Returns number of successful evaluations of `expr` (with `true` boolean result) unless called in void context,
which would cause the expression not be evaluated for their boolean value. which would cause the expression not be evaluated for their boolean value.
@@ -2951,9 +2955,12 @@ scoreboard_add('counter')
scoreboard_add('lvl','level') scoreboard_add('lvl','level')
</pre> </pre>
### `scoreboard_remove(objective)` ### `scoreboard_remove(objective)` `scoreboard_remove(objective, key)`
Removes an objective. Returns `true` if objective has existed and has been removed. Removes an entire objective, or an entry in the scoreboard associated with the key.
Returns `true` if objective has existed and has been removed, or previous
value of the scoreboard if players score is removed. Returns `null` if objective didn't exist, or a key was missing
for the objective.
### `scoreboard_display(place, objective)` ### `scoreboard_display(place, objective)`
+5 -2
View File
@@ -17,9 +17,12 @@ scoreboard_add('counter')
scoreboard_add('lvl','level') scoreboard_add('lvl','level')
</pre> </pre>
### `scoreboard_remove(objective)` ### `scoreboard_remove(objective)` `scoreboard_remove(objective, key)`
Removes an objective. Returns `true` if objective has existed and has been removed. Removes an entire objective, or an entry in the scoreboard associated with the key.
Returns `true` if objective has existed and has been removed, or previous
value of the scoreboard if players score is removed. Returns `null` if objective didn't exist, or a key was missing
for the objective.
### `scoreboard_display(place, objective)` ### `scoreboard_display(place, objective)`
@@ -1295,6 +1295,26 @@ public class CarpetExpression
} }
private static String getScoreboardKeyFromValue(Value keyValue)
{
if (keyValue instanceof EntityValue)
{
Entity e = ((EntityValue) keyValue).getEntity();
if (e instanceof PlayerEntity)
{
return e.getName().getString();
}
else
{
return e.getUuidAsString();
}
}
else
{
return keyValue.getString();
}
}
private void API_Scoreboard() private void API_Scoreboard()
{ {
// scoreboard(player,'objective') // scoreboard(player,'objective')
@@ -1316,24 +1336,7 @@ public class CarpetExpression
Value ret = ListValue.wrap(scoreboard.getAllPlayerScores(objective).stream().map(s -> new StringValue(s.getPlayerName())).collect(Collectors.toList())); Value ret = ListValue.wrap(scoreboard.getAllPlayerScores(objective).stream().map(s -> new StringValue(s.getPlayerName())).collect(Collectors.toList()));
return (_c, _t) -> ret; return (_c, _t) -> ret;
} }
String key; String key = getScoreboardKeyFromValue(lv.get(1).evalValue(c));
Value keyValue = lv.get(1).evalValue(c);
if (keyValue instanceof EntityValue)
{
Entity e = ((EntityValue) keyValue).getEntity();
if (e instanceof PlayerEntity)
{
key = e.getDisplayName().getString();
}
else
{
key = e.getUuidAsString();
}
}
else
{
key = keyValue.getString();
}
if (!scoreboard.playerHasObjective(key, objective) && lv.size()==2) if (!scoreboard.playerHasObjective(key, objective) && lv.size()==2)
return LazyValue.NULL; return LazyValue.NULL;
ScoreboardPlayerScore scoreboardPlayerScore = scoreboard.getPlayerScore(key, objective); ScoreboardPlayerScore scoreboardPlayerScore = scoreboard.getPlayerScore(key, objective);
@@ -1345,15 +1348,24 @@ public class CarpetExpression
return (_c, _t) -> retval; return (_c, _t) -> retval;
}); });
this.expr.addLazyFunction("scoreboard_remove", 1, (c, t, lv)-> { this.expr.addLazyFunction("scoreboard_remove", -1, (c, t, lv)-> {
CarpetContext cc = (CarpetContext)c; CarpetContext cc = (CarpetContext)c;
Scoreboard scoreboard = cc.s.getMinecraftServer().getScoreboard(); Scoreboard scoreboard = cc.s.getMinecraftServer().getScoreboard();
String objectiveName = lv.get(0).evalValue(c).getString(); String objectiveName = lv.get(0).evalValue(c).getString();
ScoreboardObjective objective = scoreboard.getObjective(objectiveName); ScoreboardObjective objective = scoreboard.getObjective(objectiveName);
if (objective == null) if (objective == null)
return LazyValue.FALSE; return LazyValue.FALSE;
if (lv.size() == 0)
{
scoreboard.removeObjective(objective); scoreboard.removeObjective(objective);
return LazyValue.TRUE; return LazyValue.TRUE;
}
String key = getScoreboardKeyFromValue(lv.get(1).evalValue(c));
if (!scoreboard.playerHasObjective(key, objective)) return LazyValue.NULL;
ScoreboardPlayerScore scoreboardPlayerScore = scoreboard.getPlayerScore(key, objective);
Value previous = new NumericValue(scoreboardPlayerScore.getScore());
scoreboard.resetPlayerScore(key, objective);
return (c_, t_) -> previous;
}); });
// objective_add('lvl','level') // objective_add('lvl','level')
+4 -4
View File
@@ -3,7 +3,6 @@ package carpet.utils;
import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.entity.EntityCategory; import net.minecraft.entity.EntityCategory;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.text.*;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.util.Formatting; import net.minecraft.util.Formatting;
@@ -80,7 +79,7 @@ public class Messenger
} }
}; };
private static BaseText _applyStyleToTextComponent(BaseText comp, String style) public static Style parseStyle(String style)
{ {
Style myStyle= Style.EMPTY.withColor(Formatting.WHITE); Style myStyle= Style.EMPTY.withColor(Formatting.WHITE);
for (CarpetFormatting cf: CarpetFormatting.values()) for (CarpetFormatting cf: CarpetFormatting.values())
@@ -154,7 +153,8 @@ public class Messenger
return previous_message; return previous_message;
} }
BaseText txt = new LiteralText(str); BaseText txt = new LiteralText(str);
return _applyStyleToTextComponent(txt, desc); txt.setStyle(parseStyle(desc));
return txt;
} }
public static BaseText tp(String desc, Vec3d pos) { return tp(desc, pos.x, pos.y, pos.z); } public static BaseText tp(String desc, Vec3d pos) { return tp(desc, pos.x, pos.y, pos.z); }
public static BaseText tp(String desc, BlockPos pos) { return tp(desc, pos.getX(), pos.getY(), pos.getZ()); } public static BaseText tp(String desc, BlockPos pos) { return tp(desc, pos.getX(), pos.getY(), pos.getZ()); }
@@ -274,7 +274,7 @@ public class Messenger
public static BaseText s(String text, String style) public static BaseText s(String text, String style)
{ {
BaseText message = new LiteralText(text); BaseText message = new LiteralText(text);
_applyStyleToTextComponent(message, style); message.setStyle(parseStyle(style));
return message; return message;
} }