Fixed invisible players for joining players by sending custom packets
This commit is contained in:
parent
440d4f1b48
commit
8b47eb1139
13
build.gradle
13
build.gradle
@ -28,16 +28,23 @@ repositories {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
java {
|
||||||
|
toolchain {
|
||||||
|
languageVersion = JavaLanguageVersion.of(17)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
|
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
|
||||||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
|
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
|
||||||
|
|
||||||
//https://jitpack.io/#Minestom/Minestom
|
//https://jitpack.io/#Minestom/Minestom
|
||||||
implementation 'com.github.waxeria:Minestom:e0427a36f3'
|
// implementation 'com.github.Minestom:Minestom:c496ee357'
|
||||||
|
// implementation 'com.github.waxeria:Minestom:e0427a36f3'
|
||||||
|
|
||||||
// implementation 'dev.hollowcube:minestom-ce:5bcc72b911'
|
// implementation 'dev.hollowcube:minestom-ce:5bcc72b911'
|
||||||
// implementation 'dev.hollowcube:minestom-ce:e146a9393e'
|
implementation 'dev.hollowcube:minestom-ce:8715f4305d'
|
||||||
// implementation 'dev.hollowcube:minestom-ce-extensions:1.2.0'
|
implementation 'dev.hollowcube:minestom-ce-extensions:1.2.0'
|
||||||
|
|
||||||
|
|
||||||
//Tools
|
//Tools
|
||||||
|
@ -64,7 +64,6 @@ public class Main {
|
|||||||
|
|
||||||
if(globalConfig.node("velocity", "enabled").getBoolean()) {
|
if(globalConfig.node("velocity", "enabled").getBoolean()) {
|
||||||
VelocityProxy.enable(Objects.requireNonNull(globalConfig.node("velocity", "secret").getString()));
|
VelocityProxy.enable(Objects.requireNonNull(globalConfig.node("velocity", "secret").getString()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
server.start("0.0.0.0", serverConfig.node("port").getInt(25565));
|
server.start("0.0.0.0", serverConfig.node("port").getInt(25565));
|
||||||
|
@ -5,6 +5,7 @@ import eu.mhsl.minenet.minigames.message.Icon;
|
|||||||
import eu.mhsl.minenet.minigames.message.type.ActionBarMessage;
|
import eu.mhsl.minenet.minigames.message.type.ActionBarMessage;
|
||||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||||
import eu.mhsl.minenet.minigames.message.type.TitleMessage;
|
import eu.mhsl.minenet.minigames.message.type.TitleMessage;
|
||||||
|
import eu.mhsl.minenet.minigames.util.PacketUtil;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -35,6 +36,8 @@ public class DebugCommand extends PrivilegedCommand {
|
|||||||
.appendTranslated("score#thanks")
|
.appendTranslated("score#thanks")
|
||||||
.send(sender);
|
.send(sender);
|
||||||
|
|
||||||
|
PacketUtil.resendPlayerList(((Player) sender));
|
||||||
|
|
||||||
new ChatMessage(Icon.SCIENCE).appendStatic(((Player) sender).getUuid().toString()).send(sender);
|
new ChatMessage(Icon.SCIENCE).appendStatic(((Player) sender).getUuid().toString()).send(sender);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
package eu.mhsl.minenet.minigames.handler.global;
|
package eu.mhsl.minenet.minigames.handler.global;
|
||||||
|
|
||||||
import eu.mhsl.minenet.minigames.message.type.ActionBarMessage;
|
import eu.mhsl.minenet.minigames.instance.Spawnable;
|
||||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
import eu.mhsl.minenet.minigames.util.PacketUtil;
|
||||||
import eu.mhsl.minenet.minigames.message.Icon;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import net.minestom.server.MinecraftServer;
|
import net.minestom.server.MinecraftServer;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.event.EventListener;
|
import net.minestom.server.event.EventListener;
|
||||||
@ -25,6 +22,12 @@ public class AddEntityToInstanceEventListener implements EventListener<AddEntity
|
|||||||
if(event.getEntity() instanceof Player p) {
|
if(event.getEntity() instanceof Player p) {
|
||||||
MinecraftServer.getSchedulerManager().scheduleNextTick(p::refreshCommands, ExecutionType.ASYNC);
|
MinecraftServer.getSchedulerManager().scheduleNextTick(p::refreshCommands, ExecutionType.ASYNC);
|
||||||
|
|
||||||
|
if(event.getInstance() instanceof Spawnable instance) {
|
||||||
|
p.setRespawnPoint(instance.getSpawn());
|
||||||
|
}
|
||||||
|
|
||||||
|
PacketUtil.resendPlayerList(p);
|
||||||
|
|
||||||
p.addEffect(new Potion(PotionEffect.BLINDNESS, (byte) 1, 20)); //TODO Uncomment, currently buggy causes disconnect see https://github.com/Minestom/Minestom/discussions/1302
|
p.addEffect(new Potion(PotionEffect.BLINDNESS, (byte) 1, 20)); //TODO Uncomment, currently buggy causes disconnect see https://github.com/Minestom/Minestom/discussions/1302
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,12 +2,12 @@ package eu.mhsl.minenet.minigames.handler.global;
|
|||||||
|
|
||||||
import eu.mhsl.minenet.minigames.Main;
|
import eu.mhsl.minenet.minigames.Main;
|
||||||
import eu.mhsl.minenet.minigames.api.QueuedPlayerRooms;
|
import eu.mhsl.minenet.minigames.api.QueuedPlayerRooms;
|
||||||
import eu.mhsl.minenet.minigames.instance.MineNetInstance;
|
|
||||||
import eu.mhsl.minenet.minigames.instance.room.Room;
|
import eu.mhsl.minenet.minigames.instance.room.Room;
|
||||||
import eu.mhsl.minenet.minigames.instance.transfer.Transfer;
|
import eu.mhsl.minenet.minigames.instance.transfer.Transfer;
|
||||||
import eu.mhsl.minenet.minigames.message.Icon;
|
import eu.mhsl.minenet.minigames.message.Icon;
|
||||||
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
import eu.mhsl.minenet.minigames.message.type.ChatMessage;
|
||||||
import eu.mhsl.minenet.minigames.skin.SkinCache;
|
import eu.mhsl.minenet.minigames.skin.SkinCache;
|
||||||
|
import eu.mhsl.minenet.minigames.util.MoveInstance;
|
||||||
import net.minestom.server.MinecraftServer;
|
import net.minestom.server.MinecraftServer;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.event.EventListener;
|
import net.minestom.server.event.EventListener;
|
||||||
@ -32,23 +32,25 @@ public class PlayerLoginHandler implements EventListener<PlayerLoginEvent> {
|
|||||||
public @NotNull Result run(@NotNull PlayerLoginEvent event) {
|
public @NotNull Result run(@NotNull PlayerLoginEvent event) {
|
||||||
Player p = event.getPlayer();
|
Player p = event.getPlayer();
|
||||||
|
|
||||||
UUID pushQueue = QueuedPlayerRooms.pullQueue(event.getPlayer().getUuid());
|
Transfer transferInstance = new Transfer();
|
||||||
if(pushQueue != null) {
|
p.setRespawnPoint(transferInstance.getSpawn());
|
||||||
Room target = Room.getRoom(pushQueue).orElseThrow();
|
event.setSpawningInstance(transferInstance);
|
||||||
Transfer transferInstance = new Transfer();
|
|
||||||
p.setRespawnPoint(transferInstance.getSpawn());
|
|
||||||
event.setSpawningInstance(transferInstance);
|
|
||||||
MinecraftServer.getSchedulerManager().scheduleTask(
|
|
||||||
() -> Room.setRoom(p, target),
|
|
||||||
TaskSchedule.seconds(1),
|
|
||||||
TaskSchedule.stop()
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
p.setRespawnPoint(Hub.INSTANCE.getSpawn());
|
|
||||||
event.setSpawningInstance(Hub.INSTANCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// SkinCache.applySkin(p);
|
UUID pushQueue = QueuedPlayerRooms.pullQueue(event.getPlayer().getUuid());
|
||||||
|
|
||||||
|
MinecraftServer.getSchedulerManager().scheduleTask(
|
||||||
|
() -> {
|
||||||
|
if(pushQueue != null) {
|
||||||
|
Room.setRoom(p, Room.getRoom(pushQueue).orElseThrow());
|
||||||
|
} else {
|
||||||
|
MoveInstance.move(p, Hub.INSTANCE);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
TaskSchedule.seconds(5),
|
||||||
|
TaskSchedule.stop()
|
||||||
|
);
|
||||||
|
|
||||||
|
SkinCache.applySkin(p);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(Objects.requireNonNull(Main.globalConfig.node("admins").getList(String.class)).stream().anyMatch(s -> s.equalsIgnoreCase(p.getUsername()))) {
|
if(Objects.requireNonNull(Main.globalConfig.node("admins").getList(String.class)).stream().anyMatch(s -> s.equalsIgnoreCase(p.getUsername()))) {
|
||||||
|
@ -19,12 +19,9 @@ public class ByPlayerNameUuidProvider implements UuidProvider {
|
|||||||
return UuidUtil.unTrimm(client);
|
return UuidUtil.unTrimm(client);
|
||||||
|
|
||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
|
Logger.getGlobal().info("Player " + username + " is unknown by Mojang! (Using random UUID)");
|
||||||
Logger.getGlobal().info("Player " + username + " is an known by Mojang! (Using random UUID)");
|
|
||||||
|
|
||||||
} catch (IllegalStateException e) {
|
} catch (IllegalStateException e) {
|
||||||
|
Logger.getGlobal().info("Player with the username " + username + " is already online.");
|
||||||
Logger.getGlobal().info("Player with the username " + username + " is already online. (Using random UUID)");
|
|
||||||
playerConnection.disconnect();
|
playerConnection.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ public class MoveInstance {
|
|||||||
playerList.forEach(player -> move(player, destination));
|
playerList.forEach(player -> move(player, destination));
|
||||||
}
|
}
|
||||||
public static void move(Entity p, Spawnable destination) {
|
public static void move(Entity p, Spawnable destination) {
|
||||||
p.setInstance((Instance) destination, destination.getSpawn());
|
if(p.getInstance() != destination) p.setInstance((Instance) destination, destination.getSpawn());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void forceCloseInstance(InstanceContainer instance) {
|
public static void forceCloseInstance(InstanceContainer instance) {
|
||||||
|
40
src/main/java/eu/mhsl/minenet/minigames/util/PacketUtil.java
Normal file
40
src/main/java/eu/mhsl/minenet/minigames/util/PacketUtil.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package eu.mhsl.minenet.minigames.util;
|
||||||
|
|
||||||
|
import net.minestom.server.MinecraftServer;
|
||||||
|
import net.minestom.server.entity.GameMode;
|
||||||
|
import net.minestom.server.entity.Player;
|
||||||
|
import net.minestom.server.entity.PlayerSkin;
|
||||||
|
import net.minestom.server.network.packet.server.play.PlayerInfoUpdatePacket;
|
||||||
|
import net.minestom.server.network.packet.server.play.SpawnPlayerPacket;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PacketUtil {
|
||||||
|
public static void resendPlayerList(Player p) {
|
||||||
|
MinecraftServer.getConnectionManager().getOnlinePlayers().forEach(player -> {
|
||||||
|
if(player.getUuid().equals(p.getUuid())) return;
|
||||||
|
|
||||||
|
final PlayerSkin skin = player.getSkin();
|
||||||
|
List<PlayerInfoUpdatePacket.Property> properties =
|
||||||
|
skin != null ? List.of(new PlayerInfoUpdatePacket.Property("textures", skin.textures(), skin.signature())) : List.of();
|
||||||
|
|
||||||
|
p.sendPacket(
|
||||||
|
new PlayerInfoUpdatePacket(PlayerInfoUpdatePacket.Action.ADD_PLAYER,
|
||||||
|
new PlayerInfoUpdatePacket.Entry(
|
||||||
|
player.getUuid(),
|
||||||
|
player.getUsername(),
|
||||||
|
properties,
|
||||||
|
true,
|
||||||
|
0,
|
||||||
|
GameMode.SURVIVAL,
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
p.sendPacket(
|
||||||
|
new SpawnPlayerPacket(player.getEntityId(), player.getUuid(), player.getPosition())
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user