From a362658371b911d7c9bee4e0b6a2c9e0ca17c046 Mon Sep 17 00:00:00 2001 From: mewhenthe Date: Sat, 6 Jun 2026 12:56:01 +0200 Subject: [PATCH] just in case i fuck everything up --- rack.png | Bin 1046 -> 0 bytes .../platforms/fabric/ModMenuIntegration.java | 4 +- .../platforms/fabric/NeoComputersFabric.java | 4 +- .../client/NeoComputersFabricClient.java | 5 -- .../neoforge/NeoComputersNeoForge.java | 12 +-- .../org/neoflock/neocomputers/NeoComputers.kt | 3 + .../neocomputers/block/AssemblerBlock.kt | 16 ++++ .../org/neoflock/neocomputers/block/Blocks.kt | 2 + .../neoflock/neocomputers/block/CaseBlock.kt | 17 +---- .../neocomputers/datagen/ModelGenerator.kt | 2 +- .../neocomputers/entity/AssemblerEntity.kt | 8 ++ .../neocomputers/entity/BlockEntities.kt | 6 ++ .../neocomputers/entity/RobotEntity.kt | 6 +- .../entity/render/AssemblerEntityRenderer.kt | 46 ++++++++++++ .../entity/render/EntityRenderers.kt | 15 ++++ .../entity/render/RobotEntityRenderer.kt | 17 +++-- .../neocomputers/gui/menu/AssemblerMenu.kt | 29 ++++++++ .../neoflock/neocomputers/gui/menu/Menus.kt | 3 + .../neocomputers/gui/menu/RackMenu.kt | 1 + .../neocomputers/gui/render/BufferRenderer.kt | 2 +- .../gui/screen/AssemblerScreen.kt | 39 ++++++++++ .../neocomputers/gui/widget/ComponentSlot.kt | 5 +- .../neocomputers/gui/widget/DynamicSlot.kt | 4 +- .../neoflock/neocomputers/item/ServerItem.kt | 1 + .../org/neoflock/neocomputers/item/Tabs.kt | 36 +-------- .../neocomputers/network/PowerManager.kt | 8 +- .../neoflock/neocomputers/utils/TextBuffer.kt | 69 +++++++++++++++++- .../assets/neocomputers/atlases/gui.json | 8 -- .../neocomputers/blockstates/assembler.json | 5 ++ .../neocomputers/models/block/assembler.json | 44 +++++++++++ .../textures/block/assembler_side.png | Bin 0 -> 470 bytes .../textures/block/assembler_side_on.png | Bin 0 -> 153 bytes .../textures/block/assembler_top.png | Bin 0 -> 361 bytes .../textures/block/assembler_top_on.png | Bin 0 -> 224 bytes .../neocomputers/textures/gui/button_run.png | Bin 0 -> 329 bytes stonecutter.gradle.kts | 2 +- 36 files changed, 327 insertions(+), 92 deletions(-) delete mode 100644 rack.png create mode 100644 src/main/kotlin/org/neoflock/neocomputers/block/AssemblerBlock.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/entity/AssemblerEntity.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/entity/render/AssemblerEntityRenderer.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/entity/render/EntityRenderers.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/gui/menu/AssemblerMenu.kt create mode 100644 src/main/kotlin/org/neoflock/neocomputers/gui/screen/AssemblerScreen.kt delete mode 100644 src/main/resources/assets/neocomputers/atlases/gui.json create mode 100644 src/main/resources/assets/neocomputers/blockstates/assembler.json create mode 100644 src/main/resources/assets/neocomputers/models/block/assembler.json create mode 100644 src/main/resources/assets/neocomputers/textures/block/assembler_side.png create mode 100644 src/main/resources/assets/neocomputers/textures/block/assembler_side_on.png create mode 100644 src/main/resources/assets/neocomputers/textures/block/assembler_top.png create mode 100644 src/main/resources/assets/neocomputers/textures/block/assembler_top_on.png create mode 100644 src/main/resources/assets/neocomputers/textures/gui/button_run.png diff --git a/rack.png b/rack.png deleted file mode 100644 index 3b1deb3ecb2336570baf69954dac6710550aa362..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1046 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5FjO4;u=vBoS#-wo>-L1;Fyx1 zl&avFo0y&&l$w}QS$Hzl2B^q8z$e7@$dMx*9UcGw|2H-^28sm)1T;6@DBXMT#Hsk( zwWW0@<8^g)`}-$^hKAm`^I_2vzpShcZ{A$F`SR6=+c(n}`)y83xc%lz!pylq6OL*` zi-7G8@(TuXu>uB06RzzH49qs3E{-7;x8B@|EWTwR!WNJ-dBcvE`+ofYe~D}BF_R|? z*Dhr#Jb%2q?WE74&S|f^6ODauml;hxpLXlp+b8^u$LE+xEURO6@Ls?Fehk;1)0#{h zGFAEc_189CWteToSZ3MCc+NZFuG$SfhaajN&Rg#Nm)UwiR;O_T!^7zZ6xBbdS?D*~ z{nEVP%4+c}f~nB_;D_Z0j?X#3@bnjB{eN~I=kNB1tr*@H$4Nf;_~-E9Jjr*{A0|r5 z{SLpy9QRQqg4^IpNh(9#lP#vqZF_Ql8!;3+FZpxy!Uvn@^^w0`KTrI1_p?Fllyiqe z=A1tqvg8Wuk2%4t3#zB>Q#cU8lc32wi%G+r+3v}e8_ZISGpwDS`ZrcF+ z(sUi$YsQe3%w~a%`<`CO=rCalSg(4GMuE&I#>cWsz)pp z$$Ker#&^z%(gSrpd<8-syc1ZesvCkLGT>-NaNS|Vixvx;0ef|pDjw<&b*XDt;3ksORwqu{;uWR!z3T|RSkpOY5 zoUELtVTd}oXRtP$=VfAeFnRH=L$A=~9l|5RBm4yz8lq2Kz8qZHkU2X>+Ecb6^R|G) x$LsY>Gq$}=S;ZuP&9Uevq4Eo+|I|Fd;KBWW)*OXfz@>DpvwRN diff --git a/src/main/java/org/neoflock/neocomputers/platforms/fabric/ModMenuIntegration.java b/src/main/java/org/neoflock/neocomputers/platforms/fabric/ModMenuIntegration.java index 7c7a5d6..df742f9 100644 --- a/src/main/java/org/neoflock/neocomputers/platforms/fabric/ModMenuIntegration.java +++ b/src/main/java/org/neoflock/neocomputers/platforms/fabric/ModMenuIntegration.java @@ -1,5 +1,5 @@ //? if fabric { -package org.neoflock.neocomputers.platforms.fabric; +/*package org.neoflock.neocomputers.platforms.fabric; import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; @@ -10,4 +10,4 @@ public class ModMenuIntegration implements ModMenuApi { return ConfigScreen::createConfigScreen; } } -//?} +*///?} diff --git a/src/main/java/org/neoflock/neocomputers/platforms/fabric/NeoComputersFabric.java b/src/main/java/org/neoflock/neocomputers/platforms/fabric/NeoComputersFabric.java index 5503c9b..a78593e 100644 --- a/src/main/java/org/neoflock/neocomputers/platforms/fabric/NeoComputersFabric.java +++ b/src/main/java/org/neoflock/neocomputers/platforms/fabric/NeoComputersFabric.java @@ -1,5 +1,5 @@ //? if fabric { -package org.neoflock.neocomputers.platforms.fabric; +/*package org.neoflock.neocomputers.platforms.fabric; import org.neoflock.neocomputers.ModPlatform; import net.fabricmc.api.ModInitializer; @@ -24,4 +24,4 @@ public class NeoComputersFabric implements ModInitializer { } } } -//?} \ No newline at end of file +*///?} \ No newline at end of file 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 10091bb..233ac34 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 @@ -21,11 +21,6 @@ public class NeoComputersFabricClient implements ClientModInitializer { @Override public void onInitializeClient() { ModelLoadingPlugin.register(new ModelLoader()); - 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/java/org/neoflock/neocomputers/platforms/neoforge/NeoComputersNeoForge.java b/src/main/java/org/neoflock/neocomputers/platforms/neoforge/NeoComputersNeoForge.java index 6afd1e4..cd5c939 100644 --- a/src/main/java/org/neoflock/neocomputers/platforms/neoforge/NeoComputersNeoForge.java +++ b/src/main/java/org/neoflock/neocomputers/platforms/neoforge/NeoComputersNeoForge.java @@ -1,5 +1,5 @@ //? if neoforge { -/*package org.neoflock.neocomputers.platforms.neoforge; +package org.neoflock.neocomputers.platforms.neoforge; import org.neoflock.neocomputers.ConfigScreen; import org.neoflock.neocomputers.ModPlatform; @@ -8,8 +8,8 @@ import net.neoforged.fml.ModLoadingContext; import net.neoforged.fml.common.Mod; import org.neoflock.neocomputers.NeoComputers; //? if <1.21 { -/^import net.neoforged.neoforge.client.ConfigScreenHandler; -^///?} else { +/*import net.neoforged.neoforge.client.ConfigScreenHandler; +*///?} else { import net.neoforged.neoforge.client.gui.IConfigScreenFactory; //?} @Mod("neocomputers") @@ -18,11 +18,11 @@ public class NeoComputersNeoForge { NeoComputers.INSTANCE.entrypoint(new NeoForgePlatform()); ModLoadingContext.get().registerExtensionPoint( //? if <1.21 { - /^ConfigScreenHandler.ConfigScreenFactory.class, + /*ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory( ((client, parent) -> ConfigScreen.createConfigScreen(parent)) ) - ^///?} else { + *///?} else { IConfigScreenFactory.class, () -> (client, parent) -> ConfigScreen.createConfigScreen(parent) //?} @@ -40,4 +40,4 @@ public class NeoComputersNeoForge { } } } -*///?} \ No newline at end of file +//?} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt index 8657ceb..12c59e2 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/NeoComputers.kt @@ -13,8 +13,10 @@ import org.neoflock.neocomputers.gui.menu.Menus import dev.architectury.utils.Env import dev.architectury.utils.EnvExecutor import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers import net.minecraft.server.level.ServerPlayer import org.neoflock.neocomputers.block.DeviceBlockEntity +import org.neoflock.neocomputers.entity.render.EntityRenderers import org.neoflock.neocomputers.gui.render.ScreenRenderer import org.neoflock.neocomputers.gui.widget.ComponentRoles import org.neoflock.neocomputers.item.Items @@ -59,6 +61,7 @@ object NeoComputers { Networking.allNodes.remove() Networking.wirelessNodes.remove() Networking.channels.remove() + EntityRenderers.registerBlockEntityRenderers() } ClientLifecycleEvent.CLIENT_STARTED.register { FontProvider.load(ResourceLocation.fromNamespaceAndPath(MODID, "font/unscii.hex")) diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/AssemblerBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/AssemblerBlock.kt new file mode 100644 index 0000000..1c5d687 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/block/AssemblerBlock.kt @@ -0,0 +1,16 @@ +package org.neoflock.neocomputers.block + +import net.minecraft.core.BlockPos +import net.minecraft.world.level.block.EntityBlock +import net.minecraft.world.level.block.entity.BlockEntity +import net.minecraft.world.level.block.state.BlockState +import org.neoflock.neocomputers.entity.AssemblerEntity + +class AssemblerBlock : BaseBlock(), EntityBlock { // TODO: component stuff + override fun newBlockEntity( + pos: BlockPos, + state: BlockState + ): BlockEntity? { + return AssemblerEntity(pos, state) + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt b/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt index 1338371..caae203 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/Blocks.kt @@ -5,6 +5,7 @@ import dev.architectury.registry.registries.DeferredRegister import dev.architectury.registry.registries.Registrar import dev.architectury.registry.registries.RegistrarManager import dev.architectury.registry.registries.RegistrySupplier +import net.minecraft.client.renderer.RenderType import net.minecraft.core.registries.Registries import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceKey @@ -37,6 +38,7 @@ object Blocks { val RELAY_BLOCK: RegistrySupplier = BaseBlock.register("relay") { RelayBlock() } val ROBOT_BLOCK: RegistrySupplier = BaseBlock.register("robot") { RobotBlock() } val RACK_BLOCK: RegistrySupplier = BaseBlock.register("rack") { RackBlock() } + val ASSEMBLER_BLOCK: RegistrySupplier = BaseBlock.register("assembler") { AssemblerBlock() } fun registerBlockItems() { BLOCKS.forEach(Consumer { sup: RegistrySupplier -> diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/CaseBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/CaseBlock.kt index cb05c9b..aa43db7 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/CaseBlock.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/CaseBlock.kt @@ -3,36 +3,23 @@ package org.neoflock.neocomputers.block; import dev.architectury.registry.menu.MenuRegistry import net.minecraft.core.BlockPos import net.minecraft.core.Direction -import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerPlayer -import net.minecraft.sounds.SoundEvent -import net.minecraft.sounds.SoundEvents -import net.minecraft.sounds.SoundSource -import net.minecraft.util.RandomSource import net.minecraft.world.Containers import net.minecraft.world.InteractionResult -import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.player.Player -import net.minecraft.world.item.ItemStack import net.minecraft.world.item.context.BlockPlaceContext 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.FurnaceBlock import net.minecraft.world.level.block.SoundType 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.level.block.state.properties.EnumProperty import net.minecraft.world.phys.BlockHitResult -import org.neoflock.neocomputers.NeoComputers -import org.neoflock.neocomputers.block.CombustionGeneratorBlock.Companion.COMBUSTGEN_ACTIVE import org.neoflock.neocomputers.entity.BlockEntities import org.neoflock.neocomputers.entity.CaseBlockEntity -import org.neoflock.neocomputers.entity.MachineEntity import org.neoflock.neocomputers.network.NodeSynchronizer -import org.neoflock.neocomputers.sounds.Sounds class CaseBlock() : DeviceBlock(Properties.of().sound(SoundType.METAL).lightLevel(CaseBlock::getLuminance).noOcclusion()) { // placeholder stuff companion object { @@ -71,7 +58,7 @@ class CaseBlock() : DeviceBlock(Properties.of().sound(SoundType.METAL).lightLeve } override fun onPlace( - blockState: BlockState, + state: BlockState, level: Level, blockPos: BlockPos, blockState2: BlockState, @@ -81,7 +68,7 @@ class CaseBlock() : DeviceBlock(Properties.of().sound(SoundType.METAL).lightLeve level.updateNeighborsAt(blockPos, this) getMachine(level, blockPos).refetchAllRedstone() } - super.onPlace(blockState, level, blockPos, blockState2, bl) + super.onPlace(state, level, blockPos, blockState2, bl) } override fun getStateForPlacement(context: BlockPlaceContext): BlockState? { diff --git a/src/main/kotlin/org/neoflock/neocomputers/datagen/ModelGenerator.kt b/src/main/kotlin/org/neoflock/neocomputers/datagen/ModelGenerator.kt index 3653424..8ea8ba5 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/datagen/ModelGenerator.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/datagen/ModelGenerator.kt @@ -16,7 +16,7 @@ class ModelGenerator(output: FabricDataOutput) : FabricModelProvider(output) { } override fun generateItemModels(itemModelGenerator: ItemModelGenerators) { - itemModelGenerator.generateFlatItem(Items.SERVER0.get(), ModelTemplates.FLAT_ITEM) +// itemModelGenerator.generateFlatItem(Items.SERVER0.get(), ModelTemplates.FLAT_ITEM) } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/AssemblerEntity.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/AssemblerEntity.kt new file mode 100644 index 0000000..1cf019a --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/AssemblerEntity.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 AssemblerEntity(pos: BlockPos, state: BlockState) : BlockEntity(BlockEntities.ASSEMBLER_ENTITY.get(), pos, state) { +} \ 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 27b4737..309dbd0 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/BlockEntities.kt @@ -106,6 +106,12 @@ object BlockEntities { ) } + val ASSEMBLER_ENTITY: RegistrySupplier> = BLOCKENTITIES.register("assembler") { + BlockEntityType( + ::AssemblerEntity, setOf(Blocks.ASSEMBLER_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/RobotEntity.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/RobotEntity.kt index 8cd41a0..3ff975e 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/entity/RobotEntity.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/RobotEntity.kt @@ -2,13 +2,17 @@ package org.neoflock.neocomputers.entity import net.minecraft.client.model.geom.ModelPart import net.minecraft.core.BlockPos +import net.minecraft.network.chat.Component +import net.minecraft.world.Nameable import net.minecraft.world.level.block.entity.BlockEntity +import net.minecraft.world.level.block.entity.RandomizableContainerBlockEntity import net.minecraft.world.level.block.state.BlockState import org.neoflock.neocomputers.NeoComputers -class RobotEntity(pos: BlockPos, state: BlockState) : BlockEntity(BlockEntities.ROBOT_ENTITY.get(), pos, state,) { +class RobotEntity(pos: BlockPos, state: BlockState) : BlockEntity(BlockEntities.ROBOT_ENTITY.get(), pos, state,), Nameable { val body: ModelPart? = null val name = "Diddyx" //TODO: names + override fun getName(): Component? = Component.literal(name) init { NeoComputers.LOGGER.info("yooo") diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/render/AssemblerEntityRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/render/AssemblerEntityRenderer.kt new file mode 100644 index 0000000..a73e3d0 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/render/AssemblerEntityRenderer.kt @@ -0,0 +1,46 @@ +package org.neoflock.neocomputers.entity.render + +import com.mojang.blaze3d.vertex.DefaultVertexFormat +import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.blaze3d.vertex.VertexFormat +import com.mojang.math.Axis +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.resources.ResourceLocation +import org.neoflock.neocomputers.NeoComputers +import org.neoflock.neocomputers.entity.AssemblerEntity + +class AssemblerEntityRenderer(val context: BlockEntityRendererProvider.Context) : BlockEntityRenderer { + val RENDER_TYPE = {l: ResourceLocation -> + RenderType.create("nc_assembler", DefaultVertexFormat.POSITION_TEX, VertexFormat.Mode.QUADS, RenderType.TRANSIENT_BUFFER_SIZE, RenderType.CompositeState.builder() + .setTextureState(RenderStateShard.TextureStateShard(l, false, false)) + .setShaderState(RenderStateShard.ShaderStateShard.POSITION_TEX_SHADER) + .createCompositeState(false)) + } + + override fun render(blockEntity: AssemblerEntity, partialTick: Float, poseStack: PoseStack, bufferSource: MultiBufferSource, packedLight: Int, packedOverlay: Int) { + var buffer = bufferSource.getBuffer(RENDER_TYPE(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/block/assembler_top_on.png"))) + val pose = poseStack.last() + buffer.addVertex(pose, 0f, 17/16f, 1f).setUv(1f, 0f) + buffer.addVertex(pose, 1f, 17/16f, 1f).setUv(1f, 1f) + buffer.addVertex(pose, 1f, 17/16f, 0f).setUv(0f, 1f) + buffer.addVertex(pose, 0f, 17/16f, 0f).setUv(0f, 0f) + + // TODO: do assembling texture + buffer = bufferSource.getBuffer(RENDER_TYPE(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/block/assembler_side_on.png"))) + poseStack.pushPose() + for (i in 0..3) { + val pose = poseStack.last() + buffer.addVertex(pose, 1.001f, 1f, 0f).setUv(0f, 0f) + buffer.addVertex(pose, 1.001f, 1f, 1f).setUv(1f, 0f) + buffer.addVertex(pose, 1.001f, 0f, 1f).setUv(1f, 1f) + buffer.addVertex(pose, 1.001f, 0f, 0f).setUv(0f, 1f) + poseStack.rotateAround(Axis.YP.rotationDegrees(90f), 0.5f, 0.5f, 0.5f) + } + poseStack.popPose() + + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/render/EntityRenderers.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/render/EntityRenderers.kt new file mode 100644 index 0000000..5fba3af --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/render/EntityRenderers.kt @@ -0,0 +1,15 @@ +package org.neoflock.neocomputers.entity.render + +import net.minecraft.client.renderer.blockentity.BlockEntityRenderers +import org.neoflock.neocomputers.entity.BlockEntities + +object EntityRenderers { + fun registerBlockEntityRenderers() { + BlockEntityRenderers.register(BlockEntities.SCREEN_ENTITY.get(), ::ScreenEntityRenderer); // TODO: put this in common + BlockEntityRenderers.register(BlockEntities.CASE_ENTITY.get(), ::CaseEntityRenderer); + BlockEntityRenderers.register(BlockEntities.RELAY_ENTITY.get(), ::RelayEntityRenderer); + BlockEntityRenderers.register(BlockEntities.ROBOT_ENTITY.get(), ::RobotEntityRenderer); + BlockEntityRenderers.register(BlockEntities.RACK_ENTITY.get(), ::RackEntityRenderer); + BlockEntityRenderers.register(BlockEntities.ASSEMBLER_ENTITY.get(), ::AssemblerEntityRenderer) + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/entity/render/RobotEntityRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/entity/render/RobotEntityRenderer.kt index c7576bf..0403418 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/entity/render/RobotEntityRenderer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/entity/render/RobotEntityRenderer.kt @@ -20,6 +20,8 @@ import net.minecraft.client.renderer.block.ModelBlockRenderer import net.minecraft.client.renderer.block.model.BakedQuad import net.minecraft.client.renderer.blockentity.BlockEntityRenderer import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider +import net.minecraft.client.renderer.blockentity.ChestRenderer +import net.minecraft.client.renderer.entity.EntityRenderer import net.minecraft.client.renderer.entity.LivingEntityRenderer import net.minecraft.client.renderer.texture.OverlayTexture import net.minecraft.client.renderer.texture.TextureAtlas @@ -33,6 +35,7 @@ import net.minecraft.network.chat.Component import net.minecraft.resources.ResourceLocation import net.minecraft.util.RandomSource import net.minecraft.world.item.DyeColor +import net.minecraft.world.level.block.entity.ChestBlockEntity import net.minecraft.world.phys.Vec3 import org.neoflock.neocomputers.NeoComputers import org.neoflock.neocomputers.block.model.RobotModel @@ -51,6 +54,7 @@ class RobotEntityRenderer(val context: BlockEntityRendererProvider.Context) : Bl CompositeState.builder() .setShaderState(RenderStateShard.ShaderStateShard { GameRenderer.getPositionTexColorShader() }) .setTransparencyState(RenderStateShard.ADDITIVE_TRANSPARENCY) + .setCullState(RenderStateShard.CullStateShard.NO_CULL) .setTextureState(RenderStateShard.TextureStateShard(ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/block/robot.png"), false, false)) .createCompositeState(false)) @@ -70,9 +74,10 @@ class RobotEntityRenderer(val context: BlockEntityRendererProvider.Context) : Bl // TODO: crafting table and chest little models +// EntityRenderer - poseStack.popPose() renderTag(ent, Component.literal(ent.name), poseStack, bufferSource, packedLight, partialTick) + poseStack.popPose() } // offset is 0-15 @@ -106,16 +111,18 @@ class RobotEntityRenderer(val context: BlockEntityRendererProvider.Context) : Bl stack.pushPose() stack.translate(vec.x, vec.y, vec.z) -// stack.mulPose(context.entityRenderer.cameraOrientation()) + stack.mulPose(context.entityRenderer.cameraOrientation()) stack.scale(0.025F, -0.025F, 0.025F) val opacity = Minecraft.getInstance().options.getBackgroundOpacity(0.25F) val alpha: Int = (opacity * 255.0f).toInt() shl 24 // val alpha = 255 val halfwidth = (-context.font.width(name)) / 2; - RenderSystem.disableDepthTest() - context.font.drawInBatch(name, halfwidth.toFloat(), 2f, 0xFFFFFF, false, stack.last().pose(), source, Font.DisplayMode.SEE_THROUGH, alpha, light) +// RenderSystem.enableDepthTest() +// RenderSystem.enableBlend() +// RenderSystem.depthMask(true) - RenderSystem.enableDepthTest() + context.font.drawInBatch(name, halfwidth.toFloat(), 2f, 0xFFFFFF, false, stack.last().pose(), source, Font.DisplayMode.SEE_THROUGH, alpha, light) + (source as MultiBufferSource.BufferSource).endBatch() stack.popPose() } diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/AssemblerMenu.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/AssemblerMenu.kt new file mode 100644 index 0000000..a42ea78 --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/AssemblerMenu.kt @@ -0,0 +1,29 @@ +package org.neoflock.neocomputers.gui.menu + +import net.fabricmc.fabric.mixin.item.client.HeldItemRendererMixin +import net.minecraft.client.gui.MapRenderer +import net.minecraft.client.renderer.entity.ItemRenderer +import net.minecraft.world.Container +import net.minecraft.world.SimpleContainer +import net.minecraft.world.entity.player.Inventory +import net.minecraft.world.item.ItemStack +import org.neoflock.neocomputers.block.Blocks +import org.neoflock.neocomputers.gui.widget.DynamicSlot +import org.neoflock.neocomputers.utils.GenericContainer +import org.neoflock.neocomputers.utils.GenericContainerMenu + +class CaseSlot(container: Container, index: Int, x: Int, y: Int) : DynamicSlot(container, index, x, y) { + val caseItems = listOf(Blocks.CASE_BLOCK.get().asItem()) + + override fun mayPlace(stack: ItemStack): Boolean = stack.item in caseItems +} + +class AssemblerMenu : GenericContainerMenu { + + constructor(id: Int, inv: Inventory) : this(id, inv, SimpleContainer(1)) + constructor(id: Int, inv: Inventory, container: Container) : super(Menus.ASSEMBLER_MENU.get(), id, container) { + this.addSlot(CaseSlot(container, 0, 12, 12)) + + this.addInventoryHotbar(inv, 8, 84) + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/Menus.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/Menus.kt index 530669d..4317fea 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/Menus.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/Menus.kt @@ -10,6 +10,7 @@ import net.minecraft.world.flag.FeatureFlags import net.minecraft.world.inventory.MenuType import org.neoflock.neocomputers.NeoComputers import org.neoflock.neocomputers.gui.menu.ScreenMenu +import org.neoflock.neocomputers.gui.screen.AssemblerScreen import org.neoflock.neocomputers.gui.screen.CaseScreen import org.neoflock.neocomputers.gui.screen.CombustionGeneratorScreen import org.neoflock.neocomputers.gui.screen.RackScreen @@ -24,6 +25,7 @@ object Menus { val CASE_MENU: RegistrySupplier> = MENUS.register("case_menu") { MenuType(::CaseMenu, FeatureFlagSet.of() )} val RELAY_MENU: RegistrySupplier> = MENUS.register("relay_menu") { MenuType(::RelayMenu, FeatureFlagSet.of() )} val RACK_MENU: RegistrySupplier> = MENUS.register("rack_menu") { MenuRegistry.ofExtended(::RackMenu) } + val ASSEMBLER_MENU: RegistrySupplier> = MENUS.register("assembler_menu") { MenuType(::AssemblerMenu, FeatureFlagSet.of() )} // val RACK_MENU: RegistrySupplier> = MENUS.register("rack_menu") { MenuType(::RackMenu, FeatureFlagSet.of() )} fun registerScreens() { @@ -32,5 +34,6 @@ object Menus { MenuScreens.register(Menus.CASE_MENU.get(), ::CaseScreen) MenuScreens.register(Menus.RELAY_MENU.get(), ::RelayScreen) MenuScreens.register(Menus.RACK_MENU.get(), ::RackScreen) + MenuScreens.register(Menus.ASSEMBLER_MENU.get(), ::AssemblerScreen) } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/RackMenu.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/RackMenu.kt index 8f9c4ae..c2ba79e 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/menu/RackMenu.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/menu/RackMenu.kt @@ -31,6 +31,7 @@ import org.neoflock.neocomputers.utils.GenericContainerMenu class RackSlot(container: Container, slot: Int, x: Int, y: Int) : DynamicSlot(container, slot, x, y), GuiEventListener { // i hate that i made this, my regret is immeasurable + // i genuinely cant help myself val MAIN_COLOURS = listOf(0xff8382d8.toInt(), 0xff75bdc1.toInt(), 0xffc8ca5f.toInt(), 0xffdb7d75.toInt(), 0xff7ec95f.toInt()) val DARK_COLOURS = listOf(0xff6a6ab0.toInt(), 0xff60999d.toInt(), 0xffa2a44e.toInt(), 0xffb36660.toInt(), 0xff67a34e.toInt()) val LIGHT_COLOURS = listOf(0xffdcdcf0.toInt(), 0xffdcdcf0.toInt(), 0xffececd4.toInt(), 0xfff0dbd9.toInt(), 0xffdbecd4.toInt()) diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt index 8a356c6..8fb58d2 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/render/BufferRenderer.kt @@ -13,7 +13,7 @@ import java.io.File import kotlin.experimental.and import kotlin.experimental.xor -class BufferRenderer(private var id: ResourceLocation, private var buffer: TextBuffer) { // TODO: NN buffer +class BufferRenderer(private var id: ResourceLocation, var buffer: TextBuffer) { // TODO: NN buffer val CHARW = 8 val CHARH = 16 diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/screen/AssemblerScreen.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/screen/AssemblerScreen.kt new file mode 100644 index 0000000..d192d8b --- /dev/null +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/screen/AssemblerScreen.kt @@ -0,0 +1,39 @@ +package org.neoflock.neocomputers.gui.screen + +import io.netty.buffer.Unpooled +import net.minecraft.client.gui.GuiGraphics +import net.minecraft.network.FriendlyByteBuf +import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.entity.player.Inventory +import org.neoflock.neocomputers.NeoComputers +import org.neoflock.neocomputers.gui.menu.AssemblerMenu +import org.neoflock.neocomputers.gui.menu.CaseMenu +import org.neoflock.neocomputers.gui.widget.ButtonSprites +import org.neoflock.neocomputers.gui.widget.ImagerButton +import org.neoflock.neocomputers.network.NodeSynchronizer +import org.neoflock.neocomputers.utils.GenericContainerScreen + +class AssemblerScreen : GenericContainerScreen { + private var btn: ImagerButton? = null + private val PCB: ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/computer.png") + private val BTN: ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/button_power.png") + + constructor(abstractContainerMenu: AssemblerMenu, inventory: Inventory, component: Component) : super(abstractContainerMenu, inventory, component) { + btn = ImagerButton( + 8, 104, + 18, 18, + ButtonSprites(BTN, 18, 18, 36, 36) + ) { +// val buf = FriendlyByteBuf(Unpooled.buffer()) +// buf.writeByte(if(isOn) 0x02 else 0x01) +// NodeSynchronizer.sendScreenInteraction(buf) + } + + addWidget(btn!!) + } + + override fun renderbg(guiGraphics: GuiGraphics, f: Float, i: Int, j: Int) { + guiGraphics.blit(PCB, 0, 0, 0, 0, this.imageWidth, this.imageHeight) // WE'RE FREE + } +} \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt index df86936..41977ce 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/ComponentSlot.kt @@ -83,13 +83,10 @@ data class ComponentSlotRequirement(val tier: Int, val role: String) { // Tier 0 allows ALL tiers, making it completely untiered. // Role determines what the role is. -class ComponentSlot(container: Container, slot: Int, x: Int, y: Int, val machine: ComponentUser?, val requirement: ComponentSlotRequirement): DynamicSlot(container, slot, x, y) { +class ComponentSlot(container: Container, slot: Int, x: Int, y: Int, val machine: ComponentUser?, var requirement: ComponentSlotRequirement): DynamicSlot(container, slot, x, y) { override fun draw(graphics: GuiGraphics, mouseX: Int, mouseY: Int) { super.draw(graphics, mouseX, mouseY) if(!hasItem()) { -// RenderSystem.enableBlend() -// RenderSystem.setShaderTexture(0, ComponentRoles.getTextureFor(requirement.role)) -// RenderSystem.setShader { GameRenderer.getPositionTexShader() } drawQuad(graphics, ComponentRoles.getTextureFor(requirement.role), x - 1, y - 1, 18, 18, 0F, 0F, 15F, 15F) if (requirement.tier > 0) { RenderSystem.setShaderTexture( diff --git a/src/main/kotlin/org/neoflock/neocomputers/gui/widget/DynamicSlot.kt b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/DynamicSlot.kt index d7e803d..6c885c8 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/gui/widget/DynamicSlot.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/gui/widget/DynamicSlot.kt @@ -17,7 +17,7 @@ import net.minecraft.world.Container import net.minecraft.world.inventory.Slot import org.neoflock.neocomputers.NeoComputers -open class DynamicSlot(container: Container, slot: Int, x: Int, y: Int) : Slot(container, slot, x, y) { +open class DynamicSlot(container: Container, slot: Int, x: Int, y: Int, var active: Boolean = true) : Slot(container, slot, x, y) { val BACKGROUND: ResourceLocation = ResourceLocation.fromNamespaceAndPath(NeoComputers.MODID, "textures/gui/slots/slot.png") val RENDER_TYPE = { r: ResourceLocation -> @@ -42,4 +42,6 @@ open class DynamicSlot(container: Container, slot: Int, x: Int, y: Int) : Slot(c builder.addVertex(pose, x.toFloat(), y.toFloat(), 1f).setUv(u1/15F,v1/15F) } + override fun isActive() = active + } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/ServerItem.kt b/src/main/kotlin/org/neoflock/neocomputers/item/ServerItem.kt index d52744a..551658e 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/ServerItem.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/ServerItem.kt @@ -2,6 +2,7 @@ package org.neoflock.neocomputers.item import com.mojang.blaze3d.vertex.PoseStack import net.minecraft.client.renderer.MultiBufferSource +import net.minecraft.client.renderer.entity.ItemRenderer import net.minecraft.client.renderer.item.ItemProperties import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack diff --git a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt index e6461b6..a819201 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/item/Tabs.kt @@ -23,39 +23,9 @@ object Tabs { ItemStack(Items.MEM0.get()) } builder.displayItems { parameters, output -> - // TODO: get rid of arch$tab and this shi and replace with loop over items registry - output.accept(ItemStack(Items.CPU0.get())) - output.accept(ItemStack(Items.CPU1.get())) - output.accept(ItemStack(Items.CPU2.get())) - - output.accept(ItemStack(Items.CBUS0.get())) - output.accept(ItemStack(Items.CBUS1.get())) - output.accept(ItemStack(Items.CBUS2.get())) - output.accept(ItemStack(Items.CBUS_CREATIVE.get())) - - output.accept(ItemStack(Items.DATA0.get())) - output.accept(ItemStack(Items.DATA1.get())) - output.accept(ItemStack(Items.DATA2.get())) - - output.accept(ItemStack(Items.GPU0.get())) - output.accept(ItemStack(Items.GPU1.get())) - output.accept(ItemStack(Items.GPU2.get())) - - output.accept(ItemStack(Items.HDD0.get())) - output.accept(ItemStack(Items.HDD1.get())) - output.accept(ItemStack(Items.HDD2.get())) - - output.accept(ItemStack(Items.INET.get())) - output.accept(ItemStack(Items.TUNNEL.get())) - output.accept(ItemStack(Items.LAN.get())) - output.accept(ItemStack(Items.WLAN0.get())) - output.accept(ItemStack(Items.WLAN1.get())) - - output.accept(ItemStack(Items.REDIO0.get())) - output.accept(ItemStack(Items.REDIO1.get())) - - output.accept(ItemStack(Items.EE0.get())) - output.accept(ItemStack(Items.SERVER0.get())) + Items.ITEMS.forEach { + output.accept(ItemStack(it.get())) + } // Criminal black magic to put LuaBIOS EEPROM in the tabs do { diff --git a/src/main/kotlin/org/neoflock/neocomputers/network/PowerManager.kt b/src/main/kotlin/org/neoflock/neocomputers/network/PowerManager.kt index 2043929..6c1a7b2 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/network/PowerManager.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/network/PowerManager.kt @@ -3,10 +3,10 @@ package org.neoflock.neocomputers.network import net.minecraft.world.level.block.entity.BlockEntityType import org.neoflock.neocomputers.block.DeviceBlockEntity //? if fabric { -import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext +/*import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext import net.minecraft.core.Direction import team.reborn.energy.api.EnergyStorage; -//?} +*///?} // our soul purpose is to fuse bullshit power APIs together // the NodeBlockEntity and Node given us a way to get power from a block, we just @@ -14,7 +14,7 @@ import team.reborn.energy.api.EnergyStorage; object PowerManager { fun registerPowerDevice(blockEntityType: BlockEntityType) { //? if fabric { - EnergyStorage.SIDED.registerForBlockEntity({ + /*EnergyStorage.SIDED.registerForBlockEntity({ // TODO: as this is currently written, if the node instance changes and the mod cached the conversion, we're boned. Consider fixing it. entity, dir -> val node = entity.getNodeFromSide(dir ?: Direction.UP) @@ -41,6 +41,6 @@ object PowerManager { } } }, blockEntityType); - //?} + *///?} } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/utils/TextBuffer.kt b/src/main/kotlin/org/neoflock/neocomputers/utils/TextBuffer.kt index 232d08d..d3d5c57 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/utils/TextBuffer.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/utils/TextBuffer.kt @@ -1,14 +1,73 @@ package org.neoflock.neocomputers.utils +import com.mojang.blaze3d.platform.NativeImage +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.texture.DynamicTexture import net.minecraft.network.FriendlyByteBuf +import net.minecraft.resources.ResourceLocation +import net.minecraft.util.ResourceLocationPattern +import org.neoflock.neocomputers.gui.widget.DynamicSlot +import kotlin.experimental.and import kotlin.math.min data class GPUChar(val c: Char, val fg: Int =0xFFFFFF, val bg: Int = 0) // all is bgr // TODO: wrapper over NN buffer class TextBuffer(var width: Int, var height: Int) { +// val CHARW = 8 +// val CHARH = 16 +// +// val texwidth: Int +// get() = width*CHARW +// +// val texheight: Int +// get() = height*CHARH +// +// var image = NativeImage(texwidth, texheight, true) +// var tex = DynamicTexture(image) + + val blank = GPUChar(' ') var buf = Array(width*height) { blank } +// init { +// Minecraft.getInstance().textureManager.register(this.id, tex) +// } + +// fun toRGBA(color: Int): Int { +// // Minecaft lies, its AGBR +// return java.lang.Integer.reverseBytes((color.toLong() * 256 + 0xFF).toInt()) +// } +// +// fun drawGlyph(x: Int, y: Int, c: Char, fg: Int) { +// var glyph: ArrayList = FontProvider.map[c]!! +// +// for (j in 0.. 0) image.setPixelRGBA(x+i, y+j, toRGBA(fg)) +// } +// } +// } +// +// fun drawBuffer() { +// for (i in 0..= 0 && y >= 0 && x < width && y < height fun get(x: Int, y: Int) = if(inBounds(x, y)) buf[x+y*width] else blank - fun set(x: Int, y: Int, pixel: GPUChar) { + fun _set(x: Int, y: Int, pixel: GPUChar) { if(!inBounds(x, y)) return buf[x+y*width] = pixel +// image.fillRect(x, y, CHARW, CHARH, toRGBA(pixel.bg)) +// if (pixel.c != ' ' && pixel.c != '\u0000') drawGlyph(x, y, pixel.c, pixel.fg) } fun set(x: Int, y: Int, text: String, fg: Int = 0xFFFFFF, bg: Int = 0x000000, vertical: Boolean = false) { for ((i, c) in text.toCharArray().withIndex()) { val cx = if(vertical) x else x + i val cy = if(vertical) y + i else y - set(cx, cy, GPUChar(c, fg, bg)) + _set(cx, cy, GPUChar(c, fg, bg)) } +// tex.upload() } fun fill(x: Int, y: Int, w: Int, h: Int, pixel: GPUChar = blank) { // turn it into values we can fw @@ -92,8 +154,9 @@ class TextBuffer(var width: Int, var height: Int) { val fh = min(h, height) for(py in y..^ppP#zAx{ZyEkdTmqf`YWPw5qDAyu5r+P>_$0kCl~`o12@LmzRf!2RApj zt*xzziHV`1VQ6S*NJxm9nwqJpseyq3A0MB$x3{OKXINO6u&^*MFR#D9zon(6nVFfT zm8HGCy{4w7jEsz^sAyndprw_Sv5~Qzot><#Y;bUJKtO=6udl1C+tskjbf9y0d%8G= zRNM-ga9ya$K)^Mhg?9!UM-Yq7jq3dW{}c1#WNc5~nQJ*YrJO0Pk=yOIn8V7%B01Z( z&Y+V?E=95|vfQZ!^-OP`ma=c@a17Vpb?JFjKmTL7g{ATb)|}`npLl+A&9tXs6+u;( zHhXBs9+P1J@KcF%OPgg&ebxsLQ0J}Ua5&!@I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/block/assembler_top.png b/src/main/resources/assets/neocomputers/textures/block/assembler_top.png new file mode 100644 index 0000000000000000000000000000000000000000..cb91133b4d8cfe0b4e0b2ee2d553fd2f6c8d60c0 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8v;dzFSCC>!NeKxFE-o%^Zf-$A!JwcZAt51gad9mzEqi-= zO-)S=4UNFSKnDj08yg#2TicM35JyKxb#-++J3D`W|A2r1DJdyGKR<78Zyg;SYinyK zCns51S#51?X=&-u&`=i_7fT!dTA)ocJzX3_DsF`YaPl2C;9#CKX?JGT`+NWXpPaaI zwvljSiexhD3MSo2d#o6W<^JCJ{&Q>#)-euoB^;or3y<%{ZDy|>LWlY2RNao`4lotDy-%u>B}lQK=$vY6OEda`Ku z{ATXULCuEKOCQdiZ!Lb(ahkwueuccP`&lIzWH{MWBJU@x2Rf3$)78&qol`;+0986~ A!T}1{rUgjo>{e_v(f1QQ?ktelLc(Y?)`6WJUEd# zRB_V{{RNBPT1xl?@Gvy~u2=Y?w;+jCEQEQ&(UO}P4_PM&J8nC0V2%EauEZqHI}YI+ z7D+OEl0Va_(3)v8V^(5P$k#&$qz!nO1m7_Qd}^7=Q>G-n$|)yF;ef@1oq`Gn7*by8 VpG`RAG#Tg`22WQ%mvv4FO#nd;Q$_#) literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/neocomputers/textures/gui/button_run.png b/src/main/resources/assets/neocomputers/textures/gui/button_run.png new file mode 100644 index 0000000000000000000000000000000000000000..f0eaa318f554e17b1877da9fa4f1009b5bb9f11d GIT binary patch literal 329 zcmV-P0k-~$P)<4f#l^3}ubaY~VT9iD00022Nklsm z6m8oew63F|hbu>}0=WugDj`z|smkbyg1|^kM&NN~5&}K^a1#i$f;T|RoSLf-+!s!5 bz5)yY89xbyU$Q2m00000NkvXXu0mjfuS1N5 literal 0 HcmV?d00001 diff --git a/stonecutter.gradle.kts b/stonecutter.gradle.kts index 44e3c5b..503f51a 100644 --- a/stonecutter.gradle.kts +++ b/stonecutter.gradle.kts @@ -5,7 +5,7 @@ plugins { id("com.gradleup.shadow") version "9.3.0" apply false id("me.modmuss50.mod-publish-plugin") version "0.8.4" apply false } -stonecutter active "1.21.1-fabric" /* [SC] DO NOT EDIT */ +stonecutter active "1.21.9-neoforge" /* [SC] DO NOT EDIT */ stonecutter.automaticPlatformConstants = true // Builds every version into `build/libs/{mod.version}/{loader}`