import mcpi.minecraft as minecraft
import mcpi.block as block
import minecraftstuff
import time
import datetime
import math
def findPointOnCircle(cx, cy, radius, angle):
x = cx + math.sin(math.radians(angle)) * radius
y = cy + math.cos(math.radians(angle)) * radius
x = int(round(x, 0))
y = int(round(y, 0))
return (x, y)
# Создаем соединение с Minecraft
mc = minecraft.Minecraft.create()
# Создаем объект для рисования в Minecraft
mcdrawing = minecraftstuff.MinecraftDrawing(mc)
# Получаем позицию игрока
pos = mc.player.getTilePos()
# Создаем циферблат часов над игроком
clockMiddle = pos
clockMiddle.y = clockMiddle.y + 25
CLOCK_RADIUS = 20
HOUR_HAND_LENGTH = 10
MIN_HAND_LENGTH = 18
SEC_HAND_LENGTH = 20
# Рисуем круг циферблата часов
mcdrawing.drawCircle(clockMiddle.x, clockMiddle.y, clockMiddle.z,
CLOCK_RADIUS, block.DIAMOND_BLOCK.id)
while True:
# Получаем текущее время
timeNow = datetime.datetime.now()
hours = timeNow.hour
if hours >= 12:
hours = timeNow.hour - 12
minutes = timeNow.minute
seconds = timeNow.second
# Расчет угла для часовой стрелки
hourHandAngle = (360 / 12) * hours
# Находим координаты конца часовой стрелки на циферблате
hourHandX, hourHandY = findPointOnCircle(clockMiddle.x, clockMiddle.y,
HOUR_HAND_LENGTH, hourHandAngle)
# Рисуем часовую стрелку
mcdrawing.drawLine(clockMiddle.x, clockMiddle.y, clockMiddle.z,
hourHandX, hourHandY, clockMiddle.z,
block.DIRT.id)
# Расчет угла для минутной стрелки
minHandAngle = (360 / 60) * minutes
# Находим координаты конца минутной стрелки на циферблате
minHandX, minHandY = findPointOnCircle(clockMiddle.x, clockMiddle.y,
MIN_HAND_LENGTH, minHandAngle)
# Рисуем минутную стрелку
mcdrawing.drawLine(clockMiddle.x, clockMiddle.y, clockMiddle.z - 1,
minHandX, minHandY, clockMiddle.z - 1,
block.WOOD_PLANKS.id)
# Расчет угла для секундной стрелки
secHandAngle = (360 / 60) * seconds
# Находим координаты конца секундной стрелки на циферблате
secHandX, secHandY = findPointOnCircle(clockMiddle.x, clockMiddle.y,
SEC_HAND_LENGTH, secHandAngle)
# Рисуем секундную стрелку
mcdrawing.drawLine(clockMiddle.x, clockMiddle.y, clockMiddle.z + 1,
secHandX, secHandY, clockMiddle.z + 1,
block.STONE.id)
# Ждем 1 секунду
time.sleep(1)
# Удаляем стрелки, нарисованные на предыдущем кадре
mcdrawing.drawLine(clockMiddle.x, clockMiddle.y, clockMiddle.z,
hourHandX, hourHandY, clockMiddle.z,
block.AIR.id)
mcdrawing.drawLine(clockMiddle.x, clockMiddle.y, clockMiddle.z - 1,
minHandX, minHandY, clockMiddle.z - 1,
block.AIR.id)
mcdrawing.drawLine(clockMiddle.x, clockMiddle.y, clockMiddle.z + 1,
secHandX, secHandY, clockMiddle.z + 1,
block.AIR.id)