Спектральная стрела красная

Версия Minecraft
1.12.2
API
Forge

sk9zist :l

Исправился
981
18
157
Как выдать эффект спектральной стрелы но красного цвета?
 
Решение
Математика - точная наука.
В математике действительно мало открытий производится эмпирическим путем. Однако, первые представления о натуральных числах наверняка были получены из наблюдений количества объектов реального мира.

А какой метод каким добавлять в тиму?
В видосе есть команда, которая спаунит сущность с тимой, чекни, как эта команда работает внутри
можно просто добавить свечение на сущность, это возможно?
В ваниле это свечение вроде как основывается на фиче цветов тим, маловероятно, что оно может работать без тимы

sk9zist :l

Исправился
981
18
157
7,099
324
1,510
В Ender'sMagic запланирована фича на основе такой подсветки. Когда сделаем - сможешь посмотреть, как
1607602452004.png
 

sk9zist :l

Исправился
981
18
157
Когда сделаем - сможешь посмотреть, как
Я скорее всего раньше сделаю. Когда сделаю - поделюсь с вами и со всеми обязательно.
Спасибо

~~~~~
Нашёл какой-то мод eGlow, он подсвечивает игроков и можно настраивать цвет (а, нет, это всё же плагин)
 

sk9zist :l

Исправился
981
18
157
Объясните мне пожалуйста, один феномен, почему возникает такой лог:

Форматирование (BB-код):
[16:17:57] [Client thread/FATAL] [minecraft/Minecraft]: Error executing task
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: A team with the name '54w7j457j' already exists!
    at java.util.concurrent.FutureTask.report(Unknown Source) ~[?:1.8.0_261]
    at java.util.concurrent.FutureTask.get(Unknown Source) ~[?:1.8.0_261]
    at net.minecraft.util.Util.runTask(Util.java:54) [Util.class:?]
    at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1178) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:442) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_261]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_261]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_261]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_261]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_261]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_261]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_261]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_261]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: java.lang.IllegalArgumentException: A team with the name '54w7j457j' already exists!
    at net.minecraft.scoreboard.Scoreboard.createTeam(Scoreboard.java:295) ~[Scoreboard.class:?]
    at net.minecraft.client.network.NetHandlerPlayClient.handleTeams(NetHandlerPlayClient.java:2161) ~[NetHandlerPlayClient.class:?]
    at net.minecraft.network.play.server.SPacketTeams.processPacket(SPacketTeams.java:149) ~[SPacketTeams.class:?]
    at net.minecraft.network.play.server.SPacketTeams.processPacket(SPacketTeams.java:14) ~[SPacketTeams.class:?]
    at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) ~[PacketThreadUtil$1.class:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_261]
    at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_261]
    at net.minecraft.util.Util.runTask(Util.java:53) ~[Util.class:?]
    ... 15 more

Какие бы имена команды я не делал - всё равно пишет, что уже существует. Хоть я создам новый мир - всё равно пишет, хотя такой команды не должно существовать (с таким названием по типу 23shj3)fh


А также нашёл ещё видео про обводку на русском: (просто выскочило в рекомендациях)
 
7,099
324
1,510
Такой лог при создании тимы командой или кодом? Если второе, то сделано на основе кода команды?
 

sk9zist :l

Исправился
981
18
157
Такой лог при создании тимы командой или кодом?
Кодом конечно. Командой всё идеально прям странно, там ведь стоит в методе команды метод setColor команде а у меня точно также - но не работает.
(создаю команду scoreboard.createTeam. и на этом возникает ошибка, если же убираю эту строку и получаю команду, которую я должен предварительно командой в игре создать при этом то ошибки нет)
Если второе, то сделано на основе кода команды?
Конечно. Я могу хоть весь код команды скинуть.
 

sk9zist :l

Исправился
981
18
157
Решил. Вот код:
не придирайтесь, прошу
Java:
Scoreboard scoreboard = worldIn.getScoreboard();

ScorePlayerTeam scoreplayerteam = scoreboard.getTeam("1");

scoreboard.addPlayerToTeam(playerIn.getName().toString(), scoreplayerteam.getName().toString());

TextFormatting textformatting = TextFormatting.getValueByName("red");
scoreplayerteam.setColor(textformatting);
scoreplayerteam.setPrefix(textformatting.toString());
scoreplayerteam.setSuffix(TextFormatting.RESET.toString());
Почитал описание метода setColor, и понял (возможно) что надо установить также и префикс/суффикс. (потому что это устанавливаеться и в коде команды). Потом мои догадки подтвердились, и, всё заработало!

Осталось только понять, что же это за ошибка already exists team (команда уже существует), хотя после этого команда всё же создаёться. Очень странно. Сейчас я просто получаю уже созданную команду.

Удалять тиму (пока что не тестил, работаю над этим. Однако прошлый вариант - никуда не годится.):
Java:
Scoreboard scoreboard = worldIn.getScoreboard();
if(scoreboard.getTeam("1").getName() != null)
{
    ScorePlayerTeam team = scoreboard.getTeam("1");
    scoreboard.removeTeam(team);
}
 
7,099
324
1,510
А может, создать тимы для всех цветов заранее, а потом просто менять тиму сущности, когда нужно ее выделить определенным цветом?
 

sk9zist :l

Исправился
981
18
157
создать тимы для всех цветов заранее, а потом просто менять тиму сущности
Идея хорошая. Для себя я уже решил, что не буду удалять команду а создам просто одну команду отдельно для своего мода. И, мне необходимо делать только красный цвет.
 
7,099
324
1,510
Ок, так что работает? Почему мой ответ помечен решением? Он вроде только отдаленно помогает
 
1,560
86
204
Я считаю, что лучше перехватить методы и сделать так, чтобы рендер думал что конкретные мобы находятся в какой-то команде, нежели фактически ставить их в какую-то команду. Так как из-за использования /scoreboard этот эффект может поломаться.
 

sk9zist :l

Исправился
981
18
157
перехватить методы
У меня не получилось((
при установке цвета свечения игрока метод getTeamColor вообще никак не используеться, пробовал хукаться в setColor, выводит цвет команды если дебажить, но изменить его не получилось. Также, с помощью хуков можно только сделать один цвет свечения у ВСЕх игроков, либо надо сделать кучу проверок в самом хуке, передавать значения..
использовании /scoreboard этот эффект может поломаться.
почему?
 
1,560
86
204
Логично, что с помощью этой команды, можно убрать команду со своей подсветкой, да и я не думаю что постоянно добавлять и удалять мобов из команды это хорошая идея. На счёт перехвата. Явно 100% есть шанс того, чтобы это сделать, но надо рыться в исходниках.

@hohserg, многие сервера используют scoreboard для показа табло и установки команд в мини-играх.
 
7,099
324
1,510
В прямом. Если у тебя сервер с forge, то хранить инфу о мини-играх можно в капабилити и выводить в своем оверлее.
А на ваниле приходится костылить через то, что есть
 
Сверху