Вопрос ProtocolLib | фикс наковальни

Версия Minecraft
1.20.X

Artur001

Пользователь
Сообщения
17
дарова, крч пишу плуг на фикс "слишком дорого" в наковальне. делаю через protocollib, paper 1.21.4
вроде все норм сообщение пропало, только результат на милисекунду появляется а потом пропадает
Java:
@Override
public void onEnable() {
protocolManager = ProtocolLibrary.getProtocolManager();
getServer().getPluginManager().registerEvents(this, this);
}

@EventHandler
public void onAnvilPrepare(PrepareAnvilEvent e) {
sendPackets((Player) e.getView().getPlayer(), true);
}

@EventHandler
public void onAnvilClose(InventoryCloseEvent e) {
sendPackets((Player) e.getPlayer(), false);
}

private void sendPackets(Player player, boolean anvil) {
PacketContainer packet = protocolManager.createPacket(
com.comphenix.protocol.PacketType.Play.Server.ABILITIES
);

packet.getBooleans().write(3, anvil);
protocolManager.sendServerPacket(player, packet);
}
 
Последнее редактирование:
Попробуй через "подделку" окна с наковальней:

@Override
public void onEnable() {
protocolManager = ProtocolLibrary.getProtocolManager();
getServer().getPluginManager().registerEvents(this, this);
}

@EventHandler
public void onAnvilPrepare(PrepareAnvilEvent e) {
sendTooExpensivePacket((Player) e.getView().getPlayer(), false);
}

@EventHandler
public void onAnvilClose(InventoryCloseEvent e) {
if (e.getInventory() instanceof AnvilInventory) {
sendTooExpensivePacket((Player) e.getPlayer(), true);
}
}

private void sendTooExpensivePacket(Player player, boolean show) {
PacketContainer packet = protocolManager.createPacket(
PacketType.Play.Server.OPEN_WINDOW
);

if (show) {
// Восстанавливаем оригинальное окно
int containerId = ((CraftPlayer)player).getHandle().containerMenu.containerId;
packet.getIntegers()
.write(0, containerId + 1) // Увеличиваем ID контейнера
.write(1, 8); // Тип окна (8 - наковальня)
packet.getChatComponents()
.write(0, CraftChatMessage.fromString("Repair & Name")[0]); // Или оригинальное название
} else {
// Отправляем "фейковое" окно с невозможным ID
packet.getIntegers()
.write(0, Integer.MAX_VALUE)
.write(1, -1); // Несуществующий тип окна
packet.getChatComponents()
.write(0, CraftChatMessage.fromString("")[0]);
}

try {
protocolManager.sendServerPacket(player, packet);
} catch (Exception ex) {
ex.printStackTrace();
}
}
 
Назад
Сверху Снизу