Update tags datagen
This commit is contained in:
parent
3722d896f6
commit
e60dda4810
@ -47,10 +47,10 @@ fun addTags(tagsProvider: TagsProvider) {
|
||||
MBlocks.STORAGE_CABLE
|
||||
)
|
||||
|
||||
tagsProvider.items.appender(MItemTags.CRAFTING_TABLES).add(Items.CRAFTING_TABLE)
|
||||
tagsProvider.blocks.appender(MBlockTags.CRAFTING_TABLES).add(Blocks.CRAFTING_TABLE)
|
||||
tagsProvider.items.Appender(MItemTags.CRAFTING_TABLES).add(Items.CRAFTING_TABLE)
|
||||
tagsProvider.blocks.Appender(MBlockTags.CRAFTING_TABLES).add(Blocks.CRAFTING_TABLE)
|
||||
|
||||
tagsProvider.items.appender(MItemTags.MINECART_CARGO_CRATES).add(MItems.CARGO_CRATE_MINECARTS.values)
|
||||
tagsProvider.items.Appender(MItemTags.MINECART_CARGO_CRATES).add(MItems.CARGO_CRATE_MINECARTS.values)
|
||||
|
||||
tagsProvider.items.forge("hardened_glass").add(MRegistry.INDUSTRIAL_GLASS.allItems.values)
|
||||
tagsProvider.items.forge("hardened_glass/colorless").add(MRegistry.INDUSTRIAL_GLASS.item)
|
||||
@ -74,25 +74,25 @@ fun addTags(tagsProvider: TagsProvider) {
|
||||
MRegistry.INDUSTRIAL_GLASS.forEachBlock { s, _, block -> tagsProvider.blocks.forge("hardened_glass/$s").add(block) }
|
||||
MRegistry.INDUSTRIAL_GLASS_PANE.forEachBlock { s, _, block -> tagsProvider.blocks.forge("hardened_glass_panes/$s").add(block) }
|
||||
|
||||
tagsProvider.items.appender(MItemTags.INDUSTRIAL_GLASS).add(MRegistry.INDUSTRIAL_GLASS.allItems.values)
|
||||
tagsProvider.blocks.appender(MBlockTags.INDUSTRIAL_GLASS).add(MRegistry.INDUSTRIAL_GLASS.allBlocks.values)
|
||||
tagsProvider.blocks.appender(MBlockTags.CARGO_CRATES).add(MRegistry.CARGO_CRATES.allBlocks.values)
|
||||
tagsProvider.items.Appender(MItemTags.INDUSTRIAL_GLASS).add(MRegistry.INDUSTRIAL_GLASS.allItems.values)
|
||||
tagsProvider.blocks.Appender(MBlockTags.INDUSTRIAL_GLASS).add(MRegistry.INDUSTRIAL_GLASS.allBlocks.values)
|
||||
tagsProvider.blocks.Appender(MBlockTags.CARGO_CRATES).add(MRegistry.CARGO_CRATES.allBlocks.values)
|
||||
|
||||
tagsProvider.items.appender(ItemTags.DOORS).add(MItems.TRITANIUM_DOOR.values)
|
||||
tagsProvider.blocks.appender(BlockTags.DOORS).add(MBlocks.TRITANIUM_DOOR.values)
|
||||
tagsProvider.items.Appender(ItemTags.DOORS).add(MItems.TRITANIUM_DOOR.values)
|
||||
tagsProvider.blocks.Appender(BlockTags.DOORS).add(MBlocks.TRITANIUM_DOOR.values)
|
||||
|
||||
tagsProvider.items.appender(ItemTags.TRAPDOORS).add(MItems.TRITANIUM_TRAPDOOR.values)
|
||||
tagsProvider.blocks.appender(BlockTags.TRAPDOORS).add(MBlocks.TRITANIUM_TRAPDOOR.values)
|
||||
tagsProvider.items.Appender(ItemTags.TRAPDOORS).add(MItems.TRITANIUM_TRAPDOOR.values)
|
||||
tagsProvider.blocks.Appender(BlockTags.TRAPDOORS).add(MBlocks.TRITANIUM_TRAPDOOR.values)
|
||||
|
||||
tagsProvider.blocks.appender(BlockTags.PRESSURE_PLATES).add(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values)
|
||||
tagsProvider.blocks.Appender(BlockTags.PRESSURE_PLATES).add(MRegistry.TRITANIUM_PRESSURE_PLATE.allBlocks.values)
|
||||
|
||||
tagsProvider.items.appender(MItemTags.MACHINES).add(MItems.MACHINES)
|
||||
tagsProvider.blocks.appender(MBlockTags.MACHINES).add(MItems.MACHINES.stream().map { it!!.block })
|
||||
tagsProvider.items.Appender(MItemTags.MACHINES).add(MItems.MACHINES)
|
||||
tagsProvider.blocks.Appender(MBlockTags.MACHINES).add(MItems.MACHINES.stream().map { it!!.block })
|
||||
|
||||
tagsProvider.blocks.appender(BlockTags.ANVIL).add(MBlocks.TRITANIUM_ANVIL)
|
||||
tagsProvider.blocks.Appender(BlockTags.ANVIL).add(MBlocks.TRITANIUM_ANVIL)
|
||||
|
||||
tagsProvider.items.appender(MItemTags.TRITANIUM_NUGGETS).add(MItems.TRITANIUM_NUGGET)
|
||||
tagsProvider.items.appender(MItemTags.NUGGETS).add(MItems.TRITANIUM_NUGGET)
|
||||
tagsProvider.items.Appender(MItemTags.TRITANIUM_NUGGETS).add(MItems.TRITANIUM_NUGGET)
|
||||
tagsProvider.items.Appender(MItemTags.NUGGETS).add(MItems.TRITANIUM_NUGGET)
|
||||
|
||||
tagsProvider.items.forge("armors")
|
||||
.add("helmets", MItems.TRITANIUM_HELMET)
|
||||
@ -113,30 +113,30 @@ fun addTags(tagsProvider: TagsProvider) {
|
||||
.add("shields", MItems.TRITANIUM_SHIELD)
|
||||
tagsProvider.items.forge("shears").add(MItems.TRITANIUM_SHEARS)
|
||||
|
||||
tagsProvider.blocks.appender(BlockTags.STAIRS)
|
||||
tagsProvider.blocks.Appender(BlockTags.STAIRS)
|
||||
.add(MRegistry.FLOOR_TILES_STAIRS.blocks.values)
|
||||
.add(MRegistry.TRITANIUM_STAIRS.allBlocks.values)
|
||||
.add(MRegistry.TRITANIUM_STRIPED_STAIRS.flatBlocks)
|
||||
.add(MBlocks.TRITANIUM_STRIPED_STAIRS)
|
||||
|
||||
tagsProvider.blocks.appender(BlockTags.SLABS)
|
||||
tagsProvider.blocks.Appender(BlockTags.SLABS)
|
||||
.add(MRegistry.TRITANIUM_SLAB.allBlocks.values)
|
||||
.add(MRegistry.TRITANIUM_STRIPED_SLAB.flatBlocks)
|
||||
.add(MRegistry.FLOOR_TILES_SLAB.blocks.values)
|
||||
.add(MBlocks.TRITANIUM_STRIPED_SLAB)
|
||||
|
||||
tagsProvider.blocks.appender(BlockTags.WALLS)
|
||||
tagsProvider.blocks.Appender(BlockTags.WALLS)
|
||||
.add(MRegistry.TRITANIUM_WALL.allBlocks.values)
|
||||
.add(MRegistry.TRITANIUM_STRIPED_WALL.flatBlocks)
|
||||
.add(MBlocks.TRITANIUM_STRIPED_WALL)
|
||||
|
||||
tagsProvider.items.appender(ItemTags.SLABS)
|
||||
tagsProvider.items.Appender(ItemTags.SLABS)
|
||||
.add(MRegistry.TRITANIUM_SLAB.allItems.values)
|
||||
.add(MRegistry.TRITANIUM_STRIPED_SLAB.flatItems)
|
||||
.add(MRegistry.FLOOR_TILES_SLAB.items.values)
|
||||
.add(MItems.TRITANIUM_STRIPED_SLAB)
|
||||
|
||||
tagsProvider.items.appender(ItemTags.WALLS)
|
||||
tagsProvider.items.Appender(ItemTags.WALLS)
|
||||
.add(MRegistry.TRITANIUM_WALL.allItems.values)
|
||||
.add(MRegistry.TRITANIUM_STRIPED_WALL.flatItems)
|
||||
.add(MItems.TRITANIUM_STRIPED_WALL)
|
||||
|
@ -22,62 +22,110 @@ import ru.dbotthepony.mc.otm.datagen.DataGen
|
||||
import java.util.stream.Stream
|
||||
import net.minecraft.data.tags.TagsProvider as MinecraftTagsProvider
|
||||
|
||||
interface MTagAppender<T> {
|
||||
fun add(value: T): MTagAppender<T>
|
||||
fun addSafe(value: T): Boolean
|
||||
fun add(vararg values: T): MTagAppender<T>
|
||||
fun addSafe(vararg values: T): Boolean {
|
||||
var any = false
|
||||
for (value in values) any = addSafe(value)
|
||||
return any
|
||||
}
|
||||
|
||||
fun add(values: Collection<T>): MTagAppender<T>
|
||||
fun add(values: Stream<out T>): MTagAppender<T> = add(values.toList())
|
||||
|
||||
fun addSafe(values: Collection<T>): Boolean {
|
||||
var any = false
|
||||
for (value in values) any = addSafe(value)
|
||||
return any
|
||||
}
|
||||
}
|
||||
|
||||
interface ForgeTagAppender<T> : MTagAppender<T> {
|
||||
fun add(key: String, value: T): ForgeTagAppender<T>
|
||||
fun addSafe(key: String, value: T): Boolean
|
||||
fun add(key: String, vararg values: T): ForgeTagAppender<T>
|
||||
fun addSafe(key: String, vararg values: T): Boolean {
|
||||
var any = false
|
||||
for (value in values) any = addSafe(key, value)
|
||||
return any
|
||||
}
|
||||
|
||||
fun add(key: String, values: Collection<T>): ForgeTagAppender<T>
|
||||
|
||||
fun addSafe(key: String, values: Collection<T>): Boolean {
|
||||
var any = false
|
||||
for (value in values) any = addSafe(key, value)
|
||||
return any
|
||||
}
|
||||
}
|
||||
|
||||
private fun <T> vanillaLookup(key: ResourceKey<Registry<T>>): (T) -> ResourceLocation? {
|
||||
private fun <T : Any> vanillaLookup(key: ResourceKey<Registry<T>>): (T) -> ResourceLocation {
|
||||
val registry by lazy { (BuiltInRegistries.REGISTRY.get(key.location()) ?: throw NoSuchElementException("No such registry $key")) as Registry<T> }
|
||||
return { registry.getKey(it) }
|
||||
return { registry.getKey(it) ?: throw NoSuchElementException("Registry $key does not contain $it") }
|
||||
}
|
||||
|
||||
class TagsProvider(
|
||||
private val event: GatherDataEvent
|
||||
) {
|
||||
inner class Delegate<T> private constructor(key: ResourceKey<Registry<T>>, val lookup: (T) -> ResourceLocation?) : MinecraftTagsProvider<T>(event.generator.packOutput, key, event.lookupProvider, DataGen.MOD_ID, event.existingFileHelper) {
|
||||
constructor(registry: IForgeRegistry<T>) : this(registry.registryKey, registry::getKey)
|
||||
class TagsProvider(private val event: GatherDataEvent) {
|
||||
inner class Delegate<T : Any> private constructor(key: ResourceKey<Registry<T>>, val lookup: (T) -> ResourceLocation) : MinecraftTagsProvider<T>(event.generator.packOutput, key, event.lookupProvider, DataGen.MOD_ID, event.existingFileHelper) {
|
||||
constructor(registry: IForgeRegistry<T>) : this(registry.registryKey, { registry.getKey(it) ?: throw NoSuchElementException("Registry $registry does not contain $it") })
|
||||
constructor(key: ResourceKey<Registry<T>>) : this(key, vanillaLookup(key))
|
||||
|
||||
init {
|
||||
event.generator.addProvider(true, this)
|
||||
if (isRegistered)
|
||||
event.generator.addProvider(event.includeServer(), this)
|
||||
else
|
||||
delegates.add(this)
|
||||
}
|
||||
|
||||
private val tags = HashMap<TagKey<T>, ObjectArraySet<T>>()
|
||||
private val tags = HashMap<TagKey<T>, ObjectArraySet<ResourceLocation>>()
|
||||
private val rigidTags = HashMap<TagKey<T>, ObjectArraySet<ResourceKey<T>>>()
|
||||
private val tagInTag = HashMap<TagKey<T>, ObjectArraySet<TagKey<T>>>()
|
||||
|
||||
inner class Appender(val tag: TagKey<T>) {
|
||||
constructor(tag: ResourceLocation) : this(TagKey.create(registryKey, tag))
|
||||
|
||||
private val locations by lazy { tags.computeIfAbsent(tag) { ObjectArraySet() } }
|
||||
private val rigidLocations by lazy { rigidTags.computeIfAbsent(tag) { ObjectArraySet() } }
|
||||
private val tagsInTags by lazy { tagInTag.computeIfAbsent(tag) { ObjectArraySet() } }
|
||||
|
||||
fun add(value: ResourceLocation): Appender {
|
||||
if (!locations.add(value)) {
|
||||
throw IllegalStateException("Tag $tag of registry $registryKey already contains $value")
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(value: ResourceKey<T>): Appender {
|
||||
require(value.registry() == registryKey) { "Invalid registry in provided ResourceKey: ${value.registry()} (this tag appender is for $registryKey)" }
|
||||
|
||||
if (!rigidLocations.add(value)) {
|
||||
throw IllegalStateException("Tag $tag of registry $registryKey already contains $value")
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(value: TagKey<T>): Appender {
|
||||
require(value.registry() == registryKey) { "Invalid registry in provided ResourceKey: ${value.registry()} (this tag appender is for $registryKey)" }
|
||||
|
||||
if (!tagsInTags.add(value)) {
|
||||
throw IllegalStateException("Tag $tag of registry $registryKey already contains $value")
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(value: T): Appender {
|
||||
return add(ResourceKey.create(registryKey, lookup.invoke(value)))
|
||||
}
|
||||
|
||||
fun add(values: Collection<T>): Appender {
|
||||
for (value in values) add(value)
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(vararg values: T): Appender {
|
||||
for (value in values) add(value)
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(vararg values: ResourceKey<T>): Appender {
|
||||
for (value in values) add(value)
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(vararg values: TagKey<T>): Appender {
|
||||
for (value in values) add(value)
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(vararg values: ResourceLocation): Appender {
|
||||
for (value in values) add(value)
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(values: Stream<T>): Appender {
|
||||
values.forEach { add(it) }
|
||||
return this
|
||||
}
|
||||
|
||||
fun leaf(name: String) = Appender(TagKey.create(tag.registry, ResourceLocation(tag.location.namespace, tag.location.path + "/$name")))
|
||||
|
||||
fun add(leaf: String, value: T) = also { leaf(leaf).add(value) }
|
||||
fun add(leaf: String, value: TagKey<T>) = also { leaf(leaf).add(value) }
|
||||
fun add(leaf: String, vararg value: T) = also { leaf(leaf).add(*value) }
|
||||
fun add(leaf: String, vararg value: TagKey<T>) = also { leaf(leaf).add(*value) }
|
||||
fun add(leaf: String, value: Stream<T>) = also { leaf(leaf).add(value) }
|
||||
fun add(leaf: String, value: ResourceKey<T>) = also { leaf(leaf).add(value) }
|
||||
fun add(leaf: String, vararg value: ResourceKey<T>) = also { leaf(leaf).add(*value) }
|
||||
fun add(leaf: String, value: ResourceLocation) = also { leaf(leaf).add(value) }
|
||||
fun add(leaf: String, vararg value: ResourceLocation) = also { leaf(leaf).add(*value) }
|
||||
}
|
||||
|
||||
fun forge(path: String) = Appender(ResourceLocation("forge", path))
|
||||
|
||||
override fun addTags(provider: HolderLookup.Provider) {
|
||||
if (tags.isEmpty()) {
|
||||
@ -85,121 +133,64 @@ class TagsProvider(
|
||||
}
|
||||
|
||||
for ((tag, values) in tags) {
|
||||
tag(tag).also {
|
||||
for (value in values) {
|
||||
it.add(ResourceKey.create(registryKey, lookup(value) ?: throw NoSuchElementException("$value is missing from $registryKey")))
|
||||
}
|
||||
val appender = tag(tag)
|
||||
|
||||
for (value in values) {
|
||||
appender.addOptional(value)
|
||||
}
|
||||
}
|
||||
|
||||
for ((tag, values) in rigidTags) {
|
||||
val appender = tag(tag)
|
||||
|
||||
for (value in values) {
|
||||
appender.add(value)
|
||||
}
|
||||
}
|
||||
|
||||
for ((tag, values) in tagInTag) {
|
||||
val appender = tag(tag)
|
||||
|
||||
for (value in values) {
|
||||
appender.addTag(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getSet(tag: TagKey<T>): MutableSet<T> {
|
||||
return tags.computeIfAbsent(tag) { ObjectArraySet() }
|
||||
}
|
||||
private val delegates = ArrayList<Delegate<*>>()
|
||||
private var isRegistered = false
|
||||
|
||||
fun getSet(location: ResourceLocation) = getSet(TagKey.create(registryKey, location))
|
||||
fun register() {
|
||||
if (!isRegistered) {
|
||||
isRegistered = true
|
||||
|
||||
fun appender(tag: TagKey<T>, message: ((T) -> Any) = { "$it is already in $tag" }): MTagAppender<T> {
|
||||
val list = getSet(tag)
|
||||
|
||||
return object : MTagAppender<T> {
|
||||
override fun add(value: T): MTagAppender<T> {
|
||||
if (!list.add(value)) {
|
||||
throw IllegalStateException(message.invoke(value).toString())
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
override fun add(values: Collection<T>): MTagAppender<T> {
|
||||
for (value in values) add(value)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun addSafe(value: T): Boolean {
|
||||
return list.add(value)
|
||||
}
|
||||
|
||||
override fun add(vararg values: T): MTagAppender<T> {
|
||||
values.forEach(this::add)
|
||||
return this
|
||||
}
|
||||
for (value in delegates) {
|
||||
event.generator.addProvider(event.includeServer(), value)
|
||||
}
|
||||
}
|
||||
|
||||
fun forge(path: String): ForgeTagAppender<T> {
|
||||
val parent by lazy { appender(ResourceLocation("forge", path)) }
|
||||
|
||||
return object : ForgeTagAppender<T> {
|
||||
override fun add(key: String, value: T): ForgeTagAppender<T> {
|
||||
val tag = TagKey.create(registryKey, ResourceLocation("forge", "$path/$key"))
|
||||
|
||||
if (!getSet(tag).add(value)) {
|
||||
throw IllegalStateException("$value is already in $tag")
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
override fun addSafe(key: String, value: T): Boolean {
|
||||
val tag = TagKey.create(registryKey, ResourceLocation("forge", "$path/$key"))
|
||||
return getSet(tag).add(value)
|
||||
}
|
||||
|
||||
override fun add(key: String, vararg values: T): ForgeTagAppender<T> {
|
||||
for (value in values) add(key, value)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun add(key: String, values: Collection<T>): ForgeTagAppender<T> {
|
||||
for (value in values) add(key, value)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun add(value: T): MTagAppender<T> {
|
||||
return parent.add(value)
|
||||
}
|
||||
|
||||
override fun addSafe(value: T): Boolean {
|
||||
return parent.addSafe(value)
|
||||
}
|
||||
|
||||
override fun add(vararg values: T): MTagAppender<T> {
|
||||
return parent.add(*values)
|
||||
}
|
||||
|
||||
override fun add(values: Collection<T>): MTagAppender<T> {
|
||||
return parent.add(values)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun appender(location: ResourceLocation): MTagAppender<T> {
|
||||
return appender(TagKey.create(registryKey, location))
|
||||
}
|
||||
|
||||
fun appender(location: ResourceLocation, message: (T) -> Any): MTagAppender<T> {
|
||||
return appender(TagKey.create(registryKey, location), message)
|
||||
delegates.clear()
|
||||
}
|
||||
}
|
||||
|
||||
val blocks = Delegate(ForgeRegistries.BLOCKS)
|
||||
val items = Delegate(ForgeRegistries.ITEMS)
|
||||
val mobEffects = Delegate(ForgeRegistries.MOB_EFFECTS)
|
||||
val damageTypes = Delegate(Registries.DAMAGE_TYPE)
|
||||
|
||||
val androidImmuneEffects = mobEffects.appender(MatteryPlayerCapability.ANDROID_IMMUNE_EFFECTS)
|
||||
val androidImmuneEffects = mobEffects.Appender(MatteryPlayerCapability.ANDROID_IMMUNE_EFFECTS)
|
||||
|
||||
val requiresShovel = blocks.appender(BlockTags.MINEABLE_WITH_SHOVEL)
|
||||
val requiresAxe = blocks.appender(BlockTags.MINEABLE_WITH_AXE)
|
||||
val requiresHoe = blocks.appender(BlockTags.MINEABLE_WITH_HOE)
|
||||
val requiresPickaxe = blocks.appender(BlockTags.MINEABLE_WITH_PICKAXE)
|
||||
val requiresShovel = blocks.Appender(BlockTags.MINEABLE_WITH_SHOVEL)
|
||||
val requiresAxe = blocks.Appender(BlockTags.MINEABLE_WITH_AXE)
|
||||
val requiresHoe = blocks.Appender(BlockTags.MINEABLE_WITH_HOE)
|
||||
val requiresPickaxe = blocks.Appender(BlockTags.MINEABLE_WITH_PICKAXE)
|
||||
|
||||
val requiresStoneTool = blocks.appender(BlockTags.NEEDS_STONE_TOOL)
|
||||
val requiresIronTool = blocks.appender(BlockTags.NEEDS_IRON_TOOL)
|
||||
val requiresDiamondTool = blocks.appender(BlockTags.NEEDS_DIAMOND_TOOL)
|
||||
val requiresStoneTool = blocks.Appender(BlockTags.NEEDS_STONE_TOOL)
|
||||
val requiresIronTool = blocks.Appender(BlockTags.NEEDS_IRON_TOOL)
|
||||
val requiresDiamondTool = blocks.Appender(BlockTags.NEEDS_DIAMOND_TOOL)
|
||||
|
||||
val witherImmune = blocks.appender(BlockTags.WITHER_IMMUNE)
|
||||
val dragonImmune = blocks.appender(BlockTags.DRAGON_IMMUNE)
|
||||
val witherImmune = blocks.Appender(BlockTags.WITHER_IMMUNE)
|
||||
val dragonImmune = blocks.Appender(BlockTags.DRAGON_IMMUNE)
|
||||
|
||||
fun stoneOre(key: String, block: Block): TagsProvider {
|
||||
ore(key, block)
|
||||
@ -233,9 +224,9 @@ class TagsProvider(
|
||||
val b = TagKey.create(Registries.BLOCK, forgeKey)
|
||||
val i = TagKey.create(Registries.ITEM, forgeKey)
|
||||
|
||||
items.getSet(i).add(block.asItem())
|
||||
items.Appender(i).add(block.asItem())
|
||||
itemOres.add(block.asItem())
|
||||
blocks.getSet(b).add(block)
|
||||
blocks.Appender(b).add(block)
|
||||
blockOres.add(block)
|
||||
|
||||
return this
|
||||
@ -286,7 +277,7 @@ class TagsProvider(
|
||||
// val itemOreRatesDense = items.forge("ore_rates/dense")
|
||||
|
||||
val gameEvents = Delegate(Registries.GAME_EVENT)
|
||||
val vibrations = gameEvents.appender(GameEventTags.VIBRATIONS)
|
||||
val vibrations = gameEvents.Appender(GameEventTags.VIBRATIONS)
|
||||
|
||||
fun requiresPickaxe(block: Block, tier: Tier? = null): TagsProvider {
|
||||
requiresPickaxe.add(block)
|
||||
|
Loading…
Reference in New Issue
Block a user