diff --git a/src/main/java/com/mrcrayfish/device/block/BlockLaptop.java b/src/main/java/com/mrcrayfish/device/block/BlockLaptop.java index bd22c57cc..7a650bd2c 100644 --- a/src/main/java/com/mrcrayfish/device/block/BlockLaptop.java +++ b/src/main/java/com/mrcrayfish/device/block/BlockLaptop.java @@ -6,9 +6,11 @@ import com.mrcrayfish.device.MrCrayfishDeviceMod; import com.mrcrayfish.device.core.Laptop; import com.mrcrayfish.device.init.DeviceItems; +import com.mrcrayfish.device.object.Bounds; import com.mrcrayfish.device.tileentity.TileEntityLaptop; import com.mrcrayfish.device.util.TileEntityUtil; +import net.minecraft.block.Block; import net.minecraft.block.BlockHorizontal; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; @@ -37,9 +39,13 @@ public class BlockLaptop extends BlockHorizontal implements ITileEntityProvider { public static final PropertyEnum TYPE = PropertyEnum.create("type", Type.class); - - private static final AxisAlignedBB COLLISION_BOX = new AxisAlignedBB(0.0, 0.0, 0.0, 1.0, 0.6, 1.0); - + + private static final AxisAlignedBB[] SCREEN_BOXES = new Bounds(13 * 0.0625, 0.0625, 1 * 0.0625, 1.0, 12 * 0.0625, 0.9375).getRotatedBounds(); + private static final AxisAlignedBB BODY_OPEN_BOX = new AxisAlignedBB(1 * 0.0625, 0.0, 1 * 0.0625, 13 * 0.0625, 1 * 0.0625, 15 * 0.0625); + private static final AxisAlignedBB BODY_CLOSED_BOX = new AxisAlignedBB(1 * 0.0625, 0.0, 1 * 0.0625, 13 * 0.0625, 2 * 0.0625, 15 * 0.0625); + private static final AxisAlignedBB SELECTION_BOX_OPEN = new AxisAlignedBB(0, 0, 0, 1, 12 * 0.0625, 1); + private static final AxisAlignedBB SELECTION_BOX_CLOSED = new AxisAlignedBB(0, 0, 0, 1, 3 * 0.0625, 1); + public BlockLaptop() { super(Material.ANVIL); @@ -64,16 +70,46 @@ public boolean isFullCube(IBlockState state) @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { - return COLLISION_BOX; + TileEntity tileEntity = source.getTileEntity(pos); + if(tileEntity instanceof TileEntityLaptop) + { + TileEntityLaptop laptop = (TileEntityLaptop) tileEntity; + if(laptop.open) + { + return SELECTION_BOX_OPEN; + } + else + { + return SELECTION_BOX_CLOSED; + } + } + return FULL_BLOCK_AABB; } @Override - public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean p_185477_7_) { - super.addCollisionBoxToList(pos, entityBox, collidingBoxes, COLLISION_BOX); + public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, @Nullable Entity entityIn, boolean p_185477_7_) + { + TileEntity tileEntity = worldIn.getTileEntity(pos); + if(tileEntity instanceof TileEntityLaptop) + { + TileEntityLaptop laptop = (TileEntityLaptop) tileEntity; + if(laptop.open) + { + Block.addCollisionBoxToList(pos, entityBox, collidingBoxes, BODY_OPEN_BOX); + Block.addCollisionBoxToList(pos, entityBox, collidingBoxes, SCREEN_BOXES[state.getValue(FACING).getHorizontalIndex()]); + } + else + { + Block.addCollisionBoxToList(pos, entityBox, collidingBoxes, BODY_CLOSED_BOX); + } + return; + } + Block.addCollisionBoxToList(pos, entityBox, collidingBoxes, FULL_BLOCK_AABB); } @Override - public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) { + public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) + { IBlockState state = super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand); return state.withProperty(FACING, placer.getHorizontalFacing()); } diff --git a/src/main/java/com/mrcrayfish/device/core/Laptop.java b/src/main/java/com/mrcrayfish/device/core/Laptop.java index 6239fb7cc..db03de4e4 100644 --- a/src/main/java/com/mrcrayfish/device/core/Laptop.java +++ b/src/main/java/com/mrcrayfish/device/core/Laptop.java @@ -85,7 +85,7 @@ public Laptop(TileEntityLaptop laptop) this.currentWallpaper = 0; } Laptop.system = this; - pos = laptop.getPos(); + Laptop.pos = laptop.getPos(); } @Nullable diff --git a/src/main/java/com/mrcrayfish/device/core/TaskBar.java b/src/main/java/com/mrcrayfish/device/core/TaskBar.java index 13cf6d5ab..422dc4ef2 100644 --- a/src/main/java/com/mrcrayfish/device/core/TaskBar.java +++ b/src/main/java/com/mrcrayfish/device/core/TaskBar.java @@ -24,7 +24,7 @@ public class TaskBar { public static final ResourceLocation APP_BAR_GUI = new ResourceLocation("cdm:textures/gui/application_bar.png"); - private static final int APPS_DISPLAYED = MrCrayfishDeviceMod.DEVELOPER_MODE ? 18 : 10; + private static final int APPS_DISPLAYED = MrCrayfishDeviceMod.DEVELOPER_MODE ? 18 : 20; public static final int BAR_HEIGHT = 18; private Button btnLeft; diff --git a/src/main/java/com/mrcrayfish/device/object/Bounds.java b/src/main/java/com/mrcrayfish/device/object/Bounds.java index 2a68a6dc9..bd4af9daf 100644 --- a/src/main/java/com/mrcrayfish/device/object/Bounds.java +++ b/src/main/java/com/mrcrayfish/device/object/Bounds.java @@ -1,5 +1,9 @@ package com.mrcrayfish.device.object; +import com.mrcrayfish.device.util.CollisionHelper; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; + /** * Author: MrCrayfish */ @@ -17,4 +21,23 @@ public Bounds(double x1, double y1, double z1, double x2, double y2, double z2) this.y2 = y2; this.z2 = z2; } + + public AxisAlignedBB toAABB() + { + return new AxisAlignedBB(x1, y1, z1, x2, y2, z2); + } + + public AxisAlignedBB getRotation(EnumFacing facing) + { + return CollisionHelper.getBlockBounds(facing, this); + } + + public AxisAlignedBB[] getRotatedBounds() + { + AxisAlignedBB boundsNorth = CollisionHelper.getBlockBounds(EnumFacing.NORTH, this); + AxisAlignedBB boundsEast = CollisionHelper.getBlockBounds(EnumFacing.EAST, this); + AxisAlignedBB boundsSouth = CollisionHelper.getBlockBounds(EnumFacing.SOUTH, this); + AxisAlignedBB boundsWest = CollisionHelper.getBlockBounds(EnumFacing.WEST, this); + return new AxisAlignedBB[] { boundsSouth, boundsWest, boundsNorth, boundsEast }; + } } diff --git a/src/main/resources/assets/cdm/models/block/laptop_base.json b/src/main/resources/assets/cdm/models/block/laptop_base.json index ed45944b3..3634fbf67 100644 --- a/src/main/resources/assets/cdm/models/block/laptop_base.json +++ b/src/main/resources/assets/cdm/models/block/laptop_base.json @@ -1,6 +1,7 @@ { "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "textures": { + "particle": "blocks/anvil_base", "0": "blocks/cauldron_side", "1": "blocks/cauldron_inner", "2": "blocks/wool_colored_red" diff --git a/src/main/resources/assets/cdm/textures/gui/developer_wallpaper.png b/src/main/resources/assets/cdm/textures/gui/developer_wallpaper.png index b4d00bc53..e9a47102d 100644 Binary files a/src/main/resources/assets/cdm/textures/gui/developer_wallpaper.png and b/src/main/resources/assets/cdm/textures/gui/developer_wallpaper.png differ