70 lines
2.6 KiB
Python
70 lines
2.6 KiB
Python
import math
|
|
import unittest
|
|
from unittest.mock import patch
|
|
from munch import Munch
|
|
|
|
from mosfet import utils
|
|
from mosfet.game import Game
|
|
from mosfet.info import blocks, items
|
|
|
|
|
|
class BlockBreakTimingTests(unittest.TestCase):
|
|
def test_leaf_time_uses_actual_tool_speed_and_game_ticks(self):
|
|
oak_leaves = blocks.MCD_BLOCKS['oak_leaves']['minStateId']
|
|
oak_log = items.get_id('oak_log')
|
|
wooden_hoe = items.get_id('wooden_hoe')
|
|
|
|
self.assertAlmostEqual(utils.break_time(oak_leaves, oak_log), 0.3)
|
|
self.assertAlmostEqual(utils.break_time(oak_leaves, wooden_hoe), 0.15)
|
|
self.assertAlmostEqual(
|
|
utils.break_time(oak_leaves, oak_log, in_water=True), 1.5)
|
|
self.assertAlmostEqual(
|
|
utils.break_time(oak_leaves, oak_log, on_ground=False), 1.5)
|
|
|
|
def test_efficiency_haste_and_fatigue_affect_break_ticks(self):
|
|
oak_leaves = blocks.MCD_BLOCKS['oak_leaves']['minStateId']
|
|
wooden_hoe = items.get_id('wooden_hoe')
|
|
self.assertAlmostEqual(utils.break_time(
|
|
oak_leaves, wooden_hoe, enchantments={'efficiency': 1}), 0.1)
|
|
self.assertAlmostEqual(utils.break_time(
|
|
oak_leaves, wooden_hoe, effects={'haste': 0}), 0.15)
|
|
self.assertAlmostEqual(utils.break_time(
|
|
oak_leaves, wooden_hoe,
|
|
effects={'mining_fatigue': 0}), 0.5)
|
|
|
|
def test_unbreakable_blocks_have_no_completion_deadline(self):
|
|
bedrock = blocks.MCD_BLOCKS['bedrock']['minStateId']
|
|
self.assertTrue(math.isinf(utils.break_time(bedrock)))
|
|
|
|
def test_game_sends_finish_after_calculated_tick_duration(self):
|
|
class RecordingConnection:
|
|
def __init__(self):
|
|
self.packets = []
|
|
|
|
def write_packet(self, packet, force=False):
|
|
self.packets.append(packet)
|
|
|
|
class FakeChunks:
|
|
@staticmethod
|
|
def get_block_at(*_position):
|
|
return blocks.MCD_BLOCKS['oak_leaves']['minStateId']
|
|
|
|
connection = RecordingConnection()
|
|
game = object.__new__(Game)
|
|
game.g = Munch(
|
|
connection=connection, chunks=FakeChunks(), inv={},
|
|
holding=items.get_id('oak_log'), holding_hand=0,
|
|
holding_slot=0)
|
|
game.sequence = 0
|
|
game.break_deadline = None
|
|
game.breaking_state = None
|
|
game.next_swing_at = 0.0
|
|
|
|
with patch('mosfet.game.time.monotonic', return_value=100.0):
|
|
self.assertTrue(game.break_block((0, 64, 0)))
|
|
self.assertAlmostEqual(game.break_deadline, 100.3)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|