Поглощающий блок

Версия Minecraft
1.12.2
49
5
Сделал блок, надо устроить так, чтобы при ударе по нему он записывал силу удара в NBT блока, но если по нему ударят не один раз - брать самый сильный удар и записать как раз таки силу этого удара в NBT блока. Как реализовать?
 
49
5
В каком смысле "сила удара"? Ты имеешь ввиду урон?
Если да, то боюсь это невозможно сделать для блока, тебе придется создавать энтити или тайлэнтити.
Ладно. Тогда как просто записать ударил ли игрок по блоку - или нет?
 
627
72
178
В обработчик событий
Java:
@SubscribeEvent
    public void writeDamageInNBT(LivingHurtEvent e) {
        if (e.entityLiving instanceof EntityPlayer) {
            if (e.source instanceof EntityDamageSource) {
                EntityPlayer to = ((EntityPlayer) e.entityLiving);
                if (to.getHeldItem().getItem() instanceof ItemsCommon.ItemElvenIngot) {
                    if (to.getHeldItem().hasTagCompound() == true) {
                        NBTTagCompound nbt = to.getHeldItem().getTagCompound();
                        e.setCanceled(true);

                        if (e.ammount > nbt.getInteger("damage")) {
                            nbt.setFloat("damage", e.ammount);

                        }

                    } else {
                        NBTTagCompound nbt = new NBTTagCompound();

                        nbt.setFloat("damage", e.ammount);
                        to.getHeldItem().setTagCompound(nbt);
                        e.setCanceled(true);

                    }
                }
            }

        }
    }
Значение в нбт получай с помощью nbt.getFloat("damage");
 
49
5
хм..
Java:
@SubscribeEvent
    public void writeDamageInNBT(LivingHurtEvent e) {
        if (e.getEntityLiving() instanceof EntityPlayer) {
            if (e.getSource() instanceof EntityDamageSource) {
                EntityPlayer to = ((EntityPlayer) e.getEntityLiving());
                if (to.getHeldItemMainhand().getItem() instanceof G8ussIngot) {
                    if (to.getHeldItemMainhand().hasTagCompound() == true) {
                        NBTTagCompound nbt = to.getHeldItemMainhand().getTagCompound();
                        e.setCanceled(true);
                        Minecraft.getMinecraft().world.playSound(to, to.getPosition(), RegisterS.TestSound, SoundCategory.PLAYERS, 1.0F, 1.0F);

                        if (e.getAmount() > nbt.getInteger("damage")) {
                            nbt.setFloat("damage", e.getAmount());

                        }

                    } else {
                        NBTTagCompound nbt = new NBTTagCompound();

                        nbt.setFloat("damage", e.getAmount());
                        to.getHeldItemMainhand().setTagCompound(nbt);
                        e.setCanceled(true);

                    }
                }
            }

        }
    }

чёт ниробит
 

Icosider

Kotliner
Администратор
3,600
99
663
хм..
Java:
@SubscribeEvent
    public void writeDamageInNBT(LivingHurtEvent e) {
        if (e.getEntityLiving() instanceof EntityPlayer) {
            if (e.getSource() instanceof EntityDamageSource) {
                EntityPlayer to = ((EntityPlayer) e.getEntityLiving());
                if (to.getHeldItemMainhand().getItem() instanceof G8ussIngot) {
                    if (to.getHeldItemMainhand().hasTagCompound() == true) {
                        NBTTagCompound nbt = to.getHeldItemMainhand().getTagCompound();
                        e.setCanceled(true);
                        Minecraft.getMinecraft().world.playSound(to, to.getPosition(), RegisterS.TestSound, SoundCategory.PLAYERS, 1.0F, 1.0F);

                        if (e.getAmount() > nbt.getInteger("damage")) {
                            nbt.setFloat("damage", e.getAmount());

                        }

                    } else {
                        NBTTagCompound nbt = new NBTTagCompound();

                        nbt.setFloat("damage", e.getAmount());
                        to.getHeldItemMainhand().setTagCompound(nbt);
                        e.setCanceled(true);

                    }
                }
            }

        }
    }

чёт ниробит
Если у тебя крашит, то это потому-что Minecraft класса нет на сервере. И проверку !isRemote надо запилить, ибо данный код надо применять на серверной стороне, а не на клиенте.
 
49
5
Если у тебя крашит
Ну, не крашит но были ошибки, сейчас вроде уже нет когда зашёл и проверил, но когда меня бьёт моб - урон же должен отменяться, ведь так?
И проверку !isRemote надо запилить
так её делать надо не через if (!Minecraft.getMinecraft().world.isRemote) ? Вообщем сделал - не решило.

А ещё я не уверен, возможно нужно заменять
Java:
if (to.getHeldItemMainhand().getItem() instanceof G8ussIngot) {
на
Java:
if (to.getHeldItemMainhand().getItem() instanceof items.G8ussIngot) {
?
 
5,018
47
783
7,099
324
1,509
Есть мод MmmMmmMmmMmm, весь его контент - стойка для битья. можно посмотреть как там сделано
 
Сверху