diff --git a/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/NeoComputersFabricClient.java b/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/NeoComputersFabricClient.java index 4c50720..c81dbb3 100644 --- a/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/NeoComputersFabricClient.java +++ b/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/NeoComputersFabricClient.java @@ -13,10 +13,7 @@ import org.neoflock.neocomputers.NeoComputers; import org.neoflock.neocomputers.block.Blocks; import org.neoflock.neocomputers.block.CableBlock; import org.neoflock.neocomputers.entity.BlockEntities; -import org.neoflock.neocomputers.entity.render.CaseEntityRenderer; -import org.neoflock.neocomputers.entity.render.RelayEntityRenderer; -import org.neoflock.neocomputers.entity.render.RobotEntityRenderer; -import org.neoflock.neocomputers.entity.render.ScreenEntityRenderer; +import org.neoflock.neocomputers.entity.render.*; import org.neoflock.neocomputers.item.Items; import org.neoflock.neocomputers.platforms.fabric.client.model.ModelLoader; @@ -24,10 +21,11 @@ public class NeoComputersFabricClient implements ClientModInitializer { @Override public void onInitializeClient() { ModelLoadingPlugin.register(new ModelLoader()); - BlockEntityRenderers.register(BlockEntities.INSTANCE.getSCREEN_ENTITY().get(), ScreenEntityRenderer::new); - BlockEntityRenderers.register(BlockEntities.INSTANCE.getCASE_ENTITY().get(), CaseEntityRenderer::new); - BlockEntityRenderers.register(BlockEntities.INSTANCE.getRELAY_ENTITY().get(), RelayEntityRenderer::new); + BlockEntityRenderers.register(BlockEntities.INSTANCE.getSCREEN_ENTITY().get(), ScreenEntityRenderer::new); // TODO: put this in common +// BlockEntityRenderers.register(BlockEntities.INSTANCE.getCASE_ENTITY().get(), CaseEntityRenderer::new); +// BlockEntityRenderers.register(BlockEntities.INSTANCE.getRELAY_ENTITY().get(), RelayEntityRenderer::new); BlockEntityRenderers.register(BlockEntities.INSTANCE.getROBOT_ENTITY().get(), RobotEntityRenderer::new); + BlockEntityRenderers.register(BlockEntities.INSTANCE.getRACK_ENTITY().get(), RackEntityRenderer::new); ColorProviderRegistry.BLOCK.register((state, world, pos, index) -> { if (index == 0) { diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt b/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt index 2c8ccf0..1338371 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt @@ -36,6 +36,7 @@ object Blocks { val CABLE_BLOCK: RegistrySupplier = BaseBlock.register("cable") { CableBlock() } val RELAY_BLOCK: RegistrySupplier = BaseBlock.register("relay") { RelayBlock() } val ROBOT_BLOCK: RegistrySupplier = BaseBlock.register("robot") { RobotBlock() } + val RACK_BLOCK: RegistrySupplier = BaseBlock.register("rack") { RackBlock() } fun registerBlockItems() { BLOCKS.forEach(Consumer { sup: RegistrySupplier -> diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/RackBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/RackBlock.kt new file mode 100644 index 0000000..acc9569 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/block/RackBlock.kt @@ -0,0 +1,49 @@ +package org.neoflock.neocomputers.block + +import net.minecraft.core.BlockPos +import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.player.Player +import net.minecraft.world.level.BlockGetter +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.EntityBlock +import net.minecraft.world.level.block.RenderShape +import net.minecraft.world.level.block.entity.BlockEntity +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.phys.BlockHitResult +import net.minecraft.world.phys.shapes.CollisionContext +import net.minecraft.world.phys.shapes.Shapes +import net.minecraft.world.phys.shapes.VoxelShape +import org.neoflock.neocomputers.entity.BlockEntities +import org.neoflock.neocomputers.entity.RackEntity + +class RackBlock : BaseBlock(Properties.of().noOcclusion()), EntityBlock { + override fun newBlockEntity( + pos: BlockPos, + state: BlockState + ): BlockEntity? { + return RackEntity(pos, state) + } + +// override fun getShape( +// state: BlockState, +// level: BlockGetter, +// pos: BlockPos, +// context: CollisionContext +// ): VoxelShape? { +// return Shapes.box(0.0,0.0,0.0,0.01,0.01,0.01) +// } + +// override fun getRenderShape(state: BlockState): RenderShape? { +// return RenderShape +// } + + +// override fun useWithoutItem( +// state: BlockState, +// level: Levesl, +// pos: BlockPos, +// player: Player, +// hitResult: BlockHitResult +// ): InteractionResult? { +// return super.useWithoutItem(state, level, pos, player, hitResult) +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/RobotBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/RobotBlock.kt index dd3faea..37122b8 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/RobotBlock.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/RobotBlock.kt @@ -17,7 +17,6 @@ import org.neoflock.neocomputers.entity.RobotEntity class RobotBlock : BaseBlock(Properties.of().noOcclusion()), EntityBlock { // todo: node stuff override fun newBlockEntity(pos: BlockPos, state: BlockState): BlockEntity { NeoComputers.LOGGER.info("block entity created..") - Blocks.CHEST return RobotEntity(pos, state) } diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt index 72ecd71..27b4737 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt @@ -100,6 +100,12 @@ object BlockEntities { ) } + val RACK_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("rack") { + BlockEntityType( + ::RackEntity, setOf(Blocks.RACK_BLOCK.get()), BullshitFix() + ) + } + fun registerPowerBlocks() { PowerManager.registerPowerDevice(CAPACITOR_ENTITY.get()) PowerManager.registerPowerDevice(CAPACITOR2_ENTITY.get()) diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/RackEntity.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/RackEntity.kt new file mode 100644 index 0000000..9283ee7 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/RackEntity.kt @@ -0,0 +1,8 @@ +package org.neoflock.neocomputers.entity + +import net.minecraft.core.BlockPos +import net.minecraft.world.level.block.entity.BlockEntity +import net.minecraft.world.level.block.state.BlockState + +class RackEntity(pos: BlockPos, state: BlockState) : BlockEntity(BlockEntities.RACK_ENTITY.get(), pos, state) { +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/render/RackEntityRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/render/RackEntityRenderer.kt new file mode 100644 index 0000000..8cbe101 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/render/RackEntityRenderer.kt @@ -0,0 +1,31 @@ +package org.neoflock.neocomputers.entity.render + +import com.mojang.authlib.minecraft.client.MinecraftClient +import com.mojang.blaze3d.vertex.PoseStack +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.LevelRenderer +import net.minecraft.client.renderer.LightTexture +import net.minecraft.client.renderer.MultiBufferSource +import net.minecraft.client.renderer.block.ModelBlockRenderer +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider +import net.minecraft.world.level.LightLayer +import net.minecraft.world.level.dimension.DimensionType +import net.minecraft.world.level.lighting.BlockLightEngine +import org.neoflock.neocomputers.NeoComputers +import org.neoflock.neocomputers.entity.RackEntity +import org.neoflock.neocomputers.item.RackItem + +class RackEntityRenderer(val context: BlockEntityRendererProvider.Context) : BlockEntityRenderer { + + override fun render(ent: RackEntity, partialTick: Float, poseStack: PoseStack, source: MultiBufferSource, packedLight: Int, packedOverlay: Int) { + poseStack.pushPose() + poseStack.translate(1/16f, 11/16f, 1/16f) + + val render_slot = 2 // this is purely temporary type shit like true alpha shit, anyway it go to 0-3, change and test it if you want + poseStack.translate(0f, (render_slot)*-3/16f, 0f) + val server = object : RackItem {} + server.render(source, poseStack, packedLight) // who knows atp + poseStack.popPose() + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/RackItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/RackItem.kt new file mode 100644 index 0000000..d0a89b8 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/item/RackItem.kt @@ -0,0 +1,56 @@ +package org.neoflock.neocomputers.item + +import com.mojang.blaze3d.shaders.Shader +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.blaze3d.vertex.VertexConsumer +import com.mojang.blaze3d.vertex.VertexFormat +import net.minecraft.client.renderer.MultiBufferSource +import net.minecraft.client.renderer.RenderStateShard +import net.minecraft.client.renderer.RenderType +import net.minecraft.client.renderer.texture.OverlayTexture +import net.minecraft.resources.ResourceLocation +import org.neoflock.neocomputers.NeoComputers + +interface RackItem { +// companion object { +// val RENDER_TYPE = {l: ResourceLocation -> +// RenderType.create("nc_server", DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP, VertexFormat.Mode.QUADS, RenderType.SMALL_BUFFER_SIZE, RenderType.CompositeState.builder() +// .setShaderState(RenderStateShard.ShaderStateShard.POSITION_COLOR_TEX_LIGHTMAP_SHADER) +// .setLightmapState(RenderStateShard.LIGHTMAP) +// .setTextureState(RenderStateShard.TextureStateShard(l, false, false)) +// .createCompositeState(false)) +// } +// } + val TOP_TEX: ResourceLocation + get() = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/block/generic_top.png") + + val FRONT_TEX: ResourceLocation + get() = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/block/rack_server.png") + + fun render(source: MultiBufferSource, stack: PoseStack, light: Int, v_offset: Float = 2f) { + val pose = stack.last() + + +// var buffer = source.getBuffer(RenderType.gui()) // TODO: correct rendertype + var buffer = source.getBuffer(RenderType.entitySolid(TOP_TEX)) +// val u1 = 1/16f + buffer.addVertex(pose, 0f, 0f, 0f).setUv(1/16f, 15/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 0f, -1f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + buffer.addVertex(pose, 14/16f, 0f, 0f).setUv(1/16f, 1/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 0f, -1f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + buffer.addVertex(pose, 14/16f, 0f, 14/16f).setUv(15/16f, 1/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 0f, -1f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + buffer.addVertex(pose, 0f, 0f, 14/16f).setUv(15/16f, 1/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 0f, -1f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + + buffer.addVertex(pose, 0f, 3/16f, 14/16f).setUv(15/16f, 1/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 0f, 1f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + buffer.addVertex(pose, 14/16f, 3/16f, 14/16f).setUv(15/16f, 15/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 0f, 1f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + buffer.addVertex(pose, 14/16f, 3/16f, 0f).setUv(1/16f, 15/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 0f, 1f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + buffer.addVertex(pose, 0f, 3/16f, 0f).setUv(1/16f, 1/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 0f, 1f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + + buffer = source.getBuffer(RenderType.entitySolid(FRONT_TEX)) + buffer.addVertex(pose, 14/16f, 3/16f, 14/16f).setUv(1/16f, v_offset/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 1f, 0f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + buffer.addVertex(pose, 14/16f, 0f, 14/16f).setUv(1/16f, (v_offset+3)/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 1f, 0f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + buffer.addVertex(pose, 14/16f, 0/16f, 0/16f).setUv(15/16f, (v_offset+3)/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 1f, 0f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + buffer.addVertex(pose, 14/16f, 3/16f, 0/16f).setUv(15/16f, v_offset/16f).setColor(1f, 1f, 1f, 1f).setLight(light).setNormal(pose, 1f, 0f, 0f).setOverlay(OverlayTexture.NO_OVERLAY) + + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/blockstates/rack.json b/src/main/resources/assets/neocomputers/blockstates/rack.json new file mode 100644 index 0000000..18bb909 --- /dev/null +++ b/src/main/resources/assets/neocomputers/blockstates/rack.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "neocomputers:block/rack"} + } +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/block/rack.json b/src/main/resources/assets/neocomputers/models/block/rack.json new file mode 100644 index 0000000..f396222 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/block/rack.json @@ -0,0 +1,70 @@ +{ + "parent": "minecraft:block/block", + "render_type": "minecraft:solid", + "textures": { + "side": "neocomputers:block/rack_side", + "top": "neocomputers:block/generic_top" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [1, 16, 16], + "faces": { + "west": { "uv": [0, 0, 16, 16], "texture": "side", "tint_index": 0 }, + "east": { "uv": [0, 0, 16, 16], "texture": "side", "tint_index": 0 }, + "north": { "uv": [0, 0, 16, 1], "texture": "side", "tint_index": 0 }, + "south": { "uv": [0, 0, 16, 1], "texture": "side", "tint_index": 0 }, + "up": { "uv": [0, 0, 16, 1], "texture": "side", "tint_index": 0 }, + "down": { "uv": [0, 0, 16, 1], "texture": "side", "tint_index": 0 } + } + }, + { + "from": [1, 0, 0], + "to": [16, 16, 1], + "faces": { + "north": { "uv": [0, 0, 15, 16], "texture": "side", "tint_index": 0 }, + "south": { "uv": [1, 0, 16, 16], "texture": "side", "tint_index": 0 }, + "west": { "uv": [0, 0, 1, 16], "texture": "side", "tint_index": 0 }, + "east": { "uv": [0, 0, 1, 16], "texture": "side", "tint_index": 0 }, + "up": { "uv": [0, 0, 16, 1], "texture": "side", "tint_index": 0 }, + "down": { "uv": [0, 0, 16, 1], "texture": "side", "tint_index": 0 } + } + }, + { + "from": [1, 0, 15], + "to": [16, 16, 16], + "faces": { + "north": { "uv": [0, 0, 15, 16], "texture": "side", "tint_index": 0 }, + "south": { "uv": [1, 0, 16, 16], "texture": "side", "tint_index": 0 }, + "west": { "uv": [0, 0, 1, 16], "texture": "side", "tint_index": 0 }, + "east": { "uv": [0, 0, 1, 16], "texture": "side", "tint_index": 0 }, + "up": { "uv": [0, 0, 16, 1], "texture": "side", "tint_index": 0 }, + "down": { "uv": [0, 0, 16, 1], "texture": "side", "tint_index": 0 } + } + }, + { + "from": [1, 0, 1], + "to": [16, 2, 15], + "faces": { + "north": { "uv": [0, 0, 1, 16], "texture": "top", "tint_index": 0 }, + "south": { "uv": [0, 0, 1, 16], "texture": "top", "tint_index": 0 }, + "west": { "uv": [0, 0, 1, 16], "texture": "top", "tint_index": 0 }, + "east": { "uv": [0, 0, 1, 16], "texture": "top", "tint_index": 0 }, + "up": { "uv": [2, 1, 16, 15], "texture": "top", "tint_index": 0 }, + "down": { "uv": [0, 0, 1, 1], "texture": "top", "tint_index": 0 } + } + }, + { + "from": [1, 14, 1], + "to": [16, 16, 15], + "faces": { + "north": { "uv": [0, 0, 1, 16], "texture": "top", "tint_index": 0 }, + "south": { "uv": [0, 0, 1, 16], "texture": "top", "tint_index": 0 }, + "west": { "uv": [0, 0, 1, 16], "texture": "top", "tint_index": 0 }, + "east": { "uv": [1, 0, 15, 2], "texture": "top", "tint_index": 0 }, + "up": { "uv": [1, 1, 16, 15], "texture": "top", "tint_index": 0 }, + "down": { "uv": [0, 0, 1, 1], "texture": "top", "tint_index": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/block/generic_top.png b/src/main/resources/assets/neocomputers/textures/block/generic_top.png new file mode 100644 index 0000000..a7934ab Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/generic_top.png differ diff --git a/src/main/resources/assets/neocomputers/textures/block/rack_server.png b/src/main/resources/assets/neocomputers/textures/block/rack_server.png new file mode 100644 index 0000000..68c2f3a Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/rack_server.png differ diff --git a/src/main/resources/assets/neocomputers/textures/block/rack_side.png b/src/main/resources/assets/neocomputers/textures/block/rack_side.png new file mode 100644 index 0000000..ae94723 Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/rack_side.png differ diff --git a/src/main/resources/assets/neocomputers/textures/block/rack_terminal_server.png b/src/main/resources/assets/neocomputers/textures/block/rack_terminal_server.png new file mode 100644 index 0000000..757e924 Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/rack_terminal_server.png differ