Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@ package gregtechlite.gtlitecore.common.item

import gregtech.api.items.toolitem.IGTTool
import gregtech.api.items.toolitem.ItemGTTool
import gregtech.api.items.toolitem.ToolClasses
import gregtech.api.items.toolitem.ToolHelper
import gregtech.api.items.toolitem.ToolOreDict
import gregtech.common.items.ToolItems
import gregtech.common.items.tool.BlockRotatingBehavior
import gregtech.common.items.tool.EntityDamageBehavior
import gregtech.common.items.tool.GrassPathBehavior
import gregtech.common.items.tool.HarvestIceBehavior
import gregtech.common.items.tool.RotateRailBehavior
import gregtech.core.sound.GTSoundEvents
import gregtechlite.gtlitecore.api.MOD_ID
import gregtechlite.gtlitecore.api.extension.toolDefinition
import gregtechlite.gtlitecore.common.item.behavior.FlintAndSteelToolBehavior
import net.minecraft.entity.monster.EntityGolem
import net.minecraft.entity.monster.EntitySpider
import net.minecraft.init.SoundEvents

/**
Expand Down Expand Up @@ -58,12 +62,17 @@ import net.minecraft.init.SoundEvents
*/
object GTLiteToolItems
{

lateinit var ROLLING_PIN: IGTTool
lateinit var COMBINATION_WRENCH: IGTTool
lateinit var UNIVERSAL_SPADE: IGTTool
lateinit var FLINT_AND_STEEL: IGTTool
lateinit var CLUB: IGTTool
lateinit var MULTITOOL_CLOSED: IGTTool
lateinit var MULTITOOL_CUTTER: IGTTool
lateinit var MULTITOOL_FILE: IGTTool
lateinit var MULTITOOL_KNIFE: IGTTool
lateinit var MULTITOOL_SCREWDRIVER: IGTTool
lateinit var MULTITOOL_SAW: IGTTool

internal fun registerTools()
{
Expand All @@ -90,9 +99,9 @@ object GTLiteToolItems
behaviors(BlockRotatingBehavior.INSTANCE,
EntityDamageBehavior(3.0F, EntityGolem::class.java))
}
oreDict("toolWrench")
oreDict(ToolOreDict.toolWrench)
secondaryOreDicts("toolHammer", "craftingToolWrench", "craftingToolHardHammer")
toolClasses("wrench", "hammer")
toolClasses(ToolClasses.WRENCH, ToolClasses.HARD_HAMMER)
sound(GTSoundEvents.WRENCH_TOOL, true)
}

Expand All @@ -105,9 +114,9 @@ object GTLiteToolItems
attackSpeed(-2.4F)
behaviors(GrassPathBehavior.INSTANCE, RotateRailBehavior.INSTANCE)
}
oreDict("toolShovel")
oreDict(ToolOreDict.toolShovel)
secondaryOreDicts("toolCrowbar", "toolSpade", "toolSaw", "craftingToolSaw")
toolClasses("crowbar", "shovel", "saw")
toolClasses(ToolClasses.CROWBAR, ToolClasses.SHOVEL, ToolClasses.SAW)
sound(SoundEvents.ENTITY_ITEM_BREAK)
}

Expand All @@ -133,6 +142,84 @@ object GTLiteToolItems
sound(SoundEvents.BLOCK_PISTON_CONTRACT)
}

val multiToolDurability = 16.0F

MULTITOOL_CLOSED = multiTool("multitool_closed") {
toolDefinition {
damagePerAction(0)
durabilityMultiplier(multiToolDurability)
}
}

MULTITOOL_CUTTER = multiTool("multitool_cutter") {
toolDefinition {
crafting()
sneakBypassUse()
attackDamage(-1.0F)
attackSpeed(-2.4F)
durabilityMultiplier(multiToolDurability)
}
oreDict(ToolOreDict.toolWireCutter)
secondaryOreDicts("craftingToolWireCutter")
toolClasses(ToolClasses.WIRE_CUTTER)
sound(GTSoundEvents.WIRECUTTER_TOOL, true)
}

MULTITOOL_FILE = multiTool("multitool_file") {
toolDefinition {
crafting()
cannotAttack()
attackSpeed(-2.4F)
durabilityMultiplier(multiToolDurability)
}
oreDict(ToolOreDict.toolFile)
secondaryOreDicts("craftingToolFile")
toolClasses(ToolClasses.FILE)
sound(GTSoundEvents.FILE_TOOL)
}

MULTITOOL_KNIFE = multiTool("multitool_knife") {
toolDefinition {
crafting()
attacking()
attackSpeed(3.0F)
durabilityMultiplier(multiToolDurability)
}
oreDict(ToolOreDict.toolKnife)
secondaryOreDicts("craftingToolKnife")
toolClasses(ToolClasses.KNIFE, ToolClasses.SWORD)
}

MULTITOOL_SCREWDRIVER = multiTool("multitool_screwdriver") {
toolDefinition {
crafting()
sneakBypassUse()
damagePerCraftingAction(4)
attackDamage(-1.0F)
attackSpeed(3.0F)
durabilityMultiplier(multiToolDurability)
behaviors(EntityDamageBehavior(3.0F, EntitySpider::class.java))
}
oreDict(ToolOreDict.toolScrewdriver)
secondaryOreDicts("craftingToolScrewdriver")
toolClasses(ToolClasses.SCREWDRIVER)
sound(GTSoundEvents.SCREWDRIVER_TOOL)
}

MULTITOOL_SAW = multiTool("multitool_saw") {
toolDefinition {
crafting()
damagePerCraftingAction(2)
attackDamage(-1.0f)
attackSpeed(-2.6f)
durabilityMultiplier(multiToolDurability)
behaviors(HarvestIceBehavior.INSTANCE)
}
oreDict(ToolOreDict.toolSaw)
secondaryOreDicts("craftingToolSaw")
toolClasses(ToolClasses.SAW)
sound(GTSoundEvents.SAW_TOOL)
}
}

fun addToolSymbols()
Expand All @@ -143,4 +230,6 @@ object GTLiteToolItems
private fun tool(id: String, action: ItemGTTool.Builder.() -> Unit)
= ToolItems.register(ItemGTTool.Builder.of(MOD_ID, id).apply(action))

private fun multiTool(id: String, action: ItemMultiTool.Builder.() -> Unit)
= ItemMultiTool.register(ItemMultiTool.Builder.of(MOD_ID, id).apply(action))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package gregtechlite.gtlitecore.common.item

import gregtech.api.items.toolitem.IGTTool
import gregtech.api.items.toolitem.IGTToolDefinition
import gregtech.api.items.toolitem.ItemGTTool
import gregtech.api.items.toolitem.ToolBuilder
import gregtech.common.items.ToolItems
import net.minecraft.entity.player.EntityPlayer
import net.minecraft.item.ItemStack
import net.minecraft.util.ActionResult
import net.minecraft.util.EnumActionResult
import net.minecraft.util.EnumHand
import net.minecraft.util.SoundEvent
import net.minecraft.world.World
import java.util.function.Supplier

class ItemMultiTool(domain: String, id: String, tier: Int, toolStats: IGTToolDefinition, sound: SoundEvent?,
playSoundOnBlockDestroy: Boolean, toolClasses: MutableSet<String>, oreDict: String?,
secondaryOreDicts: MutableList<String>, markerItem: Supplier<ItemStack>?)
: ItemGTTool(domain, id, tier, toolStats, sound, playSoundOnBlockDestroy, toolClasses, oreDict, secondaryOreDicts, markerItem)
{
companion object
{
private val MULTI_TOOLS = arrayListOf<IGTTool>()

fun register(builder: ToolBuilder<ItemMultiTool>): IGTTool
{
val tool = ToolItems.register(builder).also { MULTI_TOOLS.add(it) }
return tool
}
}

override fun `definition$onItemRightClick`(world: World, player: EntityPlayer, hand: EnumHand): ActionResult<ItemStack?>?
{
val stack = player.getHeldItem(hand)
if (stack.item is ItemMultiTool && player.isSneaking)
{
if (!world.isRemote)
{
val nextTool = getNextTool().get(getToolMaterial(stack))
nextTool.itemDamage = stack.itemDamage
player.setHeldItem(hand, nextTool)
}
return ActionResult.newResult(EnumActionResult.SUCCESS, stack)
}
return ActionResult.newResult(EnumActionResult.PASS, stack)
}

private fun getNextTool(): IGTTool
{
val index = (MULTI_TOOLS.indexOf(this) + 1) % MULTI_TOOLS.size
return MULTI_TOOLS[index]
}

class Builder(domain: String, id: String) : ToolBuilder<ItemMultiTool>(domain, id)
{
companion object
{
fun of(domain: String, id: String): Builder = Builder(domain, id)
}

override fun supply(): Supplier<ItemMultiTool?> = Supplier {
ItemMultiTool(domain, id, tier, toolStats, sound, playSoundOnBlockDestroy, toolClasses, oreDict,
secondaryOreDicts, markerItem)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import gregtech.api.unification.material.MarkerMaterials.Color
import gregtech.api.unification.material.Material
import gregtech.api.unification.material.Materials.Steel
import gregtech.api.unification.material.Materials.Wood
import gregtech.api.unification.material.info.MaterialFlags.GENERATE_BOLT_SCREW
import gregtech.api.unification.material.info.MaterialFlags.GENERATE_LONG_ROD
import gregtech.api.unification.material.info.MaterialFlags.GENERATE_PLATE
import gregtech.api.unification.material.info.MaterialFlags.GENERATE_RING
import gregtech.api.unification.material.info.MaterialFlags.GENERATE_ROD
import gregtech.api.unification.material.info.MaterialFlags.GENERATE_SMALL_GEAR
import gregtech.api.unification.material.info.MaterialFlags.GENERATE_SPRING_SMALL
Expand All @@ -17,15 +20,19 @@ import gregtech.api.unification.ore.OrePrefix.dye
import gregtech.api.unification.ore.OrePrefix.gearSmall
import gregtech.api.unification.ore.OrePrefix.ingot
import gregtech.api.unification.ore.OrePrefix.plate
import gregtech.api.unification.ore.OrePrefix.ring
import gregtech.api.unification.ore.OrePrefix.screw
import gregtech.api.unification.ore.OrePrefix.springSmall
import gregtech.api.unification.ore.OrePrefix.stick
import gregtech.api.unification.ore.OrePrefix.stickLong
import gregtech.api.unification.stack.UnificationEntry
import gregtech.common.items.ToolItems.PLUNGER
import gregtech.common.items.ToolItems.SOFT_MALLET
import gregtechlite.gtlitecore.api.unification.material.properties.GTLiteToolPropertyAdder
import gregtechlite.gtlitecore.common.item.GTLiteToolItems.CLUB
import gregtechlite.gtlitecore.common.item.GTLiteToolItems.COMBINATION_WRENCH
import gregtechlite.gtlitecore.common.item.GTLiteToolItems.FLINT_AND_STEEL
import gregtechlite.gtlitecore.common.item.GTLiteToolItems.MULTITOOL_CLOSED
import gregtechlite.gtlitecore.common.item.GTLiteToolItems.ROLLING_PIN
import gregtechlite.gtlitecore.common.item.GTLiteToolItems.UNIVERSAL_SPADE
import net.minecraft.init.Items
Expand All @@ -34,7 +41,6 @@ import net.minecraft.item.ItemStack
@Suppress("unused")
object ToolRecipeHandler
{

// @formatter:off

fun init()
Expand Down Expand Up @@ -86,6 +92,17 @@ object ToolRecipeHandler
'D', UnificationEntry(dye, Color.Blue))
}

if (material.hasFlags(GENERATE_PLATE, GENERATE_LONG_ROD, GENERATE_RING, GENERATE_BOLT_SCREW))
{
// Pocket Multitool
addToolRecipe(material, MULTITOOL_CLOSED, true,
"wPR", "PPS", "RSB",
'B', UnificationEntry(screw, material),
'S', UnificationEntry(stickLong, material),
'P', UnificationEntry(plate, material),
'R', UnificationEntry(ring, material))
}

// Do not generate Steel Flint And Steel because the vanilla Flint And Steel is Steel yet.
if (material.hasFlags(GENERATE_SPRING_SMALL, GENERATE_SMALL_GEAR) && material != Steel)
{
Expand All @@ -96,7 +113,6 @@ object ToolRecipeHandler
'S', UnificationEntry(springSmall, material),
'F', ItemStack(Items.FLINT))
}

}
}

Expand Down Expand Up @@ -130,5 +146,4 @@ object ToolRecipeHandler
}

// @formatter:on

}
12 changes: 12 additions & 0 deletions src/main/resources/assets/gtlitecore/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -1633,6 +1633,18 @@ item.gt.tool.combination_wrench.name=%s Combination Wrench
item.gt.tool.universal_spade.name=%s Universal Spade
item.gt.tool.flint_and_steel.name=%s Flint And Steel
item.gt.tool.club.name=%s Club
item.gt.tool.multitool_closed.name=%s Pocket Multitool
item.gt.tool.multitool_closed.tooltip=Sneak and Right-Click to switch tool mode
item.gt.tool.multitool_cutter.name=%s Pocket Multitool (Wire Cutter)
item.gt.tool.multitool_cutter.tooltip=Sneak and Right-Click to switch tool mode
item.gt.tool.multitool_file.name=%s Pocket Multitool (File)
item.gt.tool.multitool_file.tooltip=Sneak and Right-Click to switch tool mode
item.gt.tool.multitool_knife.name=%s Pocket Multitool (Knife)
item.gt.tool.multitool_knife.tooltip=Sneak and Right-Click to switch tool mode
item.gt.tool.multitool_screwdriver.name=%s Pocket Multitool (Screwdriver)
item.gt.tool.multitool_screwdriver.tooltip=Sneak and Right-Click to switch tool mode
item.gt.tool.multitool_saw.name=%s Pocket Multitool (Saw)
item.gt.tool.multitool_saw.tooltip=Sneak and Right-Click to switch tool mode

gt.tool.class.rolling_pin=Rolling Pin
gt.tool.class.flint_and_steel=Flint And Steel
Expand Down
12 changes: 12 additions & 0 deletions src/main/resources/assets/gtlitecore/lang/zh_cn.lang
Original file line number Diff line number Diff line change
Expand Up @@ -1633,6 +1633,18 @@ item.gt.tool.combination_wrench.name=%s组合扳手
item.gt.tool.universal_spade.name=%s万用铲
item.gt.tool.flint_and_steel.name=%s打火石
item.gt.tool.club.name=%s棒槌
item.gt.tool.multitool_closed.name=%s万能工具
item.gt.tool.multitool_closed.tooltip=潜行右击以切换工具模式
item.gt.tool.multitool_cutter.name=%s万能工具(剪线钳)
item.gt.tool.multitool_cutter.tooltip=潜行右击以切换工具模式
item.gt.tool.multitool_file.name=%s万能工具(锉刀)
item.gt.tool.multitool_file.tooltip=潜行右击以切换工具模式
item.gt.tool.multitool_knife.name=%s万能工具(小刀)
item.gt.tool.multitool_knife.tooltip=潜行右击以切换工具模式
item.gt.tool.multitool_screwdriver.name=%s万能工具(螺丝刀)
item.gt.tool.multitool_screwdriver.tooltip=潜行右击以切换工具模式
item.gt.tool.multitool_saw.name=%s万能工具(锯)
item.gt.tool.multitool_saw.tooltip=潜行右击以切换工具模式

gt.tool.class.rolling_pin=擀面杖
gt.tool.class.flint_and_steel=打火石
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "item/handheld",
"textures": {
"layer0": "gtlitecore:items/tools/multitool_overlay",
"layer1": "gtlitecore:items/tools/multitool_closed"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "item/handheld",
"textures": {
"layer0": "gtlitecore:items/tools/multitool_overlay",
"layer1": "gtlitecore:items/tools/multitool_cutter"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "item/handheld",
"textures": {
"layer0": "gtlitecore:items/tools/multitool_overlay",
"layer1": "gtlitecore:items/tools/multitool_file"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "item/handheld",
"textures": {
"layer0": "gtlitecore:items/tools/multitool_overlay",
"layer1": "gtlitecore:items/tools/multitool_knife"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "item/handheld",
"textures": {
"layer0": "gtlitecore:items/tools/multitool_overlay",
"layer1": "gtlitecore:items/tools/multitool_saw"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "item/handheld",
"textures": {
"layer0": "gtlitecore:items/tools/multitool_overlay",
"layer1": "gtlitecore:items/tools/multitool_screwdriver"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.