diff --git a/src/main/java/ru/dbotthepony/mc/otm/client/screen/MatterPanelScreen.java b/src/main/java/ru/dbotthepony/mc/otm/client/screen/MatterPanelScreen.java index a9e710c87..3d8410ca1 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/client/screen/MatterPanelScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/client/screen/MatterPanelScreen.java @@ -25,12 +25,6 @@ public class MatterPanelScreen extends MatteryScreen { private static final int MODAL_WIDTH = 213; private static final int MODAL_HEIGHT = 110; - protected static final ResourceLocation CONTAINER = new ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/gui/matter_panel.png"); - - protected ResourceLocation CONTAINER_BACKGROUND() { - return CONTAINER; - } - public MatterPanelScreen(MenuMatterPanel p_97741_, Inventory p_97742_, Component p_97743_) { super(p_97741_, p_97742_, p_97743_); diff --git a/src/main/java/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.java b/src/main/java/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.java index b7f57143e..22ad1d329 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.java +++ b/src/main/java/ru/dbotthepony/mc/otm/client/screen/MatteryScreen.java @@ -104,11 +104,11 @@ public abstract class MatteryScreen extends AbstractConta public FramePanel main_frame; private boolean made_main_frame = false; - public static final int DEFAULT_FRAME_WIDTH = 18 * 9 + 16; - public static final int DEFAULT_FRAME_HEIGHT = 100; + public static final float DEFAULT_FRAME_WIDTH = 18 * 9 + 16; + public static final float DEFAULT_FRAME_HEIGHT = 100; - public static final int INVENTORY_FRAME_WIDTH = DEFAULT_FRAME_WIDTH; - public static final int INVENTORY_FRAME_HEIGHT = 3 * 18 + 18 + 24; + public static final float INVENTORY_FRAME_WIDTH = DEFAULT_FRAME_WIDTH; + public static final float INVENTORY_FRAME_HEIGHT = 3 * 18 + 18 + 24; public MatteryScreen(T menu, Inventory inventory, Component title) { super(menu, inventory, title); diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/Ext.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/Ext.kt index 2f81423a0..26103444b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/Ext.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/Ext.kt @@ -12,6 +12,7 @@ import net.minecraft.nbt.Tag import net.minecraft.world.Container import net.minecraft.world.item.ItemStack import net.minecraft.world.phys.Vec3 +import net.minecraftforge.common.util.LazyOptional import java.util.function.Consumer operator fun Direction.unaryMinus(): Direction = this.opposite @@ -58,3 +59,11 @@ inline fun CompoundTag.ifHas(s: String, type: Class, consum consumer(tag as T) } } + +fun LazyOptional.orNull(): T? { + if (!isPresent) { + return null + } + + return resolve().orElse(null) +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/BlockAndroidStation.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/BlockAndroidStation.kt index 38a503c32..f2b9e7297 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/BlockAndroidStation.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/BlockAndroidStation.kt @@ -1,64 +1,68 @@ -package ru.dbotthepony.mc.otm.block; +package ru.dbotthepony.mc.otm.block -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.EntityBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.shapes.CollisionContext; -import net.minecraft.world.phys.shapes.VoxelShape; -import net.minecraftforge.common.util.LazyOptional; -import ru.dbotthepony.mc.otm.Registry; -import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation; -import ru.dbotthepony.mc.otm.capability.android.IAndroidCapability; -import ru.dbotthepony.mc.otm.capability.MatteryCapability; -import ru.dbotthepony.mc.otm.shapes.BlockShapes; +import net.minecraft.core.BlockPos +import net.minecraft.world.InteractionHand +import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.player.Player +import net.minecraft.world.level.BlockGetter +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.EntityBlock +import net.minecraft.world.level.block.entity.BlockEntity +import net.minecraft.world.level.block.entity.BlockEntityTicker +import net.minecraft.world.level.block.entity.BlockEntityType +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.BlockHitResult +import net.minecraft.world.phys.shapes.CollisionContext +import net.minecraft.world.phys.shapes.VoxelShape +import ru.dbotthepony.mc.otm.Registry +import ru.dbotthepony.mc.otm.block.entity.BlockEntityAndroidStation +import ru.dbotthepony.mc.otm.capability.MatteryCapability +import ru.dbotthepony.mc.otm.capability.android.IAndroidCapability +import ru.dbotthepony.mc.otm.orNull +import ru.dbotthepony.mc.otm.shapes.BlockShapes -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; +class BlockAndroidStation : BlockMattery(), EntityBlock { + override fun use( + blockState: BlockState, + level: Level, + blockPos: BlockPos, + ply: Player, + hand: InteractionHand, + blockHitResult: BlockHitResult + ): InteractionResult { + val cap = ply.getCapability(MatteryCapability.ANDROID).orNull() ?: return InteractionResult.FAIL -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class BlockAndroidStation extends BlockMattery implements EntityBlock { - private final VoxelShape SHAPE = BlockShapes.ANDROID_STATION.computeShape(); + if (!cap.isAndroid()) + return InteractionResult.FAIL - public BlockAndroidStation() { - super(); + return super.use(blockState, level, blockPos, ply, hand, blockHitResult) } - @Override - public InteractionResult use(BlockState blockState, Level level, BlockPos blockPos, Player ply, InteractionHand hand, BlockHitResult blockHitResult) { - LazyOptional cap = ply.getCapability(MatteryCapability.ANDROID); - - if (cap.resolve().isEmpty() || !cap.resolve().get().isAndroid()) - return InteractionResult.FAIL; - - return super.use(blockState, level, blockPos, ply, hand, blockHitResult); + override fun getShape( + p_151964_: BlockState, + p_151965_: BlockGetter, + p_151966_: BlockPos, + p_151967_: CollisionContext + ): VoxelShape { + return SHAPE } - @Override - @SuppressWarnings("deprecation") - public VoxelShape getShape(BlockState p_151964_, BlockGetter p_151965_, BlockPos p_151966_, CollisionContext p_151967_) { - return SHAPE; + override fun newBlockEntity(pos: BlockPos, state: BlockState): BlockEntity { + return BlockEntityAndroidStation(pos, state) } - @Nullable - @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new BlockEntityAndroidStation(pos, state); + override fun getTicker( + level: Level, + state: BlockState, + type: BlockEntityType + ): BlockEntityTicker? { + if (level.isClientSide || type !== Registry.BlockEntities.ANDROID_STATION) + return null + + return BlockEntityTicker { _, _, _, t -> if (t is BlockEntityAndroidStation) t.tick() } } - @Nullable - @Override - public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - return level.isClientSide || type != Registry.BlockEntities.ANDROID_STATION ? null : BlockEntityAndroidStation::tick; + companion object { + private val SHAPE = BlockShapes.ANDROID_STATION.computeShape() } -} +} \ No newline at end of file diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/BlockCargoCrate.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/BlockCargoCrate.kt index c8194ad35..54fdbdc00 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/BlockCargoCrate.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/BlockCargoCrate.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.block import net.minecraft.core.BlockPos import net.minecraft.world.Containers +import net.minecraft.world.inventory.AbstractContainerMenu import net.minecraft.world.item.context.BlockPlaceContext import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block @@ -13,7 +14,7 @@ import net.minecraft.world.level.block.state.properties.BooleanProperty import ru.dbotthepony.mc.otm.block.entity.BlockEntityCargoCrate class BlockCargoCrate : BlockMatteryRotatable(), EntityBlock { - override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity? { + override fun newBlockEntity(blockPos: BlockPos, blockState: BlockState): BlockEntity { return BlockEntityCargoCrate(blockPos, blockState) } @@ -23,7 +24,7 @@ class BlockCargoCrate : BlockMatteryRotatable(), EntityBlock { } override fun getStateForPlacement(context: BlockPlaceContext): BlockState? { - return super.getStateForPlacement(context)!!.setValue(IS_OPEN, false) + return super.getStateForPlacement(context)?.setValue(IS_OPEN, false) } override fun onRemove( @@ -45,6 +46,15 @@ class BlockCargoCrate : BlockMatteryRotatable(), EntityBlock { } } + override fun hasAnalogOutputSignal(p_60457_: BlockState): Boolean { + return true + } + + override fun getAnalogOutputSignal(p_60487_: BlockState, level: Level, p_60489_: BlockPos): Int { + val tile = level.getBlockEntity(p_60489_) as? BlockEntityCargoCrate ?: return 0 + return AbstractContainerMenu.getRedstoneSignalFromContainer(tile.container) + } + companion object { @JvmField val IS_OPEN = BooleanProperty.create("open") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.kt index 464ed7a0c..29b7de3c2 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/BlockEntityAndroidStation.kt @@ -1,88 +1,73 @@ -package ru.dbotthepony.mc.otm.block.entity; +package ru.dbotthepony.mc.otm.block.entity -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.world.MenuProvider; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.AABB; -import ru.dbotthepony.mc.otm.Registry; -import ru.dbotthepony.mc.otm.capability.android.IAndroidCapability; -import ru.dbotthepony.mc.otm.capability.MatteryCapability; -import ru.dbotthepony.mc.otm.capability.MatteryMachineEnergyStorage; -import ru.dbotthepony.mc.otm.core.Fraction; -import ru.dbotthepony.mc.otm.menu.AndroidStationMenu; +import net.minecraft.MethodsReturnNonnullByDefault +import net.minecraft.core.BlockPos +import net.minecraft.network.chat.Component +import net.minecraft.network.chat.TranslatableComponent +import net.minecraft.world.MenuProvider +import net.minecraft.world.entity.LivingEntity +import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.entity.player.Player +import net.minecraft.world.inventory.AbstractContainerMenu +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.AABB +import ru.dbotthepony.mc.otm.Registry +import ru.dbotthepony.mc.otm.capability.MatteryCapability +import ru.dbotthepony.mc.otm.capability.MatteryMachineEnergyStorage +import ru.dbotthepony.mc.otm.core.Fraction +import ru.dbotthepony.mc.otm.menu.AndroidStationMenu +import javax.annotation.ParametersAreNonnullByDefault -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; -import java.math.BigDecimal; -import java.util.List; -import java.util.Optional; +class BlockEntityAndroidStation(p_155229_: BlockPos, p_155230_: BlockState) : + BlockEntityMatteryPowered(Registry.BlockEntities.ANDROID_STATION, p_155229_, p_155230_), MenuProvider { -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class BlockEntityAndroidStation extends BlockEntityMatteryPowered implements MenuProvider { - @Nullable - @Override - public AbstractContainerMenu createMenu(int containerID, Inventory inventory, Player ply) { - return new AndroidStationMenu(containerID, inventory, this); + override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu { + return AndroidStationMenu(containerID, inventory, this) } - private final TranslatableComponent MACHINE_NAME = new TranslatableComponent("block.overdrive_that_matters.android_station"); - - @Override - protected Component getDefaultDisplayName() { - return MACHINE_NAME; + override fun getDefaultDisplayName(): Component { + return MACHINE_NAME } - public BlockEntityAndroidStation(BlockPos p_155229_, BlockState p_155230_) { - super(Registry.BlockEntities.ANDROID_STATION, p_155229_, p_155230_); - energy = new MatteryMachineEnergyStorage(this, MatteryMachineEnergyStorage.MachineType.WORKER, new Fraction(100_000), new Fraction(250), new Fraction(250)); + init { + energy = MatteryMachineEnergyStorage( + this, + MatteryMachineEnergyStorage.MachineType.WORKER, + Fraction(100000), + Fraction(250), + Fraction(250) + ) } - public static void tick(Level level, BlockPos blockPos, BlockState blockState, T t) { - if (t instanceof BlockEntityAndroidStation tile) { - tile.batteryChargeLoop(); + fun tick() { + batteryChargeLoop() - if (tile.isBlockedByRedstone()) - return; + if (isBlockedByRedstone) return + val level = level ?: return + val x = blockPos.x.toDouble() + val y = blockPos.y.toDouble() + val z = blockPos.z.toDouble() - final var pos = tile.getBlockPos(); - List entities = tile.getLevel().getEntitiesOfClass(LivingEntity.class, new AABB(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + 2, pos.getZ() + 1)); + for (ent in level.getEntitiesOfClass(LivingEntity::class.java, AABB(x, y, z, x + 1.0, y + 2.0, z + 1.0))) { + ent.getCapability(MatteryCapability.ANDROID).ifPresent { + if (!it.isAndroid()) + return@ifPresent - for (LivingEntity ent : entities) { - final var resolver = ent.getCapability(MatteryCapability.ANDROID).resolve(); + val missing = it.missingPower - if (resolver.isEmpty()) - continue; + if (missing > Fraction.ZERO) { + val extract = energy.extractEnergyInner(missing, true) - final var capability = resolver.get(); - - if (!capability.isAndroid()) - continue; - - final var missing = capability.getMissingPower(); - - if (missing.compareTo(Fraction.ZERO) > 0) { - final var extract = tile.energy.extractEnergyInner(missing, true); - - if (extract.compareTo(Fraction.ZERO) > 0) { - final var received = capability.receiveEnergyOuter(extract, true); - - if (received.compareTo(Fraction.ZERO) > 0) { - tile.energy.extractEnergyInner(extract, false); - capability.receiveEnergyOuter(extract, false); - } + if (extract > Fraction.ZERO) { + val received = it.receiveEnergyOuter(extract, false) + energy.extractEnergyInner(received, false) } } } } } -} + + companion object { + private val MACHINE_NAME = TranslatableComponent("block.overdrive_that_matters.android_station") + } +} \ No newline at end of file diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/BlockEntityCargoCrate.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/BlockEntityCargoCrate.kt index 47a5b33d9..8c74ccf49 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/BlockEntityCargoCrate.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/BlockEntityCargoCrate.kt @@ -1,95 +1,81 @@ -package ru.dbotthepony.mc.otm.block.entity; +package ru.dbotthepony.mc.otm.block.entity -import net.minecraft.MethodsReturnNonnullByDefault; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.items.CapabilityItemHandler; -import ru.dbotthepony.mc.otm.Registry; -import ru.dbotthepony.mc.otm.block.BlockCargoCrate; -import ru.dbotthepony.mc.otm.container.MatteryContainer; -import ru.dbotthepony.mc.otm.container.MatteryContainerHandler; -import ru.dbotthepony.mc.otm.menu.CargoCrateMenu; +import net.minecraft.core.BlockPos +import net.minecraft.core.Direction +import net.minecraft.nbt.CompoundTag +import net.minecraft.network.chat.Component +import net.minecraft.network.chat.TranslatableComponent +import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.entity.player.Player +import net.minecraft.world.inventory.AbstractContainerMenu +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.state.BlockState +import net.minecraftforge.common.capabilities.Capability +import net.minecraftforge.common.util.LazyOptional +import net.minecraftforge.items.CapabilityItemHandler +import ru.dbotthepony.mc.otm.Registry +import ru.dbotthepony.mc.otm.block.BlockCargoCrate +import ru.dbotthepony.mc.otm.container.MatteryContainer +import ru.dbotthepony.mc.otm.ifHas +import ru.dbotthepony.mc.otm.menu.CargoCrateMenu +import ru.dbotthepony.mc.otm.set -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; +class BlockEntityCargoCrate( + p_155229_: BlockPos, + p_155230_: BlockState +) : BlockEntityMattery(Registry.BlockEntities.CARGO_CRATE, p_155229_, p_155230_) { + val container = MatteryContainer(this::setChanged, 9 * 6) + private var interactingPlayers = 0 + val handler = container.handler() -@MethodsReturnNonnullByDefault -@ParametersAreNonnullByDefault -public class BlockEntityCargoCrate extends BlockEntityMattery { - private static final TranslatableComponent NAME = new TranslatableComponent("block.overdrive_that_matters.cargo_crate"); - public int open_amount = 0; - - public void onPlayerOpen() { - if (open_amount++ == 0 && level != null) { - level.setBlock(getBlockPos(), getBlockState().setValue(BlockCargoCrate.IS_OPEN, true), Block.UPDATE_CLIENTS); + fun onPlayerOpen() { + if (interactingPlayers++ == 0) { + level?.setBlock(blockPos, blockState.setValue(BlockCargoCrate.IS_OPEN, true), Block.UPDATE_CLIENTS) } } - public void onPlayerClose() { - if (--open_amount == 0 && level != null) { - level.setBlock(getBlockPos(), getBlockState().setValue(BlockCargoCrate.IS_OPEN, false), Block.UPDATE_CLIENTS); + fun onPlayerClose() { + if (--interactingPlayers == 0) { + level?.setBlock(blockPos, blockState.setValue(BlockCargoCrate.IS_OPEN, false), Block.UPDATE_CLIENTS) } } - public final MatteryContainer container = new MatteryContainer(this::setChanged, 9 * 6); - public final MatteryContainerHandler item_handler = container.handler(); - - public BlockEntityCargoCrate(BlockPos p_155229_, BlockState p_155230_) { - super(Registry.BlockEntities.CARGO_CRATE, p_155229_, p_155230_); + override fun invalidateCaps() { + super.invalidateCaps() + handler.invalidate() } - @Override - public void invalidateCaps() { - super.invalidateCaps(); - item_handler.invalidate(); + override fun reviveCaps() { + super.reviveCaps() + handler.revive() } - @Override - public void reviveCaps() { - super.reviveCaps(); - item_handler.revive(); + override fun getCapability(cap: Capability, side: Direction?): LazyOptional { + if (cap === CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + return handler.get().cast() + + return super.getCapability(cap, side) } - @Nonnull - @Override - public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) - return item_handler.get().cast(); - - return super.getCapability(cap, side); + public override fun saveAdditional(nbt: CompoundTag) { + super.saveAdditional(nbt) + nbt["slots"] = container.serializeNBT() } - @Override - public void saveAdditional(CompoundTag nbt) { - super.saveAdditional(nbt); - nbt.put("slots", container.serializeNBT()); + override fun load(nbt: CompoundTag) { + super.load(nbt) + nbt.ifHas("slots", CompoundTag::class.java, container::deserializeNBT) } - @Override - public void load(CompoundTag nbt) { - super.load(nbt); - container.deserializeNBT(nbt.get("slots")); + override fun getDefaultDisplayName(): Component { + return NAME } - @Override - protected Component getDefaultDisplayName() { - return NAME; + override fun createMenu(containerID: Int, inventory: Inventory, ply: Player): AbstractContainerMenu { + return CargoCrateMenu(containerID, inventory, this) } - @Nullable - @Override - public AbstractContainerMenu createMenu(int containerID, Inventory inventory, Player ply) { - return new CargoCrateMenu(containerID, inventory, this); + companion object { + private val NAME = TranslatableComponent("block.overdrive_that_matters.cargo_crate") } -} +} \ No newline at end of file diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/CargoCrateScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/CargoCrateScreen.kt index 769b3afb5..fb13a2196 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/CargoCrateScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/CargoCrateScreen.kt @@ -1,30 +1,20 @@ -package ru.dbotthepony.mc.otm.client.screen; +package ru.dbotthepony.mc.otm.client.screen -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Inventory; -import ru.dbotthepony.mc.otm.client.screen.panels.Dock; -import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel; -import ru.dbotthepony.mc.otm.client.screen.panels.GridPanel; -import ru.dbotthepony.mc.otm.client.screen.panels.SlotPanel; -import ru.dbotthepony.mc.otm.menu.CargoCrateMenu; +import net.minecraft.network.chat.Component +import net.minecraft.world.entity.player.Inventory +import ru.dbotthepony.mc.otm.client.screen.panels.FramePanel +import ru.dbotthepony.mc.otm.client.screen.panels.GridPanel +import ru.dbotthepony.mc.otm.client.screen.panels.SlotPanel +import ru.dbotthepony.mc.otm.menu.CargoCrateMenu -import javax.annotation.Nullable; +class CargoCrateScreen(menu: CargoCrateMenu, inventory: Inventory, title: Component) : MatteryScreen(menu, inventory, title) { + override fun makeMainFrame(): FramePanel { + val frame = FramePanel(this, null, 0f, 0f, INVENTORY_FRAME_WIDTH, 22f + 4f + 6f * 18f, getTitle()) + val grid = GridPanel(this, frame, 8f, 18f, 9f * 18f, 6f * 18f, 9, 6) -public class CargoCrateScreen extends MatteryScreen { - public CargoCrateScreen(CargoCrateMenu menu, Inventory inventory, Component title) { - super(menu, inventory, title); - } + for (slot in menu.crateSlots) + SlotPanel(this, grid, slot) - @Nullable - @Override - protected FramePanel makeMainFrame() { - var frame = new FramePanel(this, null, 0, 0, INVENTORY_FRAME_WIDTH, 22 + 4 + 6 * 18, getTitle()); - - var grid = new GridPanel(this, frame, 8, 18, 9 * 18, 6 * 18, 9, 6); - - for (var slot : menu.crate_slots) - new SlotPanel<>(this, grid, slot); - - return frame; + return frame } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/container/MatteryContainer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/container/MatteryContainer.kt index 51540105e..14ee5345d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/MatteryContainer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/MatteryContainer.kt @@ -16,7 +16,7 @@ import java.util.function.Consumer open class MatteryContainer(val watcher: Runnable, private val size: Int) : Container, Iterable { constructor(watcher: BlockEntity, size: Int) : this(watcher::setChanged, size) - // constructor(watcher: BlockEntityMattery, size: Int) : this(watcher::setChangedLight, size) + constructor(size: Int) : this({}, size) private var ignoreChangeNotifications = 0 @JvmField protected val slots: Array = Array(size) { ItemStack.EMPTY } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/CargoCrateMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/CargoCrateMenu.kt index 30c0a0ace..e11e4d1d0 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/CargoCrateMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/CargoCrateMenu.kt @@ -1,48 +1,41 @@ -package ru.dbotthepony.mc.otm.menu; +package ru.dbotthepony.mc.otm.menu -import net.minecraft.world.SimpleContainer; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import ru.dbotthepony.mc.otm.Registry; -import ru.dbotthepony.mc.otm.block.entity.BlockEntityCargoCrate; +import net.minecraft.world.SimpleContainer +import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.entity.player.Player +import ru.dbotthepony.mc.otm.Registry +import ru.dbotthepony.mc.otm.block.entity.BlockEntityCargoCrate -public class CargoCrateMenu extends MatteryMenu { - public CargoCrateMenu(int p_38852_, Inventory inventory) { - this(p_38852_, inventory, null); - } +class CargoCrateMenu @JvmOverloads constructor( + p_38852_: Int, + inventory: Inventory, + tile: BlockEntityCargoCrate? = null +) : MatteryMenu(Registry.Menus.CARGO_CRATE, p_38852_, inventory, tile) { + val crateSlots: Array - public final MatterySlot[] crate_slots = new MatterySlot[9 * 6]; + init { + val container = tile?.container ?: SimpleContainer(9 * 6) - public CargoCrateMenu(int p_38852_, Inventory inventory, BlockEntityCargoCrate tile) { - super(Registry.Menus.CARGO_CRATE, p_38852_, inventory, tile); - var container = tile != null ? tile.container : new SimpleContainer(9 * 6); - - for (int i = 0; i < container.getContainerSize(); i++) { - crate_slots[i] = new MatterySlot(container, i); - addSlot(crate_slots[i]); + crateSlots = Array(9 * 6) { + val slot = MatterySlot(container, it) + addSlot(slot) + return@Array slot } - if (tile != null) - tile.onPlayerOpen(); - - addInventorySlots(); + tile?.onPlayerOpen() + addInventorySlots() } - @Override - public void removed(Player p_38940_) { - super.removed(p_38940_); - - if (tile != null) - ((BlockEntityCargoCrate) tile).onPlayerClose(); + override fun removed(p_38940_: Player) { + super.removed(p_38940_) + (tile as? BlockEntityCargoCrate)?.onPlayerClose() } - @Override - protected int getWorkingSlotStart() { - return 0; + override fun getWorkingSlotStart(): Int { + return 0 } - @Override - protected int getWorkingSlotEnd() { - return 9 * 6 + 1; + override fun getWorkingSlotEnd(): Int { + return 9 * 6 + 1 } }