Как получить актуальную инстанцию майнкрафта в потоке?

Версия Minecraft
1.7.10
API
Forge
Возможно ты этот код серверной части запускаешь, если это так, то сервер всегда будет возвращать Minecraft.getMinecraft().thePlayer как null
если ты запустишь данный код в событии тика игрока на клиенте, или в событии тика клиента, то данный код будет работать,
если ты собираешься выводить print в серверную консоль то код должен выполняться в событие тика игрока на сервере,
и это будет не Minecraft.getMinecraft() а event.getPlaeyer()
тебе надо изучить события сервера и клиента
 
  • Чего!?
Реакции: HQD_
1,038
57
229
Возможно ты этот код серверной части запускаешь
нет, дело в потоке. Дело в том что потоки работают по другому. И для того чтобы получить какую то переменную её в каком то состоянии, поток должен остановится и сообщить другому потоку (основному, что она ему нужна). Для потоков существуют семафоры (то есть светофоры порусски, которые определяют кому ехать, а кому стоять). Команда lock во многих языка замораживает состояние и не даёт другим потоком изменить переменную пока мы её не отпустим. А после, поток продолжает выполнение. Другие же потоки ждут завершения операций над этой переменной, вот прям ждут и после разморозки могут попытаться заморозить из своего потока. Это и называется синхронизацией.
Почитай про потоки, это самая наверное сложная тема в принципе. Но в принципе, там не так много надо знать для понимания общей концепции потоков.
То есть всё работает в потоке, но чаще всего в основном потоке. Поток который изначально выдали программе для запуска. Так называемый MainThread и дальше его обычно не рассматривают окружение, но при запуске игры кроме игры естественно существуют и запущенные другие процессы и потоки. И игра, это лишь 1 из потоков, внутри которого можно создать ещё потоки.
По сути всё что надо знать, это то что каждый поток отдельное пространство в измерениях, они не взаимосвязаны пока ты им это не скажешь. Ну как будто параллельная вселенная, она бежит со своим чувством времени и пространства.
Проще говоря, если ты обратишься к world из основного потока, там будут какие то данные. А если из другого потока, то там world ещё не будет существовать пока ты его не создаешь или не скажешь, что надо его взять из основного потока.

То есть чувак явно выстрелил себе в ногу и решил отстрелить себе обе руки раз полез в потоки без понимания этих принципов.

@HQD_ лови игрока в событиях или в основном потоке клиента, потоки тебе не нужны. Или читай как сказал @mts2200
 
Последнее редактирование:
1,074
72
372
Потоки в моддинге практически не используются, поскольку основное взаимодействие происходит и игровым миром и объектами находящимися в нём, чего делать вне главного потока игры категорически нельзя. Работа игры в таком случае станет непредсказуемой, с чем вы уже начали сталкиваться.
 
Сверху