EntityBoundingBox

Статус
В этой теме нельзя размещать новые ответы.
Версия Minecraft
1.12.2

sk9zist :l

Исправился
981
18
157
Выпрашивание кода запрещено
Напсал вот это, чтобы обнаруживать сущностей в радиусе трёх блоков от игрока (меня):
Java:
List<EntityLivingBase> list = player.world.getEntitiesWithinAABB(EntityLivingBase.class,
                   player.getEntityBoundingBox().expand(3, 2, 1));
Всё работает. Как теперь отнимать почти всё здоровье у полученных сущностей и половину у меча в руке? Желательно пример кода, иначе практически ничего в этом непонимаю..
И, также можно узнать как сделать этот радиус в виде сферы, а не куба?
 

sk9zist :l

Исправился
981
18
157
Благодарю. Но у меня после вызова setDead() на entity в list они пропадают, но после перехода в сурвайвл меня кто-то бьёт, они также могут потом появляться, но чаще всего меня просто бьёт пустота.
Также у меня установлена проверка, если entity мертвы - у меча отниметься прочность в количестве, зависящем от типа меча в руке, но это не важно. Проверка проходит, доказывая что они мертвы, но на самом деле это не так. Почему?
 

sk9zist :l

Исправился
981
18
157

sk9zist :l

Исправился
981
18
157
Всё-равно не работает.. Проверка не проходит. Даже и незнаю что делать, у меня такая ситуация
 

sk9zist :l

Исправился
981
18
157
Могу весь класс

LayerField.java:
public class LayerField implements LayerRenderer<EntityPlayer>
{
   @Override
   public void doRenderLayer(EntityPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale)
   {
       GlStateManager.pushMatrix();
       GlStateManager.translate(0, 1.50F, 0);
       GlStateManager.rotate(180F, 0, 20, 20);
       GlStateManager.scale(7.85F, 7.85F, 0.55F);

       if(player.isSneaking()) //просто при приседании текстура заходит в блоки травы
       {
           GlStateManager.translate(0, 0, -0.3F);
       }

       if(Keyboard.isKeyDown(48))
       {
           //Рендер
           Minecraft.getMinecraft().getRenderItem().renderItem(new ItemStack(AItemRegistrations.knife_blade_field), player, ItemCameraTransforms.TransformType.FIXED, false);
           GlStateManager.popMatrix();

           //Получить сущностей в окружности
           List<Entity> list = player.world.getEntitiesWithinAABBExcludingEntity(player,
                   player.getEntityBoundingBox().grow(3.0D, 1.0D, 3.0D));
                           for (Entity entity : list)
                           {
                               if(!player.world.isRemote)
                               {
                                   System.out.println("check worked");
                                   entity.setDead();
                                   //entity.attackEntityFrom(DamageSource.OUT_OF_WORLD, Float.MAX_VALUE);
                               }
                               if(entity.isDead)
                               {
                                   if(player.getHeldItemMainhand().getItem() == Items.DIAMOND_SWORD)
                                   { //3
                                       player.getHeldItemMainhand().damageItem(list.size()*8, player);
                                   } //6
                                   if(player.getHeldItemMainhand().getItem() == Items.GOLDEN_SWORD)
                                   {
                                       player.getHeldItemMainhand().damageItem(list.size()*12, player);
                                   } //4
                                   if(player.getHeldItemMainhand().getItem() == Items.IRON_SWORD)
                                   {
                                       player.getHeldItemMainhand().damageItem(list.size()*8, player);
                                   } //5
                                   if(player.getHeldItemMainhand().getItem() == Items.STONE_SWORD)
                                   {
                                       player.getHeldItemMainhand().damageItem(list.size()*10, player);
                                   } //6
                                   if(player.getHeldItemMainhand().getItem() == Items.WOODEN_SWORD)
                                   {
                                       player.getHeldItemMainhand().damageItem(list.size()*12, player);
                                   }
                               }
                           }
       }
   }

   @Override
   public boolean shouldCombineTextures()
   {
       return false;
   }
}
регаю в ClientProxy (если CommonProxy или в Main, то естественно будет краш)
 

sk9zist :l

Исправился
981
18
157

ReyMagos

Тег-бомбастер
412
7
121
Нет, серьёзно, а зачем ты это делаешь в рендере?
Тебе надо сделать отдельный класс, допустим MyHandler который наследует KeyAdapter и там ловишь события нажатия кнопки
MyHandler:
private class KeyInputHandler extends KeyAdapter {
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                leftPressed = true;
            }
            if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                rightPressed = true;
            }
        }
}
(Возможно есть более тонкий и красивый метод, но я его не знаю)
После этого ты отправляешь пакет (Как сделать пакет в домашних условиях для чайников) на сервер и принимаешь его в этом же классе (допустим метод giveData) и потом ты берёшь все сущности и убиваешь их, меч ломаешь и т.д.
 

sk9zist :l

Исправился
981
18
157
Последнее редактирование:

sk9zist :l

Исправился
981
18
157

sk9zist :l

Исправился
981
18
157

sk9zist :l

Исправился
981
18
157
...Кароче.
ModidPackerHandler:
public class ModidPacketHandler
{
    public static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel("KKOZQeny4aCMPPnAJgw0p5iiix5DzI");
}
MyMessage:
public class MyMessage implements IMessage {
      // Конструктор по умолчанию всегда требуется
      public MyMessage(){}

      int toSend;
      public MyMessage(int toSend) {
        this.toSend = toSend;
      }

      @Override public void toBytes(ByteBuf buf) {
        // Записывает int в buf
        buf.writeInt(toSend);
      }

      @Override public void fromBytes(ByteBuf buf) {
        // Читает int обратно из буфера. Обратите внимание, что если у вас есть несколько значений, вы должны читать в том же порядке, что вы написали.
        toSend = buf.readInt();
      }
    }
MyMessageHandler:
//Параметрами IMessageHandler являются <REQ, REPLY>
//Это означает, что первый параметр - это пакет, который вы получаете, а второй - это пакет, который вы возвращаете.
//Возвращенный пакет может использоваться как «ответ» от отправленного пакета.
public class MyMessageHandler implements IMessageHandler<MyMessage, IMessage> {
// Обратите внимание, что конструктор по умолчанию является обязательным, но неявно определяется в этом случае

  @Override public IMessage onMessage(MyMessage message, MessageContext ctx) {
    // Это игрок, с которого пакет был отправлен на сервер
    EntityPlayerMP serverPlayer = ctx.getServerHandler().player;
    // Значение, которое было отправлено
    int amount = message.toSend;
    // Выполните действие в главном потоке сервера, добавив его в качестве запланированной задачи.
    serverPlayer.getServerWorld().addScheduledTask(() -> {
      serverPlayer.inventory.addItemStackToInventory(new ItemStack(Items.DIAMOND, amount));
    });
    // Нет ответа
    return null;
  }
}
Java:

В документации сказано:
screenshot.12214.jpg
Извольте, объясните пожалуйста, дураку, куда вставлять код INSTANCE.registerMessage(MyMessageHandler.class, MyMessage.class, id++, Side.SERVER); ? Понятно что в ModidPackerHandler, но в каком месте?
 

sk9zist :l

Исправился
981
18
157
Статус
В этой теме нельзя размещать новые ответы.
Сверху