Skip to content

Commit fa57f62

Browse files
committed
Got Melody Flute, Walkmon, and Calyrex carrot guis working.
1 parent b9057b3 commit fa57f62

29 files changed

Lines changed: 1095 additions & 512 deletions

File tree

common/src/main/java/generations/gg/generations/core/generationscore/common/GenerationsStorage.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ object GenerationsStorage {
88

99
val REGI_ORBS = registry.builder(ItemStorageData.DEFAULT).serialize(ItemStorageData.CODEC).networkSerializer(ItemStorageData.NETWORK_CODEC).buildAndRegister("regi_orbs")
1010
val ITEM_CONTENTS = registry.builder(ItemStorageData.DEFAULT).serialize(ItemStorageData.CODEC).networkSerializer(ItemStorageData.NETWORK_CODEC).withDataComponent().buildAndRegister("inventory")
11-
val IMBUED = registry.builder(ItemStorageData.DEFAULT).serialize(ItemStorageData.CODEC).withDataComponent().buildAndRegister("imbued")
1211

1312
fun init() {
1413
registry.init()

common/src/main/java/generations/gg/generations/core/generationscore/common/client/GenerationsCoreClient.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import generations.gg.generations.core.generationscore.common.world.level.block.
4444
import generations.gg.generations.core.generationscore.common.world.level.block.entities.shrines.*
4545
import generations.gg.generations.core.generationscore.common.world.level.block.entities.shrines.altar.CelestialAltarBlockEntity
4646
import generations.gg.generations.core.generationscore.common.world.level.block.entities.shrines.altar.TimeSpaceAltarBlockEntity
47+
import generations.gg.generations.core.generationscore.common.world.sound.WalkmonSoundManager
4748
import gg.generations.rarecandy.pokeutils.reader.ITextureLoader
4849
import gg.generations.rarecandy.renderer.rendering.RareCandy
4950
import gg.generations.rarecandy.renderer.rendering.RenderStage
@@ -304,7 +305,7 @@ object GenerationsCoreClient {
304305
// MenuRegistry.registerScreenFactory(GenerationsContainers.WALKMON, GenericChestScreen::new);
305306
// MenuRegistry.registerScreenFactory(GenerationsContainers.CALYREX_STEED, GenericChestScreen::new);
306307
// MenuRegistry.registerScreenFactory(GenerationsContainers.MACHINE_BLOCK, ::MachineBlockScreen)
307-
registerScreen(GenerationsContainers.MELODY_FLUTE, ::MelodyFluteScreen)
308+
// registerScreen(GenerationsContainers.MELODY_FLUTE, ::MelodyFluteScreen)
308309
registerScreen(GenerationsContainers.TRASHCAN, ::TrashCanScreen)
309310
registerScreen(GenerationsContainers.RKS_MACHINE, ::RksMachineScreen)
310311
}
@@ -395,6 +396,10 @@ object GenerationsCoreClient {
395396
// GenerationsDataProvider.INSTANCE.canReload = true;
396397
}
397398

399+
fun onTick() {
400+
WalkmonSoundManager.tick()
401+
}
402+
398403
fun renderHighlightedPath(poseStack: PoseStack, renderTick: Int, camera: Camera) {
399404
val player: Player = Minecraft.getInstance().player ?: return
400405

common/src/main/java/generations/gg/generations/core/generationscore/common/client/screen/container/GenericChestScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
66
import net.minecraft.network.chat.Component
77
import net.minecraft.world.entity.player.Inventory
88

9-
class GenericChestScreen(menu: GenericChestContainer<*>, inventory: Inventory, title: Component) : AbstractContainerScreen<GenericChestContainer<*>>(menu, inventory, title) {
9+
class GenericChestScreen(menu: GenericChestContainer, inventory: Inventory, title: Component) : AbstractContainerScreen<GenericChestContainer>(menu, inventory, title) {
1010
init {
1111
imageWidth = menu.guiWidth
1212
imageHeight = menu.guiHeight
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package generations.gg.generations.core.generationscore.common.client.screen.container;
2-
3-
import generations.gg.generations.core.generationscore.common.world.container.MelodyFluteContainer;
4-
import net.minecraft.network.chat.Component;
5-
import net.minecraft.world.entity.player.Inventory;
6-
7-
public class MelodyFluteScreen extends SingleSlotScreen<MelodyFluteContainer> {
8-
public MelodyFluteScreen(MelodyFluteContainer arg, Inventory arg2, Component arg3) {
9-
super(arg, arg2, arg3);
10-
}
11-
}
1+
//package generations.gg.generations.core.generationscore.common.client.screen.container;
2+
//
3+
//import generations.gg.generations.core.generationscore.common.world.container.MelodyFluteContainer;
4+
//import net.minecraft.network.chat.Component;
5+
//import net.minecraft.world.entity.player.Inventory;
6+
//
7+
//public class MelodyFluteScreen extends SingleSlotScreen<MelodyFluteContainer> {
8+
// public MelodyFluteScreen(MelodyFluteContainer arg, Inventory arg2, Component arg3) {
9+
// super(arg, arg2, arg3);
10+
// }
11+
//}
Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,17 @@
11
package generations.gg.generations.core.generationscore.common.network.packets
22

33
import com.cobblemon.mod.common.util.MovingSoundInstance
4+
import generations.gg.generations.core.generationscore.common.world.sound.WalkmonSoundManager
45
import net.minecraft.client.Minecraft
56
import net.minecraft.sounds.SoundSource
67

78
object S2CPlaySoundHandler : com.cobblemon.mod.common.api.net.ClientNetworkPacketHandler<S2CPlaySoundPacket> {
8-
override fun handle(packet: S2CPlaySoundPacket, minecraft: Minecraft) {
9-
if (packet.play) {
10-
minecraft.soundManager.play(
11-
MovingSoundInstance(
12-
packet.soundEvent,
13-
SoundSource.RECORDS,
14-
{ minecraft.player!!.position() },
15-
1.0f,
16-
1.0f,
17-
false,
18-
packet.length,
19-
0
20-
)
21-
)
9+
override fun handle(packet: S2CPlaySoundPacket, client: Minecraft) {
10+
val player = Minecraft.getInstance().player ?: return
11+
if(packet.play) {
12+
WalkmonSoundManager.playSound(player.uuid, packet.soundEvent, packet.length, packet.trackId)
2213
} else {
23-
// Stop playing the sound
24-
Minecraft.getInstance().soundManager.stop(packet.soundEvent.location, SoundSource.RECORDS)
14+
WalkmonSoundManager.stopSound(player.uuid)
2515
}
2616
}
2717
}

common/src/main/java/generations/gg/generations/core/generationscore/common/network/packets/S2CPlaySoundPacket.kt

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,37 @@ package generations.gg.generations.core.generationscore.common.network.packets
22

33
import com.cobblemon.mod.common.api.net.NetworkPacket
44
import generations.gg.generations.core.generationscore.common.GenerationsCore
5-
import net.minecraft.network.FriendlyByteBuf
5+
import net.minecraft.core.Holder
66
import net.minecraft.network.RegistryFriendlyByteBuf
77
import net.minecraft.resources.ResourceLocation
88
import net.minecraft.sounds.SoundEvent
9-
import net.minecraft.world.item.EitherHolder
10-
import net.minecraft.world.item.JukeboxPlayable
11-
import net.minecraft.world.item.JukeboxSong
9+
import net.minecraft.sounds.SoundEvents
1210

13-
class S2CPlaySoundPacket(val soundEvent: SoundEvent, val length: Int, val play: Boolean) : NetworkPacket<S2CPlaySoundPacket> {
14-
override val id: ResourceLocation = ID
15-
constructor(event: SoundEvent) : this(event, 0, false)
11+
class S2CPlaySoundPacket(
12+
val soundEvent: Holder<SoundEvent> = Holder.direct(SoundEvents.EMPTY),
13+
val length: Int = 0,
14+
val play: Boolean = false,
15+
val trackId: Int = 0
16+
) : NetworkPacket<S2CPlaySoundPacket> {
1617

17-
constructor(record: JukeboxSong) : this(record.soundEvent.value(), record.lengthInTicks(), true)
18+
override val id: ResourceLocation = ID
1819

19-
override fun encode(buf: RegistryFriendlyByteBuf) {
20-
SoundEvent.DIRECT_STREAM_CODEC.encode(buf, soundEvent)
21-
buf.writeVarInt(length)
22-
buf.writeBoolean(play)
20+
override fun encode(buffer: RegistryFriendlyByteBuf) {
21+
SoundEvent.STREAM_CODEC.encode(buffer, soundEvent)
22+
buffer.writeVarInt(length)
23+
buffer.writeBoolean(play)
24+
buffer.writeVarInt(trackId)
2325
}
2426

2527
companion object {
26-
var ID: ResourceLocation = GenerationsCore.id("play_sound")
28+
val ID: ResourceLocation = GenerationsCore.id("play_sound")
2729

28-
fun decode(buf: FriendlyByteBuf): S2CPlaySoundPacket {
29-
return S2CPlaySoundPacket(SoundEvent.DIRECT_STREAM_CODEC.decode(buf), buf.readVarInt(), buf.readBoolean())
30+
fun decode(buf: RegistryFriendlyByteBuf): S2CPlaySoundPacket {
31+
val sound = SoundEvent.STREAM_CODEC.decode(buf)
32+
val len = buf.readVarInt()
33+
val play = buf.readBoolean()
34+
val trackId = buf.readVarInt()
35+
return S2CPlaySoundPacket(sound, len, play, trackId)
3036
}
3137
}
3238
}

common/src/main/java/generations/gg/generations/core/generationscore/common/util/Codecs.kt

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ import com.mojang.serialization.MapCodec
1111
import com.mojang.serialization.codecs.RecordCodecBuilder
1212
import generations.gg.generations.core.generationscore.common.world.level.block.generic.GenericModelBlock
1313
import io.netty.buffer.ByteBuf
14+
import net.minecraft.core.NonNullList
1415
import net.minecraft.core.Registry
1516
import net.minecraft.network.codec.StreamCodec
1617
import net.minecraft.resources.ResourceKey
1718
import net.minecraft.resources.ResourceLocation
1819
import net.minecraft.tags.TagKey
20+
import net.minecraft.world.item.ItemStack
1921
import java.lang.reflect.Type
2022
import java.util.*
2123

@@ -47,7 +49,7 @@ object Codecs {
4749

4850
fun <A> Codec<A>.set(): Codec<Set<A>> = listOf().xmap({ it.toSet() }, { it.toList() })
4951

50-
fun <T1, V> codec1(
52+
fun <T1, V> mapCodec1(
5153
name1: String, c1: Codec<T1>, g1: (V) -> T1,
5254
ctor: (T1) -> V
5355
): MapCodec<V> =
@@ -56,7 +58,15 @@ object Codecs {
5658
.apply(it, ctor)
5759
}
5860

59-
fun <T1, T2, V> codec2(
61+
fun <T1, V> codec1(
62+
name1: String, c1: Codec<T1>, g1: (V) -> T1,
63+
ctor: (T1) -> V
64+
): Codec<V> = RecordCodecBuilder.create {
65+
it.group(c1.fieldOf(name1).forGetter(g1))
66+
.apply(it, ctor)
67+
}
68+
69+
fun <T1, T2, V> mapCodec2(
6070
name1: String, c1: Codec<T1>, g1: (V) -> T1,
6171
name2: String, c2: Codec<T2>, g2: (V) -> T2,
6272
ctor: (T1, T2) -> V
@@ -68,13 +78,26 @@ object Codecs {
6878
).apply(it, ctor)
6979
}
7080

81+
fun <T1, T2, V> codec2(
82+
name1: String, c1: Codec<T1>, g1: (V) -> T1,
83+
name2: String, c2: Codec<T2>, g2: (V) -> T2,
84+
ctor: (T1, T2) -> V
85+
): Codec<V> =
86+
RecordCodecBuilder.create {
87+
it.group(
88+
c1.fieldOf(name1).forGetter(g1),
89+
c2.fieldOf(name2).forGetter(g2)
90+
).apply(it, ctor)
91+
}
92+
93+
7194
fun <T1, T2, T3, V> codec3(
7295
name1: String, c1: Codec<T1>, g1: (V) -> T1,
7396
name2: String, c2: Codec<T2>, g2: (V) -> T2,
7497
name3: String, c3: Codec<T3>, g3: (V) -> T3,
7598
ctor: (T1, T2, T3) -> V
76-
): MapCodec<V> =
77-
RecordCodecBuilder.mapCodec {
99+
): Codec<V> =
100+
RecordCodecBuilder.create {
78101
it.group(
79102
c1.fieldOf(name1).forGetter(g1),
80103
c2.fieldOf(name2).forGetter(g2),
@@ -440,4 +463,10 @@ object Codecs {
440463

441464
fun <A> mapCodec(block: RecordCodecBuilder.Instance<A>.() -> App<RecordCodecBuilder.Mu<A>, A>): MapCodec<A> = RecordCodecBuilder.mapCodec(block)
442465
fun <T : GenericModelBlock> modelCodec(): RecordCodecBuilder<T, ResourceLocation> = ResourceLocation.CODEC.fieldOf("model").forGetter { it.getModel()!! }
466+
467+
val ITEM_STACK_LIST_CODEC = ItemStack.OPTIONAL_CODEC.listOf().xmap<NonNullList<ItemStack>>({
468+
val list = NonNullList.withSize(it.size, ItemStack.EMPTY)
469+
list.addAll(it)
470+
return@xmap list
471+
}, { it })
443472
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package generations.gg.generations.core.generationscore.common.world.container
2+
3+
interface CloseableContainer {
4+
fun close()
5+
}

common/src/main/java/generations/gg/generations/core/generationscore/common/world/container/GenerationsContainers.kt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package generations.gg.generations.core.generationscore.common.world.container
22

33
import generations.gg.generations.core.generationscore.common.GenerationsCore
4+
import generations.gg.generations.core.generationscore.common.client.render.rarecandy.instanceOrNull
45
import generations.gg.generations.core.generationscore.common.util.PlatformRegistry
56
import net.minecraft.core.Holder
67
import net.minecraft.core.registries.BuiltInRegistries
@@ -16,8 +17,6 @@ object GenerationsContainers: PlatformRegistry<MenuType<*>>(Registries.MENU, Bui
1617

1718
@JvmField
1819
val COOKING_POT = register("cooking_pot", ::CookingPotContainer)
19-
// val MACHINE_BLOCK = register("machine_block", ::MachineBlockContainer, MachineBlockEntity::class.java)
20-
val MELODY_FLUTE = register("melody_flute", ::MelodyFluteContainer)
2120
val TRASHCAN = register("trashcan", ::TrashCanContainer)
2221
val RKS_MACHINE = register("rks_machine", ::RksMachineContainer)
2322
val GENERIC = registerExtended("generic", GenericChestContainer.Companion::fromBuffer)
@@ -35,16 +34,9 @@ object GenerationsContainers: PlatformRegistry<MenuType<*>>(Registries.MENU, Bui
3534
// })
3635
}
3736

38-
private fun onContainerClose(player: Player, container: AbstractContainerMenu) {
39-
// if(container instanceof GenericChestContainer genericChestContainer) {
40-
// genericChestContainer.getContainer().update();
41-
// }
42-
43-
// if (container instanceof WalkmonContainer genericChestContainer) genericChestContainer.save(player);
44-
// if (container instanceof CalyrexSteedContainer genericChestContainer) genericChestContainer.save(player);
45-
46-
// if (container is RksMachineContainer) container.close()
47-
}
37+
// private fun onContainerClose(player: Player, container: AbstractContainerMenu) {
38+
// container.instanceOrNull<GenericChestContainer>()?.close()
39+
// }
4840

4941
fun <T: AbstractContainerMenu> register(name: String, constructor: (Int, Inventory) -> T): Holder<MenuType<T>> = create<MenuType<T>>(name) { MenuType(constructor::invoke, FeatureFlags.VANILLA_SET) }
5042

0 commit comments

Comments
 (0)