mirror of
https://github.com/SerendipityR-2022/EndMinecraftPlusV2.git
synced 2024-09-19 15:23:26 +00:00
Add: 更新简易移动方法,自动NPC交互
This commit is contained in:
parent
90bdfeaa51
commit
32cd3d2305
@ -6,8 +6,8 @@ import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.SetTitle;
|
||||
|
||||
public class EndMinecraftPlusV2 {
|
||||
public static String ver = "2.0.4";
|
||||
public static Integer CfgVer = 11;
|
||||
public static String ver = "2.0.6";
|
||||
public static Integer CfgVer = 12;
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println("=======================-Designed by SerendipityR-=======================");
|
||||
|
@ -3,7 +3,7 @@
|
||||
# Designed by SerendipityR #
|
||||
###############################
|
||||
|
||||
CfgVer: 11
|
||||
CfgVer: 12
|
||||
|
||||
AttackSettings:
|
||||
Address: "example.com"
|
||||
@ -37,11 +37,16 @@ AttackSettings:
|
||||
# backTeleport - 回到重生点
|
||||
# register&Login - 执行注册/登录:<密码>
|
||||
# crashPacket - 发送崩服数据包:<数量>
|
||||
# goToLobby - 尝试寻找并与加入大厅NPC交互
|
||||
# moveToLocation - 向目标位置移动:<X>_<Y>_<Z>
|
||||
Actions:
|
||||
- "wait:2000"
|
||||
- "register&Login:genshinImpact"
|
||||
- "wait:1000"
|
||||
- "chat:原神,启动!"
|
||||
#- "moveToLocation:13_75_0"
|
||||
- "goToLobby"
|
||||
- "wait:30000"
|
||||
#- "randomTeleport:1"
|
||||
#- "wait:1000"
|
||||
#- "backTeleport"
|
||||
@ -121,6 +126,14 @@ BotSettings:
|
||||
# 针对特定服务器,利用全服喊话跳出登录大厅
|
||||
ServerShoutDetect:
|
||||
- "tpserver"
|
||||
# 检测出生点附近的NPC名称
|
||||
# 实现通过NPC加入服务器大厅
|
||||
JoinNPCDetect:
|
||||
- "点击加入"
|
||||
# 与NPC交互后可能返回交互界面
|
||||
# 若界面内存在匹配的物品,则尝试模拟物品点击
|
||||
JoinLobbyItem:
|
||||
- "LEFT:点击加入"
|
||||
# 若聊天信息中检测到以下字段,则尝试进行点击验证
|
||||
ClickVerifiesDetect:
|
||||
- "点击验证"
|
||||
@ -146,15 +159,19 @@ BotSettings:
|
||||
# register&Login - 执行注册/登录:<是否使用已生成密码>_<自定义密码> - Flag:login
|
||||
# crashPacket - 发送崩服数据包:<数量>_<flag/none>
|
||||
# tabAttack - 执行Tab补全:<数量>_<间隔(ms)>_<flag/none>
|
||||
# moveToLocation - 向目标位置移动:<只执行一次>_<X>_<Y>_<Z>_<flag/none>
|
||||
# goToLobby - 尝试寻找并与加入大厅NPC交互:<flag/none> (只执行一次)
|
||||
Actions:
|
||||
- "wait:3000_none"
|
||||
- "register&Login:true_genshinImpact"
|
||||
- "async|chatSpam:10_3000_login"
|
||||
- "async|randomTeleport:25_100_login"
|
||||
#- "async|randomTeleport:25_100_login"
|
||||
- "wait:3000_login"
|
||||
- "async|backTeleport:login"
|
||||
- "async|crashPacket:75_login"
|
||||
- "async|tabAttack:25_75_login"
|
||||
#- "async|backTeleport:login"
|
||||
#- "async|crashPacket:75_login"
|
||||
#- "async|tabAttack:25_75_login"
|
||||
- "goToLobby:login"
|
||||
#- "async|moveToLocation:true_13_75_0_login"
|
||||
|
||||
Proxy:
|
||||
# 代理获取方式:
|
||||
|
@ -49,6 +49,8 @@ public class ConfigUtil {
|
||||
public static List<String> RejoinDetect;
|
||||
public static Boolean EmptyMsgRejoin;
|
||||
public static List<String> ServerShoutDetect;
|
||||
public static List<String> JoinNPCDetect;
|
||||
public static List<String> JoinLobbyItem;
|
||||
public static Long RejoinDelay;
|
||||
public static List<String> ClickVerifiesDetect;
|
||||
public static List<String> CustomChat;
|
||||
@ -113,6 +115,8 @@ public class ConfigUtil {
|
||||
RejoinDetect = config.getStringList("BotSettings.RejoinDetect");
|
||||
EmptyMsgRejoin = config.getBoolean("BotSettings.EmptyMsgRejoin");
|
||||
ServerShoutDetect = config.getStringList("BotSettings.ServerShoutDetect");
|
||||
JoinNPCDetect = config.getStringList("BotSettings.JoinNPCDetect");
|
||||
JoinLobbyItem = config.getStringList("BotSettings.JoinLobbyItem");
|
||||
RejoinDelay = config.getLong("BotSettings.RejoinDelay");
|
||||
ClickVerifiesDetect = config.getStringList("BotSettings.ClickVerifiesDetect");
|
||||
CustomChat = config.getStringList("BotSettings.CustomChat");
|
||||
|
@ -6,6 +6,7 @@ import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.*;
|
||||
|
||||
import java.net.Proxy;
|
||||
import java.util.Arrays;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
@ -47,6 +48,10 @@ public class BotManager {
|
||||
|
||||
if (ConfigUtil.DebugPlayerActivities) {
|
||||
for (String action : ConfigUtil.DebugPlayerActions) {
|
||||
if (!botHandler.checkClientStatus(client)) {
|
||||
break;
|
||||
}
|
||||
|
||||
String[] _action = action.split(":");
|
||||
switch (_action[0]) {
|
||||
case "wait":
|
||||
@ -82,6 +87,23 @@ public class BotManager {
|
||||
LogUtil.doLog(0, "[DEBUG] [行动] 尝试发送崩服数据包: " + count_ + "个", "BotAttack");
|
||||
sendCrashPacket(client, count_);
|
||||
break;
|
||||
case "moveToLocation":
|
||||
String[] moveArgs = _action[1].split("_");
|
||||
Double[] loc = new Double[]{Double.valueOf(moveArgs[0]), Double.valueOf(moveArgs[1]), Double.valueOf(moveArgs[2])};
|
||||
LogUtil.doLog(0, "[DEBUG] [行动] 尝试移动到指定位置: " + Arrays.toString(loc), "BotAttack");
|
||||
moveToLocation(client, loc);
|
||||
break;
|
||||
case "goToLobby":
|
||||
Object npc = getNpc();
|
||||
Double[] npcLoc = packetHandler.getSpawnPlayerLocation(npc);
|
||||
if (npcLoc == null) {
|
||||
return;
|
||||
}
|
||||
LogUtil.doLog(0, "[DEBUG] [行动] 尝试移动到NPC所处位置: " + Arrays.toString(npcLoc), "BotAttack");
|
||||
moveToLocation(client, npcLoc);
|
||||
LogUtil.doLog(0, "[DEBUG] [行动] 尝试与NPC交互: " + Arrays.toString(npcLoc), "BotAttack");
|
||||
packetHandler.sendPlayerInteractEntityPacket(client, packetHandler.getSpawnPlayerEntityId(npc), new float[]{npcLoc[0].floatValue(), npcLoc[1].floatValue(), npcLoc[2].floatValue()});
|
||||
break;
|
||||
default:
|
||||
LogUtil.doLog(0, "[DEBUG] [行动] 无法识别的action语句: " + action, "BotAttack");
|
||||
}
|
||||
@ -204,6 +226,11 @@ public class BotManager {
|
||||
|
||||
botHandler.setClientFlag(client, "activity", true);
|
||||
for (String action : ConfigUtil.BotActions) {
|
||||
if (!botHandler.checkClientStatus(client)) {
|
||||
botHandler.setClientFlag(client, "activity", false);
|
||||
break;
|
||||
}
|
||||
|
||||
boolean async = "async".equals(action.split("\\|")[0]);
|
||||
|
||||
String[] _action;
|
||||
@ -314,6 +341,36 @@ public class BotManager {
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "moveToLocation":
|
||||
String[] moveArgs = _action[1].split("_");
|
||||
boolean doOnce = Boolean.parseBoolean(moveArgs[0]);
|
||||
if (doOnce && botHandler.hasClientFlag(client, "moved")) {
|
||||
return;
|
||||
} else if (doOnce) {
|
||||
botHandler.setClientFlag(client, "moved", true);
|
||||
}
|
||||
Double[] loc = new Double[]{Double.valueOf(moveArgs[1]), Double.valueOf(moveArgs[2]), Double.valueOf(moveArgs[3])};
|
||||
if (ConfigUtil.BotActionDetails) {
|
||||
LogUtil.doLog(0, "[" + userName + "] [行动] 尝试移动到指定位置: " + Arrays.toString(loc), "BotAttack");
|
||||
}
|
||||
moveToLocation(client, loc);
|
||||
break;
|
||||
case "goToLobby":
|
||||
// 必须禁用默认处理方式
|
||||
Object npc = getNpc();
|
||||
Double[] npcLoc = packetHandler.getSpawnPlayerLocation(npc);
|
||||
if (npcLoc == null) {
|
||||
return;
|
||||
}
|
||||
if (ConfigUtil.BotActionDetails) {
|
||||
LogUtil.doLog(0, "[" + userName + "] [行动] 尝试移动到NPC所处位置: " + Arrays.toString(npcLoc), "BotAttack");
|
||||
}
|
||||
moveToLocation(client, npcLoc);
|
||||
if (ConfigUtil.BotActionDetails) {
|
||||
LogUtil.doLog(0, "[" + userName + "] [行动] 尝试与NPC交互: " + Arrays.toString(npcLoc), "BotAttack");
|
||||
}
|
||||
packetHandler.sendPlayerInteractEntityPacket(client, packetHandler.getSpawnPlayerEntityId(npc), new float[]{npcLoc[0].floatValue(), npcLoc[1].floatValue(), npcLoc[2].floatValue()});
|
||||
break;
|
||||
default:
|
||||
LogUtil.doLog(0, "[" + userName + "] [行动] 无法识别的action语句: " + action, "BotAttack");
|
||||
}
|
||||
@ -438,4 +495,27 @@ public class BotManager {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public static void moveToLocation(Object client, Double[] loc) {
|
||||
// 必须禁用默认处理方式
|
||||
boolean moveHandler = ConfigUtil.PacketHandlerMove;
|
||||
|
||||
ConfigUtil.PacketHandlerMove = false;
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
LogUtil.doLog(0, "[行动] 尝试移动到指定位置时发生错误! 无法确定原点位置。", "BotAttack");
|
||||
return;
|
||||
}
|
||||
|
||||
packetHandler.moveToLocation(client, loc, 0.2);
|
||||
ConfigUtil.PacketHandlerMove = moveHandler;
|
||||
}
|
||||
|
||||
public static Object getNpc() {
|
||||
if (PacketManager.npcDetect.isEmpty()) {
|
||||
LogUtil.doLog(0, "[行动] 尝试获取NPC信息时发生错误! 目标不存在。", "BotAttack");
|
||||
return null;
|
||||
}
|
||||
|
||||
return PacketManager.npcDetect.get(0);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface PacketHandler {
|
||||
boolean checkServerPluginMessagePacket(Object packet);
|
||||
|
||||
@ -25,6 +27,37 @@ public interface PacketHandler {
|
||||
|
||||
void handleServerPlayerHealthPacket(Object client, Object packet, String username);
|
||||
|
||||
boolean checkServerSpawnPlayerPacket(Object packet);
|
||||
boolean checkSpawnPlayerName(Object packet, String checkName);
|
||||
Double[] getSpawnPlayerLocation(Object packet);
|
||||
int getSpawnPlayerEntityId(Object packet);
|
||||
|
||||
void moveToLocation(Object client, Double[] targetLocation, double moveSpeed);
|
||||
|
||||
boolean checkServerOpenWindowPacket(Object packet);
|
||||
|
||||
int getWindowIDFromServerOpenWindowPacket(Object packet);
|
||||
|
||||
int getWindowSlotsFromPacket(Object packet);
|
||||
|
||||
String getWindowNameFromPacket(Object packet);
|
||||
|
||||
boolean checkServerWindowItemsPacket(Object packet);
|
||||
|
||||
int getWindowIDFromWindowItemsPacket(Object packet);
|
||||
|
||||
Object[] getItemStackFromWindowItemsPacket(Object packet);
|
||||
|
||||
String getItemName(Object itemStack);
|
||||
|
||||
List<String> getItemLore(Object itemStack);
|
||||
|
||||
void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location);
|
||||
|
||||
void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack);
|
||||
|
||||
void sendRightClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack);
|
||||
|
||||
void handleOtherPacket(Object packet);
|
||||
|
||||
void sendChatPacket(Object client, String text);
|
||||
|
@ -4,9 +4,14 @@ import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
public class PacketManager {
|
||||
public static int clickVerifies = 0;
|
||||
public static String serverShoutCmd = null;
|
||||
public static List<Object> npcDetect = new CopyOnWriteArrayList<>();
|
||||
|
||||
public static void handlePacket(PacketHandler packetHandler, Object client, Object packet, String username) {
|
||||
if (packetHandler.checkServerPluginMessagePacket(packet)) {
|
||||
@ -35,10 +40,72 @@ public class PacketManager {
|
||||
packetHandler.handleServerPlayerHealthPacket(client, packet, username);
|
||||
} else if (packetHandler.checkServerPlayerPositionRotationPacket(packet)) {
|
||||
// 移动数据包
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
packetHandler.handleServerPlayerPositionRotationPacket(client, packet, username);
|
||||
}
|
||||
packetHandler.handleServerPlayerPositionRotationPacket(client, packet, username);
|
||||
BotManager.positionList.put(client, packet);
|
||||
} else if (packetHandler.checkServerSpawnPlayerPacket(packet)) {
|
||||
// 其他玩家位置数据包
|
||||
boolean add = true;
|
||||
for (String checkName : ConfigUtil.JoinNPCDetect) {
|
||||
if (!packetHandler.checkSpawnPlayerName(packet, checkName)) {
|
||||
add = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (add && !npcDetect.contains(packet)) {
|
||||
LogUtil.doLog(0, "存在符合条件的NPC: " + Arrays.toString(packetHandler.getSpawnPlayerLocation(packet)), "NPCDetect");
|
||||
npcDetect.add(packet);
|
||||
}
|
||||
} else if (packetHandler.checkServerOpenWindowPacket(packet)) {
|
||||
// 收到打开Inventory数据包
|
||||
if (ConfigUtil.BotActionDetails) {
|
||||
LogUtil.doLog(0, "[" + username + "] 打开可交互窗口: ID - " + packetHandler.getWindowIDFromServerOpenWindowPacket(packet) + " | 名称 - " + packetHandler.getWindowNameFromPacket(packet) + " | 大小 - " + packetHandler.getWindowSlotsFromPacket(packet), "NPCDetect");
|
||||
}
|
||||
} else if (packetHandler.checkServerWindowItemsPacket(packet)) {
|
||||
// 收到Inventory物品数据包
|
||||
int windowID = packetHandler.getWindowIDFromWindowItemsPacket(packet);
|
||||
Object[] itemStacks = packetHandler.getItemStackFromWindowItemsPacket(packet);
|
||||
int windowSize = itemStacks.length;
|
||||
if (ConfigUtil.BotActionDetails) {
|
||||
LogUtil.doLog(0, "[" + username + "] 收到可交互窗口物品数据: ID - " + windowID + " | 大小 - " + windowSize, "NPCDetect");
|
||||
}
|
||||
|
||||
for (int i = 0; i < windowSize; i++) {
|
||||
Object item = itemStacks[i];
|
||||
if (item == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
String itemName = packetHandler.getItemName(item);
|
||||
List<String> itemLore = packetHandler.getItemLore(item);
|
||||
if (ConfigUtil.BotActionDetails) {
|
||||
LogUtil.doLog(0, "[" + username + "] 收到可交互窗口物品数据: ID - " + windowID + " | 位置 - " + i + " | 名称: " + itemName + " | Lore: " + itemLore, "NPCDetect");
|
||||
}
|
||||
|
||||
boolean interact = false;
|
||||
boolean left = true;
|
||||
for (String action : ConfigUtil.JoinLobbyItem) {
|
||||
String[] actionParts = action.split(":");
|
||||
if (actionParts[0].equals("RIGHT")) {
|
||||
left = false;
|
||||
}
|
||||
|
||||
String actionValue = actionParts[1];
|
||||
if ((itemLore != null && itemLore.stream().anyMatch(lore -> lore.contains(actionValue))) || (itemName != null && itemName.contains(actionValue))) {
|
||||
interact = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (interact) {
|
||||
LogUtil.doLog(0, "[" + username + "] 已发送窗口点击数据: ID - " + windowID + " | 位置 - " + i, "NPCDetect");
|
||||
if (left) {
|
||||
packetHandler.sendLeftClickWindowItemPacket(client, windowID, i, item);
|
||||
} else {
|
||||
packetHandler.sendRightClickWindowItemPacket(client, windowID, i, item);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// packetHandler.handleOtherPacket(packet);
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_12_
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.CatAntiCheat.CatAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
@ -11,15 +12,18 @@ import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.spacehq.mc.protocol.data.game.ClientRequest;
|
||||
import org.spacehq.mc.protocol.data.game.entity.metadata.EntityMetadata;
|
||||
import org.spacehq.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import org.spacehq.mc.protocol.data.game.entity.player.Hand;
|
||||
import org.spacehq.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import org.spacehq.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import org.spacehq.mc.protocol.data.game.setting.SkinPart;
|
||||
import org.spacehq.mc.protocol.data.game.window.ClickItemParam;
|
||||
import org.spacehq.mc.protocol.data.game.window.WindowAction;
|
||||
import org.spacehq.mc.protocol.data.message.Message;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
|
||||
@ -27,6 +31,9 @@ import org.spacehq.mc.protocol.packet.ingame.server.ServerKeepAlivePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
|
||||
import org.spacehq.opennbt.NBTIO;
|
||||
import org.spacehq.opennbt.tag.builtin.CompoundTag;
|
||||
import org.spacehq.opennbt.tag.builtin.ListTag;
|
||||
@ -40,9 +47,14 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ServerPluginMessagePacket;
|
||||
@ -112,10 +124,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ServerPlayerPositionRotationPacket packet = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(packet.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerPlayerPositionRotationPacket positionRotationPacket = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -160,6 +178,188 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ServerSpawnPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
|
||||
for (EntityMetadata metadata:playerPacket.getMetadata()) {
|
||||
if (metadata.getValue().toString().contains(checkName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
Session session = ((Client) client).getSession();
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ClientPlayerPositionPacket playerPositionPacket = new ClientPlayerPositionPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ServerOpenWindowPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getSlots();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ServerWindowItemsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ClientPlayerInteractEntityPacket interactEntityPacket = new ClientPlayerInteractEntityPacket(entityId, InteractAction.INTERACT);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.LEFT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.RIGHT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_13_
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.CatAntiCheat.CatAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
@ -11,14 +12,18 @@ import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.spacehq.mc.protocol.data.game.ClientRequest;
|
||||
import org.spacehq.mc.protocol.data.game.entity.metadata.EntityMetadata;
|
||||
import org.spacehq.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import org.spacehq.mc.protocol.data.game.entity.player.Hand;
|
||||
import org.spacehq.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import org.spacehq.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import org.spacehq.mc.protocol.data.game.setting.SkinPart;
|
||||
import org.spacehq.mc.protocol.data.game.window.ClickItemParam;
|
||||
import org.spacehq.mc.protocol.data.game.window.WindowAction;
|
||||
import org.spacehq.mc.protocol.data.message.Message;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
|
||||
@ -26,13 +31,26 @@ import org.spacehq.mc.protocol.packet.ingame.server.ServerKeepAlivePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
|
||||
import org.spacehq.opennbt.tag.builtin.CompoundTag;
|
||||
import org.spacehq.opennbt.tag.builtin.ListTag;
|
||||
import org.spacehq.opennbt.tag.builtin.StringTag;
|
||||
import org.spacehq.opennbt.tag.builtin.Tag;
|
||||
import org.spacehq.packetlib.Client;
|
||||
import org.spacehq.packetlib.Session;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ServerPluginMessagePacket;
|
||||
@ -102,10 +120,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ServerPlayerPositionRotationPacket packet = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(packet.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerPlayerPositionRotationPacket positionRotationPacket = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -150,6 +174,188 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ServerSpawnPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
|
||||
for (EntityMetadata metadata:playerPacket.getMetadata()) {
|
||||
if (metadata.getValue().toString().contains(checkName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
Session session = ((Client) client).getSession();
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ClientPlayerPositionPacket playerPositionPacket = new ClientPlayerPositionPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ServerOpenWindowPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getSlots();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ServerWindowItemsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ClientPlayerInteractEntityPacket interactEntityPacket = new ClientPlayerInteractEntityPacket(entityId, InteractAction.INTERACT);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.LEFT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.RIGHT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -2,20 +2,25 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_14_
|
||||
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.github.steveice10.mc.protocol.data.game.ClientRequest;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.Hand;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.SkinPart;
|
||||
import com.github.steveice10.mc.protocol.data.game.window.ClickItemParam;
|
||||
import com.github.steveice10.mc.protocol.data.game.window.WindowAction;
|
||||
import com.github.steveice10.mc.protocol.data.message.Message;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
|
||||
@ -23,6 +28,13 @@ import com.github.steveice10.mc.protocol.packet.ingame.server.ServerKeepAlivePac
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
|
||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||
import com.github.steveice10.packetlib.Client;
|
||||
import com.github.steveice10.packetlib.Session;
|
||||
import com.google.gson.JsonElement;
|
||||
@ -30,8 +42,14 @@ import com.google.gson.JsonObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ServerPluginMessagePacket;
|
||||
@ -95,10 +113,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ServerPlayerPositionRotationPacket packet = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(packet.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerPlayerPositionRotationPacket positionRotationPacket = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -143,6 +167,187 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ServerSpawnPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
|
||||
for (EntityMetadata metadata:playerPacket.getMetadata()) {
|
||||
if (metadata.getValue().toString().contains(checkName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
Session session = ((Client) client).getSession();
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ClientPlayerPositionPacket playerPositionPacket = new ClientPlayerPositionPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ServerOpenWindowPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ServerWindowItemsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ClientPlayerInteractEntityPacket interactEntityPacket = new ClientPlayerInteractEntityPacket(entityId, InteractAction.INTERACT);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.LEFT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.RIGHT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -2,27 +2,35 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_15_
|
||||
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.github.steveice10.mc.protocol.data.game.ClientRequest;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.Hand;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.SkinPart;
|
||||
import com.github.steveice10.mc.protocol.data.game.window.ClickItemParam;
|
||||
import com.github.steveice10.mc.protocol.data.game.window.WindowAction;
|
||||
import com.github.steveice10.mc.protocol.data.message.Message;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerKeepAlivePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
|
||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||
import com.github.steveice10.packetlib.Client;
|
||||
import com.github.steveice10.packetlib.Session;
|
||||
import com.google.gson.JsonElement;
|
||||
@ -31,8 +39,14 @@ import com.google.gson.JsonParser;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ServerPluginMessagePacket;
|
||||
@ -96,10 +110,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ServerPlayerPositionRotationPacket packet = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(packet.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerPlayerPositionRotationPacket positionRotationPacket = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -144,6 +164,179 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ServerPlayerListEntryPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
Session session = ((Client) client).getSession();
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ClientPlayerPositionPacket playerPositionPacket = new ClientPlayerPositionPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ServerOpenWindowPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ServerWindowItemsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ClientPlayerInteractEntityPacket interactEntityPacket = new ClientPlayerInteractEntityPacket(entityId, InteractAction.INTERACT);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.LEFT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.RIGHT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -2,38 +2,48 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_16_
|
||||
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.github.steveice10.mc.protocol.data.game.ClientRequest;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.HandPreference;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.SkinPart;
|
||||
import com.github.steveice10.mc.protocol.data.game.window.ClickItemParam;
|
||||
import com.github.steveice10.mc.protocol.data.game.window.WindowAction;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerKeepAlivePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
|
||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||
import com.github.steveice10.packetlib.Client;
|
||||
import com.github.steveice10.packetlib.Session;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.TranslatableComponent;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ServerPluginMessagePacket;
|
||||
@ -96,10 +106,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ServerPlayerPositionRotationPacket packet = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(packet.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerPlayerPositionRotationPacket positionRotationPacket = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -144,6 +160,179 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ServerPlayerListEntryPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
Session session = ((Client) client).getSession();
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ClientPlayerPositionPacket playerPositionPacket = new ClientPlayerPositionPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ServerOpenWindowPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ServerWindowItemsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ClientPlayerInteractEntityPacket interactEntityPacket = new ClientPlayerInteractEntityPacket(entityId, InteractAction.INTERACT, false);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.LEFT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.RIGHT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -2,38 +2,48 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_17_
|
||||
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.github.steveice10.mc.protocol.data.game.ClientRequest;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.HandPreference;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.SkinPart;
|
||||
import com.github.steveice10.mc.protocol.data.game.window.ClickItemParam;
|
||||
import com.github.steveice10.mc.protocol.data.game.window.WindowAction;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.player.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerKeepAlivePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
|
||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||
import com.github.steveice10.packetlib.Session;
|
||||
import com.github.steveice10.packetlib.tcp.TcpClientSession;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.TranslatableComponent;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ServerPluginMessagePacket;
|
||||
@ -97,10 +107,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ServerPlayerPositionRotationPacket packet = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(packet.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerPlayerPositionRotationPacket positionRotationPacket = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -145,6 +161,179 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ServerPlayerListEntryPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ClientPlayerPositionPacket playerPositionPacket = new ClientPlayerPositionPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ServerOpenWindowPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ServerWindowItemsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ClientPlayerInteractEntityPacket interactEntityPacket = new ClientPlayerInteractEntityPacket(entityId, InteractAction.INTERACT, false);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, WindowAction.CLICK_ITEM, ClickItemParam.LEFT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, WindowAction.CLICK_ITEM, ClickItemParam.RIGHT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -2,13 +2,18 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_18_
|
||||
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.github.steveice10.mc.protocol.data.game.ClientCommand;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.HandPreference;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ClickItemAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ContainerActionType;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.SkinPart;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundChatPacket;
|
||||
@ -17,23 +22,31 @@ import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundKe
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLoginPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerPositionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundSetHealthPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddPlayerPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetContentPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundOpenScreenPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerStatusOnlyPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundSetCarriedItemPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.*;
|
||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||
import com.github.steveice10.packetlib.Session;
|
||||
import com.github.steveice10.packetlib.tcp.TcpClientSession;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.TextComponent;
|
||||
import net.kyori.adventure.text.TranslatableComponent;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ClientboundCustomPayloadPacket;
|
||||
@ -97,10 +110,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ClientboundPlayerPositionPacket packet = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
ServerboundAcceptTeleportationPacket acceptTeleportationPacket = new ServerboundAcceptTeleportationPacket(packet.getTeleportId());
|
||||
session.send(acceptTeleportationPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientboundPlayerPositionPacket positionRotationPacket = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerboundAcceptTeleportationPacket teleportConfirmPacket = new ServerboundAcceptTeleportationPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -145,6 +164,179 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ClientboundAddPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ClientboundAddPlayerPacket playerPacket = (ClientboundAddPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ClientboundAddPlayerPacket playerPacket = (ClientboundAddPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ServerboundMovePlayerPosPacket playerPositionPacket = new ServerboundMovePlayerPosPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ClientboundOpenScreenPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ClientboundContainerSetContentPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ServerboundInteractPacket interactEntityPacket = new ServerboundInteractPacket(entityId, InteractAction.INTERACT, false);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.LEFT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.RIGHT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {}
|
||||
|
||||
|
@ -2,13 +2,18 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_19;
|
||||
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.github.steveice10.mc.protocol.data.game.ClientCommand;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.HandPreference;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ClickItemAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ContainerActionType;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.SkinPart;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundCustomPayloadPacket;
|
||||
@ -17,11 +22,17 @@ import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLo
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundSystemChatPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerPositionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundSetHealthPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddPlayerPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetContentPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundOpenScreenPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerStatusOnlyPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundSetCarriedItemPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.*;
|
||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||
import com.github.steveice10.packetlib.Session;
|
||||
import com.github.steveice10.packetlib.tcp.TcpClientSession;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@ -32,6 +43,10 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ClientboundCustomPayloadPacket;
|
||||
@ -95,10 +110,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ClientboundPlayerPositionPacket packet = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
ServerboundAcceptTeleportationPacket acceptTeleportationPacket = new ServerboundAcceptTeleportationPacket(packet.getTeleportId());
|
||||
session.send(acceptTeleportationPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientboundPlayerPositionPacket positionRotationPacket = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerboundAcceptTeleportationPacket teleportConfirmPacket = new ServerboundAcceptTeleportationPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -143,6 +164,179 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ClientboundAddPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ClientboundAddPlayerPacket playerPacket = (ClientboundAddPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ClientboundAddPlayerPacket playerPacket = (ClientboundAddPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ServerboundMovePlayerPosPacket playerPositionPacket = new ServerboundMovePlayerPosPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ClientboundOpenScreenPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ClientboundContainerSetContentPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ServerboundInteractPacket interactEntityPacket = new ServerboundInteractPacket(entityId, InteractAction.INTERACT, false);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.LEFT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.RIGHT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -2,13 +2,18 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_19_
|
||||
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.github.steveice10.mc.protocol.data.game.ClientCommand;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.HandPreference;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ClickItemAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ContainerActionType;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.SkinPart;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundCustomPayloadPacket;
|
||||
@ -17,11 +22,17 @@ import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLo
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundSystemChatPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerPositionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundSetHealthPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddPlayerPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetContentPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundOpenScreenPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerStatusOnlyPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundSetCarriedItemPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.*;
|
||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||
import com.github.steveice10.packetlib.Session;
|
||||
import com.github.steveice10.packetlib.tcp.TcpClientSession;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@ -32,6 +43,10 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ClientboundCustomPayloadPacket;
|
||||
@ -95,10 +110,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ClientboundPlayerPositionPacket packet = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
ServerboundAcceptTeleportationPacket acceptTeleportationPacket = new ServerboundAcceptTeleportationPacket(packet.getTeleportId());
|
||||
session.send(acceptTeleportationPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientboundPlayerPositionPacket positionRotationPacket = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerboundAcceptTeleportationPacket teleportConfirmPacket = new ServerboundAcceptTeleportationPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -143,6 +164,179 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ClientboundAddPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ClientboundAddPlayerPacket playerPacket = (ClientboundAddPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ClientboundAddPlayerPacket playerPacket = (ClientboundAddPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ServerboundMovePlayerPosPacket playerPositionPacket = new ServerboundMovePlayerPosPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ClientboundOpenScreenPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ClientboundContainerSetContentPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ServerboundInteractPacket interactEntityPacket = new ServerboundInteractPacket(entityId, InteractAction.INTERACT, false);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.LEFT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.RIGHT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -2,13 +2,18 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_19_
|
||||
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.github.steveice10.mc.protocol.data.game.ClientCommand;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.HandPreference;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ClickItemAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ContainerActionType;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.SkinPart;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundCustomPayloadPacket;
|
||||
@ -17,11 +22,17 @@ import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLo
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundSystemChatPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerPositionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundSetHealthPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddPlayerPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetContentPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundOpenScreenPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.*;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerStatusOnlyPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundSetCarriedItemPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.*;
|
||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||
import com.github.steveice10.packetlib.Session;
|
||||
import com.github.steveice10.packetlib.tcp.TcpClientSession;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@ -32,6 +43,10 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ClientboundCustomPayloadPacket;
|
||||
@ -95,10 +110,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ClientboundPlayerPositionPacket packet = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
ServerboundAcceptTeleportationPacket acceptTeleportationPacket = new ServerboundAcceptTeleportationPacket(packet.getTeleportId());
|
||||
session.send(acceptTeleportationPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientboundPlayerPositionPacket positionRotationPacket = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerboundAcceptTeleportationPacket teleportConfirmPacket = new ServerboundAcceptTeleportationPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -143,6 +164,179 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ClientboundAddPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ClientboundAddPlayerPacket playerPacket = (ClientboundAddPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ClientboundAddPlayerPacket playerPacket = (ClientboundAddPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ServerboundMovePlayerPosPacket playerPositionPacket = new ServerboundMovePlayerPosPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ClientboundOpenScreenPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ClientboundContainerSetContentPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ServerboundInteractPacket interactEntityPacket = new ServerboundInteractPacket(entityId, InteractAction.INTERACT, false);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.LEFT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.RIGHT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -2,13 +2,18 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_20_
|
||||
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.github.steveice10.mc.protocol.data.game.ClientCommand;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.HandPreference;
|
||||
import com.github.steveice10.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ClickItemAction;
|
||||
import com.github.steveice10.mc.protocol.data.game.inventory.ContainerActionType;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import com.github.steveice10.mc.protocol.data.game.setting.SkinPart;
|
||||
import com.github.steveice10.mc.protocol.packet.common.clientbound.ClientboundCustomPayloadPacket;
|
||||
@ -20,14 +25,20 @@ import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLo
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundSystemChatPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerPositionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundSetHealthPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddEntityPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundContainerSetContentPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.ClientboundOpenScreenPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundChatCommandPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundChatPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundClientCommandPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundCommandSuggestionPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerPosRotPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundMovePlayerStatusOnlyPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.ServerboundSetCarriedItemPacket;
|
||||
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.*;
|
||||
import com.github.steveice10.opennbt.tag.builtin.CompoundTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.ListTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.StringTag;
|
||||
import com.github.steveice10.opennbt.tag.builtin.Tag;
|
||||
import com.github.steveice10.packetlib.Session;
|
||||
import com.github.steveice10.packetlib.tcp.TcpClientSession;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@ -39,6 +50,10 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ClientboundCustomPayloadPacket;
|
||||
@ -102,10 +117,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ClientboundPlayerPositionPacket packet = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
ServerboundAcceptTeleportationPacket acceptTeleportationPacket = new ServerboundAcceptTeleportationPacket(packet.getTeleportId());
|
||||
session.send(acceptTeleportationPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientboundPlayerPositionPacket positionRotationPacket = (ClientboundPlayerPositionPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerboundAcceptTeleportationPacket teleportConfirmPacket = new ServerboundAcceptTeleportationPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -150,6 +171,185 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ClientboundAddEntityPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ClientboundAddEntityPacket playerPacket = (ClientboundAddEntityPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ClientboundAddEntityPacket playerPacket = (ClientboundAddEntityPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ServerboundMovePlayerPosPacket playerPositionPacket = new ServerboundMovePlayerPosPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ClientboundOpenScreenPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ClientboundOpenScreenPacket windowPacket = (ClientboundOpenScreenPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ClientboundContainerSetContentPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getContainerId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ClientboundContainerSetContentPacket windowItemsPacket = (ClientboundContainerSetContentPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
if (nbtData == null) {
|
||||
return null;
|
||||
}
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNbt();
|
||||
if (nbtData == null) {
|
||||
return null;
|
||||
}
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ServerboundInteractPacket interactEntityPacket = new ServerboundInteractPacket(entityId, InteractAction.INTERACT, false);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.LEFT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
TcpClientSession session = (TcpClientSession) client;
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ServerboundContainerClickPacket windowActionPacket = new ServerboundContainerClickPacket(windowId, 6, slot, ContainerActionType.CLICK_ITEM, ClickItemAction.RIGHT_CLICK, item, new HashMap<>());
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_7_X
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.CatAntiCheat.CatAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
@ -10,18 +11,21 @@ import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.spacehq.mc.protocol.data.game.EntityMetadata;
|
||||
import org.spacehq.mc.protocol.data.game.ItemStack;
|
||||
import org.spacehq.mc.protocol.data.message.Message;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientChangeHeldItemPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerKeepAlivePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerUpdateHealthPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
|
||||
import org.spacehq.opennbt.NBTIO;
|
||||
import org.spacehq.opennbt.tag.builtin.CompoundTag;
|
||||
import org.spacehq.opennbt.tag.builtin.ListTag;
|
||||
@ -33,11 +37,13 @@ import org.spacehq.packetlib.io.stream.StreamNetOutput;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ServerPluginMessagePacket;
|
||||
@ -107,7 +113,13 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
Session session = ((Client) client).getSession();
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerPlayerPositionRotationPacket positionRotationPacket = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -152,6 +164,188 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ServerSpawnPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
|
||||
for (EntityMetadata metadata:playerPacket.getMetadata()) {
|
||||
if (metadata.getValue().toString().contains(checkName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
Session session = ((Client) client).getSession();
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ClientPlayerPositionPacket playerPositionPacket = new ClientPlayerPositionPacket(true, selfX, selfY, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ServerOpenWindowPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getSlots();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ServerWindowItemsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ClientPlayerInteractEntityPacket interactEntityPacket = new ClientPlayerInteractEntityPacket(entityId, ClientPlayerInteractEntityPacket.Action.INTERACT);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, ClientWindowActionPacket.Action.CLICK_ITEM, ClientWindowActionPacket.ClickItemParam.LEFT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, ClientWindowActionPacket.Action.CLICK_ITEM, ClientWindowActionPacket.ClickItemParam.RIGHT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
String packetName = packet.getClass().getSimpleName();
|
||||
|
@ -3,6 +3,7 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_8_X
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.CatAntiCheat.CatAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
@ -10,21 +11,27 @@ import cn.serendipityr.EndMinecraftPlusV2.Tools.LogUtil;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.spacehq.mc.protocol.data.game.EntityMetadata;
|
||||
import org.spacehq.mc.protocol.data.game.ItemStack;
|
||||
import org.spacehq.mc.protocol.data.game.values.ClientRequest;
|
||||
import org.spacehq.mc.protocol.data.game.values.entity.player.InteractAction;
|
||||
import org.spacehq.mc.protocol.data.game.values.setting.ChatVisibility;
|
||||
import org.spacehq.mc.protocol.data.game.values.setting.SkinPart;
|
||||
import org.spacehq.mc.protocol.data.game.values.window.ClickItemParam;
|
||||
import org.spacehq.mc.protocol.data.game.values.window.WindowAction;
|
||||
import org.spacehq.mc.protocol.data.message.Message;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientChangeHeldItemPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerKeepAlivePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerUpdateHealthPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
|
||||
import org.spacehq.opennbt.NBTIO;
|
||||
import org.spacehq.opennbt.tag.builtin.CompoundTag;
|
||||
import org.spacehq.opennbt.tag.builtin.ListTag;
|
||||
@ -38,9 +45,14 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ServerPluginMessagePacket;
|
||||
@ -110,7 +122,13 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
Session session = ((Client) client).getSession();
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerPlayerPositionRotationPacket positionRotationPacket = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -155,6 +173,188 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ServerSpawnPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
|
||||
for (EntityMetadata metadata:playerPacket.getMetadata()) {
|
||||
if (metadata.getValue().toString().contains(checkName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
Session session = ((Client) client).getSession();
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ClientPlayerPositionPacket playerPositionPacket = new ClientPlayerPositionPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ServerOpenWindowPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getSlots();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ServerWindowItemsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ClientPlayerInteractEntityPacket interactEntityPacket = new ClientPlayerInteractEntityPacket(entityId, InteractAction.INTERACT);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.LEFT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.RIGHT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
String packetName = packet.getClass().getSimpleName();
|
||||
|
@ -3,6 +3,7 @@ package cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.VersionSupport.P1_9_X
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AnotherStarAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.ACProtocol.AntiCheat3;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.AdvanceModule.CatAntiCheat.CatAntiCheat;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Bot.BotManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketManager;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.UniverseMethods;
|
||||
import cn.serendipityr.EndMinecraftPlusV2.Tools.ConfigUtil;
|
||||
@ -11,15 +12,18 @@ import cn.serendipityr.EndMinecraftPlusV2.Tools.OtherUtils;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.spacehq.mc.protocol.data.game.ClientRequest;
|
||||
import org.spacehq.mc.protocol.data.game.entity.metadata.EntityMetadata;
|
||||
import org.spacehq.mc.protocol.data.game.entity.metadata.ItemStack;
|
||||
import org.spacehq.mc.protocol.data.game.entity.player.Hand;
|
||||
import org.spacehq.mc.protocol.data.game.entity.player.InteractAction;
|
||||
import org.spacehq.mc.protocol.data.game.setting.ChatVisibility;
|
||||
import org.spacehq.mc.protocol.data.game.setting.SkinPart;
|
||||
import org.spacehq.mc.protocol.data.game.window.ClickItemParam;
|
||||
import org.spacehq.mc.protocol.data.game.window.WindowAction;
|
||||
import org.spacehq.mc.protocol.data.message.Message;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerChangeHeldItemPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerMovementPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.ClientPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.player.*;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.window.ClientWindowActionPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerChatPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
|
||||
@ -27,6 +31,9 @@ import org.spacehq.mc.protocol.packet.ingame.server.ServerKeepAlivePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.ServerPluginMessagePacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerHealthPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.player.ServerPlayerPositionRotationPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.entity.spawn.ServerSpawnPlayerPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerOpenWindowPacket;
|
||||
import org.spacehq.mc.protocol.packet.ingame.server.window.ServerWindowItemsPacket;
|
||||
import org.spacehq.opennbt.NBTIO;
|
||||
import org.spacehq.opennbt.tag.builtin.CompoundTag;
|
||||
import org.spacehq.opennbt.tag.builtin.ListTag;
|
||||
@ -40,9 +47,14 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.MultipleVersion.Packet.PacketHandler {
|
||||
private double selfX = 0;
|
||||
private double selfY = 0;
|
||||
private double selfZ = 0;
|
||||
|
||||
@Override
|
||||
public boolean checkServerPluginMessagePacket(Object packet) {
|
||||
return packet instanceof ServerPluginMessagePacket;
|
||||
@ -112,10 +124,16 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
@Override
|
||||
public void handleServerPlayerPositionRotationPacket(Object client, Object recvPacket, String username) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ServerPlayerPositionRotationPacket packet = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(packet.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ServerPlayerPositionRotationPacket positionRotationPacket = (ServerPlayerPositionRotationPacket) recvPacket;
|
||||
selfX = positionRotationPacket.getX();
|
||||
selfY = positionRotationPacket.getY();
|
||||
selfZ = positionRotationPacket.getZ();
|
||||
if (ConfigUtil.PacketHandlerMove) {
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
ClientTeleportConfirmPacket teleportConfirmPacket = new ClientTeleportConfirmPacket(positionRotationPacket.getTeleportId());
|
||||
session.send(teleportConfirmPacket);
|
||||
sendClientPlayerMovementPacket(session, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -160,6 +178,188 @@ public class PacketHandler implements cn.serendipityr.EndMinecraftPlusV2.Multipl
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerSpawnPlayerPacket(Object packet) {
|
||||
return packet instanceof ServerSpawnPlayerPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkSpawnPlayerName(Object packet, String checkName) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
|
||||
for (EntityMetadata metadata:playerPacket.getMetadata()) {
|
||||
if (metadata.getValue().toString().contains(checkName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double[] getSpawnPlayerLocation(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return new Double[]{playerPacket.getX(), playerPacket.getY(), playerPacket.getZ()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpawnPlayerEntityId(Object packet) {
|
||||
ServerSpawnPlayerPacket playerPacket = (ServerSpawnPlayerPacket) packet;
|
||||
return playerPacket.getEntityId();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void moveToLocation(Object client, Double[] targetLocation, double moveSpeed) {
|
||||
Session session = ((Client) client).getSession();
|
||||
|
||||
// 设置初始目标位置
|
||||
double targetX = targetLocation[0];
|
||||
double targetY = targetLocation[1];
|
||||
double targetZ = targetLocation[2];
|
||||
|
||||
if (!BotManager.positionList.containsKey(client)) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean movedLastTime = true; // 标记上次是否移动成功
|
||||
boolean moveYFirst = true; // 标记是否首先移动Y轴
|
||||
|
||||
// 持续移动直到接近目标位置
|
||||
while (true) {
|
||||
double previousX = selfX;
|
||||
double previousY = selfY;
|
||||
double previousZ = selfZ;
|
||||
|
||||
double distanceX = selfX - targetX;
|
||||
double distanceY = selfY - targetY;
|
||||
double distanceZ = selfZ - targetZ;
|
||||
double totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY + distanceZ * distanceZ);
|
||||
|
||||
// 检查是否已经足够接近目标
|
||||
if (totalDistance <= moveSpeed) {
|
||||
break; // 已经接近目标,退出循环
|
||||
}
|
||||
|
||||
if ((Math.abs(distanceY) > Math.abs(distanceX) && moveYFirst) || !movedLastTime) {
|
||||
// 优先移动Y轴,或者上次移动失败时尝试移动Y轴
|
||||
double stepRatioY = Math.min(moveSpeed / Math.abs(distanceY), 1.0);
|
||||
selfY -= distanceY * stepRatioY;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
} else {
|
||||
// 移动X轴和Z轴
|
||||
double stepRatioXZ = Math.min(moveSpeed / Math.sqrt(distanceX * distanceX + distanceZ * distanceZ), 1.0);
|
||||
selfX -= distanceX * stepRatioXZ;
|
||||
selfZ -= distanceZ * stepRatioXZ;
|
||||
moveYFirst = !moveYFirst; // 下次尝试另一个方向
|
||||
}
|
||||
|
||||
ClientPlayerPositionPacket playerPositionPacket = new ClientPlayerPositionPacket(true, selfX, selfY, selfZ);
|
||||
session.send(playerPositionPacket);
|
||||
|
||||
OtherUtils.doSleep(100); // 暂停以等待服务器响应
|
||||
|
||||
// 检查是否成功移动
|
||||
movedLastTime = (previousX != selfX || previousY != selfY || previousZ != selfZ);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerOpenWindowPacket(Object packet) {
|
||||
return packet instanceof ServerOpenWindowPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromServerOpenWindowPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowSlotsFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getSlots();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getWindowNameFromPacket(Object packet) {
|
||||
ServerOpenWindowPacket windowPacket = (ServerOpenWindowPacket) packet;
|
||||
return windowPacket.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean checkServerWindowItemsPacket(Object packet) {
|
||||
return packet instanceof ServerWindowItemsPacket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWindowIDFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getWindowId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getItemStackFromWindowItemsPacket(Object packet) {
|
||||
ServerWindowItemsPacket windowItemsPacket = (ServerWindowItemsPacket) packet;
|
||||
return windowItemsPacket.getItems();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getItemName(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Name") == null) {
|
||||
return null;
|
||||
}
|
||||
return ((StringTag) hashMap.get("Name")).getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getItemLore(Object itemStack) {
|
||||
if (itemStack == null) {
|
||||
return null;
|
||||
}
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
CompoundTag nbtData = item.getNBT();
|
||||
HashMap<?, ?> hashMap = (HashMap<?, ?>) nbtData.get("display").getValue();
|
||||
if (hashMap.get("Lore") == null) {
|
||||
return null;
|
||||
}
|
||||
List<Tag> itemLore = ((ListTag) hashMap.get("Lore")).getValue();
|
||||
List<String> loreList = new ArrayList<>();
|
||||
for (Tag tag:itemLore) {
|
||||
loreList.add((String) tag.getValue());
|
||||
}
|
||||
return loreList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerInteractEntityPacket(Object client, int entityId, float[] location) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ClientPlayerInteractEntityPacket interactEntityPacket = new ClientPlayerInteractEntityPacket(entityId, InteractAction.INTERACT);
|
||||
session.send(interactEntityPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendLeftClickWindowItemPacket(Object client, int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.LEFT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendRightClickWindowItemPacket(Object client,int windowId, int slot, Object itemStack) {
|
||||
Session session = ((Client) client).getSession();
|
||||
ItemStack item = (ItemStack) itemStack;
|
||||
ClientWindowActionPacket windowActionPacket = new ClientWindowActionPacket(windowId, 6, slot, item, WindowAction.CLICK_ITEM, ClickItemParam.RIGHT_CLICK);
|
||||
session.send(windowActionPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleOtherPacket(Object packet) {
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user