Fixed Quantum Gate placement logic
This commit is contained in:
parent
1c6aa00f43
commit
15c1b565ca
6 changed files with 59 additions and 343 deletions
|
@ -29,13 +29,9 @@ import resonantinduction.electrical.tesla.TileTesla;
|
||||||
import resonantinduction.electrical.transformer.ItemTransformer;
|
import resonantinduction.electrical.transformer.ItemTransformer;
|
||||||
import resonantinduction.electrical.wire.EnumWireMaterial;
|
import resonantinduction.electrical.wire.EnumWireMaterial;
|
||||||
import resonantinduction.electrical.wire.ItemWire;
|
import resonantinduction.electrical.wire.ItemWire;
|
||||||
import resonantinduction.quantum.gate.BlockGlyph;
|
|
||||||
import resonantinduction.quantum.gate.BlockQuantumGate;
|
|
||||||
import resonantinduction.quantum.gate.ItemQuantumGlyph;
|
import resonantinduction.quantum.gate.ItemQuantumGlyph;
|
||||||
import resonantinduction.quantum.gate.TileQuantumGate;
|
|
||||||
import calclavia.lib.content.ContentRegistry;
|
import calclavia.lib.content.ContentRegistry;
|
||||||
import calclavia.lib.network.PacketHandler;
|
import calclavia.lib.network.PacketHandler;
|
||||||
import calclavia.lib.prefab.item.ItemBlockMetadata;
|
|
||||||
import calclavia.lib.recipe.UniversalRecipe;
|
import calclavia.lib.recipe.UniversalRecipe;
|
||||||
import cpw.mods.fml.common.Loader;
|
import cpw.mods.fml.common.Loader;
|
||||||
import cpw.mods.fml.common.Mod;
|
import cpw.mods.fml.common.Mod;
|
||||||
|
@ -125,7 +121,6 @@ public class Electrical
|
||||||
blockThermopile = contentRegistry.createTile(BlockThermopile.class, TileThermopile.class);
|
blockThermopile = contentRegistry.createTile(BlockThermopile.class, TileThermopile.class);
|
||||||
|
|
||||||
// Quantum
|
// Quantum
|
||||||
blockQuantumGate = contentRegistry.createTile(BlockQuantumGate.class, TileQuantumGate.class);
|
|
||||||
itemQuantumGlyph = contentRegistry.createItem(ItemQuantumGlyph.class);
|
itemQuantumGlyph = contentRegistry.createItem(ItemQuantumGlyph.class);
|
||||||
Settings.save();
|
Settings.save();
|
||||||
|
|
||||||
|
@ -190,8 +185,8 @@ public class Electrical
|
||||||
GameRegistry.addRecipe(new ShapedOreRecipe(itemTransformer, "WWW", "WWW", "III", 'W', "wire", 'I', UniversalRecipe.PRIMARY_METAL.get()));
|
GameRegistry.addRecipe(new ShapedOreRecipe(itemTransformer, "WWW", "WWW", "III", 'W', "wire", 'I', UniversalRecipe.PRIMARY_METAL.get()));
|
||||||
GameRegistry.addRecipe(new ShapedOreRecipe(itemLevitator, " G ", "SDS", "SWS", 'W', "wire", 'G', Block.glass, 'D', Block.blockDiamond, 'S', UniversalRecipe.PRIMARY_METAL.get()));
|
GameRegistry.addRecipe(new ShapedOreRecipe(itemLevitator, " G ", "SDS", "SWS", 'W', "wire", 'G', Block.glass, 'D', Block.blockDiamond, 'S', UniversalRecipe.PRIMARY_METAL.get()));
|
||||||
|
|
||||||
/** Quantum */
|
/** Quantum Gates */
|
||||||
GameRegistry.addRecipe(new ShapedOreRecipe(blockQuantumGate, "TTT", "LBL", "CCC", 'B', Block.blockDiamond, 'L', itemLevitator, 'C', itemCharger, 'T', blockTesla));
|
GameRegistry.addRecipe(new ShapedOreRecipe(itemQuantumGlyph, "TTT", "LBL", "CCC", 'B', Block.blockDiamond, 'L', itemLevitator, 'C', itemCharger, 'T', blockTesla));
|
||||||
|
|
||||||
/** Generators **/
|
/** Generators **/
|
||||||
GameRegistry.addRecipe(new ShapedOreRecipe(blockSolarPanel, "CCC", "WWW", "III", 'W', "wire", 'C', Item.coal, 'I', UniversalRecipe.PRIMARY_METAL.get()));
|
GameRegistry.addRecipe(new ShapedOreRecipe(blockSolarPanel, "CCC", "WWW", "III", 'W', "wire", 'C', Item.coal, 'I', UniversalRecipe.PRIMARY_METAL.get()));
|
||||||
|
|
|
@ -1,122 +0,0 @@
|
||||||
package resonantinduction.quantum.gate;
|
|
||||||
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import net.minecraft.block.material.Material;
|
|
||||||
import net.minecraft.entity.Entity;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.Icon;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
|
||||||
import resonantinduction.electrical.Electrical;
|
|
||||||
import calclavia.lib.prefab.block.BlockTile;
|
|
||||||
import cpw.mods.fml.relauncher.Side;
|
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
|
||||||
|
|
||||||
public class BlockQuantumGate extends BlockTile
|
|
||||||
{
|
|
||||||
public Icon iconTop, iconSide, iconBot;
|
|
||||||
|
|
||||||
public BlockQuantumGate(int id)
|
|
||||||
{
|
|
||||||
super(id, Material.iron);
|
|
||||||
this.setHardness(32F);
|
|
||||||
this.setResistance(1000F);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** A randomly called display update to be able to add particles or other items for display */
|
|
||||||
@Override
|
|
||||||
@SideOnly(Side.CLIENT)
|
|
||||||
public void randomDisplayTick(World world, int x, int y, int z, Random par5Random)
|
|
||||||
{
|
|
||||||
TileEntity tile = world.getBlockTileEntity(x, y, z);
|
|
||||||
|
|
||||||
if (tile instanceof TileQuantumGate)
|
|
||||||
{
|
|
||||||
int frequency = ((TileQuantumGate) tile).getFrequency();
|
|
||||||
|
|
||||||
if (frequency != -1)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Spawn particles all around the pillar
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (int height = 0; height < 4; height++)
|
|
||||||
{
|
|
||||||
for (int i = 2; i < 6; i++)
|
|
||||||
{
|
|
||||||
ForgeDirection dir = ForgeDirection.getOrientation(i);
|
|
||||||
double spawnX = x + 0.5f + dir.offsetX;
|
|
||||||
double spawnY = y + 0.255f + par5Random.nextFloat() * 0.25f - height;
|
|
||||||
double spawnZ = z + 0.5f + dir.offsetZ;
|
|
||||||
double xRand = par5Random.nextFloat() * 0.6F - 0.3F;
|
|
||||||
double zRand = par5Random.nextFloat() * 0.6F - 0.3F;
|
|
||||||
|
|
||||||
world.spawnParticle("enchantmenttable", spawnX + xRand, spawnY, spawnZ + zRand, Math.random() * 0.5, 0.1, Math.random() * 0.5);
|
|
||||||
world.spawnParticle("enchantmenttable", spawnX - xRand, spawnY, spawnZ + zRand, Math.random() * 0.5, 0.1, Math.random() * 0.5);
|
|
||||||
world.spawnParticle("enchantmenttable", spawnX + xRand, spawnY, spawnZ - zRand, Math.random() * 0.5, 0.1, Math.random() * 0.5);
|
|
||||||
world.spawnParticle("enchantmenttable", spawnX - xRand, spawnY, spawnZ - zRand, Math.random() * 0.5, 0.1, Math.random() * 0.5);
|
|
||||||
|
|
||||||
if (((TileQuantumGate) tile).canFunction())
|
|
||||||
{
|
|
||||||
world.spawnParticle("portal", spawnX + xRand, spawnY, spawnZ + zRand, Math.random() * 0.5, 0.1, Math.random() * 0.5);
|
|
||||||
world.spawnParticle("portal", spawnX - xRand, spawnY, spawnZ + zRand, Math.random() * 0.5, 0.1, Math.random() * 0.5);
|
|
||||||
world.spawnParticle("portal", spawnX + xRand, spawnY, spawnZ - zRand, Math.random() * 0.5, 0.1, Math.random() * 0.5);
|
|
||||||
world.spawnParticle("portal", spawnX - xRand, spawnY, spawnZ - zRand, Math.random() * 0.5, 0.1, Math.random() * 0.5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int i, float f1, float f2, float f3)
|
|
||||||
{
|
|
||||||
if (player != null && player.getHeldItem() == null)
|
|
||||||
{
|
|
||||||
TileEntity tile = world.getBlockTileEntity(x, y, z);
|
|
||||||
|
|
||||||
if (tile instanceof TileQuantumGate)
|
|
||||||
{
|
|
||||||
int frequency = ((TileQuantumGate) tile).getFrequency();
|
|
||||||
|
|
||||||
if (frequency == -1)
|
|
||||||
{
|
|
||||||
if (!world.isRemote)
|
|
||||||
player.addChatMessage("Quantum Gate not set up.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!world.isRemote)
|
|
||||||
{
|
|
||||||
player.addChatMessage("Quantum Gate frequency: " + " " + frequency);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity par5Entity)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TileEntity createNewTileEntity(World world)
|
|
||||||
{
|
|
||||||
return new TileQuantumGate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isOpaqueCube()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -8,13 +8,11 @@ import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import resonantinduction.core.prefab.part.IHighlight;
|
import resonantinduction.core.prefab.part.IHighlight;
|
||||||
import resonantinduction.mechanical.energy.gear.PartGearShaft;
|
|
||||||
import codechicken.lib.vec.BlockCoord;
|
import codechicken.lib.vec.BlockCoord;
|
||||||
import codechicken.lib.vec.Vector3;
|
import codechicken.lib.vec.Vector3;
|
||||||
import codechicken.microblock.CornerPlacementGrid$;
|
import codechicken.microblock.CornerPlacementGrid$;
|
||||||
import codechicken.multipart.JItemMultiPart;
|
import codechicken.multipart.JItemMultiPart;
|
||||||
import codechicken.multipart.MultiPartRegistry;
|
import codechicken.multipart.MultiPartRegistry;
|
||||||
import codechicken.multipart.PartMap;
|
|
||||||
import codechicken.multipart.TMultiPart;
|
import codechicken.multipart.TMultiPart;
|
||||||
import codechicken.multipart.TileMultipart;
|
import codechicken.multipart.TileMultipart;
|
||||||
|
|
||||||
|
@ -33,45 +31,45 @@ public class ItemQuantumGlyph extends JItemMultiPart implements IHighlight
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TMultiPart newPart(ItemStack itemStack, EntityPlayer player, World world, BlockCoord pos, int slot, Vector3 hit)
|
public TMultiPart newPart(ItemStack itemStack, EntityPlayer player, World world, BlockCoord pos, int side, Vector3 hit)
|
||||||
{
|
{
|
||||||
PartQuantumGlyph part = (PartQuantumGlyph) MultiPartRegistry.createPart("resonant_induction_quantum_glyph", false);
|
PartQuantumGlyph part = (PartQuantumGlyph) MultiPartRegistry.createPart("resonant_induction_quantum_glyph", false);
|
||||||
slot = CornerPlacementGrid$.MODULE$.getHitSlot(hit, slot);
|
int slot = CornerPlacementGrid$.MODULE$.getHitSlot(hit, side);
|
||||||
System.out.println(slot);
|
|
||||||
switch (slot)
|
|
||||||
{
|
|
||||||
case 7:
|
|
||||||
slot = 0;
|
|
||||||
break;
|
|
||||||
case 9:
|
|
||||||
slot = 1;
|
|
||||||
break;
|
|
||||||
case 11:
|
|
||||||
slot = 2;
|
|
||||||
break;
|
|
||||||
case 13:
|
|
||||||
slot = 3;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
slot = 4;
|
|
||||||
break;
|
|
||||||
case 10:
|
|
||||||
slot = 5;
|
|
||||||
break;
|
|
||||||
case 12:
|
|
||||||
slot = 6;
|
|
||||||
break;
|
|
||||||
case 14:
|
|
||||||
slot = 7;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
TileEntity tile = world.getBlockTileEntity(pos.x, pos.y, pos.z);
|
TileEntity tile = world.getBlockTileEntity(pos.x, pos.y, pos.z);
|
||||||
|
|
||||||
if (tile instanceof TileMultipart)
|
if (tile instanceof TileMultipart)
|
||||||
{
|
{
|
||||||
|
TMultiPart checkPart = ((TileMultipart) tile).partMap(slot);
|
||||||
|
|
||||||
|
if (checkPart != null)
|
||||||
|
{
|
||||||
|
switch (side)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
slot -= 1;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
slot += 1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
slot -= 2;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
slot += 2;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
slot -= 4;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
slot += 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pos.offset(side);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
part.preparePlacement(slot, itemStack.getItemDamage());
|
part.preparePlacement(slot, itemStack.getItemDamage());
|
||||||
|
|
|
@ -22,35 +22,37 @@ import codechicken.lib.vec.Cuboid6;
|
||||||
import codechicken.lib.vec.Vector3;
|
import codechicken.lib.vec.Vector3;
|
||||||
import codechicken.multipart.JCuboidPart;
|
import codechicken.multipart.JCuboidPart;
|
||||||
import codechicken.multipart.JNormalOcclusion;
|
import codechicken.multipart.JNormalOcclusion;
|
||||||
|
import codechicken.multipart.TSlottedPart;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
public class PartQuantumGlyph extends JCuboidPart implements JNormalOcclusion, IQuantumGate
|
public class PartQuantumGlyph extends JCuboidPart implements TSlottedPart, JNormalOcclusion, IQuantumGate
|
||||||
{
|
{
|
||||||
public static final int MAX_GLYPH = 4;
|
public static final int MAX_GLYPH = 4;
|
||||||
static final Cuboid6[] bounds = new Cuboid6[8];
|
static final Cuboid6[] bounds = new Cuboid6[15];
|
||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
float expansion = -0.02f;
|
float expansion = -0.02f;
|
||||||
bounds[0] = new Cuboid6(0, 0, 0, 0.5, 0.5, 0.5).expand(expansion);
|
|
||||||
bounds[1] = new Cuboid6(0, 0, 0.5, 0.5, 0.5, 1).expand(expansion);
|
|
||||||
bounds[2] = new Cuboid6(0.5, 0, 0, 1, 0.5, 0.5).expand(expansion);
|
|
||||||
bounds[3] = new Cuboid6(0.5, 0, 0.5, 1, 0.5, 1).expand(expansion);
|
|
||||||
|
|
||||||
bounds[4] = new Cuboid6(0, 0.5, 0, 0.5, 1, 0.5).expand(expansion);
|
bounds[7] = new Cuboid6(0, 0, 0, 0.5, 0.5, 0.5).expand(expansion);
|
||||||
bounds[5] = new Cuboid6(0, 0.5, 0.5, 0.5, 1, 1).expand(expansion);
|
bounds[9] = new Cuboid6(0, 0, 0.5, 0.5, 0.5, 1).expand(expansion);
|
||||||
bounds[6] = new Cuboid6(0.5, 0.5, 0, 1, 1, 0.5).expand(expansion);
|
bounds[11] = new Cuboid6(0.5, 0, 0, 1, 0.5, 0.5).expand(expansion);
|
||||||
bounds[7] = new Cuboid6(0.5, 0.5, 0.5, 1, 1, 1).expand(expansion);
|
bounds[13] = new Cuboid6(0.5, 0, 0.5, 1, 0.5, 1).expand(expansion);
|
||||||
|
|
||||||
|
bounds[8] = new Cuboid6(0, 0.5, 0, 0.5, 1, 0.5).expand(expansion);
|
||||||
|
bounds[10] = new Cuboid6(0, 0.5, 0.5, 0.5, 1, 1).expand(expansion);
|
||||||
|
bounds[12] = new Cuboid6(0.5, 0.5, 0, 1, 1, 0.5).expand(expansion);
|
||||||
|
bounds[14] = new Cuboid6(0.5, 0.5, 0.5, 1, 1, 1).expand(expansion);
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte side;
|
private byte slot;
|
||||||
byte number;
|
byte number;
|
||||||
int ticks;
|
int ticks;
|
||||||
|
|
||||||
public void preparePlacement(int side, int itemDamage)
|
public void preparePlacement(int side, int itemDamage)
|
||||||
{
|
{
|
||||||
this.side = (byte) side;
|
this.slot = (byte) side;
|
||||||
this.number = (byte) itemDamage;
|
this.number = (byte) itemDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,9 +174,9 @@ public class PartQuantumGlyph extends JCuboidPart implements JNormalOcclusion, I
|
||||||
@Override
|
@Override
|
||||||
public Cuboid6 getBounds()
|
public Cuboid6 getBounds()
|
||||||
{
|
{
|
||||||
if (side < bounds.length)
|
if (slot < bounds.length)
|
||||||
if (bounds[side] != null)
|
if (bounds[slot] != null)
|
||||||
return bounds[side];
|
return bounds[slot];
|
||||||
|
|
||||||
return new Cuboid6(0, 0, 0, 0.5, 0.5, 0.5);
|
return new Cuboid6(0, 0, 0, 0.5, 0.5, 0.5);
|
||||||
}
|
}
|
||||||
|
@ -185,6 +187,12 @@ public class PartQuantumGlyph extends JCuboidPart implements JNormalOcclusion, I
|
||||||
return Arrays.asList(new Cuboid6[] { getBounds() });
|
return Arrays.asList(new Cuboid6[] { getBounds() });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotMask()
|
||||||
|
{
|
||||||
|
return 1 << slot;
|
||||||
|
}
|
||||||
|
|
||||||
protected ItemStack getItem()
|
protected ItemStack getItem()
|
||||||
{
|
{
|
||||||
return new ItemStack(Electrical.itemQuantumGlyph, 1, number);
|
return new ItemStack(Electrical.itemQuantumGlyph, 1, number);
|
||||||
|
@ -223,14 +231,14 @@ public class PartQuantumGlyph extends JCuboidPart implements JNormalOcclusion, I
|
||||||
@Override
|
@Override
|
||||||
public void load(NBTTagCompound nbt)
|
public void load(NBTTagCompound nbt)
|
||||||
{
|
{
|
||||||
side = nbt.getByte("side");
|
slot = nbt.getByte("side");
|
||||||
number = nbt.getByte("number");
|
number = nbt.getByte("number");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(NBTTagCompound nbt)
|
public void save(NBTTagCompound nbt)
|
||||||
{
|
{
|
||||||
nbt.setByte("side", side);
|
nbt.setByte("side", slot);
|
||||||
nbt.setByte("number", number);
|
nbt.setByte("number", number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,163 +0,0 @@
|
||||||
package resonantinduction.quantum.gate;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.entity.Entity;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.AxisAlignedBB;
|
|
||||||
import resonantinduction.electrical.tesla.ITesla;
|
|
||||||
import resonantinduction.electrical.tesla.TeslaGrid;
|
|
||||||
import universalelectricity.api.energy.EnergyStorageHandler;
|
|
||||||
import universalelectricity.api.vector.Vector3;
|
|
||||||
import universalelectricity.api.vector.VectorWorld;
|
|
||||||
import calclavia.lib.prefab.tile.TileElectrical;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Calclavia, Archadia
|
|
||||||
*/
|
|
||||||
public class TileQuantumGate extends TileElectrical implements ITesla
|
|
||||||
{
|
|
||||||
private long lastFrequencyCheck = 0;
|
|
||||||
private int frequency = 0;
|
|
||||||
|
|
||||||
public TileQuantumGate()
|
|
||||||
{
|
|
||||||
energy = new EnergyStorageHandler(100000);
|
|
||||||
ioMap = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initiate()
|
|
||||||
{
|
|
||||||
super.initiate();
|
|
||||||
TeslaGrid.instance().register(this);
|
|
||||||
|
|
||||||
if (!worldObj.isRemote)
|
|
||||||
{
|
|
||||||
QuantumGateManager.addAnchor(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateEntity()
|
|
||||||
{
|
|
||||||
super.updateEntity();
|
|
||||||
|
|
||||||
if (canFunction() && ticks % 60 == 0)
|
|
||||||
{
|
|
||||||
AxisAlignedBB bounds = AxisAlignedBB.getAABBPool().getAABB(xCoord - 1, yCoord - 4, zCoord - 1, xCoord + 2, yCoord + 2, zCoord + 2);
|
|
||||||
List<Entity> entities = worldObj.getEntitiesWithinAABB(Entity.class, bounds);
|
|
||||||
|
|
||||||
for (Entity entity : entities)
|
|
||||||
{
|
|
||||||
if (entity instanceof EntityPlayer)
|
|
||||||
if (entity.isSneaking())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
doTeleport(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean canFunction()
|
|
||||||
{
|
|
||||||
return energy.isFull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void validate()
|
|
||||||
{
|
|
||||||
|
|
||||||
super.validate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void invalidate()
|
|
||||||
{
|
|
||||||
if (!worldObj.isRemote)
|
|
||||||
{
|
|
||||||
QuantumGateManager.remAnchor(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
TeslaGrid.instance().unregister(this);
|
|
||||||
super.invalidate();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doTeleport(Entity entity)
|
|
||||||
{
|
|
||||||
VectorWorld teleportSpot = null;
|
|
||||||
|
|
||||||
if (getFrequency() != -1)
|
|
||||||
{
|
|
||||||
TileQuantumGate teleporter = QuantumGateManager.getClosestWithFrequency(new VectorWorld(this), getFrequency(), this);
|
|
||||||
|
|
||||||
if (teleporter != null)
|
|
||||||
{
|
|
||||||
teleportSpot = new VectorWorld(teleporter).translate(0.5, 2, 0.5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (teleportSpot != null)
|
|
||||||
{
|
|
||||||
QuantumGateManager.moveEntity(entity, teleportSpot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return -1 if the teleporter is unable to teleport. */
|
|
||||||
public int getFrequency()
|
|
||||||
{
|
|
||||||
if (System.currentTimeMillis() - this.lastFrequencyCheck > 10)
|
|
||||||
{
|
|
||||||
this.lastFrequencyCheck = System.currentTimeMillis();
|
|
||||||
this.frequency = 0;
|
|
||||||
|
|
||||||
for (int i = 4; i > 0; i--)
|
|
||||||
{
|
|
||||||
Vector3 position = new Vector3(xCoord, yCoord - i, this.zCoord);
|
|
||||||
|
|
||||||
Block block = Block.blocksList[this.worldObj.getBlockId((int) position.x, (int) position.y, (int) position.z)];
|
|
||||||
|
|
||||||
if (block instanceof BlockGlyph)
|
|
||||||
{
|
|
||||||
int metadata = this.worldObj.getBlockMetadata((int) position.x, (int) position.y, (int) position.z);
|
|
||||||
this.frequency += Math.pow(BlockGlyph.MAX_GLYPH, i - 2) * metadata;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return frequency;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readFromNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.readFromNBT(nbt);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeToNBT(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.writeToNBT(nbt);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long teslaTransfer(long transferEnergy, boolean doTransfer)
|
|
||||||
{
|
|
||||||
return energy.receiveEnergy(transferEnergy, doTransfer);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canTeslaTransfer(TileEntity transferTile)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -31,7 +31,7 @@ public class TraitQuantumGate extends TileMultipart implements IQuantumGate
|
||||||
|
|
||||||
for (TMultiPart part : jPartList())
|
for (TMultiPart part : jPartList())
|
||||||
{
|
{
|
||||||
if (part instanceof IBlockFrequency)
|
if (part instanceof IQuantumGate)
|
||||||
{
|
{
|
||||||
frequency += Math.pow(PartQuantumGlyph.MAX_GLYPH, i) * ((IBlockFrequency) part).getFrequency();
|
frequency += Math.pow(PartQuantumGlyph.MAX_GLYPH, i) * ((IBlockFrequency) part).getFrequency();
|
||||||
i++;
|
i++;
|
||||||
|
|
Loading…
Reference in a new issue