Эффект от блока

Версия Minecraft
1.7.10
54
0
Нашел старые темы на этот же вопрос, попытался переделать код под 1.7.10, но беда эффекты не работают подскажите в чем проблема?

public class BlockRadiation extends RDBlock {

   @SideOnly(Side.CLIENT)
   private IIcon iconArray;


   public RDBlockRadiation() {
      super(Material.rock);
      this.setStepSound(Block.soundTypeStone);
      this.setHardness(30.0F);
   }

   
   public TileEntity createNewTileEntity(World world) {
  return new RDTileEntityBlockRadiation();
  }

  @SideOnly(Side.CLIENT)
  public void registerBlockIcons(IIconRegister iconRegister) {
     super.blockIcon = iconRegister.registerIcon("minecraft:radiation_block");
  }
}

GameRegistry.registerTileEntity(RDTileEntityBlockRadiation.class, "TileEntityBlockRadiation");


public class RDTileEntityBlockRadiation extends TileEntity {

public void updateEntity() {
if (worldObj.getTotalWorldTime() % 80L == 0L) {
addEffectsToPlayers();
}
}

private void addEffectsToPlayers() {
if (!worldObj.isRemote) {
double d0 = (double)(30);

   AxisAlignedBB axisalignedbb = AxisAlignedBB.getBoundingBox((double)xCoord, (double)yCoord, (double)zCoord, (double)(xCoord + 1), (double)(yCoord + 1), (double)(zCoord + 1)).expand(d0, d0, d0);
axisalignedbb.maxY = (double)worldObj.getHeight();
List list = worldObj.getEntitiesWithinAABB(EntityPlayer.class, axisalignedbb);
Iterator iterator = list.iterator();
EntityPlayer entityplayer;

while(iterator.hasNext()){
entityplayer = (EntityPlayer)iterator.next();

if (entityplayer.inventory.armorItemInSlot(3) != null && entityplayer.inventory.armorItemInSlot(3).getItem() instanceof ItemArmor) {

} else {
entityplayer.addPotionEffect(new PotionEffect(Potion.poison.id, 20 * 4, 0, true));
}

}
}


}
}
 

timaxa007

Модератор
5,831
409
672
svetliy написал(а):
Код:
public class BlockRadiation extends RDBlock {
Код:
public class BlockRadiation extends RDBlock implements ITileEntityProvider {

svetliy написал(а):
Код:
   public TileEntity createNewTileEntity(World world) {
  return new TileEntityBlockRadiation();
  }
Код:
	@Override
	public TileEntity createNewTileEntity(World world, int metadata) {
		return new TileEntityBlockRadiation();
	}
 
54
0
timaxa007 написал(а):
svetliy написал(а):
Код:
public class BlockRadiation extends RDBlock {
Код:
public class BlockRadiation extends RDBlock implements ITileEntityProvider {

svetliy написал(а):
Код:
   public TileEntity createNewTileEntity(World world) {
  return new TileEntityBlockRadiation();
  }
Код:
 @Override
 public TileEntity createNewTileEntity(World world, int metadata) {
 return new TileEntityBlockRadiation();
 }

Спасибо.  :shy:


Не подскажешь как сделать проверку на 2 итема?, т.е если в инвенторе есть один из этих итемов то урон проходить не будет.
 

timaxa007

Модератор
5,831
409
672
Создать два условия, на поиск нужных предметов с помощью entityplayer.inventory.hasItem(#Item) или с помощью цикла по всему инвентарю пока не найдёшь нужные тебе предметы.
 

timaxa007

Модератор
5,831
409
672
Проверять на активный эффект на игроке, создать где-нибудь переменную чтобы он считал сколько тикитов был активен эффект, затем удалять старый эффект, если эффект длился 20 секунд и давать новый.
 
54
0
timaxa007 написал(а):
Проверять на активный эффект на игроке, создать где-нибудь переменную чтобы он считал сколько тикитов был активен эффект, затем удалять старый эффект, если эффект длился 20 секунд и давать новый.

Не можешь, если не сложно пример кода?
 

timaxa007

Модератор
5,831
409
672
Код:
MinecraftForge.EVENT_BUS.register(new EventsForge());
Код:
public class EventsForge {

	@SubscribeEvent
	public void addEntityConstructing(EntityEvent.EntityConstructing event) {
		if (event.entity instanceof EntityPlayer)
			if (PlayerEffectIEEP.get((EntityPlayer)event.entity) == null)
				PlayerEffectIEEP.reg((EntityPlayer)event.entity);
	}

	@SubscribeEvent
	public void onLivingEvent(LivingEvent.LivingUpdateEvent event) {
		if (event.entity instanceof EntityPlayer) {
			PlayerEffectIEEP ep = PlayerEffectIEEP.get((EntityPlayer)event.entity);
			if (ep != null) ep.update((EntityPlayer)event.entity);
		}
	}

}
Код:
public class PlayerEffectIEEP implements IExtendedEntityProperties {

	private static final String TAG = SMTCommon.MODID + ":PlayerEffectIEEP";

	int tickEffect = 0;

	@Override
	public void init(Entity entity, World world) {

	}

	public void update(EntityPlayer player) {
		if (player.getActivePotionEffect(Potion.poison) != null) {
			if (tickEffect >= 20 * 20) {
				player.removePotionEffect(Potion.poison.id);
				player.addPotionEffect(new PotionEffect(Potion.blindness.id, 20 * 5));
				player.addPotionEffect(new PotionEffect(Potion.confusion.id, 20 * 10));
			}
			++tickEffect;
		} else tickEffect = 0;

	}

	public static void reg(EntityPlayer entity) {
		entity.registerExtendedProperties(TAG, new PlayerEffectIEEP());
	}

	public static PlayerEffectIEEP get(EntityPlayer entity) {
		return (PlayerEffectIEEP)entity.getExtendedProperties(TAG);
	}

	@Override
	public void saveNBTData(NBTTagCompound nbt) {
		NBTTagCompound nbt_tag = new NBTTagCompound();
		nbt_tag.setInteger("tickEffect", tickEffect);
		nbt.setTag(TAG, nbt_tag);
	}

	@Override
	public void loadNBTData(NBTTagCompound nbt) {
		NBTTagCompound nbt_tag = (NBTTagCompound)nbt.getTag(TAG);
		if (nbt_tag.hasKey("tickEffect", NBT.TAG_INT))
			tickEffect = nbt_tag.getInteger("tickEffect");
	}

}
Примерно как-то так.
 
Сверху