@Override public boolean addLandingEffects(IBlockState state, net.minecraft.world.WorldServer world, BlockPos blockPosition, IBlockState iblockstate, EntityLivingBase entity, int numberOfParticles ) { float f = MathHelper.ceil(entity.fallDistance - 3.0F); double d0 = Math.min(0.2F + f / 15.0F, 10.0F); if (d0 > 2.5D) { d0 = 2.5D; } int i = (int)(150.0D * d0); world.spawnParticle(EnumParticleTypes.BLOCK_DUST, entity.posX, entity.posY, entity.posZ, i, 0.0D, 0.0D, 0.0D, 0.15000000596046448D, Block.getStateId(ModBlocks.storage.getDefaultState().withProperty(BotaniaStateProps.STORAGE_VARIANT, StorageVariant.ELEMENTIUM))); return true; }
@Override protected void onImpact(@Nonnull RayTraceResult pos) { if(pos.getBlockPos() != null && !world.isRemote) { List<BlockPos> coordsList = getCoordsToPut(pos.getBlockPos()); world.playEvent(2002, new BlockPos(this), 8); for(BlockPos coords : coordsList) { world.setBlockState(coords, Blocks.END_STONE.getDefaultState()); if(Math.random() < 0.1) world.playEvent(2001, coords, Block.getStateId(Blocks.END_STONE.getDefaultState())); } setDead(); } }
@Override public boolean doParticles(IManaBurst burst, ItemStack stack) { EntityThrowable entity = (EntityThrowable) burst; ItemStack lens = burst.getSourceLens(); String id = ItemNBTHelper.getString(lens, TAG_BLOCK_NAME, "minecraft:air"); Block b = Block.getBlockFromName(id); int meta = ItemNBTHelper.getInt(lens, TAG_META, 0); entity.world.spawnParticle(EnumParticleTypes.BLOCK_CRACK, entity.posX, entity.posY, entity.posZ, entity.motionX, entity.motionY, entity.motionZ, Block.getStateId(b.getStateFromMeta(meta))); return true; }
world.setBlockToAir(currCoords); if(ConfigHandler.blockBreakParticles) world.playEvent(2001, currCoords, Block.getStateId(state));
@Override public boolean onUsedByWand(EntityPlayer player, ItemStack stack, World world, BlockPos pos, EnumFacing side) { if(player == null || world.isRemote) return false; if(!player.isSneaking()) { playerPositions.put(player.getUniqueID(), new DimWithPos(world.provider.getDimension(), pos)); world.playSound(null, pos, ModSounds.ding, SoundCategory.BLOCKS, 0.5F, 1F); } else { spawnAsEntity(world, pos, new ItemStack(this)); world.setBlockToAir(pos); world.playEvent(2001, pos, Block.getStateId(getDefaultState())); } return true; }
@Nonnull @Override public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float xs, float ys, float zs) { IBlockState state = world.getBlockState(pos); if(Item.getItemFromBlock(state.getBlock()) == Items.AIR) return EnumActionResult.PASS; ItemStack blockStack = new ItemStack(state.getBlock()); int[] ids = OreDictionary.getOreIDs(blockStack); for(int i : ids) { String name = OreDictionary.getOreName(i); if(name.equals("grass")) { world.playEvent(2001, pos, Block.getStateId(state)); world.setBlockState(pos, ModBlocks.enchantedSoil.getDefaultState()); player.getHeldItem(hand).shrink(1); return EnumActionResult.SUCCESS; } } return EnumActionResult.PASS; }
@Override protected void onImpact(RayTraceResult pos) { if (world.isRemote) return; EntityLivingBase thrower = getThrower(); if(pos.entityHit != null && thrower != null && pos.entityHit != thrower && !pos.entityHit.isDead) { if(thrower instanceof EntityPlayer) pos.entityHit.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) thrower), Math.random() < 0.25 ? 10 : 5); else pos.entityHit.attackEntityFrom(DamageSource.GENERIC, Math.random() < 0.25 ? 10 : 5); } if (pos.getBlockPos() != null) { IBlockState state = world.getBlockState(pos.getBlockPos()); if(ConfigHandler.blockBreakParticles && !state.getBlock().isAir(state, world, pos.getBlockPos())) world.playEvent(2001, pos.getBlockPos(), Block.getStateId(state)); } setDead(); }
@Override public void onBurstCollision(IManaBurst burst, World world, BlockPos pos) { if(!burst.isFake() && !world.isRemote) { world.playEvent(2001, pos, Block.getStateId(getDefaultState())); world.setBlockToAir(pos); EntityManaStorm storm = new EntityManaStorm(world); storm.setPosition(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); world.spawnEntity(storm); } }
@Override protected void onImpact(@Nonnull RayTraceResult var1) { if(!world.isRemote) { if(var1 != null) { EnumFacing dir = var1.sideHit; if(dir != null && dir.getAxis() != EnumFacing.Axis.Y) { BlockPos pos = var1.getBlockPos().offset(dir); while(pos.getY() > 0) { IBlockState state = world.getBlockState(pos); Block block = state.getBlock(); if(block.isAir(state, world, pos)) { IBlockState stateSet = ModBlocks.solidVines.getDefaultState().withProperty(propMap.get(dir.getOpposite()), true); world.setBlockState(pos, stateSet, 1 | 2); world.playEvent(2001, pos, Block.getStateId(stateSet)); pos = pos.down(); } else break; } } } this.world.setEntityState(this, (byte)3); setDead(); } }
@Override public void onAvatarUpdate(IAvatarTile tile, ItemStack stack) { TileEntity te = (TileEntity) tile; World world = te.getWorld(); if(!world.isRemote && tile.getCurrentMana() >= COST && tile.getElapsedFunctionalTicks() % 4 == 0 && world.rand.nextInt(8) == 0 && tile.isEnabled()) { BlockPos pos = ((TileEntity) tile).getPos().offset(tile.getAvatarFacing()); IBlockState state = world.getBlockState(pos); if(state.getBlock().isAir(state, world, pos)) { world.setBlockState(pos, Blocks.DIRT.getDefaultState()); world.playEvent(2001, pos, Block.getStateId(Blocks.DIRT.getDefaultState())); tile.recieveMana(-COST); } } }
@Override public void onUpdate() { super.onUpdate(); if(supertile.getWorld().isRemote || redstoneSignal > 0) return; if(mana >= COST && ticksExisted % 2 == 0) { BlockPos coords = getCoordsToPut(); if(coords != null) { IBlockState state = getStoneToPut(coords); if(state != null) { supertile.getWorld().setBlockState(coords, state); if(ConfigHandler.blockBreakParticles) supertile.getWorld().playEvent(2001, coords, Block.getStateId(state)); mana -= COST; sync(); } } } }
world.addBlockEvent(getPos(), supertile.getBlockType(), RECIPE_COMPLETE_EVENT, positionAt); if(ConfigHandler.blockBreakParticles) supertile.getWorld().playEvent(2001, coords, Block.getStateId(recipe.getOutputState()));
IBlockState state = block.getStateFromMeta(meta); player.world.setBlockState(coords, state, 1 | 2); player.world.playEvent(2001, coords, Block.getStateId(state));
public static void removeBlockWithDrops(EntityPlayer player, ItemStack stack, World world, BlockPos pos, Predicate<IBlockState> filter, boolean dispose, boolean particles) { if(!world.isBlockLoaded(pos)) return; IBlockState state = world.getBlockState(pos); Block block = state.getBlock(); if(!world.isRemote && filter.test(state) && !block.isAir(state, world, pos) && state.getPlayerRelativeBlockHardness(player, world, pos) > 0 && block.canHarvestBlock(player.world, pos, player)) { int exp = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP) player).interactionManager.getGameType(), (EntityPlayerMP) player, pos); if(exp == -1) return; if(!player.capabilities.isCreativeMode) { TileEntity tile = world.getTileEntity(pos); if(block.removedByPlayer(state, world, pos, player, true)) { block.onPlayerDestroy(world, pos, state); if(!dispose || !ItemElementiumPick.isDisposable(block)) { block.harvestBlock(world, player, pos, state, tile, stack); block.dropXpOnBlockBreak(world, pos, exp); } } damageItem(stack, 1, player, 80); } else world.setBlockToAir(pos); if(particles && ConfigHandler.blockBreakParticles && ConfigHandler.blockBreakParticlesTool) world.playEvent(2001, pos, Block.getStateId(state)); } }
supertile.getWorld().playEvent(2001, supertile.getPos(), Block.getStateId(state)); if(supertile.getWorld().getBlockState(supertile.getPos().down()).isSideSolid(supertile.getWorld(), supertile.getPos().down(), EnumFacing.UP)) supertile.getWorld().setBlockState(supertile.getPos(), Blocks.DEADBUSH.getDefaultState());
@Override public boolean collideBurst(IManaBurst burst, EntityThrowable entity, RayTraceResult pos, boolean isManaBlock, boolean dead, ItemStack stack) { if(!entity.world.isRemote && !burst.isFake() && pos.getBlockPos() != null) { int harvestLevel = ConfigHandler.harvestLevelWeight; BlockPos bPos = pos.getBlockPos(); Block block = entity.world.getBlockState(bPos).getBlock(); IBlockState state = entity.world.getBlockState(bPos); int neededHarvestLevel = block.getHarvestLevel(state); if(entity.world.isAirBlock(bPos.down()) && state.getBlockHardness(entity.world, bPos) != -1 && neededHarvestLevel <= harvestLevel && entity.world.getTileEntity(bPos) == null && block.canSilkHarvest(entity.world, bPos, state, null)) { state = TECHNICAL_BLOCK_REMAP.getOrDefault(state, state); EntityFallingBlock falling = new EntityFallingBlock(entity.world, bPos.getX() + 0.5, bPos.getY(), bPos.getZ() + 0.5, state); falling.fallTime = 1; entity.world.setBlockToAir(bPos); ((WorldServer) entity.world).spawnParticle(EnumParticleTypes.FALLING_DUST, bPos.getX() + 0.5, bPos.getY() + 0.5, bPos.getZ() + 0.5, 10, 0.45, 0.45, 0.45, 5, new int[] {Block.getStateId(state)}); entity.world.spawnEntity(falling); } } return dead; }
@Override @SideOnly(Side.CLIENT) public boolean addDestroyEffects(World world, BlockPos pos, net.minecraft.client.particle.ParticleManager effectRenderer) { if (world.getBlockState(pos).getBlock() == this) { int i = 4; ParticleDigging.Factory factory = new ParticleDigging.Factory(); for (int j = 0; j < i; ++j) { for (int k = 0; k < i; ++k) { for (int l = 0; l < i; ++l) { double d0 = pos.getX() + (j + 0.5D) / i; double d1 = pos.getY() + (k + 0.5D) / i; double d2 = pos.getZ() + (l + 0.5D) / i; effectRenderer.addEffect(factory.createParticle(-1, world, d0, d1, d2, d0 - pos.getX() - 0.5D, d1 - pos.getY() - 0.5D, d2 - pos.getZ() - 0.5D, Block.getStateId(ModBlocks.storage.getDefaultState().withProperty(BotaniaStateProps.STORAGE_VARIANT, StorageVariant.ELEMENTIUM)))); } } } return true; } else { return false; } }
@Override public void onUpdate() { super.onUpdate(); if(supertile.getWorld().isRemote || redstoneSignal > 0) return; if(ticksExisted % 30 == 0 && mana >= COST) { BlockPos pos = new BlockPos( supertile.getPos().getX() - RANGE + supertile.getWorld().rand.nextInt(RANGE * 2 + 1), supertile.getPos().getY() + RANGE, supertile.getPos().getZ() - RANGE + supertile.getWorld().rand.nextInt(RANGE * 2 + 1) ); BlockPos up = pos.up(); for(int i = 0; i < RANGE * 2; i++) { IBlockState stateAbove = supertile.getWorld().getBlockState(up); Block blockAbove = stateAbove.getBlock(); if((supertile.getWorld().isAirBlock(up) || blockAbove.isReplaceable(supertile.getWorld(), up)) && stateAbove.getMaterial() != Material.WATER && ModBlocks.flower.canPlaceBlockAt(supertile.getWorld(), up)) { EnumDyeColor color = EnumDyeColor.byMetadata(supertile.getWorld().rand.nextInt(16)); IBlockState state = ModBlocks.flower.getDefaultState().withProperty(BotaniaStateProps.COLOR, color); if(ConfigHandler.blockBreakParticles) supertile.getWorld().playEvent(2001, up, Block.getStateId(state)); supertile.getWorld().setBlockState(up, state, 1 | 2); mana -= COST; sync(); break; } up = pos; pos = pos.down(); } } }
@Override public void onUpdate() { super.onUpdate(); if(!supertile.getWorld().isRemote && ticksExisted % 5 == 0) { if(mana >= COST) { BlockPos coords = getCoordsToPut(); if(coords != null) { supertile.getWorld().setBlockToAir(coords); if(ConfigHandler.blockBreakParticles) supertile.getWorld().playEvent(2001, coords, Block.getStateId(Blocks.SAND.getDefaultState())); EntityItem item = new EntityItem(supertile.getWorld(), coords.getX() + 0.5, coords.getY() + 0.5, coords.getZ() + 0.5, new ItemStack(Items.CLAY_BALL)); supertile.getWorld().spawnEntity(item); mana -= COST; } } } }
@Override public void onUpdate() { super.onUpdate(); if (supertile.getWorld().isRemote) return; int mana = 1800; if(getMaxMana() - this.mana >= mana && !supertile.getWorld().isRemote && ticksExisted % 80 == 0) { for(int i = 0; i < RANGE * 2 + 1; i++) for(int j = 0; j < RANGE * 2 + 1; j++) for(int k = 0; k < RANGE * 2 + 1; k++) { BlockPos pos = supertile.getPos().add(i - RANGE, j - RANGE, k - RANGE); IBlockState state = supertile.getWorld().getBlockState(pos); Block block = state.getBlock(); if(block instanceof BlockCake) { int nextSlicesEaten = state.getValue(BlockCake.BITES) + 1; if(nextSlicesEaten > 6) supertile.getWorld().setBlockToAir(pos); else supertile.getWorld().setBlockState(pos, state.withProperty(BlockCake.BITES, nextSlicesEaten), 1 | 2); supertile.getWorld().playEvent(2001, pos, Block.getStateId(state)); supertile.getWorld().playSound(null, supertile.getPos(), SoundEvents.ENTITY_GENERIC_EAT, SoundCategory.BLOCKS, 1F, 0.5F + (float) Math.random() * 0.5F); this.mana += mana; sync(); return; } } } }