public void validateStructure(World world, int x, int y, int z) { if (worldObj.isRemote) return; if (this.getBlockMetadata() == 15) { complete = true; } else { complete = ChromaStructures.getPortalStructure(world, x, y, z, false).matchInWorld(); complete &= this.getEntities(world, x, y, z); } worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); }
@Override public void updateEntity() { if (ticks == 0) this.onFirstTick(); ticks++; if (DragonAPICore.debugtest) { ChromaStructures.getPortalStructure(worldObj, xCoord, yCoord, zCoord, false).place(); DragonAPICore.debugtest = false; } if (complete) { if (charge < MINCHARGE || !ChunkProviderChroma.areStructuresReady()) { charge++; if (worldObj.isRemote) this.chargingParticles(); } } else { charge = 0; } int pos = this.getPortalPosition(); if (worldObj.isRemote) { if (pos == 5 && this.isFull9x9()) { if (worldObj.isRemote) this.idleParticles(); if (complete) { if (charge >= MINCHARGE) { if (worldObj.isRemote) this.activeParticles(); } } } } if (pos == 5 && this.isFull9x9()) { if (ticks % 20 == 0) this.validateStructure(worldObj, xCoord, yCoord, zCoord); if (complete && ticks % 90 == 0) { ChromaSounds.PORTAL.playSoundAtBlock(this); } } }
@Override public void updateEntity(World world, int x, int y, int z, int meta) { super.updateEntity(world, x, y, z, meta); if (DragonAPICore.debugtest) { if (!hasMultiblock) { CrystalElement e = CrystalElement.randomElement(); FilledBlockArray b = ChromaStructures.getPylonStructure(world, x, y - 9, z, e); b.place(); // world.setBlock(x, y+9, z, this.getTile().getBlock(), this.getTile().getBlockMetadata(), // 3); // TileEntityCrystalPylon te = (TileEntityCrystalPylon)world.getTileEntity(x, y+9, z); color = e; hasMultiblock = true; this.syncAllData(true); } } if (hasMultiblock) { // ReikaJavaLibrary.pConsole(energy, Side.SERVER, color == CrystalElement.BLUE); int max = this.getCapacity(); if (world.getTotalWorldTime() != lastWorldTick) { this.charge(world, x, y, z, max); lastWorldTick = world.getTotalWorldTime(); } energy = Math.min(energy, max); if (world.isRemote) { this.spawnParticle(world, x, y, z); } if (!world.isRemote && rand.nextInt(80) == 0) { int r = 8 + rand.nextInt(8); AxisAlignedBB box = ReikaAABBHelper.getBlockAABB(x, y, z).expand(r, r, r); List<EntityLivingBase> li = world.getEntitiesWithinAABB(EntityLivingBase.class, box); for (EntityLivingBase e : li) { boolean attack = !e.isDead && e.getHealth() > 0; if (e instanceof EntityPlayer) { EntityPlayer ep = (EntityPlayer) e; attack = attack && !ep.capabilities.isCreativeMode && !Chromabilities.PYLON.enabledOn(ep); } else if (e instanceof EntityBallLightning) { attack = ((EntityBallLightning) e).getElement() != color; } if (attack) { this.attackEntity(e); this.sendClientAttack(this, e); } } } float f = this.isEnhanced() ? 1.125F : 1; if (TileEntityCrystalPylon.TUNED_PYLONS) f *= CrystalMusicManager.instance.getDingPitchScale(color); if (this.getTicksExisted() % (int) (72 / f) == 0) { ChromaSounds.POWER.playSoundAtBlock(this, 1, f); } int n = this.isEnhanced() ? 24 : 36; if (world.isRemote && rand.nextInt(n) == 0) { this.spawnLightning(world, x, y, z); } if (!world.isRemote && ChromaOptions.BALLLIGHTNING.getState() && energy >= this.getCapacity() / 2 && rand.nextInt(24000) == 0 && this.isChunkLoaded()) { world.spawnEntityInWorld( new EntityBallLightning(world, color, x + 0.5, y + 0.5, z + 0.5) .setPylon() .setNoDrops()); } } }
@Override protected boolean checkForStructure() { return ChromaStructures.getBroadcastStructure(worldObj, xCoord, yCoord, zCoord).matchInWorld(); }