title: Ursina Error - AssersionError: !is_empty() at line 1045 of panda/src/pgraph/nodePath.cxx
body: <p>I'm trying to make a minecraft clone in Python using Ursina but I have been stuck on one problem when removing water if a block is placed on top of it. Collisions are off for water but rest are and I've been stuck for a long time pls help! I add each block made into an list with all it's data like coords (x, y, z) and remove them from the list when they are deleted. My plan is to compare all the blocks in the list's xyz coords to all the water blocks xyz corrds and if they are the same then the water will be removed and deleted from the list. I've worked on this for a long time but the problem wont go away.</p>
  <p>Full error message:</p>
  <pre><code>package_folder: C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-
  packages\ursina
  asset_folder: C:\Users\dyclo\OneDrive\Documents\VS Code Project\Minecraft Ursina Edition
  screen resolution: (1920, 1080)
  Known pipe types:
    wglGraphicsPipe
  (3 aux display modules not yet loaded.)
  :display(error): The application requested harware acceleration, but your OpenGL
  :display(error): driver, GDI Generic, only supports software rendering.
  :display(error): You need to install a hardware-accelerated OpenGL driver, or,
  :display(error): if you actually *want* to use a software renderer, then
  :display(error): alter the hardware/software configuration in your Config.prc file.
  :display(warning): Unable to load libtinydisplay.dll: Path not found
  :display(warning): Unable to load libpandadx8.dll: Path not found
  :pnmimage:png(warning): iCCP: known incorrect sRGB profile
  :pnmimage:png(warning): iCCP: known incorrect sRGB profile
  read obj at: C:\Users\dyclo\OneDrive\Documents\VS Code Project\Minecraft Ursina Edition\assets\block.obj
  read obj at: C:\Users\dyclo\OneDrive\Documents\VS Code Project\Minecraft Ursina Edition\assets\arm.obj
  info: development mode: True
  application successfully started
  info: changed aspect ratio: 1.778 -&gt; 1.778
  {'x': 0.0, 'y': 0.0, 'z': 7.0, 'position': Vec3(0, 0, 7), 'texture': grass_block.png}
  {'x': 0.0, 'y': 1.0, 'z': 7.0, 'position': Vec3(0, 1, 7), 'texture': grass_block.png}
  Assertion failed: !is_empty() at line 1045 of panda/src/pgraph/nodePath.cxx
  Traceback (most recent call last):
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\EventManager.py&quot;, line 49, in eventLoopTask
      self.doEvents()
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\EventManager.py&quot;, line 43, in doEvents
      processFunc(dequeueFunc())
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\EventManager.py&quot;, line 99, in processEvent
      messenger.send(eventName, paramList)
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\Messenger.py&quot;, line 337, in send
      self.__dispatch(acceptorDict, event, sentArgs, foundWatch)
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\Messenger.py&quot;, line 422, in __dispatch
      result = method (*(extraArgs + sentArgs))
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\ursina\main.py&quot;, line 201, in input
      entity.input(key)
    File &quot;C:\Users\dyclo\OneDrive\Documents\VS Code Project\Minecraft Ursina Edition\game.py&quot;, line 189, in input
      'x': self.position.x,
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\ursina\entity.py&quot;, line 458, in position
      return Vec3(*self.getPos())
  AssertionError: !is_empty() at line 1045 of panda/src/pgraph/nodePath.cxx
  :task(error): Exception occurred in PythonTask eventManager
  Traceback (most recent call last):
    File &quot;C:\Users\dyclo\OneDrive\Documents\VS Code Project\Minecraft Ursina Edition\game.py&quot;, line 525, in &lt;module&gt;
      app.run()
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\ursina\main.py&quot;, line 239, in run
      super().run()
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\ShowBase.py&quot;, line 3328, in run
      self.taskMgr.run()
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\task\Task.py&quot;, line 553, in run
      self.step()
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\task\Task.py&quot;, line 504, in step
      self.mgr.poll()
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\EventManager.py&quot;, line 49, in eventLoopTask
      self.doEvents()
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\EventManager.py&quot;, line 43, in doEvents
      processFunc(dequeueFunc())
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\EventManager.py&quot;, line 99, in processEvent
      messenger.send(eventName, paramList)
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\Messenger.py&quot;, line 337, in send
      self.__dispatch(acceptorDict, event, sentArgs, foundWatch)
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\direct\showbase\Messenger.py&quot;, line 422, in __dispatch
      result = method (*(extraArgs + sentArgs))
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\ursina\main.py&quot;, line 201, in input
      entity.input(key)
    File &quot;C:\Users\dyclo\OneDrive\Documents\VS Code Project\Minecraft Ursina Edition\game.py&quot;, line 189, in input
      'x': self.position.x,
    File &quot;C:\Users\dyclo\AppData\Local\Programs\Python\Python310\lib\site-packages\ursina\entity.py&quot;, line 458, in position
      return Vec3(*self.getPos())
  AssertionError: !is_empty() at line 1045 of panda/src/pgraph/nodePath.cxx
  </code></pre>
  <p>All my code:</p>
  <pre><code>from ursina import *
  from ursina.prefabs.first_person_controller import FirstPersonController
  import random
  
  
  app = Ursina()
  
  
  punch_sound   = Audio('assets/punch_sound',loop = False, autoplay = False)
  
  block_pick = 1
  
  start_chunk = 13
  
  window.title = 'MINECRAFT: Bad Ursina Edition'
  window.borderless = False
  window.fullscreen = False
  window.exit_button.visible = False
  window.fps_counter.enabled = True
  
  voxels = []
  
  
  grass_texture = load_texture('assets/grass_block.png')
  stone_texture = load_texture('assets/stone_block.png')
  brick_texture = load_texture('assets/brick_block.png')
  dirt_texture = load_texture('assets/dirt_block.png')
  sky_texture  = load_texture('assets/skybox.png')
  arm_texture  = load_texture('assets/arm_texture.png')
  leaves_texture = load_texture('assets/oak_leaves.png')
  log_texture = load_texture('assets/oak_log.png')
  diamond_ore_texture = load_texture('assets/diamond_ore.png')
  coal_ore_texture = load_texture('assets/coal_ore.png')
  iron_ore_texture = load_texture('assets/iron_ore.png')
  diamond_ore_block_texture = load_texture('assets/diamond_block.png')
  coal_ore_block_texture = load_texture('assets/coal_block.png')
  iron_ore_block_texture = load_texture('assets/iron_block.png')
  oak_planks_texture = load_texture('assets/oak_planks.png')
  crafting_table_texture = load_texture('assets/crafting_table.png')
  cobblestone_texture = load_texture('assets/cobblestone.png')
  sand_texture = load_texture('assets/sand.png')
  cactus_texture = load_texture('assets/cactus.png')
  water_texture = load_texture('assets/water.png')
  
  def update():
      global block_pick
      global inventory
  
      if held_keys['left mouse'] or held_keys['right mouse']:
          hand.active()
      else:
          hand.passive()
  
      if held_keys['1'] and inventory: block_pick = 1
      if held_keys['2'] and inventory: block_pick = 2
      if held_keys['3'] and inventory: block_pick = 3
      if held_keys['4'] and inventory: block_pick = 4
      if held_keys['5'] and inventory: block_pick = 5
      if held_keys['6'] and inventory: block_pick = 6
      if held_keys['7'] and inventory: block_pick = 7
      if held_keys['8'] and inventory: block_pick = 8
      if held_keys['9'] and inventory: block_pick = 9
      if held_keys['1'] and inventory == False: block_pick = 10
      if held_keys['2'] and inventory == False: block_pick = 11
      if held_keys['3'] and inventory == False: block_pick = 12
      if held_keys['4'] and inventory == False: block_pick = 13
      if held_keys['5'] and inventory == False: block_pick = 14
      if held_keys['6'] and inventory == False: block_pick = 15
      if held_keys['7'] and inventory == False: block_pick = 16
      if held_keys['8'] and inventory == False: block_pick = 17
      if held_keys['9'] and inventory == False: block_pick = 18
      if held_keys['0'] and inventory == False: inventory = True
  
      if block_pick == 1: info.text = &quot;Grass Block&quot;
  
      if block_pick == 2: info.text = &quot;Stone&quot;
  
      if block_pick == 3: info.text = &quot;Bricks&quot;
  
      if block_pick == 4: info.text = &quot;Dirt&quot;
  
      if block_pick == 5: info.text = &quot;Oak Log&quot;
  
      if block_pick == 6: info.text = &quot;Leaves&quot;
  
      if block_pick == 7: info.text = &quot;Oak Planks&quot;
  
      if block_pick == 8: info.text = &quot;Diamond Ore&quot;
      
      if block_pick == 9: info.text = &quot;Coal Ore&quot;
  
      if block_pick == 10: info.text = &quot;Iron Ore&quot;
  
      if block_pick == 11: info.text = 'Crafting Table'
  
      if block_pick == 12: info.text = 'Cobblestone'
      
      if block_pick == 13: info.text = 'Diamond Block'
  
      if block_pick == 14: info.text = 'Coal Block'
  
      if block_pick == 15: info.text = 'Iron Block'
  
      if block_pick == 16: info.text = 'Sand'
  
      if block_pick == 17: info.text = 'Cactus'
  
      if block_pick == 18: info.text = 'Water'
  
  
      info.x = -0.1
      info.y = 0.46
      info.background = True
      info.visible = True
  
  
  
  class Voxel(Button):
      def __init__(self, position = (0,0,0), texture = grass_texture, collision = True):
          super().__init__(
              parent = scene,
              position = position,
              model = 'assets/block',
              origin_y = 0.5,
              texture = texture,
              collision = collision,
              color = color.color(0,0,random.uniform(0.9,1)),
              scale = 0.5)
  
          voxels.append({
              'x': self.position.x,
              'y': self.position.y,
              'z': self.position.z,
              'position': self.position,
              'texture': texture
          })
  
      def input(self,key):
          global inventory
          if key == 'b' and inventory: inventory = False
          if self.hovered:
              if key == 'right mouse down':
                  punch_sound.play()
                  if block_pick == 1: voxel = Voxel(position = self.position + mouse.normal, texture = grass_texture)
                  if block_pick == 2: voxel = Voxel(position = self.position + mouse.normal, texture = stone_texture)
                  if block_pick == 3: voxel = Voxel(position = self.position + mouse.normal, texture = brick_texture)
                  if block_pick == 4: voxel = Voxel(position = self.position + mouse.normal, texture = dirt_texture)
                  if block_pick == 5: voxel = Voxel(position = self.position + mouse.normal, texture = log_texture)
                  if block_pick == 6: voxel = Voxel(position = self.position + mouse.normal, texture = leaves_texture)
                  if block_pick == 7: voxel = Voxel(position = self.position + mouse.normal, texture = oak_planks_texture)
                  if block_pick == 8: voxel = Voxel(position = self.position + mouse.normal, texture = diamond_ore_texture)
                  if block_pick == 9: voxel = Voxel(position = self.position + mouse.normal, texture = coal_ore_texture)
                  if block_pick == 10: voxel = Voxel(position = self.position + mouse.normal, texture = iron_ore_texture)
                  if block_pick == 11: voxel = Voxel(position = self.position + mouse.normal, texture = crafting_table_texture)
                  if block_pick == 12: voxel = Voxel(position = self.position + mouse.normal, texture = cobblestone_texture)
                  if block_pick == 13: voxel = Voxel(position = self.position + mouse.normal, texture = diamond_ore_block_texture)
                  if block_pick == 14: voxel = Voxel(position = self.position + mouse.normal, texture = coal_ore_block_texture)
                  if block_pick == 15: voxel = Voxel(position = self.position + mouse.normal, texture = iron_ore_block_texture)
                  if block_pick == 16: voxel = Voxel(position = self.position + mouse.normal, texture = sand_texture)
                  if block_pick == 17: voxel = Voxel(position = self.position + mouse.normal, texture = cactus_texture)
                  if block_pick == 18: voxel = Voxel(position = self.position + mouse.normal, texture = water_texture, collision = False)
  
                  index = voxels.index({
                      'x': self.position.x,
                      'y': self.position.y,
                      'z': self.position.z,
                      'position': self.position,
                      'texture': self.texture
                  })
  
                  print(voxels[index])
  
              if key == 'left mouse down':
                  punch_sound.play()
                  index = voxels.index({
                      'x': self.position.x,
                      'y': self.position.y,
                      'z': self.position.z,
                      'position': self.position,
                      'texture': self.texture
                  })
  
                  print(voxels[index])
                  del voxels[index]
                  destroy(self)
  
              for i in range(len(voxels)):
                  index = voxels.index({
                      'x': self.position.x,
                      'y': self.position.y,
                      'z': self.position.z,
                      'position': self.position,
                      'texture': self.texture
                  })
                  if self.texture == &quot;water.png&quot; and Vec3(index.x, index.y, index.z) == i.position:
  
                      print(voxels[index])
                      del voxels[index]
                      destroy(self)
  
  class Sky(Entity):
      def __init__(self):
          super().__init__(
              parent = scene,
              model = 'sphere',
              texture = sky_texture,
              scale = 300,
              double_sided = True)
  
  class Hand(Entity):
      def __init__(self):
          super().__init__(
              parent = camera.ui,
              model = 'assets/arm',
              texture = 'assets/arm_texture',
              scale = 0.2,
              rotation = Vec3(150,-10,0),
              position = Vec2(0.4,-0.6))
  
      def active(self):
          self.position = Vec2(0.3,-0.5)
  
      def passive(self):
          self.position = Vec2(0.4,-0.6)
  
  def spawn_chunk(start_chunk, chunks_spawned):
      if random.uniform(0,8) &gt;= 4:
          print(&quot;Chose plains chunks&quot;)
          if random.uniform(0,8) &gt;= 4:
              y = 1
          else:
              y = 0
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  voxel = Voxel(position = (x + start_chunk,0 + y,z))
                  if random.uniform(0,16) &gt; 15.5:
                      tree_position_x = x + start_chunk
                      tree_position_y = 0 + y + 1
                      tree_position_z = z
                      tree(tree_position_x, tree_position_y, tree_position_z)
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  for y in range(-7):
                      voxel = Voxel(position = (x + start_chunk,-2 + y,z), texture = stone_texture)
                      if random.uniform(0,16) &gt; 15.5:
                          tree_position_x = x + start_chunk
                          tree_position_y = 0 + y + 1
                          tree_position_z = z
                          tree(tree_position_x, tree_position_y, tree_position_z)
  
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  for y in range(-7):
                      voxel = Voxel(position = (x + start_chunk,-2 + y,z), texture = stone_texture)
                      if random.uniform(0,16) &gt; 15.5:
                          tree_position_x = x + start_chunk
                          tree_position_y = 0 + y + 1
                          tree_position_z = z
                          tree(tree_position_x, tree_position_y, tree_position_z)
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  voxel = Voxel(position = (x,0 + y,z + start_chunk))
                  if random.uniform(0,16) &gt; 15.5:
                      tree_position_x = x + start_chunk
                      tree_position_y = 0 + y + 1
                      tree_position_z = z
                      tree(tree_position_x, tree_position_y, tree_position_z)
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  for y in range(-2):
                      voxel = Voxel(position = (x,-1 + y,z + start_chunk), texture = dirt_texture)
                      if random.uniform(0,16) &gt; 15.5:
                          tree_position_x = x + start_chunk
                          tree_position_y = 0 + y + 1
                          tree_position_z = z
                          tree(tree_position_x, tree_position_y, tree_position_z)
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  for y in range(-7):
                      voxel = Voxel(position = (x,-2 + y,z + start_chunk), texture = stone_texture)
                      if random.uniform(0,16) &gt; 15.5:
                          tree_position_x = x + start_chunk
                          tree_position_y = 0 + y + 1
                          tree_position_z = z
                          tree(tree_position_x, tree_position_y, tree_position_z)
  
          if random.uniform(0,8) &gt; 4:
              y = 1
          else:
              y = 0
      
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  voxel = Voxel(position = (x + start_chunk,0 + y,z + start_chunk))
                  if random.uniform(0,16) &gt; 15.5:
                      tree_position_x = x + start_chunk
                      tree_position_y = 0 + y + 1
                      tree_position_z = z
                      tree(tree_position_x, tree_position_y, tree_position_z)
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  for y in range(-2):
                      voxel = Voxel(position = (x + start_chunk,-1 + y,z + start_chunk), texture = dirt_texture)
                      if random.uniform(0,16) &gt; 15.5:
                          tree_position_x = x + start_chunk
                          tree_position_y = 0 + y + 1
                          tree_position_z = z
                          tree(tree_position_x, tree_position_y, tree_position_z)
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  for y in range(-7):
                      voxel = Voxel(position = (x + start_chunk,-2 + y,z + start_chunk), texture = stone_texture)
                      if random.uniform(0,16) &gt; 15.5:
                          tree_position_x = x + start_chunk
                          tree_position_y = 0 + y + 1
                          tree_position_z = z
                          tree(tree_position_x, tree_position_y, tree_position_z)
      elif random.uniform(0,8) &lt;= 5:
          print(&quot;Chosse desert&quot;)
          if random.uniform(0,8) &gt;= 4:
              y = 1
          else:
              y = 0
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  voxel = Voxel(position = (x + start_chunk,0 + y,z), texture = sand_texture)
                  if random.uniform(0,16) &gt; 15.5:
                      cactus_position_x = x + start_chunk
                      cactus_position_y = 0 + y + 1
                      cactus_position_z = z
                      cactus(cactus_position_x, cactus_position_y, cactus_position_z)
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  voxel = Voxel(position = (x,0 + y,z + start_chunk), texture = sand_texture)
                  if random.uniform(0,16) &gt; 15.5:
                      cactus_position_x = x + start_chunk
                      cactus_position_y = 0 + y + 1
                      cactus_position_z = z
                      cactus(cactus_position_x, cactus_position_y, cactus_position_z)
  
          if random.uniform(0,8) &gt; 4:
              y = 1
          else:
              y = 0
      
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  voxel = Voxel(position = (x + start_chunk,0 + y,z + start_chunk), texture = sand_texture)
                  if random.uniform(0,16) &gt; 15.5:
                      cactus_position_x = x + start_chunk
                      cactus_position_y = 0 + y + 1
                      cactus_position_z = z
                      cactus(cactus_position_x, cactus_position_y, cactus_position_z)
      else:
          print(&quot;Chosse stone plains&quot;)
          if random.uniform(0,8) &gt;= 4:
              y = 1
          else:
              y = 0
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  voxel = Voxel(position = (x + start_chunk,0 + y,z),texture = stone_texture)
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  for y in range(-7):
                      voxel = Voxel(position = (x + start_chunk,-2 + y,z), texture = stone_texture)
  
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  for y in range(-7):
                      voxel = Voxel(position = (x + start_chunk,-2 + y,z), texture = stone_texture)
  
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  voxel = Voxel(position = (x,0 + y,z + start_chunk), texture = stone_texture)
  
  
          if random.uniform(0,8) &gt; 4:
              y = 1
          else:
              y = 0
      
          for z in range(13 * chunks_spawned):
              for x in range(13 * chunks_spawned):
                  voxel = Voxel(position = (x + start_chunk,0 + y,z + start_chunk), texture = stone_texture)
  
      print(&quot;Spawned chunks&quot;)
  
  def input(key):
      if key == &quot;m&quot;:
          print(&quot;Quit game. Hope you had fun!&quot;)
          exit()
  
      if key == &quot;x&quot;:
          global start_chunk
          global chunks_spawned
          spawn_chunk(start_chunk, chunks_spawned)
          chunks_spawned += 1
          start_chunk = start_chunk + 11
  
      if key == &quot;c&quot;:
          cactus(player.x + 2, player.y, player.z + 2)
  
      if key == &quot;z&quot;:
          tree(player.x + 2, player.y, player.z + 2)
  
  def tree(tree_position_x, tree_position_y, tree_position_z):
      voxel = Voxel(position = (tree_position_x,tree_position_y,tree_position_z), texture = log_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 1,tree_position_z), texture = log_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 2,tree_position_z), texture = log_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 3,tree_position_z), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 1,tree_position_y + 3,tree_position_z), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 2,tree_position_y + 3,tree_position_z), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x - 1,tree_position_y + 3,tree_position_z), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x - 2,tree_position_y + 3,tree_position_z), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 3,tree_position_z + 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 3,tree_position_z + 2), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 1,tree_position_y + 3,tree_position_z + 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 2,tree_position_y + 3,tree_position_z + 2), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 2,tree_position_y + 3,tree_position_z + 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 1,tree_position_y + 3,tree_position_z + 2), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 3,tree_position_z - 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 3,tree_position_z - 2), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 1,tree_position_y + 3,tree_position_z - 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 2,tree_position_y + 3,tree_position_z - 2), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 2,tree_position_y + 3,tree_position_z - 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 1,tree_position_y + 3,tree_position_z - 2), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x - 2,tree_position_y + 3,tree_position_z - 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x - 1,tree_position_y + 3,tree_position_z - 2), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x - 2,tree_position_y + 3,tree_position_z + 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x - 1,tree_position_y + 3,tree_position_z + 2), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 4,tree_position_z), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 1,tree_position_y + 4,tree_position_z), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x - 1,tree_position_y + 4,tree_position_z), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 4,tree_position_z + 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x,tree_position_y + 4,tree_position_z - 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 1,tree_position_y + 4,tree_position_z + 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x - 1,tree_position_y + 4,tree_position_z + 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 1,tree_position_y + 4,tree_position_z + 1), texture = leaves_texture)
      voxel = Voxel(position = (tree_position_x + 1,tree_position_y + 4,tree_position_z - 1), texture = leaves_texture)
  
  def cactus(cactus_position_x, cactus_position_y, cactus_position_z):
      voxel = Voxel(position = (cactus_position_x, cactus_position_y, cactus_position_z), texture = cactus_texture)
      cactus_height = int(random.uniform(2, 8))
      for number in range(0, cactus_height):
          voxel = Voxel(position = (cactus_position_x, cactus_position_y + number, cactus_position_z), texture = cactus_texture)
  
  def texture_update():
  
      grass_texture = load_texture('assets/grass_block.png')
      stone_texture = load_texture('assets/stone_block.png')
      brick_texture = load_texture('assets/brick_block.png')
      dirt_texture = load_texture('assets/dirt_block.png')
      sky_texture  = load_texture('assets/skybox.png')
      arm_texture  = load_texture('assets/arm_texture.png')
      leaves_texture = load_texture('assets/oak_leaves.png')
      log_texture = load_texture('assets/oak_log.png')
      diamond_ore_texture = load_texture('assets/diamond_ore.png')
      coal_ore_texture = load_texture('assets/coal_ore.png')
      iron_ore_texture = load_texture('assets/iron_ore.png')
      diamond_ore_block_texture = load_texture('assets/diamond_block.png')
      coal_ore_block_texture = load_texture('assets/coal_block.png')
      iron_ore_block_texture = load_texture('assets/iron_block.png')
      oak_planks_texture = load_texture('assets/oak_planks.png')
      crafting_table_texture = load_texture('assets/crafting_table.png')
      cobblestone_texture = load_texture('assets/cobblestone.png')
      sand_texture = load_texture('assets/sand.png')
      cactus_texture = load_texture('assets/cactus.png')
      water_texture = load_texture('assets/water.png')
  
  
  
  y = 0
      
  for z in range(13):
      for x in range(13):
          voxel = Voxel(position = (x,0 + y,z))
          if random.uniform(0,16) &gt; 15.5:
                  tree_position_x = x
                  tree_position_y = 0 + y + 1
                  tree_position_z = z
                  tree(tree_position_x, tree_position_y, tree_position_z)
  
  
  for z in range(13):
      for x in range(13):
          for y in range(2):
              voxel = Voxel(position = (x,-1,z), texture = dirt_texture)
  
  
  for z in range(13):
      for x in range(13):
          for y in range(7):
              voxel = Voxel(position = (x,-2,z), texture = stone_texture)
  
  
  
  block_pick = 1
  
  global inventory
  inventory = True
  
  player = FirstPersonController()
  sky = Sky()
  hand = Hand()
  
  Text.size = 0.05
  Text.default_resolution = 1080 * Text.size
  info = Text()
  
  texture_update()
  
  chunks_spawned = 1
  
  app.run()
  </code></pre>
  <p>Important code:</p>
  <pre><code>    for i in range(len(voxels)):
          index = voxels.index({
              'x': self.position.x,
              'y': self.position.y,
              'z': self.position.z,
              'position': self.position,
              'texture': self.texture
          })
          if self.texture == &quot;water.png&quot; and Vec3(index.x, index.y, index.z) == i.position:
  
              print(voxels[index])
              del voxels[index]
              destroy(self)
  </code></pre>