From e201274673b62e9e9bf10459de1e81e27db29e1f Mon Sep 17 00:00:00 2001
From: onezplpl <zigyonk+noreply@proton.me>
Date: Sat, 20 Jul 2024 22:00:39 -0400
Subject: [PATCH] bugfixes

---
 control.c |  2 +-
 cubes.c   | 14 +++++++-------
 cubes.h   |  2 +-
 gen.c     | 19 +++++++++++++++++--
 4 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/control.c b/control.c
index 9b045da..2959247 100644
--- a/control.c
+++ b/control.c
@@ -197,7 +197,7 @@ void control_rclick(double cx, double cy, vec3 pos, struct item *inv,
   for (int i = 0; i < 10; i++) {
     if (inv[i].id == inv[slot].id) {
       inv[i].count--;
-      if (inv[i].count == 0) {
+      if (inv[i].count < 1) {
         inv[i].id = 0;
         inv[i].count = 0;
       }
diff --git a/cubes.c b/cubes.c
index f8090d1..6630135 100644
--- a/cubes.c
+++ b/cubes.c
@@ -166,15 +166,15 @@ void *cubes_chunk(void *args) {
 
 void cubes_free() { free(chunk_old); }
 
-void cubes_refresh(int x, int y, int z, struct chunk dat) {
+void cubes_refresh(int x, int y, int z, struct chunk dat, int state) {
   for (int i = 0; i < CHUNK_ALL; i++) {
-    if (chunk_old[i].exists != 0 && abs(((int)chunk_old[i].x) - x) <= 1 &&
-        abs(((int)chunk_old[i].y) - y) <= 1 &&
-        abs(((int)chunk_old[i].z) - z) <= 1) {
-      chunk_old[i].exists = 0;
+    if (chunk_old[i].x == x && chunk_old[i].y == y && chunk_old[i].z == z && chunk_old[i].exists != 0) {
+      chunk_old[i].exists = state;
+      break;
     }
   }
-  gen_save(dat);
+  if (state == 0)
+    gen_save(dat);
 }
 
 int cubes_vert(struct v3f *cube, struct v3f *text, struct v3f *cubeO,
@@ -238,7 +238,7 @@ int cubes_vert(struct v3f *cube, struct v3f *text, struct v3f *cubeO,
         int cached =
             (old_chunk.x == pos.pos[0] / CHUNK_LENGTH &&
              old_chunk.y == pos.pos[1] / CHUNK_LENGTH &&
-             old_chunk.z == pos.pos[2] / CHUNK_LENGTH && old_chunk.exists != 0);
+             old_chunk.z == pos.pos[2] / CHUNK_LENGTH && old_chunk.exists != 0  && old_chunk.exists != 255);
         if (cached) {
           thread_id[a2] = -1;
           ib = i2[a];
diff --git a/cubes.h b/cubes.h
index 2da4cd9..e62c47e 100644
--- a/cubes.h
+++ b/cubes.h
@@ -43,7 +43,7 @@ int cubes_vert(struct v3f *cube, struct v3f *text, struct v3f *cubeO,
                struct v3f *textO, int x, int y, int z, int is_purge, int *i2);
 
 void cubes_free();
-void cubes_refresh(int x, int y, int z, struct chunk dat);
+void cubes_refresh(int x, int y, int z, struct chunk dat, int state);
 void cubes_rect(struct v3f *cube, int *i, double x1, double x2, double y1,
                double y2, int is_text, int text_x, int text_y);
 #endif
\ No newline at end of file
diff --git a/gen.c b/gen.c
index 3841d00..278557d 100644
--- a/gen.c
+++ b/gen.c
@@ -142,7 +142,7 @@ int gen_cube(int x, int y, int z, struct chunk dat, int ci, int val) {
   if (val != -1) {
     dat = gen_find((x / CHUNK_LENGTH), (y / CHUNK_LENGTH), (z / CHUNK_LENGTH));
   } else if (dat.exists == 0 || dat.x != (x / CHUNK_LENGTH) ||
-      dat.y != (y / CHUNK_LENGTH) || dat.z != (z / CHUNK_LENGTH)) {
+             dat.y != (y / CHUNK_LENGTH) || dat.z != (z / CHUNK_LENGTH)) {
     dat = gen_chunk((x / CHUNK_LENGTH), (y / CHUNK_LENGTH), (z / CHUNK_LENGTH),
                     ci, dat.exists);
     prevExists = dat.exists;
@@ -153,7 +153,22 @@ int gen_cube(int x, int y, int z, struct chunk dat, int ci, int val) {
 
   if (val != -1) {
     *h = val;
-    cubes_refresh(x / CHUNK_LENGTH, y / CHUNK_LENGTH, z / CHUNK_LENGTH, dat);
+
+    cubes_refresh(x / CHUNK_LENGTH, y / CHUNK_LENGTH, z / CHUNK_LENGTH, dat, 0);
+    for (int a = x - 1; a <= x + 1; a++) {
+      for (int b = y - 1; b <= y + 1; b++) {
+        for (int c = z - 1; c <= z + 1; c++) {
+          if (a / CHUNK_LENGTH == x / CHUNK_LENGTH &&
+              b / CHUNK_LENGTH == y / CHUNK_LENGTH &&
+              c / CHUNK_LENGTH == z / CHUNK_LENGTH)
+            continue;
+          printf("%i %i %i\n",a,b,c);
+
+          cubes_refresh(a / CHUNK_LENGTH, b / CHUNK_LENGTH, c / CHUNK_LENGTH,
+                        dat, 255);
+        }
+      }
+    }
   }
 
   return *h;