Как получить entity определенного игрока на сервере и засетать ему здоровье?

Версия Minecraft
1.7.10
API
Forge
Решение
Через
Java:
MinecraftServer.getServer().getConfigurationManager().func_152612_a(nickname);
получай игрока по нику (естественно заранее проверяя, онлайн ли он), дальше через AttributesModifiers меняй ему здоровье.
Через
Java:
MinecraftServer.getServer().getConfigurationManager().func_152612_a(nickname);
получай игрока по нику (естественно заранее проверяя, онлайн ли он), дальше через AttributesModifiers меняй ему здоровье.
Спасибо за ответ, но когда получаешь сервер, то его значение в мультиплеере нул, случаем не знаешь как правильно вызвать MinecraftServer.getServer()?
 
7,099
324
1,510
Этот код для серверной стороны. На клиенте получай игрока из объекта клиентского мира
Игроки вне области прорисовки не будут иметь представления на клиенте
 
Этот код для серверной стороны. На клиенте получай игрока из объекта клиентского мира
Игроки вне области прорисовки не будут иметь представления на клиенте
Спасибо большое за ответ, но немного не понятно как и где прописать ту часть кода для сервера, чтоб адекватно сработал метод getServer(), если ответишь, то буду премного благодарен
 
7,099
324
1,510
Твой мод будет работать на сервере? Если да, то проверяй,что MinecraftServer.getServer() выполняется на сервере. Например, если доступне объект World, то его свойство isRemote == false на сервере. Еще можно проверить FMLCommonHandler.instance.getEffectiveSide() == Side.SERVER
 
Твой мод будет работать на сервере? Если да, то проверяй,что MinecraftServer.getServer() выполняется на сервере. Например, если доступне объект World, то его свойство isRemote == false на сервере. Еще можно проверить FMLCommonHandler.instance.getEffectiveSide() == Side.SERVER
Да, мод специально для сервера, как раз таки мне нужно вызывать MinecraftServer.getServer() так, чтобы вызвался именно со стороны сервера, чтобы получить значение, а не нул, проблема в том, что я не знаю в какой части кода правильно вызывать этот самый метод, чтобы в будущем определить это значение в классе и спокойно использовать как раз для изменения здоровья игроков в определенный момент
 
Твой мод будет работать на сервере? Если да, то проверяй,что MinecraftServer.getServer() выполняется на сервере. Например, если доступне объект World, то его свойство isRemote == false на сервере. Еще можно проверить FMLCommonHandler.instance.getEffectiveSide() == Side.SERVER
я буквально недавно стал изучать моддинг, простите, если шибко туплю
 
250
12
24
Если тебе нужно изменять здоровье игрока при определенных действия можешь использовать обработчик событий

Java:
@SubscribeEvent
public void onUpdatePlayer(LivingUpdateEvent e)
{
    if(e.entity instanceof EntityPlayer)
    {
        EntityPlayer player = (EntityPlayer)e.entity;
        
        //Тут делаешь проверки на условия и меняешь его хп
        player.setHealth(20f);//20f это число
    }
}
 
Если тебе нужно изменять здоровье игрока при определенных действия можешь использовать обработчик событий

Java:
@SubscribeEvent
public void onUpdatePlayer(LivingUpdateEvent e)
{
    if(e.entity instanceof EntityPlayer)
    {
        EntityPlayer player = (EntityPlayer)e.entity;
      
        //Тут делаешь проверки на условия и меняешь его хп
        player.setHealth(20f);//20f это число
    }
}
Не, там при определенном клике на гуишке нужно здоровье определенного игрока на сервер изменять
 
250
12
24
Тогда отправляй пакет и в серверном обработчике делай свои дела

Если будешь получать игрока на сервере по нику, такой метод подойдет
Java:
public static EntityPlayer getPlayerFromName(String par1) {
    List players = MinecraftServer.getServer().getConfigurationManager().playerEntityList;
    Iterator iterator = players.iterator();
    EntityPlayer tempPlayer;
    do {
        if (!iterator.hasNext()) {
            return null;
        }
        tempPlayer = (EntityPlayer) iterator.next();
    } while (!tempPlayer.getCommandSenderName().toLowerCase().matches(par1.toLowerCase()));
    return tempPlayer;
}
 
250
12
24
А еще если тебе надо изменить максимальное кол-во хп, тоесть поставить не 20, а допустим 10 или 40. Надо использовать атрибуты, как тебе выше уже писали

Java:
UUID uuid = new UUID(1, 1);
double mod = 1;//1 - это одна строчка, если надо 1 сердечко добавить то 0.1, если пол сердца то 0.05 если 5 сердец то 0.5
//PS. Соответственно если хочешь удалить а не добавить то пишешь -0.1, -0.05, -0.5 и прочее

AttributeModifier modifierPlus = new AttributeModifier(uuid, "maxHealth", mod, 1);

public void changeMaxHP(EntityPlayer player)
{
    if(player.getEntityAttribute(SharedMonsterAttributes.maxHealth).getModifier(uuid) == null)
        player.getEntityAttribute(SharedMonsterAttributes.maxHealth).applyModifier(modifierPlus);
}


//Чтобы удалить это изменение надо такое написать
player.getEntityAttribute(SharedMonsterAttributes.maxHealth).removeModifier(modifierPlus);
 
1,074
72
372
250
12
24
Сверху