Skip to content

Commit

Permalink
Revamp interactable tags
Browse files Browse the repository at this point in the history
Deprecate one and two handed fully, will ditch in 1.19 completely
Added interactable/right, for anything that interacts on right click (melee/harvest)
Added interactable/left, will be used in the near future for left click interaction (bows)
Added interactable/armor, redirect to chestplates like unarmed
Modify recipes to set appropiate tags
  • Loading branch information
KnightMiner committed Dec 19, 2022
1 parent b79d266 commit 8ade14f
Show file tree
Hide file tree
Showing 17 changed files with 79 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"tag": "tconstruct:modifiable/melee"
},
{
"tag": "tconstruct:modifiable/one_handed"
"tag": "tconstruct:modifiable/interactable/right"
}
]
},
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,15 @@
"tools": {
"type": "forge:difference",
"base": {
"tag": "tconstruct:modifiable/melee"
"type": "forge:intersection",
"children": [
{
"tag": "tconstruct:modifiable/melee"
},
{
"tag": "tconstruct:modifiable/interactable/right"
}
]
},
"subtracted": {
"item": "tconstruct:dagger"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"type": "tconstruct:modifier_salvage",
"tools": {
"tag": "tconstruct:modifiable/held"
"tag": "tconstruct:modifiable/interactable/right"
},
"modifier": "tconstruct:offhanded",
"min_level": 1,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"type": "tconstruct:modifier_salvage",
"tools": {
"tag": "tconstruct:modifiable/held"
"tag": "tconstruct:modifiable/interactable/right"
},
"modifier": "tconstruct:offhanded",
"min_level": 2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
{
"tag": "tconstruct:modifiable/armor/helmets"
},
{
"tag": "tconstruct:modifiable/armor/chestplate"
},
{
"tag": "tconstruct:modifiable/armor/leggings"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
}
],
"tools": {
"tag": "tconstruct:modifiable/held"
"tag": "tconstruct:modifiable/interactable/right"
},
"result": {
"name": "tconstruct:offhanded",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
}
],
"tools": {
"tag": "tconstruct:modifiable/held"
"tag": "tconstruct:modifiable/interactable/right"
},
"requirements": {
"name": "tconstruct:offhanded",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
{
"tag": "tconstruct:modifiable/armor/helmets"
},
{
"tag": "tconstruct:modifiable/armor/chestplate"
},
{
"tag": "tconstruct:modifiable/armor/leggings"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"replace": false,
"values": [
"#tconstruct:modifiable/one_handed",
"#tconstruct:modifiable/two_handed"
"#tconstruct:modifiable/interactable/right",
"#tconstruct:modifiable/interactable/left"
]
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"replace": false,
"values": [
"#tconstruct:modifiable/held",
"#tconstruct:modifiable/armor/chestplate"
"#tconstruct:modifiable/interactable/left",
"#tconstruct:modifiable/interactable/right",
"#tconstruct:modifiable/interactable/armor"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"#tconstruct:modifiable/armor/chestplate"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"tconstruct:longbow"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"#tconstruct:modifiable/one_handed",
"#tconstruct:modifiable/two_handed"
]
}
14 changes: 11 additions & 3 deletions src/main/java/slimeknights/tconstruct/common/TinkerTags.java
Original file line number Diff line number Diff line change
Expand Up @@ -294,9 +294,11 @@ private static void init() {}
public static final TagKey<Item> MULTIPART_TOOL = tag("modifiable/multipart");
/** Modifiable items that can have range increased */
public static final TagKey<Item> AOE = tag("modifiable/aoe");
/** Modifiable items that can be held in a single hand */
/** @deprecated use {@link #HELD} or {@link #INTERACTABLE_RIGHT} */
@Deprecated
public static final TagKey<Item> ONE_HANDED = tag("modifiable/one_handed");
/** Modifiable items that prevent usage of the offhand */
/** @deprecated use {@link #HELD} or {@link #INTERACTABLE_RIGHT} */
@Deprecated
public static final TagKey<Item> TWO_HANDED = tag("modifiable/two_handed");
/** Tools that use durability and can be repaired. Items in this tag support the {@link ToolStats#DURABILITY} stat. */
public static final TagKey<Item> DURABILITY = tag("modifiable/durability");
Expand All @@ -305,10 +307,16 @@ private static void init() {}
public static final TagKey<Item> MELEE_OR_HARVEST = tag("modifiable/melee_or_harvest");
/** Items in this tag support the @link ToolStats#ATTACK_DAMAGE} stat. Should not be added to directly typically, use {@link #MELEE} or {@link #CHESTPLATES} */
public static final TagKey<Item> MELEE_OR_UNARMED = tag("modifiable/melee_or_unarmed");
/** Anything that is used in the player's hand */
/** Anything that is used in the player's hand, mostly tools that support interaction, but other tools can be added directly */
public static final TagKey<Item> HELD = tag("modifiable/held");
/** Anything that can use interaction modifiers */
public static final TagKey<Item> INTERACTABLE = tag("modifiable/interactable");
/** Tools that can interact on right click */
public static final TagKey<Item> INTERACTABLE_RIGHT = tag("modifiable/interactable/right");
/** Tools that can interact on left click */
public static final TagKey<Item> INTERACTABLE_LEFT = tag("modifiable/interactable/left");
/** Tools that can interact when worn as armor */
public static final TagKey<Item> INTERACTABLE_ARMOR = tag("modifiable/interactable/armor");

/** Modifiable items that support melee attacks. Items in this tag support the {@link ToolStats#ATTACK_SPEED} stat (plus those from {@link #MELEE_OR_UNARMED}). */
public static final TagKey<Item> MELEE = tag("modifiable/melee");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@
import static slimeknights.tconstruct.common.TinkerTags.Items.HELD;
import static slimeknights.tconstruct.common.TinkerTags.Items.HELMETS;
import static slimeknights.tconstruct.common.TinkerTags.Items.INTERACTABLE;
import static slimeknights.tconstruct.common.TinkerTags.Items.INTERACTABLE_ARMOR;
import static slimeknights.tconstruct.common.TinkerTags.Items.INTERACTABLE_LEFT;
import static slimeknights.tconstruct.common.TinkerTags.Items.INTERACTABLE_RIGHT;
import static slimeknights.tconstruct.common.TinkerTags.Items.LEGGINGS;
import static slimeknights.tconstruct.common.TinkerTags.Items.LONGBOWS;
import static slimeknights.tconstruct.common.TinkerTags.Items.MELEE;
Expand Down Expand Up @@ -227,7 +230,7 @@ private void addTools() {
addToolTags(TinkerTools.sword, MULTIPART_TOOL, DURABILITY, HARVEST, MELEE_PRIMARY, ONE_HANDED, SWORD, AOE);
addToolTags(TinkerTools.cleaver, MULTIPART_TOOL, DURABILITY, HARVEST, MELEE_PRIMARY, ONE_HANDED, SWORD, AOE);
// bow
addToolTags(TinkerTools.longbow, MULTIPART_TOOL, DURABILITY, MELEE, LONGBOWS);
addToolTags(TinkerTools.longbow, MULTIPART_TOOL, DURABILITY, MELEE, LONGBOWS, INTERACTABLE_LEFT);
this.tag(CROSSBOWS); // TODO: crossbows
// specialized
addToolTags(TinkerTools.flintAndBrick, DURABILITY, MELEE, ONE_HANDED, AOE);
Expand All @@ -247,8 +250,13 @@ private void addTools() {
this.tag(MELEE_OR_HARVEST).addTag(MELEE).addTag(HARVEST);
this.tag(MELEE_OR_UNARMED).addTag(MELEE).addTag(UNARMED);
this.tag(UNARMED).addTag(CHESTPLATES);
this.tag(HELD).addTag(ONE_HANDED).addTag(TWO_HANDED);
this.tag(INTERACTABLE).addTag(HELD).addTag(CHESTPLATES);
// migrating one handed and two handed to interactable right
this.tag(INTERACTABLE_RIGHT).addTags(ONE_HANDED, TWO_HANDED);
// interactable armor is mostly so some mod could disable all chestplate interactions in one swing
this.tag(INTERACTABLE_ARMOR).addTag(CHESTPLATES);
// left and right handed are held, but not armor
this.tag(HELD).addTags(INTERACTABLE_RIGHT, INTERACTABLE_LEFT);
this.tag(INTERACTABLE).addTags(INTERACTABLE_LEFT, INTERACTABLE_RIGHT, INTERACTABLE_ARMOR);
this.tag(ARMOR).addTag(BOOTS).addTag(LEGGINGS).addTag(CHESTPLATES).addTag(HELMETS);
this.tag(AOE).addTag(BOOTS); // boot walk modifiers
this.tag(RANGED).addTag(BOWS);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.setInput(Items.INK_SAC, 1, 45)
.save(consumer, prefix(TinkerModifiers.nearsighted, upgradeFolder));
ModifierRecipeBuilder.modifier(TinkerModifiers.offhanded)
.setTools(TinkerTags.Items.HELD)
.setTools(TinkerTags.Items.INTERACTABLE_RIGHT)
.addInput(Items.LEATHER)
.addInput(Items.FIRE_CHARGE)
.addInput(SlimeType.ICHOR.getSlimeballTag())
Expand All @@ -301,7 +301,7 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.saveSalvage(consumer, wrap(TinkerModifiers.offhanded, upgradeSalvage, "_level_1"))
.save(consumer, wrap(TinkerModifiers.offhanded, upgradeFolder, "_level_1"));
ModifierRecipeBuilder.modifier(TinkerModifiers.offhanded)
.setTools(TinkerTags.Items.HELD)
.setTools(TinkerTags.Items.INTERACTABLE_RIGHT)
.addInput(Items.LEATHER)
.addInput(TinkerMaterials.cobalt.getIngotTag())
.addInput(SlimeType.ICHOR.getSlimeballTag())
Expand Down Expand Up @@ -1129,7 +1129,7 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.addInput(TinkerTags.Items.TANKS) // no salvage as don't want conversion between seared and scorched
.setMaxLevel(5)
.setSlots(SlotType.UPGRADE, 1)
.setTools(ingredientFromTags(TinkerTags.Items.INTERACTABLE, TinkerTags.Items.HELMETS, TinkerTags.Items.LEGGINGS))
.setTools(ingredientFromTags(TinkerTags.Items.INTERACTABLE, TinkerTags.Items.HELMETS, TinkerTags.Items.CHESTPLATES, TinkerTags.Items.LEGGINGS))
.saveSalvage(consumer, prefix(TinkerModifiers.tank, upgradeSalvage))
.save(consumer, prefix(TinkerModifiers.tank, upgradeFolder));
// expanders
Expand Down Expand Up @@ -1158,9 +1158,9 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.setSlots(SlotType.ABILITY, 1)
.saveSalvage(consumer, prefix(ModifierIds.reach, abilitySalvage));
// block transformers
Ingredient heldWithDurability = IntersectionIngredient.of(Ingredient.of(TinkerTags.Items.DURABILITY), Ingredient.of(TinkerTags.Items.INTERACTABLE));
Ingredient interactableWithDurability = IntersectionIngredient.of(Ingredient.of(TinkerTags.Items.DURABILITY), Ingredient.of(TinkerTags.Items.INTERACTABLE));
ModifierRecipeBuilder.modifier(TinkerModifiers.pathing)
.setTools(DifferenceIngredient.of(heldWithDurability, Ingredient.of(TinkerTools.pickadze, TinkerTools.excavator)))
.setTools(DifferenceIngredient.of(interactableWithDurability, Ingredient.of(TinkerTools.pickadze, TinkerTools.excavator)))
.addInput(roundPlate)
.addInput(TinkerMaterials.cobalt.getIngotTag())
.addInput(toolBinding)
Expand All @@ -1169,7 +1169,7 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.saveSalvage(consumer, prefix(TinkerModifiers.pathing, abilitySalvage))
.save(consumer, prefix(TinkerModifiers.pathing, abilityFolder));
ModifierRecipeBuilder.modifier(TinkerModifiers.stripping)
.setTools(DifferenceIngredient.of(heldWithDurability, Ingredient.of(TinkerTools.handAxe, TinkerTools.broadAxe)))
.setTools(DifferenceIngredient.of(interactableWithDurability, Ingredient.of(TinkerTools.handAxe, TinkerTools.broadAxe)))
.addInput(SizedIngredient.of(MaterialIngredient.fromItem(TinkerToolParts.smallAxeHead.get())))
.addInput(TinkerMaterials.cobalt.getIngotTag())
.addInput(toolBinding)
Expand All @@ -1178,7 +1178,7 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.saveSalvage(consumer, prefix(TinkerModifiers.stripping, abilitySalvage))
.save(consumer, prefix(TinkerModifiers.stripping, abilityFolder));
ModifierRecipeBuilder.modifier(TinkerModifiers.tilling)
.setTools(DifferenceIngredient.of(heldWithDurability, Ingredient.of(TinkerTools.mattock, TinkerTools.scythe)))
.setTools(DifferenceIngredient.of(interactableWithDurability, Ingredient.of(TinkerTools.mattock, TinkerTools.scythe)))
.addInput(smallBlade)
.addInput(TinkerMaterials.cobalt.getIngotTag())
.addInput(toolBinding)
Expand All @@ -1188,7 +1188,7 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.save(consumer, prefix(TinkerModifiers.tilling, abilityFolder));
// glowing
ModifierRecipeBuilder.modifier(TinkerModifiers.glowing)
.setTools(heldWithDurability)
.setTools(interactableWithDurability)
.addInput(Items.GLOWSTONE)
.addInput(Items.DAYLIGHT_DETECTOR)
.addInput(Items.SHROOMLIGHT)
Expand All @@ -1197,7 +1197,7 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.saveSalvage(consumer, prefix(TinkerModifiers.glowing, abilitySalvage))
.save(consumer, prefix(TinkerModifiers.glowing, abilityFolder));
ModifierRecipeBuilder.modifier(TinkerModifiers.firestarter)
.setTools(DifferenceIngredient.of(heldWithDurability, Ingredient.of(TinkerTools.flintAndBrick)))
.setTools(DifferenceIngredient.of(interactableWithDurability, Ingredient.of(TinkerTools.flintAndBrick)))
.addInput(TinkerMaterials.cobalt.getIngotTag())
.addInput(Items.FLINT)
.setMaxLevel(1)
Expand Down Expand Up @@ -1235,26 +1235,10 @@ private void addModifierRecipes(Consumer<FinishedRecipe> consumer) {
.addInput(SlimeType.SKY.getSlimeballTag())
.setMaxLevel(1)
.setSlots(SlotType.ABILITY, 1)
.setTools(DifferenceIngredient.of(IntersectionIngredient.of(Ingredient.of(TinkerTags.Items.MELEE), Ingredient.of(TinkerTags.Items.ONE_HANDED)), Ingredient.of(TinkerTools.dagger)))
.save(consumer, wrap(TinkerModifiers.dualWielding, abilityFolder, "_one_handed"));
ModifierRecipeBuilder.modifier(TinkerModifiers.dualWielding)
.addInput(TinkerMaterials.manyullyn.getIngotTag())
.addInput(Items.NAUTILUS_SHELL)
.addInput(TinkerMaterials.manyullyn.getIngotTag())
.addInput(SlimeType.SKY.getSlimeballTag())
.addInput(SlimeType.SKY.getSlimeballTag())
.setMaxLevel(1)
.setSlots(SlotType.ABILITY, 1)
.setRequirements(ModifierMatch.entry(TinkerModifiers.offhanded))
.setRequirementsError(makeRequirementsError("two_handed_dual_wielding"))
.setTools(IntersectionIngredient.of(Ingredient.of(TinkerTags.Items.MELEE), Ingredient.of(TinkerTags.Items.TWO_HANDED)))
.save(consumer, wrap(TinkerModifiers.dualWielding, abilityFolder, "_two_handed"));
// using a single salvage recipe for the two of them, as we don't care about requirements when removing
ModifierRecipeBuilder.modifier(TinkerModifiers.dualWielding)
.setMaxLevel(1)
.setSlots(SlotType.ABILITY, 1)
.setTools(DifferenceIngredient.of(Ingredient.of(TinkerTags.Items.MELEE), Ingredient.of(TinkerTools.dagger)))
.saveSalvage(consumer, prefix(TinkerModifiers.dualWielding, abilitySalvage));
.setTools(DifferenceIngredient.of(IntersectionIngredient.of(Ingredient.of(TinkerTags.Items.MELEE), Ingredient.of(TinkerTags.Items.INTERACTABLE_RIGHT)), Ingredient.of(TinkerTools.dagger)))
.saveSalvage(consumer, prefix(TinkerModifiers.dualWielding, abilitySalvage))
.save(consumer, prefix(TinkerModifiers.dualWielding, abilityFolder));

/*
* extra modifiers
*/
Expand Down

0 comments on commit 8ade14f

Please sign in to comment.