Я только начал работу с mcpi и хочу иметь собственные команды для записи сообщений чата, начинающихся с / .
Как я могу использовать пользовательские команды для этого?
Pizza98 14 Июл 2021 в 16:19
Можете ли вы добавить несколько примеров команд, которые вы уже пробовали, или код, связанный с вашим вопросом?
14 Июл 2021 в 17:29
Я не знаю, как создать любую команду. Моя проблема в том, что я даже не знаю, поддерживает ли mcpi использование командной системы minecrafts. Я хочу знать, как регистрировать команды.
15 Июл 2021 в 18:06
3 ответа
Вы можете создать свой собственный. Вот пример того, что я делал в прошлом.
from mcpi.minecraft import Minecraft from mcpi import entity mc = Minecraft.create(address=»0.0.0.0″, port=4711) players_ids = mc.getPlayerEntityIds() print(len(players_ids), » entities available.») number = len(players_ids) mc.postToChat( «%s entities available.» %number) for id in players_ids: mc.postToChat(«Entity : %s» %id) def playerEntity1(player): #from mcLogListener import on_press import time from classSummon import ArrowTrap, DiamondTrap, EnderWarrior, FallingSky from jutsu import amenotejikara, allMightyPush, stillWater, lavaFlow, portalDoor, oakPlank, darkMatter, fireAShot from mcpi.minecraft import Minecraft mc = Minecraft.create(address=»0.0.0.0″, port=4711) #custom commands chatPost = «0» while True: for chatPost in mc.entity.pollChatPosts(players_ids[0]): if chatPost.message.lower() == «6»: mc.postToChat(«Amenotejikara is activated») chatPost = «6» elif chatPost.message.lower() == «7»: mc.postToChat(«All Mighty Push is activated») chatPost = «7» elif chatPost.message.lower() == «1»: mc.postToChat(«Water Pool jutsu!») chatPost = «1» elif chatPost.message.lower() == «2»: mc.postToChat(«Flowing Lava Jutsu!») chatPost = «2» elif chatPost.message.lower() == «3»: mc.postToChat(«Portal Summoning Jutsu») chatPost = «3» elif chatPost.message.lower() == «4»: mc.postToChat(«Oak Wood Jutsu») chatPost = «4» elif chatPost.message.lower() == «5»: mc.postToChat(«Obsidian Forbidin Jutsu») chatPost = «5» elif chatPost.message.lower() == ‘8’: mc.postToChat(«Fireball Jutsu») chatPost = «8» elif chatPost.message.lower() == ’11’: mc.postToChat(«Arrow Glass Prism Jutsu») chatPost = «11» elif chatPost.message.lower() == ’12’: mc.postToChat(«Diamond Prism Jutsu») chatPost = «12» elif chatPost.message.lower() == ’13’: mc.postToChat(«Ender Tools Jutsu») chatPost = «13» elif chatPost.message.lower() == ’14’: mc.postToChat(«Mighty Sand Trap») chatPost = «14» elif chatPost.message.lower() == ‘0’: mc.postToChat(«test») chatPost = «0» »’Listener for arrow shots»’ for blockhit in mc.entity.pollProjectileHits(players_ids[0]): pos = blockhit.pos x = pos.x y = pos.y z = pos.z if chatPost == «6»: amenotejikara(players_ids[0])#Teleporting Arrow elif chatPost == «7»: allMightyPush(players_ids[0])#Air Arrow elif chatPost == «8»: fireAShot(players_ids[0])#Fire Arrow elif chatPost == «11»: trapArrow = ArrowTrap(x, y, z, 3)#Trap arrow class trapArrow.build()#Pyramid1 trapArrow.bottom()#Pyramid2 elif chatPost == «14»: fArrow = FallingSky(x, y, z, 1)#FallingSky class fArrow.garvelPyramidHole()#Mob pit fArrow.garvelPyramidTop()#Falling sand fArrow.garvelPyramid()#falling sand fArrow.garvelPyramidBottom()#falling sand else: mc.events.clearAll() »’Sword block Listener»’ for blockhit in mc.entity.pollBlockHits(players_ids[0]): pos = blockhit.pos x = pos.x y = pos.y z = pos.z if chatPost == «1»: stillWater(players_ids[0])#Water block sword block elif chatPost == «2»: lavaFlow(players_ids[0])#Lava block sword block elif chatPost == «3»: portalDoor(players_ids[0])# 1*3 nether portal block elif chatPost == «4»: oakPlank(players_ids[0])#Wood block sword block elif chatPost == «5»: darkMatter(players_ids[0])#Obsidian block sword block elif chatPost == «12»: glassDiamond = DiamondTrap(x,y,z,3) #DiamondTrap class glassDiamond.buildB() elif chatPost == «13»: endLoot = EnderWarrior(x, y, z, 2)#EnderWarrior class endLoot.enderOre() endLoot.enderPumpkin() endLoot.crafting()
Надеюсь это поможет.
1. Установка и настройка Minecraft + Python (в Windows)
SoFrosty 24 Май 2022 в 21:58
Насколько я знаю, mcpi не поддерживает систему команд. Однако написание собственного не должно быть слишком сложным, если mcpi поддерживает события отправки сообщений, не уверен, как это будет называться в API, но я предполагаю, что это будет так. В любом случае у меня есть несколько идей о том, как это реализовать, некоторые лучше, чем другие.
1. Проверьте, есть ли перед сообщением «перехваченное» или полученное сообщение /, если да, удалите префикс и разделите строку пробелами. Однако это предлагает некоторые заметные проблемы. Во-первых, код стал бы чрезвычайно запутанным, серьезно запутанным, поскольку вам пришлось бы обрабатывать каждый аргумент самостоятельно.
Во-вторых, он устраняет возможность «экранированных» аргументов, в которых вы можете сказать, что аргумент является строкой, заключенной в двойные кавычки и может содержать пробелы. Это не сработает, так как оно разделится независимо от того, находится ли пробел в кавычках, и не признает их. Таковы ограничения этой относительно простой реализации. Отсюда идея № 2.
- Я использую эту реализацию для моего синтаксического анализатора аргументов для вспомогательной библиотеки для библиотеки ботов Golang Discord. Суть сводится к повторной проверке префикса, его удалению. Затем проверьте, не равна ли длина строки сообщения 0. Если она равна 0, игнорируйте сообщение, в противном случае сделайте следующее: Имейте регулярное выражение для идентификации аргументов, экранированных или неэкранированных. Найдите все совпадения в строке (игнорируя несовпадения, делая лишние пробелы не проблемой. yey!). Сохраните все совпадения в объекте «Аргумент», который будет иметь некоторые вспомогательные методы для анализа строки, чтобы сказать, что это число с плавающей запятой или целое число. (Чистейший код!!). Наконец, поместите все аргументы в массив или связанный список, если они расположены по порядку, и работайте оттуда. Если вам нужна ссылка (она написана на Golang, но на самом деле это не сложный язык), проверьте эту вспомогательную библиотеку, которую я написал: https://github.com/32Bites/wetgear.
Извините, если это трудно прочитать, дайте мне знать, если вам нужна помощь или что-то еще, независимо от того, что я желаю вам всего наилучшего.
Noah Shanaberger 16 Июл 2021 в 03:53
Не уверен, что это API-интерфейс mcpi или minecrafts, но я пытался распечатать письменные сообщения, и сообщения с косой чертой не отображались, но, вероятно, это просто mcpi не показывает его. Однако сейчас я начал с Java, так как я думаю, что она содержит полную поддержку API minecaft. В любом случае, я был бы рад, если бы вы узнали что-нибудь еще о поддержке Python для плагинов Minecraft, так как мне гораздо удобнее работать с Python, чем с Java.
17 Июл 2021 в 22:57
есть pollChatPosts() , но он зависает при вызове, однако мне действительно удалось создать клиент команд. В настоящее время я работаю над его обновлением, потому что код спагетти, но он работает с MCPI-Reborn: на данный момент расширен, я также сделал мод (в основном путем копирования чужого кода), который не будет отправлять сообщение в чат, если он начинается с / . Это полезно, потому что мой командный клиент работает, запуская MCPI-Reborn через подпроцесс, выполняющий действия при печати сообщений (например, [CHAT] / )
Только для разъяснения и во избежание скимминга, КОД БУДЕТ ОБНОВЛЕН СКОРО™
Надеюсь, это поможет: D
Источник: question-it.com
Minecraft: Pi edition API Python Library
This project mcpi-e is a fork from mcpi project [https://github.com/martinohanlon/mcpi] mcpi-e Python library for communicating with Minecraft: Pi edition and RaspberryJuice.
Installation
Windows
pip3 install —upgrade mcpi-e
Note: you could use py or python -m to speify the python in your system
py -m pip install —upgrade mcpi-e
Linux / MacOS
sudo pip3 install —upgrade mcpi-e
Usage
from mcpi_e.minecraft import Minecraft . mc = Minecraft.create(servername,4711,playerName)
mcpi-e Change log
1. Enhancement for using mcpi in server with multiple users
- User could pass player username as 3rd parameter when create a new Minecraft api instense. ex: mc=Minecraft.create(address,port,name)
- Change mc.Player to use entity so it will not pick the first user in the server.
2. Limit the Usage of mcpi
- Add the _send command 0.05s interval to slow down the speed
- limit the useage of setBlocks
- todo: limit the script usage range (x,y,z)
3. Some improvement
- Add BlockEnum, Logger, Settings ex:
mc.settings.SHOW_DEBUG=True print(«Is show debug msg»,mc.settings.SHOW_DEBUG) print(«Is show log msg»,mc.settings.SHOW_Log) print(«system speed:»,mc.settings.SYS_SPEED) mc.settings.SYS_SPEED=mc.settings.Speed.FAST (x,y,z)=pos=mc.player.getTilePos() debug(«this is debug msg») log(pos) warn(«warn»)
Источник: pypi.org
Python-сообщество
- Начало
- » Python для новичков
- » Отображение кириллицы из программы Python в чате Minecraft.
#1 Фев. 26, 2020 23:49:02
Отображение кириллицы из программы Python в чате Minecraft.
Здравствуйте. Начал изучать Python по книге “
Программируем с Minecraft. Создай свой мир с помощью Python” Крейга Ричардсона. Имеем файл:
# Постим в чат сообщение from mcpi.minecraft import Minecraft mc = Minecraft.create() # Задаём сообщение words = «Привет, мир Minecraft!» # Выводим сообщение в чат mc.postToChat(words)
В чате появляется вот это:
Подскажите, пожалуйста, это можно исправить?
Отредактировано VictorDO (Фев. 27, 2020 10:48:10)
Прикреплённый файлы:
2020-02-26_20-47-20.png (23,9 KБ)
#2 Фев. 27, 2020 05:48:27
Отображение кириллицы из программы Python в чате Minecraft.
похоже на проблему с кодировками.
чтобы что-то вам советовать надо знать версию питона (2 или 3). и иметь документацию о postToChat которую можно получить help(mc.postToChat)
#3 Фев. 27, 2020 06:04:36
Отображение кириллицы из программы Python в чате Minecraft.
doza_and
похоже на проблему с кодировками.чтобы что-то вам советовать надо знать версию питона (2 или 3). и иметь документацию о postToChat которую можно получить help(mc.postToChat)
Питон 3. Документацию посмотрю, как до компа доберусь. Спасибо.
#4 Фев. 27, 2020 10:36:03
Отображение кириллицы из программы Python в чате Minecraft.
1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например) , нажмите и вставьте ссылку на его url
…
есчщо
Источник: python.su