Package com.hbm_m.module.machine
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
FieldsModifier and TypeFieldDescriptionprotected booleanprotected Tbooleanprotected final IEnergyReceiverprotected int[]protected final ModItemStackHandlerprotected net.minecraft.world.level.Levelprotected intprotected final intbooleanprotected int[]protected net.minecraft.resources.ResourceLocationprotected doubleprotected net.minecraft.resources.ResourceLocation -
Constructor Summary
ConstructorsConstructorDescriptionMachineModuleBase(int moduleIndex, IEnergyReceiver energyStorage, ModItemStackHandler itemHandler, net.minecraft.world.level.Level level) -
Method Summary
Modifier and TypeMethodDescriptionprotected final booleancanFitAllItemOutputs(List<net.minecraft.world.item.ItemStack> itemOutputs, int[] outputSlots) protected abstract booleancanProcess(T recipe) voiddeserialize(net.minecraft.network.FriendlyByteBuf buf) protected abstract Tprotected abstract TfindRecipeForItem(net.minecraft.world.item.ItemStack stack) booleanСовместимость со старым API модулей/BE.net.minecraft.core.NonNullList<net.minecraft.world.item.ItemStack>Возвращает список призрачных предметов для GUI Переопределите в дочерних классах для специфической логикиintdoubleintdoubleprotected final TgetRecipeByIdCached(net.minecraft.world.item.crafting.RecipeType<T> type, net.minecraft.resources.ResourceLocation id) Fast recipe lookup by id usingModRecipeIndex.protected abstract intgetRecipeDuration(T recipe) protected abstract longgetRecipeEnergyCost(T recipe) protected abstract net.minecraft.world.item.crafting.RecipeType<T>net.minecraft.resources.ResourceLocationstatic booleanhasEnoughEnergyForTick(long storedEnergy, long energyPerTick) static booleanhasEnoughEnergyToStartCraft(double progress, long storedEnergy, long energyPerTick, int maxProgress) Энергетический гейт "как у ассемблера": - если крафт только начинается, машина ждёт пока накопится энергия на ВЕСЬ цикл; - если крафт уже идёт, и на текущий тик энергии не хватает — прогресс не сбрасываем, просто ждём.protected static booleanisBlueprintAllowedForPool(String recipePool, net.minecraft.world.item.ItemStack blueprint) Утилита для рецептов, которые имеют поле blueprintPool (как в 1.7.10 pooled recipes).protected static booleanisBlueprintPoolAllowed(String recipePool, net.minecraft.world.item.ItemStack blueprint) Центральная проверка blueprint pool.booleanisItemValidForSlot(int slot, net.minecraft.world.item.ItemStack stack) booleanprotected booleanisRecipeAllowedByBlueprint(T recipe, net.minecraft.world.item.ItemStack blueprint) Optional hook: recipe is allowed for current blueprint.booleanisSlotClogged(int slot) protected abstract booleanmatchesCurrentRecipe(T recipe) protected voidonRecipeChanged(T previous, T current) Optional hook: вызывается при смене рецепта (ID или auto-выбор).protected TDefault selection: preferred -> selected -> auto (findRecipeForInputs).protected final voidplaceAllItemOutputs(List<net.minecraft.world.item.ItemStack> itemOutputs, int[] outputSlots) protected abstract voidprocessCraft(T recipe) protected voidreadExtraFromBuf(net.minecraft.network.FriendlyByteBuf buf) protected voidreadExtraFromNbt(net.minecraft.nbt.CompoundTag nbt) voidreadFromNBT(net.minecraft.nbt.CompoundTag nbt) final voidreadNBT(net.minecraft.nbt.CompoundTag tag) protected booleanХук семантики энергогейта: - true (default): как у ассемблера — при старте ждём энергию на весь циклvoidСбрасывает прогресс крафта и текущий рецепт.voidserialize(net.minecraft.network.FriendlyByteBuf buf) voidsetLevel(net.minecraft.world.level.Level level) BlockEntity может создать модуль до установки level — обновляем ссылку при каждом тике.voidsetPreferredRecipeId(net.minecraft.resources.ResourceLocation id) voidsetSelectedRecipeId(net.minecraft.resources.ResourceLocation id) final voidupdate(double speedMultiplier, double powerMultiplier, boolean extraCondition) voidupdate(double speedMultiplier, double powerMultiplier, boolean extraCondition, net.minecraft.world.item.ItemStack blueprint) Обновление с поддержкой blueprintprotected voidwriteExtraToBuf(net.minecraft.network.FriendlyByteBuf buf) protected voidwriteExtraToNbt(net.minecraft.nbt.CompoundTag nbt) Доп. состояние модуля, которое не относится к базовому прогрессу (например выбранный рецепт).final voidwriteNBT(net.minecraft.nbt.CompoundTag tag) Совместимость: старое имя NBT-сериализации (химмашина и др.).voidwriteToNBT(net.minecraft.nbt.CompoundTag nbt)
-
Field Details
-
moduleIndex
protected final int moduleIndex -
energyStorage
-
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
-
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
-
MachineModuleBase
public MachineModuleBase(int moduleIndex, IEnergyReceiver energyStorage, ModItemStackHandler itemHandler, net.minecraft.world.level.Level level)
-
-
Method Details
-
setLevel
public void setLevel(net.minecraft.world.level.Level level) BlockEntity может создать модуль до установки level — обновляем ссылку при каждом тике. -
getRecipeType
-
findRecipeForInputs
-
canProcess
-
processCraft
-
matchesCurrentRecipe
-
getRecipeDuration
-
getRecipeEnergyCost
-
findRecipeForItem
-
onRecipeChanged
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 usingModRecipeIndex. -
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
-
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
-