mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-13 00:37:52 +00:00
Fix conflicting keybindings not having the correct click count set. #9360
This commit is contained in:
1 parent
03a505a3f2
commit
cf3d42ef38
4 files changed
+82
-1
No files matched your search
@@ -12,6 +12,15 @@
|
||||
private static final Set<String> f_90811_ = Sets.newHashSet();
|
||||
public static final String f_167805_ = "key.categories.movement";
|
||||
public static final String f_167806_ = "key.categories.misc";
|
||||
@@ -41,7 +_,7 @@
|
||||
private int f_90818_;
|
||||
|
||||
public static void m_90835_(InputConstants.Key p_90836_) {
|
||||
- KeyMapping keymapping = f_90810_.get(p_90836_);
|
||||
+ for (KeyMapping keymapping : f_90810_.getAll(p_90836_))
|
||||
if (keymapping != null) {
|
||||
++keymapping.f_90818_;
|
||||
}
|
||||
@@ -49,7 +_,7 @@
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ public class KeyMappingLookup
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated(forRemoval = true)
|
||||
@Nullable
|
||||
public KeyMapping get(InputConstants.Key keyCode)
|
||||
{
|
||||
@@ -59,6 +60,16 @@ public class KeyMappingLookup
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all active keys associated with the given key code and the active
|
||||
* modifiers and conflict context.
|
||||
*
|
||||
* This could probably be renamed to something like getActiveMappings, but
|
||||
* that would be a breaking change.
|
||||
*
|
||||
* @param keyCode the key being pressed
|
||||
* @return the list of key mappings
|
||||
*/
|
||||
public List<KeyMapping> getAll(InputConstants.Key keyCode)
|
||||
{
|
||||
List<KeyMapping> matchingBindings = new ArrayList<KeyMapping>();
|
||||
@@ -67,7 +78,11 @@ public class KeyMappingLookup
|
||||
Collection<KeyMapping> bindings = bindingsMap.get(keyCode);
|
||||
if (bindings != null)
|
||||
{
|
||||
matchingBindings.addAll(bindings);
|
||||
for (KeyMapping binding : bindings)
|
||||
{
|
||||
if (binding.isConflictContextAndModifierActive())
|
||||
matchingBindings.add(binding);
|
||||
}
|
||||
}
|
||||
}
|
||||
return matchingBindings;
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) Forge Development LLC and contributors
|
||||
* SPDX-License-Identifier: LGPL-2.1-only
|
||||
*/
|
||||
|
||||
package net.minecraftforge.debug;
|
||||
|
||||
import com.mojang.blaze3d.platform.InputConstants;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLConstructModEvent;
|
||||
|
||||
@Mod("keymapping_test")
|
||||
public class KeyMappingTest
|
||||
{
|
||||
@Mod.EventBusSubscriber(modid = "keymapping_test", value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
public static class ClientStuff {
|
||||
// these are two separate keys to stand in for keys added by different
|
||||
// mods that each do something similar with a held item from the
|
||||
// respective mod, so the user wants them on the same physical key.
|
||||
static KeyMapping stickKey = new KeyMapping("stick_key", InputConstants.KEY_BACKSLASH, KeyMapping.CATEGORY_MISC);
|
||||
static KeyMapping rockKey = new KeyMapping("rock_key", InputConstants.KEY_BACKSLASH, KeyMapping.CATEGORY_MISC);
|
||||
@SubscribeEvent
|
||||
public static void init(FMLConstructModEvent event) {
|
||||
MinecraftForge.EVENT_BUS.addListener(ClientStuff::tick);
|
||||
}
|
||||
@SubscribeEvent
|
||||
public static void initKeys(RegisterKeyMappingsEvent event) {
|
||||
event.register(stickKey);
|
||||
event.register(rockKey);
|
||||
}
|
||||
public static void tick(TickEvent.ClientTickEvent event) {
|
||||
if(event.phase != TickEvent.Phase.START) return;
|
||||
if(stickKey.consumeClick()) {
|
||||
Player player = Minecraft.getInstance().player;
|
||||
if(player != null && player.getMainHandItem().is(Items.STICK))
|
||||
player.sendSystemMessage(Component.literal("stick found!"));
|
||||
}
|
||||
if(rockKey.consumeClick()) {
|
||||
Player player = Minecraft.getInstance().player;
|
||||
if(player != null && player.getMainHandItem().is(Items.COBBLESTONE))
|
||||
player.sendSystemMessage(Component.literal("rock found!"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -297,6 +297,8 @@ modId="chunk_event_load_new_chunk_test"
|
||||
modId="alter_ground_event_test"
|
||||
[[mods]]
|
||||
modId="custom_fluid_container_test"
|
||||
[[mods]]
|
||||
modId="keymapping_test"
|
||||
|
||||
|
||||
# ADD ABOVE THIS LINE
|
||||
Reference in new issue
Block a user