This commit is contained in:
gnembon committed 2021-04-19 03:48:37 -03:00
1 parent 1819694d19
commit fa3505763e
3 files changed
+28 -15

No files matched your search

+1 -1
View File
@@ -112,7 +112,7 @@ public class CarpetServer implements ClientModInitializer,DedicatedServerModInit
public static void tick(MinecraftServer server) public static void tick(MinecraftServer server)
{ {
TickSpeed.tick(); TickSpeed.tick();
HUDController.update_hud(server, false); HUDController.update_hud(server, null);
scriptServer.tick(); scriptServer.tick();
//in case something happens //in case something happens
@@ -19,10 +19,13 @@ import net.minecraft.world.World;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
public class HUDController public class HUDController
@@ -38,18 +41,18 @@ public class HUDController
HUDListeners.add(listener); HUDListeners.add(listener);
} }
public static Map<PlayerEntity, List<BaseText>> player_huds = new HashMap<>(); public static Map<ServerPlayerEntity, List<BaseText>> player_huds = new HashMap<>();
public static final Map<PlayerEntity, BaseText> scarpet_headers = new HashMap<>(); public static final Map<ServerPlayerEntity, BaseText> scarpet_headers = new HashMap<>();
public static final Map<PlayerEntity, BaseText> scarpet_footers = new HashMap<>(); public static final Map<ServerPlayerEntity, BaseText> scarpet_footers = new HashMap<>();
public static void resetScarpetHUDs() { public static void resetScarpetHUDs() {
scarpet_headers.clear(); scarpet_headers.clear();
scarpet_footers.clear(); scarpet_footers.clear();
} }
public static void addMessage(PlayerEntity player, BaseText hudMessage) public static void addMessage(ServerPlayerEntity player, BaseText hudMessage)
{ {
if (!player_huds.containsKey(player)) if (!player_huds.containsKey(player))
{ {
@@ -70,9 +73,9 @@ public class HUDController
} }
public static void update_hud(MinecraftServer server, boolean force) public static void update_hud(MinecraftServer server, List<ServerPlayerEntity> force)
{ {
if ((server.getTicks() % 20 != 0 && !force) || CarpetServer.minecraft_server == null) if (((server.getTicks() % 20 != 0) && force == null) || CarpetServer.minecraft_server == null)
return; return;
player_huds.clear(); player_huds.clear();
@@ -109,12 +112,14 @@ public class HUDController
// extensions have time to pitch in. // extensions have time to pitch in.
HUDListeners.forEach(l -> l.accept(server)); HUDListeners.forEach(l -> l.accept(server));
for (PlayerEntity player: player_huds.keySet()) Set<ServerPlayerEntity> targets = new HashSet<>(player_huds.keySet());
if (force!= null) targets.addAll(force);
for (ServerPlayerEntity player: targets)
{ {
PlayerListHeaderS2CPacket packet = new PlayerListHeaderS2CPacket(); PlayerListHeaderS2CPacket packet = new PlayerListHeaderS2CPacket();
((PlayerListHeaderS2CPacketMixin)packet).setHeader(scarpet_headers.getOrDefault(player, new LiteralText(""))); ((PlayerListHeaderS2CPacketMixin)packet).setHeader(scarpet_headers.getOrDefault(player, new LiteralText("")));
((PlayerListHeaderS2CPacketMixin)packet).setFooter(Messenger.c(player_huds.get(player).toArray(new Object[0]))); ((PlayerListHeaderS2CPacketMixin)packet).setFooter(Messenger.c(player_huds.getOrDefault(player, Collections.emptyList()).toArray(new Object[0])));
((ServerPlayerEntity)player).networkHandler.sendPacket(packet); player.networkHandler.sendPacket(packet);
} }
} }
private static BaseText [] send_tps_display(MinecraftServer server) private static BaseText [] send_tps_display(MinecraftServer server)
+13 -5
View File
@@ -571,35 +571,43 @@ public class Auxiliary {
if (action != Action.CLEAR && lv.size() < 3) if (action != Action.CLEAR && lv.size() < 3)
throw new InternalExpressionException("Third argument of 'display_title' must be present except for 'clear' type"); throw new InternalExpressionException("Third argument of 'display_title' must be present except for 'clear' type");
Text title; Text title;
boolean soundsTrue = false;
if (lv.size() > 2) if (lv.size() > 2)
{ {
pVal = lv.get(2).evalValue(c); pVal = lv.get(2).evalValue(c);
if (pVal instanceof FormattedTextValue) if (pVal instanceof FormattedTextValue)
{
title = ((FormattedTextValue) pVal).getText(); title = ((FormattedTextValue) pVal).getText();
soundsTrue = !title.asString().isEmpty();
}
else else
{
title = new LiteralText(pVal.getString()); title = new LiteralText(pVal.getString());
soundsTrue = pVal.getBoolean();
}
} }
else title = null; // Will never happen, just to make lambda happy else title = null; // Will never happen, just to make lambda happy
if (action == null) if (action == null)
{ {
Map<PlayerEntity, BaseText> map; Map<ServerPlayerEntity, BaseText> map;
if (actionString.equals("player_list_header")) if (actionString.equals("player_list_header"))
map = HUDController.scarpet_headers; map = HUDController.scarpet_headers;
else else
map = HUDController.scarpet_footers; map = HUDController.scarpet_footers;
AtomicInteger total = new AtomicInteger(0); AtomicInteger total = new AtomicInteger(0);
if (!lv.get(2).evalValue(c).getBoolean()) // null or empty string List<ServerPlayerEntity> targetList = targets.collect(Collectors.toList());
targets.forEach(target -> { if (!soundsTrue) // null or empty string
targetList.forEach(target -> {
map.remove(target); map.remove(target);
total.getAndIncrement(); total.getAndIncrement();
}); });
else else
targets.forEach(target -> { targetList.forEach(target -> {
map.put(target, (BaseText) title); map.put(target, (BaseText) title);
total.getAndIncrement(); total.getAndIncrement();
}); });
HUDController.update_hud(((CarpetContext)c).s.getMinecraftServer(), true); HUDController.update_hud(((CarpetContext)c).s.getMinecraftServer(), targetList);
Value ret = NumericValue.of(total.get()); Value ret = NumericValue.of(total.get());
return (cc, tt) -> ret; return (cc, tt) -> ret;
} }