Skip to content

Commit

Permalink
Merge pull request #299 from KosmX/login_emote_sync
Browse files Browse the repository at this point in the history
Login emote sync + another forge API crash fix
  • Loading branch information
KosmX authored Aug 15, 2022
2 parents 3d9cea0 + b37a07d commit 2979cbd
Show file tree
Hide file tree
Showing 12 changed files with 66 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
public class GettersImpl implements IGetters {
@Override
public IEmotePlayerEntity getPlayerFromUUID(UUID uuid) {
if (Minecraft.getInstance().level == null) return null;
return (IEmotePlayerEntity) Minecraft.getInstance().level.getPlayerByUUID(uuid);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
import io.github.kosmx.emotes.server.network.EmotePlayTracker;
import io.github.kosmx.emotes.server.network.IServerNetworkInstance;
import io.netty.buffer.Unpooled;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
Expand All @@ -24,6 +26,7 @@ public abstract class ServerPlayNetworkInstance implements IServerNetworkInstanc
private final EmotePlayTracker emoteTracker = new EmotePlayTracker();
@Shadow public abstract void send(Packet<?> packet);

@Shadow public ServerPlayer player;
HashMap<Byte, Byte> versions = new HashMap<>();
@Override
public HashMap<Byte, Byte> getRemoteVersions() {
Expand Down Expand Up @@ -65,6 +68,14 @@ public void sendConfigCallback() {
}
}

@Override
public void presenceResponse() {
IServerNetworkInstance.super.presenceResponse();
for (ServerPlayer player : PlayerLookup.tracking(this.player)) {
ServerNetwork.getInstance().playerStartTracking(player, this.player);
}
}

@Override
public boolean isActive() {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ public void sendConfigCallback() {
}
}

@Override
public void presenceResponse() {
IServerNetworkInstance.super.presenceResponse();
ServerNetwork.sendConsumer(this.player, otherPlayer -> ServerNetwork.getInstance().playerStartTracking(otherPlayer, ServerPlayNetworkInstance.this.player));
}

@Override
public boolean isActive() {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,13 +174,13 @@ protected void sendForPlayer(NetData data, Player player, UUID target) {
try {
PacketDistributor.PLAYER.with(() -> (ServerPlayer) player.getCommandSenderWorld().getPlayerByUUID(target)).send(newS2CEmotesPacket(data, (ServerPlayer) player));
}
catch (IOException e){
catch (IOException|RuntimeException e){
e.printStackTrace();
}
}

private void sendConsumer(Player player, Consumer<ServerPlayer> consumer){
public static void sendConsumer(Player player, Consumer<ServerPlayer> consumer){
TrackedEntityAccessor tracker = ((ChunkMapAccessor)((ServerChunkCache)player.getCommandSenderWorld().getChunkSource()).chunkMap).getTrackedEntity().get(player.getId());
tracker.getPlayersTracking().stream().forEach(consumer);
tracker.getPlayersTracking().forEach(consumer);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
public class GettersImpl implements IGetters {
@Override
public IEmotePlayerEntity getPlayerFromUUID(UUID uuid) {
if (Minecraft.getInstance().level == null) return null;
return (IEmotePlayerEntity) Minecraft.getInstance().level.getPlayerByUUID(uuid);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
import io.github.kosmx.emotes.server.network.EmotePlayTracker;
import io.github.kosmx.emotes.server.network.IServerNetworkInstance;
import io.netty.buffer.Unpooled;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
Expand All @@ -25,6 +27,8 @@ public abstract class ServerPlayNetworkInstance implements IServerNetworkInstanc
private final EmotePlayTracker emoteTracker = new EmotePlayTracker();
@Shadow public abstract void send(Packet<?> packet);

@Shadow public abstract ServerPlayer getPlayer();

HashMap<Byte, Byte> versions = new HashMap<>();
@Override
public HashMap<Byte, Byte> getRemoteVersions() {
Expand Down Expand Up @@ -66,6 +70,14 @@ public void sendConfigCallback() {
}
}

@Override
public void presenceResponse() {
IServerNetworkInstance.super.presenceResponse();
for (ServerPlayer player : PlayerLookup.tracking(this.getPlayer())) {
ServerNetwork.getInstance().playerStartTracking(player, this.getPlayer());
}
}

@Override
public boolean isActive() {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,12 @@ public void sendConfigCallback() {
}
}

@Override
public void presenceResponse() {
IServerNetworkInstance.super.presenceResponse();
ServerNetwork.sendConsumer(this.player, otherPlayer -> ServerNetwork.getInstance().playerStartTracking(otherPlayer, ServerPlayNetworkInstance.this.player));
}

@Override
public boolean isActive() {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,12 +174,12 @@ protected void sendForPlayer(NetData data, Player player, UUID target) {
try {
PacketDistributor.PLAYER.with(() -> (ServerPlayer) player.getCommandSenderWorld().getPlayerByUUID(target)).send(newS2CEmotesPacket(data, (ServerPlayer) player));
}
catch (IOException e){
catch (IOException|RuntimeException e){
e.printStackTrace();
}
}

private void sendConsumer(Player player, Consumer<ServerPlayer> consumer){
public static void sendConsumer(Player player, Consumer<ServerPlayer> consumer){
TrackedEntityAccessor tracker = ((ChunkMapAccessor)((ServerChunkCache)player.getCommandSenderWorld().getChunkSource()).chunkMap).getTrackedEntity().get(player.getId());
tracker.getPlayersTracking().forEach(serverPlayerConnection -> consumer.accept(serverPlayerConnection.getPlayer()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
public class GettersImpl implements IGetters {
@Override
public IEmotePlayerEntity getPlayerFromUUID(UUID uuid) {
if (Minecraft.getInstance().level == null) return null;
return (IEmotePlayerEntity) Minecraft.getInstance().level.getPlayerByUUID(uuid);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
import io.github.kosmx.emotes.server.network.EmotePlayTracker;
import io.github.kosmx.emotes.server.network.IServerNetworkInstance;
import io.netty.buffer.Unpooled;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
Expand All @@ -25,6 +27,8 @@ public abstract class ServerPlayNetworkInstance implements IServerNetworkInstanc
private final EmotePlayTracker emoteTracker = new EmotePlayTracker();
@Shadow public abstract void send(Packet<?> packet);

@Shadow public abstract ServerPlayer getPlayer();

HashMap<Byte, Byte> versions = new HashMap<>();
@Override
public HashMap<Byte, Byte> getRemoteVersions() {
Expand Down Expand Up @@ -66,6 +70,14 @@ public void sendConfigCallback() {
}
}

@Override
public void presenceResponse() {
IServerNetworkInstance.super.presenceResponse();
for (ServerPlayer player : PlayerLookup.tracking(this.getPlayer())) {
ServerNetwork.getInstance().playerStartTracking(player, this.getPlayer());
}
}

@Override
public boolean isActive() {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ public abstract class ServerPlayNetworkInstance implements IServerNetworkInstanc
@Shadow public abstract void send(Packet<?> packet);

@Shadow public ServerPlayer player;

@Shadow public abstract ServerPlayer getPlayer();

HashMap<Byte, Byte> versions = new HashMap<>();
@Override
public HashMap<Byte, Byte> getRemoteVersions() {
Expand Down Expand Up @@ -60,6 +63,12 @@ public void sendConfigCallback() {
}
}

@Override
public void presenceResponse() {
IServerNetworkInstance.super.presenceResponse();
ServerNetwork.sendConsumer(this.getPlayer(), otherPlayer -> ServerNetwork.getInstance().playerStartTracking(otherPlayer, ServerPlayNetworkInstance.this.player));
}

@Override
public boolean isActive() {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,12 +175,12 @@ protected void sendForPlayer(NetData data, Player player, UUID target) {
try {
PacketDistributor.PLAYER.with(() -> (ServerPlayer) player.getCommandSenderWorld().getPlayerByUUID(target)).send(newS2CEmotesPacket(data, (ServerPlayer) player));
}
catch (IOException e){
catch (IOException|RuntimeException e){
e.printStackTrace();
}
}

private void sendConsumer(Player player, Consumer<ServerPlayer> consumer){
public static void sendConsumer(Player player, Consumer<ServerPlayer> consumer){
TrackedEntityAccessor tracker = ((ChunkMapAccessor)((ServerChunkCache)player.getCommandSenderWorld().getChunkSource()).chunkMap).getTrackedEntity().get(player.getId());
tracker.getPlayersTracking().forEach(serverPlayerConnection -> consumer.accept(serverPlayerConnection.getPlayer()));
}
Expand Down

0 comments on commit 2979cbd

Please sign in to comment.