Skip to content

Commit

Permalink
add: Marine Cannon, finished hats, EMI Support
Browse files Browse the repository at this point in the history
  • Loading branch information
SammyForReal committed Dec 28, 2023
1 parent 372365d commit ddba1bf
Show file tree
Hide file tree
Showing 63 changed files with 1,281 additions and 644 deletions.
6 changes: 5 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,14 @@ dependencies {
modImplementation "net.fabricmc:fabric-language-kotlin:${fabric_kotlin_version}"

// Other dependencies
modImplementation "maven.modrinth:modmenu:${modmenu_version}" // Not required
modApi "maven.modrinth:modmenu:${modmenu_version}" // Not required
modApi "maven.modrinth:emi:${emi_version}"

// Dev environment
modRuntimeOnly "maven.modrinth:sodium:${sodium_version}"
modRuntimeOnly "maven.modrinth:modmenu:${modmenu_version}"
modRuntimeOnly "maven.modrinth:emi:${emi_version}"

//if (enable_iris) // For some reason this just always is true?
// modRuntimeOnly "maven.modrinth:iris:${iris_version}"
}
Expand Down
6 changes: 2 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ fabric_kotlin_version=1.10.16+kotlin.1.9.21

# Dependencies
fabric_version=0.91.2+1.20.4
registrate_version=1.3.62-MC1.20.1
modmenu_version=9.0.0-pre.1
sodium_version=mc1.20.3-0.5.5
enable_iris=false
iris_version=1.6.14+1.20.4
emi_version=1.0.29+1.20.4+fabric
sodium_version=mc1.20.3-0.5.5
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,34 @@ package cc.tweaked_programs.partnership.client

import cc.tweaked_programs.partnership.client.model.KayakModel
import cc.tweaked_programs.partnership.client.registries.ScreenRegistries
import cc.tweaked_programs.partnership.client.renderer.armor.HatRenderer
import cc.tweaked_programs.partnership.client.renderer.blockentity.MarineCannonBlockEntityRenderer
import cc.tweaked_programs.partnership.client.renderer.entity.KayakRenderer
import cc.tweaked_programs.partnership.main.registries.BlockEntityRegistries
import cc.tweaked_programs.partnership.main.registries.BlockRegistries
import cc.tweaked_programs.partnership.main.registries.EntityRegistries.CANNONBALL
import cc.tweaked_programs.partnership.main.registries.EntityRegistries.KAYAK
import cc.tweaked_programs.partnership.main.registries.ItemRegistries
import net.fabricmc.api.ClientModInitializer
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry
import net.fabricmc.fabric.api.client.rendering.v1.ArmorRenderer
import net.minecraft.client.renderer.RenderType
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers
import net.minecraft.client.renderer.entity.EntityRendererProvider
import net.minecraft.client.renderer.entity.ThrownItemRenderer

object PartnershipClient : ClientModInitializer {
override fun onInitializeClient() {
// WAKE UP
ScreenRegistries

// Client
blockRendering()
entityRendering()
blockEntityRenderer()
customArmorRenderer()
}

private fun blockRendering() {
Expand All @@ -32,9 +40,16 @@ object PartnershipClient : ClientModInitializer {
private fun entityRendering() {
EntityRendererRegistry.register(KAYAK, ::KayakRenderer)
EntityModelLayerRegistry.registerModelLayer(KayakModel.LAYER_LOCATION, KayakModel::createBodyLayer)

EntityRendererRegistry.register(CANNONBALL) { context: EntityRendererProvider.Context -> ThrownItemRenderer(context) }
}

private fun blockEntityRenderer() {
BlockEntityRenderers.register(BlockEntityRegistries.MARINE_CANNON, ::MarineCannonBlockEntityRenderer)
}

private fun customArmorRenderer() {
ArmorRenderer.register(HatRenderer(), ItemRegistries.CAPTAINS_HAT)
ArmorRenderer.register(HatRenderer(), ItemRegistries.SAILORS_HAT)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package cc.tweaked_programs.partnership.client.compat.emi

import cc.tweaked_programs.partnership.main.MOD_ID
import cc.tweaked_programs.partnership.main.block.boatyard.BoatyardBlockEntity
import cc.tweaked_programs.partnership.main.menu.inventory.GenericListenerSlot
import cc.tweaked_programs.partnership.main.menu.inventory.GenericOutputOnlySlot
import cc.tweaked_programs.partnership.main.recipe.BoatyardRecipe
import dev.emi.emi.api.recipe.EmiRecipe
import dev.emi.emi.api.recipe.EmiRecipeCategory
import dev.emi.emi.api.render.EmiTexture
import dev.emi.emi.api.stack.EmiIngredient
import dev.emi.emi.api.stack.EmiStack
import dev.emi.emi.api.widget.WidgetHolder
import net.minecraft.core.RegistryAccess
import net.minecraft.resources.ResourceLocation

class BoatyardEmiRecipe(recipe: BoatyardRecipe) : EmiRecipe {

private val input: MutableList<EmiIngredient> = recipe.getIngredientsAsItemStacks().map { EmiStack.of(it) }.toMutableList()
private val output: MutableList<EmiStack> = mutableListOf(EmiStack.of(recipe.getResultItem(RegistryAccess.EMPTY)))

override fun getCategory(): EmiRecipeCategory = PartnershipEmi.BOATYARD_CATEGORY

override fun getId(): ResourceLocation = ResourceLocation(MOD_ID, "boatyard_construct_recipe")

override fun getInputs() = input

override fun getOutputs() = output

override fun getDisplayWidth(): Int = 128

override fun getDisplayHeight(): Int = 58

override fun addWidgets(widgets: WidgetHolder) {
val offset = 2

widgets.addTexture(EmiTexture.EMPTY_ARROW, 79, (getDisplayHeight()/2)-(EmiTexture.EMPTY_ARROW.height/2)-1)

repeat (3) { column ->
repeat (4) { row ->
widgets.addSlot(inputs[row + column * 4], offset + row * 18, offset + column * 18)
}
}

widgets.addSlot(output[0], getDisplayWidth()-18-offset, getDisplayHeight()/2-9)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package cc.tweaked_programs.partnership.client.compat.emi

import cc.tweaked_programs.partnership.main.MOD_ID
import cc.tweaked_programs.partnership.main.recipe.BoatyardRecipe
import cc.tweaked_programs.partnership.main.registries.ItemRegistries
import dev.emi.emi.api.EmiPlugin
import dev.emi.emi.api.EmiRegistry
import dev.emi.emi.api.recipe.EmiRecipeCategory
import dev.emi.emi.api.render.EmiTexture
import dev.emi.emi.api.stack.EmiStack
import net.minecraft.resources.ResourceLocation

class PartnershipEmi : EmiPlugin {
override fun register(registry: EmiRegistry) {
registry.addCategory(BOATYARD_CATEGORY)

registry.addWorkstation(BOATYARD_CATEGORY, BOATYARD_WORKSTATION)

registry.recipeManager.getAllRecipesFor(BoatyardRecipe.Companion.Type.TYPE).forEach {
registry.addRecipe(BoatyardEmiRecipe(it.value))
}
}

companion object {
private val SPRITES = ResourceLocation(MOD_ID, "textures/gui/emi_simplified_containers.png")

val BOATYARD_WORKSTATION: EmiStack = EmiStack.of(ItemRegistries.BOATYARD)
val BOATYARD_CATEGORY = EmiRecipeCategory(ResourceLocation(MOD_ID, "boatyard"), BOATYARD_WORKSTATION,
EmiTexture(SPRITES, 0, 0, 16, 16))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package cc.tweaked_programs.partnership.client.model.hat

import cc.tweaked_programs.partnership.main.MOD_ID
import com.mojang.blaze3d.vertex.PoseStack
import com.mojang.blaze3d.vertex.VertexConsumer
import net.minecraft.client.model.HumanoidModel
import net.minecraft.client.model.Model
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.client.model.geom.PartPose
import net.minecraft.client.model.geom.builders.CubeDeformation
import net.minecraft.client.model.geom.builders.CubeListBuilder
import net.minecraft.client.model.geom.builders.LayerDefinition
import net.minecraft.client.model.geom.builders.MeshDefinition
import net.minecraft.client.renderer.RenderType
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.LivingEntity
import org.joml.Vector3f
import java.util.function.Function


class CaptainsHatModel(val root: ModelPart) : Model(Function { resourceLocation: ResourceLocation -> RenderType.entityTranslucent(resourceLocation) }) {

override fun renderToBuffer(poseStack: PoseStack, vertexConsumer: VertexConsumer, packedLight: Int,
packedOverlay: Int, red: Float, green: Float, blue: Float, alpha: Float) {

root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha)
}

fun setupAnim(humanoidModel: HumanoidModel<LivingEntity>) {
root.setRotation(humanoidModel.hat.xRot, humanoidModel.hat.yRot, humanoidModel.hat.zRot)
root.x = -0.65F
root.y = 0.5F
}

companion object {
val TEXTURE = ResourceLocation(MOD_ID, "textures/models/armor/captains_hat.png")

fun createBodyLayer(): LayerDefinition {
val meshdefinition = MeshDefinition()
val partdefinition = meshdefinition.root

val main = partdefinition.addOrReplaceChild(
"main",
CubeListBuilder.create().texOffs(0, 14).addBox(-4.0f, -1.0f, -5.0f, 9.0f, 1.0f, 9.0f, CubeDeformation(0.0f))
.texOffs(0, 24).addBox(-4.0f, 0.0f, -8.0f, 9.0f, 0.0f, 3.0f, CubeDeformation(0.0f))
.texOffs(20, 24).addBox(-3.0f, 0.0f, -9.0f, 7.0f, 0.0f, 1.0f, CubeDeformation(0.0f))
.texOffs(0, 0).addBox(-5.0f, -4.0f, -6.0f, 11.0f, 3.0f, 11.0f, CubeDeformation(0.0f)),
PartPose.offset(0.0f, -7.0f, 0.0f)
)

return LayerDefinition.create(meshdefinition, 64, 64)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package cc.tweaked_programs.partnership.client.model.hat

import cc.tweaked_programs.partnership.main.MOD_ID
import com.mojang.blaze3d.vertex.PoseStack
import com.mojang.blaze3d.vertex.VertexConsumer
import net.minecraft.client.model.HumanoidModel
import net.minecraft.client.model.Model
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.client.model.geom.PartPose
import net.minecraft.client.model.geom.builders.CubeDeformation
import net.minecraft.client.model.geom.builders.CubeListBuilder
import net.minecraft.client.model.geom.builders.LayerDefinition
import net.minecraft.client.model.geom.builders.MeshDefinition
import net.minecraft.client.renderer.RenderType
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.entity.LivingEntity
import java.util.function.Function


class SailorsHatModel(val root: ModelPart) : Model(Function { resourceLocation: ResourceLocation -> RenderType.entityTranslucent(resourceLocation) }) {

override fun renderToBuffer(poseStack: PoseStack, vertexConsumer: VertexConsumer, packedLight: Int,
packedOverlay: Int, red: Float, green: Float, blue: Float, alpha: Float) {

root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha)
}

fun setupAnim(humanoidModel: HumanoidModel<LivingEntity>) {
root.setRotation(humanoidModel.hat.xRot, humanoidModel.hat.yRot, humanoidModel.hat.zRot)
root.x = -0.65F
root.y = 0.5F
}

companion object {
val TEXTURE = ResourceLocation(MOD_ID, "textures/models/armor/sailors_hat.png")

fun createBodyLayer(): LayerDefinition {
val meshdefinition = MeshDefinition()
val partdefinition = meshdefinition.root

val bb_main = partdefinition.addOrReplaceChild(
"main",
CubeListBuilder.create().texOffs(0, 0)
.addBox(-3.0f, -3.0f, -3.0f, 6.0f, 3.0f, 6.0f, CubeDeformation(0.0f)),
PartPose.offset(0.0f, -7.0f, 0.0f)
)

return LayerDefinition.create(meshdefinition, 32, 32)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package cc.tweaked_programs.partnership.client.model.marine_cannon

import cc.tweaked_programs.partnership.main.MOD_ID
import cc.tweaked_programs.partnership.main.block.cannon.MarineCannonBlockEntity
import com.mojang.blaze3d.vertex.PoseStack
import com.mojang.blaze3d.vertex.VertexConsumer
import net.minecraft.client.model.Model
import net.minecraft.client.model.geom.ModelLayerLocation
import net.minecraft.client.model.geom.ModelPart
import net.minecraft.client.model.geom.PartPose
import net.minecraft.client.model.geom.builders.CubeDeformation
import net.minecraft.client.model.geom.builders.CubeListBuilder
import net.minecraft.client.model.geom.builders.LayerDefinition
import net.minecraft.client.model.geom.builders.MeshDefinition
import net.minecraft.client.renderer.RenderType
import net.minecraft.core.Direction
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.level.block.state.properties.BlockStateProperties
import java.util.function.Function
import kotlin.math.PI


class MarineCannonLegsModel(root: ModelPart) :
Model(Function { resourceLocation: ResourceLocation -> RenderType.entityTranslucent(resourceLocation) }) {

private val root: ModelPart = root.getChild("root")

fun setupAnim(entity: MarineCannonBlockEntity, partialTicks: Float) {
root.setRotation(0F, (when (entity.state.getValue(BlockStateProperties.HORIZONTAL_FACING)) {
Direction.NORTH -> 0F
Direction.EAST -> 270F
Direction.SOUTH -> 180F
Direction.WEST -> 90F
else -> 0F
} + entity.getXRot()) * MAGIKK, 0F)
}

override fun renderToBuffer(poseStack: PoseStack, vertexConsumer: VertexConsumer, packedLight:Int,
packedOverlay: Int, red: Float, green: Float, blue: Float, alpha: Float) {

root.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha)
}

companion object {
val LAYER_LOCATION: ModelLayerLocation = ModelLayerLocation(ResourceLocation(MOD_ID, "marine_cannon"), "main")

val TEXTURE = ResourceLocation(MOD_ID, "textures/entity/marine_cannon/legs.png")

private const val MAGIKK: Float = (PI.toFloat() / 180f)

fun createBodyLayer(): LayerDefinition {
val meshDefinition = MeshDefinition()
val partDefinition = meshDefinition.root

val root = partDefinition.addOrReplaceChild("root", CubeListBuilder.create(), PartPose.offset(0.0f, 23.0f, 0.0f))

/*val cube_r1 = */root.addOrReplaceChild(
"cube_r1",
CubeListBuilder.create().texOffs(0, 0)
.addBox(3.0f, -6.2866f, -4.6194f, 2.0f, 8.2f, 2.0f, CubeDeformation(0.0f))
.texOffs(0, 0).addBox(-5.0f, -6.2866f, -4.6194f, 2.0f, 8.2f, 2.0f, CubeDeformation(0.0f)),
PartPose.offsetAndRotation(0.0f, 0.0f, 0.0f, -0.3927f, 0.0f, 0.0f)
)

/*val cube_r2 = */root.addOrReplaceChild(
"cube_r2",
CubeListBuilder.create().texOffs(0, 0)
.addBox(3.0f, -6.2866f, 2.6194f, 2.0f, 8.2f, 2.0f, CubeDeformation(0.0f))
.texOffs(0, 0).addBox(-5.0f, -6.2866f, 2.6194f, 2.0f, 8.2f, 2.0f, CubeDeformation(0.0f)),
PartPose.offsetAndRotation(0.0f, 0.0f, 0.0f, 0.3927f, 0.0f, 0.0f)
)

return LayerDefinition.create(meshDefinition, 16, 16)
}
}
}
Loading

0 comments on commit ddba1bf

Please sign in to comment.