本文整理汇总了Python中bravo.world.World.start方法的典型用法代码示例。如果您正苦于以下问题:Python World.start方法的具体用法?Python World.start怎么用?Python World.start使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类bravo.world.World
的用法示例。
在下文中一共展示了World.start方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: TestWorldConfig
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class TestWorldConfig(unittest.TestCase):
def setUp(self):
self.name = "unittest"
self.bcp = BravoConfigParser()
self.bcp.add_section("world unittest")
self.bcp.set("world unittest", "url", "")
self.bcp.set("world unittest", "serializer", "memory")
self.w = World(self.bcp, self.name)
self.w.pipeline = []
def test_trivial(self):
pass
def test_world_configured_seed(self):
"""
Worlds can have their seed set via configuration.
"""
self.bcp.set("world unittest", "seed", "42")
self.w.start()
self.assertEqual(self.w.level.seed, 42)
self.w.stop()
示例2: TestWorld
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class TestWorld(unittest.TestCase):
def setUp(self):
self.name = "unittest"
self.bcp = BravoConfigParser()
self.bcp.add_section("world unittest")
self.bcp.set("world unittest", "url", "")
self.bcp.set("world unittest", "serializer", "memory")
self.w = World(self.bcp, self.name)
self.w.pipeline = []
self.w.start()
def tearDown(self):
self.w.stop()
def test_trivial(self):
pass
def test_load_player_initial(self):
"""
Calling load_player() on a player which has never been loaded should
not result in an exception. Instead, the player should be returned,
wrapped in a Deferred.
"""
# For bonus points, assert that the player's username is correct.
d = self.w.load_player("unittest")
@d.addCallback
def cb(player):
self.assertEqual(player.username, "unittest")
return d
示例3: TestWorld
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class TestWorld(unittest.TestCase):
def setUp(self):
self.name = "unittest"
self.d = tempfile.mkdtemp()
bravo.config.configuration.add_section("world unittest")
bravo.config.configuration.set("world unittest", "url", "file://%s" % self.d)
bravo.config.configuration.set("world unittest", "serializer",
"alpha")
self.w = World(self.name)
self.w.pipeline = []
self.w.start()
def tearDown(self):
self.w.stop()
del self.w
shutil.rmtree(self.d)
bravo.config.configuration.remove_section("world unittest")
def test_trivial(self):
pass
def test_load_player_initial(self):
"""
Calling load_player() on a player which has never been loaded should
not result in an exception. Instead, the player should be returned,
wrapped in a Deferred.
"""
# For bonus points, assert that the player's username is correct.
d = self.w.load_player("unittest")
@d.addCallback
def cb(player):
self.assertEqual(player.username, "unittest")
return d
示例4: TestWorldChunks
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class TestWorldChunks(unittest.TestCase):
def setUp(self):
self.name = "unittest"
self.bcp = BravoConfigParser()
self.bcp.add_section("world unittest")
self.bcp.set("world unittest", "url", "")
self.bcp.set("world unittest", "serializer", "memory")
self.w = World(self.bcp, self.name)
self.w.pipeline = []
self.w.start()
def tearDown(self):
self.w.stop()
def test_trivial(self):
pass
@inlineCallbacks
def test_request_chunk_identity(self):
first = yield self.w.request_chunk(0, 0)
second = yield self.w.request_chunk(0, 0)
self.assertIs(first, second)
@inlineCallbacks
def test_request_chunk_cached_identity(self):
# Turn on the cache and get a few chunks in there, then request a
# chunk that is in the cache.
yield self.w.enable_cache(1)
first = yield self.w.request_chunk(0, 0)
second = yield self.w.request_chunk(0, 0)
self.assertIs(first, second)
@inlineCallbacks
def test_get_block(self):
chunk = yield self.w.request_chunk(0, 0)
# Fill the chunk with random stuff.
chunk.blocks = array("B")
chunk.blocks.fromstring(os.urandom(32768))
for x, y, z in product(xrange(2), repeat=3):
# This works because the chunk is at (0, 0) so the coords don't
# need to be adjusted.
block = yield self.w.get_block((x, y, z))
self.assertEqual(block, chunk.get_block((x, y, z)))
@inlineCallbacks
def test_get_metadata(self):
chunk = yield self.w.request_chunk(0, 0)
# Fill the chunk with random stuff.
chunk.metadata = array("B")
chunk.metadata.fromstring(os.urandom(32768))
for x, y, z in product(xrange(2), repeat=3):
# This works because the chunk is at (0, 0) so the coords don't
# need to be adjusted.
metadata = yield self.w.get_metadata((x, y, z))
self.assertEqual(metadata, chunk.get_metadata((x, y, z)))
@inlineCallbacks
def test_get_block_readback(self):
chunk = yield self.w.request_chunk(0, 0)
# Fill the chunk with random stuff.
chunk.blocks = array("B")
chunk.blocks.fromstring(os.urandom(32768))
# Evict the chunk and grab it again.
yield self.w.save_chunk(chunk)
del chunk
chunk = yield self.w.request_chunk(0, 0)
for x, y, z in product(xrange(2), repeat=3):
# This works because the chunk is at (0, 0) so the coords don't
# need to be adjusted.
block = yield self.w.get_block((x, y, z))
self.assertEqual(block, chunk.get_block((x, y, z)))
@inlineCallbacks
def test_get_block_readback_negative(self):
chunk = yield self.w.request_chunk(-1, -1)
# Fill the chunk with random stuff.
chunk.blocks = array("B")
chunk.blocks.fromstring(os.urandom(32768))
# Evict the chunk and grab it again.
yield self.w.save_chunk(chunk)
del chunk
chunk = yield self.w.request_chunk(-1, -1)
for x, y, z in product(xrange(2), repeat=3):
block = yield self.w.get_block((x - 16, y, z - 16))
self.assertEqual(block, chunk.get_block((x, y, z)))
@inlineCallbacks
#.........这里部分代码省略.........
示例5: TestGrass
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class TestGrass(TestCase):
def setUp(self):
self.bcp = BravoConfigParser()
self.bcp.add_section("world unittest")
self.bcp.set("world unittest", "url", "")
self.bcp.set("world unittest", "serializer", "memory")
self.w = World(self.bcp, "unittest")
self.w.pipeline = []
self.w.start()
self.f = GrassMockFactory()
self.f.world = self.w
self.w.factory = self.f
plugins = retrieve_plugins(IAutomaton, factory=self.f)
self.hook = plugins["grass"]
def tearDown(self):
self.w.stop()
def test_trivial(self):
pass
@inlineCallbacks
def test_not_dirt(self):
"""
Blocks which aren't dirt by the time they're processed will be
ignored.
"""
chunk = yield self.w.request_chunk(0, 0)
chunk.set_block((0, 0, 0), blocks["bedrock"].slot)
# Run the loop once.
self.hook.feed((0, 0, 0))
self.hook.process()
# We shouldn't have any pending blocks now.
self.assertFalse(self.hook.tracked)
@inlineCallbacks
def test_unloaded_chunk(self):
"""
The grass automaton can't load chunks, so it will stop tracking blocks
on the edge of the loaded world.
"""
chunk = yield self.w.request_chunk(0, 0)
chunk.set_block((0, 0, 0), blocks["dirt"].slot)
# Run the loop once.
self.hook.feed((0, 0, 0))
self.hook.process()
# We shouldn't have any pending blocks now.
self.assertFalse(self.hook.tracked)
@inlineCallbacks
def test_surrounding(self):
"""
When surrounded by eight grassy neighbors, dirt should turn into grass
immediately.
"""
chunk = yield self.w.request_chunk(0, 0)
# Set up grassy surroundings.
for x, z in product(xrange(0, 3), repeat=2):
chunk.set_block((x, 0, z), blocks["grass"].slot)
# Our lone Cinderella.
chunk.set_block((1, 0, 1), blocks["dirt"].slot)
# Do the actual hook run. This should take exactly one run.
self.hook.feed((1, 0, 1))
self.hook.process()
self.assertFalse(self.hook.tracked)
self.assertEqual(chunk.get_block((1, 0, 1)), blocks["grass"].slot)
def test_surrounding_not_dirt(self):
"""
Blocks which aren't dirt by the time they're processed will be
ignored, even when surrounded by grass.
"""
d = self.w.request_chunk(0, 0)
@d.addCallback
def cb(chunk):
# Set up grassy surroundings.
for x, z in product(xrange(0, 3), repeat=2):
chunk.set_block((x, 0, z), blocks["grass"].slot)
chunk.set_block((1, 0, 1), blocks["bedrock"].slot)
#.........这里部分代码省略.........
示例6: BravoFactory
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class BravoFactory(Factory):
"""
A ``Factory`` that creates ``BravoProtocol`` objects when connected to.
"""
implements(IPushProducer)
protocol = BravoProtocol
timestamp = None
time = 0
day = 0
eid = 1
handshake_hook = None
login_hook = None
interfaces = []
def __init__(self, config, name):
"""
Create a factory and world.
``name`` is the string used to look up factory-specific settings from
the configuration.
:param str name: internal name of this factory
"""
self.name = name
self.config = config
self.config_name = "world %s" % name
self.world = World(self.config, self.name)
self.world.factory = self
self.protocols = dict()
self.connectedIPs = defaultdict(int)
self.mode = self.config.get(self.config_name, "mode")
if self.mode not in ("creative", "survival"):
raise Exception("Unsupported mode %s" % self.mode)
self.limitConnections = self.config.getintdefault(self.config_name,
"limitConnections",
0)
self.limitPerIP = self.config.getintdefault(self.config_name,
"limitPerIP", 0)
self.vane = WeatherVane(self)
def startFactory(self):
log.msg("Initializing factory for world '%s'..." % self.name)
authenticator = self.config.get(self.config_name, "authenticator")
selected = retrieve_named_plugins(IAuthenticator, [authenticator])[0]
log.msg("Using authenticator %s" % selected.name)
self.handshake_hook = selected.handshake
self.login_hook = selected.login
# Get our plugins set up.
self.register_plugins()
log.msg("Starting world...")
self.world.start()
# Start up the permanent cache.
# has_option() is not exactly desirable, but it's appropriate here
# because we don't want to take any action if the key is unset.
if self.config.has_option(self.config_name, "perm_cache"):
cache_level = self.config.getint(self.config_name, "perm_cache")
self.world.enable_cache(cache_level)
log.msg("Starting timekeeping...")
self.timestamp = reactor.seconds()
self.time = self.world.time
self.update_season()
self.time_loop = LoopingCall(self.update_time)
self.time_loop.start(2)
log.msg("Starting entity updates...")
# Start automatons.
for automaton in self.automatons:
automaton.start()
self.chat_consumers = set()
log.msg("Factory successfully initialized for world '%s'!" % self.name)
def stopFactory(self):
"""
Called before factory stops listening on ports. Used to perform
shutdown tasks.
"""
log.msg("Shutting down world...")
# Stop automatons. Technically, they may not actually halt until their
#.........这里部分代码省略.........
示例7: TestWater
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class TestWater(TestCase):
def setUp(self):
# Set up world.
self.name = "unittest"
self.bcp = BravoConfigParser()
self.bcp.add_section("world unittest")
self.bcp.set("world unittest", "url", "")
self.bcp.set("world unittest", "serializer", "memory")
self.w = World(self.bcp, self.name)
self.w.pipeline = []
self.w.start()
# And finally the mock factory.
self.f = PhysicsMockFactory()
self.f.world = self.w
# Using dig hook to grab the plugin since the build hook was nuked in
# favor of the automaton interface.
self.p = bravo.plugin.retrieve_plugins(IDigHook, factory=self.f)
self.hook = self.p["water"]
def tearDown(self):
self.w.stop()
self.hook.stop()
def test_trivial(self):
pass
def test_update_fluid_negative(self):
"""
update_fluid() should always return False for Y at the bottom of the
world.
"""
self.assertFalse(self.hook.update_fluid(self.w, (0, -1, 0), False))
def test_update_fluid_unloaded(self):
self.assertRaises(ChunkNotLoaded, self.hook.update_fluid, self.w,
(0, 0, 0), False)
def test_update_fluid(self):
d = self.w.request_chunk(0, 0)
@d.addCallback
def cb(chunk):
self.assertTrue(self.hook.update_fluid(self.w, (0, 0, 0), False))
self.assertEqual(self.w.sync_get_block((0, 0, 0)),
blocks["water"].slot)
self.assertEqual(self.w.sync_get_metadata((0, 0, 0)), 0)
return d
def test_update_fluid_metadata(self):
d = self.w.request_chunk(0, 0)
@d.addCallback
def cb(chunk):
self.assertTrue(self.hook.update_fluid(self.w, (0, 0, 0), False,
1))
self.assertEqual(self.w.sync_get_metadata((0, 0, 0)), 1)
return d
def test_update_fluid_falling(self):
d = self.w.request_chunk(0, 0)
@d.addCallback
def cb(chunk):
self.assertTrue(self.hook.update_fluid(self.w, (0, 0, 0), True))
self.assertEqual(self.w.sync_get_metadata((0, 0, 0)), 8)
return d
def test_zero_y(self):
"""
Double-check that water placed on the very bottom of the world doesn't
cause internal errors.
"""
self.w.set_block((0, 0, 0), blocks["spring"].slot)
self.hook.tracked.add((0, 0, 0))
# Tight-loop run the hook to equilibrium; if any exceptions happen,
# they will bubble up.
while self.hook.tracked:
self.hook.process()
def test_spring_spread(self):
d = self.w.request_chunk(0, 0)
@d.addCallback
def cb(chunk):
chunk.set_block((1, 0, 1), blocks["spring"].slot)
self.hook.tracked.add((1, 0, 1))
# Tight-loop run the hook to equilibrium.
while self.hook.tracked:
#.........这里部分代码省略.........
示例8: TestRedstone
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class TestRedstone(TestCase):
def setUp(self):
# Set up world.
self.name = "unittest"
self.bcp = BravoConfigParser()
self.bcp.add_section("world unittest")
self.bcp.set("world unittest", "url", "")
self.bcp.set("world unittest", "serializer", "memory")
self.w = World(self.bcp, self.name)
self.w.pipeline = []
self.w.start()
# And finally the mock factory.
self.f = RedstoneMockFactory()
self.f.world = self.w
self.p = retrieve_plugins(IDigHook, factory=self.f)
self.hook = self.p["redstone"]
def tearDown(self):
self.w.stop()
def test_trivial(self):
pass
def test_and_gate(self):
"""
AND gates should work.
This test also bumps up against a chunk boundary intentionally.
"""
d = self.w.request_chunk(0, 0)
@d.addCallback
def cb(chunk):
for i1, i2, o in (
(False, False, False),
(True, False, False),
(False, True, False),
(True, True, True),
):
# Reset the hook.
self.hook.asic = Asic()
# The tableau.
chunk.set_block((1, 1, 1), blocks["sand"].slot)
chunk.set_block((1, 1, 2), blocks["sand"].slot)
chunk.set_block((1, 1, 3), blocks["sand"].slot)
chunk.set_block((1, 2, 1), blocks["redstone-torch"].slot)
chunk.set_metadata((1, 2, 1),
blocks["redstone-torch"].orientation("+y"))
chunk.set_block((1, 2, 3), blocks["redstone-torch"].slot)
chunk.set_metadata((1, 2, 3),
blocks["redstone-torch"].orientation("+y"))
chunk.set_block((1, 2, 2), blocks["redstone-wire"].slot)
# Output torch.
chunk.set_block((2, 1, 2), blocks["redstone-torch"].slot)
chunk.set_metadata((2, 1, 2),
blocks["redstone-torch"].orientation("+x"))
# Attach the levers to the sand block.
orientation = blocks["lever"].orientation("-x")
iblock, imetadata = truthify_block(i1, blocks["lever"].slot,
orientation)
chunk.set_block((0, 1, 1), iblock)
chunk.set_metadata((0, 1, 1), imetadata)
iblock, imetadata = truthify_block(i2, blocks["lever"].slot,
orientation)
chunk.set_block((0, 1, 3), iblock)
chunk.set_metadata((0, 1, 3), imetadata)
# Run the circuit, starting at the switches. Six times:
# Lever (x2), sand (x2), torch (x2), wire, block, torch.
self.hook.feed((0, 1, 1))
self.hook.feed((0, 1, 3))
self.hook.process()
self.hook.process()
self.hook.process()
self.hook.process()
self.hook.process()
self.hook.process()
block = chunk.get_block((2, 1, 2))
metadata = chunk.get_metadata((2, 1, 2))
self.assertEqual((block, metadata),
truthify_block(o, block, metadata))
return d
def test_or_gate(self):
"""
OR gates should work.
"""
#.........这里部分代码省略.........
示例9: TestWorldChunks
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class TestWorldChunks(unittest.TestCase):
def setUp(self):
self.name = "unittest"
self.d = tempfile.mkdtemp()
bravo.config.configuration.add_section("world unittest")
bravo.config.configuration.set("world unittest", "url", "file://%s" % self.d)
bravo.config.configuration.set("world unittest", "serializer",
"alpha")
self.w = World(self.name)
self.w.pipeline = []
self.w.start()
def tearDown(self):
self.w.stop()
del self.w
shutil.rmtree(self.d)
bravo.config.configuration.remove_section("world unittest")
def test_trivial(self):
pass
@inlineCallbacks
def test_get_block(self):
chunk = yield self.w.request_chunk(0, 0)
# Fill the chunk with random stuff.
chunk.blocks = numpy.fromstring(numpy.random.bytes(chunk.blocks.size),
dtype=numpy.uint8)
chunk.blocks.shape = (16, 16, 128)
for x, y, z in product(xrange(2), repeat=3):
# This works because the chunk is at (0, 0) so the coords don't
# need to be adjusted.
block = yield self.w.get_block((x, y, z))
self.assertEqual(block, chunk.get_block((x, y, z)))
@inlineCallbacks
def test_get_metadata(self):
chunk = yield self.w.request_chunk(0, 0)
# Fill the chunk with random stuff.
chunk.metadata = numpy.fromstring(numpy.random.bytes(chunk.blocks.size),
dtype=numpy.uint8)
chunk.metadata.shape = (16, 16, 128)
for x, y, z in product(xrange(2), xrange(2), xrange(2)):
# This works because the chunk is at (0, 0) so the coords don't
# need to be adjusted.
metadata = yield self.w.get_metadata((x, y, z))
self.assertEqual(metadata, chunk.get_metadata((x, y, z)))
@inlineCallbacks
def test_get_block_readback(self):
chunk = yield self.w.request_chunk(0, 0)
# Fill the chunk with random stuff.
chunk.blocks = numpy.fromstring(numpy.random.bytes(chunk.blocks.size),
dtype=numpy.uint8)
chunk.blocks.shape = (16, 16, 128)
# Evict the chunk and grab it again.
self.w.save_chunk(chunk)
del chunk
self.w.chunk_cache.clear()
self.w.dirty_chunk_cache.clear()
chunk = yield self.w.request_chunk(0, 0)
for x, y, z in product(xrange(2), xrange(2), xrange(2)):
# This works because the chunk is at (0, 0) so the coords don't
# need to be adjusted.
block = yield self.w.get_block((x, y, z))
self.assertEqual(block, chunk.get_block((x, y, z)))
@inlineCallbacks
def test_get_block_readback_negative(self):
chunk = yield self.w.request_chunk(-1, -1)
# Fill the chunk with random stuff.
chunk.blocks = numpy.fromstring(numpy.random.bytes(chunk.blocks.size),
dtype=numpy.uint8)
chunk.blocks.shape = (16, 16, 128)
# Evict the chunk and grab it again.
self.w.save_chunk(chunk)
del chunk
self.w.chunk_cache.clear()
self.w.dirty_chunk_cache.clear()
chunk = yield self.w.request_chunk(-1, -1)
for x, y, z in product(xrange(2), xrange(2), xrange(2)):
block = yield self.w.get_block((x - 16, y, z - 16))
self.assertEqual(block, chunk.get_block((x, y, z)))
@inlineCallbacks
def test_get_metadata_readback(self):
chunk = yield self.w.request_chunk(0, 0)
#.........这里部分代码省略.........
示例10: BravoFactory
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class BravoFactory(Factory):
"""
A ``Factory`` that creates ``BravoProtocol`` objects when connected to.
"""
implements(IPushProducer)
protocol = BravoProtocol
timestamp = None
time = 0
day = 0
eid = 1
handshake_hook = None
login_hook = None
interfaces = []
def __init__(self, config, name):
"""
Create a factory and world.
``name`` is the string used to look up factory-specific settings from
the configuration.
:param str name: internal name of this factory
"""
self.name = name
self.config = config
self.config_name = "world %s" % name
self.world = World(self.config, self.name)
self.world.factory = self
self.protocols = dict()
self.connectedIPs = defaultdict(int)
self.mode = self.config.get(self.config_name, "mode")
if self.mode not in ("creative", "survival"):
raise Exception("Unsupported mode %s" % self.mode)
self.limitConnections = self.config.getintdefault(self.config_name,
"limitConnections",
0)
self.limitPerIP = self.config.getintdefault(self.config_name,
"limitPerIP", 0)
self.vane = WeatherVane(self)
def startFactory(self):
log.msg("Initializing factory for world '%s'..." % self.name)
authenticator = self.config.get(self.config_name, "authenticator")
selected = retrieve_named_plugins(IAuthenticator, [authenticator])[0]
log.msg("Using authenticator %s" % selected.name)
self.handshake_hook = selected.handshake
self.login_hook = selected.login
# Get our plugins set up.
self.register_plugins()
log.msg("Starting world...")
self.world.start()
# Start up the permanent cache.
# has_option() is not exactly desirable, but it's appropriate here
# because we don't want to take any action if the key is unset.
if self.config.has_option(self.config_name, "perm_cache"):
cache_level = self.config.getint(self.config_name, "perm_cache")
self.world.enable_cache(cache_level)
log.msg("Starting timekeeping...")
self.timestamp = reactor.seconds()
self.time = self.world.time
self.update_season()
self.time_loop = LoopingCall(self.update_time)
self.time_loop.start(2)
log.msg("Starting entity updates...")
# Start automatons.
for automaton in self.automatons:
automaton.start()
self.chat_consumers = set()
log.msg("Factory successfully initialized for world '%s'!" % self.name)
def stopFactory(self):
"""
Called before factory stops listening on ports. Used to perform
shutdown tasks.
"""
log.msg("Shutting down world...")
# Stop automatons. Technically, they may not actually halt until their
#.........这里部分代码省略.........
示例11: TestRedstone
# 需要导入模块: from bravo.world import World [as 别名]
# 或者: from bravo.world.World import start [as 别名]
class TestRedstone(unittest.TestCase):
def setUp(self):
# Set up world.
self.name = "unittest"
self.d = tempfile.mkdtemp()
bravo.config.configuration.add_section("world unittest")
bravo.config.configuration.set("world unittest", "url",
"file://%s" % self.d)
bravo.config.configuration.set("world unittest", "serializer",
"alpha")
self.w = World(self.name)
self.w.pipeline = []
self.w.start()
# And finally the mock factory.
self.f = RedstoneMockFactory()
self.f.world = self.w
pp = {"factory": self.f}
self.p = retrieve_plugins(IDigHook, parameters=pp)
if "redstone" not in self.p:
raise unittest.SkipTest("Plugin not present")
self.hook = self.p["redstone"]
def tearDown(self):
self.w.stop()
shutil.rmtree(self.d)
bravo.config.configuration.remove_section("world unittest")
def test_trivial(self):
pass
def test_update_wires_enable(self):
"""
update_wires() should correctly light up a wire.
"""
d = self.w.request_chunk(0, 0)
@d.addCallback
def cb(chunk):
for i in range(1, 15):
chunk.set_block((i, 1, 1),
blocks["redstone-wire"].slot)
chunk.set_metadata((i, 1, 1), 0x0)
# Enable wires.
self.hook.update_wires(1, 1, 1, True)
for i in range(1, 15):
metadata = chunk.get_metadata((i, 1, 1))
self.assertEqual(metadata, 0xf - i + 1)
return d
def test_update_wires_disable(self):
"""
update_wires() should correctly drain a wire.
"""
d = self.w.request_chunk(0, 0)
@d.addCallback
def cb(chunk):
for i in range(1, 15):
chunk.set_block((i, 1, 1),
blocks["redstone-wire"].slot)
chunk.set_metadata((i, 1, 1), i)
# Enable wires.
self.hook.update_wires(1, 1, 1, False)
for i in range(1, 15):
metadata = chunk.get_metadata((i, 1, 1))
self.assertEqual(metadata, 0x0)
return d
def test_switch(self):
"""
Levers should work.
"""
d = self.w.request_chunk(0, 0)
@d.addCallback
def cb(chunk):
chunk.set_block((1, 1, 1), blocks["lever"].slot)
chunk.set_block((2, 1, 1), blocks["sand"].slot)
chunk.set_block((3, 1, 1), blocks["redstone-wire"].slot)
# Attach the lever to the sand block, and throw it. For sanity
# purposes, grab the orientation metadata from the block
# definition.
#.........这里部分代码省略.........