@@ -13,12 +13,17 @@ import hiiragi283.ragium.api.machine.block.HTMachineBlock
13
13
import hiiragi283.ragium.api.machine.block.HTMachineBlockEntityBase
14
14
import hiiragi283.ragium.client.extension.getBlockEntity
15
15
import hiiragi283.ragium.client.extension.registerClientReceiver
16
- import hiiragi283.ragium.client.gui.*
16
+ import hiiragi283.ragium.client.extension.world
17
+ import hiiragi283.ragium.client.gui.HTFluidFilterScreen
18
+ import hiiragi283.ragium.client.gui.HTItemFilterScreen
19
+ import hiiragi283.ragium.client.gui.machine.*
17
20
import hiiragi283.ragium.client.model.HTFluidCubeModel
18
21
import hiiragi283.ragium.client.model.HTProcessorMachineModel
19
22
import hiiragi283.ragium.client.renderer.*
20
23
import hiiragi283.ragium.common.RagiumContents
24
+ import hiiragi283.ragium.common.block.storage.HTCrateBlockEntity
21
25
import hiiragi283.ragium.common.init.*
26
+ import hiiragi283.ragium.common.network.HTCratePreviewPayload
22
27
import hiiragi283.ragium.common.network.HTFloatingItemPayload
23
28
import hiiragi283.ragium.common.network.HTFluidSyncPayload
24
29
import hiiragi283.ragium.common.network.HTInventoryPayload
@@ -36,32 +41,44 @@ import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry
36
41
import net.fabricmc.fabric.api.client.render.fluid.v1.SimpleFluidRenderHandler
37
42
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry
38
43
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry
44
+ import net.fabricmc.fabric.api.event.player.UseItemCallback
39
45
import net.fabricmc.fabric.api.transfer.v1.context.ContainerItemContext
40
46
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant
47
+ import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant
41
48
import net.minecraft.block.Block
42
49
import net.minecraft.block.BlockState
43
50
import net.minecraft.block.entity.BlockEntityType
51
+ import net.minecraft.client.MinecraftClient
44
52
import net.minecraft.client.gui.screen.Screen
45
53
import net.minecraft.client.gui.screen.ingame.HandledScreens
54
+ import net.minecraft.client.network.ClientPlayerEntity
46
55
import net.minecraft.client.render.RenderLayer
47
56
import net.minecraft.client.render.block.entity.BlockEntityRendererFactories
48
57
import net.minecraft.client.render.entity.FlyingItemEntityRenderer
49
58
import net.minecraft.client.render.model.ModelRotation
50
59
import net.minecraft.client.render.model.UnbakedModel
51
60
import net.minecraft.client.render.model.json.ModelVariant
52
61
import net.minecraft.client.render.model.json.WeightedUnbakedModel
62
+ import net.minecraft.entity.player.PlayerEntity
53
63
import net.minecraft.inventory.Inventory
54
64
import net.minecraft.item.Item
55
65
import net.minecraft.item.ItemStack
56
66
import net.minecraft.item.tooltip.TooltipType
67
+ import net.minecraft.particle.ParticleType
68
+ import net.minecraft.particle.SimpleParticleType
57
69
import net.minecraft.registry.Registries
70
+ import net.minecraft.registry.entry.RegistryEntry
71
+ import net.minecraft.sound.SoundEvent
58
72
import net.minecraft.state.property.Properties
59
73
import net.minecraft.text.Text
60
74
import net.minecraft.util.Formatting
75
+ import net.minecraft.util.Hand
61
76
import net.minecraft.util.Identifier
77
+ import net.minecraft.util.TypedActionResult
62
78
import net.minecraft.util.math.BlockPos
63
79
import net.minecraft.util.math.Direction
64
80
import net.minecraft.world.BlockRenderView
81
+ import net.minecraft.world.World
65
82
import team.reborn.energy.api.EnergyStorage
66
83
67
84
@Environment(EnvType .CLIENT )
@@ -89,13 +106,19 @@ object RagiumClient : ClientModInitializer {
89
106
addAll(RagiumContents .Hulls .entries)
90
107
addAll(RagiumContents .Exporters .entries)
91
108
addAll(RagiumContents .Pipes .entries)
109
+ addAll(RagiumContents .CrossPipes .entries)
110
+ addAll(RagiumContents .PipeStations .entries)
111
+ addAll(RagiumContents .FilteringPipe .entries)
112
+ addAll(RagiumContents .Crates .entries)
92
113
}.map(HTContent <Block >::value).forEach(::registerCutoutMipped)
93
114
94
115
RagiumAPI
95
116
.getInstance()
96
117
.machineRegistry.blocks
97
118
.forEach(::registerCutoutMipped)
98
119
120
+ registerCutoutMipped(RagiumBlocks .CREATIVE_CRATE )
121
+ registerCutoutMipped(RagiumBlocks .CREATIVE_EXPORTER )
99
122
registerCutoutMipped(RagiumBlocks .CROSS_WHITE_LINE )
100
123
registerCutoutMipped(RagiumBlocks .ITEM_DISPLAY )
101
124
registerCutoutMipped(RagiumBlocks .POROUS_NETHERRACK )
@@ -105,6 +128,8 @@ object RagiumClient : ClientModInitializer {
105
128
registerCutoutMipped(RagiumBlocks .WHITE_LINE )
106
129
// block entity renderer
107
130
BlockEntityRendererFactories .register(RagiumBlockEntityTypes .BEDROCK_MINER ) { HTBedrockMinerBlockEntityRenderer }
131
+ BlockEntityRendererFactories .register(RagiumBlockEntityTypes .CRATE , ::HTCrateBlockEntityRenderer )
132
+ BlockEntityRendererFactories .register(RagiumBlockEntityTypes .CREATIVE_CRATE ) { HTCreativeCrateBlockEntityRenderer }
108
133
BlockEntityRendererFactories .register(RagiumBlockEntityTypes .MANUAL_FORGE ) { HTManualForgeBlockEntityRenderer }
109
134
BlockEntityRendererFactories .register(RagiumBlockEntityTypes .ITEM_DISPLAY ) { HTItemDisplayBlockEntityRenderer }
110
135
BlockEntityRendererFactories .register(RagiumBlockEntityTypes .LARGE_PROCESSOR ) { HTLargeProcessorBlockEntityRenderer }
@@ -182,6 +207,29 @@ object RagiumClient : ClientModInitializer {
182
207
183
208
@JvmStatic
184
209
private fun registerEvents () {
210
+ UseItemCallback .EVENT .register { player: PlayerEntity , world: World , hand: Hand ->
211
+ val stack: ItemStack = player.getStackInHand(hand)
212
+ if (world.isClient) {
213
+ if (HTItemFilterScreen .openScreen(stack, world)) {
214
+ return @register TypedActionResult .success(stack, true )
215
+ }
216
+ if (HTFluidFilterScreen .openScreen(stack, world)) {
217
+ return @register TypedActionResult .success(stack, true )
218
+ }
219
+ }
220
+ TypedActionResult .pass(stack)
221
+ }
222
+
223
+ ItemTooltipCallback .EVENT .register {
224
+ stack: ItemStack ,
225
+ context: Item .TooltipContext ,
226
+ tooltipType: TooltipType ,
227
+ lines: MutableList <Text >,
228
+ ->
229
+ stack.get(RagiumComponentTypes .ITEM_FILTER )?.let (RagiumTexts ::itemFilter)?.let (lines::add)
230
+ stack.get(RagiumComponentTypes .FLUID_FILTER )?.let (RagiumTexts ::fluidFilter)?.let (lines::add)
231
+ }
232
+
185
233
ModelLoadingPlugin .register { context: ModelLoadingPlugin .Context ->
186
234
// register block state resolver
187
235
RagiumAPI .getInstance().machineRegistry.entryMap.forEach { (_: HTMachineKey , entry: HTMachineRegistry .Entry ) ->
@@ -276,8 +324,32 @@ object RagiumClient : ClientModInitializer {
276
324
277
325
@JvmStatic
278
326
private fun registerNetworks () {
327
+ RagiumNetworks .CRATE_PREVIEW .registerClientReceiver { payload: HTCratePreviewPayload , context: ClientPlayNetworking .Context ->
328
+ val (pos: BlockPos , variant: ItemVariant , amount: Long ) = payload
329
+ (context.getBlockEntity(pos) as ? HTCrateBlockEntity )?.itemStorage?.apply {
330
+ this .variant = variant
331
+ this .amount = amount
332
+ }
333
+ }
334
+
279
335
RagiumNetworks .FLOATING_ITEM .registerClientReceiver { payload: HTFloatingItemPayload , context: ClientPlayNetworking .Context ->
280
- context.client().gameRenderer.showFloatingItem(payload.stack)
336
+ val (stack: ItemStack , particle: RegistryEntry <ParticleType <* >>, soundEvent: RegistryEntry <SoundEvent >) = payload
337
+ val client: MinecraftClient = context.client()
338
+ val player: ClientPlayerEntity = context.player()
339
+ (particle.value() as ? SimpleParticleType )?.let { type: SimpleParticleType ->
340
+ client.particleManager.addEmitter(player, type, 30 )
341
+ }
342
+ context.world?.playSound(
343
+ player.x,
344
+ player.y,
345
+ player.z,
346
+ soundEvent.value(),
347
+ player.soundCategory,
348
+ 1.0F ,
349
+ 1.0F ,
350
+ false ,
351
+ )
352
+ client.gameRenderer.showFloatingItem(stack)
281
353
}
282
354
283
355
RagiumNetworks .FLUID_SYNC .registerClientReceiver { payload: HTFluidSyncPayload , context: ClientPlayNetworking .Context ->
0 commit comments