Port and tune 26.3 wood farming

This commit is contained in:
Tanner
2026-11-05 16:36:10 +00:00
parent b89f0f6ed2
commit 4c27f5058e
15 changed files with 412 additions and 40 deletions
+69
View File
@@ -0,0 +1,69 @@
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()