Move more stuff

This commit is contained in:
DBotThePony 2022-01-23 16:45:20 +07:00
parent ede0de1658
commit 1c0d3607a6
Signed by: DBot
GPG Key ID: DCC23B5715498507
11 changed files with 309 additions and 355 deletions

View File

@ -1126,8 +1126,8 @@ public class Registry {
public static class Menus { public static class Menus {
public static final MenuType<AndroidStationMenu> ANDROID_STATION = new MenuType<>(AndroidStationMenu::new); public static final MenuType<AndroidStationMenu> ANDROID_STATION = new MenuType<>(AndroidStationMenu::new);
public static final MenuType<BatteryBankMenu> BATTERY_BANK = new MenuType<>(BatteryBankMenu::new); public static final MenuType<MenuBatteryBank> BATTERY_BANK = new MenuType<>(MenuBatteryBank::new);
public static final MenuType<MatterDecomposerMenu> MATTER_DECOMPOSER = new MenuType<>(MatterDecomposerMenu::new); public static final MenuType<MenuMatterDecomposer> MATTER_DECOMPOSER = new MenuType<>(MenuMatterDecomposer::new);
public static final MenuType<MenuMatterCapacitor> MATTER_CAPACITOR_BANK = new MenuType<>(MenuMatterCapacitor::new); public static final MenuType<MenuMatterCapacitor> MATTER_CAPACITOR_BANK = new MenuType<>(MenuMatterCapacitor::new);
public static final MenuType<MenuPatternStorage> PATTERN_STORAGE = new MenuType<>(MenuPatternStorage::new); public static final MenuType<MenuPatternStorage> PATTERN_STORAGE = new MenuType<>(MenuPatternStorage::new);
public static final MenuType<MenuMatterScanner> MATTER_SCANNER = new MenuType<>(MenuMatterScanner::new); public static final MenuType<MenuMatterScanner> MATTER_SCANNER = new MenuType<>(MenuMatterScanner::new);

View File

@ -35,7 +35,7 @@ class BlockBatteryBank : BlockMatteryRotatable(), EntityBlock {
return state return state
} }
override fun <T : BlockEntity?> getTicker( override fun <T : BlockEntity> getTicker(
level: Level, level: Level,
p_153213_: BlockState, p_153213_: BlockState,
type: BlockEntityType<T> type: BlockEntityType<T>
@ -71,18 +71,18 @@ class BlockBatteryBank : BlockMatteryRotatable(), EntityBlock {
companion object { companion object {
@JvmField @JvmField
val BATTERY_SLOTS_PROPS = arrayOf( val BATTERY_SLOTS_PROPS = arrayOf(
BooleanProperty.create("battery_0"), BooleanProperty.create("battery_0") as BooleanProperty,
BooleanProperty.create("battery_1"), BooleanProperty.create("battery_1") as BooleanProperty,
BooleanProperty.create("battery_2"), BooleanProperty.create("battery_2") as BooleanProperty,
BooleanProperty.create("battery_3"), BooleanProperty.create("battery_3") as BooleanProperty,
BooleanProperty.create("battery_4"), BooleanProperty.create("battery_4") as BooleanProperty,
BooleanProperty.create("battery_5"), BooleanProperty.create("battery_5") as BooleanProperty,
BooleanProperty.create("battery_6"), BooleanProperty.create("battery_6") as BooleanProperty,
BooleanProperty.create("battery_7"), BooleanProperty.create("battery_7") as BooleanProperty,
BooleanProperty.create("battery_8"), BooleanProperty.create("battery_8") as BooleanProperty,
BooleanProperty.create("battery_9"), BooleanProperty.create("battery_9") as BooleanProperty,
BooleanProperty.create("battery_10"), BooleanProperty.create("battery_10") as BooleanProperty,
BooleanProperty.create("battery_11") BooleanProperty.create("battery_11") as BooleanProperty,
) )
private val SHAPES: List<VoxelShape> private val SHAPES: List<VoxelShape>

View File

@ -1,69 +1,61 @@
package ru.dbotthepony.mc.otm.block; package ru.dbotthepony.mc.otm.block
import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos
import net.minecraft.core.BlockPos; import net.minecraft.core.Direction
import net.minecraft.core.Direction; import net.minecraft.world.item.context.BlockPlaceContext
import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock
import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.phys.shapes.CollisionContext
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape
import net.minecraft.world.phys.shapes.Shapes; import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterCapacitorBank
import net.minecraft.world.phys.shapes.VoxelShape; import ru.dbotthepony.mc.otm.shapes.BlockShapes
import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterCapacitorBank;
import ru.dbotthepony.mc.otm.shapes.BlockShapes;
import javax.annotation.Nullable; class BlockMatterCapacitorBank : BlockMatteryRotatable(), EntityBlock {
import javax.annotation.ParametersAreNonnullByDefault; override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity {
import java.util.List; return BlockEntityMatterCapacitorBank(blockPos, blockState)
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
public class BlockMatterCapacitorBank extends BlockMatteryRotatable implements EntityBlock {
@Nullable
@Override
public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) {
return new BlockEntityMatterCapacitorBank(blockPos, blockState);
} }
@Nullable override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
@Override var state = super.getStateForPlacement(context) ?: return null
public BlockState getStateForPlacement(BlockPlaceContext context) {
var state = super.getStateForPlacement(context);
for (var prop : BlockBatteryBank.BATTERY_SLOTS_PROPS) for (prop in BlockBatteryBank.BATTERY_SLOTS_PROPS)
state = state.setValue(prop, false); state = state.setValue(prop, false)
return state; return state
} }
@Override override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) { builder.add(*BlockBatteryBank.BATTERY_SLOTS_PROPS)
builder.add(BlockBatteryBank.BATTERY_SLOTS_PROPS); super.createBlockStateDefinition(builder)
super.createBlockStateDefinition(builder);
} }
private static final List<VoxelShape> SHAPES; override fun getShape(
p_60555_: BlockState,
p_60556_: BlockGetter,
p_60557_: BlockPos,
p_60558_: CollisionContext
): VoxelShape {
return SHAPES[p_60555_.getValue(FACING).ordinal]
}
static { companion object {
var def = BlockShapes.BATTERY_BANK.computeShape(); private val SHAPES: List<VoxelShape>
SHAPES = List.of( init {
val def = BlockShapes.BATTERY_BANK.computeShape()
SHAPES = listOf(
def, def,
def, def,
def, def,
BlockShapes.BATTERY_BANK.rotate(Direction.NORTH).computeShape(), BlockShapes.BATTERY_BANK.rotate(Direction.NORTH).computeShape(),
BlockShapes.BATTERY_BANK.rotate(Direction.WEST).computeShape(), BlockShapes.BATTERY_BANK.rotate(Direction.WEST).computeShape(),
BlockShapes.BATTERY_BANK.rotate(Direction.EAST).computeShape() BlockShapes.BATTERY_BANK.rotate(Direction.EAST).computeShape()
); )
} }
@Override
@SuppressWarnings("deprecation")
public VoxelShape getShape(BlockState p_60555_, BlockGetter p_60556_, BlockPos p_60557_, CollisionContext p_60558_) {
return SHAPES.get(p_60555_.getValue(FACING).ordinal());
} }
} }

View File

@ -1,120 +1,103 @@
package ru.dbotthepony.mc.otm.block; package ru.dbotthepony.mc.otm.block
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap
import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.world.level.block.EntityBlock
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos
import net.minecraft.core.Direction; import net.minecraft.core.Direction
import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraft.world.level.block.Block; import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterPanel
import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.phys.shapes.VoxelShape
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.shapes.Shapes
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.BlockGetter
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.phys.shapes.CollisionContext
import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.StateDefinition
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.item.context.BlockPlaceContext
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.level.block.Block
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.level.block.state.properties.EnumProperty
import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterPanel;
import javax.annotation.Nullable; class BlockMatterPanel : BlockMattery(), EntityBlock {
import javax.annotation.ParametersAreNonnullByDefault; override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity {
return BlockEntityMatterPanel(blockPos, blockState)
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
public class BlockMatterPanel extends BlockMattery implements EntityBlock {
@Nullable
@Override
public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) {
return new BlockEntityMatterPanel(blockPos, blockState);
} }
public static final EnumProperty<Direction> FACING = EnumProperty.create( private val shapes: ImmutableMap<BlockState, VoxelShape>
"facing",
Direction.class);
private ImmutableMap<BlockState, VoxelShape> SHAPES; init {
registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.SOUTH))
public BlockMatterPanel() { shapes = getShapeForEachState {
super(); when (it.getValue(FACING)) {
Direction.NORTH -> Shapes.box(
registerDefaultState(this.getStateDefinition().any().setValue(FACING, Direction.SOUTH)); 0.0,
0.0,
SHAPES = getShapeForEachState(blockstate -> { 0.625,
return switch (blockstate.getValue(FACING)) { 1.0,
case NORTH -> Shapes.box( 1.0,
0.0d, 1.0
0.0d, )
0.625d, Direction.EAST -> Shapes.box(
0.0,
1.0d, 0.0,
1.0d, 0.0,
1.0d 0.375,
); 1.0,
case EAST -> Shapes.box( 1.0
0.0d, )
0.0d, Direction.WEST -> Shapes.box(
0.0d, 0.625,
0.0,
0.375d, 0.0,
1.0d, 1.0,
1.0d 1.0,
); 1.0
case WEST -> Shapes.box( )
0.625d, Direction.DOWN -> Shapes.box(
0.0d, 0.0,
0.0d, 0.625,
0.0,
1.0d, 1.0,
1.0d, 1.0,
1.0d 1.0
); )
case DOWN -> Shapes.box( Direction.UP -> Shapes.box(
0.0d, 0.0,
0.625d, 0.0,
0.0d, 0.0,
1.0,
1.0d, 0.375,
1.0d, 1.0
1.0d )
); else -> Shapes.box(
case UP -> Shapes.box( 0.0,
0.0d, 0.0,
0.0d, 0.0,
0.0d, 1.0,
1.0,
1.0d, 0.375
0.375d, )
1.0d }
); }
default -> Shapes.box(
0.0d,
0.0d,
0.0d,
1.0d,
1.0d,
0.375d
);
};
});
} }
@Override override fun getShape(
@SuppressWarnings("deprecation") p_60555_: BlockState,
public VoxelShape getShape(BlockState p_60555_, BlockGetter p_60556_, BlockPos p_60557_, CollisionContext p_60558_) { p_60556_: BlockGetter,
return SHAPES.get(p_60555_); p_60557_: BlockPos,
p_60558_: CollisionContext
): VoxelShape {
return shapes[p_60555_]!!
} }
@Override override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) { builder.add(FACING)
builder.add(FACING);
} }
@Nullable override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
@Override return defaultBlockState().setValue(FACING, context.clickedFace)
public BlockState getStateForPlacement(BlockPlaceContext context) {
return this.defaultBlockState().setValue(FACING, context.getClickedFace());
} }
companion object {
val FACING = EnumProperty.create("facing", Direction::class.java)
}
} }

View File

@ -1,80 +1,73 @@
package ru.dbotthepony.mc.otm.block; package ru.dbotthepony.mc.otm.block
import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos
import net.minecraft.core.BlockPos; import net.minecraft.core.Direction
import net.minecraft.core.Direction; import net.minecraft.world.item.context.BlockPlaceContext
import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock
import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty
import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.phys.shapes.CollisionContext
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape
import net.minecraft.world.phys.shapes.VoxelShape; import ru.dbotthepony.mc.otm.block.entity.BlockEntityPatternStorage
import ru.dbotthepony.mc.otm.block.entity.BlockEntityPatternStorage; import ru.dbotthepony.mc.otm.shapes.BlockShapes
import ru.dbotthepony.mc.otm.shapes.BlockShapes;
import javax.annotation.Nullable; class BlockPatternStorage : BlockMatteryRotatable(), EntityBlock {
import javax.annotation.ParametersAreNonnullByDefault; override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity? {
import java.util.List; return BlockEntityPatternStorage(blockPos, blockState)
@MethodsReturnNonnullByDefault
@ParametersAreNonnullByDefault
public class BlockPatternStorage extends BlockMatteryRotatable implements EntityBlock {
public static final BooleanProperty[] PATTERN_STORAGE_DISKS_PROPS = new BooleanProperty[] {
BooleanProperty.create("disk_0"),
BooleanProperty.create("disk_1"),
BooleanProperty.create("disk_2"),
BooleanProperty.create("disk_3"),
BooleanProperty.create("disk_4"),
BooleanProperty.create("disk_5"),
BooleanProperty.create("disk_6"),
BooleanProperty.create("disk_7"),
};
@Nullable
@Override
public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) {
return new BlockEntityPatternStorage(blockPos, blockState);
} }
@Override override fun createBlockStateDefinition(builder: StateDefinition.Builder<Block, BlockState>) {
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) { builder.add(*PATTERN_STORAGE_DISKS_PROPS)
builder.add(PATTERN_STORAGE_DISKS_PROPS); super.createBlockStateDefinition(builder)
super.createBlockStateDefinition(builder);
} }
@Nullable override fun getStateForPlacement(context: BlockPlaceContext): BlockState? {
@Override var state = super.getStateForPlacement(context) ?: return null
public BlockState getStateForPlacement(BlockPlaceContext context) {
var state = super.getStateForPlacement(context);
for (var prop : PATTERN_STORAGE_DISKS_PROPS) for (prop in PATTERN_STORAGE_DISKS_PROPS)
state = state.setValue(prop, false); state = state.setValue(prop, false)
return state; return state
} }
private static final List<VoxelShape> SHAPES; override fun getShape(
p_60555_: BlockState,
p_60556_: BlockGetter,
p_60557_: BlockPos,
p_60558_: CollisionContext
): VoxelShape {
return SHAPES[p_60555_.getValue(FACING).ordinal]
}
static { companion object {
var def = BlockShapes.PATTERN_STORAGE.computeShape(); val PATTERN_STORAGE_DISKS_PROPS = arrayOf(
BooleanProperty.create("disk_0") as BooleanProperty,
BooleanProperty.create("disk_1") as BooleanProperty,
BooleanProperty.create("disk_2") as BooleanProperty,
BooleanProperty.create("disk_3") as BooleanProperty,
BooleanProperty.create("disk_4") as BooleanProperty,
BooleanProperty.create("disk_5") as BooleanProperty,
BooleanProperty.create("disk_6") as BooleanProperty,
BooleanProperty.create("disk_7") as BooleanProperty
)
SHAPES = List.of( private val SHAPES: List<VoxelShape>
init {
val def = BlockShapes.PATTERN_STORAGE.computeShape()
SHAPES = listOf(
def, def,
def, def,
def, def,
BlockShapes.PATTERN_STORAGE.rotate(Direction.NORTH).computeShape(), BlockShapes.PATTERN_STORAGE.rotate(Direction.NORTH).computeShape(),
BlockShapes.PATTERN_STORAGE.rotate(Direction.WEST).computeShape(), BlockShapes.PATTERN_STORAGE.rotate(Direction.WEST).computeShape(),
BlockShapes.PATTERN_STORAGE.rotate(Direction.EAST).computeShape() BlockShapes.PATTERN_STORAGE.rotate(Direction.EAST).computeShape()
); )
} }
@Override
@SuppressWarnings("deprecation")
public VoxelShape getShape(BlockState p_60555_, BlockGetter p_60556_, BlockPos p_60557_, CollisionContext p_60558_) {
return SHAPES.get(p_60555_.getValue(FACING).ordinal());
} }
} }

View File

@ -28,7 +28,7 @@ import ru.dbotthepony.mc.otm.capability.extractEnergy
import ru.dbotthepony.mc.otm.capability.receiveEnergy import ru.dbotthepony.mc.otm.capability.receiveEnergy
import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.MatteryContainer
import ru.dbotthepony.mc.otm.core.Fraction import ru.dbotthepony.mc.otm.core.Fraction
import ru.dbotthepony.mc.otm.menu.BatteryBankMenu import ru.dbotthepony.mc.otm.menu.MenuBatteryBank
import ru.dbotthepony.mc.otm.set import ru.dbotthepony.mc.otm.set
import ru.dbotthepony.mc.otm.unaryMinus import ru.dbotthepony.mc.otm.unaryMinus
import javax.annotation.ParametersAreNonnullByDefault import javax.annotation.ParametersAreNonnullByDefault
@ -37,7 +37,7 @@ import javax.annotation.ParametersAreNonnullByDefault
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
class BlockEntityBatteryBank(p_155229_: BlockPos, p_155230_: BlockState) : BlockEntityMattery(Registry.BlockEntities.BATTERY_BANK, p_155229_, p_155230_) { class BlockEntityBatteryBank(p_155229_: BlockPos, p_155230_: BlockState) : BlockEntityMattery(Registry.BlockEntities.BATTERY_BANK, p_155229_, p_155230_) {
// 6 на 2 // 6 на 2
val container: MatteryContainer = object : MatteryContainer(this::setChanged, 6 * 2) { val container: MatteryContainer = object : MatteryContainer(this::setChanged, CAPACITY) {
override fun setChanged(slot: Int, new: ItemStack, old: ItemStack) { override fun setChanged(slot: Int, new: ItemStack, old: ItemStack) {
super.setChanged(slot, new, old) super.setChanged(slot, new, old)
@ -247,16 +247,12 @@ class BlockEntityBatteryBank(p_155229_: BlockPos, p_155230_: BlockState) : Block
super.load(nbt) super.load(nbt)
} }
companion object {
private val MACHINE_NAME = TranslatableComponent("block.overdrive_that_matters.battery_bank")
}
override fun getDefaultDisplayName(): Component { override fun getDefaultDisplayName(): Component {
return MACHINE_NAME return MACHINE_NAME
} }
override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu? { override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu {
return BatteryBankMenu(containerID, inventory, this, container) return MenuBatteryBank(containerID, inventory, this)
} }
override fun invalidateCaps() { override fun invalidateCaps() {
@ -351,4 +347,9 @@ class BlockEntityBatteryBank(p_155229_: BlockPos, p_155230_: BlockState) : Block
} }
} }
} }
companion object {
private val MACHINE_NAME = TranslatableComponent("block.overdrive_that_matters.battery_bank")
const val CAPACITY = 6 * 2
}
} }

View File

@ -31,7 +31,7 @@ import ru.dbotthepony.mc.otm.graph.matter.IMatterGraphNode
import ru.dbotthepony.mc.otm.graph.matter.MatterNetworkGraph import ru.dbotthepony.mc.otm.graph.matter.MatterNetworkGraph
import ru.dbotthepony.mc.otm.ifHas import ru.dbotthepony.mc.otm.ifHas
import ru.dbotthepony.mc.otm.matter.MatterRegistry import ru.dbotthepony.mc.otm.matter.MatterRegistry
import ru.dbotthepony.mc.otm.menu.MatterDecomposerMenu import ru.dbotthepony.mc.otm.menu.MenuMatterDecomposer
import ru.dbotthepony.mc.otm.set import ru.dbotthepony.mc.otm.set
class BlockEntityMatterDecomposer(pos: BlockPos, state: BlockState) class BlockEntityMatterDecomposer(pos: BlockPos, state: BlockState)
@ -80,7 +80,7 @@ class BlockEntityMatterDecomposer(pos: BlockPos, state: BlockState)
} }
override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu { override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu {
return MatterDecomposerMenu(containerID, inventory, this) return MenuMatterDecomposer(containerID, inventory, this)
} }
override fun saveAdditional(nbt: CompoundTag) { override fun saveAdditional(nbt: CompoundTag) {

View File

@ -1,25 +1,25 @@
package ru.dbotthepony.mc.otm.client.screen package ru.dbotthepony.mc.otm.client.screen
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import ru.dbotthepony.mc.otm.menu.BatteryBankMenu import ru.dbotthepony.mc.otm.menu.MenuBatteryBank
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel
import ru.dbotthepony.mc.otm.client.screen.panels.SlotPanel import ru.dbotthepony.mc.otm.client.screen.panels.SlotPanel
import ru.dbotthepony.mc.otm.client.screen.widget.PowerGaugePanel import ru.dbotthepony.mc.otm.client.screen.widget.PowerGaugePanel
class ScreenBatteryBank(menu: BatteryBankMenu, p_97742_: Inventory, p_97743_: Component) : class ScreenBatteryBank(menu: MenuBatteryBank, p_97742_: Inventory, p_97743_: Component) :
MatteryScreen<BatteryBankMenu>(menu, p_97742_, p_97743_) { MatteryScreen<MenuBatteryBank>(menu, p_97742_, p_97743_) {
override fun makeMainFrame(): FramePanel{ override fun makeMainFrame(): FramePanel{
val frame = super.makeMainFrame()!! val frame = super.makeMainFrame()!!
PowerGaugePanel(this, frame, menu.battery_widget, LEFT_MARGIN, GAUGE_TOP_WITHOUT_SLOT) PowerGaugePanel(this, frame, menu.powerLevel, LEFT_MARGIN, GAUGE_TOP_WITHOUT_SLOT)
for (i in 0 .. 5) for (i in 0 .. 5)
SlotPanel(this, frame, menu.battery_slots[i], 44f + 18 * i, 32f) SlotPanel(this, frame, menu.containerSlots[i], 44f + 18 * i, 32f)
for (i in 6 .. 11) for (i in 6 .. 11)
SlotPanel(this, frame, menu.battery_slots[i], 44f + 18 * (i - 6), 32f + 18f) SlotPanel(this, frame, menu.containerSlots[i], 44f + 18 * (i - 6), 32f + 18f)
return frame return frame
} }

View File

@ -1,7 +1,7 @@
package ru.dbotthepony.mc.otm.client.screen package ru.dbotthepony.mc.otm.client.screen
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import ru.dbotthepony.mc.otm.menu.MatterDecomposerMenu import ru.dbotthepony.mc.otm.menu.MenuMatterDecomposer
import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel
import ru.dbotthepony.mc.otm.client.screen.panels.SlotPanel import ru.dbotthepony.mc.otm.client.screen.panels.SlotPanel
@ -9,19 +9,19 @@ import ru.dbotthepony.mc.otm.client.screen.widget.MatterGaugePanel
import ru.dbotthepony.mc.otm.client.screen.widget.PowerGaugePanel import ru.dbotthepony.mc.otm.client.screen.widget.PowerGaugePanel
import ru.dbotthepony.mc.otm.client.screen.widget.ProgressGaugePanel import ru.dbotthepony.mc.otm.client.screen.widget.ProgressGaugePanel
class ScreenMatterDecomposer(p_97741_: MatterDecomposerMenu, p_97742_: Inventory, p_97743_: Component) : class ScreenMatterDecomposer(p_97741_: MenuMatterDecomposer, p_97742_: Inventory, p_97743_: Component) :
MatteryScreen<MatterDecomposerMenu>(p_97741_, p_97742_, p_97743_) { MatteryScreen<MenuMatterDecomposer>(p_97741_, p_97742_, p_97743_) {
override fun makeMainFrame(): FramePanel { override fun makeMainFrame(): FramePanel {
val frame = super.makeMainFrame()!! val frame = super.makeMainFrame()!!
val m = PowerGaugePanel(this, frame, menu.powerWidget, LEFT_MARGIN, GAUGE_TOP_WITH_SLOT) val m = PowerGaugePanel(this, frame, menu.powerWidget, LEFT_MARGIN, GAUGE_TOP_WITH_SLOT)
MatterGaugePanel(this, frame, menu.matter_widget, LEFT_MARGIN + m.width, GAUGE_TOP_WITH_SLOT) MatterGaugePanel(this, frame, menu.matterWidget, LEFT_MARGIN + m.width, GAUGE_TOP_WITH_SLOT)
SlotPanel(this, frame, menu.batterySlot, LEFT_MARGIN, SLOT_TOP_UNDER_GAUGE) SlotPanel(this, frame, menu.batterySlot, LEFT_MARGIN, SLOT_TOP_UNDER_GAUGE)
SlotPanel(this, frame, menu.input, 56f, PROGRESS_SLOT_TOP) SlotPanel(this, frame, menu.input, 56f, PROGRESS_SLOT_TOP)
ProgressGaugePanel(this, frame, menu.progress, 78f, PROGRESS_ARROW_TOP) ProgressGaugePanel(this, frame, menu.progressWidget, 78f, PROGRESS_ARROW_TOP)
SlotPanel(this, frame, menu.output, 104f, PROGRESS_SLOT_TOP) SlotPanel(this, frame, menu.output, 104f, PROGRESS_SLOT_TOP)
return frame return frame

View File

@ -1,50 +1,40 @@
package ru.dbotthepony.mc.otm.menu; package ru.dbotthepony.mc.otm.menu
import net.minecraft.world.Container; import net.minecraft.world.Container
import net.minecraft.world.SimpleContainer; import kotlin.jvm.JvmOverloads
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory
import ru.dbotthepony.mc.otm.Registry; import ru.dbotthepony.mc.otm.block.entity.BlockEntityBatteryBank
import ru.dbotthepony.mc.otm.block.entity.BlockEntityBatteryBank; import net.minecraft.world.SimpleContainer
import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.Registry
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget; import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.orNull
public class BatteryBankMenu extends MatteryMenu { class MenuBatteryBank @JvmOverloads constructor(
protected BlockEntityBatteryBank tile; p_38852_: Int,
inventory: Inventory,
tile: BlockEntityBatteryBank? = null,
) : MatteryMenu(Registry.Menus.BATTERY_BANK, p_38852_, inventory, tile) {
val powerLevel: LevelGaugeWidget
val containerSlots: Array<BatterySlot>
public LevelGaugeWidget battery_widget; init {
public BatterySlot[] battery_slots = new BatterySlot[6 * 2]; val container: Container = tile?.container ?: SimpleContainer(BlockEntityBatteryBank.CAPACITY)
powerLevel = LevelGaugeWidget(this, tile?.getCapability(MatteryCapability.ENERGY)?.orNull())
public BatteryBankMenu(int p_38852_, Inventory inventory) { containerSlots = Array(BlockEntityBatteryBank.CAPACITY) {
this(p_38852_, inventory, null, new SimpleContainer(6 * 2)); val slot = BatterySlot(container, it)
addSlot(slot)
return@Array slot
} }
public BatteryBankMenu(int p_38852_, Inventory inventory, BlockEntityBatteryBank tile, Container batteries) { addInventorySlots()
super(Registry.Menus.BATTERY_BANK, p_38852_, inventory, tile);
this.tile = tile;
if (tile == null || tile.getCapability(MatteryCapability.ENERGY).resolve().isEmpty()) {
battery_widget = new LevelGaugeWidget(this);
} else {
battery_widget = new LevelGaugeWidget(this, tile.getCapability(MatteryCapability.ENERGY).resolve().get());
} }
for (int row = 0; row < 2; row++) { override fun getWorkingSlotStart(): Int {
for (int column = 0; column < 6; column++) { return 0
battery_slots[row * 6 + column] = new BatterySlot(batteries, row * 6 + column, 44 + column * 18, 24 + row * 18);
addSlot(battery_slots[row * 6 + column]);
}
} }
addInventorySlots(); override fun getWorkingSlotEnd(): Int {
} return BlockEntityBatteryBank.CAPACITY
@Override
protected int getWorkingSlotStart() {
return 0;
}
@Override
protected int getWorkingSlotEnd() {
return 6 * 2;
} }
} }

View File

@ -1,64 +1,59 @@
package ru.dbotthepony.mc.otm.menu; package ru.dbotthepony.mc.otm.menu
import net.minecraft.world.Container; import kotlin.jvm.JvmOverloads
import net.minecraft.world.SimpleContainer; import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.entity.player.Inventory; import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterDecomposer
import net.minecraft.world.item.ItemStack; import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget
import ru.dbotthepony.mc.otm.matter.MatterRegistry; import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget
import ru.dbotthepony.mc.otm.Registry; import net.minecraft.world.SimpleContainer
import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatterDecomposer; import net.minecraft.world.item.ItemStack
import ru.dbotthepony.mc.otm.capability.MatteryCapability; import ru.dbotthepony.mc.otm.Registry
import ru.dbotthepony.mc.otm.menu.widget.LevelGaugeWidget; import ru.dbotthepony.mc.otm.matter.MatterRegistry
import ru.dbotthepony.mc.otm.menu.widget.ProgressGaugeWidget; import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.orNull
import javax.annotation.Nullable; class MenuMatterDecomposer @JvmOverloads constructor(
containerID: Int,
inventory: Inventory,
tile: BlockEntityMatterDecomposer? = null
) : MenuMatteryPowered(Registry.Menus.MATTER_DECOMPOSER, containerID, inventory, tile) {
val input: MatterySlot
val output: MachineOutputSlot
val progressWidget: ProgressGaugeWidget
val matterWidget: LevelGaugeWidget
public class MatterDecomposerMenu extends MenuMatteryPowered { init {
public MatterDecomposerMenu(int containerID, Inventory inventory) { val container = tile?.itemContainer ?: SimpleContainer(2)
this(containerID, inventory, null);
}
public MatterySlot input;
public MachineOutputSlot output;
public ProgressGaugeWidget progress;
public LevelGaugeWidget matter_widget;
public MatterDecomposerMenu(int containerID, Inventory inventory, @Nullable BlockEntityMatterDecomposer tile) {
super(Registry.Menus.MATTER_DECOMPOSER, containerID, inventory, tile);
Container container = tile != null ? tile.itemContainer : new SimpleContainer(2);
// Вход // Вход
input = new MatterySlot(container, 0, 61, 36) { input = object : MatterySlot(container, 0, 61, 36) {
@Override override fun mayPlace(p_40231_: ItemStack): Boolean {
public boolean mayPlace(ItemStack p_40231_) { return MatterRegistry.canDecompose(p_40231_)
return MatterRegistry.canDecompose(p_40231_); }
} }
};
addSlot(input); addSlot(input)
// Выход // Выход
output = new MachineOutputSlot(container, 1, 61 + 18 + 10 + 3 + 22, 36); output = MachineOutputSlot(container, 1, 61 + 18 + 10 + 3 + 22, 36)
addSlot(output); addSlot(output)
if (tile == null || tile.getCapability(MatteryCapability.MATTER).resolve().isEmpty()) { matterWidget = LevelGaugeWidget(this, tile?.getCapability(MatteryCapability.MATTER)?.orNull())
matter_widget = new LevelGaugeWidget(this);
progress = new ProgressGaugeWidget(this); if (tile == null) {
progressWidget = ProgressGaugeWidget(this)
} else { } else {
matter_widget = new LevelGaugeWidget(this, tile.getCapability(MatteryCapability.MATTER).resolve().get()); progressWidget = ProgressGaugeWidget(this, tile::workProgress, tile::isUnableToProcess)
progress = new ProgressGaugeWidget(this, () -> (float) tile.getWorkProgress(), tile::isUnableToProcess);
} }
addInventorySlots(); addInventorySlots()
} }
@Override override fun getWorkingSlotStart(): Int {
protected int getWorkingSlotStart() { return 0
return 0;
} }
@Override override fun getWorkingSlotEnd(): Int {
protected int getWorkingSlotEnd() { return 2
return 1;
} }
} }