Update energy container upgrade recipe
This commit is contained in:
parent
aaecbf8ae5
commit
eaefda867d
@ -1,73 +1,32 @@
|
||||
package ru.dbotthepony.mc.otm.recipe
|
||||
|
||||
import com.mojang.serialization.Codec
|
||||
import net.minecraft.core.NonNullList
|
||||
import com.mojang.serialization.MapCodec
|
||||
import net.minecraft.core.HolderLookup
|
||||
import net.minecraft.core.RegistryAccess
|
||||
import net.minecraft.core.component.DataComponents
|
||||
import net.minecraft.network.FriendlyByteBuf
|
||||
import net.minecraft.world.inventory.CraftingContainer
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
import net.minecraft.network.codec.StreamCodec
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.crafting.CraftingBookCategory
|
||||
import net.minecraft.world.item.crafting.CraftingRecipe
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraft.world.item.crafting.CraftingInput
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer
|
||||
import net.minecraft.world.item.crafting.RecipeType
|
||||
import net.minecraft.world.item.crafting.ShapedRecipe
|
||||
import net.minecraft.world.item.crafting.ShapedRecipePattern
|
||||
import net.minecraft.world.item.enchantment.ItemEnchantments
|
||||
import net.minecraft.world.level.Level
|
||||
import net.minecraftforge.common.crafting.IShapedRecipe
|
||||
import ru.dbotthepony.mc.otm.capability.matteryEnergy
|
||||
import ru.dbotthepony.mc.otm.container.util.iterator
|
||||
import ru.dbotthepony.mc.otm.container.util.stream
|
||||
import ru.dbotthepony.mc.otm.core.filterNotNull
|
||||
|
||||
class EnergyContainerRecipe(val parent: ShapedRecipe) : CraftingRecipe, IShapedRecipe<CraftingContainer> by parent {
|
||||
override fun canCraftInDimensions(p_43999_: Int, p_44000_: Int): Boolean {
|
||||
return parent.canCraftInDimensions(p_43999_, p_44000_)
|
||||
}
|
||||
class EnergyContainerRecipe(group: String, category: CraftingBookCategory, pattern: ShapedRecipePattern, result: ItemStack, showNotification: Boolean = true) : ShapedRecipe(group, category, pattern, result, showNotification) {
|
||||
constructor(parent: ShapedRecipe) : this(parent.group, parent.category(), parent.pattern, parent.result, parent.showNotification())
|
||||
|
||||
override fun getResultItem(p_267052_: RegistryAccess): ItemStack {
|
||||
return parent.getResultItem(p_267052_)
|
||||
}
|
||||
override fun assemble(container: CraftingInput, registryAccess: HolderLookup.Provider): ItemStack {
|
||||
val itemStack = super.assemble(container, registryAccess)
|
||||
|
||||
override fun category(): CraftingBookCategory {
|
||||
return parent.category()
|
||||
}
|
||||
|
||||
override fun getRemainingItems(p_44004_: CraftingContainer): NonNullList<ItemStack> {
|
||||
return parent.getRemainingItems(p_44004_)
|
||||
}
|
||||
|
||||
override fun getIngredients(): NonNullList<Ingredient> {
|
||||
return parent.ingredients
|
||||
}
|
||||
|
||||
override fun isSpecial(): Boolean {
|
||||
return parent.isSpecial
|
||||
}
|
||||
|
||||
override fun showNotification(): Boolean {
|
||||
return parent.showNotification()
|
||||
}
|
||||
|
||||
override fun getGroup(): String {
|
||||
return parent.group
|
||||
}
|
||||
|
||||
override fun getToastSymbol(): ItemStack {
|
||||
return parent.toastSymbol
|
||||
}
|
||||
|
||||
override fun isIncomplete(): Boolean {
|
||||
return parent.isIncomplete
|
||||
}
|
||||
|
||||
override fun getType(): RecipeType<*> {
|
||||
return parent.type
|
||||
}
|
||||
|
||||
override fun assemble(container: CraftingContainer, registryAccess: RegistryAccess): ItemStack {
|
||||
val itemStack = parent.assemble(container, registryAccess)
|
||||
|
||||
val battery = container.stream()
|
||||
val battery = container.items().stream()
|
||||
.filter { !it.isEmpty }
|
||||
.map { it.matteryEnergy }
|
||||
.filterNotNull()
|
||||
@ -78,10 +37,16 @@ class EnergyContainerRecipe(val parent: ShapedRecipe) : CraftingRecipe, IShapedR
|
||||
}
|
||||
|
||||
if (itemStack.isEnchantable) {
|
||||
for (it in container.iterator()) {
|
||||
if (it.isEnchanted) {
|
||||
for ((key, value) in it.allEnchantments) {
|
||||
itemStack.enchant(key, value)
|
||||
for (it in container.items()) {
|
||||
val enchantments = it[DataComponents.ENCHANTMENTS]
|
||||
|
||||
if (enchantments != null) {
|
||||
itemStack[DataComponents.ENCHANTMENTS] = ItemEnchantments.Mutable(itemStack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)).let {
|
||||
for ((key, level) in enchantments.entrySet()) {
|
||||
it.upgrade(key, level)
|
||||
}
|
||||
|
||||
it.toImmutable()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -90,8 +55,8 @@ class EnergyContainerRecipe(val parent: ShapedRecipe) : CraftingRecipe, IShapedR
|
||||
return itemStack
|
||||
}
|
||||
|
||||
override fun matches(container: CraftingContainer, level: Level): Boolean {
|
||||
return parent.matches(container, level) && !container.stream().anyMatch { it.isDamaged }
|
||||
override fun matches(container: CraftingInput, level: Level): Boolean {
|
||||
return super.matches(container, level) && container.items().none { it.isDamaged }
|
||||
}
|
||||
|
||||
override fun getSerializer(): RecipeSerializer<EnergyContainerRecipe> {
|
||||
@ -100,19 +65,19 @@ class EnergyContainerRecipe(val parent: ShapedRecipe) : CraftingRecipe, IShapedR
|
||||
|
||||
companion object : RecipeSerializer<EnergyContainerRecipe> {
|
||||
private val codec by lazy {
|
||||
RecipeSerializer.SHAPED_RECIPE.codec().xmap(::EnergyContainerRecipe, EnergyContainerRecipe::parent)
|
||||
RecipeSerializer.SHAPED_RECIPE.codec().xmap(::EnergyContainerRecipe, { it })
|
||||
}
|
||||
|
||||
override fun codec(): Codec<EnergyContainerRecipe> {
|
||||
private val streamCodec by lazy {
|
||||
RecipeSerializer.SHAPED_RECIPE.streamCodec().map(::EnergyContainerRecipe, { it })
|
||||
}
|
||||
|
||||
override fun codec(): MapCodec<EnergyContainerRecipe> {
|
||||
return codec
|
||||
}
|
||||
|
||||
override fun fromNetwork(data: FriendlyByteBuf): EnergyContainerRecipe? {
|
||||
return ShapedRecipe.Serializer.SHAPED_RECIPE.fromNetwork(data)?.let(::EnergyContainerRecipe)
|
||||
}
|
||||
|
||||
override fun toNetwork(buff: FriendlyByteBuf, value: EnergyContainerRecipe) {
|
||||
ShapedRecipe.Serializer.SHAPED_RECIPE.toNetwork(buff, value.parent)
|
||||
override fun streamCodec(): StreamCodec<RegistryFriendlyByteBuf, EnergyContainerRecipe> {
|
||||
return streamCodec
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ public net.minecraft.client.gui.screens.inventory.AbstractContainerScreen f_1696
|
||||
public net.minecraft.client.gui.screens.inventory.AbstractContainerScreen menu
|
||||
public net.minecraft.client.gui.screens.inventory.AbstractContainerScreen playerInventoryTitle
|
||||
|
||||
public net.minecraft.world.item.crafting.ShapedRecipe result
|
||||
|
||||
protected net.minecraft.client.gui.screens.inventory.AbstractContainerScreen clickedSlot
|
||||
protected net.minecraft.client.gui.screens.inventory.AbstractContainerScreen snapbackEnd
|
||||
protected net.minecraft.client.gui.screens.inventory.AbstractContainerScreen quickdropSlot
|
||||
|
Loading…
Reference in New Issue
Block a user