Merge painter recipe types
This commit is contained in:
parent
b26f109f56
commit
280a8f3431
@ -20,11 +20,17 @@ import net.minecraft.world.item.ItemStack
|
|||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||||
import ru.dbotthepony.mc.otm.client.minecraft
|
import ru.dbotthepony.mc.otm.client.minecraft
|
||||||
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
import ru.dbotthepony.mc.otm.client.screen.MatteryScreen
|
||||||
|
import ru.dbotthepony.mc.otm.core.collect.filter
|
||||||
|
import ru.dbotthepony.mc.otm.core.collect.filterIsInstance
|
||||||
|
import ru.dbotthepony.mc.otm.core.collect.filterNotNull
|
||||||
|
import ru.dbotthepony.mc.otm.core.collect.map
|
||||||
|
import ru.dbotthepony.mc.otm.core.collect.toList
|
||||||
import ru.dbotthepony.mc.otm.menu.decorative.PainterMenu
|
import ru.dbotthepony.mc.otm.menu.decorative.PainterMenu
|
||||||
import ru.dbotthepony.mc.otm.menu.matter.MatterEntanglerMenu
|
import ru.dbotthepony.mc.otm.menu.matter.MatterEntanglerMenu
|
||||||
import ru.dbotthepony.mc.otm.menu.tech.PlatePressMenu
|
import ru.dbotthepony.mc.otm.menu.tech.PlatePressMenu
|
||||||
import ru.dbotthepony.mc.otm.menu.tech.PoweredFurnaceMenu
|
import ru.dbotthepony.mc.otm.menu.tech.PoweredFurnaceMenu
|
||||||
import ru.dbotthepony.mc.otm.menu.tech.TwinPlatePressMenu
|
import ru.dbotthepony.mc.otm.menu.tech.TwinPlatePressMenu
|
||||||
|
import ru.dbotthepony.mc.otm.recipe.PainterRecipe
|
||||||
import ru.dbotthepony.mc.otm.registry.MItems
|
import ru.dbotthepony.mc.otm.registry.MItems
|
||||||
import ru.dbotthepony.mc.otm.registry.MRecipes
|
import ru.dbotthepony.mc.otm.registry.MRecipes
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@ -91,7 +97,7 @@ class JEIPlugin : IModPlugin {
|
|||||||
val level = minecraft.level ?: throw NullPointerException("No ClientLevel. OLOLOLOLOLOLO")
|
val level = minecraft.level ?: throw NullPointerException("No ClientLevel. OLOLOLOLOLOLO")
|
||||||
|
|
||||||
registration.addRecipes(PlatePressRecipeCategory.recipeType, level.recipeManager.getAllRecipesFor(MRecipes.PLATE_PRESS).filter { !it.value.isIncomplete }.map { it.value })
|
registration.addRecipes(PlatePressRecipeCategory.recipeType, level.recipeManager.getAllRecipesFor(MRecipes.PLATE_PRESS).filter { !it.value.isIncomplete }.map { it.value })
|
||||||
registration.addRecipes(PainterRecipeCategory.recipeType, level.recipeManager.getAllRecipesFor(MRecipes.PAINTER).filter { !it.value.isIncomplete }.map { it.value })
|
registration.addRecipes(PainterRecipeCategory.recipeType, level.recipeManager.getAllRecipesFor(MRecipes.PAINTER).iterator().filter { !it.value.isIncomplete }.map { it.value }.filterIsInstance<PainterRecipe>().toList())
|
||||||
registration.addRecipes(MatterEntanglerRecipeCategory.recipeType, level.recipeManager.getAllRecipesFor(MRecipes.MATTER_ENTANGLER).filter { !it.value.isIncomplete }.map { it.value })
|
registration.addRecipes(MatterEntanglerRecipeCategory.recipeType, level.recipeManager.getAllRecipesFor(MRecipes.MATTER_ENTANGLER).filter { !it.value.isIncomplete }.map { it.value })
|
||||||
registration.addRecipes(MicrowaveRecipeCategory.recipeType, level.recipeManager.getAllRecipesFor(MRecipes.MICROWAVE).filter { !it.value.isIncomplete }.map { it.value })
|
registration.addRecipes(MicrowaveRecipeCategory.recipeType, level.recipeManager.getAllRecipesFor(MRecipes.MICROWAVE).filter { !it.value.isIncomplete }.map { it.value })
|
||||||
}
|
}
|
||||||
|
@ -230,6 +230,8 @@ inline fun <T> Iterator<T>.reduce(identity: T, reducer: (T, T) -> T): T {
|
|||||||
|
|
||||||
fun <T> Iterator<T?>.filterNotNull(): MutableIterator<T> = filter { it != null } as MutableIterator<T>
|
fun <T> Iterator<T?>.filterNotNull(): MutableIterator<T> = filter { it != null } as MutableIterator<T>
|
||||||
|
|
||||||
|
inline fun <reified T> Iterator<*>.filterIsInstance(): MutableIterator<T> = filter { it is T } as MutableIterator<T>
|
||||||
|
|
||||||
fun <T> Iterator<T>.any(predicate: Predicate<in T>): Boolean {
|
fun <T> Iterator<T>.any(predicate: Predicate<in T>): Boolean {
|
||||||
while (hasNext())
|
while (hasNext())
|
||||||
if (predicate.test(next()))
|
if (predicate.test(next()))
|
||||||
|
@ -57,7 +57,7 @@ class PainterMenu(
|
|||||||
return super.mayPlace(itemStack)
|
return super.mayPlace(itemStack)
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.mayPlace(itemStack) && inventory.player.level().recipeManager.byType(MRecipes.PAINTER).values.any { it.value.input.test(itemStack) }
|
return super.mayPlace(itemStack) && inventory.player.level().recipeManager.byType(MRecipes.PAINTER).values.any { it.value.matches(itemStack) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,11 +128,7 @@ class PainterMenu(
|
|||||||
|
|
||||||
private fun rescan() {
|
private fun rescan() {
|
||||||
possibleRecipes.clear()
|
possibleRecipes.clear()
|
||||||
possibleRecipes.addAll(inventory.player.level().recipeManager.byType(MRecipes.PAINTER).values.iterator().filter { it.value.input.test(inputContainer[0]) })
|
possibleRecipes.addAll(inventory.player.level().recipeManager.byType(MRecipes.PAINTER).values.iterator().filter { it.value.matches(inputContainer[0]) })
|
||||||
|
|
||||||
if (!inputContainer[0].isEmpty && inputContainer[0].item is DyeableArmorItem) {
|
|
||||||
possibleRecipes.addAll(inventory.player.level().recipeManager.byType(MRecipes.PAINTER_ARMOR_DYE).values)
|
|
||||||
}
|
|
||||||
|
|
||||||
listeners.accept(Unit)
|
listeners.accept(Unit)
|
||||||
if (tile !is PainterBlockEntity) return
|
if (tile !is PainterBlockEntity) return
|
||||||
@ -140,7 +136,7 @@ class PainterMenu(
|
|||||||
if (inputContainer.isEmpty || selectedRecipe == null) {
|
if (inputContainer.isEmpty || selectedRecipe == null) {
|
||||||
outputContainer.clearContent()
|
outputContainer.clearContent()
|
||||||
} else {
|
} else {
|
||||||
val recipe = inventory.player.level().recipeManager.byKey(selectedRecipe).get() as RecipeHolder<AbstractPainterRecipe>?
|
val recipe = inventory.player.level().recipeManager.byKey(selectedRecipe!!).get() as RecipeHolder<AbstractPainterRecipe>?
|
||||||
|
|
||||||
if (recipe == null || !recipe.value.canCraft(dyeStoredDirect) || !recipe.value.matches(inputContainer, inventory.player.level())) {
|
if (recipe == null || !recipe.value.canCraft(dyeStoredDirect) || !recipe.value.matches(inputContainer, inventory.player.level())) {
|
||||||
outputContainer.clearContent()
|
outputContainer.clearContent()
|
||||||
|
@ -35,6 +35,12 @@ abstract class AbstractPainterRecipe(
|
|||||||
) : IMatteryRecipe<Container> {
|
) : IMatteryRecipe<Container> {
|
||||||
val dyes: Object2IntMap<DyeColor?> = Object2IntMaps.unmodifiable(Object2IntArrayMap(dyes))
|
val dyes: Object2IntMap<DyeColor?> = Object2IntMaps.unmodifiable(Object2IntArrayMap(dyes))
|
||||||
|
|
||||||
|
abstract fun matches(value: ItemStack): Boolean
|
||||||
|
|
||||||
|
override fun matches(contaier: Container, level: Level): Boolean {
|
||||||
|
return !isIncomplete && matches(contaier[0])
|
||||||
|
}
|
||||||
|
|
||||||
override fun getToastSymbol(): ItemStack = ItemStack(MItems.PAINTER)
|
override fun getToastSymbol(): ItemStack = ItemStack(MItems.PAINTER)
|
||||||
|
|
||||||
fun canCraft(storedDyes: Map<out DyeColor?, Int>): Boolean {
|
fun canCraft(storedDyes: Map<out DyeColor?, Int>): Boolean {
|
||||||
@ -110,9 +116,8 @@ class PainterRecipe(
|
|||||||
dyes: Set<DyeColor?>
|
dyes: Set<DyeColor?>
|
||||||
) : this(input, output, Object2IntArrayMap<DyeColor?>().also { map -> dyes.forEach { map[it] = 1 } })
|
) : this(input, output, Object2IntArrayMap<DyeColor?>().also { map -> dyes.forEach { map[it] = 1 } })
|
||||||
|
|
||||||
override fun matches(p_44002_: Container, p_44003_: Level): Boolean {
|
override fun matches(value: ItemStack): Boolean {
|
||||||
if (isIncomplete) return false
|
return !isIncomplete && input.test(value)
|
||||||
return input.test(p_44002_[0])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isIncomplete(): Boolean {
|
override fun isIncomplete(): Boolean {
|
||||||
@ -176,11 +181,8 @@ class PainterArmorDyeRecipe(
|
|||||||
dyes: Set<DyeColor?>
|
dyes: Set<DyeColor?>
|
||||||
) : this(Object2IntArrayMap<DyeColor?>().also { map -> dyes.forEach { map[it] = 1 } })
|
) : this(Object2IntArrayMap<DyeColor?>().also { map -> dyes.forEach { map[it] = 1 } })
|
||||||
|
|
||||||
override fun matches(contaier: Container, level: Level): Boolean {
|
override fun matches(value: ItemStack): Boolean {
|
||||||
if (this.isIncomplete) return false
|
return !isIncomplete && value.item is DyeableArmorItem
|
||||||
val stack = contaier[0]
|
|
||||||
|
|
||||||
return (!stack.isEmpty && stack.item is DyeableArmorItem)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun assemble(container: Container, registry: RegistryAccess): ItemStack {
|
override fun assemble(container: Container, registry: RegistryAccess): ItemStack {
|
||||||
@ -201,7 +203,7 @@ class PainterArmorDyeRecipe(
|
|||||||
|
|
||||||
override fun getSerializer(): RecipeSerializer<*> = SERIALIZER
|
override fun getSerializer(): RecipeSerializer<*> = SERIALIZER
|
||||||
|
|
||||||
override fun getType(): RecipeType<*> = MRecipes.PAINTER_ARMOR_DYE
|
override fun getType(): RecipeType<*> = MRecipes.PAINTER
|
||||||
|
|
||||||
override fun isIncomplete(): Boolean = dyes.isEmpty()
|
override fun isIncomplete(): Boolean = dyes.isEmpty()
|
||||||
|
|
||||||
|
@ -33,8 +33,7 @@ object MRecipes {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val PLATE_PRESS by register<PlatePressRecipe>("plate_press")
|
val PLATE_PRESS by register<PlatePressRecipe>("plate_press")
|
||||||
val PAINTER by register<PainterRecipe>("painter")
|
val PAINTER by register<AbstractPainterRecipe>("painter")
|
||||||
val PAINTER_ARMOR_DYE by register<PainterArmorDyeRecipe>("painter_armor_dye")
|
|
||||||
val MATTER_ENTANGLER by register<IMatterEntanglerRecipe>("matter_entangler")
|
val MATTER_ENTANGLER by register<IMatterEntanglerRecipe>("matter_entangler")
|
||||||
val MICROWAVE by register<MicrowaveRecipe>("microwave")
|
val MICROWAVE by register<MicrowaveRecipe>("microwave")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user