From c6fc9ed9e9c4c5922f4813201548355be2114d37 Mon Sep 17 00:00:00 2001 From: ionut Date: Thu, 30 Apr 2026 18:14:21 +0300 Subject: [PATCH 1/2] made relay no longer violate physics --- .../neoflock/neocomputers/block/RelayBlock.kt | 25 ++++++++++++---- .../neocomputers/network/DeviceNode.kt | 30 +++++++++---------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/main/kotlin/org/neoflock/neocomputers/block/RelayBlock.kt b/src/main/kotlin/org/neoflock/neocomputers/block/RelayBlock.kt index 7920547..bc13449 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/block/RelayBlock.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/block/RelayBlock.kt @@ -10,6 +10,7 @@ import net.minecraft.network.chat.Component import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer import net.minecraft.world.ContainerHelper +import net.minecraft.world.Containers import net.minecraft.world.InteractionResult import net.minecraft.world.MenuProvider import net.minecraft.world.entity.player.Inventory @@ -60,6 +61,7 @@ class RelayEntity(blockPos: BlockPos, blockState: BlockState): SingleDeviceBlock fun computeRelayCapacity(): Int = computeRelayBufferSize() + computeRelayQueueSize() val queue = mutableListOf() + val justReceived = mutableListOf() var activityTickLeft = 0 var ticksUntilQueue = 0 @@ -68,8 +70,8 @@ class RelayEntity(blockPos: BlockPos, blockState: BlockState): SingleDeviceBlock override fun received(message: Networking.Message) { super.received(message) if(message.sender == this) return - if(message is Networking.ClassicPacket && message.hopCount < 5 && queue.size < computeRelayCapacity()) { - queue.addLast(message) + if(message is Networking.ClassicPacket && message.hopCount < 5 && (queue.size + justReceived.size) < computeRelayCapacity()) { + justReceived.addLast(message) activityTickLeft = 20 markChanged() } @@ -80,7 +82,7 @@ class RelayEntity(blockPos: BlockPos, blockState: BlockState): SingleDeviceBlock buf.writeVarInt(computeRelayInterval()) buf.writeVarInt(computeRelayBufferSize()) buf.writeVarInt(computeRelayQueueSize()) - buf.writeVarInt(queue.size) + buf.writeVarInt(queue.size + justReceived.size) } override fun writeFullStateCommit(buf: FriendlyByteBuf) { @@ -120,6 +122,10 @@ class RelayEntity(blockPos: BlockPos, blockState: BlockState): SingleDeviceBlock activityTickLeft-- deviceNode.markChanged() } + queue.addAll(justReceived) + justReceived.clear() + val cap = computeRelayCapacity() + while(queue.size > cap) queue.removeLast() ticksUntilQueue-- if(ticksUntilQueue <= 0) { ticksUntilQueue = computeRelayInterval() @@ -129,8 +135,6 @@ class RelayEntity(blockPos: BlockPos, blockState: BlockState): SingleDeviceBlock } } deviceNode.markChanged() - val cap = computeRelayCapacity() - while(queue.size > cap) queue.removeLast() } override fun getMachineBlockPosition() = blockPos!! @@ -176,4 +180,15 @@ class RelayBlock: DeviceBlock(Properties.of().sound(SoundType.METAL)) { } return InteractionResult.SUCCESS } + + override fun onRemove( + blockState: BlockState, + level: Level, + blockPos: BlockPos, + blockState2: BlockState, + bl: Boolean + ) { + Containers.dropContentsOnDestroy(blockState, blockState2, level, blockPos) + super.onRemove(blockState, level, blockPos, blockState2, bl) + } } \ No newline at end of file diff --git a/src/main/kotlin/org/neoflock/neocomputers/network/DeviceNode.kt b/src/main/kotlin/org/neoflock/neocomputers/network/DeviceNode.kt index a37a6e1..1c624e3 100644 --- a/src/main/kotlin/org/neoflock/neocomputers/network/DeviceNode.kt +++ b/src/main/kotlin/org/neoflock/neocomputers/network/DeviceNode.kt @@ -150,9 +150,9 @@ open class DeviceNode(_address: UUID? = null) { fun getReachable(): Set { if(reachableCache == null) { - reachableCache = computeReachable(); + reachableCache = computeReachable() } - return reachableCache!!; + return reachableCache!! } open fun invalidateReachableCache() { @@ -165,21 +165,21 @@ open class DeviceNode(_address: UUID? = null) { fun computeReachable(): Set { if(reachability == Visibility.NONE) { - return setOf(); + return setOf() } if(reachability == Visibility.SOME) { return getPreferredFew() } if(reachability == Visibility.DIRECT) { - return connections.minus(this); + return connections.minus(this) } if(reachability == Visibility.NETWORK) { // absolute cinema - val working = HashSet(); - val pending = mutableListOf(this); - var iterCount = 0; + val working = HashSet() + val pending = mutableListOf(this) + var iterCount = 0 while(iterCount < maxHopCount && pending.isNotEmpty()) { - iterCount++; + iterCount++ val subnode = pending.removeFirst() if(subnode in working) continue working.add(subnode) @@ -192,20 +192,20 @@ open class DeviceNode(_address: UUID? = null) { } } // cannot send to itself! - working.remove(this); - return working; + working.remove(this) + return working } - throw NotImplementedError("visibility not implemented"); + throw NotImplementedError("visibility not implemented") } fun connectTo(other: DeviceNode) { - this.directConnectTo(other); - other.directConnectTo(this); + this.directConnectTo(other) + other.directConnectTo(this) } fun disconnectFrom(other: DeviceNode) { - this.directDisconnectFrom(other); - other.directDisconnectFrom(this); + this.directDisconnectFrom(other) + other.directDisconnectFrom(this) } fun directConnectTo(other: DeviceNode) { From 9fd6ea888148ccd44750c857079f97ecc46262f7 Mon Sep 17 00:00:00 2001 From: KillTheGoblin Date: Thu, 30 Apr 2026 22:20:24 +0200 Subject: [PATCH 2/2] transistor and some random card textures --- .../assets/neocomputers/textures/item/chip0.png | Bin 241 -> 471 bytes .../assets/neocomputers/textures/item/red1.png | Bin 618 -> 0 bytes .../neocomputers/textures/item/redio0.png | Bin 394 -> 623 bytes .../neocomputers/textures/item/redio1.png | Bin 417 -> 618 bytes .../neocomputers/textures/item/transistor.png | Bin 221 -> 465 bytes .../assets/neocomputers/textures/item/wlan0.png | Bin 473 -> 579 bytes .../assets/neocomputers/textures/item/wlan1.png | Bin 472 -> 602 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/resources/assets/neocomputers/textures/item/red1.png diff --git a/src/main/resources/assets/neocomputers/textures/item/chip0.png b/src/main/resources/assets/neocomputers/textures/item/chip0.png index cde1afc8ca468c4eb109b790e3a63d4ebfb5166c..c3a36571671b63bc95b96060f1bb0863a37d6957 100644 GIT binary patch delta 265 zcmey!c%6AdXZ;}t2EId#q8eTe3=9ksC9V-A!TD(=<%vb93;~Imc_n&&t|1DhdWL!y z(wVPT0M%?ujqptK^weVD0CHFvq!?Kl7=bJ=AeM%*gMe%eMrN=$6Oe7l$iyH3q@#d1 zvz-Mjo&{tBK|RB#GDe0M%nWcE%~l4W)C6`07NA-KBVz-`1rTFFRWw diff --git a/src/main/resources/assets/neocomputers/textures/item/red1.png b/src/main/resources/assets/neocomputers/textures/item/red1.png deleted file mode 100644 index f93e888500b9bcc455f61b51248ca809768139ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh_0G|-oj~_pN`0(N3!-vMAm!qSjsj2C* zWy>VESmw-`vw3sD&6`a?+g{&Y@CHaJmjw9*|0f6-(lnc=0hMzWctjR6Fz_7)VaDV6 zD^h@h5+$w?CBgY=CFO}lsSE*$nRz98ey$-3rh0~Y7SfroRshv(OO5bM^YqkW-~e)1 z8Kf9l85n^qFCdnNvOyuH!N?32X9BVf8JWN#7zJc!wzGi6vw&<6NC0Axei)5rDFZOf zC$KZH096!MXrq(i9*Y1ek#4Fo9JDSy}*DP+f)w1|Zqh4T{3S^DH!g z%u-Jm#}JL+)>Ci!nhbba6CJE%b8=4naBI2u-!;qfgR}FY*(R2impcAiHEZ1aKCMP& zhR1`pPL?36payH(l4M`XWBu2gHr-*fk7fMKo*ylp$o1599mp}Bu6{1-oD!MNS%LhV0G|-oj~_pN`0(N3!-vcG@7Lh zz;K_y&cFgxVPIrzz_1%@AeJ@(mXvi{x5?mF|k zP<)7yYFpH@BNq*+xyIAg&t;ucLK6UI&ANjC delta 331 zcmV-R0kr<_1d0QYB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0001l zP)t-s-{0Q=002`jFGVLO+}zv|6%lwyND>kf93vbM6c7y%4NNO5ja60E)pXd{*tE1{ zP*70S)zwNVDS=H*1_}l|6cj2jDuho@3l9q@E+`fp78M#52RjT0Iw2vtx^9qHSJBaE zFgGwkOF<(jBQi2FnO$8rJ~kgF9}W@@Nl{5qSy2D~|Bwn7l>h($EOb&%Q<1?SkUhAP_`Rf^h`roO9ay-_H%m5*5FEnr0AaAp<~2Ul>5& zx^B6w@1vj?QZgM?a7wT+CM4b++Wf$|gE8GCgn4}hc4pH~0f6s&-p!bV1Yi`AfM_=T dqV)+d07yS0axWnU1ONa407*qoM6N;tV1kodbTj|} diff --git a/src/main/resources/assets/neocomputers/textures/item/redio1.png b/src/main/resources/assets/neocomputers/textures/item/redio1.png index 3619213c9cadb346c600774bad6240fdf7702ef7..f93e888500b9bcc455f61b51248ca809768139ce 100644 GIT binary patch literal 618 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh_0G|-oj~_pN`0(N3!-vMAm!qSjsj2C* zWy>VESmw-`vw3sD&6`a?+g{&Y@CHaJmjw9*|0f6-(lnc=0hMzWctjR6Fz_7)VaDV6 zD^h@h5+$w?CBgY=CFO}lsSE*$nRz98ey$-3rh0~Y7SfroRshv(OO5bM^YqkW-~e)1 z8Kf9l85n^qFCdnNvOyuH!N?32X9BVf8JWN#7zJc!wzGi6vw&<6NC0Axei)5rDFZOf zC$KZH096!MXrq(i9*Y1ek#4Fo9JDSy}*DP+f)w1|Zqh4T{3S^DH!g z%u-Jm#}JL+)>Ci!nhbba6CJE%b8=4naBI2u-!;qfgR}FY*(R2impcAiHEZ1aKCMP& zhR1`pPL?36payH(l4M`XWBu2gHr-*fk7fMKo*ylp$o1599mp}Bu6{1-oD!M%bYnp&+jKZnOLtPcXShTntW%~b$m9Q*#vIlo{>3_R)~b?D14QilKo0QUkS5!)KV6i)yE002ovPDHLkV1ila BgcJY( diff --git a/src/main/resources/assets/neocomputers/textures/item/transistor.png b/src/main/resources/assets/neocomputers/textures/item/transistor.png index 32d017f420f4a61e0ebbf14236996fb6f3d0d6f0..cf3ac929734bd1bf941c1d13f9019d1da2a945b5 100644 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|s0G|+7U0q#4K|wh=xkVfHow@pO*NIy`4hE|uZ)1X3I&L4LviA%Njt z^WI3H7-xY;WHAE+-(e7DJf6QI1!P!>YeY$Kep*R+Vo@qXKw@TIiJqTph=Qq}p`L|w z=BpJzHQQ1nJkvZqwHP>n999M?Mpgz!Aj=DgrJ-z)FEkjL!QxCnwjm=E*jG_Nc4j*Z zSUd~J27v@12I+^ zkOkFcXkY-6UEQE496ZlL1IYC7ba4#P2rfOt$ag@2gT-;ftH1w`w>mGrP%_m;J<#zb zd&^7Kv)&7$7IY>y{c%~$T(M&htL$U$=H(6Nd^u;ZzBy-j=D}vWyNvpuf>^Ixyqa7E OGT+nH&t;ucLK6T!5pNCv delta 193 zcmcb}e3x;8O1)%>YeY$Kep*R+Vo@rCV@iHfs)A>3VtQ&&YGO)d;mK4R1_lP{0G|+7 zAiZbL9#KIqRaMnv$Bvnso3CB7#@txv|NsBb=jAT}N^_P3`2_>HV89UUUm*k(boO*{ z45_$PbKaAWL4kwWA;;}|sm`~D nVH$_RTQ7!{lizQTZeV0sQO`C@%ioq0XdZ*7tDnm{r-UW|$v;Oc diff --git a/src/main/resources/assets/neocomputers/textures/item/wlan0.png b/src/main/resources/assets/neocomputers/textures/item/wlan0.png index 7f10401995f9cc1522dbda719295f882680f6c5c..115dbbdfc48d1060260354080e1191d770a1394b 100644 GIT binary patch literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh(0G|-oj~_pN`0$}GDDmOLhewYd?eFiue*OC8%a;!xJSfi2DbK|#z{)Ns zCl{k(C@3hX$t$#D#|{||9&J7$eipV(n>Oj{>MmQhY|flHn>QESyx9aa^@Gb*P9P;+ z666>BA17c?H{mt~D&s8hh%9Dc;1&j9Muu5)B!GevC9V-A!TD(=<%vb93;~Imc_n&& zt|1DhdWL!y(wVPT0M%?ujqptK^weVD0CHFvq!?Kl7=bJ=AeM%*K_Q~S$P5-|0Y5Qd+qL?U&9Of7c zW6a4VO&)leonhu>b{7#LNPC4tU%s-q$;{LeV}nz^df;$j{UGq%to+sNa0G!^G6+q511)%2D{x+~}yWws{v%Z)xG!YSU zmMJ1ate$7A$$wyjRvM0V`FeWHA#|EhN=aWNgsvbN2>~z?Hvl-h|4?`3uSRcgG|WrI z{dt355{5>~3}JQa^hI=vRgdG1Jh$a9lv2{%`||Dr_zk*3iel9R;QH0&`O`yB4&Zu% zh$sw(R_H;+?8z1VrbEufa*3x(jkW~+f~hNs8JZ;O zYWFjN8=PP6kV+ZYc8PR4-gW^cB6NaAhjeW44I$e_b=PB&TmS$707*qoM6N<$f~14Y Am;e9( diff --git a/src/main/resources/assets/neocomputers/textures/item/wlan1.png b/src/main/resources/assets/neocomputers/textures/item/wlan1.png index 09cef9917bde7e1f85239cdb2e1a0e48fe1c8948..4d58277bf9000de6e1ed0cdf8047cd0d83187709 100644 GIT binary patch literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%LiU0G|-odH>&CzI=JkoH>gZFJ7@?1%rYdhnUdEj~_pL_;B#x!G{kYUcY{w zUtNJgOoTyOqv*_T220}|J9aRrD=}DG^!N84J$jTuRCv>-O%gVS%a$$Myt&}!%_gAP zT~lf#fRt=WkYDhBJb)px?RgeZA!mU{WHAE+-(e7DJf6QI1t=&{;u=vBoS#-wo>-L1 z5RjOeSEA?V8lqsTXQ*c(o%w17P|dc~2+uT6Pb~%xAcvJfijkFp5y;UKz3$33s@ZF1`tR9Vvv3qjbL=Tak%5+wJ}*C z$E+OJeKlRgE3kxZJC}!o2iteI1)N3aI)C>{pS^55{b}IlE_K5tPer}O^97#?-EQJk i-<0=yTe_%yM-9UPUoqiBXEI-a9Odci=d#Wzp$Py5B)dug delta 417 zcmcb`a)Wt-O1)%>YeY$Kep*R+Vo@rCV@iHfs)A>3VtQ&&YGO)d;mK4R1_p-t0X`wF z_wU~q6&01?Gd0)p1&T%bXUyKTIXk{4!Y9W_&0Sm5R9s9}L|AgesWUfj+_-b+&ef|W z94ta!?!ltm8q$)=65JZ9GA4l@aZ7jYW@YBFHul`IC1qFGt~?GF;j34#+E}?rODPL; zsqpa%O|(5K+Q!`LP1bKOi5m+EW4eVi9<#IEGZ*YUzD0)MOyg zqOY>Zg!PSR_4{|f?Pq%jNYw9~y?5sCNxM1Lyz|K|PZ7O+{q4eE@)s8TY?0(_@wqI$ zEj#C^pXD{lT`x|S^Oh!ySytFQ-#34mM?+bi?zzbKS09-82GraR^3oRG+qF|h;_ly5+Sgo*vVZ)v_MK1$pwT~9-4y^yzyq$rWK|4{?Y1X_(KcLeXJYD@<);T3K F0RTGsp9KH_