Skip to content

Commit

Permalink
Reverse order of modifier priorities and improve tool keybindings
Browse files Browse the repository at this point in the history
Means that if you do not do shield strap, tool belt works without control. No tool belt or shield strap? Pockets works without shift
Inventory now shows lowest priority on top and higher at bottom
  • Loading branch information
KnightMiner committed Oct 4, 2022
1 parent 772fbcf commit 945f79e
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 33 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package slimeknights.tconstruct.library.modifiers.dynamic;

import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.player.Player;
import slimeknights.mantle.client.TooltipKey;
Expand All @@ -21,12 +22,18 @@ public InventoryMenuModifier(int size) {
super(size);
}

public InventoryMenuModifier(ResourceLocation key, int size) {
super(key, size);
}

@Override
public int getPriority() {
return 75; // run latest so the keybind does not prevent shield strap or tool belt
}

@Override
public boolean startArmorInteract(IToolStackView tool, int level, Player player, EquipmentSlot slot, TooltipKey modifier) {
if (modifier == TooltipKey.SHIFT) {
return ToolInventoryCapability.tryOpenContainer(player.getItemBySlot(slot), tool, player, slot).consumesAction();
}
return false;
return ToolInventoryCapability.tryOpenContainer(player.getItemBySlot(slot), tool, player, slot).consumesAction();
}

@SuppressWarnings("unchecked")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.function.Supplier;

/** Capability for a tool with an inventory */
Expand Down Expand Up @@ -68,7 +69,10 @@ private IInventoryModifier getInventory(int slot) {
IToolStackView tool = this.tool.get();
if (slot < getSlots()) {
int start = 0;
for (ModifierEntry entry : tool.getModifierList()) {
// iterate in reverse order, as that allows us to put shield strap/tool belt later in the UI without breaking the keybinds
List<ModifierEntry> modifiers = tool.getModifierList();
for (int i = modifiers.size() - 1; i >= 0; i--) {
ModifierEntry entry = modifiers.get(i);
IInventoryModifier inventory = entry.getModifier().getModule(IInventoryModifier.class);
if (inventory != null) {
int slots = inventory.getSlots(tool, entry.getLevel());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import slimeknights.tconstruct.library.tools.nbt.ToolStack;
import slimeknights.tconstruct.tools.menu.ToolContainerMenu;

import java.util.List;
import java.util.function.Function;

import static slimeknights.tconstruct.tools.menu.ToolContainerMenu.REPEAT_BACKGROUND_START;
Expand Down Expand Up @@ -138,8 +139,11 @@ protected void renderBg(PoseStack matrixStack, float partialTicks, int x, int y)
// draw slot patterns for all empty slots
int start = 0;
int maxSlots = menu.slots.size();

List<ModifierEntry> modifiers = tool.getModifierList();
modifiers:
for (ModifierEntry entry : tool.getModifierList()) {
for (int modIndex = modifiers.size() - 1; modIndex >= 0; modIndex--) {
ModifierEntry entry = modifiers.get(modIndex);
IInventoryModifier inventory = entry.getModifier().getModule(IInventoryModifier.class);
if (inventory != null) {
int level = entry.getLevel();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
import net.minecraft.world.item.ItemStack;
import slimeknights.mantle.client.TooltipKey;
import slimeknights.tconstruct.TConstruct;
import slimeknights.tconstruct.library.modifiers.dynamic.InventoryMenuModifier;
import slimeknights.tconstruct.library.modifiers.hooks.IArmorInteractModifier;
import slimeknights.tconstruct.library.modifiers.impl.InventoryModifier;
import slimeknights.tconstruct.library.recipe.partbuilder.Pattern;
import slimeknights.tconstruct.library.tools.capability.ToolInventoryCapability;
import slimeknights.tconstruct.library.tools.context.ToolRebuildContext;
Expand All @@ -22,7 +22,7 @@

import javax.annotation.Nullable;

public class ShieldStrapModifier extends InventoryModifier implements IArmorInteractModifier {
public class ShieldStrapModifier extends InventoryMenuModifier implements IArmorInteractModifier {
private static final ResourceLocation KEY = TConstruct.getResource("shield_strap");
private static final Pattern PATTERN = new Pattern(TConstruct.MOD_ID, "shield_plus");
public ShieldStrapModifier() {
Expand All @@ -31,7 +31,7 @@ public ShieldStrapModifier() {

@Override
public int getPriority() {
return 75; // after pockets
return 95; // before pockets and tool belt
}

@Override
Expand All @@ -42,6 +42,9 @@ public void addVolatileData(ToolRebuildContext context, int level, ModDataNBT vo

@Override
public boolean startArmorInteract(IToolStackView tool, int level, Player player, EquipmentSlot equipmentSlot, TooltipKey modifier) {
if (modifier == TooltipKey.SHIFT) {
return super.startArmorInteract(tool, level, player, equipmentSlot, modifier);
}
if (modifier == TooltipKey.NORMAL) {
if (player.level.isClientSide) {
return true;
Expand Down Expand Up @@ -91,14 +94,4 @@ public boolean startArmorInteract(IToolStackView tool, int level, Player player,
public Pattern getPattern(IToolStackView tool, int level, int slot, boolean hasStack) {
return hasStack ? null : PATTERN;
}

@SuppressWarnings("unchecked")
@Nullable
@Override
public <T> T getModule(Class<T> type) {
if (type == IArmorInteractModifier.class) {
return (T) this;
}
return super.getModule(type);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
import slimeknights.mantle.data.GenericLoaderRegistry.IGenericLoader;
import slimeknights.tconstruct.TConstruct;
import slimeknights.tconstruct.library.modifiers.Modifier;
import slimeknights.tconstruct.library.modifiers.dynamic.InventoryMenuModifier;
import slimeknights.tconstruct.library.modifiers.hooks.IArmorInteractModifier;
import slimeknights.tconstruct.library.modifiers.impl.InventoryModifier;
import slimeknights.tconstruct.library.modifiers.util.ModifierLevelDisplay;
import slimeknights.tconstruct.library.recipe.partbuilder.Pattern;
import slimeknights.tconstruct.library.recipe.tinkerstation.ValidatedResult;
Expand All @@ -37,7 +37,7 @@

import static slimeknights.tconstruct.library.tools.capability.ToolInventoryCapability.isBlacklisted;

public class ToolBeltModifier extends InventoryModifier implements IArmorInteractModifier {
public class ToolBeltModifier extends InventoryMenuModifier implements IArmorInteractModifier {
private static final Pattern PATTERN = new Pattern(TConstruct.MOD_ID, "tool_belt");
private static final ResourceLocation SLOT_OVERRIDE = TConstruct.getResource("tool_belt_override");

Expand Down Expand Up @@ -94,7 +94,7 @@ public Component getDisplayName(int level) {

@Override
public int getPriority() {
return 85; // after pockets, before shield strap
return 85; // after shield strap, before pockets
}

/** Gets the proper number of slots for the given level */
Expand Down Expand Up @@ -153,7 +153,10 @@ public ValidatedResult validate(IToolStackView tool, int level) {

@Override
public boolean startArmorInteract(IToolStackView tool, int level, Player player, EquipmentSlot equipmentSlot, TooltipKey modifier) {
if (modifier == TooltipKey.CONTROL) {
if (modifier == TooltipKey.SHIFT) {
return super.startArmorInteract(tool, level, player, equipmentSlot, modifier);
}
if (modifier == TooltipKey.NORMAL || modifier == TooltipKey.CONTROL) {
if (player.level.isClientSide) {
return true;
}
Expand Down Expand Up @@ -219,14 +222,4 @@ public boolean startArmorInteract(IToolStackView tool, int level, Player player,
public Pattern getPattern(IToolStackView tool, int level, int slot, boolean hasStack) {
return hasStack ? null : PATTERN;
}

@SuppressWarnings("unchecked")
@Nullable
@Override
public <T> T getModule(Class<T> type) {
if (type == IArmorInteractModifier.class) {
return (T) this;
}
return super.getModule(type);
}
}

0 comments on commit 945f79e

Please sign in to comment.