diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/Cables.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/Cables.kt index 9b3cbd1d5..25c7364f1 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/Cables.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/Cables.kt @@ -59,8 +59,7 @@ abstract class CableBlock(properties: Properties) : MatteryBlock(properties) { return getShapeForEachStateMattery { getShapeFor(it, halfCoreSize) } } - @Suppress("OVERRIDE_DEPRECATION") - override fun use(blockState: BlockState, level: Level, blockPos: BlockPos, ply: Player, hand: InteractionHand, blockHitResult: BlockHitResult): InteractionResult { + override fun useWithoutItem(blockState: BlockState, level: Level, blockPos: BlockPos, ply: Player, blockHitResult: BlockHitResult): InteractionResult { return InteractionResult.PASS } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/ExplosionDebuggerBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/ExplosionDebuggerBlock.kt deleted file mode 100644 index fb0640659..000000000 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/ExplosionDebuggerBlock.kt +++ /dev/null @@ -1,51 +0,0 @@ -package ru.dbotthepony.mc.otm.block - -import net.minecraft.core.BlockPos -import net.minecraft.world.level.Level -import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.EntityBlock -import net.minecraft.world.level.block.SoundType -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.level.material.PushReaction -import ru.dbotthepony.mc.otm.block.entity.blackhole.BlockEntityExplosionDebugger -import ru.dbotthepony.mc.otm.block.entity.blackhole.BlockEntitySphereDebugger -import ru.dbotthepony.mc.otm.registry.MBlockEntities - -class BlockExplosionDebugger : Block(Properties.of().sound(SoundType.STONE).pushReaction(PushReaction.BLOCK)), EntityBlock { - override fun newBlockEntity(p_153215_: BlockPos, p_153216_: BlockState): BlockEntity { - return BlockEntityExplosionDebugger(p_153215_, p_153216_) - } - - override fun getTicker( - p_153212_: Level, - p_153213_: BlockState, - p_153214_: BlockEntityType - ): BlockEntityTicker? { - if (!p_153212_.isClientSide && p_153214_ === MBlockEntities.DEBUG_EXPLOSION_SMALL) { - return BlockEntityTicker {_, _, _, t -> if (t is BlockEntityExplosionDebugger) t.tick()} - } - - return null - } -} - -class BlockSphereDebugger : Block(Properties.of()), EntityBlock { - override fun newBlockEntity(p_153215_: BlockPos, p_153216_: BlockState): BlockEntity { - return BlockEntitySphereDebugger(p_153215_, p_153216_) - } - - override fun getTicker( - p_153212_: Level, - p_153213_: BlockState, - p_153214_: BlockEntityType - ): BlockEntityTicker? { - if (!p_153212_.isClientSide && p_153214_ === MBlockEntities.DEBUG_SPHERE_POINTS) { - return BlockEntityTicker {_, _, _, t -> if (t is BlockEntitySphereDebugger) t.tick()} - } - - return null - } -} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/EngineBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/EngineBlock.kt index dff575233..e9d6c839c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/EngineBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/EngineBlock.kt @@ -3,6 +3,7 @@ package ru.dbotthepony.mc.otm.block.decorative import net.minecraft.ChatFormatting import net.minecraft.core.BlockPos import net.minecraft.network.chat.Component +import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.TooltipFlag import net.minecraft.world.level.BlockGetter @@ -21,11 +22,11 @@ import ru.dbotthepony.mc.otm.shapes.BlockShapes class EngineBlock : RotatableMatteryBlock(Properties.of().mapColor(MapColor.COLOR_ORANGE).sound(SoundType.METAL).explosionResistance(14f).destroyTime(2.5f).requiresCorrectToolForDrops().pushReaction(PushReaction.NORMAL)) { override fun appendHoverText( itemStack: ItemStack, - blockAccessor: BlockGetter?, + context: Item.TooltipContext, components: MutableList, tooltipType: TooltipFlag ) { - super.appendHoverText(itemStack, blockAccessor, components, tooltipType) + super.appendHoverText(itemStack, context, components, tooltipType) components.add(TranslatableComponent("$descriptionId.desc").withStyle(ChatFormatting.DARK_GRAY)) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/FluidTankBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/FluidTankBlock.kt index 367f5429f..0b059e733 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/FluidTankBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/decorative/FluidTankBlock.kt @@ -3,7 +3,9 @@ package ru.dbotthepony.mc.otm.block.decorative import net.minecraft.core.BlockPos import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult +import net.minecraft.world.ItemInteractionResult import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.EntityBlock @@ -33,13 +35,12 @@ class FluidTankBlock : RotatableMatteryBlock(DEFAULT_MACHINE_PROPERTIES), Entity return BlockEntityTicker { _, _, _, pBlockEntity -> if (pBlockEntity is FluidTankBlockEntity) pBlockEntity.tick() } } - @Suppress("OVERRIDE_DEPRECATION") - override fun use(blockState: BlockState, level: Level, blockPos: BlockPos, ply: Player, hand: InteractionHand, blockHitResult: BlockHitResult): InteractionResult { + override fun useItemOn(item: ItemStack, blockState: BlockState, level: Level, blockPos: BlockPos, ply: Player, hand: InteractionHand, blockHitResult: BlockHitResult): ItemInteractionResult { if (FluidUtil.interactWithFluidHandler(ply, hand, level, blockPos, blockHitResult.direction)) { - return InteractionResult.sidedSuccess(level.isClientSide) + return ItemInteractionResult.sidedSuccess(level.isClientSide) } - return super.use(blockState, level, blockPos, ply, hand, blockHitResult) + return super.useItemOn(item, blockState, level, blockPos, ply, hand, blockHitResult) } private val shapes = getShapeForEachState(rotationProperty) { BlockShapes.FLUID_TANK.rotateFromNorth(it[rotationProperty]).computeShape() } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/blackhole/BlackHoleBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/blackhole/BlackHoleBlockEntity.kt index 4daef4b9c..cf1a69ca3 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/blackhole/BlackHoleBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/blackhole/BlackHoleBlockEntity.kt @@ -37,7 +37,6 @@ import ru.dbotthepony.mc.otm.core.math.getSphericalBlockPositions import ru.dbotthepony.mc.otm.core.math.times import ru.dbotthepony.mc.otm.core.nbt.map import ru.dbotthepony.mc.otm.core.nbt.set -import ru.dbotthepony.mc.otm.core.util.decimal import ru.dbotthepony.mc.otm.matter.MatterManager import ru.dbotthepony.mc.otm.registry.MDamageTypes import ru.dbotthepony.mc.otm.registry.MatteryDamageSource diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/FluidTankBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/FluidTankBlockEntity.kt index 3ea66d026..a03cd1219 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/FluidTankBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/decorative/FluidTankBlockEntity.kt @@ -22,8 +22,8 @@ import ru.dbotthepony.mc.otm.container.HandlerFilter import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.get import ru.dbotthepony.mc.otm.core.isNotEmpty -import ru.dbotthepony.mc.otm.core.util.FluidStackValueCodec import ru.dbotthepony.mc.otm.menu.decorative.FluidTankMenu +import ru.dbotthepony.mc.otm.network.wrap import ru.dbotthepony.mc.otm.registry.MBlockEntities class FluidTankBlockEntity(blockPos: BlockPos, blockState: BlockState) : MatteryDeviceBlockEntity(MBlockEntities.FLUID_TANK, blockPos, blockState) { @@ -34,7 +34,7 @@ class FluidTankBlockEntity(blockPos: BlockPos, blockState: BlockState) : Mattery if (level is ServerLevel) { markDirtyFast() } - }), FluidStackValueCodec)) + }), FluidStack.STREAM_CODEC.wrap())) val fillInput = MatteryContainer(::markDirtyFast, 1).also(::addDroppableContainer) val drainInput = MatteryContainer(::markDirtyFast, 1).also(::addDroppableContainer) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReconstructorBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReconstructorBlockEntity.kt index 9006e64d9..e40fbc5a2 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReconstructorBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReconstructorBlockEntity.kt @@ -29,7 +29,6 @@ import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.UpgradeContainer import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.registryName -import ru.dbotthepony.mc.otm.core.util.item import ru.dbotthepony.mc.otm.graph.matter.MatterNode import ru.dbotthepony.mc.otm.matter.IMatterValue import ru.dbotthepony.mc.otm.matter.MatterManager diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReplicatorBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReplicatorBlockEntity.kt index 5130d082a..b6a955837 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReplicatorBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReplicatorBlockEntity.kt @@ -3,6 +3,7 @@ package ru.dbotthepony.mc.otm.block.entity.matter import com.mojang.serialization.Codec import com.mojang.serialization.codecs.RecordCodecBuilder import net.minecraft.core.BlockPos +import net.minecraft.core.UUIDUtil import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Player import net.minecraft.world.inventory.AbstractContainerMenu @@ -28,7 +29,6 @@ import ru.dbotthepony.mc.otm.container.HandlerFilter import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.UpgradeContainer import ru.dbotthepony.mc.otm.core.math.Decimal -import ru.dbotthepony.mc.otm.core.util.item import ru.dbotthepony.mc.otm.data.DecimalCodec import ru.dbotthepony.mc.otm.data.minRange import ru.dbotthepony.mc.otm.graph.matter.MatterNode @@ -56,7 +56,7 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : it.group( ItemStack.CODEC.fieldOf("Item").forGetter(ReplicatorJob::itemStack), DecimalCodec.minRange(Decimal.ZERO).fieldOf("matterPerTick").forGetter(ReplicatorJob::matterPerTick), - UUIDCodec.fieldOf("task").forGetter(ReplicatorJob::task), + UUIDUtil.CODEC.fieldOf("task").forGetter(ReplicatorJob::task), DecimalCodec.minRange(Decimal.ZERO).fieldOf("matterValue").forGetter(ReplicatorJob::matterValue), PatternState.CODEC.optionalFieldOf("pattern").forGetter(ReplicatorJob::pattern), Codec.BOOL.fieldOf("asDust").forGetter(ReplicatorJob::asDust), diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterScannerBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterScannerBlockEntity.kt index 8af075a13..7155a61dd 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterScannerBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterScannerBlockEntity.kt @@ -23,7 +23,6 @@ import ru.dbotthepony.mc.otm.config.MachinesConfig import ru.dbotthepony.mc.otm.container.MatteryContainer import ru.dbotthepony.mc.otm.container.HandlerFilter import ru.dbotthepony.mc.otm.container.UpgradeContainer -import ru.dbotthepony.mc.otm.core.util.item import ru.dbotthepony.mc.otm.menu.matter.MatterScannerMenu import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.graph.matter.MatterNode diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AbstractPoweredFurnaceBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AbstractPoweredFurnaceBlockEntity.kt index 94d8fd791..de349f3e9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AbstractPoweredFurnaceBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/AbstractPoweredFurnaceBlockEntity.kt @@ -36,7 +36,6 @@ import ru.dbotthepony.mc.otm.container.balance import ru.dbotthepony.mc.otm.core.collect.filter import ru.dbotthepony.mc.otm.core.collect.maybe import ru.dbotthepony.mc.otm.core.immutableList -import ru.dbotthepony.mc.otm.core.util.item import ru.dbotthepony.mc.otm.menu.tech.PoweredFurnaceMenu import ru.dbotthepony.mc.otm.recipe.MatteryCookingRecipe import ru.dbotthepony.mc.otm.recipe.MicrowaveRecipe diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EnergyCounterBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EnergyCounterBlockEntity.kt index 5fe62e3c6..3db0703ee 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EnergyCounterBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/tech/EnergyCounterBlockEntity.kt @@ -27,7 +27,6 @@ import ru.dbotthepony.mc.otm.core.nbt.map import ru.dbotthepony.mc.otm.core.nbt.mapPresent import ru.dbotthepony.mc.otm.core.nbt.set import ru.dbotthepony.mc.otm.core.util.countingLazy -import ru.dbotthepony.mc.otm.core.util.decimal import ru.dbotthepony.mc.otm.menu.tech.EnergyCounterMenu import ru.dbotthepony.mc.otm.registry.MBlockEntities import java.util.* diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt index 767d9981f..1422f9424 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/AndroidStationBlock.kt @@ -33,18 +33,17 @@ class AndroidStationBlock(val color: DyeColor?) : MatteryBlock(DEFAULT_MACHINE_P tooltips.blockEntityEnergy() } - override fun use( + override fun useWithoutItem( blockState: BlockState, level: Level, blockPos: BlockPos, ply: Player, - hand: InteractionHand, blockHitResult: BlockHitResult ): InteractionResult { if (!ply.matteryPlayer.isAndroid) return InteractionResult.FAIL - return super.use(blockState, level, blockPos, ply, hand, blockHitResult) + return super.useWithoutItem(blockState, level, blockPos, ply, blockHitResult) } override fun createBlockStateDefinition(builder: StateDefinition.Builder) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt index ed7d56301..4f325722d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/tech/EssenceStorageBlock.kt @@ -5,8 +5,10 @@ import net.minecraft.core.BlockPos import net.minecraft.nbt.LongTag import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult +import net.minecraft.world.ItemInteractionResult import net.minecraft.world.entity.player.Player import net.minecraft.world.item.DyeColor +import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block @@ -63,13 +65,12 @@ class EssenceStorageBlock(val color: DyeColor?) : RotatableMatteryBlock(Properti return null } - @Suppress("OVERRIDE_DEPRECATION") - override fun use(blockState: BlockState, level: Level, blockPos: BlockPos, ply: Player, hand: InteractionHand, blockHitResult: BlockHitResult): InteractionResult { - if (ply.getItemInHand(hand).item == MItems.ESSENCE_SERVO) { + override fun useItemOn(itemStack: ItemStack, blockState: BlockState, level: Level, blockPos: BlockPos, ply: Player, hand: InteractionHand, blockHitResult: BlockHitResult): ItemInteractionResult { + if (itemStack.item == MItems.ESSENCE_SERVO) { return MItems.ESSENCE_SERVO.useServo(ply, blockPos) } - return super.use(blockState, level, blockPos, ply, hand, blockHitResult) + return super.useItemOn(itemStack, blockState, level, blockPos, ply, hand, blockHitResult) } override fun createBlockStateDefinition(builder: StateDefinition.Builder) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BatteryBackedEnergyStorage.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BatteryBackedEnergyStorage.kt index 94f1fae8c..54dd5abfb 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BatteryBackedEnergyStorage.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/energy/BatteryBackedEnergyStorage.kt @@ -17,8 +17,6 @@ import ru.dbotthepony.mc.otm.capability.receiveEnergy import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.getDecimal import ru.dbotthepony.mc.otm.core.nbt.set -import ru.dbotthepony.mc.otm.core.util.decimal -import ru.dbotthepony.mc.otm.core.util.observedItem import ru.dbotthepony.mc.otm.registry.StatNames import ru.dbotthepony.mc.otm.triggers.AndroidBatteryTrigger import ru.dbotthepony.mc.otm.triggers.ExopackBatterySlotTrigger diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/PatternState.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/PatternState.kt index 82315afaf..acd50d631 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/PatternState.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/PatternState.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.capability.matter import com.mojang.serialization.Codec import com.mojang.serialization.codecs.RecordCodecBuilder +import net.minecraft.core.UUIDUtil import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.network.FriendlyByteBuf import net.minecraft.world.item.Item @@ -35,7 +36,7 @@ data class PatternState( val CODEC: Codec by lazy { RecordCodecBuilder.create { it.group( - UUIDCodec.fieldOf("id").forGetter(PatternState::id), + UUIDUtil.CODEC.fieldOf("id").forGetter(PatternState::id), BuiltInRegistries.ITEM.byNameCodec().fieldOf("item").forGetter(PatternState::item), Codec.doubleRange(0.0, 1.0).fieldOf("researchPercent").forGetter(PatternState::researchPercent) ).apply(it, ::PatternState) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/ReplicationTask.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/ReplicationTask.kt index 2b8f52a07..059022f22 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/ReplicationTask.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/matter/ReplicationTask.kt @@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.capability.matter import com.mojang.serialization.Codec import com.mojang.serialization.codecs.RecordCodecBuilder +import net.minecraft.core.UUIDUtil import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.NbtOps @@ -66,8 +67,8 @@ data class ReplicationTask( val CODEC: Codec by lazy { RecordCodecBuilder.create { it.group( - UUIDCodec.fieldOf("id").forGetter(ReplicationTask::id), - UUIDCodec.optionalFieldOf("patternId").forGetter(ReplicationTask::patternId), + UUIDUtil.CODEC.fieldOf("id").forGetter(ReplicationTask::id), + UUIDUtil.CODEC.optionalFieldOf("patternId").forGetter(ReplicationTask::patternId), BuiltInRegistries.ITEM.byNameCodec().fieldOf("item").forGetter(ReplicationTask::item), Codec.intRange(0, Int.MAX_VALUE).fieldOf("inProgress").forGetter(ReplicationTask::inProgress), Codec.intRange(0, Int.MAX_VALUE).fieldOf("finished").forGetter(ReplicationTask::finished), diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EffectListPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EffectListPanel.kt index 4f4680962..f760e0148 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EffectListPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/EffectListPanel.kt @@ -152,7 +152,7 @@ open class EffectListPanel @JvmOverloads constructor( } } - protected val effectButtons: MutableMap, EffectSquare> = Object2ObjectArrayMap() + protected val effectButtons: MutableMap, EffectListPanel<*>.EffectSquare> = Object2ObjectArrayMap() fun calculateMaxScroll(scrollBarPanel: DiscreteScrollBarPanel<*>): Int { return integerDivisionDown(entity.activeEffects.size, gridWidth) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/FramePanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/FramePanel.kt index 37b7965c6..a1a2b7651 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/FramePanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/FramePanel.kt @@ -238,7 +238,7 @@ open class FramePanel( } } - protected val tabs: java.util.ArrayList = ArrayList() + protected val tabs: ArrayList.Tab> = ArrayList() override fun performLayout() { for ((i, tab) in tabs.withIndex()) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/Buttons.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/Buttons.kt index 7d0919e51..f2dcf4bab 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/Buttons.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/Buttons.kt @@ -434,7 +434,7 @@ class DeviceControls>( } override var isDisabled: Boolean - get() = !input.input.test(minecraft.player) + get() { return !input.input.test(minecraft.player ?: return false) } set(value) {} private fun makeButtons() { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/EnumRectangleButtonPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/EnumRectangleButtonPanel.kt index 7ac646221..c4d7aa32b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/EnumRectangleButtonPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/EnumRectangleButtonPanel.kt @@ -4,7 +4,6 @@ import com.mojang.blaze3d.platform.InputConstants import net.minecraft.ChatFormatting import net.minecraft.client.gui.screens.Screen import net.minecraft.network.chat.Component -import ru.dbotthepony.kommons.io.StreamCodec import ru.dbotthepony.kommons.util.Delegate import ru.dbotthepony.kommons.util.value import ru.dbotthepony.mc.otm.client.render.MGUIGraphics @@ -14,6 +13,7 @@ import ru.dbotthepony.mc.otm.client.render.UVWindingOrder import ru.dbotthepony.mc.otm.client.screen.panels.EditablePanel import ru.dbotthepony.mc.otm.core.* import ru.dbotthepony.mc.otm.menu.input.IPlayerInputWithFeedback +import ru.dbotthepony.mc.otm.network.MatteryStreamCodec import java.util.* import java.util.function.Predicate import kotlin.collections.ArrayList @@ -29,7 +29,7 @@ abstract class EnumRectangleButtonPanel>( val prop: Delegate, val defaultValue: T, ) : RectangleButtonPanel(screen, parent, x, y, width, height, null) { - val enum = StreamCodec.Enum.searchClass(enum) + val enum = MatteryStreamCodec.Enum.searchClass(enum) private val constants: Array = enum.enumConstants private var isBuilding = true var predicate: Predicate = Predicate { true } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/LargeRectangleButtonPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/LargeRectangleButtonPanel.kt index 0db554169..7e43bd9a6 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/LargeRectangleButtonPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/button/LargeRectangleButtonPanel.kt @@ -57,7 +57,7 @@ open class LargeRectangleButtonPanel( } override var isDisabled: Boolean - get() = !input.test(minecraft.player) + get() { return !input.test(minecraft.player ?: return false) } set(value) {} } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/storage/StorageBusScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/storage/StorageBusScreen.kt index c504cb6a1..833658e1f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/storage/StorageBusScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/storage/StorageBusScreen.kt @@ -2,14 +2,11 @@ package ru.dbotthepony.mc.otm.client.screen.storage import net.minecraft.network.chat.Component import net.minecraft.world.entity.player.Inventory -import ru.dbotthepony.mc.otm.capability.FlowDirection -import ru.dbotthepony.mc.otm.client.render.Widgets18 import ru.dbotthepony.mc.otm.client.screen.MatteryScreen import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.client.screen.panels.* import ru.dbotthepony.mc.otm.client.screen.panels.button.CheckBoxLabelInputPanel import ru.dbotthepony.mc.otm.client.screen.panels.button.DeviceControls -import ru.dbotthepony.mc.otm.client.screen.panels.button.LargeEnumRectangleButtonPanel import ru.dbotthepony.mc.otm.client.screen.panels.input.IntInputPanel import ru.dbotthepony.mc.otm.client.screen.panels.slot.AbstractSlotPanel import ru.dbotthepony.mc.otm.client.screen.panels.slot.FilterSlotPanel @@ -29,7 +26,7 @@ class StorageBusScreen(menu: StorageBusMenu, inventory: Inventory, title: Compon grid.dock = Dock.TOP grid.dockBottom = 2f - for (slot in menu.busFilterSlots) + for (slot in menu.filter.slots) FilterSlotPanel(this, grid, slot) IntInputPanel(this, right, menu.insertPriority).also { @@ -46,7 +43,7 @@ class StorageBusScreen(menu: StorageBusMenu, inventory: Inventory, title: Compon it.childrenOrder = -2 } - CheckBoxLabelInputPanel(this, right, menu.busFilterState, TranslatableComponent("otm.gui.filter.is_whitelist")).also { + CheckBoxLabelInputPanel(this, right, menu.filter.isWhitelist, TranslatableComponent("otm.gui.filter.is_whitelist")).also { it.dock = Dock.BOTTOM it.childrenOrder = -3 } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EssenceStorageScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EssenceStorageScreen.kt index 3f92975fd..a18d54b68 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EssenceStorageScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EssenceStorageScreen.kt @@ -106,7 +106,7 @@ class EssenceStorageScreen(menu: EssenceStorageMenu, inventory: Inventory, title } override var isDisabled: Boolean - get() = !menu.storeLevels.test(minecraft?.player) + get() = !menu.storeLevels.test(minecraft!!.player!!) set(value) {} } @@ -121,7 +121,7 @@ class EssenceStorageScreen(menu: EssenceStorageMenu, inventory: Inventory, title } override var isDisabled: Boolean - get() = !menu.storeLevels.test(minecraft?.player) + get() = !menu.storeLevels.test(minecraft!!.player!!) set(value) {} } @@ -265,7 +265,7 @@ class EssenceStorageScreen(menu: EssenceStorageMenu, inventory: Inventory, title } override var isDisabled: Boolean - get() = !menu.dispenseLevels.test(minecraft?.player) && !menu.storeLevels.test(minecraft?.player) + get() = !menu.dispenseLevels.test(minecraft!!.player!!) && !menu.storeLevels.test(minecraft!!.player!!) set(value) {} } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/cos/CosmeticArmorCompat.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/cos/CosmeticArmorCompat.kt index 40146f476..163b34490 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/compat/cos/CosmeticArmorCompat.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/compat/cos/CosmeticArmorCompat.kt @@ -14,7 +14,6 @@ import net.minecraft.world.entity.player.Player import net.minecraft.world.inventory.InventoryMenu import net.minecraft.world.inventory.Slot import net.minecraft.world.item.ItemStack -import net.minecraftforge.fml.ModList import net.neoforged.fml.ModList import ru.dbotthepony.mc.otm.client.render.MGUIGraphics import ru.dbotthepony.mc.otm.client.minecraft diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/config/ClientConfig.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/config/ClientConfig.kt index a654d49a0..ceef0ed7d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/config/ClientConfig.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/config/ClientConfig.kt @@ -1,6 +1,6 @@ package ru.dbotthepony.mc.otm.config -import net.minecraftforge.fml.config.ModConfig +import net.neoforged.fml.config.ModConfig object ClientConfig : AbstractConfig("client", ModConfig.Type.CLIENT) { 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 5a0ffa29a..4cb739c74 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/container/MatteryContainer.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/container/MatteryContainer.kt @@ -25,7 +25,6 @@ import net.neoforged.neoforge.common.util.INBTSerializable import org.apache.logging.log4j.LogManager import ru.dbotthepony.kommons.collect.ListenableMap import ru.dbotthepony.mc.otm.network.DelegateSyncher -import ru.dbotthepony.kommons.io.VarIntValueCodec import ru.dbotthepony.mc.otm.container.util.IContainerSlot import ru.dbotthepony.mc.otm.core.addSorted import ru.dbotthepony.mc.otm.core.collect.any @@ -36,8 +35,8 @@ import ru.dbotthepony.mc.otm.core.collect.map import ru.dbotthepony.mc.otm.core.isNotEmpty import ru.dbotthepony.mc.otm.core.nbt.set import ru.dbotthepony.mc.otm.core.registryName -import ru.dbotthepony.mc.otm.core.util.ItemValueCodec import ru.dbotthepony.mc.otm.data.minRange +import ru.dbotthepony.mc.otm.network.StreamCodecs import java.util.* import java.util.function.Consumer import java.util.function.Predicate @@ -124,8 +123,8 @@ open class MatteryContainer(var listener: ContainerListener, private val size: I val field = synchronizer.MapSlot( ListenableMap(Int2ObjectOpenHashMap()), - keyCodec = VarIntValueCodec, - valueCodec = ItemValueCodec, + keyCodec = StreamCodecs.VAR_INT, + valueCodec = StreamCodecs.ITEM_TYPE, ) for ((i, filter) in filters.withIndex()) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/util/FriendlyStreams.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/util/FriendlyStreams.kt index 855ab7541..56c71422e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/util/FriendlyStreams.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/util/FriendlyStreams.kt @@ -37,80 +37,6 @@ fun InputStream.readNbt(): CompoundTag { } } -fun OutputStream.writeItem(itemStack: ItemStack, limitedTag: Boolean = true) { - if (itemStack.isEmpty) { - write(0) - } else { - write(1) - val id = BuiltInRegistries.ITEM.getId(itemStack.item) - - writeInt(id) - writeInt(itemStack.count) - - var compoundtag: CompoundTag? = null - - if (itemStack.item.isDamageable(itemStack)) { - compoundtag = if (limitedTag) itemStack.shareTag else itemStack.tag - } - - write(if (compoundtag != null) 1 else 0) - - if (compoundtag != null) { - writeNbt(compoundtag) - } - } -} - -fun InputStream.readItem(): ItemStack { - if (read() == 0) { - return ItemStack.EMPTY - } - - val item = BuiltInRegistries.ITEM.byId(readInt()) - val itemStack = ItemStack(item, readInt()) - - if (read() != 0) { - itemStack.readShareTag(readNbt()) - } - - return itemStack -} - -fun OutputStream.writeFluidStack(value: FluidStack) { - if (value.isEmpty) { - write(0) - } else { - write(1) - - val id = (ForgeRegistries.FLUIDS as ForgeRegistry).getID(value.fluid) - writeVarIntLE(id) - writeInt(value.amount) - - if (value.hasTag()) { - write(1) - writeNbt(value.tag!!) - } else { - write(0) - } - } -} - -fun InputStream.readFluidStack(): FluidStack { - if (read() == 0) { - return FluidStack.EMPTY - } else { - val id = readVarIntLE() - val fluid = (ForgeRegistries.FLUIDS as ForgeRegistry).getValue(id) ?: return FluidStack.EMPTY - val amount = readInt() - - if (read() > 0) { - return FluidStack(fluid, amount, readNbt()) - } else { - return FluidStack(fluid, amount) - } - } -} - fun OutputStream.writeBigDecimal(value: BigDecimal) { writeInt(value.scale()) val bytes = value.unscaledValue().toByteArray() diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/BatteryItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/BatteryItem.kt index 7e33e097c..aaca7ea9c 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/BatteryItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/BatteryItem.kt @@ -13,6 +13,7 @@ import net.minecraft.world.entity.player.Player import net.minecraft.world.item.* import net.minecraft.world.level.Level import net.neoforged.neoforge.capabilities.Capabilities +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent import ru.dbotthepony.mc.otm.config.BatteryBalanceValues import ru.dbotthepony.mc.otm.capability.* import ru.dbotthepony.mc.otm.capability.energy.EnergyCapacitorItem @@ -22,12 +23,13 @@ import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.config.ItemsConfig import ru.dbotthepony.mc.otm.core.* import ru.dbotthepony.mc.otm.core.math.Decimal +import ru.dbotthepony.mc.otm.registry.CapabilitiesRegisterListener import ru.dbotthepony.mc.otm.registry.MDamageTypes import ru.dbotthepony.mc.otm.registry.MatteryDamageSource import ru.dbotthepony.mc.otm.runIfClient import kotlin.math.roundToInt -open class BatteryItem : MatteryItem { +open class BatteryItem : MatteryItem, CapabilitiesRegisterListener { val _capacity: () -> Decimal val _receive: () -> Decimal val _extract: () -> Decimal @@ -105,10 +107,14 @@ open class BatteryItem : MatteryItem { tooltips.itemEnergy() } - override fun initCapabilities(stack: ItemStack, nbt: CompoundTag?): ICapabilityProvider { - stack.getCapability() + private fun capFor(stack: ItemStack): EnergyCapacitorItem { return EnergyCapacitorItem(stack, this@BatteryItem.capacity, this@BatteryItem.receive, this@BatteryItem.extract, initialBatteryLevel = this@BatteryItem.initialBatteryLevel) } + + override fun registerCapabilities(event: RegisterCapabilitiesEvent) { + event.registerItem(MatteryCapability.ITEM_ENERGY, { o, _ -> capFor(o) }, this) + event.registerItem(Capabilities.EnergyStorage.ITEM, { o, _ -> capFor(o) }, this) + } } class CrudeBatteryItem : BatteryItem(ItemsConfig.Batteries.CRUDE) { @@ -132,7 +138,7 @@ class CrudeBatteryItem : BatteryItem(ItemsConfig.Batteries.CRUDE) { } override fun use(level: Level, player: Player, hand: InteractionHand): InteractionResultHolder { - if (player.matteryPlayer?.isAndroid == true) { + if (player.matteryPlayer.isAndroid) { player.startUsingItem(hand) return InteractionResultHolder.consume(player.getItemInHand(hand)) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceServoItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceServoItem.kt index 329216fa2..0ca9ed30e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceServoItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/EssenceServoItem.kt @@ -5,6 +5,7 @@ import net.minecraft.core.BlockPos import net.minecraft.network.chat.Component import net.minecraft.server.level.ServerPlayer import net.minecraft.world.InteractionResult +import net.minecraft.world.ItemInteractionResult import net.minecraft.world.entity.player.Player import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack @@ -20,13 +21,13 @@ class EssenceServoItem : MatteryItem(Properties().stacksTo(64)) { addSimpleDescription(formatting = ChatFormatting.DARK_GRAY) } - fun useServo(player: Player, pos: BlockPos): InteractionResult { - val block = player.level().getBlockEntity(pos) ?: return InteractionResult.FAIL + fun useServo(player: Player, pos: BlockPos): ItemInteractionResult { + val block = player.level().getBlockEntity(pos) ?: return ItemInteractionResult.FAIL // TODO: опыт как жидкость if (block is EssenceStorageBlockEntity) { - if (player.level().isClientSide) return InteractionResult.SUCCESS - if (player !is ServerPlayer) return InteractionResult.FAIL + if (player.level().isClientSide) return ItemInteractionResult.SUCCESS + if (player !is ServerPlayer) return ItemInteractionResult.FAIL if (player.isCrouching) { // выгружаем в блок storeLevel(player, block) @@ -34,15 +35,15 @@ class EssenceServoItem : MatteryItem(Properties().stacksTo(64)) { dispenseLevel(player, block) } - return InteractionResult.SUCCESS + return ItemInteractionResult.SUCCESS } - return InteractionResult.FAIL + return ItemInteractionResult.FAIL } override fun useOn(pContext: UseOnContext): InteractionResult { val player = pContext.player ?: return InteractionResult.FAIL - return useServo(player, pContext.clickedPos) + return useServo(player, pContext.clickedPos).result() } companion object { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/exopack/AbstractExopackSlotUpgradeItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/exopack/AbstractExopackSlotUpgradeItem.kt index 949c648e5..2375bd310 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/exopack/AbstractExopackSlotUpgradeItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/exopack/AbstractExopackSlotUpgradeItem.kt @@ -30,8 +30,8 @@ abstract class AbstractExopackSlotUpgradeItem(properties: Properties = defaultPr abstract fun slotCount(itemStack: ItemStack): Int abstract fun uuid(itemStack: ItemStack): UUID? - override fun canBeHurtBy(p_41387_: DamageSource): Boolean { - return super.canBeHurtBy(p_41387_) && !p_41387_.isExplosion && !p_41387_.isFire + override fun canBeHurtBy(stack: ItemStack, source: DamageSource): Boolean { + return super.canBeHurtBy(stack, source) && !source.isExplosion && !source.isFire } override fun getUseDuration(p_41454_: ItemStack, p_344979_: LivingEntity): Int { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/item/tool/ExplosiveHammerItem.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/item/tool/ExplosiveHammerItem.kt index 1e297179f..3a3ec4e4e 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/item/tool/ExplosiveHammerItem.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/item/tool/ExplosiveHammerItem.kt @@ -46,8 +46,8 @@ import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger import java.util.function.Predicate class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1).fireResistant().durability(durability)) { - override fun canBeHurtBy(pDamageSource: DamageSource): Boolean { - return super.canBeHurtBy(pDamageSource) && !pDamageSource.isExplosion + override fun canBeHurtBy(stack: ItemStack, pDamageSource: DamageSource): Boolean { + return super.canBeHurtBy(stack, pDamageSource) && !pDamageSource.isExplosion } fun isPrimed(itemStack: ItemStack): Boolean { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/data/NetworkedItemView.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/data/NetworkedItemView.kt index 0a0f43408..857f422f2 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/data/NetworkedItemView.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/data/NetworkedItemView.kt @@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.Screen import net.minecraft.network.FriendlyByteBuf +import net.minecraft.network.RegistryFriendlyByteBuf import net.minecraft.network.codec.StreamCodec import net.minecraft.network.protocol.common.custom.CustomPacketPayload import net.minecraft.server.level.ServerPlayer @@ -107,7 +108,7 @@ object ClearItemViewPacket : NetworkedItemViewPacket() { } class StackAddPacket(val stackId: Int, val stack: ItemStorageStack) : NetworkedItemViewPacket() { - fun write(buff: FriendlyByteBuf) { + fun write(buff: RegistryFriendlyByteBuf) { buff.writeInt(stackId) stack.write(buff) } @@ -134,10 +135,10 @@ class StackAddPacket(val stackId: Int, val stack: ItemStorageStack) : NetworkedI ) ) - val CODEC: StreamCodec = + val CODEC: StreamCodec = StreamCodec.ofMember(StackAddPacket::write, ::read) - fun read(buffer: FriendlyByteBuf): StackAddPacket { + fun read(buffer: RegistryFriendlyByteBuf): StackAddPacket { val id = buffer.readInt() val item = StorageStack.ITEMS.read(buffer) return StackAddPacket(id, item) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/AbstractPlayerInputWithFeedback.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/AbstractPlayerInputWithFeedback.kt index 71d56932b..c0762f436 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/AbstractPlayerInputWithFeedback.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/AbstractPlayerInputWithFeedback.kt @@ -15,7 +15,7 @@ import kotlin.reflect.KMutableProperty0 * * Getting and setting values should ONLY be done clientside */ -interface IPlayerInputWithFeedback : ListenableDelegate, Predicate +interface IPlayerInputWithFeedback : ListenableDelegate, Predicate /** * Represents Server to Client synchronization and Client to Server input @@ -40,7 +40,7 @@ abstract class AbstractPlayerInputWithFeedback : IPlayerInputWithFeedback input.accept(t) } - override fun test(player: Player?) = input.test(player) + override fun test(player: Player) = input.test(player) fun filter(filter: Predicate) = input.filter(filter) var supplier: (() -> V)? = null diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/EnumInputWithFeedback.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/EnumInputWithFeedback.kt index d8f7d05b8..5644f4ede 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/EnumInputWithFeedback.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/input/EnumInputWithFeedback.kt @@ -1,8 +1,9 @@ package ru.dbotthepony.mc.otm.menu.input -import ru.dbotthepony.kommons.io.StreamCodec +import net.minecraft.network.RegistryFriendlyByteBuf import ru.dbotthepony.kommons.util.Delegate import ru.dbotthepony.mc.otm.menu.MatteryMenu +import ru.dbotthepony.mc.otm.network.MatteryStreamCodec import kotlin.reflect.KMutableProperty0 inline fun > EnumInputWithFeedback(menu: MatteryMenu, allowedValues: Set? = null) = EnumInputWithFeedback(menu, E::class.java, allowedValues = allowedValues) @@ -14,7 +15,7 @@ inline fun > EnumInputWithFeedback(menu: MatteryMenu, allowS inline fun > EnumInputWithFeedback(menu: MatteryMenu, allowSpectators: Boolean, state: Delegate?, allowedValues: Set? = null) = EnumInputWithFeedback(menu, E::class.java, allowSpectators, state, allowedValues = allowedValues) class EnumInputWithFeedback>(menu: MatteryMenu, clazz: Class, allowSpectators: Boolean = false, val allowedValues: Set? = null) : AbstractPlayerInputWithFeedback() { - val codec = StreamCodec.Enum(clazz) + val codec = MatteryStreamCodec.Enum(clazz) private val default = codec.values.first() override val input = menu.PlayerInput(codec, allowSpectators) { if (allowedValues == null || it in allowedValues) consumer?.invoke(it) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/matter/MatterPanelMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/matter/MatterPanelMenu.kt index c06f06170..793449415 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/matter/MatterPanelMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/matter/MatterPanelMenu.kt @@ -10,7 +10,6 @@ import net.minecraft.world.item.Item import net.neoforged.neoforge.network.PacketDistributor import net.neoforged.neoforge.network.handling.IPayloadContext import org.apache.logging.log4j.LogManager -import ru.dbotthepony.kommons.io.NullValueCodec import ru.dbotthepony.kommons.util.getValue import ru.dbotthepony.kommons.util.setValue import ru.dbotthepony.mc.otm.OverdriveThatMatters @@ -21,14 +20,13 @@ import ru.dbotthepony.mc.otm.core.ResourceLocation import ru.dbotthepony.mc.otm.core.addSorted import ru.dbotthepony.mc.otm.core.map import ru.dbotthepony.mc.otm.core.math.Decimal -import ru.dbotthepony.mc.otm.core.util.DecimalValueCodec import ru.dbotthepony.mc.otm.core.util.writeCollection import ru.dbotthepony.mc.otm.graph.matter.IMatterGraphListener import ru.dbotthepony.mc.otm.graph.matter.MatterGraph import ru.dbotthepony.mc.otm.menu.IItemSortingSettings import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback -import ru.dbotthepony.mc.otm.network.* +import ru.dbotthepony.mc.otm.network.StreamCodecs import ru.dbotthepony.mc.otm.registry.MMenus import java.util.* import java.util.function.Predicate @@ -201,11 +199,11 @@ class MatterPanelMenu( val settings = IItemSortingSettings.inputs(this, tile?.getPlayerSettings(player), ::updateComparators) var isProvidingTasks by BooleanInputWithFeedback(this, tile?.let { it::isProvidingTasks }) - val cancelAll = PlayerInput(NullValueCodec) { tile?.dropAllTasks() } + val cancelAll = PlayerInput(StreamCodecs.NOTHING) { tile?.dropAllTasks() } val totalMatterStored: Decimal by mSynchronizer.computed( delegate = { tile?.matterNode?.graph?.getMatterStorageLevel() ?: Decimal.ZERO }, - codec = DecimalValueCodec, + codec = StreamCodecs.DECIMAL, ) var filter: Predicate = Predicate { true } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/storage/StorageBusMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/storage/StorageBusMenu.kt index fa06e69be..3caffec1b 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/storage/StorageBusMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/storage/StorageBusMenu.kt @@ -4,7 +4,7 @@ import net.minecraft.world.entity.player.Inventory import ru.dbotthepony.mc.otm.block.entity.storage.StorageBusBlockEntity import ru.dbotthepony.mc.otm.capability.FlowDirection import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu -import ru.dbotthepony.mc.otm.menu.input.BooleanInputWithFeedback +import ru.dbotthepony.mc.otm.menu.addFilterControls import ru.dbotthepony.mc.otm.menu.input.EnergyConfigPlayerInput import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.menu.input.IntInputWithFeedback @@ -16,8 +16,7 @@ class StorageBusMenu( inventory: Inventory, tile: StorageBusBlockEntity? = null ) : MatteryPoweredMenu(MMenus.STORAGE_BUS, containerId, inventory, tile) { - val busFilterSlots = addFilterSlots(tile?.filter, StorageBusBlockEntity.MAX_FILTERS) - val busFilterState = BooleanInputWithFeedback(this, tile?.let { it.filter::isWhitelist }) + val filter = addFilterControls(tile?.let { it::filter }, StorageBusBlockEntity.MAX_FILTERS) val insertPriority = IntInputWithFeedback(this, tile?.let { it::insertPriority }) val extractPriority = IntInputWithFeedback(this, tile?.let { it::extractPriority }) val profiledEnergy = ProfiledLevelGaugeWidget(this, tile?.energy, energyWidget) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/storage/StoragePowerSupplierMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/storage/StoragePowerSupplierMenu.kt index 1d1ab5605..2df4c0e6d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/storage/StoragePowerSupplierMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/storage/StoragePowerSupplierMenu.kt @@ -4,7 +4,6 @@ import net.minecraft.world.entity.player.Inventory import ru.dbotthepony.kommons.util.getValue import ru.dbotthepony.kommons.util.setValue import ru.dbotthepony.mc.otm.block.entity.storage.StoragePowerSupplierBlockEntity -import ru.dbotthepony.mc.otm.core.util.decimal import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu import ru.dbotthepony.mc.otm.registry.MMenus diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EnergyCounterMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EnergyCounterMenu.kt index b23aafec6..acfec93a4 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EnergyCounterMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EnergyCounterMenu.kt @@ -11,13 +11,12 @@ import ru.dbotthepony.mc.otm.block.tech.EnergyCounterBlock import ru.dbotthepony.mc.otm.block.entity.tech.EnergyCounterBlockEntity import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.toDecimal -import ru.dbotthepony.mc.otm.core.util.decimal import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.input.EnumInputWithFeedback import ru.dbotthepony.mc.otm.registry.MMenus import java.math.BigDecimal -class EnergyCounterMenu @JvmOverloads constructor( +class EnergyCounterMenu( p_38852_: Int, inventory: Inventory, tile: EnergyCounterBlockEntity? = null diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EssenceStorageMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EssenceStorageMenu.kt index 0c6f2519d..0a22ed27f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EssenceStorageMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/tech/EssenceStorageMenu.kt @@ -4,6 +4,8 @@ import net.minecraft.server.level.ServerPlayer import net.minecraft.world.SimpleContainer import net.minecraft.world.entity.player.Inventory import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.enchantment.EnchantmentEffectComponents +import net.minecraft.world.item.enchantment.EnchantmentHelper import net.minecraft.world.item.enchantment.Enchantments import ru.dbotthepony.kommons.util.getValue import ru.dbotthepony.mc.otm.block.entity.RedstoneSetting @@ -44,7 +46,7 @@ class EssenceStorageMenu( val mendingSlot = object : MatterySlot(tile?.mendingContainer ?: SimpleContainer(1), 0) { override fun mayPlace(itemStack: ItemStack): Boolean { - return itemStack.isDamaged && itemStack.getEnchantmentLevel(Enchantments.MENDING) > 0 + return itemStack.isDamaged && EnchantmentHelper.has(itemStack, EnchantmentEffectComponents.REPAIR_WITH_XP) } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/FluidGaugeWidget.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/FluidGaugeWidget.kt index d54991f9b..b4229775a 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/FluidGaugeWidget.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/FluidGaugeWidget.kt @@ -5,8 +5,8 @@ import net.neoforged.neoforge.fluids.capability.IFluidHandler import ru.dbotthepony.mc.otm.network.DelegateSyncher import ru.dbotthepony.kommons.util.getValue import ru.dbotthepony.mc.otm.container.get -import ru.dbotthepony.mc.otm.core.util.FluidStackValueCodec import ru.dbotthepony.mc.otm.menu.MatteryMenu +import ru.dbotthepony.mc.otm.network.wrap import java.util.function.IntSupplier import java.util.function.Supplier @@ -14,10 +14,10 @@ class FluidGaugeWidget(synchronizer: DelegateSyncher) { constructor(menu: MatteryMenu) : this(menu.mSynchronizer) var maxCapacitySupplier = IntSupplier { 0 } - var fluidSupplier = Supplier { FluidStack.EMPTY!! } + var fluidSupplier = Supplier { FluidStack.EMPTY } val maxCapacity by synchronizer.computedInt(IntSupplier { maxCapacitySupplier.asInt }) - val fluid by synchronizer.computed({ fluidSupplier.get() }, FluidStackValueCodec) + val fluid by synchronizer.computed({ fluidSupplier.get() }, FluidStack.STREAM_CODEC.wrap()) val percentage: Float get() { if (maxCapacity <= 0 || fluid.isEmpty) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/LevelGaugeWidget.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/LevelGaugeWidget.kt index 19ea5aca5..7fd0bdb86 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/LevelGaugeWidget.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/LevelGaugeWidget.kt @@ -6,8 +6,8 @@ import ru.dbotthepony.mc.otm.capability.energy.IMatteryEnergyStorage import ru.dbotthepony.mc.otm.capability.matter.IMatterStorage import ru.dbotthepony.mc.otm.capability.matter.IPatternStorage import ru.dbotthepony.mc.otm.core.math.Decimal -import ru.dbotthepony.mc.otm.core.util.DecimalValueCodec import ru.dbotthepony.mc.otm.menu.MatteryMenu +import ru.dbotthepony.mc.otm.network.StreamCodecs @Suppress("unused") class LevelGaugeWidget(synchronizer: DelegateSyncher) { @@ -16,8 +16,8 @@ class LevelGaugeWidget(synchronizer: DelegateSyncher) { var levelProvider = { Decimal.ONE } var maxLevelProvider = { Decimal.ONE } - val level by synchronizer.computed(delegate = { levelProvider.invoke() }, codec = DecimalValueCodec) - val maxLevel by synchronizer.computed(delegate = { maxLevelProvider.invoke() }, codec = DecimalValueCodec) + val level by synchronizer.computed(delegate = { levelProvider.invoke() }, codec = StreamCodecs.DECIMAL) + val maxLevel by synchronizer.computed(delegate = { maxLevelProvider.invoke() }, codec = StreamCodecs.DECIMAL) constructor( menu: MatteryMenu, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/ProfiledLevelGaugeWidget.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/ProfiledLevelGaugeWidget.kt index 754342f86..dfbf3afd6 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/ProfiledLevelGaugeWidget.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/widget/ProfiledLevelGaugeWidget.kt @@ -8,9 +8,9 @@ import ru.dbotthepony.mc.otm.capability.matter.IMatterStorage import ru.dbotthepony.mc.otm.core.collect.SupplierList import ru.dbotthepony.mc.otm.core.immutableList import ru.dbotthepony.mc.otm.core.math.Decimal -import ru.dbotthepony.mc.otm.core.util.DecimalValueCodec import ru.dbotthepony.mc.otm.menu.MatteryMenu import ru.dbotthepony.mc.otm.menu.MatteryPoweredMenu +import ru.dbotthepony.mc.otm.network.StreamCodecs import java.util.function.IntSupplier class ProfiledLevelGaugeWidget

>(synchronizer: DelegateSyncher, val gauge: LevelGaugeWidget = LevelGaugeWidget(synchronizer)) { @@ -18,19 +18,19 @@ class ProfiledLevelGaugeWidget

>(synchronizer: Del private set val historyReceive = immutableList(AbstractProfiledStorage.HISTORY_SIZE) { - synchronizer.computed({ parent?.historyReceive?.get(it) ?: Decimal.ZERO }, DecimalValueCodec) + synchronizer.computed({ parent?.historyReceive?.get(it) ?: Decimal.ZERO }, StreamCodecs.DECIMAL) } val historyTransfer = immutableList(AbstractProfiledStorage.HISTORY_SIZE) { - synchronizer.computed({ parent?.historyTransfer?.get(it) ?: Decimal.ZERO }, DecimalValueCodec) + synchronizer.computed({ parent?.historyTransfer?.get(it) ?: Decimal.ZERO }, StreamCodecs.DECIMAL) } val directHistoryReceive = SupplierList(historyReceive) val directHistoryTransfer = SupplierList(historyTransfer) val tick by synchronizer.computedInt(IntSupplier { parent?.tick ?: 0 }) - val lastTickReceive by synchronizer.computed({ parent?.lastTickReceive ?: Decimal.ZERO }, DecimalValueCodec) - val lastTickTransfer by synchronizer.computed({ parent?.lastTickTransfer ?: Decimal.ZERO }, DecimalValueCodec) + val lastTickReceive by synchronizer.computed({ parent?.lastTickReceive ?: Decimal.ZERO }, StreamCodecs.DECIMAL) + val lastTickTransfer by synchronizer.computed({ parent?.lastTickTransfer ?: Decimal.ZERO }, StreamCodecs.DECIMAL) constructor(synchronizer: DelegateSyncher, storage: P?, gauge: LevelGaugeWidget = LevelGaugeWidget(synchronizer)) : this(synchronizer, gauge = gauge) { if (storage != null) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/network/BlockEntitySyncPacket.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/network/BlockEntitySyncPacket.kt index 81732437e..6a9aff743 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/network/BlockEntitySyncPacket.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/network/BlockEntitySyncPacket.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.mc.otm.network +import it.unimi.dsi.fastutil.bytes.ByteArrayList import it.unimi.dsi.fastutil.io.FastByteArrayInputStream import it.unimi.dsi.fastutil.objects.Object2ObjectFunction import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap @@ -20,20 +21,20 @@ import ru.dbotthepony.mc.otm.core.collect.reduce import java.util.* import kotlin.collections.ArrayList -class BlockEntitySyncPacket(val position: BlockPos, val buffer: ByteArray, val validBytes: Int) : CustomPacketPayload { +class BlockEntitySyncPacket(val position: BlockPos, val buffer: ByteArrayList) : CustomPacketPayload { fun write(buff: FriendlyByteBuf) { buff.writeBlockPos(position) - buff.writeBytes(buffer, 0, validBytes) + buff.writeByteListUnbounded(buffer) } - private fun execute() { + fun play(context: IPayloadContext) { val level = minecraft.player?.level() if (level == null) { LOGGER.error("Received BlockEntitySyncPacket before we are in valid level.") onceClient { - execute() + play(context) } return @@ -45,7 +46,7 @@ class BlockEntitySyncPacket(val position: BlockPos, val buffer: ByteArray, val v val list = backlog.computeIfAbsent(level) { Object2ObjectOpenHashMap() } .computeIfAbsent(position, Object2ObjectFunction { ArrayList() }) - list.add(buffer.copyOf(validBytes)) + list.add(buffer) LOGGER.warn("Putting BlockEntitySyncPacket received for $position into backlog (size: ${list.iterator().map { it.size }.reduce(0, Int::plus)} bytes) because there is literally no block entity there! This might cause memory leak.") return } else if (blockEntity !is MatteryBlockEntity) { @@ -61,36 +62,28 @@ class BlockEntitySyncPacket(val position: BlockPos, val buffer: ByteArray, val v LOGGER.info("Unfolding ${packets.size} backlog packets for $position (${level.getBlockState(position)}/$blockEntity)") for (packet in packets) { - blockEntity.syncher.read(FastByteArrayInputStream(packet)) + blockEntity.syncher.read(context.player().registryAccess(), packet) } } - blockEntity.syncher.read(FastByteArrayInputStream(buffer, 0, validBytes)) + blockEntity.syncher.read(context.player().registryAccess(), buffer) } catch(err: Throwable) { LOGGER.error("Exception while reading synchronized BlockEntity data!\nPosition: $position\nBlock: ${level.getBlockState(position)}\nBlock entity: $blockEntity", err) } } - fun play(context: IPayloadContext) { - execute() - } - override fun type(): CustomPacketPayload.Type { return TYPE } companion object { - private val backlog = WeakHashMap>>() + private val backlog = WeakHashMap>>() val CODEC: StreamCodec = StreamCodec.ofMember(BlockEntitySyncPacket::write, ::read) val TYPE = CustomPacketPayload.Type(ResourceLocation(OverdriveThatMatters.MOD_ID, "block_entity_data")) fun read(buff: FriendlyByteBuf): BlockEntitySyncPacket { - val position = buff.readBlockPos() - val size = buff.readableBytes() - val array = ByteArray(size) - buff.readBytes(array) - return BlockEntitySyncPacket(position, array, size) + return BlockEntitySyncPacket(buff.readBlockPos(), buff.readByteListUnbounded()) } private val LOGGER = LogManager.getLogger() @@ -103,7 +96,7 @@ class BlockEntitySyncPacket(val position: BlockPos, val buffer: ByteArray, val v LOGGER.info("Unfolding ${packets.size} backlog packets (size: ${packets.iterator().map { it.size }.reduce(0, Int::plus)} bytes) for ${blockEntity.blockPos} (${blockEntity.level!!.getBlockState(blockEntity.blockPos)}/$blockEntity)") for (packet in packets) { - blockEntity.syncher.read(FastByteArrayInputStream(packet)) + blockEntity.syncher.read(blockEntity.level!!.registryAccess(), packet) } } } catch(err: Throwable) {