Forge seemingly removed its lootpool deserializer patches
This commit is contained in:
parent
3fca6e0694
commit
926b9a2a17
@ -43,35 +43,14 @@ class LootPoolAppender(conditions: Array<out LootItemCondition>, pools: Stream<L
|
|||||||
companion object {
|
companion object {
|
||||||
private val lootPoolCodec: Codec<List<LootPool>>
|
private val lootPoolCodec: Codec<List<LootPool>>
|
||||||
|
|
||||||
private val forgeHooksLootContext by lazy {
|
|
||||||
val field = ForgeHooks::class.java.getDeclaredField("lootContext")
|
|
||||||
field.isAccessible = true
|
|
||||||
field
|
|
||||||
}
|
|
||||||
|
|
||||||
private val lootTableContextConstructor by lazy {
|
|
||||||
val clazz = ForgeHooks::class.java.declaredClasses.firstOrNull { it.name.contains("LootTableContext") } ?: throw NoSuchElementException("Unable to find ForgeHooks\$LootTableContext!")
|
|
||||||
val constructor = clazz.getDeclaredConstructor(ResourceLocation::class.java, Boolean::class.java)
|
|
||||||
constructor.isAccessible = true
|
|
||||||
constructor
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val serializer = Deserializers.createLootTableSerializer().create()
|
val serializer = Deserializers.createLootTableSerializer().create()
|
||||||
val notExistingLocation = ResourceLocation("null", "null")
|
|
||||||
|
|
||||||
lootPoolCodec = Codec.list(Codec.PASSTHROUGH.flatXmap({
|
lootPoolCodec = Codec.list(Codec.PASSTHROUGH.flatXmap({
|
||||||
val dequeueHolder = forgeHooksLootContext.get(null) as ThreadLocal<Deque<Any>>
|
|
||||||
val deque = dequeueHolder.get() ?: java.util.ArrayDeque()
|
|
||||||
dequeueHolder.set(deque)
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
deque.push(lootTableContextConstructor.newInstance(notExistingLocation, true))
|
|
||||||
DataResult.success(serializer.fromJson(it.convert(JsonOps.INSTANCE).value, LootPool::class.java))
|
DataResult.success(serializer.fromJson(it.convert(JsonOps.INSTANCE).value, LootPool::class.java))
|
||||||
} catch(err: JsonSyntaxException) {
|
} catch(err: JsonSyntaxException) {
|
||||||
DataResult.error { err.message }
|
DataResult.error { err.message }
|
||||||
} finally {
|
|
||||||
deque.pop()
|
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
try {
|
try {
|
||||||
|
Loading…
Reference in New Issue
Block a user