package me.km.overrides; import com.mojang.authlib.GameProfile; import java.util.HashMap; import me.hammerle.snuviscript.code.ISnuviScheduler; import me.km.Server; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.play.server.SPlayerListItemPacket; import net.minecraft.server.MinecraftServer; import net.minecraft.server.management.PlayerInteractionManager; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; import net.minecraft.world.server.ServerWorld; public class ModEntityPlayerMP extends ServerPlayerEntity { private final PlayerScoreboard board; private int id = -1; private final HashMap timedData; private final HashMap data; private StringTextComponent tabDisplayName = null; private boolean isIterating = false; public ModEntityPlayerMP(MinecraftServer ms, ServerWorld w, GameProfile gp, PlayerInteractionManager pim) { super(ms, w, gp, pim); this.board = new PlayerScoreboard(); this.timedData = new HashMap(); this.data = new HashMap(); } public PlayerScoreboard getScoreboard() { return board; } public ModEntityPlayerMP(MinecraftServer ms, ServerWorld w, GameProfile gp, PlayerInteractionManager pim, ModEntityPlayerMP old) { super(ms, w, gp, pim); this.board = old.board; this.timedData = old.timedData; this.data = old.data; this.id = old.id; } @Override public void tick() { super.tick(); board.update(this); tickData(); } public void setTabListDisplayName(String name) { tabDisplayName = new StringTextComponent(name); server.getPlayerList().sendPacketToAllPlayers( new SPlayerListItemPacket(SPlayerListItemPacket.Action.UPDATE_DISPLAY_NAME, this)); } @Override public ITextComponent getTabListDisplayName() { return tabDisplayName; } public void setId(int id) { this.id = id; } public int getId() { return id; } private void tickData() { isIterating = true; timedData.entrySet().removeIf(entry -> { int time = entry.getValue() - 1; if(time <= 0) { if(time == 0) { Server.scriptEvents.onPlayerDataTick(this, entry.getKey()); } return true; } entry.setValue(time); return false; }); isIterating = false; } public void setVar(String varname, Object value) { data.put(varname, value); } public Object getVar(String varname) { return data.get(varname); } public void setTimer(String varname, int time, ISnuviScheduler scheduler) { if(isIterating) { scheduler.scheduleTask(() -> timedData.put(varname, time)); } else { timedData.put(varname, time); } } public int getTimer(String varname) { return timedData.getOrDefault(varname, -1); } public void clearData(ISnuviScheduler scheduler) { if(isIterating) { scheduler.scheduleTask(() -> timedData.clear()); } else { timedData.clear(); } data.clear(); } @Override protected int getPermissionLevel() { return 999; } }