удаление всех кейбиндов категории

Версия Minecraft
1.12.2
627
72
178
удаляю кейбинды из GameSettings#keyBindings с помощью ArrayUtils.removeAllOccurences. Они нормально пропадают до тех пор, пока одна из кейбинд-категорий не станет пустой. Если удалить все кейбинды в категории - крашит при открытии гуи управления.

например creative категория состоит из 2 элементов:
1 удалил - всё хорошо.
2 удалил - всё плохо.
Если удалить сначала 2, а потом 1 - тоже самое.
 
Краш-лог
[22:24:48] [Server thread/INFO] [minecraft/IntegratedServer]: Saving and pausing game...
[22:24:48] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'Новый мир'/overworld
[22:24:50] [Server thread/INFO] [minecraft/MinecraftServer]: Stopping server
[22:24:50] [Server thread/INFO] [minecraft/MinecraftServer]: Saving players
[22:24:50] [Server thread/INFO] [minecraft/MinecraftServer]: Saving worlds
[22:24:50] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'Новый мир'/overworld
[22:24:50] [Server thread/INFO] [FML]: Unloading dimension 0
[22:24:50] [Server thread/INFO] [FML]: Applying holder lookups
[22:24:50] [Server thread/INFO] [FML]: Holder lookups applied
[22:24:51] [Client thread/FATAL] [minecraft/Minecraft]: Reported exception thrown!
net.minecraft.util.ReportedException: Rendering screen
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1204) ~[EntityRenderer.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1194) ~[Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:437) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_201]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_201]
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: java.lang.NullPointerException
at net.minecraft.client.gui.GuiListExtended.updateItemPos(GuiListExtended.java:41) ~[GuiListExtended.class:?]
at net.minecraft.client.gui.GuiSlot.drawSelectionBox(GuiSlot.java:446) ~[GuiSlot.class:?]
at net.minecraft.client.gui.GuiSlot.drawScreen(GuiSlot.java:236) ~[GuiSlot.class:?]
at net.minecraft.client.gui.GuiControls.drawScreen(GuiControls.java:163) ~[GuiControls.class:?]
at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:396) ~[ForgeHooksClient.class:?]
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1177) ~[EntityRenderer.class:?]
... 15 more
[22:24:51] [Client thread/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: ---- Minecraft Crash Report ----
// Uh... Did I do that?

Time: 1/7/20 10:24 PM
Description: Rendering screen

java.lang.NullPointerException: Rendering screen
at net.minecraft.client.gui.GuiListExtended.updateItemPos(GuiListExtended.java:41)
at net.minecraft.client.gui.GuiSlot.drawSelectionBox(GuiSlot.java:446)
at net.minecraft.client.gui.GuiSlot.drawScreen(GuiSlot.java:236)
at net.minecraft.client.gui.GuiControls.drawScreen(GuiControls.java:163)
at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:396)
at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1177)
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1194)
at net.minecraft.client.Minecraft.run(Minecraft.java:437)
at net.minecraft.client.main.Main.main(Main.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
at GradleStart.main(GradleStart.java:25)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Client thread
Stacktrace:
at net.minecraft.client.gui.GuiListExtended.updateItemPos(GuiListExtended.java:41)
at net.minecraft.client.gui.GuiSlot.drawSelectionBox(GuiSlot.java:446)
at net.minecraft.client.gui.GuiSlot.drawScreen(GuiSlot.java:236)
at net.minecraft.client.gui.GuiControls.drawScreen(GuiControls.java:163)
at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:396)

-- Screen render details --
Details:
Screen name: net.minecraft.client.gui.GuiControls
Mouse location: Scaled: (289, 121). Absolute: (1158, 571)
Screen size: Scaled: (480, 265). Absolute: (1920, 1057). Scale factor of 4

-- Affected level --
Details:
Level name: MpServer
All players: 1 total; [EntityPlayerSP['Player6'/71, l='MpServer', x=-274.91, y=4.00, z=-137.28]]
Chunk stats: MultiplayerChunkCache: 623, 623
Level seed: 0
Level generator: ID 01 - flat, ver 0. Features enabled: false
Level generator options:
Level spawn location: World: (-269,4,-127), Chunk: (at 3,0,1 in -17,-8; contains blocks -272,0,-128 to -257,255,-113), Region: (-1,-1; contains chunks -32,-32 to -1,-1, blocks -512,0,-512 to -1,255,-1)
Level time: 94091 game time, 10305 day time
Level dimension: 0
Level storage version: 0x00000 - Unknown?
Level weather: Rain time: 0 (now: true), thunder time: 0 (now: false)
Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false
Forced entities: 18 total; [EntityPig['Свинья'/32, l='MpServer', x=-272.33, y=4.00, z=-105.78], EntityPlayerSP['Player6'/71, l='MpServer', x=-274.91, y=4.00, z=-137.28], EntitySheep['Овца'/35, l='MpServer', x=-266.26, y=4.00, z=-107.64], EntityItem['item.item.egg'/36, l='MpServer', x=-249.66, y=4.00, z=-134.67], EntityChicken['Курица'/39, l='MpServer', x=-238.27, y=4.00, z=-137.35], EntitySheep['Овца'/40, l='MpServer', x=-227.46, y=4.00, z=-93.73], EntitySheep['Овца'/44, l='MpServer', x=-211.59, y=4.00, z=-208.25], EntitySheep['Овца'/45, l='MpServer', x=-220.32, y=4.00, z=-178.21], EntityCow['Корова'/46, l='MpServer', x=-214.78, y=4.00, z=-139.46], EntityPig['Свинья'/47, l='MpServer', x=-222.78, y=4.00, z=-72.23], EntityChicken['Курица'/16, l='MpServer', x=-340.73, y=4.00, z=-165.12], EntityPig['Свинья'/21, l='MpServer', x=-324.53, y=4.00, z=-120.02], EntityChicken['Курица'/22, l='MpServer', x=-310.13, y=4.00, z=-203.07], EntityCow['Корова'/24, l='MpServer', x=-311.81, y=4.00, z=-151.40], EntityPig['Свинья'/25, l='MpServer', x=-305.72, y=4.00, z=-128.45], EntityPig['Свинья'/28, l='MpServer', x=-293.54, y=4.00, z=-135.49], EntityHorse['Лошадь'/29, l='MpServer', x=-301.06, y=4.00, z=-67.91], EntityChicken['Курица'/31, l='MpServer', x=-280.46, y=4.00, z=-136.12]]
Retry entities: 0 total; []
Server brand: fml,forge
Server type: Integrated singleplayer server
Stacktrace:
at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:461)
at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2871)
at net.minecraft.client.Minecraft.run(Minecraft.java:458)
at net.minecraft.client.main.Main.main(Main.java:118)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
at GradleStart.main(GradleStart.java:25)
Краш-лог:
[22:24:48] [Server thread/INFO] [minecraft/IntegratedServer]: Saving and pausing game...
[22:24:48] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'Новый мир'/overworld
[22:24:50] [Server thread/INFO] [minecraft/MinecraftServer]: Stopping server
[22:24:50] [Server thread/INFO] [minecraft/MinecraftServer]: Saving players
[22:24:50] [Server thread/INFO] [minecraft/MinecraftServer]: Saving worlds
[22:24:50] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'Новый мир'/overworld
[22:24:50] [Server thread/INFO] [FML]: Unloading dimension 0
[22:24:50] [Server thread/INFO] [FML]: Applying holder lookups
[22:24:50] [Server thread/INFO] [FML]: Holder lookups applied
[22:24:51] [Client thread/FATAL] [minecraft/Minecraft]: Reported exception thrown!
net.minecraft.util.ReportedException: Rendering screen
	at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1204) ~[EntityRenderer.class:?]
	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1194) ~[Minecraft.class:?]
	at net.minecraft.client.Minecraft.run(Minecraft.java:437) [Minecraft.class:?]
	at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_201]
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_201]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_201]
	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
	at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: java.lang.NullPointerException
	at net.minecraft.client.gui.GuiListExtended.updateItemPos(GuiListExtended.java:41) ~[GuiListExtended.class:?]
	at net.minecraft.client.gui.GuiSlot.drawSelectionBox(GuiSlot.java:446) ~[GuiSlot.class:?]
	at net.minecraft.client.gui.GuiSlot.drawScreen(GuiSlot.java:236) ~[GuiSlot.class:?]
	at net.minecraft.client.gui.GuiControls.drawScreen(GuiControls.java:163) ~[GuiControls.class:?]
	at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:396) ~[ForgeHooksClient.class:?]
	at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1177) ~[EntityRenderer.class:?]
	... 15 more
[22:24:51] [Client thread/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: ---- Minecraft Crash Report ----
// Uh... Did I do that?

Time: 1/7/20 10:24 PM
Description: Rendering screen

java.lang.NullPointerException: Rendering screen
	at net.minecraft.client.gui.GuiListExtended.updateItemPos(GuiListExtended.java:41)
	at net.minecraft.client.gui.GuiSlot.drawSelectionBox(GuiSlot.java:446)
	at net.minecraft.client.gui.GuiSlot.drawScreen(GuiSlot.java:236)
	at net.minecraft.client.gui.GuiControls.drawScreen(GuiControls.java:163)
	at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:396)
	at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1177)
	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1194)
	at net.minecraft.client.Minecraft.run(Minecraft.java:437)
	at net.minecraft.client.main.Main.main(Main.java:118)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
	at GradleStart.main(GradleStart.java:25)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Client thread
Stacktrace:
	at net.minecraft.client.gui.GuiListExtended.updateItemPos(GuiListExtended.java:41)
	at net.minecraft.client.gui.GuiSlot.drawSelectionBox(GuiSlot.java:446)
	at net.minecraft.client.gui.GuiSlot.drawScreen(GuiSlot.java:236)
	at net.minecraft.client.gui.GuiControls.drawScreen(GuiControls.java:163)
	at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:396)

-- Screen render details --
Details:
	Screen name: net.minecraft.client.gui.GuiControls
	Mouse location: Scaled: (289, 121). Absolute: (1158, 571)
	Screen size: Scaled: (480, 265). Absolute: (1920, 1057). Scale factor of 4

-- Affected level --
Details:
	Level name: MpServer
	All players: 1 total; [EntityPlayerSP['Player6'/71, l='MpServer', x=-274.91, y=4.00, z=-137.28]]
	Chunk stats: MultiplayerChunkCache: 623, 623
	Level seed: 0
	Level generator: ID 01 - flat, ver 0. Features enabled: false
	Level generator options: 
	Level spawn location: World: (-269,4,-127), Chunk: (at 3,0,1 in -17,-8; contains blocks -272,0,-128 to -257,255,-113), Region: (-1,-1; contains chunks -32,-32 to -1,-1, blocks -512,0,-512 to -1,255,-1)
	Level time: 94091 game time, 10305 day time
	Level dimension: 0
	Level storage version: 0x00000 - Unknown?
	Level weather: Rain time: 0 (now: true), thunder time: 0 (now: false)
	Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false
	Forced entities: 18 total; [EntityPig['Свинья'/32, l='MpServer', x=-272.33, y=4.00, z=-105.78], EntityPlayerSP['Player6'/71, l='MpServer', x=-274.91, y=4.00, z=-137.28], EntitySheep['Овца'/35, l='MpServer', x=-266.26, y=4.00, z=-107.64], EntityItem['item.item.egg'/36, l='MpServer', x=-249.66, y=4.00, z=-134.67], EntityChicken['Курица'/39, l='MpServer', x=-238.27, y=4.00, z=-137.35], EntitySheep['Овца'/40, l='MpServer', x=-227.46, y=4.00, z=-93.73], EntitySheep['Овца'/44, l='MpServer', x=-211.59, y=4.00, z=-208.25], EntitySheep['Овца'/45, l='MpServer', x=-220.32, y=4.00, z=-178.21], EntityCow['Корова'/46, l='MpServer', x=-214.78, y=4.00, z=-139.46], EntityPig['Свинья'/47, l='MpServer', x=-222.78, y=4.00, z=-72.23], EntityChicken['Курица'/16, l='MpServer', x=-340.73, y=4.00, z=-165.12], EntityPig['Свинья'/21, l='MpServer', x=-324.53, y=4.00, z=-120.02], EntityChicken['Курица'/22, l='MpServer', x=-310.13, y=4.00, z=-203.07], EntityCow['Корова'/24, l='MpServer', x=-311.81, y=4.00, z=-151.40], EntityPig['Свинья'/25, l='MpServer', x=-305.72, y=4.00, z=-128.45], EntityPig['Свинья'/28, l='MpServer', x=-293.54, y=4.00, z=-135.49], EntityHorse['Лошадь'/29, l='MpServer', x=-301.06, y=4.00, z=-67.91], EntityChicken['Курица'/31, l='MpServer', x=-280.46, y=4.00, z=-136.12]]
	Retry entities: 0 total; []
	Server brand: fml,forge
	Server type: Integrated singleplayer server
Stacktrace:
	at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:461)
	at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2871)
	at net.minecraft.client.Minecraft.run(Minecraft.java:458)
	at net.minecraft.client.main.Main.main(Main.java:118)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97)
	at GradleStart.main(GradleStart.java:25)
Последнее редактирование:
Решение
@stflowerg :l, предлагаю свое решение, которое использовано в моде ReBind:
Java:
    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());
        }...

tox1cozZ

aka Agravaine
8,455
598
2,892
Java:
@SideOnly(Side.CLIENT)
    public static void removeKeyBinding(KeyBinding key){
        Minecraft mc = Minecraft.getMinecraft();
        mc.gameSettings.keyBindings = ArrayUtils.removeElement(mc.gameSettings.keyBindings, key);
        KeyBinding.keybindArray.remove(key);
        boolean lastKeyInCategory = true;
        for(KeyBinding bind : (List<KeyBinding>)KeyBinding.keybindArray){
            if(bind.getKeyCategory().equals(key.getKeyCategory())){
                lastKeyInCategory = false;
                break;
            }
        }
        if(lastKeyInCategory){
            KeyBinding.keybindSet.remove(key.getKeyCategory());
        }
        key.setKeyCode(0);
        KeyBinding.resetKeyBindingArrayAndHash();
    }
 
627
72
178
пришлось метод чуть переработать
Java:
 @SideOnly(Side.CLIENT)
    public static void removeKeyBinding(KeyBinding key) {
    Minecraft mc = Minecraft.getMinecraft();
    mc.gameSettings.keyBindings = ArrayUtils.removeElement(mc.gameSettings.keyBindings, key);
    KeyBinding.KEYBIND_ARRAY.remove(key);
    boolean lastKeyInCategory = true;
    for (KeyBinding bind : KeyBinding.KEYBIND_ARRAY.values()) {
        if (bind.getKeyCategory().equals(key.getKeyCategory())) {
        lastKeyInCategory = false;
        break;
        }
    }
    if (lastKeyInCategory) {
        KeyBinding.KEYBIND_SET.remove(key.getKeyCategory());
    }
    key.setKeyCode(0);
    KeyBinding.resetKeyBindingArrayAndHash();
    }
Всё равно краш...
(маппинги snapshot_20170624, у меня таких переменных как у тебя нет)
 
627
72
178
Кому надо - полный код:
Java:
GameSettings gs = Minecraft.getMinecraft().gameSettings;
    List<KeyBinding> array = Arrays.asList(new KeyBinding[] { gs.keyBindAdvancements, gs.keyBindLoadToolbar,
        gs.keyBindSaveToolbar, gs.keyBindScreenshot, gs.keyBindSmoothCamera, gs.keyBindSneak, gs.keyBindSprint,
        gs.keyBindSpectatorOutlines, gs.keyBindSwapHands, gs.keyBindTogglePerspective });
    Arrays.asList(gs.keyBindings).stream()
        .filter(key -> array.contains(key) || Arrays.asList(gs.keyBindsHotbar).contains(key))
        .forEach(key -> ClientEvents.removeKeyBinding((KeyBinding) key));
postInit-метод в ClientProxy
ClientEvents#removeKeyBinding() в предыдущем ответе.
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Что за дичь... Почему тогда просто вызов метода крашит, а в цикле не крашит?
Ну и да, говнокод:
Arrays.asList(gs.keyBindings).stream() меняем на Stream.of(gs.keyBindings).
Arrays.asList(gs.keyBindsHotbar).contains(key) меняем на ArrayUtils.contains(gs.keyBindsHotbar, key).
 
243
28
202
@stflowerg :l, предлагаю свое решение, которое использовано в моде ReBind:
Java:
    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()]);
    }


Использование:
Java:
    //TODO Test
    public static void removeKeybindings() {
        List<KeyBinding> toRemove = new ArrayList<>();

        //'Creative Mode' Category

        toRemove.add(Minecraft.getMinecraft().gameSettings.keyBindLoadToolbar);
        toRemove.add(Minecraft.getMinecraft().gameSettings.keyBindSaveToolbar);

        //'Multiplayer' Category

        toRemove.add(Minecraft.getMinecraft().gameSettings.keyBindPlayerList);
        toRemove.add(Minecraft.getMinecraft().gameSettings.keyBindChat);
        toRemove.add(Minecraft.getMinecraft().gameSettings.keyBindCommand);

        removeKeyBindings(toRemove);
    }


Думаю переделать метод под удаление одной клавиши не составит труда.
 
Сверху