135 lines
4.9 KiB
Java
135 lines
4.9 KiB
Java
package com.gildedgames.the_aether.blocks.portal;
|
|
|
|
import java.util.Random;
|
|
|
|
import com.gildedgames.the_aether.Aether;
|
|
import com.gildedgames.the_aether.entities.particles.ParticleAetherPortal;
|
|
import com.gildedgames.the_aether.entities.util.EntityHook;
|
|
import com.gildedgames.the_aether.player.PlayerAether;
|
|
import cpw.mods.fml.client.FMLClientHandler;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockPortal;
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.world.World;
|
|
|
|
public class BlockAetherPortal extends BlockPortal {
|
|
public BlockAetherPortal() {
|
|
super();
|
|
|
|
this.setHardness(-1);
|
|
this.setResistance(900000F);
|
|
this.setStepSound(soundTypeGlass);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerBlockIcons(IIconRegister registry) {
|
|
this.blockIcon = registry.registerIcon(Aether.find("aether_portal"));
|
|
}
|
|
|
|
@Override
|
|
public void onEntityCollidedWithBlock(
|
|
World world, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity entity
|
|
) {
|
|
if (entity instanceof EntityPlayer) {
|
|
PlayerAether.get((EntityPlayer) entity).setInPortal();
|
|
} else if ((entity instanceof EntityLivingBase) && entity.ridingEntity == null && entity.riddenByEntity == null) {
|
|
((EntityHook) entity.getExtendedProperties("aether_legacy:entity_hook"))
|
|
.setInPortal();
|
|
}
|
|
}
|
|
|
|
public boolean trySpawnPortal(World worldIn, int x, int y, int z) {
|
|
AetherPortalSize aetherportal$size = new AetherPortalSize(worldIn, x, y, z, 1);
|
|
|
|
if (aetherportal$size.isValid() && aetherportal$size.portalBlockCount == 0) {
|
|
aetherportal$size.placePortalBlocks();
|
|
|
|
return true;
|
|
} else {
|
|
AetherPortalSize aetherportal$size1
|
|
= new AetherPortalSize(worldIn, x, y, z, 2);
|
|
|
|
if (aetherportal$size1.isValid()
|
|
&& aetherportal$size1.portalBlockCount == 0) {
|
|
aetherportal$size1.placePortalBlocks();
|
|
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onNeighborBlockChange(World worldIn, int x, int y, int z, Block blockIn) {
|
|
int l = func_149999_b(worldIn.getBlockMetadata(x, y, z));
|
|
|
|
if (l == 1) {
|
|
AetherPortalSize blockportal$size = new AetherPortalSize(worldIn, x, y, z, 1);
|
|
|
|
if (!blockportal$size.isValid()
|
|
|| blockportal$size.portalBlockCount
|
|
< blockportal$size.width * blockportal$size.height) {
|
|
worldIn.setBlock(x, y, z, Blocks.air);
|
|
}
|
|
} else if (l == 2) {
|
|
AetherPortalSize blockportal$size1
|
|
= new AetherPortalSize(worldIn, x, y, z, 2);
|
|
|
|
if (!blockportal$size1.isValid()
|
|
|| blockportal$size1.portalBlockCount
|
|
< blockportal$size1.width * blockportal$size1.height) {
|
|
worldIn.setBlock(x, y, z, Blocks.air);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void randomDisplayTick(World world, int x, int y, int z, Random rand) {
|
|
if (rand.nextInt(100) == 0) {
|
|
world.playSound(
|
|
(double) x + 0.5D,
|
|
(double) y + 0.5D,
|
|
(double) z + 0.5D,
|
|
"portal.portal",
|
|
0.5F,
|
|
rand.nextFloat() * 0.4F + 0.8F,
|
|
false
|
|
);
|
|
}
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
double d0 = (double) ((float) x + rand.nextFloat());
|
|
double d1 = (double) ((float) y + rand.nextFloat());
|
|
double d2 = (double) ((float) z + rand.nextFloat());
|
|
double d3 = ((double) rand.nextFloat() - 0.5D) * 0.5D;
|
|
double d4 = ((double) rand.nextFloat() - 0.5D) * 0.5D;
|
|
double d5 = ((double) rand.nextFloat() - 0.5D) * 0.5D;
|
|
int j = rand.nextInt(2) * 2 - 1;
|
|
|
|
if (world.getBlock(x - 1, y, z) != this
|
|
&& world.getBlock(x + 1, y, z) != this) {
|
|
d0 = (double) x + 0.5D + 0.25D * (double) j;
|
|
d3 = (double) (rand.nextFloat() * 2.0F * (float) j);
|
|
} else {
|
|
d2 = (double) z + 0.5D + 0.25D * (double) j;
|
|
d5 = (double) (rand.nextFloat() * 2.0F * (float) j);
|
|
}
|
|
|
|
ParticleAetherPortal particle
|
|
= new ParticleAetherPortal(world, d0, d1, d2, d3, d4, d5);
|
|
FMLClientHandler.instance().getClient().effectRenderer.addEffect(particle);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void updateTick(World world, int x, int y, int z, Random rand) {}
|
|
} |