- 2,932
- 44
- 598
Доброго времени суток Земляне и Чужие!
Сегодня у меня появилась идея: У меня есть несколько пушек которые могут стрелять блоками (выставлять их в мире).
Вот так вот выглядит реализация стрельбы пушки:
А вот так вот выглядит снаряд который ставит блоки в мире:
И вот в голове у меня складывается такая картина где для каждого из блоков есть своя пушка.
И вот я думаю как сделать что бы при регистраций/созданий пушки можно было выбрать тип блока который будет выставлен в мире.
Есть у кого-то какие-то идей? (Котелок просто совсем не варит)
Сегодня у меня появилась идея: У меня есть несколько пушек которые могут стрелять блоками (выставлять их в мире).
Вот так вот выглядит реализация стрельбы пушки:
Java:
public class BlockGunBasic extends Item {
public BlockGunBasic(String name) {
super();
setRegistryName(name);
setFull3D();
setUnlocalizedName("block_gun");
setMaxDamage(320);
setCreativeTab(CreativeTabs.COMBAT);
setMaxStackSize(1);
}
@Override
public ActionResult<ItemStack> onItemRightClick(World World, final EntityPlayer EntityPlayer, EnumHand hand) {
ItemStack ItemStack = EntityPlayer.getHeldItem(hand);
EntityBlockBullet EntityBlockBullet = new EntityBlockBullet(World, EntityPlayer); //New bullet
EntityBlockBullet.shoot(EntityPlayer.getLookVec().x, EntityPlayer.getLookVec().y, EntityPlayer.getLookVec().z, 4, 0);
EntityBlockBullet.setKnockbackStrength(1); EntityBlockBullet.setDamage(3.5); //Bullet knockback and damage
ItemStack.damageItem(1, EntityPlayer); //Damage item
World.spawnEntity(EntityBlockBullet); //Spawn bullet
World.playSound(null, EntityPlayer.getPosition(), SoundEvents.BLOCK_LEVER_CLICK, SoundCategory.BLOCKS, 0.3F, 0.8F); //Sound
return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, ItemStack);
}
}
А вот так вот выглядит снаряд который ставит блоки в мире:
Java:
public class EntityBlockBullet extends EntityTippedArrow {
public EntityBlockBullet(World a) {
super(a);
}
public EntityBlockBullet(World worldIn, double x, double y, double z) {
super(worldIn, x, y, z);
}
public EntityBlockBullet(World worldIn, EntityLivingBase shooter) {
super(worldIn, shooter);
}
@Override
public void onCollideWithPlayer(EntityPlayer entity) {
super.onCollideWithPlayer(entity);
MathHelper.floor(this.getEntityBoundingBox().minX + 0D);
MathHelper.floor(this.getEntityBoundingBox().minY + 0D);
MathHelper.floor(this.getEntityBoundingBox().minZ + 0D);
}
@Override
public void onUpdate() {
super.onUpdate();
int x = MathHelper.floor(getEntityBoundingBox().minX + 0D);
int y = MathHelper.floor(getEntityBoundingBox().minY + 0D);
int z = MathHelper.floor(getEntityBoundingBox().minZ + 0D);
if (getBlock(world, x, y, z) != Blocks.AIR
|| getBlock(world, x, y - 1, z) != Blocks.AIR
|| getBlock(world, x, y + 1, z) != Blocks.AIR
|| getBlock(world, x + 1, y, z) != Blocks.AIR
|| getBlock(world, x - 1, y, z) != Blocks.AIR
|| getBlock(world, x, y, z + 1) != Blocks.AIR
|| getBlock(world, x, y, z - 1) != Blocks.AIR) {
world.setBlockState(new BlockPos(x, y, z), Blocks.DIRT.getDefaultState(), 2);
world.removeEntity(this);
}
}
public Block getBlock(World World, int x, int y, int z) {
return World.getBlockState(new BlockPos(x, y, z)).getBlock();
}
}
И вот в голове у меня складывается такая картина где для каждого из блоков есть своя пушка.
И вот я думаю как сделать что бы при регистраций/созданий пушки можно было выбрать тип блока который будет выставлен в мире.
Есть у кого-то какие-то идей? (Котелок просто совсем не варит)