-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
663 additions
and
27 deletions.
There are no files selected for viewing
19 changes: 19 additions & 0 deletions
19
src/main/java/unstudio/chinacraft/block/decoration/BlockCCDoor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package unstudio.chinacraft.block.decoration; | ||
|
||
import net.minecraft.block.BlockDoor; | ||
import net.minecraft.block.material.Material; | ||
import net.minecraft.item.Item; | ||
|
||
/** | ||
* Created by trychen on 17/7/17. | ||
*/ | ||
public class BlockCCDoor extends BlockDoor { | ||
private Item item; | ||
public BlockCCDoor(Material material) { | ||
super(material); | ||
} | ||
|
||
public Item getItem() { | ||
return item; | ||
} | ||
} |
356 changes: 356 additions & 0 deletions
356
src/main/java/unstudio/chinacraft/block/decoration/BlockLatticeDoor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,356 @@ | ||
package unstudio.chinacraft.block.decoration; | ||
|
||
import cpw.mods.fml.relauncher.Side; | ||
import cpw.mods.fml.relauncher.SideOnly; | ||
import net.minecraft.block.Block; | ||
import net.minecraft.block.BlockDoor; | ||
import net.minecraft.block.material.Material; | ||
import net.minecraft.entity.player.EntityPlayer; | ||
import net.minecraft.init.Items; | ||
import net.minecraft.item.Item; | ||
import net.minecraft.util.AxisAlignedBB; | ||
import net.minecraft.util.MovingObjectPosition; | ||
import net.minecraft.util.Vec3; | ||
import net.minecraft.world.IBlockAccess; | ||
import net.minecraft.world.World; | ||
|
||
import java.util.Random; | ||
|
||
/** | ||
* Created by trychen on 17/7/17. | ||
*/ | ||
public class BlockLatticeDoor extends Block { | ||
public BlockLatticeDoor() { | ||
super(Material.wood); | ||
float f = 0.5F; | ||
float f1 = 1.0F; | ||
this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f1, 0.5F + f); | ||
} | ||
|
||
/** | ||
* Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two | ||
* adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. | ||
*/ | ||
public boolean isOpaqueCube() | ||
{ | ||
return false; | ||
} | ||
|
||
public boolean getBlocksMovement(IBlockAccess p_149655_1_, int p_149655_2_, int p_149655_3_, int p_149655_4_) | ||
{ | ||
int l = this.func_150012_g(p_149655_1_, p_149655_2_, p_149655_3_, p_149655_4_); | ||
return (l & 4) != 0; | ||
} | ||
|
||
/** | ||
* If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) | ||
*/ | ||
public boolean renderAsNormalBlock() | ||
{ | ||
return false; | ||
} | ||
|
||
/** | ||
* The type of render function that is called for this block | ||
*/ | ||
public int getRenderType() | ||
{ | ||
return 7; | ||
} | ||
|
||
/** | ||
* Returns the bounding box of the wired rectangular prism to render. | ||
*/ | ||
@SideOnly(Side.CLIENT) | ||
public AxisAlignedBB getSelectedBoundingBoxFromPool(World p_149633_1_, int p_149633_2_, int p_149633_3_, int p_149633_4_) | ||
{ | ||
this.setBlockBoundsBasedOnState(p_149633_1_, p_149633_2_, p_149633_3_, p_149633_4_); | ||
return super.getSelectedBoundingBoxFromPool(p_149633_1_, p_149633_2_, p_149633_3_, p_149633_4_); | ||
} | ||
|
||
/** | ||
* Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been | ||
* cleared to be reused) | ||
*/ | ||
public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) | ||
{ | ||
this.setBlockBoundsBasedOnState(p_149668_1_, p_149668_2_, p_149668_3_, p_149668_4_); | ||
return super.getCollisionBoundingBoxFromPool(p_149668_1_, p_149668_2_, p_149668_3_, p_149668_4_); | ||
} | ||
|
||
/** | ||
* Updates the blocks bounds based on its current state. Args: world, x, y, z | ||
*/ | ||
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) | ||
{ | ||
this.func_150011_b(this.func_150012_g(world, x, y, z)); | ||
} | ||
|
||
private void func_150011_b(int p_150011_1_) | ||
{ | ||
float f = 0.1875F; | ||
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F); | ||
int j = p_150011_1_ & 3; | ||
boolean flag = (p_150011_1_ & 4) != 0; | ||
boolean flag1 = (p_150011_1_ & 16) != 0; | ||
|
||
if (j == 0) | ||
{ | ||
if (flag) | ||
{ | ||
if (!flag1) | ||
{ | ||
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f); | ||
} | ||
else | ||
{ | ||
this.setBlockBounds(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F); | ||
} | ||
} | ||
else | ||
{ | ||
this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F); | ||
} | ||
} | ||
else if (j == 1) | ||
{ | ||
if (flag) | ||
{ | ||
if (!flag1) | ||
{ | ||
this.setBlockBounds(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); | ||
} | ||
else | ||
{ | ||
this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F); | ||
} | ||
} | ||
else | ||
{ | ||
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f); | ||
} | ||
} | ||
else if (j == 2) | ||
{ | ||
if (flag) | ||
{ | ||
if (!flag1) | ||
{ | ||
this.setBlockBounds(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F); | ||
} | ||
else | ||
{ | ||
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f); | ||
} | ||
} | ||
else | ||
{ | ||
this.setBlockBounds(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); | ||
} | ||
} | ||
else if (j == 3) | ||
{ | ||
if (flag) | ||
{ | ||
if (!flag1) | ||
{ | ||
this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F); | ||
} | ||
else | ||
{ | ||
this.setBlockBounds(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); | ||
} | ||
} | ||
else | ||
{ | ||
this.setBlockBounds(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F); | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* Called when a player hits the block. Args: world, x, y, z, player | ||
*/ | ||
public void onBlockClicked(World p_149699_1_, int p_149699_2_, int p_149699_3_, int p_149699_4_, EntityPlayer p_149699_5_) {} | ||
|
||
/** | ||
* Called upon block activation (right click on the block.) | ||
*/ | ||
public boolean onBlockActivated(World p_149727_1_, int p_149727_2_, int p_149727_3_, int p_149727_4_, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_) { | ||
int i1 = this.func_150012_g(p_149727_1_, p_149727_2_, p_149727_3_, p_149727_4_); | ||
int j1 = i1 & 7; | ||
j1 ^= 4; | ||
|
||
if ((i1 & 8) == 0) | ||
{ | ||
p_149727_1_.setBlockMetadataWithNotify(p_149727_2_, p_149727_3_, p_149727_4_, j1, 2); | ||
p_149727_1_.markBlockRangeForRenderUpdate(p_149727_2_, p_149727_3_, p_149727_4_, p_149727_2_, p_149727_3_, p_149727_4_); | ||
} else { | ||
p_149727_1_.setBlockMetadataWithNotify(p_149727_2_, p_149727_3_ - 1, p_149727_4_, j1, 2); | ||
p_149727_1_.markBlockRangeForRenderUpdate(p_149727_2_, p_149727_3_ - 1, p_149727_4_, p_149727_2_, p_149727_3_, p_149727_4_); | ||
} | ||
|
||
p_149727_1_.playAuxSFXAtEntity(p_149727_5_, 1003, p_149727_2_, p_149727_3_, p_149727_4_, 0); | ||
return true; | ||
} | ||
|
||
public void func_150014_a(World p_150014_1_, int p_150014_2_, int p_150014_3_, int p_150014_4_, boolean p_150014_5_) | ||
{ | ||
int l = this.func_150012_g(p_150014_1_, p_150014_2_, p_150014_3_, p_150014_4_); | ||
boolean flag1 = (l & 4) != 0; | ||
|
||
if (flag1 != p_150014_5_) | ||
{ | ||
int i1 = l & 7; | ||
i1 ^= 4; | ||
|
||
if ((l & 8) == 0) | ||
{ | ||
p_150014_1_.setBlockMetadataWithNotify(p_150014_2_, p_150014_3_, p_150014_4_, i1, 2); | ||
p_150014_1_.markBlockRangeForRenderUpdate(p_150014_2_, p_150014_3_, p_150014_4_, p_150014_2_, p_150014_3_, p_150014_4_); | ||
} | ||
else | ||
{ | ||
p_150014_1_.setBlockMetadataWithNotify(p_150014_2_, p_150014_3_ - 1, p_150014_4_, i1, 2); | ||
p_150014_1_.markBlockRangeForRenderUpdate(p_150014_2_, p_150014_3_ - 1, p_150014_4_, p_150014_2_, p_150014_3_, p_150014_4_); | ||
} | ||
|
||
p_150014_1_.playAuxSFXAtEntity(null, 1003, p_150014_2_, p_150014_3_, p_150014_4_, 0); | ||
} | ||
} | ||
|
||
/** | ||
* Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are | ||
* their own) Args: x, y, z, neighbor Block | ||
*/ | ||
public void onNeighborBlockChange(World p_149695_1_, int p_149695_2_, int p_149695_3_, int p_149695_4_, Block p_149695_5_) | ||
{ | ||
int l = p_149695_1_.getBlockMetadata(p_149695_2_, p_149695_3_, p_149695_4_); | ||
|
||
if ((l & 8) == 0) | ||
{ | ||
boolean flag = false; | ||
|
||
if (p_149695_1_.getBlock(p_149695_2_, p_149695_3_ + 1, p_149695_4_) != this) | ||
{ | ||
p_149695_1_.setBlockToAir(p_149695_2_, p_149695_3_, p_149695_4_); | ||
flag = true; | ||
} | ||
|
||
if (!World.doesBlockHaveSolidTopSurface(p_149695_1_, p_149695_2_, p_149695_3_ - 1, p_149695_4_)) | ||
{ | ||
p_149695_1_.setBlockToAir(p_149695_2_, p_149695_3_, p_149695_4_); | ||
flag = true; | ||
|
||
if (p_149695_1_.getBlock(p_149695_2_, p_149695_3_ + 1, p_149695_4_) == this) | ||
{ | ||
p_149695_1_.setBlockToAir(p_149695_2_, p_149695_3_ + 1, p_149695_4_); | ||
} | ||
} | ||
|
||
if (flag) | ||
{ | ||
if (!p_149695_1_.isRemote) | ||
{ | ||
this.dropBlockAsItem(p_149695_1_, p_149695_2_, p_149695_3_, p_149695_4_, l, 0); | ||
} | ||
} | ||
else | ||
{ | ||
boolean flag1 = p_149695_1_.isBlockIndirectlyGettingPowered(p_149695_2_, p_149695_3_, p_149695_4_) || p_149695_1_.isBlockIndirectlyGettingPowered(p_149695_2_, p_149695_3_ + 1, p_149695_4_); | ||
|
||
if ((flag1 || p_149695_5_.canProvidePower()) && p_149695_5_ != this) | ||
{ | ||
this.func_150014_a(p_149695_1_, p_149695_2_, p_149695_3_, p_149695_4_, flag1); | ||
} | ||
} | ||
} | ||
else | ||
{ | ||
if (p_149695_1_.getBlock(p_149695_2_, p_149695_3_ - 1, p_149695_4_) != this) | ||
{ | ||
p_149695_1_.setBlockToAir(p_149695_2_, p_149695_3_, p_149695_4_); | ||
} | ||
|
||
if (p_149695_5_ != this) | ||
{ | ||
this.onNeighborBlockChange(p_149695_1_, p_149695_2_, p_149695_3_ - 1, p_149695_4_, p_149695_5_); | ||
} | ||
} | ||
} | ||
|
||
public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) | ||
{ | ||
return (p_149650_1_ & 8) != 0 ? null : (this.blockMaterial == Material.iron ? Items.iron_door : Items.wooden_door); | ||
} | ||
|
||
/** | ||
* Ray traces through the blocks collision from start vector to end vector returning a ray trace hit. Args: world, | ||
* x, y, z, startVec, endVec | ||
*/ | ||
public MovingObjectPosition collisionRayTrace(World p_149731_1_, int p_149731_2_, int p_149731_3_, int p_149731_4_, Vec3 p_149731_5_, Vec3 p_149731_6_) | ||
{ | ||
this.setBlockBoundsBasedOnState(p_149731_1_, p_149731_2_, p_149731_3_, p_149731_4_); | ||
return super.collisionRayTrace(p_149731_1_, p_149731_2_, p_149731_3_, p_149731_4_, p_149731_5_, p_149731_6_); | ||
} | ||
|
||
/** | ||
* Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z | ||
*/ | ||
public boolean canPlaceBlockAt(World p_149742_1_, int p_149742_2_, int p_149742_3_, int p_149742_4_) | ||
{ | ||
return p_149742_3_ >= p_149742_1_.getHeight() - 2 ? false : World.doesBlockHaveSolidTopSurface(p_149742_1_, p_149742_2_, p_149742_3_ - 1, p_149742_4_) && super.canPlaceBlockAt(p_149742_1_, p_149742_2_, p_149742_3_, p_149742_4_) && super.canPlaceBlockAt(p_149742_1_, p_149742_2_, p_149742_3_ + 1, p_149742_4_) && super.canPlaceBlockAt(p_149742_1_, p_149742_2_, p_149742_3_ + 2, p_149742_4_); | ||
} | ||
|
||
/** | ||
* Returns the mobility information of the block, 0 = free, 1 = can't push but can move over, 2 = total immobility | ||
* and stop pistons | ||
*/ | ||
public int getMobilityFlag() | ||
{ | ||
return 1; | ||
} | ||
|
||
public int func_150012_g(IBlockAccess world, int x, int y, int z) | ||
{ | ||
int l = world.getBlockMetadata(x, y, z); | ||
boolean flag = (l & 8) != 0; | ||
int i1; | ||
int j1; | ||
|
||
if (flag) | ||
{ | ||
i1 = world.getBlockMetadata(x, y - 1, z); | ||
j1 = l; | ||
} | ||
else | ||
{ | ||
i1 = l; | ||
j1 = world.getBlockMetadata(x, y + 1, z); | ||
} | ||
|
||
boolean flag1 = (j1 & 1) != 0; | ||
return i1 & 7 | (flag ? 8 : 0) | (flag1 ? 16 : 0); | ||
} | ||
|
||
/** | ||
* Gets an item for the block being called on. Args: world, x, y, z | ||
*/ | ||
@SideOnly(Side.CLIENT) | ||
public Item getItem(World p_149694_1_, int p_149694_2_, int p_149694_3_, int p_149694_4_) | ||
{ | ||
return this.blockMaterial == Material.iron ? Items.iron_door : Items.wooden_door; | ||
} | ||
|
||
/** | ||
* Called when the block is attempted to be harvested | ||
*/ | ||
public void onBlockHarvested(World w, int x, int y, int z, int p_149681_5_, EntityPlayer p_149681_6_) | ||
{ | ||
if (p_149681_6_.capabilities.isCreativeMode && (p_149681_5_ & 8) != 0 && w.getBlock(x, y - 1, z) == this && w.getBlock(x, y - 2, z) == this) | ||
{ | ||
w.setBlockToAir(x, y - 1, z); | ||
w.setBlockToAir(x, y - 2, z); | ||
} | ||
} | ||
} |
Oops, something went wrong.