package net.minecraft.block; import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityDaylightDetector; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.MathHelper; import net.minecraft.world.EnumSkyBlock; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import java.util.List; /**+ * This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source code. * * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" * Mod Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team * * EaglercraftX 1.8 patch files are (c) 2022 LAX1DUDE. All Rights Reserved. * * WITH THE EXCEPTION OF PATCH FILES, MINIFIED JAVASCRIPT, AND ALL FILES * NORMALLY FOUND IN AN UNMODIFIED MINECRAFT RESOURCE PACK, YOU ARE NOT ALLOWED * TO SHARE, DISTRIBUTE, OR REPURPOSE ANY FILE USED BY OR PRODUCED BY THE * SOFTWARE IN THIS REPOSITORY WITHOUT PRIOR PERMISSION FROM THE PROJECT AUTHOR. * * NOT FOR COMMERCIAL OR MALICIOUS USE * * (please read the 'LICENSE' file this repo's root directory for more info) * */ public class BlockDaylightDetector extends BlockContainer { public static final PropertyInteger POWER = PropertyInteger.create("power", 0, 15); private final boolean inverted; public BlockDaylightDetector(boolean inverted) { super(Material.wood); this.inverted = inverted; this.setDefaultState(this.blockState.getBaseState().withProperty(POWER, Integer.valueOf(0))); this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.375F, 1.0F); this.setCreativeTab(CreativeTabs.tabRedstone); this.setHardness(0.2F); this.setStepSound(soundTypeWood); this.setUnlocalizedName("daylightDetector"); } public void setBlockBoundsBasedOnState(IBlockAccess var1, BlockPos var2) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.375F, 1.0F); } public int getWeakPower(IBlockAccess var1, BlockPos var2, IBlockState iblockstate, EnumFacing var4) { return iblockstate.getValue(POWER).intValue(); } public void updatePower(World worldIn, BlockPos pos) { if (!worldIn.provider.getHasNoSky()) { IBlockState iblockstate = worldIn.getBlockState(pos); int i = worldIn.getLightFor(EnumSkyBlock.SKY, pos) - worldIn.getSkylightSubtracted(); float f = worldIn.getCelestialAngleRadians(1.0F); float f1 = f < 3.1415927F ? 0.0F : 6.2831855F; f = f + (f1 - f) * 0.2F; i = Math.round((float) i * MathHelper.cos(f)); i = MathHelper.clamp_int(i, 0, 15); if (this.inverted) { i = 15 - i; } if (iblockstate.getValue(POWER).intValue() != i) { worldIn.setBlockState(pos, iblockstate.withProperty(POWER, Integer.valueOf(i)), 3); } } } public boolean onBlockActivated(World world, BlockPos blockpos, IBlockState iblockstate, EntityPlayer entityplayer, EnumFacing enumfacing, float f, float f1, float f2) { if (entityplayer.isAllowEdit()) { return true; } else { return super.onBlockActivated(world, blockpos, iblockstate, entityplayer, enumfacing, f, f1, f2); } } /**+ * Get the Item that this Block should drop when harvested. */ public Item getItemDropped(IBlockState var1, EaglercraftRandom var2, int var3) { return Item.getItemFromBlock(Blocks.daylight_detector); } public Item getItem(World var1, BlockPos var2) { return Item.getItemFromBlock(Blocks.daylight_detector); } public boolean isFullCube() { return false; } /**+ * Used to determine ambient occlusion and culling when * rebuilding chunks for render */ public boolean isOpaqueCube() { return false; } /**+ * The type of render function called. 3 for standard block * models, 2 for TESR's, 1 for liquids, -1 is no render */ public int getRenderType() { return 3; } /**+ * Can this block provide power. Only wire currently seems to * have this change based on its state. */ public boolean canProvidePower() { return true; } /**+ * Returns a new instance of a block's tile entity class. Called * on placing the block. */ public TileEntity createNewTileEntity(World var1, int var2) { return new TileEntityDaylightDetector(); } /**+ * Convert the given metadata into a BlockState for this Block */ public IBlockState getStateFromMeta(int i) { return this.getDefaultState().withProperty(POWER, Integer.valueOf(i)); } /**+ * Convert the BlockState into the correct metadata value */ public int getMetaFromState(IBlockState iblockstate) { return iblockstate.getValue(POWER).intValue(); } protected BlockState createBlockState() { return new BlockState(this, POWER); } /**+ * returns a list of blocks with the same ID, but different meta * (eg: wood returns 4 blocks) */ public void getSubBlocks(Item item, CreativeTabs creativetabs, List list) { if (!this.inverted) { super.getSubBlocks(item, creativetabs, list); } } }