tcr/java/src/game/block/BlockDragonEgg.java

219 lines
7.4 KiB
Java
Raw Normal View History

2025-03-11 00:23:54 +01:00
package game.block;
import game.entity.item.EntityFalling;
import game.entity.npc.EntityNPC;
import game.init.Config;
import game.material.Material;
2025-05-04 20:27:55 +02:00
import game.model.Model;
import game.model.ModelProvider;
import game.model.ParticleType;
2025-03-11 00:23:54 +01:00
import game.rng.Random;
import game.world.BlockPos;
import game.world.Facing;
import game.world.IWorldAccess;
import game.world.State;
import game.world.World;
import game.world.WorldServer;
public class BlockDragonEgg extends Block
{
2025-05-04 20:27:55 +02:00
private static final Model dragon_egg = ModelProvider.getModelProvider().getModel("dragon_egg").noOcclude()
2025-03-11 00:23:54 +01:00
.add(6, 15, 6, 10, 16, 10)
.d().uv(6, 6, 10, 10).noCull()
.u().uv(6, 6, 10, 10).noCull()
.n().uv(6, 15, 10, 16).noCull()
.s().uv(6, 15, 10, 16).noCull()
.w().uv(6, 15, 10, 16).noCull()
.e().uv(6, 15, 10, 16).noCull()
.add(5, 14, 5, 11, 15, 11)
.d().uv(5, 5, 11, 11).noCull()
.u().uv(5, 5, 11, 11).noCull()
.n().uv(5, 14, 11, 15).noCull()
.s().uv(5, 14, 11, 15).noCull()
.w().uv(5, 14, 11, 15).noCull()
.e().uv(5, 14, 11, 15).noCull()
.add(5, 13, 5, 11, 14, 11)
.d().uv(4, 4, 12, 12).noCull()
.u().uv(4, 4, 12, 12).noCull()
.n().uv(4, 13, 12, 14).noCull()
.s().uv(4, 13, 12, 14).noCull()
.w().uv(4, 13, 12, 14).noCull()
.e().uv(4, 13, 12, 14).noCull()
.add(3, 11, 3, 13, 13, 13)
.d().uv(3, 3, 13, 13).noCull()
.u().uv(3, 3, 13, 13).noCull()
.n().uv(3, 11, 13, 13).noCull()
.s().uv(3, 11, 13, 13).noCull()
.w().uv(3, 11, 13, 13).noCull()
.e().uv(3, 11, 13, 13).noCull()
.add(2, 8, 2, 14, 11, 14)
.d().uv(2, 2, 14, 14).noCull()
.u().uv(2, 2, 14, 14).noCull()
.n().uv(2, 8, 14, 11).noCull()
.s().uv(2, 8, 14, 11).noCull()
.w().uv(2, 8, 14, 11).noCull()
.e().uv(2, 8, 14, 11).noCull()
.add(1, 3, 1, 15, 8, 15)
.d().uv(1, 1, 15, 15).noCull()
.u().uv(1, 1, 15, 15).noCull()
.n().uv(1, 3, 15, 8).noCull()
.s().uv(1, 3, 15, 8).noCull()
.w().uv(1, 3, 15, 8).noCull()
.e().uv(1, 3, 15, 8).noCull()
.add(2, 1, 2, 14, 3, 14)
.d().uv(2, 2, 14, 14).noCull()
.u().uv(2, 2, 14, 14).noCull()
.n().uv(2, 1, 14, 3).noCull()
.s().uv(2, 1, 14, 3).noCull()
.w().uv(2, 1, 14, 3).noCull()
.e().uv(2, 1, 14, 3).noCull()
.add(3, 0, 3, 13, 1, 13)
.d().uv(3, 3, 13, 13).noCull()
.u().uv(3, 3, 13, 13).noCull()
.n().uv(3, 0, 13, 1).noCull()
.s().uv(3, 0, 13, 1).noCull()
.w().uv(3, 0, 13, 1).noCull()
.e().uv(3, 0, 13, 1).noCull()
;
public BlockDragonEgg()
{
super(Material.dragonEgg);
this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 1.0F, 0.9375F);
}
public void onBlockAdded(WorldServer worldIn, BlockPos pos, State state)
{
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn, pos));
}
/**
* Called when a neighboring block changes.
*/
public void onNeighborBlockChange(World worldIn, BlockPos pos, State state, Block neighborBlock)
{
worldIn.scheduleUpdate(pos, this, this.tickRate(worldIn, pos));
}
public void updateTick(WorldServer worldIn, BlockPos pos, State state, Random rand)
{
if(Config.blockGravity)
this.checkFall(worldIn, pos);
}
private void checkFall(World worldIn, BlockPos pos)
{
if (BlockFalling.canFallInto(worldIn, pos.down()) && pos.getY() >= 0)
{
int i = 32;
if (!BlockFalling.fallInstantly && worldIn.isAreaLoaded(pos.add(-i, -i, -i), pos.add(i, i, i)))
{
worldIn.spawnEntityInWorld(new EntityFalling(worldIn, (double)((float)pos.getX() + 0.5F), (double)pos.getY(), (double)((float)pos.getZ() + 0.5F), this.getState()));
}
else
{
worldIn.setBlockToAir(pos);
BlockPos blockpos;
for(blockpos = pos; BlockFalling.canFallInto(worldIn, blockpos) && blockpos.getY() > 0; blockpos = blockpos.down()) {
}
if(blockpos != pos)
blockpos = blockpos.up();
if(blockpos.getY() > 0)
worldIn.setState(blockpos, this.getState(), 2);
}
}
}
public boolean onBlockActivated(World worldIn, BlockPos pos, State state, EntityNPC playerIn, Facing side, float hitX, float hitY, float hitZ)
{
this.teleport(worldIn, pos);
return true;
}
public void onBlockClicked(World worldIn, BlockPos pos, EntityNPC playerIn)
{
this.teleport(worldIn, pos);
}
private void teleport(World worldIn, BlockPos pos)
{
State iblockstate = worldIn.getState(pos);
if (iblockstate.getBlock() == this)
{
for (int i = 0; i < 1000; ++i)
{
BlockPos blockpos = pos.add(worldIn.rand.zrange(16) - worldIn.rand.zrange(16), worldIn.rand.zrange(8) - worldIn.rand.zrange(8), worldIn.rand.zrange(16) - worldIn.rand.zrange(16));
if (worldIn.getState(blockpos).getBlock().material == Material.air)
{
if (worldIn.client)
{
for (int j = 0; j < 128; ++j)
{
double d0 = worldIn.rand.doublev();
float f = (worldIn.rand.floatv() - 0.5F) * 0.2F;
float f1 = (worldIn.rand.floatv() - 0.5F) * 0.2F;
float f2 = (worldIn.rand.floatv() - 0.5F) * 0.2F;
double d1 = (double)blockpos.getX() + (double)(pos.getX() - blockpos.getX()) * d0 + (worldIn.rand.doublev() - 0.5D) * 1.0D + 0.5D;
double d2 = (double)blockpos.getY() + (double)(pos.getY() - blockpos.getY()) * d0 + worldIn.rand.doublev() * 1.0D - 0.5D;
double d3 = (double)blockpos.getZ() + (double)(pos.getZ() - blockpos.getZ()) * d0 + (worldIn.rand.doublev() - 0.5D) * 1.0D + 0.5D;
worldIn.spawnParticle(ParticleType.PORTAL, d1, d2, d3, (double)f, (double)f1, (double)f2);
}
}
else
{
worldIn.setBlockToAir(pos);
if(!Config.blockGravity) {
BlockPos blockpos2;
for(blockpos2 = blockpos; BlockFalling.canFallInto(worldIn, blockpos2) && blockpos2.getY() > 0; blockpos2 = blockpos2.down()) {
}
if(blockpos2 != blockpos)
blockpos = blockpos2.up();
}
worldIn.setState(blockpos, iblockstate, 2);
}
return;
}
}
}
}
/**
* How many world ticks before ticking
*/
public int tickRate(World worldIn, BlockPos pos)
{
return 5;
}
/**
* Used to determine ambient occlusion and culling when rebuilding chunks for render
*/
public boolean isOpaqueCube()
{
return false;
}
public boolean isFullCube()
{
return false;
}
public boolean shouldSideBeRendered(IWorldAccess worldIn, BlockPos pos, Facing side)
{
return true;
}
// public Item getItem(World worldIn, BlockPos pos)
// {
// return null;
// }
2025-05-04 20:27:55 +02:00
public Model getModel(ModelProvider provider, String name, State state) {
2025-03-11 00:23:54 +01:00
return dragon_egg;
}
}