(improve) improved player search in the world

This commit is contained in:
kirillsaint 2024-05-01 04:10:37 +06:00
parent 706dce8031
commit e8472e3a69
5 changed files with 46 additions and 18 deletions

View File

@ -8,6 +8,7 @@ import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraft.client.multiplayer.ServerList;
import net.minecraft.client.resources.data.IMetadataSerializer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Session;
import net.silentclient.client.config.ConfigManager;
@ -595,6 +596,13 @@ public class Client {
EmotesMod.onClick(event);
}
@EventTarget
public void onJoinToWorld(EntityJoinLevelEvent event) {
if(event.getEntity() instanceof EntityPlayer) {
WorldListener.onPlayerJoin((EntityPlayer) event.getEntity());
}
}
// Instances
public String getApiUrl() {
return "http://localhost:" + getUserData().server_port;

View File

@ -2,8 +2,8 @@ package net.silentclient.client.emotes;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import net.silentclient.client.emotes.emoticons.Emote;
import net.silentclient.client.utils.WorldListener;
public class EmoteManager {
public static void sendEmote(String name, int i) {
@ -13,7 +13,7 @@ public class EmoteManager {
public static void play(String name, int i) {
if (Minecraft.getMinecraft().theWorld != null) {
String s = PlayerModelManager.get().map.get(i);
EntityPlayer entityPlayer = EmoteManager.getPlayerEntityByName(Minecraft.getMinecraft().theWorld, name);
EntityPlayer entityPlayer = EmoteManager.getPlayerEntityByName(name);
if (entityPlayer != null && s != null) {
Emote emote = PlayerModelManager.get().registry.get(s);
if (EmoteControllerManager.controllers.get(entityPlayer.getName()) != null) {
@ -25,7 +25,7 @@ public class EmoteManager {
public static void stop(String name) {
if (Minecraft.getMinecraft().theWorld != null) {
EntityPlayer entityPlayer = EmoteManager.getPlayerEntityByName(Minecraft.getMinecraft().theWorld, name);
EntityPlayer entityPlayer = EmoteManager.getPlayerEntityByName(name);
if (entityPlayer != null) {
if (EmoteControllerManager.controllers.get(entityPlayer.getName()) != null) {
EmoteControllerManager.controllers.get(entityPlayer.getName()).resetEmote();
@ -34,18 +34,8 @@ public class EmoteManager {
}
}
public static EntityPlayer getPlayerEntityByName(World world, String name)
public static EntityPlayer getPlayerEntityByName(String name)
{
for (int i = 0; i < world.playerEntities.size(); ++i)
{
EntityPlayer entityplayer = (EntityPlayer)world.playerEntities.get(i);
if (name.equalsIgnoreCase(entityplayer.getName()))
{
return entityplayer;
}
}
return null;
return WorldListener.players.get(name.toLowerCase());
}
}

View File

@ -13,6 +13,7 @@ import net.minecraft.util.IChatComponent;
import net.silentclient.client.event.impl.EntityDamageEvent;
import net.silentclient.client.hooks.NetHandlerPlayClientHook;
import net.silentclient.client.utils.Players;
import net.silentclient.client.utils.WorldListener;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.*;
@ -60,6 +61,7 @@ public abstract class NetHandlerPlayClientMixin {
@Inject(method = "handleJoinGame", at = @At(value = "RETURN"))
public void resetPlayers(S01PacketJoinGame packetIn, CallbackInfo ci) {
Players.reload();
WorldListener.onWorldSwitch();
}
//#if MC==10809

View File

@ -6,19 +6,18 @@ import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityFallingBlock;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraft.world.WorldProvider;
import net.silentclient.client.Client;
import net.silentclient.client.event.impl.EntityJoinLevelEvent;
import net.silentclient.client.utils.WorldListener;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@ -58,6 +57,13 @@ public class WorldMixin {
}
}
@Inject(method = {"removeEntity", "removePlayerEntityDangerously"}, at = @At("HEAD"), cancellable = true)
public void removeEntityFromWorldListener(Entity entityIn, CallbackInfo ci) {
if(entityIn instanceof EntityPlayer) {
WorldListener.onPlayerLeave((EntityPlayer) entityIn);
}
}
@Inject(method = "joinEntityInSurroundings", at = @At("HEAD"), cancellable = true)
public void callEntityJoinLevelEvent2(Entity entityIn, CallbackInfo ci) {
EntityJoinLevelEvent event = new EntityJoinLevelEvent(entityIn);

View File

@ -0,0 +1,22 @@
package net.silentclient.client.utils;
import net.minecraft.entity.player.EntityPlayer;
import java.util.HashMap;
public class WorldListener {
public static HashMap<String, EntityPlayer> players = new HashMap<>();
public static void onPlayerJoin(EntityPlayer entityPlayer) {
onPlayerLeave(entityPlayer);
players.put(entityPlayer.getName().toLowerCase(), entityPlayer);
}
public static void onPlayerLeave(EntityPlayer entityPlayer) {
players.remove(entityPlayer.getName().toLowerCase());
}
public static void onWorldSwitch() {
players.clear();
}
}