Запретить садится на шифт?

Версия Minecraft
1.12.2
API
Forge
67
1
0
Как запретить игрокам садится на шифт? Тоесть игрок нажимает на шифт и ничего не происходит.
 
116
13
13
В качестве рабочего варианта можно во время загрузки клиента удалить необходимые тебе бинды из настроек, как это сделано тут:
 
67
1
0
Java:
@SubscribeEvent
    public void onEntityJoinWorld(PlayerEvent.PlayerLoggedInEvent event) {
        Entity entity = event.player;

        if (!entity.world.isRemote && entity instanceof EntityPlayerMP) {
            List<KeyBinding> toRemove = new ArrayList<>();
            GameSettings gs = Minecraft.getMinecraft().gameSettings;;
            toRemove.add(gs.keyBindSneak);
            removeKeyBindings(toRemove);
        }
    }


public static void removeKeyBindings(List<KeyBinding> toRemove) {
        List<KeyBinding> keyBindingsList = new ArrayList<>(Arrays.asList(Minecraft.getMinecraft().gameSettings.keyBindings));

        Set<String> categories = new HashSet<>();

        Iterator<KeyBinding> iterator = keyBindingsList.iterator();
        KeyBinding keyBinding;
        while (iterator.hasNext()) {
            keyBinding = iterator.next();
            if (toRemove.contains(keyBinding)) {
                keyBinding.setKeyCode(0);
                iterator.remove();
            } else
                categories.add(keyBinding.getKeyCategory());
        }

        KeyBinding.getKeybinds().retainAll(categories);
        Minecraft.getMinecraft().gameSettings.keyBindings = keyBindingsList.toArray(new KeyBinding[keyBindingsList.size()]);
    }


Сделал так. Действительно, в Управлении Шифт пропадает (Имею ввиду строчка Sneak с возможностью назначить клавишу)
Но шифт всё ещё можно использовать, нажимаю на шифт и встаю на шифт без проблем
 
116
13
13
@SubscribeEvent public void onEntityJoinWorld(PlayerEvent.PlayerLoggedInEvent event) { Entity entity = event.player; if (!entity.world.isRemote && entity instanceof EntityPlayerMP) { List<KeyBinding> toRemove = new ArrayList<>(); GameSettings gs = Minecraft.getMinecraft().gameSettings;; toRemove.add(gs.keyBindSneak); removeKeyBindings(toRemove); } }
Только ты не учел, что вырезание биндов - это онли клиентская часть, поэтому создание проверок и действий на стороне сервера может привести вот к таким результатам.
Я же не просто так сказал вырезать это во время загрузки клиента (FMLInitializationEvent).
 
попробуй отменить отправку или получение пакета, где есть Action START_SNEAKING. Я не помню уже какой там пакет был, помню только что он есть. Он же вроде еще отвечает за начало и конец ломания блока, начало и конец использования предметов

вот ивенты отправки/получения пакетов https://forums.minecraftforge.net/topic/74173-on-packet-sendrecieve-events/
 
Сверху