Class LaunchPadBaseBlockEntity

java.lang.Object
net.minecraftforge.common.capabilities.CapabilityProvider<net.minecraft.world.level.block.entity.BlockEntity>
net.minecraft.world.level.block.entity.BlockEntity
com.hbm_m.block.entity.BaseMachineBlockEntity
com.hbm_m.block.entity.machines.LaunchPadBaseBlockEntity
All Implemented Interfaces:
IFluidConnectorMK2, IFluidReceiverMK2, IFluidStandardReceiverMK2, IFluidUserMK2, NodeNet.ILoadedEntry, IRadarCommandReceiver, IEnergyConnector, IEnergyProvider, IEnergyReceiver, net.minecraft.world.inventory.MenuConstructor, net.minecraft.world.MenuProvider, net.minecraftforge.common.capabilities.ICapabilityProvider, net.minecraftforge.common.capabilities.ICapabilityProviderImpl<net.minecraft.world.level.block.entity.BlockEntity>, net.minecraftforge.common.capabilities.ICapabilitySerializable<net.minecraft.nbt.CompoundTag>, net.minecraftforge.common.extensions.IForgeBlockEntity, net.minecraftforge.common.util.INBTSerializable<net.minecraft.nbt.CompoundTag>
Direct Known Subclasses:
LaunchPadBlockEntity, LaunchPadLargeBlockEntity, LaunchPadRustedBlockEntity

public abstract class LaunchPadBaseBlockEntity extends BaseMachineBlockEntity implements IRadarCommandReceiver, IFluidStandardReceiverMK2
Базовый BlockEntity для всех пусковых площадок. Инвентарь (7 слотов), энергия, жидкостные баки, пуск ракет и подписка на энерго-/жидкостные сети через getConPos() (угловые коннекторы мультиблока).
  • Field Details

    • TANK_CAPACITY_MB

      public static final int TANK_CAPACITY_MB
      See Also:
    • SLOT_MISSILE

      public static final int SLOT_MISSILE
      See Also:
    • SLOT_DESIGNATOR

      public static final int SLOT_DESIGNATOR
      See Also:
    • SLOT_BATTERY

      public static final int SLOT_BATTERY
      See Also:
    • SLOT_FUEL_IN

      public static final int SLOT_FUEL_IN
      See Also:
    • SLOT_FUEL_OUT

      public static final int SLOT_FUEL_OUT
      See Also:
    • SLOT_OXIDIZER_IN

      public static final int SLOT_OXIDIZER_IN
      See Also:
    • SLOT_OXIDIZER_OUT

      public static final int SLOT_OXIDIZER_OUT
      See Also:
    • SLOT_COUNT

      public static final int SLOT_COUNT
      See Also:
    • STATE_MISSING

      public static final int STATE_MISSING
      See Also:
    • STATE_LOADING

      public static final int STATE_LOADING
      See Also:
    • STATE_READY

      public static final int STATE_READY
      See Also:
    • MAX_POWER

      protected static final long MAX_POWER
      See Also:
    • MAX_RECEIVE

      protected static final long MAX_RECEIVE
      See Also:
    • MISSILES

      protected static final Map<net.minecraft.world.item.Item,net.minecraft.world.entity.EntityType<? extends MissileBaseEntity>> MISSILES
      Регистрация ракет: Item -> тип сущности (заполняется в registerLaunchables()).
    • state

      protected int state
      Текущее логическое состояние площадки (для GUI).
    • redstonePower

      protected int redstonePower
    • prevRedstonePower

      protected int prevRedstonePower
    • clientMissilePreview

      protected net.minecraft.world.item.ItemStack clientMissilePreview
    • delay

      protected int delay
      Кулдаун перед следующим пуском. Уменьшается каждый серверный тик. Когда > 0 — площадка считается «загружающейся» (STATE_LOADING).
    • tanks

      protected final FluidTank[] tanks
      Топливный и окислительный баки (как в оригинале — по 24k mB).
  • Constructor Details

    • LaunchPadBaseBlockEntity

      protected LaunchPadBaseBlockEntity(net.minecraft.world.level.block.entity.BlockEntityType<?> type, net.minecraft.core.BlockPos pos, net.minecraft.world.level.block.state.BlockState state)
  • Method Details

    • getMissileSlot

      public int getMissileSlot()
      Missile slot index; rusted pad overrides (same index 0).
    • getDesignatorSlot

      public int getDesignatorSlot()
      Designator slot index; rusted pad uses slot 3.
    • registerLaunchables

      public static void registerLaunchables()
      Связывает предметы ракет с типами сущностей. Вызывается из MainRegistry.commonSetup.
    • getLaunchItemFor

      @Nullable public static net.minecraft.world.item.Item getLaunchItemFor(net.minecraft.world.entity.EntityType<?> entityType)
    • buildStandardConPos

      protected static NodeDirPos[] buildStandardConPos(net.minecraft.core.BlockPos controller)
    • getConPos

      public abstract NodeDirPos[] getConPos()
      Угловые коннекторы мультиблока для подписки в энерго-/жидкостные сети.
    • clientLaunchPadSmokeTick

      public static void clientLaunchPadSmokeTick(net.minecraft.world.level.Level level, net.minecraft.core.BlockPos pos, net.minecraft.world.level.block.state.BlockState state)
    • commonServerTick

      protected static void commonServerTick(net.minecraft.world.level.Level level, net.minecraft.core.BlockPos pos, net.minecraft.world.level.block.state.BlockState state, LaunchPadBaseBlockEntity be)
      Общий server‑tick для всех пусковых площадок.
    • chargeLaunchPadBattery

      protected void chargeLaunchPadBattery()
      Креативная батарея мгновенно заполняет буфер; обычные — через BaseMachineBlockEntity.chargeFromBatterySlot(int).
    • transferFluidContainers

      protected boolean transferFluidContainers()
      Заливка бочек в баки. Мутации слотов пишутся обратно в инвентарь (как в MachineChemicalPlantBlockEntity.transferFluidsFromItems()).
    • getRenderBoundingBox

      public net.minecraft.world.phys.AABB getRenderBoundingBox()
      Tall missiles extend above the 1-block pad; default BE AABB would cull the BER.
      Specified by:
      getRenderBoundingBox in interface net.minecraftforge.common.extensions.IForgeBlockEntity
      Overrides:
      getRenderBoundingBox in class BaseMachineBlockEntity
    • getMissilePreviewStack

      public net.minecraft.world.item.ItemStack getMissilePreviewStack()
      Missile stack for BER / client preview. On client uses synced copy when GUI is closed.
    • setFuel

      protected boolean setFuel(MissileItem missile)
      Returns:
      true, если тип хотя бы одного бака изменился (для клиентской синхронизации)
    • getGaugeState

      protected int getGaugeState(int tankIndex)
    • getState

      public int getState()
    • getFuelState

      public int getFuelState()
      0 — нет шкалы (твердотопливные ракеты, отсутствует/неверная ракета) 1 — бак полон (топлива хватает для пуска) -1 — топливо есть, но недостаточно
    • getOxidizerState

      public int getOxidizerState()
    • hasFuel

      public boolean hasFuel()
    • isMissileValid

      public boolean isMissileValid()
    • isMissileValid

      public boolean isMissileValid(@NotNull net.minecraft.world.item.ItemStack stack)
    • canLaunch

      public boolean canLaunch()
    • isReadyForLaunch

      protected abstract boolean isReadyForLaunch()
      Дополнительные условия в конкретной площадке (задержка, анимации и т.п.).
    • launchToCoordinate

      public boolean launchToCoordinate(int targetX, int targetZ)
      Запуск по координатам (X/Z). Возвращает true, если ракета реально запущена.
    • launchFromDesignator

      public boolean launchFromDesignator()
      Запуск по дизайнатору (слот 1). Если needsDesignator(Item) == true (по умолчанию для всех баллистических ракет), требуется заряженный/валидный дизайнатор; иначе пуск отменяется.
    • launchToEntity

      public boolean launchToEntity(net.minecraft.world.entity.Entity entity)
      Пуск по сущности-цели (радар, сопровождение).
    • sendCommandPosition

      public boolean sendCommandPosition(net.minecraft.core.BlockPos pos)
      Specified by:
      sendCommandPosition in interface IRadarCommandReceiver
    • sendCommandEntity

      public boolean sendCommandEntity(net.minecraft.world.entity.Entity target)
      Specified by:
      sendCommandEntity in interface IRadarCommandReceiver
    • needsDesignator

      public boolean needsDesignator(net.minecraft.world.item.Item item)
      Нужен ли дизайнатор для запуска данной ракеты. По умолчанию — да, как в оригинале (баллистические ракеты не летают «в никуда»). Подклассы могут переопределить (например, для FOB‑шаттлов).
    • instantiateMissile

      protected net.minecraft.world.entity.Entity instantiateMissile(int targetX, int targetZ)
      Создание сущности ракеты из текущего слота.
    • finalizeLaunch

      protected void finalizeLaunch(net.minecraft.world.entity.Entity missile)
      Финализация пуска: спавн entity, звук, расход ресурсов.
    • triggerLaunch

      public IBomb.BombReturnCode triggerLaunch()
      Пуск, инициируемый внешним триггером (например, IBomb.explode). Возвращает совместимый с системой бомб код результата.
    • checkRedstonePower

      public void checkRedstonePower()
      Агрегирует редстоун с контроллера и всех частей мультиблока (как у дверей).
    • setControllerRedstone

      public void setControllerRedstone(boolean powered)
    • getLaunchOffset

      protected double getLaunchOffset()
      Смещение точки старта ракеты относительно верха блока.
    • saveAdditional

      protected void saveAdditional(net.minecraft.nbt.CompoundTag tag)
      Overrides:
      saveAdditional in class BaseMachineBlockEntity
    • load

      public void load(net.minecraft.nbt.CompoundTag tag)
      Overrides:
      load in class BaseMachineBlockEntity
    • getUpdateTag

      public net.minecraft.nbt.CompoundTag getUpdateTag()
      Overrides:
      getUpdateTag in class BaseMachineBlockEntity
    • getUpdatePacket

      public net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket getUpdatePacket()
      Overrides:
      getUpdatePacket in class BaseMachineBlockEntity
    • handleUpdateTag

      public void handleUpdateTag(net.minecraft.nbt.CompoundTag tag)
      Specified by:
      handleUpdateTag in interface net.minecraftforge.common.extensions.IForgeBlockEntity
      Overrides:
      handleUpdateTag in class BaseMachineBlockEntity
    • isItemValidForSlot

      protected boolean isItemValidForSlot(int slot, net.minecraft.world.item.ItemStack stack)
      Specified by:
      isItemValidForSlot in class BaseMachineBlockEntity
    • createMenu

      public net.minecraft.world.inventory.AbstractContainerMenu createMenu(int containerId, net.minecraft.world.entity.player.Inventory inv, net.minecraft.world.entity.player.Player player)
      Specified by:
      createMenu in interface net.minecraft.world.inventory.MenuConstructor
    • canConnectEnergy

      public boolean canConnectEnergy(net.minecraft.core.Direction side)
      Description copied from interface: IEnergyConnector
      Может ли этот блок подключаться к энергосети с указанной стороны
      Specified by:
      canConnectEnergy in interface IEnergyConnector
      Overrides:
      canConnectEnergy in class BaseMachineBlockEntity
      Parameters:
      side - Сторона подключения (null = любая)
    • getTanks

      public FluidTank[] getTanks()
    • subscribeToCornerNetworks

      protected void subscribeToCornerNetworks(net.minecraft.world.level.Level level)
    • getReceivingTanks

      public FluidTank[] getReceivingTanks()
      Specified by:
      getReceivingTanks in interface IFluidStandardReceiverMK2
    • getAllTanks

      public FluidTank[] getAllTanks()
      Description copied from interface: IFluidUserMK2
      Все баки этой машины. Используется для display/debug.
      Specified by:
      getAllTanks in interface IFluidUserMK2
    • isLoaded

      public boolean isLoaded()
      Specified by:
      isLoaded in interface NodeNet.ILoadedEntry
    • canConnect

      public boolean canConnect(net.minecraft.world.level.material.Fluid fluid, net.minecraft.core.Direction fromDir)
      Description copied from interface: IFluidConnectorMK2
      Может ли этот коннектор принимать/отдавать жидкость указанного типа с указанной стороны.
      Specified by:
      canConnect in interface IFluidConnectorMK2
      Parameters:
      fluid - тип жидкости
      fromDir - направление ОТ ЭТОГО узла к соседу (сторона, через которую идёт соединение)