various fixes and improvements

This commit is contained in:
Sen 2025-06-05 16:18:09 +02:00
parent fefdcc3612
commit a9b113a436
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
6 changed files with 92 additions and 34 deletions

View file

@ -493,6 +493,8 @@ public class Proxy {
this.register(new CommandRevoke());
this.register(new CommandRegister());
this.register(new CommandDelete());
this.register(new CommandList());
this.register(new CommandPing());
}
public Map<String, Command> getCommands() {

View file

@ -0,0 +1,23 @@
package proxy.command;
import proxy.Proxy;
import proxy.handler.ProxyHandler;
import proxy.util.Formatter;
public class CommandList extends Command {
public String getName() {
return "list";
}
public String getHelp() {
return "Displays a list of online players";
}
public void run(Proxy proxy, ProxyHandler player, String[] args) {
int cnt = proxy.getPlayers().size();
for(ProxyHandler plr : proxy.getPlayers()) {
sendMessage(player, (plr.isAdmin() ? Formatter.GOLD : Formatter.GREEN) + plr.getUsername());
}
sendMessage(player, (cnt == 0 ? Formatter.GRAY + "No players are" : Formatter.DARK_GREEN + (cnt == 1 ? "1 player is" : "%d players are")) + " online", cnt);
}
}

View file

@ -0,0 +1,33 @@
package proxy.command;
import proxy.Proxy;
import proxy.handler.ProxyHandler;
public class CommandPing extends Command {
public String getName() {
return "ping";
}
public String getHelp() {
return "Display a players latency";
}
public String getArgs() {
return "<player>";
}
public void run(Proxy proxy, ProxyHandler player, String[] args) {
if(player == null && args.length < 1)
throw new RunException("Please provide a player name");
ProxyHandler plr = args.length < 1 ? player : proxy.getPlayer(args[0]);
if(plr == null)
throw new RunException("'%s' is not online", args[0]);
if(player != null && plr != player && !player.isAdmin())
throw new RunException("You are not allowed to query the latency of another player");
sendInfo(player, (plr == player ? "Your latency" : "Latency of %s") + ": %d ms", plr == player ? plr.getPing() : plr.getUsername(), plr.getPing());
}
public Iterable<String> complete(Proxy proxy, ProxyHandler player, String[] args) {
return args.length == 1 && (player == null || player.isAdmin()) ? proxy.getPlayerNames() : null;
}
}

View file

@ -83,6 +83,7 @@ public class ProxyHandler extends User implements Handler {
private int realId = -1;
private int prevMode = -1;
private int mode = 0;
private byte modelFlags = 0x7f;
private static boolean isAllowedChar(char ch) {
return ch != 167 && ch >= 32 && ch != 127;
@ -147,11 +148,11 @@ public class ProxyHandler extends User implements Handler {
}
public void sendMessage(String message) {
this.sendToClient(new S02PacketChat(message, (byte)0));
this.sendToClient(new S02PacketChat(message, false));
}
public void sendMessage(String fmt, Object... args) {
this.sendToClient(new S02PacketChat(String.format(fmt, args), (byte)0));
this.sendToClient(new S02PacketChat(String.format(fmt, args), false));
}
public void update(Connection connection) {
@ -423,9 +424,7 @@ public class ProxyHandler extends User implements Handler {
}
else {
msg = String.format(Formatter.BLUE + "%s" + Formatter.DARK_GRAY + ": " + Formatter.GRAY + "%s", this.username, packetIn.getMessage());
for(ProxyHandler player : this.proxy.getPlayers()) {
player.sendToClient(new S02PacketChat(msg, (byte)1));
}
this.proxy.sendPacket(new S02PacketChat(msg, false));
Log.info(Formatter.strip(msg));
}
}
@ -450,7 +449,8 @@ public class ProxyHandler extends User implements Handler {
if(this.completion.indexOf(' ') == -1) {
list = this.completion.indexOf(':') != -1 ? Lists.newArrayList() : Lists.newArrayList(packetIn.getMatches());
for(Iterator<String> iter = list.iterator(); iter.hasNext();) {
if(iter.next().indexOf(':') != -1)
String cmd = iter.next();
if(cmd.isEmpty() || cmd.indexOf(':') != -1 || this.proxy.getCommands().containsKey(cmd.substring(1).toLowerCase(Locale.US)))
iter.remove();
}
if(this.admin) {
@ -548,6 +548,7 @@ public class ProxyHandler extends User implements Handler {
public void processClientSettings(C15PacketClientSettings packetIn) {
if(this.connected)
this.sendToServer(packetIn);
this.modelFlags = packetIn.getModelFlags();
}
public void processCreativeInventoryAction(C10PacketCreativeInventoryAction packetIn) {
@ -678,6 +679,7 @@ public class ProxyHandler extends User implements Handler {
this.mode = packetIn.getGameType();
this.sendToClient(new S07PacketRespawn(packetIn));
// this.sendToClient(new S2EPacketCloseWindow());
this.sendToServer(new C15PacketClientSettings(this.modelFlags));
}
public void handleSetCompressionLevel(S46PacketSetCompressionLevel packetIn) {

View file

@ -8,41 +8,39 @@ import proxy.network.PacketBuffer;
public class C15PacketClientSettings implements Packet<ProxyHandler>
{
private String lang;
private int view;
private byte chatVisibility;
private boolean enableColors;
private int modelPartFlags;
/**
* Reads the raw packet data from the data stream.
*/
public void readPacketData(PacketBuffer buf) throws IOException
{
this.lang = buf.readStringFromBuffer(7);
this.view = buf.readByte();
this.chatVisibility = buf.readByte();
this.enableColors = buf.readBoolean();
this.modelPartFlags = buf.readUnsignedByte();
private byte modelPartFlags;
public C15PacketClientSettings() {
}
public C15PacketClientSettings(byte modelFlags) {
this.modelPartFlags = modelFlags;
}
public void readPacketData(PacketBuffer buf) throws IOException
{
buf.readStringFromBuffer(7);
buf.readByte();
buf.readByte();
buf.readBoolean();
this.modelPartFlags = (byte)buf.readUnsignedByte();
}
/**
* Writes the raw packet data to the data stream.
*/
public void writePacketData(PacketBuffer buf) throws IOException
{
buf.writeString(this.lang);
buf.writeByte(this.view);
buf.writeByte(this.chatVisibility);
buf.writeBoolean(this.enableColors);
buf.writeString("en_US");
buf.writeByte(16);
buf.writeByte(0);
buf.writeBoolean(true);
buf.writeByte(this.modelPartFlags);
}
/**
* Passes this Packet on to the NetHandler for processing.
*/
public void processPacket(ProxyHandler handler)
{
handler.processClientSettings(this);
}
public byte getModelFlags() {
return this.modelPartFlags;
}
}

View file

@ -16,10 +16,10 @@ public class S02PacketChat implements Packet<ProxyHandler>
{
}
public S02PacketChat(String message, byte type)
public S02PacketChat(String message, boolean hotbar)
{
this.chatComponent = Formatter.toJsonString(message);
this.type = type;
this.type = (byte)(hotbar ? 2 : 0);
}
/**