Skip to content

Commit

Permalink
Implement more synced data
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexProgrammerDE committed Feb 26, 2024
1 parent 9baaa67 commit 1b966c5
Showing 1 changed file with 139 additions and 22 deletions.
161 changes: 139 additions & 22 deletions src/main/java/com/soulfiremc/server/plugins/POVServer.java
Expand Up @@ -43,7 +43,6 @@
import com.github.steveice10.packetlib.event.server.ServerAdapter;
import com.github.steveice10.packetlib.event.server.ServerClosedEvent;
import com.github.steveice10.packetlib.event.server.SessionAddedEvent;
import com.github.steveice10.packetlib.event.server.SessionRemovedEvent;
import com.github.steveice10.packetlib.event.session.ConnectedEvent;
import com.github.steveice10.packetlib.event.session.DisconnectingEvent;
import com.github.steveice10.packetlib.event.session.PacketErrorEvent;
Expand All @@ -56,12 +55,14 @@
import com.soulfiremc.server.api.event.attack.AttackInitEvent;
import com.soulfiremc.server.api.event.attack.BotConnectionInitEvent;
import com.soulfiremc.server.api.event.lifecycle.SettingsRegistryInitEvent;
import com.soulfiremc.server.protocol.BotConnection;
import com.soulfiremc.server.settings.lib.SettingsObject;
import com.soulfiremc.server.settings.lib.property.BooleanProperty;
import com.soulfiremc.server.settings.lib.property.IntProperty;
import com.soulfiremc.server.settings.lib.property.Property;
import com.soulfiremc.util.PortHelper;
import java.util.ArrayList;
import java.util.Objects;
import java.util.function.Consumer;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
Expand Down Expand Up @@ -195,7 +196,7 @@ public POVServerInstance(int port, AttackManager attackManager) {
false,
false,
null,
100)));
0)));

session.send(
new ClientboundPlayerAbilitiesPacket(false, false, true, false, 0f, 0f));
Expand Down Expand Up @@ -238,26 +239,79 @@ public void sessionAdded(SessionAddedEvent event) {

session.addListener(
new SessionAdapter() {
private BotConnection botConnection;
private boolean enableForwarding;

@Override
public void packetReceived(Session session, Packet packet) {
if (packet instanceof ServerboundChatPacket chatPacket) {
GameProfile profile =
event.getSession().getFlag(MinecraftConstants.PROFILE_KEY);

log.info("{}: {}", profile.getName(), chatPacket.getMessage());
} else if (packet instanceof ServerboundAcceptTeleportationPacket) {
// if we keep the health on 0, the client will spam us respawn request packets :/
session.send(new ClientboundSetHealthPacket(1, 0, 0));
if (botConnection == null) {
if (packet instanceof ServerboundChatPacket chatPacket) {
GameProfile profile =
event.getSession().getFlag(MinecraftConstants.PROFILE_KEY);

log.info("{}: {}", profile.getName(), chatPacket.getMessage());

var first =
attackManager.botConnections().values().stream()
.filter(
c ->
c.meta()
.minecraftAccount()
.username()
.equals(chatPacket.getMessage()))
.findFirst();
if (first.isPresent()) {
botConnection = first.get();
session.send(
new ClientboundSystemChatPacket(
Component.text("Connected to bot ")
.color(NamedTextColor.GREEN)
.append(
Component.text(
botConnection
.meta()
.minecraftAccount()
.username())
.color(NamedTextColor.AQUA)
.decorate(TextDecoration.UNDERLINED))
.append(Component.text("!"))
.color(NamedTextColor.GREEN),
false));
syncBotAndUser();
var povSession = session;
botConnection
.session()
.addListener(
new SessionAdapter() {
@Override
public void packetReceived(Session session, Packet packet) {
if (enableForwarding) {
povSession.send(packet);
}
}
});
} else {
session.send(
new ClientboundSystemChatPacket(
Component.text("Bot not found!").color(NamedTextColor.RED),
false));
}
} else if (packet instanceof ServerboundAcceptTeleportationPacket) {
// if we keep the health on 0, the client will spam us respawn request
// packets :/
session.send(new ClientboundSetHealthPacket(1, 0, 0));
}
} else if (enableForwarding) {
botConnection.session().send(packet);
}
}

@Override
public void connected(ConnectedEvent event) {
var session = event.getSession();
try {
GameProfile profile =
session.getFlag(MinecraftConstants.PROFILE_KEY);
log.info("Connected: {}", profile.getName());
if (botConnection == null) {
var session = event.getSession();
GameProfile profile = session.getFlag(MinecraftConstants.PROFILE_KEY);
log.info("Account connected: {}", profile.getName());

Component msg =
Component.text("Hello, ")
Expand All @@ -272,8 +326,6 @@ public void connected(ConnectedEvent event) {
.color(NamedTextColor.GREEN));

session.send(new ClientboundSystemChatPacket(msg, false));
} catch (Exception e) {
log.error("Error sending welcome message", e);
}
}

Expand All @@ -286,12 +338,77 @@ public void packetError(PacketErrorEvent event) {
public void disconnecting(DisconnectingEvent event) {
log.info("Disconnecting: {}", event.getReason(), event.getCause());
}
});
}

@Override
public void sessionRemoved(SessionRemovedEvent event) {
log.info("Session removed.");
private void syncBotAndUser() {
Objects.requireNonNull(botConnection);
var sessionDataManager = botConnection.sessionDataManager();
session.send(
new ClientboundLoginPacket(
sessionDataManager.clientEntity().entityId(),
sessionDataManager.loginData().hardcore(),
sessionDataManager.loginData().worldNames(),
sessionDataManager.loginData().maxPlayers(),
sessionDataManager.serverViewDistance(),
sessionDataManager.serverSimulationDistance(),
sessionDataManager.clientEntity().showReducedDebug(),
sessionDataManager.enableRespawnScreen(),
sessionDataManager.doLimitedCrafting(),
new PlayerSpawnInfo(
sessionDataManager.currentDimension().dimensionType(),
sessionDataManager.currentDimension().worldName(),
sessionDataManager.currentDimension().hashedSeed(),
sessionDataManager.gameMode(),
sessionDataManager.previousGameMode(),
sessionDataManager.currentDimension().debug(),
sessionDataManager.currentDimension().flat(),
null,
0)));

if (sessionDataManager.abilitiesData() != null) {
session.send(
new ClientboundPlayerAbilitiesPacket(
sessionDataManager.abilitiesData().invulnerable(),
sessionDataManager.abilitiesData().flying(),
sessionDataManager.abilitiesData().allowFlying(),
sessionDataManager.abilitiesData().creativeModeBreak(),
sessionDataManager.abilitiesData().flySpeed(),
sessionDataManager.abilitiesData().walkSpeed()));
}

session.send(
new ClientboundSetHealthPacket(
sessionDataManager.healthData().health(),
sessionDataManager.healthData().food(),
sessionDataManager.healthData().saturation()));

session.send(
new ClientboundSetHealthPacket(
sessionDataManager.healthData().health(),
sessionDataManager.healthData().food(),
sessionDataManager.healthData().saturation()));

if (sessionDataManager.defaultSpawnData() != null) {
session.send(
new ClientboundSetDefaultSpawnPositionPacket(
sessionDataManager.defaultSpawnData().position(),
sessionDataManager.defaultSpawnData().angle()));
}

session.send(new ClientboundPlayerPositionPacket(
sessionDataManager.clientEntity().x(),
sessionDataManager.clientEntity().y(),
sessionDataManager.clientEntity().z(),
sessionDataManager.clientEntity().yaw(),
sessionDataManager.clientEntity().pitch(),
Integer.MIN_VALUE
));

session.send(
new ClientboundGameEventPacket(GameEvent.LEVEL_CHUNKS_LOAD_START, null));

enableForwarding = true;
}
});
}
});

Expand Down

0 comments on commit 1b966c5

Please sign in to comment.