Skip to content

Commit

Permalink
more sound block work
Browse files Browse the repository at this point in the history
  • Loading branch information
ttttdoy committed Aug 30, 2024
1 parent 36e38b1 commit d5db20f
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 6 deletions.
9 changes: 8 additions & 1 deletion src/main/kotlin/breadmod/block/SoundBlock.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,22 @@ import net.minecraft.world.level.Level
import net.minecraft.world.level.block.BaseEntityBlock
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.RenderShape
import net.minecraft.world.level.block.SoundType
import net.minecraft.world.level.block.entity.BlockEntity
import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.block.state.StateDefinition
import net.minecraft.world.level.block.state.properties.BlockStateProperties
import net.minecraft.world.level.material.MapColor
import net.minecraft.world.phys.BlockHitResult
import net.minecraftforge.network.NetworkHooks
import net.minecraftforge.registries.ForgeRegistries

class SoundBlock: BaseEntityBlock(Properties.of()) {
class SoundBlock: BaseEntityBlock(Properties.of()
.strength(4f, 6f)
.mapColor(MapColor.COLOR_GRAY)
.requiresCorrectToolForDrops()
.sound(SoundType.METAL)
) {
override fun newBlockEntity(pPos: BlockPos, pState: BlockState): BlockEntity =
SoundBlockEntity(pPos, pState)

Expand Down
2 changes: 1 addition & 1 deletion src/main/kotlin/breadmod/block/entity/SoundBlockEntity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class SoundBlockEntity(
ForgeCapabilities.ITEM_HANDLER to (
IndexableItemHandler(
listOf(
1 to StorageDirection.STORE_ONLY
1 to StorageDirection.BIDIRECTIONAL
)
) to ACCEPT_ALL
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package breadmod.client.screen.sound_block

import breadmod.menu.block.SoundBlockMenu
import breadmod.network.serverbound.SoundBlockPacket
import breadmod.util.gui.SerializedScreen
import breadmod.util.gui.widget.ContainerWidget
import breadmod.util.gui.widget.InventoryWidget
import breadmod.util.gui.widget.ItemContainerWidget
import breadmod.util.gui.widget.SlotWidget
import breadmod.util.gui.widget.TextWidget
import breadmod.util.render.rgMinecraft
import com.mojang.blaze3d.platform.InputConstants
import net.minecraft.client.gui.GuiGraphics
import net.minecraft.client.gui.components.Button
import net.minecraft.network.chat.Component
import net.minecraft.sounds.SoundEvents
import net.minecraft.world.entity.player.Inventory
import java.awt.Color

Expand Down Expand Up @@ -54,6 +59,25 @@ internal class SoundBlockSerializedScreen(
).addWidget(
InventoryWidget(8, 88, pInventory, pMenu),
0.0
).addWidget(
ItemContainerWidget(0, 0, 16, 16, pMenu.slots[36].container, menu).also {
it.x = 10
it.y = 10
it.addWidget(SlotWidget(0, 0, it, 36), 0.0)
}, 0.0
).addWidget(
TestButton(0, 0, 20, 10) {
println("clicked!")
SoundBlockPacket(menu.parent.blockPos, SoundEvents.SHIELD_BLOCK.location.path)
}, 0.0
)
}

private class TestButton(
pX: Int,
pY: Int,
pWidth: Int,
pHeight: Int,
pOnPress: OnPress
): Button(pX, pY, pWidth, pHeight, Component.empty(), pOnPress, null)
}
7 changes: 4 additions & 3 deletions src/main/kotlin/breadmod/menu/block/SoundBlockMenu.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import net.minecraft.network.FriendlyByteBuf
import net.minecraft.world.entity.player.Inventory
import net.minecraft.world.entity.player.Player
import net.minecraft.world.inventory.ContainerLevelAccess
import net.minecraft.world.inventory.Slot
import net.minecraftforge.common.capabilities.ForgeCapabilities
import net.minecraftforge.items.SlotItemHandler

class SoundBlockMenu(
pContainerId: Int,
Expand All @@ -20,15 +20,16 @@ class SoundBlockMenu(
ModMenuTypes.SOUND_BLOCK.get(),
pContainerId
) {
val handler = parent.capabilityHolder.capabilityOrNull<IndexableItemHandler>(ForgeCapabilities.ITEM_HANDLER)

constructor(pContainerId: Int, inventory: Inventory, byteBuf: FriendlyByteBuf): this(
pContainerId, inventory,
inventory.player.level().getBlockEntity(byteBuf.readBlockPos(), ModBlockEntityTypes.SOUND_BLOCK.get()).get()
)

init {
val cap = parent.capabilityHolder.capabilityOrNull<IndexableItemHandler>(ForgeCapabilities.ITEM_HANDLER)
addInventorySlots(pInventory, 8, 142, 84)
addSlot(Slot(TODO(), 1, 0, 0))
addSlot(SlotItemHandler(handler, 0, 0, 0))
}

override fun stillValid(pPlayer: Player): Boolean = stillValid(
Expand Down
5 changes: 5 additions & 0 deletions src/main/kotlin/breadmod/network/PacketHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import breadmod.network.clientbound.CapabilitySideDataPacket
import breadmod.network.clientbound.CapabilityTagDataPacket
import breadmod.network.clientbound.tool_gun.ToolGunModeDataPacket
import breadmod.network.common.tool_gun.creator.ToolGunCreatorDataRequestPacket
import breadmod.network.serverbound.SoundBlockPacket
import breadmod.network.serverbound.ToggleMachinePacket
import breadmod.network.serverbound.VoidTankPacket
import breadmod.network.serverbound.tool_gun.ToolGunConfigurationPacket
Expand Down Expand Up @@ -62,6 +63,10 @@ internal object PacketHandler {
1_003, ToggleMachinePacket::class.java,
ToggleMachinePacket::encodeBuf, ToggleMachinePacket::decodeBuf, ToggleMachinePacket::handle
)
NETWORK.registerMessage(
1_004, SoundBlockPacket::class.java,
SoundBlockPacket::encodeBuf, SoundBlockPacket::decodeBuf, SoundBlockPacket::handle
)
NETWORK.registerMessage(
3_001,
ToolGunConfigurationPacket::class.java,
Expand Down
37 changes: 36 additions & 1 deletion src/main/kotlin/breadmod/network/serverbound/SoundBlockPacket.kt
Original file line number Diff line number Diff line change
@@ -1,4 +1,39 @@
package breadmod.network.serverbound

object SoundBlockPacket {
import breadmod.block.entity.SoundBlockEntity
import net.minecraft.core.BlockPos
import net.minecraft.core.SectionPos
import net.minecraft.network.FriendlyByteBuf
import net.minecraftforge.network.NetworkEvent
import java.util.function.Supplier

internal data class SoundBlockPacket(
val pPos: BlockPos,
val pString: String
) {
companion object {
fun encodeBuf(input: SoundBlockPacket, buffer: FriendlyByteBuf) {
buffer.writeBlockPos(input.pPos).writeUtf(input.pString)
}

fun decodeBuf(input: FriendlyByteBuf): SoundBlockPacket =
SoundBlockPacket(input.readBlockPos(), input.readUtf())

fun handle(input: SoundBlockPacket, ctx: Supplier<NetworkEvent.Context>) = ctx.get().let {
it.enqueueWork {
it.sender?.let { player ->
val level = player.level()

val chunkX = SectionPos.blockToSectionCoord(input.pPos.x)
val chunkZ = SectionPos.blockToSectionCoord(input.pPos.z)

if (level.hasChunk(chunkX, chunkZ)) {
(level.getBlockEntity(input.pPos) as? SoundBlockEntity)?.let { entity ->
entity.currentSound = input.pString
}
}
}
}
}
}
}

0 comments on commit d5db20f

Please sign in to comment.