mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 02:54:04 +09:00
smelting sand to make glass
This commit is contained in:
@@ -24,6 +24,7 @@ SAND;1;1;2400;0.0;0.0;36;0;36;0.0;sand
|
|||||||
GRVL;1;1;2400;0.0;0.0;36;0;36;0.0;gravel
|
GRVL;1;1;2400;0.0;0.0;36;0;36;0.0;gravel
|
||||||
PLST;1;1;1400;0.0;0.0;36;0;16;0.5;TODO plastic (polyethylene)
|
PLST;1;1;1400;0.0;0.0;36;0;16;0.5;TODO plastic (polyethylene)
|
||||||
GRSS;1;1;1400;0.0;0.0;36;0;10;0.0;dirt
|
GRSS;1;1;1400;0.0;0.0;36;0;10;0.0;dirt
|
||||||
|
GLAS;33;1000;2325;1.8;0.82;1.0;6;10;1.0;
|
||||||
AIIR;1;1;1;0.0;0.0;36;0;1;-0.2;air
|
AIIR;1;1;1;0.0;0.0;36;0;1;-0.2;air
|
||||||
NULL;1;1;1;0.0;0.0;36;0;1;0.5;air
|
NULL;1;1;1;0.0;0.0;36;0;1;0.5;air
|
||||||
|
|
||||||
|
|||||||
|
@@ -669,14 +669,14 @@ object ModMgr {
|
|||||||
val loadedClassConstructor = loadedClass.getConstructor(ItemID::class.java)
|
val loadedClassConstructor = loadedClass.getConstructor(ItemID::class.java)
|
||||||
val loadedClassInstance = loadedClassConstructor.newInstance(itemName)
|
val loadedClassInstance = loadedClassConstructor.newInstance(itemName)
|
||||||
ItemCodex[itemName] = loadedClassInstance as GameItem
|
ItemCodex[itemName] = loadedClassInstance as GameItem
|
||||||
ItemCodex.tags[itemName] = tags
|
ItemCodex[itemName]!!.tags.addAll(tags)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val loadedClass = it.loadClass(className)
|
val loadedClass = it.loadClass(className)
|
||||||
val loadedClassConstructor = loadedClass.getConstructor(ItemID::class.java)
|
val loadedClassConstructor = loadedClass.getConstructor(ItemID::class.java)
|
||||||
val loadedClassInstance = loadedClassConstructor.newInstance(itemName)
|
val loadedClassInstance = loadedClassConstructor.newInstance(itemName)
|
||||||
ItemCodex[itemName] = loadedClassInstance as GameItem
|
ItemCodex[itemName] = loadedClassInstance as GameItem
|
||||||
ItemCodex.tags[itemName] = tags
|
ItemCodex[itemName]!!.tags.addAll(tags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -177,6 +177,8 @@ class BlockCodex {
|
|||||||
return blockProps[blockID]
|
return blockProps[blockID]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun filter(predicate: (BlockProp) -> Boolean) = blockProps.entries.filter { (_, prop) -> predicate(prop) }
|
||||||
|
|
||||||
private fun setProp(modname: String, key: Int, record: CSVRecord) {
|
private fun setProp(modname: String, key: Int, record: CSVRecord) {
|
||||||
val prop = BlockProp()
|
val prop = BlockProp()
|
||||||
prop.nameKey = record.get("name")
|
prop.nameKey = record.get("name")
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ abstract class GameItem(val originalID: ItemID) : Comparable<GameItem>, Cloneabl
|
|||||||
* If it burns for 80 seconds in the furnace, the calories value would be 80*60=4800, assuming tickrate of 60.
|
* If it burns for 80 seconds in the furnace, the calories value would be 80*60=4800, assuming tickrate of 60.
|
||||||
* Assuming one item weighs 10 kilograms, 1 game-calories is about 5 watt-hours.
|
* Assuming one item weighs 10 kilograms, 1 game-calories is about 5 watt-hours.
|
||||||
*/
|
*/
|
||||||
open var calories = 0.0
|
@Transient open var calories = 0.0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For items with COMBUSTIBLE tag only
|
* For items with COMBUSTIBLE tag only
|
||||||
@@ -42,9 +42,9 @@ abstract class GameItem(val originalID: ItemID) : Comparable<GameItem>, Cloneabl
|
|||||||
* Lower=more smoky. How likely it would produce smokes when burned on a furnace. Smokiness = 0.25 means the furnace would
|
* Lower=more smoky. How likely it would produce smokes when burned on a furnace. Smokiness = 0.25 means the furnace would
|
||||||
* emit smoke particle every 0.25 seconds.
|
* emit smoke particle every 0.25 seconds.
|
||||||
*/
|
*/
|
||||||
open var smokiness = Float.POSITIVE_INFINITY
|
@Transient open var smokiness = Float.POSITIVE_INFINITY
|
||||||
|
|
||||||
open var smeltingProduct: ItemID? = null
|
@Transient open var smeltingProduct: ItemID? = null
|
||||||
|
|
||||||
open var dynamicID: ItemID = originalID
|
open var dynamicID: ItemID = originalID
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class ItemCodex {
|
|||||||
* Will return corresponding Actor if ID >= ACTORID_MIN
|
* Will return corresponding Actor if ID >= ACTORID_MIN
|
||||||
*/
|
*/
|
||||||
@Transient val itemCodex = ItemTable()
|
@Transient val itemCodex = ItemTable()
|
||||||
@Transient var tags = HashMap<String, HashSet<String>>()
|
// @Transient var tags = HashMap<String, HashSet<String>>()
|
||||||
val dynamicItemInventory = ItemTable()
|
val dynamicItemInventory = ItemTable()
|
||||||
val dynamicToStaticTable = ItemRemapTable()
|
val dynamicToStaticTable = ItemRemapTable()
|
||||||
|
|
||||||
@@ -94,9 +94,18 @@ class ItemCodex {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the item in the Codex. If the item is static, its clone will be returned (you are free to modify the returned item).
|
* Returns the item in the Codex. If the item is static, its clone will be returned (you are free to modify the returned item).
|
||||||
* However, if the item is dynamic, the item itself will be returned. Modifying the item will affect the game.
|
* However, if the item is dynamic, the item itself will be returned.
|
||||||
|
*
|
||||||
|
* The returned object is a clone of the original object. Modifying fields will NOT affect the game.
|
||||||
*/
|
*/
|
||||||
operator fun get(code: ItemID?): GameItem? {
|
operator fun get(code: ItemID?): GameItem? {
|
||||||
|
return get0(code)?.clone()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Same as `get` but the object is mutable.
|
||||||
|
*/
|
||||||
|
fun get0(code: ItemID?): GameItem? {
|
||||||
if (code == null) return null
|
if (code == null) return null
|
||||||
|
|
||||||
if (code.startsWith("$PREFIX_DYNAMICITEM:"))
|
if (code.startsWith("$PREFIX_DYNAMICITEM:"))
|
||||||
@@ -109,7 +118,7 @@ class ItemCodex {
|
|||||||
//throw IllegalArgumentException("Attempted to get item data of actor that cannot be an item. ($a)")
|
//throw IllegalArgumentException("Attempted to get item data of actor that cannot be an item. ($a)")
|
||||||
}
|
}
|
||||||
else // generic item
|
else // generic item
|
||||||
return itemCodex[code]?.clone() // from CSV
|
return itemCodex[code] // from CSV
|
||||||
}
|
}
|
||||||
|
|
||||||
fun dynamicToStaticID(dynamicID: ItemID) = dynamicToStaticTable[dynamicID]!!
|
fun dynamicToStaticID(dynamicID: ItemID) = dynamicToStaticTable[dynamicID]!!
|
||||||
@@ -231,7 +240,7 @@ class ItemCodex {
|
|||||||
fun hasItem(itemID: ItemID): Boolean = dynamicItemInventory.containsKey(itemID)
|
fun hasItem(itemID: ItemID): Boolean = dynamicItemInventory.containsKey(itemID)
|
||||||
fun isEmpty(): Boolean = itemCodex.isEmpty()
|
fun isEmpty(): Boolean = itemCodex.isEmpty()
|
||||||
|
|
||||||
fun hasTag(itemID: ItemID, s: String) = tags[itemID]?.contains(s) == true
|
fun hasTag(itemID: ItemID, s: String) = get(itemID)?.tags?.contains(s) == true
|
||||||
fun hasAnyTagOf(itemID: ItemID, vararg s: String) = s.any { hasTag(itemID, it) }
|
fun hasAnyTagOf(itemID: ItemID, vararg s: String) = s.any { hasTag(itemID, it) }
|
||||||
fun hasAnyTag(itemID: ItemID, s: Collection<String>) = s.any { hasTag(itemID, it) }
|
fun hasAnyTag(itemID: ItemID, s: Collection<String>) = s.any { hasTag(itemID, it) }
|
||||||
fun hasAnyTag(itemID: ItemID, s: Array<String>) = s.any { hasTag(itemID, it) }
|
fun hasAnyTag(itemID: ItemID, s: Array<String>) = s.any { hasTag(itemID, it) }
|
||||||
|
|||||||
@@ -1,16 +1,8 @@
|
|||||||
package net.torvald.terrarum.modulebasegame
|
package net.torvald.terrarum.modulebasegame
|
||||||
|
|
||||||
import net.torvald.terrarum.*
|
import net.torvald.terrarum.*
|
||||||
import net.torvald.terrarum.App.IS_DEVELOPMENT_BUILD
|
|
||||||
import net.torvald.terrarum.App.printdbg
|
import net.torvald.terrarum.App.printdbg
|
||||||
import net.torvald.terrarum.blockproperties.BlockProp
|
|
||||||
import net.torvald.terrarum.blockproperties.OreProp
|
|
||||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
|
||||||
import net.torvald.terrarum.gameitems.GameItem
|
|
||||||
import net.torvald.terrarum.itemproperties.CraftingCodex
|
|
||||||
import net.torvald.terrarum.modulebasegame.gameitems.BlockBase
|
|
||||||
import net.torvald.terrarum.modulebasegame.imagefont.WatchFont
|
import net.torvald.terrarum.modulebasegame.imagefont.WatchFont
|
||||||
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The entry point for the module "Basegame"
|
* The entry point for the module "Basegame"
|
||||||
@@ -56,6 +48,12 @@ class EntryPoint : ModuleEntryPoint() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add smelting recipe for sands
|
||||||
|
BlockCodex.filter { it.hasTag("SAND") }.forEach { (itemID, _) ->
|
||||||
|
ItemCodex.get0(itemID)!!.tags.add("SMELTABLE")
|
||||||
|
ItemCodex.get0(itemID)!!.smeltingProduct = "basegame:148"
|
||||||
|
}
|
||||||
|
|
||||||
println("\n[Basegame.EntryPoint] Welcome back!")
|
println("\n[Basegame.EntryPoint] Welcome back!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import net.torvald.gdx.graphics.Cvec
|
|||||||
import net.torvald.random.HQRNG
|
import net.torvald.random.HQRNG
|
||||||
import net.torvald.spriteanimation.SheetSpriteAnimation
|
import net.torvald.spriteanimation.SheetSpriteAnimation
|
||||||
import net.torvald.terrarum.*
|
import net.torvald.terrarum.*
|
||||||
|
import net.torvald.terrarum.App.printdbg
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.blockproperties.Block
|
import net.torvald.terrarum.blockproperties.Block
|
||||||
import net.torvald.terrarum.gameactors.AVKey
|
import net.torvald.terrarum.gameactors.AVKey
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import net.torvald.terrarum.gameitems.ItemID
|
|||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2023-10-11.
|
* Created by minjaesong on 2023-10-11.
|
||||||
*/
|
*/
|
||||||
open class OreItemBase(originalID: ItemID) : GameItem(originalID) {
|
open class OreItemBase(originalID: ItemID, private val registerToOreDict: Boolean = false) : GameItem(originalID) {
|
||||||
override var baseMass = 10.0
|
override var baseMass = 10.0
|
||||||
override var baseToolSize: Double? = null
|
override var baseToolSize: Double? = null
|
||||||
override var inventoryCategory = Category.GENERIC
|
override var inventoryCategory = Category.GENERIC
|
||||||
@@ -19,12 +19,15 @@ open class OreItemBase(originalID: ItemID) : GameItem(originalID) {
|
|||||||
override var equipPosition = EquipPosition.HAND_GRIP
|
override var equipPosition = EquipPosition.HAND_GRIP
|
||||||
|
|
||||||
override fun effectOnPickup(actor: ActorWithBody) {
|
override fun effectOnPickup(actor: ActorWithBody) {
|
||||||
val playerCodex = (actor.actorValue.getAsString(AVKey.ORE_DICT) ?: "").split(',').filter { it.isNotBlank() }.toMutableList()
|
if (registerToOreDict) {
|
||||||
|
val playerCodex = (actor.actorValue.getAsString(AVKey.ORE_DICT) ?: "").split(',').filter { it.isNotBlank() }
|
||||||
|
.toMutableList()
|
||||||
|
|
||||||
if (playerCodex.binarySearch(originalID) < 0) {
|
if (playerCodex.binarySearch(originalID) < 0) {
|
||||||
playerCodex.add(originalID)
|
playerCodex.add(originalID)
|
||||||
playerCodex.sort()
|
playerCodex.sort()
|
||||||
actor.actorValue[AVKey.ORE_DICT] = playerCodex.joinToString(",")
|
actor.actorValue[AVKey.ORE_DICT] = playerCodex.joinToString(",")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,9 +89,6 @@ class ItemLogsRosewood(originalID: ItemID) : OreItemBase(originalID) {
|
|||||||
return BlockBase.blockStartPrimaryUse(actor, this, "basegame:75", delta)
|
return BlockBase.blockStartPrimaryUse(actor, this, "basegame:75", delta)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class OreStick(originalID: ItemID) : OreItemBase(originalID) {
|
class OreStick(originalID: ItemID) : OreItemBase(originalID) {
|
||||||
override var originalName = "ITEM_WOOD_STICK"
|
override var originalName = "ITEM_WOOD_STICK"
|
||||||
override val materialId = "WOOD"
|
override val materialId = "WOOD"
|
||||||
@@ -97,19 +97,22 @@ class OreStick(originalID: ItemID) : OreItemBase(originalID) {
|
|||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(0,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(0,6)
|
||||||
}
|
}
|
||||||
class OreCopper(originalID: ItemID) : OreItemBase(originalID) {
|
|
||||||
|
|
||||||
|
|
||||||
|
class OreCopper(originalID: ItemID) : OreItemBase(originalID, true) {
|
||||||
override var originalName = "ITEM_ORE_MALACHITE"
|
override var originalName = "ITEM_ORE_MALACHITE"
|
||||||
override var smeltingProduct: ItemID? = "item@basegame:112"
|
override var smeltingProduct: ItemID? = "item@basegame:112"
|
||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(1,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(1,6)
|
||||||
}
|
}
|
||||||
class OreIron(originalID: ItemID) : OreItemBase(originalID) {
|
class OreIron(originalID: ItemID) : OreItemBase(originalID, true) {
|
||||||
override var originalName = "ITEM_ORE_HAEMATITE"
|
override var originalName = "ITEM_ORE_HAEMATITE"
|
||||||
override var smeltingProduct: ItemID? = "item@basegame:113"
|
override var smeltingProduct: ItemID? = "item@basegame:113"
|
||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(2,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(2,6)
|
||||||
}
|
}
|
||||||
class OreCoal(originalID: ItemID) : OreItemBase(originalID) {
|
class OreCoal(originalID: ItemID) : OreItemBase(originalID, true) {
|
||||||
override var originalName = "ITEM_ORE_COAL"
|
override var originalName = "ITEM_ORE_COAL"
|
||||||
override var smeltingProduct: ItemID? = "item@basegame:114"
|
override var smeltingProduct: ItemID? = "item@basegame:114"
|
||||||
override var calories = 4800.0
|
override var calories = 4800.0
|
||||||
@@ -117,39 +120,40 @@ class OreCoal(originalID: ItemID) : OreItemBase(originalID) {
|
|||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(3,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(3,6)
|
||||||
}
|
}
|
||||||
class OreZinc(originalID: ItemID) : OreItemBase(originalID) {
|
class OreZinc(originalID: ItemID) : OreItemBase(originalID, true) {
|
||||||
override var originalName = "ITEM_ORE_SPHALERITE"
|
override var originalName = "ITEM_ORE_SPHALERITE"
|
||||||
override var smeltingProduct: ItemID? = "item@basegame:115"
|
override var smeltingProduct: ItemID? = "item@basegame:115"
|
||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(4,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(4,6)
|
||||||
}
|
}
|
||||||
class OreTin(originalID: ItemID) : OreItemBase(originalID) {
|
class OreTin(originalID: ItemID) : OreItemBase(originalID, true) {
|
||||||
override var originalName = "ITEM_ORE_CASSITERITE"
|
override var originalName = "ITEM_ORE_CASSITERITE"
|
||||||
override var smeltingProduct: ItemID? = "item@basegame:116"
|
override var smeltingProduct: ItemID? = "item@basegame:116"
|
||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(5,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(5,6)
|
||||||
}
|
}
|
||||||
class OreGold(originalID: ItemID) : OreItemBase(originalID) {
|
class OreGold(originalID: ItemID) : OreItemBase(originalID, true) {
|
||||||
override var originalName = "ITEM_ORE_NATURAL_GOLD"
|
override var originalName = "ITEM_ORE_NATURAL_GOLD"
|
||||||
override var smeltingProduct: ItemID? = "item@basegame:117"
|
override var smeltingProduct: ItemID? = "item@basegame:117"
|
||||||
override val materialId: String = "AURM"
|
override val materialId: String = "AURM"
|
||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(6, 6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(6, 6)
|
||||||
}
|
}
|
||||||
class OreSilver(originalID: ItemID) : OreItemBase(originalID) {
|
class OreSilver(originalID: ItemID) : OreItemBase(originalID, true) {
|
||||||
override var originalName = "ITEM_ORE_NATURAL_SILVER"
|
override var originalName = "ITEM_ORE_NATURAL_SILVER"
|
||||||
override var smeltingProduct: ItemID? = "item@basegame:118"
|
override var smeltingProduct: ItemID? = "item@basegame:118"
|
||||||
override val materialId: String = "ARGN"
|
override val materialId: String = "ARGN"
|
||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(7,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(7,6)
|
||||||
}
|
}
|
||||||
class OreLead(originalID: ItemID) : OreItemBase(originalID) {
|
class OreLead(originalID: ItemID) : OreItemBase(originalID, true) {
|
||||||
override var originalName = "ITEM_ORE_GALENA"
|
override var originalName = "ITEM_ORE_GALENA"
|
||||||
override var smeltingProduct: ItemID? = "item@basegame:119"
|
override var smeltingProduct: ItemID? = "item@basegame:119"
|
||||||
override val itemImage: TextureRegion
|
override val itemImage: TextureRegion
|
||||||
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(8,6)
|
get() = CommonResourcePool.getAsItemSheet("basegame.items").get(8,6)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class ItemCoalCoke(originalID: ItemID) : OreItemBase(originalID) {
|
class ItemCoalCoke(originalID: ItemID) : OreItemBase(originalID) {
|
||||||
override var originalName = "ITEM_COAL_COKE"
|
override var originalName = "ITEM_COAL_COKE"
|
||||||
override var calories = 4800.0
|
override var calories = 4800.0
|
||||||
|
|||||||
Reference in New Issue
Block a user