Skip to content

Commit

Permalink
inject loot pools better (v2)
Browse files Browse the repository at this point in the history
  • Loading branch information
auxves committed Feb 12, 2021
1 parent 44a81fd commit 54e2e85
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 61 deletions.
7 changes: 4 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ java.targetCompatibility = JavaVersion.VERSION_1_8

fun p(name: String) = project.property(name).toString()

val apiVersion = p("fabric_api")

plugins {
id("fabric-loom")
kotlin("jvm")
Expand All @@ -17,7 +15,10 @@ dependencies {
mappings("net.fabricmc:yarn:${p("yarn")}:v2")

modImplementation("net.fabricmc:fabric-loader:${p("loader")}")
modImplementation(fabricApi.module("fabric-loot-tables-v1", apiVersion))

listOf("fabric-resource-loader-v0", "fabric-loot-tables-v1").forEach {
modImplementation(fabricApi.module(it, p("fabric_api")))
}

modImplementation("net.fabricmc:fabric-language-kotlin:${p("fabric_kotlin")}")
}
Expand Down
8 changes: 4 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ org.gradle.jvmargs=-Xmx1G
# Project
id=disco
name=Disco
version=1.0.0
version=2.0.0

# Versions (https://modmuss50.me/fabric.html)
minecraft=1.16.5
yarn=1.16.5+build.3
yarn=1.16.5+build.4
loader=0.11.1

fabric_api=0.29.4+1.16
fabric_kotlin=1.4.21+build.1
fabric_api=0.30.0+1.16
fabric_kotlin=1.4.30
12 changes: 12 additions & 0 deletions src/main/java/io/glossnyx/disco/mixin/LootTableAccessor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.glossnyx.disco.mixin;

import net.minecraft.loot.LootPool;
import net.minecraft.loot.LootTable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(LootTable.class)
public interface LootTableAccessor {
@Accessor("pools")
LootPool[] getPools();
}
15 changes: 13 additions & 2 deletions src/main/kotlin/io/glossnyx/disco/Addons.kt
Original file line number Diff line number Diff line change
@@ -1,20 +1,31 @@
package io.glossnyx.disco

import net.fabricmc.loader.api.FabricLoader
import net.fabricmc.loader.api.metadata.CustomValue
import net.fabricmc.loader.api.metadata.ModMetadata
import net.minecraft.util.Identifier

data class Addon(
val id: String,
val discs: List<Disc>,
val tables: List<Identifier>
val tables: Map<Identifier, List<Identifier>>
)

fun CustomValue.CvObject.toIdentifierMap() = map { (key, value) ->
Identifier(key) to value.asArray.toList().map { Identifier(it.asString) }
}.toMap()

fun ModMetadata.toAddon(): Addon {
val custom = getCustomValue("disco").asObject

val discs = custom.get("discs").asArray.toList().map { Disc(Identifier(id, it.asString)) }
val tables = custom.get("tables").asArray.toList().map { Identifier(it.asString) }

val tables = custom.get("tables").let {
when (it.type) {
CustomValue.CvType.OBJECT -> it.asObject.toIdentifierMap()
else -> mapOf()
}
}

return Addon(id, discs, tables)
}
Expand Down
29 changes: 0 additions & 29 deletions src/main/kotlin/io/glossnyx/disco/Discs.kt

This file was deleted.

38 changes: 36 additions & 2 deletions src/main/kotlin/io/glossnyx/disco/Entrypoint.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,40 @@
package io.glossnyx.disco

import io.glossnyx.disco.mixin.LootTableAccessor
import net.fabricmc.fabric.api.loot.v1.event.LootTableLoadingCallback
import net.minecraft.item.Item
import net.minecraft.item.ItemGroup
import net.minecraft.item.ItemStack
import net.minecraft.item.MusicDiscItem
import net.minecraft.sound.SoundEvent
import net.minecraft.text.Text
import net.minecraft.text.TranslatableText
import net.minecraft.util.Identifier
import net.minecraft.util.Rarity
import net.minecraft.util.registry.Registry

fun init() {
registerDiscs()
modifyLootTables()
addons.flatMap { it.discs }.forEach {
Registry.register(Registry.ITEM, it.id, it)
}

LootTableLoadingCallback.EVENT.register { _, lootManager, id, supplier, _ ->
val tables = addons.mapNotNull { it.tables[id] }.flatten().distinct()

tables.forEach {
val table = lootManager.getTable(it) as LootTableAccessor
table.pools.forEach(supplier::withPool)
}
}
}

private val settings = Item.Settings()
.group(ItemGroup.MISC)
.rarity(Rarity.RARE)
.maxCount(1)

class Disc(val id: Identifier) : MusicDiscItem(15, SoundEvent(id), settings) {
override fun getName(stack: ItemStack?): Text {
return TranslatableText("item.disco.all.name")
}
}
21 changes: 0 additions & 21 deletions src/main/kotlin/io/glossnyx/disco/LootTables.kt

This file was deleted.

10 changes: 10 additions & 0 deletions src/main/resources/disco.mixins.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"required": true,
"minVersion": "0.8",
"package": "io.glossnyx.disco.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": ["LootTableAccessor"],
"injectors": {
"defaultRequire": 1
}
}
3 changes: 3 additions & 0 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"description": "Modular music disc loader",
"authors": ["glossnyx"],
"contact": {
"homepage": "https://github.com/glossnyx/${id}",
"sources": "https://github.com/glossnyx/${id}"
},
"license": "MIT",
Expand All @@ -14,9 +15,11 @@
"entrypoints": {
"main": ["io.glossnyx.disco.EntrypointKt::init"]
},
"mixins": ["${id}.mixins.json"],
"depends": {
"minecraft": "1.16.x",
"fabricloader": ">=0.8.7",
"fabric-resource-loader-v0": "*",
"fabric-loot-tables-v1": "*",
"fabric-language-kotlin": "*"
}
Expand Down

0 comments on commit 54e2e85

Please sign in to comment.