Class MachineModuleBase<T extends net.minecraft.world.item.crafting.Recipe<?>>

java.lang.Object
com.hbm_m.module.machine.MachineModuleBase<T>
Direct Known Subclasses:
MachineModuleAdvancedAssembler, MachineModuleChemplant

public abstract class MachineModuleBase<T extends net.minecraft.world.item.crafting.Recipe<?>> extends Object
Базовый модуль машины, инкапсулирующий логику крафта. Вдохновлён оригинальным ModuleMachineBase из HBM 1.7.10. Адаптирован для 1.20.1: - Использует RecipeManager вместо GenericRecipes - Работает с IItemHandler вместо массива слотов - ОБНОВЛЕНО: Использует ILongEnergyStorage для поддержки больших значений энергии
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected boolean
     
    protected T
     
    boolean
     
    protected final IEnergyReceiver
     
    protected int[]
     
    protected final ModItemStackHandler
     
    protected net.minecraft.world.level.Level
     
    protected int
     
    protected final int
     
    boolean
     
    protected int[]
     
    protected net.minecraft.resources.ResourceLocation
     
    protected double
     
    protected net.minecraft.resources.ResourceLocation
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    MachineModuleBase(int moduleIndex, IEnergyReceiver energyStorage, ModItemStackHandler itemHandler, net.minecraft.world.level.Level level)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected final boolean
    canFitAllItemOutputs(List<net.minecraft.world.item.ItemStack> itemOutputs, int[] outputSlots)
     
    protected abstract boolean
    canProcess(T recipe)
     
    void
    deserialize(net.minecraft.network.FriendlyByteBuf buf)
     
    protected abstract T
     
    protected abstract T
    findRecipeForItem(net.minecraft.world.item.ItemStack stack)
     
     
    boolean
    Совместимость со старым API модулей/BE.
    net.minecraft.core.NonNullList<net.minecraft.world.item.ItemStack>
    Возвращает список призрачных предметов для GUI Переопределите в дочерних классах для специфической логики
    int
     
    double
     
    int
     
    double
     
    protected final T
    getRecipeByIdCached(net.minecraft.world.item.crafting.RecipeType<T> type, net.minecraft.resources.ResourceLocation id)
    Fast recipe lookup by id using ModRecipeIndex.
    protected abstract int
     
    protected abstract long
     
    protected abstract net.minecraft.world.item.crafting.RecipeType<T>
     
    net.minecraft.resources.ResourceLocation
     
    static boolean
    hasEnoughEnergyForTick(long storedEnergy, long energyPerTick)
     
    static boolean
    hasEnoughEnergyToStartCraft(double progress, long storedEnergy, long energyPerTick, int maxProgress)
    Энергетический гейт "как у ассемблера": - если крафт только начинается, машина ждёт пока накопится энергия на ВЕСЬ цикл; - если крафт уже идёт, и на текущий тик энергии не хватает — прогресс не сбрасываем, просто ждём.
    protected static boolean
    isBlueprintAllowedForPool(String recipePool, net.minecraft.world.item.ItemStack blueprint)
    Утилита для рецептов, которые имеют поле blueprintPool (как в 1.7.10 pooled recipes).
    protected static boolean
    isBlueprintPoolAllowed(String recipePool, net.minecraft.world.item.ItemStack blueprint)
    Центральная проверка blueprint pool.
    boolean
    isItemValidForSlot(int slot, net.minecraft.world.item.ItemStack stack)
     
    boolean
     
    protected boolean
    isRecipeAllowedByBlueprint(T recipe, net.minecraft.world.item.ItemStack blueprint)
    Optional hook: recipe is allowed for current blueprint.
    boolean
    isSlotClogged(int slot)
     
    protected abstract boolean
     
    protected void
    onRecipeChanged(T previous, T current)
    Optional hook: вызывается при смене рецепта (ID или auto-выбор).
    protected T
    Default selection: preferred -> selected -> auto (findRecipeForInputs).
    protected final void
    placeAllItemOutputs(List<net.minecraft.world.item.ItemStack> itemOutputs, int[] outputSlots)
     
    protected abstract void
    processCraft(T recipe)
     
    protected void
    readExtraFromBuf(net.minecraft.network.FriendlyByteBuf buf)
     
    protected void
    readExtraFromNbt(net.minecraft.nbt.CompoundTag nbt)
     
    void
    readFromNBT(net.minecraft.nbt.CompoundTag nbt)
     
    final void
    readNBT(net.minecraft.nbt.CompoundTag tag)
     
    protected boolean
    Хук семантики энергогейта: - true (default): как у ассемблера — при старте ждём энергию на весь цикл
    void
    Сбрасывает прогресс крафта и текущий рецепт.
    void
    serialize(net.minecraft.network.FriendlyByteBuf buf)
     
    void
    setLevel(net.minecraft.world.level.Level level)
    BlockEntity может создать модуль до установки level — обновляем ссылку при каждом тике.
    void
    setPreferredRecipeId(net.minecraft.resources.ResourceLocation id)
     
    void
    setSelectedRecipeId(net.minecraft.resources.ResourceLocation id)
     
    final void
    update(double speedMultiplier, double powerMultiplier, boolean extraCondition)
     
    void
    update(double speedMultiplier, double powerMultiplier, boolean extraCondition, net.minecraft.world.item.ItemStack blueprint)
    Обновление с поддержкой blueprint
    protected void
    writeExtraToBuf(net.minecraft.network.FriendlyByteBuf buf)
     
    protected void
    writeExtraToNbt(net.minecraft.nbt.CompoundTag nbt)
    Доп. состояние модуля, которое не относится к базовому прогрессу (например выбранный рецепт).
    final void
    writeNBT(net.minecraft.nbt.CompoundTag tag)
    Совместимость: старое имя NBT-сериализации (химмашина и др.).
    void
    writeToNBT(net.minecraft.nbt.CompoundTag nbt)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • moduleIndex

      protected final int moduleIndex
    • energyStorage

      protected final IEnergyReceiver energyStorage
    • itemHandler

      protected final ModItemStackHandler itemHandler
    • level

      protected net.minecraft.world.level.Level level
    • inputSlots

      protected int[] inputSlots
    • outputSlots

      protected int[] outputSlots
    • progress

      protected double progress
    • maxProgress

      protected int maxProgress
    • currentRecipe

      @Nullable protected T extends net.minecraft.world.item.crafting.Recipe<?> currentRecipe
    • selectedRecipeId

      @Nullable protected net.minecraft.resources.ResourceLocation selectedRecipeId
    • preferredRecipeId

      @Nullable protected net.minecraft.resources.ResourceLocation preferredRecipeId
    • autoSelectRecipe

      protected boolean autoSelectRecipe
    • didProcess

      public boolean didProcess
    • needsSync

      public boolean needsSync
  • Constructor Details

  • Method Details

    • setLevel

      public void setLevel(net.minecraft.world.level.Level level)
      BlockEntity может создать модуль до установки level — обновляем ссылку при каждом тике.
    • getRecipeType

      protected abstract net.minecraft.world.item.crafting.RecipeType<T> getRecipeType()
    • findRecipeForInputs

      @Nullable protected abstract T findRecipeForInputs()
    • canProcess

      protected abstract boolean canProcess(@Nullable T recipe)
    • processCraft

      protected abstract void processCraft(T recipe)
    • matchesCurrentRecipe

      protected abstract boolean matchesCurrentRecipe(T recipe)
    • getRecipeDuration

      protected abstract int getRecipeDuration(T recipe)
    • getRecipeEnergyCost

      protected abstract long getRecipeEnergyCost(T recipe)
    • findRecipeForItem

      @Nullable protected abstract T findRecipeForItem(net.minecraft.world.item.ItemStack stack)
    • onRecipeChanged

      protected void onRecipeChanged(@Nullable T previous, @Nullable T current)
      Optional hook: вызывается при смене рецепта (ID или auto-выбор). Например, машины с жидкостными баками могут сконфигурировать типы баков.
    • requiresFullEnergyBufferToStart

      protected boolean requiresFullEnergyBufferToStart()
      Хук семантики энергогейта: - true (default): как у ассемблера — при старте ждём энергию на весь цикл. - false: как у химмашины в 1.7.10 — достаточно энергии только на текущий тик.
    • isBlueprintPoolAllowed

      protected static boolean isBlueprintPoolAllowed(@Nullable String recipePool, net.minecraft.world.item.ItemStack blueprint)
      Центральная проверка blueprint pool.
    • isBlueprintAllowedForPool

      protected static boolean isBlueprintAllowedForPool(@Nullable String recipePool, @Nullable net.minecraft.world.item.ItemStack blueprint)
      Утилита для рецептов, которые имеют поле blueprintPool (как в 1.7.10 pooled recipes).
    • isRecipeAllowedByBlueprint

      protected boolean isRecipeAllowedByBlueprint(T recipe, @Nullable net.minecraft.world.item.ItemStack blueprint)
      Optional hook: recipe is allowed for current blueprint. Default: always allowed (machines without blueprint system).
    • getRecipeByIdCached

      @Nullable protected final T getRecipeByIdCached(net.minecraft.world.item.crafting.RecipeType<T> type, @Nullable net.minecraft.resources.ResourceLocation id)
      Fast recipe lookup by id using ModRecipeIndex.
    • pickRecipeForTick

      @Nullable protected T pickRecipeForTick()
      Default selection: preferred -> selected -> auto (findRecipeForInputs).
    • hasEnoughEnergyToStartCraft

      public static boolean hasEnoughEnergyToStartCraft(double progress, long storedEnergy, long energyPerTick, int maxProgress)
      Энергетический гейт "как у ассемблера": - если крафт только начинается, машина ждёт пока накопится энергия на ВЕСЬ цикл; - если крафт уже идёт, и на текущий тик энергии не хватает — прогресс не сбрасываем, просто ждём. Вынесено в базовый модуль, чтобы разные машины могли переиспользовать одну логику.
    • hasEnoughEnergyForTick

      public static boolean hasEnoughEnergyForTick(long storedEnergy, long energyPerTick)
    • update

      public final void update(double speedMultiplier, double powerMultiplier, boolean extraCondition)
    • isItemValidForSlot

      public boolean isItemValidForSlot(int slot, net.minecraft.world.item.ItemStack stack)
    • isSlotClogged

      public boolean isSlotClogged(int slot)
    • getGhostItems

      public net.minecraft.core.NonNullList<net.minecraft.world.item.ItemStack> getGhostItems()
      Возвращает список призрачных предметов для GUI Переопределите в дочерних классах для специфической логики
    • resetProgress

      public void resetProgress()
      Сбрасывает прогресс крафта и текущий рецепт. Используется при принудительной смене рецепта через GUI.
    • getProgress

      public double getProgress()
    • getMaxProgress

      public int getMaxProgress()
    • getProgressInt

      public int getProgressInt()
    • getProgressPercent

      public double getProgressPercent()
    • getCurrentRecipe

      @Nullable public T getCurrentRecipe()
    • isProcessing

      public boolean isProcessing()
    • getDidProcess

      public boolean getDidProcess()
      Совместимость со старым API модулей/BE.
    • writeToNBT

      public void writeToNBT(net.minecraft.nbt.CompoundTag nbt)
    • readFromNBT

      public void readFromNBT(net.minecraft.nbt.CompoundTag nbt)
    • writeNBT

      public final void writeNBT(net.minecraft.nbt.CompoundTag tag)
      Совместимость: старое имя NBT-сериализации (химмашина и др.).
    • readNBT

      public final void readNBT(net.minecraft.nbt.CompoundTag tag)
    • serialize

      public void serialize(net.minecraft.network.FriendlyByteBuf buf)
    • deserialize

      public void deserialize(net.minecraft.network.FriendlyByteBuf buf)
    • writeExtraToNbt

      protected void writeExtraToNbt(net.minecraft.nbt.CompoundTag nbt)
      Доп. состояние модуля, которое не относится к базовому прогрессу (например выбранный рецепт).
    • readExtraFromNbt

      protected void readExtraFromNbt(net.minecraft.nbt.CompoundTag nbt)
    • writeExtraToBuf

      protected void writeExtraToBuf(net.minecraft.network.FriendlyByteBuf buf)
    • readExtraFromBuf

      protected void readExtraFromBuf(net.minecraft.network.FriendlyByteBuf buf)
    • canFitAllItemOutputs

      protected final boolean canFitAllItemOutputs(List<net.minecraft.world.item.ItemStack> itemOutputs, int[] outputSlots)
    • placeAllItemOutputs

      protected final void placeAllItemOutputs(List<net.minecraft.world.item.ItemStack> itemOutputs, int[] outputSlots)
    • setSelectedRecipeId

      public void setSelectedRecipeId(@Nullable net.minecraft.resources.ResourceLocation id)
    • setPreferredRecipeId

      public void setPreferredRecipeId(@Nullable net.minecraft.resources.ResourceLocation id)
    • getSelectedRecipeId

      @Nullable public net.minecraft.resources.ResourceLocation getSelectedRecipeId()
    • update

      public void update(double speedMultiplier, double powerMultiplier, boolean extraCondition, @Nullable net.minecraft.world.item.ItemStack blueprint)
      Обновление с поддержкой blueprint