def test_single_block_damage_packet(self): chunk = Chunk(2, 1) chunk.populated = True chunk.set_block((2, 4, 8), 1) chunk.set_metadata((2, 4, 8), 2) packet = chunk.get_damage_packet() self.assertEqual(packet, '\x35\x00\x00\x00\x22\x04\x00\x00\x00\x18\x01\x02')
def load_chunk(self, x, z): """ Retrieve a ``Chunk`` synchronously. This method does lots of automatic caching of chunks to ensure that disk I/O is kept to a minimum. """ if (x, z) in self.chunk_cache: return self.chunk_cache[x, z] elif (x, z) in self.dirty_chunk_cache: return self.dirty_chunk_cache[x, z] chunk = Chunk(x, z) self.serializer.load_chunk(chunk) if chunk.populated: self.chunk_cache[x, z] = chunk else: self.populate_chunk(chunk) chunk.populated = True chunk.dirty = True self.dirty_chunk_cache[x, z] = chunk self.postprocess_chunk(chunk) return chunk
def test_get_damage_packet_single(self): # Create a chunk. c = Chunk(0, 0) # Damage the block. c.populated = True c.set_block((0, 0, 0), 1) # Enable warning-to-error for DeprecationWarning, then see whether # retrieving damage causes a warning-to-error to be raised. (It # shouldn't.) warnings.simplefilter("error", DeprecationWarning) c.get_damage_packet() # ...And reset the warning filters. warnings.resetwarnings()
def load_chunk(self, x, z): """ Retrieve a ``Chunk`` synchronously. This method does lots of automatic caching of chunks to ensure that disk I/O is kept to a minimum. """ if (x, z) in self.chunk_cache: return self.chunk_cache[x, z] elif (x, z) in self.dirty_chunk_cache: return self.dirty_chunk_cache[x, z] chunk = Chunk(x, z) first, second, filename = names_for_chunk(x, z) f = self.folder.child(first).child(second) if not f.exists(): f.makedirs() f = f.child(filename) if f.exists() and f.getsize(): chunk.load_from_tag(read_from_file(f.open("r"))) if chunk.populated: self.chunk_cache[x, z] = chunk else: self.populate_chunk(chunk) chunk.populated = True chunk.dirty = True self.dirty_chunk_cache[x, z] = chunk # Apply the current season to the chunk. if self.season: self.season.transform(chunk) # Since this chunk hasn't been given to any player yet, there's no # conceivable way that any meaningful damage has been accumulated; # anybody loading any part of this chunk will want the entire thing. # Thus, it should start out undamaged. chunk.clear_damage() return chunk