Skip to content

Commit f7164e2

Browse files
authored
Merge pull request #4 from Hiiragi283/active_machine
Release v0.9.0
2 parents 7cca757 + 67cf748 commit f7164e2

File tree

464 files changed

+5069
-4587
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

464 files changed

+5069
-4587
lines changed

build.gradle.kts

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
22
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
3+
import java.net.URI
34

45
plugins {
56
kotlin("jvm") version libs.versions.kotlin
@@ -8,7 +9,7 @@ plugins {
89
}
910

1011
group = "hiiragi283.ragium"
11-
version = "0.8.0+121x"
12+
version = "0.9.0+121x"
1213

1314
sourceSets {
1415
main {
@@ -35,14 +36,21 @@ repositories {
3536
maven(url = "https://dl.cloudsmith.io/public/klikli-dev/mods/maven/") // Modonomicon
3637
maven(url = "https://maven.modmuss50.me/")
3738
maven(url = "https://maven.blamejared.com") // Patchouli
39+
maven {
40+
url = URI("https://maven.pkg.github.com/refinedmods/refinedstorage2")
41+
credentials {
42+
username = "anything"
43+
password = "\u0067hp_oGjcDFCn8jeTzIj4Ke9pLoEVtpnZMP4VQgaX"
44+
}
45+
} // RS2
3846
}
3947

4048
fabricApi {
4149
configureDataGeneration()
4250
}
4351

4452
loom {
45-
// accessWidenerPath = file("src/main/resources/ht_materials.accesswidener")
53+
accessWidenerPath = file("src/main/resources/ragium.accesswidener")
4654
splitEnvironmentSourceSets()
4755
mods {
4856
create("ragium") {

gradle/libs.versions.toml

+4-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ fabric-kotlin = "1.12.+"
1010
energy = "4.1.0"
1111
jade = "15.8.2+fabric"
1212
mod-menu = "11.0.3"
13+
refined-storage = "2.0.0-milestone.4.9"
1314
rei = "16.0.788"
1415

1516
[libraries]
@@ -21,13 +22,15 @@ fabric-kotlin = { group = "net.fabricmc", name = "fabric-language-kotlin", versi
2122
energy = { group = "teamreborn", name = "energy", version.ref = "energy" }
2223
jade = { group = "maven.modrinth", name = "jade", version.ref = "jade" }
2324
mod-modmenu = { group = "com.terraformersmc", name = "modmenu", version.ref = "mod-menu" }
25+
rs-fabric = { group = "com.refinedmods.refinedstorage", name = "refinedstorage-fabric", version.ref = "refined-storage" }
2426
rei = { group = "me.shedaniel", name = "RoughlyEnoughItems-fabric", version.ref = "rei" }
2527

2628
[bundles]
2729
mods-fabric = [
2830
"fabric-api",
2931
"fabric-kotlin",
30-
"fabric-loader"
32+
"fabric-loader",
33+
"rs-fabric"
3134
]
3235
mods-include = [
3336
"energy"

src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt

+88-6
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@ package hiiragi283.ragium.client
22

33
import hiiragi283.ragium.api.RagiumAPI
44
import hiiragi283.ragium.api.content.HTContent
5+
import hiiragi283.ragium.api.extension.energyPercent
56
import hiiragi283.ragium.api.extension.getOrNull
7+
import hiiragi283.ragium.api.extension.longText
8+
import hiiragi283.ragium.api.machine.HTMachineKey
69
import hiiragi283.ragium.api.machine.HTMachinePacket
10+
import hiiragi283.ragium.api.machine.HTMachineRegistry
11+
import hiiragi283.ragium.api.machine.block.HTMachineBlock
712
import hiiragi283.ragium.api.machine.block.HTMachineBlockEntityBase
13+
import hiiragi283.ragium.api.machine.property.HTMachinePropertyKeys
814
import hiiragi283.ragium.client.extension.getBlockEntity
915
import hiiragi283.ragium.client.extension.registerClientReceiver
1016
import hiiragi283.ragium.client.gui.*
@@ -21,13 +27,16 @@ import net.fabricmc.api.EnvType
2127
import net.fabricmc.api.Environment
2228
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap
2329
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback
30+
import net.fabricmc.fabric.api.client.model.loading.v1.BlockStateResolver
2431
import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin
2532
import net.fabricmc.fabric.api.client.model.loading.v1.ModelModifier
33+
import net.fabricmc.fabric.api.client.model.loading.v1.ModelResolver
2634
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
2735
import net.fabricmc.fabric.api.client.render.fluid.v1.FluidRenderHandlerRegistry
2836
import net.fabricmc.fabric.api.client.render.fluid.v1.SimpleFluidRenderHandler
2937
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry
3038
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry
39+
import net.fabricmc.fabric.api.transfer.v1.context.ContainerItemContext
3140
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant
3241
import net.minecraft.block.Block
3342
import net.minecraft.block.BlockState
@@ -37,15 +46,23 @@ import net.minecraft.client.gui.screen.ingame.HandledScreens
3746
import net.minecraft.client.render.RenderLayer
3847
import net.minecraft.client.render.block.entity.BlockEntityRendererFactories
3948
import net.minecraft.client.render.entity.FlyingItemEntityRenderer
49+
import net.minecraft.client.render.model.ModelRotation
4050
import net.minecraft.client.render.model.UnbakedModel
51+
import net.minecraft.client.render.model.json.ModelVariant
52+
import net.minecraft.client.render.model.json.WeightedUnbakedModel
4153
import net.minecraft.inventory.Inventory
4254
import net.minecraft.item.Item
4355
import net.minecraft.item.ItemStack
4456
import net.minecraft.item.tooltip.TooltipType
57+
import net.minecraft.registry.Registries
58+
import net.minecraft.state.property.Properties
4559
import net.minecraft.text.Text
60+
import net.minecraft.util.Formatting
4661
import net.minecraft.util.Identifier
4762
import net.minecraft.util.math.BlockPos
63+
import net.minecraft.util.math.Direction
4864
import net.minecraft.world.BlockRenderView
65+
import team.reborn.energy.api.EnergyStorage
4966

5067
@Environment(EnvType.CLIENT)
5168
object RagiumClient : ClientModInitializer {
@@ -58,7 +75,7 @@ object RagiumClient : ClientModInitializer {
5875
registerEvents()
5976
registerNetworks()
6077

61-
RagiumAPI.log { info("Ragium-Client initialized!") }
78+
RagiumAPI.LOGGER.info("Ragium-Client initialized!")
6279
}
6380

6481
// Blocks //
@@ -82,11 +99,11 @@ object RagiumClient : ClientModInitializer {
8299
registerCutoutMipped(RagiumBlocks.ITEM_DISPLAY)
83100
registerCutoutMipped(RagiumBlocks.POROUS_NETHERRACK)
84101
// block entity renderer
102+
BlockEntityRendererFactories.register(RagiumBlockEntityTypes.BEDROCK_MINER) { HTBedrockMinerBlockEntityRenderer }
85103
BlockEntityRendererFactories.register(RagiumBlockEntityTypes.MANUAL_FORGE) { HTManualForgeBlockEntityRenderer }
86104
BlockEntityRendererFactories.register(RagiumBlockEntityTypes.ITEM_DISPLAY) { HTItemDisplayBlockEntityRenderer }
87105
BlockEntityRendererFactories.register(RagiumBlockEntityTypes.LARGE_PROCESSOR) { HTLargeProcessorBlockEntityRenderer }
88106

89-
registerMachineRenderer(RagiumBlockEntityTypes.BEDROCK_MINER)
90107
registerMachineRenderer(RagiumBlockEntityTypes.BLAST_FURNACE)
91108
registerMachineRenderer(RagiumBlockEntityTypes.DISTILLATION_TOWER)
92109
registerMachineRenderer(RagiumBlockEntityTypes.FLUID_DRILL)
@@ -150,21 +167,73 @@ object RagiumClient : ClientModInitializer {
150167
@JvmStatic
151168
private fun registerScreens() {
152169
HandledScreens.register(RagiumScreenHandlerTypes.CHEMICAL_MACHINE, ::HTChemicalMachineScreen)
153-
HandledScreens.register(RagiumScreenHandlerTypes.FLUID_DRILL, ::HTFluidDrillScreen)
170+
HandledScreens.register(RagiumScreenHandlerTypes.DISTILLATION_TOWER, ::HTDistillationTowerScreen)
154171
HandledScreens.register(RagiumScreenHandlerTypes.LARGE_MACHINE, ::HTLargeMachineScreen)
155172
HandledScreens.register(RagiumScreenHandlerTypes.SIMPLE_MACHINE, ::HTSimpleMachineScreen)
156-
HandledScreens.register(RagiumScreenHandlerTypes.STEAM, ::HTSteamGeneratorScreen)
173+
HandledScreens.register(RagiumScreenHandlerTypes.SMALL_MACHINE, ::HTSmallMachineScreen)
157174
}
158175

159176
// Events //
160177

161178
@JvmStatic
162179
private fun registerEvents() {
163180
ModelLoadingPlugin.register { context: ModelLoadingPlugin.Context ->
181+
// register block state resolver
182+
RagiumAPI.getInstance().machineRegistry.entryMap.forEach { (_: HTMachineKey, entry: HTMachineRegistry.Entry) ->
183+
entry.blocks.forEach { block: HTMachineBlock ->
184+
context.registerBlockStateResolver(block) { context: BlockStateResolver.Context ->
185+
Properties.HORIZONTAL_FACING.values.forEach { direction: Direction ->
186+
RagiumBlockProperties.ACTIVE.values.forEach { isActive: Boolean ->
187+
val state: BlockState = block.defaultState
188+
.with(Properties.HORIZONTAL_FACING, direction)
189+
.with(RagiumBlockProperties.ACTIVE, isActive)
190+
val modelId: Identifier = when (isActive) {
191+
true -> HTMachinePropertyKeys.ACTIVE_MODEL_ID
192+
false -> HTMachinePropertyKeys.MODEL_ID
193+
}.let(entry::getOrDefault)
194+
val variant = ModelVariant(
195+
modelId,
196+
ModelRotation
197+
.get(
198+
0,
199+
when (direction) {
200+
Direction.SOUTH -> 180
201+
Direction.WEST -> 270
202+
Direction.EAST -> 90
203+
else -> 0
204+
},
205+
).rotation,
206+
false,
207+
1,
208+
)
209+
val model = WeightedUnbakedModel(listOf(variant))
210+
context.setModel(state, model)
211+
}
212+
}
213+
}
214+
}
215+
}
164216
// register item model resolver
217+
context.resolveModel().register { context1: ModelResolver.Context ->
218+
val id: Identifier = context1.id() ?: return@register null
219+
if (id.namespace != RagiumAPI.MOD_ID) return@register null
220+
val item: Item = Registries.ITEM.get(id.withPath { it.removePrefix("item/") })
221+
item.components
222+
.get(HTMachineKey.COMPONENT_TYPE)
223+
?.let(HTMachineKey::entry)
224+
?.getOrDefault(HTMachinePropertyKeys.MODEL_ID)
225+
?.let { modelId: Identifier ->
226+
when (modelId) {
227+
RagiumAPI.id("block/dynamic_processor") -> HTProcessorMachineModel.INACTIVE
228+
RagiumAPI.id("block/active_dynamic_processor") -> HTProcessorMachineModel.ACTIVE
229+
else -> context1.getOrLoadModel(modelId)
230+
}
231+
}
232+
}
165233
context.modifyModelOnLoad().register onLoad@{ original: UnbakedModel, _: ModelModifier.OnLoad.Context ->
166234
when {
167-
RagiumAPI.id("block/dynamic_processor") in original.modelDependencies -> HTProcessorMachineModel
235+
RagiumAPI.id("block/dynamic_processor") in original.modelDependencies -> HTProcessorMachineModel.INACTIVE
236+
RagiumAPI.id("block/active_dynamic_processor") in original.modelDependencies -> HTProcessorMachineModel.ACTIVE
168237
RagiumAPI.id("item/fluid_cube") in original.modelDependencies -> HTFluidCubeModel
169238
else -> original
170239
}
@@ -173,11 +242,24 @@ object RagiumClient : ClientModInitializer {
173242
RagiumAPI.id("block/generator"),
174243
RagiumAPI.id("block/solar_generator"),
175244
)
245+
RagiumAPI.LOGGER.info("Loaded runtime models!")
176246
}
177247
ItemTooltipCallback.EVENT.register(
178248
RagiumAPI.id("description"),
179249
) { stack: ItemStack, _: Item.TooltipContext, _: TooltipType, tooltips: MutableList<Text> ->
180-
stack.get(RagiumComponentTypes.DESCRIPTION)?.let(tooltips::add)
250+
val texts: List<Text> = stack.get(RagiumComponentTypes.DESCRIPTION)
251+
?: ContainerItemContext.withConstant(stack).find(EnergyStorage.ITEM)?.let { storage: EnergyStorage ->
252+
listOf(
253+
Text.literal("- Stored Energy: ${longText(storage.amount).string} E (${storage.energyPercent} %)"),
254+
)
255+
}
256+
?: listOf()
257+
if (texts.isEmpty()) return@register
258+
if (Screen.hasControlDown()) {
259+
texts.map(Text::copy).map { it.formatted(Formatting.AQUA) }.forEach(tooltips::add)
260+
} else {
261+
tooltips.add(Text.translatable(RagiumTranslationKeys.PRESS_CTRL).formatted(Formatting.YELLOW))
262+
}
181263
}
182264
}
183265

src/client/kotlin/hiiragi283/ragium/client/extension/RagiumRenderExtensions.kt

+25
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import net.minecraft.block.Block
1010
import net.minecraft.client.MinecraftClient
1111
import net.minecraft.client.render.OverlayTexture
1212
import net.minecraft.client.render.VertexConsumerProvider
13+
import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer
1314
import net.minecraft.client.render.model.BakedModel
1415
import net.minecraft.client.render.model.BakedModelManager
1516
import net.minecraft.client.render.model.json.JsonUnbakedModel
@@ -22,6 +23,7 @@ import net.minecraft.fluid.Fluid
2223
import net.minecraft.item.ItemStack
2324
import net.minecraft.registry.Registries
2425
import net.minecraft.resource.Resource
26+
import net.minecraft.util.DyeColor
2527
import net.minecraft.util.Identifier
2628
import net.minecraft.util.math.Direction
2729
import net.minecraft.util.math.RotationAxis
@@ -97,6 +99,29 @@ fun <T : HTMultiblockController> renderMultiblock(
9799
}
98100
}
99101

102+
fun renderBeam(
103+
matrices: MatrixStack,
104+
vertexConsumers: VertexConsumerProvider,
105+
tickDelta: Float,
106+
world: World,
107+
color: DyeColor = DyeColor.WHITE,
108+
textureId: Identifier = Identifier.ofVanilla("textures/entity/beacon_beam.png"),
109+
) {
110+
BeaconBlockEntityRenderer.renderBeam(
111+
matrices,
112+
vertexConsumers,
113+
textureId,
114+
tickDelta,
115+
1f,
116+
world.time,
117+
-2,
118+
2,
119+
color.entityColor,
120+
0.2f,
121+
0.25f,
122+
)
123+
}
124+
100125
// Fluid //
101126

102127
fun Fluid.getSpriteAndColor(): Pair<Sprite, Int>? {

src/client/kotlin/hiiragi283/ragium/client/gui/HTChemicalMachineScreen.kt

+2-23
Original file line numberDiff line numberDiff line change
@@ -9,28 +9,20 @@ import net.minecraft.client.gui.DrawContext
99
import net.minecraft.entity.player.PlayerInventory
1010
import net.minecraft.text.Text
1111
import net.minecraft.util.Identifier
12-
import net.minecraft.util.math.MathHelper
1312

1413
@Environment(EnvType.CLIENT)
1514
class HTChemicalMachineScreen(handler: HTChemicalMachineScreenHandler, inventory: PlayerInventory, title: Text) :
1615
HTMachineScreenBase<HTChemicalMachineScreenHandler>(handler, inventory, title) {
17-
companion object {
18-
@JvmField
19-
val TEXTURE: Identifier = RagiumAPI.id("textures/gui/chemical_machine.png")
20-
}
21-
16+
override val texture: Identifier = RagiumAPI.id("textures/gui/chemical_machine.png")
2217
override val fluidCache: Array<FluidVariant> = Array(4) { FluidVariant.blank() }
2318
override val amountCache: LongArray = LongArray(4) { 0 }
2419

2520
override fun drawMouseoverTooltip(context: DrawContext, x: Int, y: Int) {
2621
super.drawMouseoverTooltip(context, x, y)
27-
2822
drawFluidTooltip(context, fluidCache[0], amountCache[0], 2, 2, x, y)
2923
drawFluidTooltip(context, fluidCache[1], amountCache[1], 3, 2, x, y)
3024
drawFluidTooltip(context, fluidCache[2], amountCache[2], 5, 2, x, y)
3125
drawFluidTooltip(context, fluidCache[3], amountCache[3], 6, 2, x, y)
32-
33-
drawEnergyTooltip(context, handler.player.world.registryKey, 4, 1, x, y)
3426
}
3527

3628
override fun drawBackground(
@@ -39,23 +31,10 @@ class HTChemicalMachineScreen(handler: HTChemicalMachineScreenHandler, inventory
3931
mouseX: Int,
4032
mouseY: Int,
4133
) {
42-
context.drawTexture(TEXTURE, startX, startY, 0, 0, backgroundWidth, backgroundHeight)
43-
34+
super.drawBackground(context, delta, mouseX, mouseY)
4435
drawFluid(context, fluidCache[0], 2, 2)
4536
drawFluid(context, fluidCache[1], 3, 2)
4637
drawFluid(context, fluidCache[2], 5, 2)
4738
drawFluid(context, fluidCache[3], 6, 2)
48-
49-
context.drawGuiTexture(
50-
RagiumAPI.id("progress_bar"),
51-
16,
52-
16,
53-
0,
54-
0,
55-
startX + getSlotPosX(4),
56-
startY + getSlotPosY(1),
57-
MathHelper.ceil(handler.getProgress() * 16f),
58-
16,
59-
)
6039
}
6140
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package hiiragi283.ragium.client.gui
2+
3+
import hiiragi283.ragium.api.RagiumAPI
4+
import hiiragi283.ragium.common.screen.HTDistillationTowerScreenHandler
5+
import net.fabricmc.api.EnvType
6+
import net.fabricmc.api.Environment
7+
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant
8+
import net.minecraft.client.gui.DrawContext
9+
import net.minecraft.entity.player.PlayerInventory
10+
import net.minecraft.text.Text
11+
import net.minecraft.util.Identifier
12+
13+
@Environment(EnvType.CLIENT)
14+
class HTDistillationTowerScreen(handler: HTDistillationTowerScreenHandler, inventory: PlayerInventory, title: Text) :
15+
HTMachineScreenBase<HTDistillationTowerScreenHandler>(handler, inventory, title) {
16+
override val texture: Identifier = RagiumAPI.id("textures/gui/distillation_tower.png")
17+
override val fluidCache: Array<FluidVariant> = Array(4) { FluidVariant.blank() }
18+
override val amountCache: LongArray = LongArray(4) { 0 }
19+
20+
override fun drawMouseoverTooltip(context: DrawContext, x: Int, y: Int) {
21+
super.drawMouseoverTooltip(context, x, y)
22+
drawFluidTooltip(context, fluidCache[0], amountCache[0], 2, 2, x, y)
23+
drawFluidTooltip(context, fluidCache[1], amountCache[1], 5, 2, x, y)
24+
drawFluidTooltip(context, fluidCache[2], amountCache[2], 6, 2, x, y)
25+
drawFluidTooltip(context, fluidCache[3], amountCache[3], 7, 2, x, y)
26+
}
27+
28+
override fun drawBackground(
29+
context: DrawContext,
30+
delta: Float,
31+
mouseX: Int,
32+
mouseY: Int,
33+
) {
34+
super.drawBackground(context, delta, mouseX, mouseY)
35+
drawFluid(context, fluidCache[0], 2, 2)
36+
drawFluid(context, fluidCache[1], 5, 2)
37+
drawFluid(context, fluidCache[2], 6, 2)
38+
drawFluid(context, fluidCache[3], 7, 2)
39+
}
40+
}

0 commit comments

Comments
 (0)