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 1541c36..dedbbd1 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 @@ -1,14 +1,17 @@ package org.neoflock.neocomputers.platforms.fabric.client; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import org.neoflock.neocomputers.entity.BlockEntities; -import org.neoflock.neocomputers.gui.render.CaseEntityRenderer; -import org.neoflock.neocomputers.gui.render.ScreenEntityRenderer; +import org.neoflock.neocomputers.entity.render.CaseEntityRenderer; +import org.neoflock.neocomputers.entity.render.ScreenEntityRenderer; +import org.neoflock.neocomputers.platforms.fabric.client.model.ModelLoader; 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); } diff --git a/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/model/CableModel.java b/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/model/CableModel.java new file mode 100644 index 0000000..b4e1d8f --- /dev/null +++ b/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/model/CableModel.java @@ -0,0 +1,138 @@ +//package org.neoflock.neocomputers.platforms.fabric.client.model; +// +//import net.fabricmc.fabric.api.renderer.v1.Renderer; +//import net.fabricmc.fabric.api.renderer.v1.RendererAccess; +//import net.fabricmc.fabric.api.renderer.v1.mesh.Mesh; +//import net.fabricmc.fabric.api.renderer.v1.mesh.MeshBuilder; +//import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView; +//import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter; +//import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel; +//import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; +//import net.minecraft.client.Minecraft; +//import net.minecraft.client.renderer.block.model.BakedQuad; +//import net.minecraft.client.renderer.block.model.ItemOverrides; +//import net.minecraft.client.renderer.block.model.ItemTransforms; +//import net.minecraft.client.renderer.texture.TextureAtlas; +//import net.minecraft.client.renderer.texture.TextureAtlasSprite; +//import net.minecraft.client.resources.model.*; +//import net.minecraft.core.BlockPos; +//import net.minecraft.core.Direction; +//import net.minecraft.resources.ResourceLocation; +//import net.minecraft.util.RandomSource; +//import net.minecraft.world.level.BlockAndTintGetter; +//import net.minecraft.world.level.block.state.BlockState; +//import org.jetbrains.annotations.Nullable; +//import org.neoflock.neocomputers.NeoComputers; +// +//import java.util.ArrayList; +//import java.util.Collection; +//import java.util.List; +//import java.util.function.Function; +//import java.util.function.Supplier; +// +//// this totally could have been done with datagen, why do i do this +//public class CableModel implements BakedModel, UnbakedModel, FabricBakedModel { +//// private TextureAtlasSprite sprite = Minecraft +//// TextureAtlasSprite sprite = atlas.apply(new Material(TextureAtlas.LOCATION_BLOCKS, ResourceLocation.withDefaultNamespace("block/furnace_top"))); +// +// private float MIN = 6/16F; +// private float MAX = 10/16F; +// +// private BlockState state; +// +// private Mesh mesh; +// @Override +// public List getQuads(@Nullable BlockState state, @Nullable Direction direction, RandomSource random) { +//// NeoComputers.INSTANCE.getLOGGER().info("Obtained blockstate!"); +// this.state = state; +// return List.of(); +// } +// +// @Override +// public boolean useAmbientOcclusion() { +// return false; +// } +// +// @Override +// public boolean isGui3d() { +// return true; +// } +// +// @Override +// public boolean usesBlockLight() { +// return true; +// } +// +// @Override +// public boolean isCustomRenderer() { +// return false; +// } +// +// @Override +// public TextureAtlasSprite getParticleIcon() { +// Function atlas = Minecraft.getInstance().getTextureAtlas(TextureAtlas.LOCATION_BLOCKS); +// return atlas.apply(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "block/teto")); +// } +// +// @Override +// public ItemTransforms getTransforms() { +// return ItemTransforms.NO_TRANSFORMS; +// } +// +// @Override +// public ItemOverrides getOverrides() { +// return ItemOverrides.EMPTY; +// } +// +// @Override +// public Collection getDependencies() { +// return List.of(); +// } +// +// @Override +// public void resolveParents(Function resolver) { +// } +// +// @Override +// public @Nullable BakedModel bake(ModelBaker baker, Function spriteGetter, ModelState state) { +// TextureAtlasSprite sprite = spriteGetter.apply(new Material(TextureAtlas.LOCATION_BLOCKS, ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "block/teto"))); +// +// Renderer renderer = RendererAccess.INSTANCE.getRenderer(); +// MeshBuilder builder = renderer.meshBuilder(); +// QuadEmitter emitter = builder.getEmitter(); +// +// bakeCenter(emitter, sprite); +// +// +// mesh = builder.build(); +// return this; +// } +// +// @Override +// public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier randomSupplier, RenderContext context) { +// mesh.outputTo(context.getEmitter()); +// } +// +// public void bakeCenter(QuadEmitter emitter, TextureAtlasSprite sprite) { +// for (Direction dir : Direction.values()) { +// emitter.square(dir, MIN, MIN, MAX, MAX, MIN); +// emitter.spriteBake(sprite, MutableQuadView.BAKE_LOCK_UV); +// emitter.color(-1, -1, -1, -1); +// emitter.emit(); +// } +// } +// public void bakeConnection(Direction dir, QuadEmitter emitter, TextureAtlasSprite sprite) { +// int mag = dir.getStepX()+dir.getStepZ(); // i dont want to hear it +// float bottom = dir.getStepY()==0 ? 6/16F : (dir.getStepY()==1 ? 10/16F : 0F); +// +// for (Direction d : dir.getAxis().getPlane().faces) { +// emitter.square(d, (6/16F)+0.5F*mag, bottom, 6/16F) +// } +// +// } +// +//// @Override +//// public boolean isVanillaAdapter() { +//// return false; // TODO: let this be true so maybe forge and fabric can be unified +//// } +//} diff --git a/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/model/ModelLoader.java b/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/model/ModelLoader.java new file mode 100644 index 0000000..20bb4cb --- /dev/null +++ b/src/main/java/org/neoflock/neocomputers/platforms/fabric/client/model/ModelLoader.java @@ -0,0 +1,25 @@ +package org.neoflock.neocomputers.platforms.fabric.client.model; + +import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.resources.ResourceLocation; +import org.neoflock.neocomputers.NeoComputers; + +public class ModelLoader implements ModelLoadingPlugin { + public static final ResourceLocation CABLE = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "cable"); + + @Override + public void onInitializeModelLoader(Context pluginContext) { + pluginContext.modifyModelOnLoad().register((original, context) -> { +// final ModelResourceLocation id = context.topLevelId(); +//// if (id != null && id.id().getNamespace().equals(NeoComputers.MODID)) NeoComputers.INSTANCE.getLOGGER().info("{} {} {}", id.id().getNamespace(), id.id().getPath(), id.id().getPath().equals(CABLE.id().getPath())); +// if (id != null && id.id().equals(CABLE)) { +//// NeoComputers.INSTANCE.getLOGGER().error("DOING CABLEEEEEEE"); +// return new CableModel(); +// } else { +// return original; +// } + return original; + }); + } +} diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt b/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt index 9351531..de145d8 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt @@ -33,6 +33,7 @@ object Blocks { val COMBUSTGEN_BLOCK: RegistrySupplier = BaseBlock.register("combustgen") { CombustionGeneratorBlock() } val CASE_BLOCK: RegistrySupplier = BaseBlock.register("case") { CaseBlock() } val REDSTONEIO_BLOCK: RegistrySupplier = BaseBlock.register("redio") { RedstoneIOBlock() } + val CABLE_BLOCK: RegistrySupplier = BaseBlock.register("cable") { CableBlock() } fun registerBlockItems() { BLOCKS.forEach(Consumer { sup: RegistrySupplier -> diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/CableBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/CableBlock.kt new file mode 100644 index 0000000..f959082 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/block/CableBlock.kt @@ -0,0 +1,115 @@ +package org.neoflock.neocomputers.block + +import net.minecraft.client.renderer.blockentity.PistonHeadRenderer +import net.minecraft.core.BlockPos +import net.minecraft.core.Direction +import net.minecraft.world.level.BlockGetter +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.EntityBlock +import net.minecraft.world.level.block.entity.BlockEntity +import net.minecraft.world.level.block.state.BlockState +import net.minecraft.world.level.block.state.StateDefinition +import net.minecraft.world.level.block.state.properties.BooleanProperty +import net.minecraft.world.phys.shapes.BooleanOp +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.CableEntity + +class CableBlock() : BaseBlock(Properties.of()), EntityBlock { + companion object { + val NORTH = BooleanProperty.create("north") + val EAST = BooleanProperty.create("east") + val WEST = BooleanProperty.create("west") + val SOUTH = BooleanProperty.create("south") + val UP = BooleanProperty.create("up") + val DOWN = BooleanProperty.create("down") + + val MIN = 0.375 + val MAX = 1-MIN + +// val shapeCache: Array = arrayOfNulls(Direction.entries.size*Direction.entries.size*Direction.entries.size*Direction.entries.size*Direction.entries.size*Direction.entries.size) +// +// fun makeShapes() { // screw perf +// for (north in arrayOf(false, true)) { // shut up +// for (east in arrayOf(false, true)) { +// for (west in arrayOf(false, true)) { +// for (south in arrayOf(false, true)) { +// for (up in arrayOf(false, true)) { +// for (down in arrayOf(false, true)) { +// val shape = makeShape(north, south, east, west, up, down) +// } +// } +// } +// } +// } +// } +// } + + fun makeShape(north: Boolean, south: Boolean, east: Boolean, west: Boolean, up: Boolean, down: Boolean): VoxelShape { + var shape = Shapes.box(MIN, MIN, MIN, MAX, MAX, MAX) + if (north) shape = Shapes.join(shape, Shapes.box(MIN, MIN, 0.0, MAX, MAX, MIN ), BooleanOp.OR) + if (south) shape = Shapes.join(shape, Shapes.box(MIN, MIN, MAX, MAX, MAX, 1.0 ), BooleanOp.OR) + if (east) shape = Shapes.join(shape, Shapes.box(MAX, MIN, MIN, 1.0, MAX, MAX), BooleanOp.OR) + if (west) shape = Shapes.join(shape, Shapes.box(0.0, MIN, MIN, MIN, MAX, MAX ), BooleanOp.OR) + if (up) shape = Shapes.join(shape, Shapes.box(MIN, MAX, MIN, MAX, 1.0, MAX), BooleanOp.OR) + if (down) shape = Shapes.join(shape, Shapes.box(MIN, 0.0, MIN, MAX, MIN, MAX ), BooleanOp.OR) + return shape + } + + fun getPropByDirection(direction: Direction): BooleanProperty { + return when (direction) { + Direction.NORTH -> NORTH + Direction.SOUTH -> SOUTH + Direction.WEST -> WEST + Direction.EAST -> EAST + Direction.UP -> UP + Direction.DOWN -> DOWN + } + } + } + + init { + registerDefaultState(stateDefinition.any() + .setValue(NORTH, false) + .setValue(EAST, false) + .setValue(WEST, false) + .setValue(SOUTH, false) + .setValue(UP, false) + .setValue(DOWN, false) + ) + } + + + override fun createBlockStateDefinition(builder: StateDefinition.Builder) { + super.createBlockStateDefinition(builder + .add(NORTH) + .add(EAST) + .add(SOUTH) + .add(WEST) + .add(UP) + .add(DOWN)) + } + + override fun newBlockEntity(pos: BlockPos, state: BlockState): BlockEntity? { + return CableEntity(pos, state) + } + + override fun getShape(state: BlockState, level: BlockGetter, pos: BlockPos, context: CollisionContext): VoxelShape? { + return makeShape(state.getValue(NORTH), state.getValue(SOUTH), state.getValue(EAST), state.getValue(WEST), state.getValue(UP), state.getValue(DOWN)) + } + + override fun neighborChanged(state: BlockState, level: Level, pos: BlockPos, neighborBlock: Block, neighborPos: BlockPos, movedByPiston: Boolean) { +// val neighbors = getNeighbourEntities(blockPos, level) +// for (dir in Direction.entries) { +// val ent = level.getBlockEntity(blockPos.relative(dir)) +// level.setBlockAndUpdate(blockPos, blockState.setValue(getPropByDirection(dir), (ent is NodeBlockEntity || ent is CableEntity))) +// } + val diff = pos.subtract(neighborPos) + val dir = Direction.fromDelta(diff.x, diff.y, diff.z)!!.opposite + val ent = level.getBlockEntity(neighborPos) + val value = ent is NodeBlockEntity || ent is CableEntity + level.setBlockAndUpdate(pos, state.setValue(getPropByDirection(dir), value)) + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt index d1b45eb..801a9dc 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt @@ -42,42 +42,48 @@ object BlockEntities { val SCREEN_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("screen") { BlockEntityType( - ::ScreenEntity, mutableSetOf(Blocks.SCREEN_BLOCK.get()), BullshitFix() + ::ScreenEntity, setOf(Blocks.SCREEN_BLOCK.get()), BullshitFix() ) } val CAPACITOR_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("capacitor") { BlockEntityType( - ::CapacitorEntityTier1, mutableSetOf(Blocks.CAPACITOR_BLOCK.get()), BullshitFix() + ::CapacitorEntityTier1, setOf(Blocks.CAPACITOR_BLOCK.get()), BullshitFix() ) } val CAPACITOR2_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("capacitor2") { BlockEntityType( - ::CapacitorEntityTier2, mutableSetOf(Blocks.CAPACITOR_BLOCK2.get()), BullshitFix() + ::CapacitorEntityTier2, setOf(Blocks.CAPACITOR_BLOCK2.get()), BullshitFix() ) } val CAPACITOR3_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("capacitor3") { BlockEntityType( - ::CapacitorEntityTier3, mutableSetOf(Blocks.CAPACITOR_BLOCK3.get()), BullshitFix() + ::CapacitorEntityTier3, setOf(Blocks.CAPACITOR_BLOCK3.get()), BullshitFix() ) } val SOLARGEN_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("solargen") { BlockEntityType( - ::SolarGeneratorBlockEntity, mutableSetOf(Blocks.SOLARGEN_BLOCK.get()), BullshitFix() + ::SolarGeneratorBlockEntity, setOf(Blocks.SOLARGEN_BLOCK.get()), BullshitFix() ) } val COMBUSTGEN_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("combustgen") { BlockEntityType( - ::CombustionGeneratorBlockEntity, mutableSetOf(Blocks.COMBUSTGEN_BLOCK.get()), BullshitFix() + ::CombustionGeneratorBlockEntity, setOf(Blocks.COMBUSTGEN_BLOCK.get()), BullshitFix() ) } val REDSTONEIO_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("redio") { BlockEntityType( - ::CombustionGeneratorBlockEntity, mutableSetOf(Blocks.REDSTONEIO_BLOCK.get()), BullshitFix() + ::CombustionGeneratorBlockEntity, setOf(Blocks.REDSTONEIO_BLOCK.get()), BullshitFix() ) } val CASE_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("case") { BlockEntityType( - ::CaseBlockEntity, mutableSetOf(Blocks.CASE_BLOCK.get()), BullshitFix() + ::CaseBlockEntity, setOf(Blocks.CASE_BLOCK.get()), BullshitFix() + ) + } + + val CABLE_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("cable") { + BlockEntityType( + ::CableEntity, setOf(Blocks.CABLE_BLOCK.get()), BullshitFix() ) } diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/CableEntity.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/CableEntity.kt new file mode 100644 index 0000000..8247435 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/CableEntity.kt @@ -0,0 +1,34 @@ +package org.neoflock.neocomputers.entity + +import net.minecraft.core.BlockPos +import net.minecraft.core.Direction +import net.minecraft.world.level.block.entity.BlockEntity +import net.minecraft.world.level.block.state.BlockState +import org.neoflock.neocomputers.block.CableBlock +import org.neoflock.neocomputers.block.NodeBlockEntity + +class CableEntity(pos: BlockPos, state: BlockState) : BlockEntity(BlockEntities.CABLE_ENTITY.get(), pos, state) { + + override fun setChanged() { + super.setChanged() +// val neighbors = getNeighbourEntities() + + for (dir in Direction.entries) { + val ent = level!!.getBlockEntity(blockPos.relative(dir)) + level!!.setBlockAndUpdate(blockPos, blockState.setValue(CableBlock.getPropByDirection(dir), (ent is NodeBlockEntity || ent is CableEntity))) + } + + } +// fun getNeighbourEntities(): List { +// val subpos = listOf( +// blockPos.offset(0, 0, 1), +// blockPos.offset(0, 0, -1), +// blockPos.offset(0, 1, 0), +// blockPos.offset(0, -1, 0), +// blockPos.offset(1, 0, 0), +// blockPos.offset(-1, 0, 0), +// ) +// +// return subpos.mapNotNull { pos -> level?.getBlockEntity(pos) } +// } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/ScreenEntity.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/ScreenEntity.kt index 602abf4..e332f2e 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/entity/ScreenEntity.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/ScreenEntity.kt @@ -72,7 +72,7 @@ class ScreenEntity(blockPos: BlockPos, blockState: BlockState) : private fun createscreenstuffs() { bound = "screen/"+node.address.toString().replace("-", "_") - NeoComputers.LOGGER.info(bound) +// NeoComputers.LOGGER.info(bound) if (level!!.isClientSide) { var renderer = BufferRenderer(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, bound), textBuf) renderer.drawBuffer() diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/render/CaseEntityRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/render/CaseEntityRenderer.kt similarity index 94% rename from src/main/kotlin/org/neoflock/neocomputers/gui/render/CaseEntityRenderer.kt rename to src/main/kotlin/org/neoflock/neocomputers/entity/render/CaseEntityRenderer.kt index 6d5ba24..5a5b7cd 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/render/CaseEntityRenderer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/render/CaseEntityRenderer.kt @@ -1,4 +1,4 @@ -package org.neoflock.neocomputers.gui.render +package org.neoflock.neocomputers.entity.render import com.mojang.blaze3d.vertex.DefaultVertexFormat import com.mojang.blaze3d.vertex.PoseStack @@ -11,11 +11,11 @@ import net.minecraft.client.renderer.RenderType import net.minecraft.client.renderer.blockentity.BlockEntityRenderer import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider import net.minecraft.core.Direction -import org.neoflock.neocomputers.NeoComputers import org.neoflock.neocomputers.block.CaseBlock import org.neoflock.neocomputers.entity.CaseBlockEntity -class CaseEntityRenderer(private val context: BlockEntityRendererProvider.Context?) : BlockEntityRenderer{ +class CaseEntityRenderer(private val context: BlockEntityRendererProvider.Context?) : + BlockEntityRenderer { val OFF = 0xFF5F855E.toInt() val GREEN = 0xFF4EDC5E.toInt() @@ -63,4 +63,4 @@ class CaseEntityRenderer(private val context: BlockEntityRendererProvider.Contex else -> return } } -} +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenEntityRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/render/ScreenEntityRenderer.kt similarity index 91% rename from src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenEntityRenderer.kt rename to src/main/kotlin/org/neoflock/neocomputers/entity/render/ScreenEntityRenderer.kt index bbcc926..c029961 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/render/ScreenEntityRenderer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/render/ScreenEntityRenderer.kt @@ -1,26 +1,20 @@ -package org.neoflock.neocomputers.gui.render +package org.neoflock.neocomputers.entity.render -import com.mojang.blaze3d.systems.RenderSystem 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 com.mojang.math.Axis -import net.minecraft.client.renderer.GameRenderer import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.RenderStateShard import net.minecraft.client.renderer.RenderType import net.minecraft.client.renderer.blockentity.BlockEntityRenderer import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider -import net.minecraft.client.renderer.blockentity.ChestRenderer import net.minecraft.core.Direction import net.minecraft.resources.ResourceLocation -import net.minecraft.world.level.block.state.properties.EnumProperty import org.neoflock.neocomputers.NeoComputers import org.neoflock.neocomputers.block.ScreenBlock import org.neoflock.neocomputers.entity.ScreenEntity - class ScreenEntityRenderer(val context: BlockEntityRendererProvider.Context?) : BlockEntityRenderer { // TODO: FORGE val RENDER_TYPE: (ResourceLocation) -> RenderType = { t: ResourceLocation -> RenderType.create( diff --git a/src/main/resources/assets/neocomputers/blockstates/cable.json b/src/main/resources/assets/neocomputers/blockstates/cable.json new file mode 100644 index 0000000..9a5cbe8 --- /dev/null +++ b/src/main/resources/assets/neocomputers/blockstates/cable.json @@ -0,0 +1,94 @@ +{ + "multipart": [ + { "apply": { "model": "neocomputers:block/cable/cable_center" }}, + { "when": { "south": true }, + "apply": { "model": "neocomputers:block/cable/cable_connection" }}, + { "when": { "east": true}, + "apply": { "model": "neocomputers:block/cable/cable_connection", "y": -90}}, + { "when": { "west": true }, + "apply": { "model": "neocomputers:block/cable/cable_connection", "y": 90}}, + { "when": { "north": true }, + "apply": { "model": "neocomputers:block/cable/cable_connection", "y": 180}}, + { "when": { "up": true }, + "apply": { "model": "neocomputers:block/cable/cable_connection", "x": 90}}, + { "when": { "down": true }, + "apply": { "model": "neocomputers:block/cable/cable_connection", "x": -90}}, + { + "when": { + "south": false, + "north": false, + "east": false, + "west": false, + "up": false, + "down": false + }, + "apply": { "model": "neocomputers:block/cable/cable_caps" } + }, + { + "when": { + "south": true, + "north": false, + "east": false, + "west": false, + "up": false, + "down": false + }, + "apply": { "model": "neocomputers:block/cable/cable_cap" } + }, + { + "when": { + "south": false, + "north": true, + "east": false, + "west": false, + "up": false, + "down": false + }, + "apply": { "model": "neocomputers:block/cable/cable_cap", "y": 180 } + }, + { + "when": { + "south": false, + "north": false, + "east": true, + "west": false, + "up": false, + "down": false + }, + "apply": { "model": "neocomputers:block/cable/cable_cap", "y": -90 } + }, + { + "when": { + "south": false, + "north": false, + "east": false, + "west": true, + "up": false, + "down": false + }, + "apply": { "model": "neocomputers:block/cable/cable_cap", "y": 90 } + }, + { + "when": { + "south": false, + "north": false, + "east": false, + "west": false, + "up": true, + "down": false + }, + "apply": { "model": "neocomputers:block/cable/cable_cap", "x": 90 } + }, + { + "when": { + "south": false, + "north": false, + "east": false, + "west": false, + "up": false, + "down": true + }, + "apply": { "model": "neocomputers:block/cable/cable_cap", "x": -90 } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/block/cable/cable_cap.json b/src/main/resources/assets/neocomputers/models/block/cable/cable_cap.json new file mode 100644 index 0000000..5a8af03 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/block/cable/cable_cap.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:block/block", + "render_type": "minecraft:solid", + "textures": { + "cap": "neocomputers:block/cable_cap" + }, + "elements": [ + { + "from": [6, 6, 5], + "to": [10, 10, 6], + "faces": { + "east": { "uv": [0,0,4,4], "texture": "#cap" }, + "west": { "uv": [0,0,4,4], "texture": "#cap" }, + "up": { "uv": [0,0,4,4], "texture": "#cap" }, + "down": { "uv": [0,0,4,4], "texture": "#cap" }, + "north": { "uv": [6, 6, 10, 10], "texture": "#cap"} + } + } + ] +} + diff --git a/src/main/resources/assets/neocomputers/models/block/cable/cable_caps.json b/src/main/resources/assets/neocomputers/models/block/cable/cable_caps.json new file mode 100644 index 0000000..3d4000f --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/block/cable/cable_caps.json @@ -0,0 +1,81 @@ +{ + "parent": "minecraft:block/block", + "render_type": "minecraft:solid", + "textures": { + "cap": "neocomputers:block/cable_cap" + }, + "elements": [ + { + "from": [6, 6, 5], + "to": [10, 10, 6], + "faces": { + "east": { "uv": [0,0,4,4], "texture": "#cap" }, + "west": { "uv": [0,0,4,4], "texture": "#cap" }, + "up": { "uv": [0,0,4,4], "texture": "#cap" }, + "down": { "uv": [0,0,4,4], "texture": "#cap" }, + "north": { "uv": [6,6,10,10], "texture": "#cap"}, + "south": { "uv": [0,0,4,4], "texture": "#cap"} + } + }, + { + "from": [6, 6, 10], + "to": [10, 10, 11], + "faces": { + "east": { "uv": [0,0,4,4], "texture": "#cap" }, + "west": { "uv": [0,0,4,4], "texture": "#cap" }, + "up": { "uv": [0,0,4,4], "texture": "#cap" }, + "down": { "uv": [0,0,4,4], "texture": "#cap" }, + "north": { "uv": [0,0,4,4], "texture": "#cap"}, + "south": { "uv": [6,6,10,10], "texture": "#cap"} + } + }, + { + "from": [5, 6, 6], + "to": [6, 10, 10], + "faces": { + "east": { "uv": [0,0,4,4], "texture": "#cap" }, + "west": { "uv": [6,6,10,10], "texture": "#cap" }, + "up": { "uv": [0,0,4,4], "texture": "#cap" }, + "down": { "uv": [0,0,4,4], "texture": "#cap" }, + "north": { "uv": [0,0,4,4], "texture": "#cap"}, + "south": { "uv": [0,0,4,4], "texture": "#cap"} + } + }, + { + "from": [10, 6, 6], + "to": [11, 10, 10], + "faces": { + "east": { "uv": [6,6,10,10], "texture": "#cap" }, + "west": { "uv": [0,0,4,4], "texture": "#cap" }, + "up": { "uv": [0,0,4,4], "texture": "#cap" }, + "down": { "uv": [0,0,4,4], "texture": "#cap" }, + "north": { "uv": [0,0,4,4], "texture": "#cap"}, + "south": { "uv": [0,0,4,4], "texture": "#cap"} + } + }, + { + "from": [6, 5, 6], + "to": [10, 6, 10], + "faces": { + "east": { "uv": [0,0,4,4], "texture": "#cap" }, + "west": { "uv": [0,0,4,4], "texture": "#cap" }, + "up": { "uv": [0,0,4,4], "texture": "#cap" }, + "down": { "uv": [6,6,10,10], "texture": "#cap" }, + "north": { "uv": [0,0,4,4], "texture": "#cap"}, + "south": { "uv": [0,0,4,4], "texture": "#cap"} + } + }, + { + "from": [6, 10, 6], + "to": [10, 11, 10], + "faces": { + "east": { "uv": [0,0,4,4], "texture": "#cap" }, + "west": { "uv": [0,0,4,4], "texture": "#cap" }, + "up": { "uv": [6,6,10,10], "texture": "#cap" }, + "down": { "uv": [0,0,4,4], "texture": "#cap" }, + "north": { "uv": [0,0,4,4], "texture": "#cap"}, + "south": { "uv": [0,0,4,4], "texture": "#cap"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/block/cable/cable_center.json b/src/main/resources/assets/neocomputers/models/block/cable/cable_center.json new file mode 100644 index 0000000..abc67d0 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/block/cable/cable_center.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:block/block", + "render_type": "minecraft:solid", + "textures": { + "cap": "neocomputers:block/cable_body" + }, + "elements": [ + { + "from": [6, 6, 6], + "to": [10, 10, 10], + "faces": { + "north": { "uv": [6,6,10,10], "texture": "#cap" }, + "east": { "uv": [6,6,10,10], "texture": "#cap" }, + "west": { "uv": [6,6,10,10], "texture": "#cap" }, + "south": { "uv": [6,6,10,10], "texture": "#cap" }, + "up": { "uv": [0,0, 5, 5], "texture": "#cap" }, + "down": { "uv": [0,0, 5, 5], "texture": "#cap" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/block/cable/cable_connection.json b/src/main/resources/assets/neocomputers/models/block/cable/cable_connection.json new file mode 100644 index 0000000..7d736ad --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/block/cable/cable_connection.json @@ -0,0 +1,21 @@ +{ + "parent": "minecraft:block/block", + "render_type": "minecraft:solid", + "textures": { + "cap": "neocomputers:block/cable_cap", + "body": "neocomputers:block/cable_body" + }, + "elements": [ + { + "from": [6, 6, 10], + "to": [10, 10, 16], + "faces": { + "east": { "uv": [4,4,11,11], "texture": "#body" }, + "west": { "uv": [4,4,11,11], "texture": "#body" }, + "up": { "uv": [4,4,11,11], "texture": "#body" }, + "down": { "uv": [4,4,11,11], "texture": "#body" }, + "south": { "uv": [6, 6, 10, 10], "texture": "#cap"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/block/cable/cable_item.json b/src/main/resources/assets/neocomputers/models/block/cable/cable_item.json new file mode 100644 index 0000000..c06c056 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/block/cable/cable_item.json @@ -0,0 +1,44 @@ +{ + "parent": "minecraft:block/block", + "render_type": "minecraft:solid", + "textures": { + "cap": "neocomputers:block/cable_cap", + "body": "neocomputers:block/cable_body" + }, + "elements": [ + { + "from": [6, -2, 6], + "to": [10, 18, 10], + "faces": { + "east": { "uv": [0,0,5,16], "texture": "#body" }, + "west": { "uv": [0,0,5,16], "texture": "#body" }, + "north": { "uv": [0,0,5,16], "texture": "#body" }, + "south": { "uv": [0,0,5,16], "texture": "#body" }, + "up": { "uv": [0,0,5,16], "texture": "#body" }, + "down": { "uv": [0,0,5,16], "texture": "#body" } + } + }, + { + "from": [4, -3, 4], + "to": [12, -2, 12], + "faces": { + "east": { "uv": [0,0,4,4], "texture": "#cap" }, + "west": { "uv": [0,0,4,4], "texture": "#cap" }, + "up": { "uv": [0,0,4,4], "texture": "#cap" }, + "down": { "uv": [4, 4, 12, 12], "texture": "#cap" }, + "north": { "uv": [0,0,4,4], "texture": "#cap"} + } + }, + { + "from": [4, 18, 4], + "to": [12, 19, 12], + "faces": { + "east": { "uv": [0,0,4,4], "texture": "#cap" }, + "west": { "uv": [0,0,4,4], "texture": "#cap" }, + "up": { "uv": [4, 4, 12, 12], "texture": "#cap" }, + "down": { "uv": [0,0,4,4], "texture": "#cap" }, + "north": { "uv": [0,0,4,4], "texture": "#cap"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/models/item/cable.json b/src/main/resources/assets/neocomputers/models/item/cable.json new file mode 100644 index 0000000..0024e35 --- /dev/null +++ b/src/main/resources/assets/neocomputers/models/item/cable.json @@ -0,0 +1,3 @@ +{ + "parent": "neocomputers:block/cable/cable_item" +} \ No newline at end of file diff --git a/src/main/resources/assets/neocomputers/textures/block/cable_body.png b/src/main/resources/assets/neocomputers/textures/block/cable_body.png new file mode 100644 index 0000000..c9a9df3 Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/cable_body.png differ diff --git a/src/main/resources/assets/neocomputers/textures/block/cable_cap.png b/src/main/resources/assets/neocomputers/textures/block/cable_cap.png new file mode 100644 index 0000000..fc8c1d8 Binary files /dev/null and b/src/main/resources/assets/neocomputers/textures/block/cable_cap.png differ diff --git a/src/main/resources/neocomputers.accesswidener b/src/main/resources/neocomputers.accesswidener index 4981511..e1340ab 100644 --- a/src/main/resources/neocomputers.accesswidener +++ b/src/main/resources/neocomputers.accesswidener @@ -1,3 +1,4 @@ accessWidener v2 named -accessible method net/minecraft/world/level/block/entity/BlockEntityType (Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;)V \ No newline at end of file +accessible method net/minecraft/world/level/block/entity/BlockEntityType (Lnet/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier;Ljava/util/Set;)V +accessible field net/minecraft/core/Direction$Plane faces [Lnet/minecraft/core/Direction; \ No newline at end of file