Ладно. Тогда как просто записать ударил ли игрок по блоку - или нет?В каком смысле "сила удара"? Ты имеешь ввиду урон?
Если да, то боюсь это невозможно сделать для блока, тебе придется создавать энтити или тайлэнтити.
public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player) {
//действие
}
А как сделать если я держу в руке предмет - то если меня бьёт игрок - урон отменяеться и помещаеться в NBT предмета?В классе блока переопредели метод
@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);
}
}
}
}
}
@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 надо запилить, ибо данный код надо применять на серверной стороне, а не на клиенте.хм..
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); } } } } }
чёт ниробит
это else условия о том что у стака есть нбт} else { NBTTagCompound nbt = new NBTTagCompound(); nbt.setFloat("damage", e.getAmount()); to.getHeldItemMainhand().setTagCompound(nbt); e.setCanceled(true);
Ну, не крашит но были ошибки, сейчас вроде уже нет когда зашёл и проверил, но когда меня бьёт моб - урон же должен отменяться, ведь так?Если у тебя крашит
так её делать надо не через if (!Minecraft.getMinecraft().world.isRemote) ? Вообщем сделал - не решило.И проверку !isRemote надо запилить
if (to.getHeldItemMainhand().getItem() instanceof G8ussIngot) {
if (to.getHeldItemMainhand().getItem() instanceof items.G8ussIngot) {
Minecraft.getMinecraft()
нет на сервере, твоё событие срабатывает на сервереэто все потому что темная тема у тебя. а я говорил!А, сорри, совсем ночью не вижу xd