Removed Item Lev by calc's request, and fixed some issue with past few scala conversion commits
This commit is contained in:
parent
466efa3e36
commit
424b79f49d
14 changed files with 68 additions and 1237 deletions
|
@ -17,7 +17,6 @@ import resonantinduction.electrical.laser.focus.crystal.{RenderFocusCrystal, Til
|
||||||
import resonantinduction.electrical.laser.focus.mirror.{RenderMirror, TileMirror}
|
import resonantinduction.electrical.laser.focus.mirror.{RenderMirror, TileMirror}
|
||||||
import resonantinduction.electrical.laser.fx.{EntityBlockParticleFX, EntityLaserFX, EntityScorchFX}
|
import resonantinduction.electrical.laser.fx.{EntityBlockParticleFX, EntityLaserFX, EntityScorchFX}
|
||||||
import resonantinduction.electrical.laser.receiver.{RenderLaserReceiver, TileLaserReceiver}
|
import resonantinduction.electrical.laser.receiver.{RenderLaserReceiver, TileLaserReceiver}
|
||||||
import resonantinduction.electrical.levitator.RenderLevitator
|
|
||||||
import resonantinduction.electrical.multimeter.{RenderMultimeter, GuiMultimeter, PartMultimeter}
|
import resonantinduction.electrical.multimeter.{RenderMultimeter, GuiMultimeter, PartMultimeter}
|
||||||
import resonantinduction.electrical.render.FXElectricBolt
|
import resonantinduction.electrical.render.FXElectricBolt
|
||||||
import resonantinduction.electrical.tesla.{RenderTesla, TileTesla}
|
import resonantinduction.electrical.tesla.{RenderTesla, TileTesla}
|
||||||
|
@ -36,7 +35,6 @@ class ClientProxy extends CommonProxy
|
||||||
override def init
|
override def init
|
||||||
{
|
{
|
||||||
ItemRenderHandler.register(ElectricalContent.itemTransformer, RenderTransformer.INSTANCE)
|
ItemRenderHandler.register(ElectricalContent.itemTransformer, RenderTransformer.INSTANCE)
|
||||||
ItemRenderHandler.register(ElectricalContent.itemLevitator, RenderLevitator.INSTANCE)
|
|
||||||
ItemRenderHandler.register(ElectricalContent.itemMultimeter, RenderMultimeter.INSTANCE)
|
ItemRenderHandler.register(ElectricalContent.itemMultimeter, RenderMultimeter.INSTANCE)
|
||||||
ItemRenderHandler.register(ElectricalContent.itemQuantumGlyph, RenderQuantumGlyph)
|
ItemRenderHandler.register(ElectricalContent.itemQuantumGlyph, RenderQuantumGlyph)
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,6 @@ import resonantinduction.electrical.laser.focus.ItemFocusingMatrix
|
||||||
import resonantinduction.electrical.laser.focus.crystal.{BlockFocusCrystal, TileFocusCrystal}
|
import resonantinduction.electrical.laser.focus.crystal.{BlockFocusCrystal, TileFocusCrystal}
|
||||||
import resonantinduction.electrical.laser.focus.mirror.{BlockMirror, TileMirror}
|
import resonantinduction.electrical.laser.focus.mirror.{BlockMirror, TileMirror}
|
||||||
import resonantinduction.electrical.laser.receiver.{BlockLaserReceiver, TileLaserReceiver}
|
import resonantinduction.electrical.laser.receiver.{BlockLaserReceiver, TileLaserReceiver}
|
||||||
import resonantinduction.electrical.levitator.{ItemLevitator, PartLevitator}
|
|
||||||
import resonantinduction.electrical.multimeter.{ItemMultimeter, PartMultimeter}
|
import resonantinduction.electrical.multimeter.{ItemMultimeter, PartMultimeter}
|
||||||
import resonantinduction.electrical.tesla.TileTesla
|
import resonantinduction.electrical.tesla.TileTesla
|
||||||
import resonantinduction.electrical.transformer.{ItemElectricTransformer, PartElectricTransformer}
|
import resonantinduction.electrical.transformer.{ItemElectricTransformer, PartElectricTransformer}
|
||||||
|
@ -86,7 +85,6 @@ object Electrical
|
||||||
ElectricalContent.itemTransformer = Electrical.contentRegistry.newItem(classOf[ItemElectricTransformer])
|
ElectricalContent.itemTransformer = Electrical.contentRegistry.newItem(classOf[ItemElectricTransformer])
|
||||||
ElectricalContent.blockTesla = Electrical.contentRegistry.newBlock(classOf[TileTesla])
|
ElectricalContent.blockTesla = Electrical.contentRegistry.newBlock(classOf[TileTesla])
|
||||||
ElectricalContent.blockBattery = Electrical.contentRegistry.newBlock(classOf[TileBattery])
|
ElectricalContent.blockBattery = Electrical.contentRegistry.newBlock(classOf[TileBattery])
|
||||||
ElectricalContent.itemLevitator = Electrical.contentRegistry.newItem(classOf[ItemLevitator])
|
|
||||||
ElectricalContent.itemInsulation = Electrical.contentRegistry.newItem("insulation", classOf[Item])
|
ElectricalContent.itemInsulation = Electrical.contentRegistry.newItem("insulation", classOf[Item])
|
||||||
ElectricalContent.blockSolarPanel = Electrical.contentRegistry.newBlock(classOf[TileSolarPanel])
|
ElectricalContent.blockSolarPanel = Electrical.contentRegistry.newBlock(classOf[TileSolarPanel])
|
||||||
ElectricalContent.blockMotor = Electrical.contentRegistry.newBlock(classOf[TileMotor])
|
ElectricalContent.blockMotor = Electrical.contentRegistry.newBlock(classOf[TileMotor])
|
||||||
|
@ -106,7 +104,6 @@ object Electrical
|
||||||
ResonantPartFactory.register(classOf[PartFlatWire])
|
ResonantPartFactory.register(classOf[PartFlatWire])
|
||||||
ResonantPartFactory.register(classOf[PartMultimeter])
|
ResonantPartFactory.register(classOf[PartMultimeter])
|
||||||
ResonantPartFactory.register(classOf[PartElectricTransformer])
|
ResonantPartFactory.register(classOf[PartElectricTransformer])
|
||||||
ResonantPartFactory.register(classOf[PartLevitator])
|
|
||||||
ResonantPartFactory.register(classOf[PartQuantumGlyph])
|
ResonantPartFactory.register(classOf[PartQuantumGlyph])
|
||||||
|
|
||||||
Electrical.proxy.preInit
|
Electrical.proxy.preInit
|
||||||
|
|
|
@ -12,8 +12,8 @@ import scala.collection.JavaConversions._
|
||||||
*/
|
*/
|
||||||
class GridBattery extends Grid[TileBattery](classOf[NodeEnergy])
|
class GridBattery extends Grid[TileBattery](classOf[NodeEnergy])
|
||||||
{
|
{
|
||||||
var totalEnergy: Long = 0
|
var totalEnergy: Double = 0
|
||||||
var totalCapacity: Long = 0
|
var totalCapacity: Double = 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Causes the energy shared by all batteries to be distributed out to all linked batteries
|
* Causes the energy shared by all batteries to be distributed out to all linked batteries
|
||||||
|
@ -31,10 +31,10 @@ class GridBattery extends Grid[TileBattery](classOf[NodeEnergy])
|
||||||
totalCapacity += connector.energy.getEnergyCapacity
|
totalCapacity += connector.energy.getEnergyCapacity
|
||||||
lowestY = Math.min(connector.yCoord, lowestY)
|
lowestY = Math.min(connector.yCoord, lowestY)
|
||||||
highestY = Math.max(connector.yCoord, highestY)
|
highestY = Math.max(connector.yCoord, highestY)
|
||||||
connector.renderEnergyAmount_$eq(0)
|
connector.renderEnergyAmount = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
var remainingRenderEnergy: Long = totalEnergy
|
var remainingRenderEnergy: Double = totalEnergy
|
||||||
var y: Int = 0
|
var y: Int = 0
|
||||||
while (y >= 0 && y <= highestY && remainingRenderEnergy > 0)
|
while (y >= 0 && y <= highestY && remainingRenderEnergy > 0)
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,7 @@ class GridBattery extends Grid[TileBattery](classOf[NodeEnergy])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val levelSize: Int = connectorsInlevel.size
|
val levelSize: Int = connectorsInlevel.size
|
||||||
var used: Long = 0
|
var used: Double = 0
|
||||||
import scala.collection.JavaConversions._
|
import scala.collection.JavaConversions._
|
||||||
for (connector <- connectorsInlevel)
|
for (connector <- connectorsInlevel)
|
||||||
{
|
{
|
||||||
|
@ -61,20 +61,20 @@ class GridBattery extends Grid[TileBattery](classOf[NodeEnergy])
|
||||||
}
|
}
|
||||||
|
|
||||||
val percentageLoss: Double = 0
|
val percentageLoss: Double = 0
|
||||||
val energyLoss: Long = (percentageLoss * 100).asInstanceOf[Long]
|
val energyLoss: Double = percentageLoss * 100
|
||||||
totalEnergy -= energyLoss
|
totalEnergy -= energyLoss
|
||||||
val amountOfNodes: Int = this.getNodes.size - exclusion.length
|
val amountOfNodes: Int = this.getNodes.size - exclusion.length
|
||||||
if (totalEnergy > 0 && amountOfNodes > 0)
|
if (totalEnergy > 0 && amountOfNodes > 0)
|
||||||
{
|
{
|
||||||
var remainingEnergy: Long = totalEnergy
|
var remainingEnergy: Double = totalEnergy
|
||||||
val firstNode: TileBattery = this.getFirstNode
|
val firstNode: TileBattery = this.getFirstNode
|
||||||
|
|
||||||
for (node <- this.getNodes)
|
for (node <- this.getNodes)
|
||||||
{
|
{
|
||||||
if (node != firstNode && !Arrays.asList(exclusion).contains(node))
|
if (node != firstNode && !Arrays.asList(exclusion).contains(node))
|
||||||
{
|
{
|
||||||
val percentage: Double = (node.energy.getEnergyCapacity.asInstanceOf[Double] / totalCapacity.asInstanceOf[Double])
|
val percentage: Double = (node.energy.getEnergyCapacity / totalCapacity)
|
||||||
val energyForBattery: Long = Math.max(Math.round(totalEnergy * percentage), 0)
|
val energyForBattery: Double = Math.max(totalEnergy * percentage, 0)
|
||||||
node.energy.setEnergy(energyForBattery)
|
node.energy.setEnergy(energyForBattery)
|
||||||
remainingEnergy -= energyForBattery
|
remainingEnergy -= energyForBattery
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,20 +142,14 @@ class ItemBlockBattery(block: Block) extends ItemBlock(block) with IEnergyItem
|
||||||
return this.getEnergyCapacity(itemStack) / 100
|
return this.getEnergyCapacity(itemStack) / 100
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings(Array("unchecked")) override def getSubItems(par1: Item, par2CreativeTabs: CreativeTabs, par3List: List[_])
|
@SuppressWarnings(Array("unchecked"))
|
||||||
|
override def getSubItems(par1: Item, par2CreativeTabs: CreativeTabs, par3List: List[_])
|
||||||
{
|
{
|
||||||
|
for (tier <- 0 to TileBattery.MAX_TIER)
|
||||||
{
|
{
|
||||||
var tier: Byte = 0
|
par3List.add(Compatibility.getItemWithCharge(ItemBlockBattery.setTier(new ItemStack(this), tier.asInstanceOf[Byte]), 0))
|
||||||
while (tier <= TileBattery.MAX_TIER)
|
par3List.add(Compatibility.getItemWithCharge(ItemBlockBattery.setTier(new ItemStack(this), tier.asInstanceOf[Byte]), TileBattery.getEnergyForTier(tier)))
|
||||||
{
|
|
||||||
{
|
|
||||||
par3List.add(Compatibility.getItemWithCharge(ItemBlockBattery.setTier(new ItemStack(this), tier), 0))
|
|
||||||
par3List.add(Compatibility.getItemWithCharge(ItemBlockBattery.setTier(new ItemStack(this), tier), TileBattery.getEnergyForTier(tier)))
|
|
||||||
}
|
|
||||||
({
|
|
||||||
tier += 1; tier - 1
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -63,7 +63,7 @@ class TileBattery extends TileElectric(Material.iron) with IPacketReceiver {
|
||||||
|
|
||||||
override def getDescPacket: AbstractPacket =
|
override def getDescPacket: AbstractPacket =
|
||||||
{
|
{
|
||||||
return new PacketTile(this, renderEnergyAmount, ioMap)
|
return new PacketTile(this, Array[Any](renderEnergyAmount, ioMap))
|
||||||
}
|
}
|
||||||
|
|
||||||
def read(data: ByteBuf, player: EntityPlayer, `type`: PacketType) {
|
def read(data: ByteBuf, player: EntityPlayer, `type`: PacketType) {
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
package resonantinduction.electrical.generator;
|
|
||||||
|
|
||||||
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
|
||||||
import net.minecraftforge.client.IItemRenderer;
|
|
||||||
import net.minecraftforge.client.model.AdvancedModelLoader;
|
|
||||||
import net.minecraftforge.client.model.IModelCustom;
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
|
||||||
|
|
||||||
import resonant.content.prefab.scala.render.ISimpleItemRenderer;
|
|
||||||
import resonant.lib.render.RenderUtility;
|
|
||||||
import resonantinduction.core.Reference;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Calclavia
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class RenderMotor extends TileEntitySpecialRenderer implements ISimpleItemRenderer
|
|
||||||
{
|
|
||||||
public static final IModelCustom MODEL = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain(), Reference.modelPath() + "generator.tcn"));
|
|
||||||
public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.domain(), Reference.modelPath() + "generator.png");
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)
|
|
||||||
{
|
|
||||||
doRender(t.getBlockMetadata(), x, y, z, f);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void doRender(int facingDirection, double x, double y, double z, float f)
|
|
||||||
{
|
|
||||||
GL11.glPushMatrix();
|
|
||||||
GL11.glTranslatef((float) x + 0.5f, (float) y + 0.5f, (float) z + 0.5f);
|
|
||||||
GL11.glRotatef(90, 0, 1, 0);
|
|
||||||
RenderUtility.rotateBlockBasedOnDirection(ForgeDirection.getOrientation(facingDirection));
|
|
||||||
bindTexture(TEXTURE);
|
|
||||||
MODEL.renderAll();
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void renderInventoryItem(IItemRenderer.ItemRenderType type, ItemStack itemStack, Object... data)
|
|
||||||
{
|
|
||||||
doRender(2, 0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
package resonantinduction.electrical.generator
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
|
import net.minecraft.tileentity.TileEntity
|
||||||
|
import net.minecraft.util.ResourceLocation
|
||||||
|
import net.minecraftforge.client.IItemRenderer
|
||||||
|
import net.minecraftforge.client.model.AdvancedModelLoader
|
||||||
|
import net.minecraftforge.client.model.IModelCustom
|
||||||
|
import net.minecraftforge.common.util.ForgeDirection
|
||||||
|
import org.lwjgl.opengl.GL11
|
||||||
|
import resonant.content.prefab.scala.render.ISimpleItemRenderer
|
||||||
|
import resonant.lib.render.RenderUtility
|
||||||
|
import resonantinduction.core.Reference
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Calclavia
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
object RenderMotor
|
||||||
|
{
|
||||||
|
final val MODEL: IModelCustom = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain, Reference.modelPath + "generator.tcn"))
|
||||||
|
final val TEXTURE: ResourceLocation = new ResourceLocation(Reference.domain, Reference.modelPath + "generator.png")
|
||||||
|
}
|
||||||
|
|
||||||
|
class RenderMotor extends TileEntitySpecialRenderer with ISimpleItemRenderer
|
||||||
|
{
|
||||||
|
def renderTileEntityAt(t: TileEntity, x: Double, y: Double, z: Double, f: Float)
|
||||||
|
{
|
||||||
|
doRender(t.getBlockMetadata, x, y, z, f)
|
||||||
|
}
|
||||||
|
|
||||||
|
private def doRender(facingDirection: Int, x: Double, y: Double, z: Double, f: Float)
|
||||||
|
{
|
||||||
|
GL11.glPushMatrix
|
||||||
|
GL11.glTranslatef(x.asInstanceOf[Float] + 0.5f, y.asInstanceOf[Float] + 0.5f, z.asInstanceOf[Float] + 0.5f)
|
||||||
|
GL11.glRotatef(90, 0, 1, 0)
|
||||||
|
RenderUtility.rotateBlockBasedOnDirection(ForgeDirection.getOrientation(facingDirection))
|
||||||
|
bindTexture(RenderMotor.TEXTURE)
|
||||||
|
RenderMotor.MODEL.renderAll
|
||||||
|
GL11.glPopMatrix
|
||||||
|
}
|
||||||
|
|
||||||
|
def renderInventoryItem(`type`: IItemRenderer.ItemRenderType, itemStack: ItemStack, data: AnyRef*)
|
||||||
|
{
|
||||||
|
doRender(2, 0, 0, 0, 0)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,18 +1,15 @@
|
||||||
package resonantinduction.electrical.generator
|
package resonantinduction.electrical.generator
|
||||||
|
|
||||||
import net.minecraft.block.material.Material
|
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
||||||
import net.minecraft.client.renderer.texture.IIconRegister
|
import net.minecraft.client.renderer.texture.IIconRegister
|
||||||
import net.minecraft.util.IIcon
|
import net.minecraft.util.IIcon
|
||||||
import net.minecraftforge.common.util.ForgeDirection
|
import net.minecraftforge.common.util.ForgeDirection
|
||||||
import resonant.content.spatial.block.SpatialBlock
|
import resonant.content.spatial.block.SpatialBlock
|
||||||
import resonantinduction.core.Reference
|
import resonantinduction.core.{Reference, Settings}
|
||||||
import resonantinduction.core.Settings
|
import resonantinduction.electrical.battery.TileBattery
|
||||||
import resonantinduction.electrical.battery.TileEnergyDistribution
|
|
||||||
import cpw.mods.fml.relauncher.Side
|
|
||||||
import cpw.mods.fml.relauncher.SideOnly
|
|
||||||
import universalelectricity.core.transform.region.Cuboid
|
import universalelectricity.core.transform.region.Cuboid
|
||||||
|
|
||||||
class TileSolarPanel extends TileEnergyDistribution(Material.iron) {
|
class TileSolarPanel extends TileBattery {
|
||||||
|
|
||||||
energy.setCapacity(Settings.SOLAR_ENERGY * 20)
|
energy.setCapacity(Settings.SOLAR_ENERGY * 20)
|
||||||
ioMap_$eq(728.asInstanceOf[Short])
|
ioMap_$eq(728.asInstanceOf[Short])
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
package resonantinduction.electrical.levitator
|
|
||||||
|
|
||||||
import codechicken.lib.vec.{BlockCoord, Vector3}
|
|
||||||
import codechicken.microblock.FacePlacementGrid
|
|
||||||
import codechicken.multipart.{TItemMultiPart, TMultiPart}
|
|
||||||
import net.minecraft.entity.player.EntityPlayer
|
|
||||||
import net.minecraft.item.{Item, ItemStack}
|
|
||||||
import net.minecraft.util.MathHelper
|
|
||||||
import net.minecraft.world.World
|
|
||||||
import resonantinduction.core.ResonantPartFactory
|
|
||||||
import resonantinduction.core.prefab.part.IHighlight
|
|
||||||
|
|
||||||
class ItemLevitator extends Item with TItemMultiPart with IHighlight
|
|
||||||
{
|
|
||||||
def newPart(itemStack: ItemStack, player: EntityPlayer, world: World, pos: BlockCoord, bside: Int, hit: Vector3): TMultiPart =
|
|
||||||
{
|
|
||||||
val side = FacePlacementGrid.getHitSlot(hit, bside)
|
|
||||||
val part: PartLevitator = ResonantPartFactory.create(classOf[PartLevitator])
|
|
||||||
if (part != null)
|
|
||||||
{
|
|
||||||
val l: Int = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3
|
|
||||||
val facing: Int = if (l == 0) 2 else (if (l == 1) 5 else (if (l == 2) 3 else (if (l == 3) 4 else 0)))
|
|
||||||
part.preparePlacement(side, facing)
|
|
||||||
}
|
|
||||||
return part
|
|
||||||
}
|
|
||||||
|
|
||||||
def getHighlightType: Int = 0
|
|
||||||
}
|
|
|
@ -1,246 +0,0 @@
|
||||||
package resonantinduction.electrical.levitator;
|
|
||||||
|
|
||||||
import net.minecraft.client.model.ModelBase;
|
|
||||||
import net.minecraft.client.model.ModelRenderer;
|
|
||||||
|
|
||||||
public class ModelEMContractor extends ModelBase
|
|
||||||
{
|
|
||||||
public boolean doSpin;
|
|
||||||
|
|
||||||
// fields
|
|
||||||
ModelRenderer frame1;
|
|
||||||
ModelRenderer frame2;
|
|
||||||
ModelRenderer frame3;
|
|
||||||
ModelRenderer frame4;
|
|
||||||
ModelRenderer frame5;
|
|
||||||
ModelRenderer frame6;
|
|
||||||
ModelRenderer frame7;
|
|
||||||
ModelRenderer frame8;
|
|
||||||
ModelRenderer left_frame_connector;
|
|
||||||
ModelRenderer right_frame_connector;
|
|
||||||
ModelRenderer teslapole;
|
|
||||||
ModelRenderer Coil1;
|
|
||||||
ModelRenderer coil2;
|
|
||||||
ModelRenderer coil3;
|
|
||||||
ModelRenderer coil4;
|
|
||||||
ModelRenderer pole1;
|
|
||||||
ModelRenderer pole2;
|
|
||||||
ModelRenderer pole3;
|
|
||||||
ModelRenderer pole4;
|
|
||||||
ModelRenderer poletop1;
|
|
||||||
ModelRenderer poletop2;
|
|
||||||
ModelRenderer poletop3;
|
|
||||||
ModelRenderer poletop4;
|
|
||||||
ModelRenderer base1;
|
|
||||||
ModelRenderer base2;
|
|
||||||
ModelRenderer base3;
|
|
||||||
|
|
||||||
public ModelEMContractor(boolean spin)
|
|
||||||
{
|
|
||||||
doSpin = spin;
|
|
||||||
textureWidth = 128;
|
|
||||||
textureHeight = 128;
|
|
||||||
|
|
||||||
frame1 = new ModelRenderer(this, 0, 24);
|
|
||||||
frame1.addBox(0F, 0F, 0F, 1, 8, 1);
|
|
||||||
frame1.setRotationPoint(-3F, 15F, -2F);
|
|
||||||
frame1.setTextureSize(128, 128);
|
|
||||||
frame1.mirror = true;
|
|
||||||
setRotation(frame1, 0F, 0F, 0F);
|
|
||||||
frame2 = new ModelRenderer(this, 0, 24);
|
|
||||||
frame2.addBox(0F, 0F, 0F, 1, 8, 1);
|
|
||||||
frame2.setRotationPoint(1F, 15F, 2F);
|
|
||||||
frame2.setTextureSize(128, 128);
|
|
||||||
frame2.mirror = true;
|
|
||||||
setRotation(frame2, 0F, 0F, 0F);
|
|
||||||
frame3 = new ModelRenderer(this, 0, 24);
|
|
||||||
frame3.addBox(0F, 0F, 0F, 1, 8, 1);
|
|
||||||
frame3.setRotationPoint(2F, 15F, -2F);
|
|
||||||
frame3.setTextureSize(128, 128);
|
|
||||||
frame3.mirror = true;
|
|
||||||
setRotation(frame3, 0F, 0F, 0F);
|
|
||||||
frame4 = new ModelRenderer(this, 0, 24);
|
|
||||||
frame4.addBox(0F, 0F, 0F, 1, 8, 1);
|
|
||||||
frame4.setRotationPoint(-3F, 15F, 1F);
|
|
||||||
frame4.setTextureSize(128, 128);
|
|
||||||
frame4.mirror = true;
|
|
||||||
setRotation(frame4, 0F, 0F, 0F);
|
|
||||||
frame5 = new ModelRenderer(this, 0, 24);
|
|
||||||
frame5.addBox(0F, 0F, 0F, 1, 8, 1);
|
|
||||||
frame5.setRotationPoint(2F, 15F, 1F);
|
|
||||||
frame5.setTextureSize(128, 128);
|
|
||||||
frame5.mirror = true;
|
|
||||||
setRotation(frame5, 0F, 0F, 0F);
|
|
||||||
frame6 = new ModelRenderer(this, 0, 24);
|
|
||||||
frame6.addBox(0F, 0F, 0F, 1, 8, 1);
|
|
||||||
frame6.setRotationPoint(1F, 15F, -3F);
|
|
||||||
frame6.setTextureSize(128, 128);
|
|
||||||
frame6.mirror = true;
|
|
||||||
setRotation(frame6, 0F, 0F, 0F);
|
|
||||||
frame7 = new ModelRenderer(this, 0, 24);
|
|
||||||
frame7.addBox(0F, 0F, 0F, 1, 8, 1);
|
|
||||||
frame7.setRotationPoint(-2F, 15F, 2F);
|
|
||||||
frame7.setTextureSize(128, 128);
|
|
||||||
frame7.mirror = true;
|
|
||||||
setRotation(frame7, 0F, 0F, 0F);
|
|
||||||
frame8 = new ModelRenderer(this, 0, 24);
|
|
||||||
frame8.addBox(0F, 0F, 0F, 1, 8, 1);
|
|
||||||
frame8.setRotationPoint(-2F, 15F, -3F);
|
|
||||||
frame8.setTextureSize(128, 128);
|
|
||||||
frame8.mirror = true;
|
|
||||||
setRotation(frame8, 0F, 0F, 0F);
|
|
||||||
left_frame_connector = new ModelRenderer(this, 0, 20);
|
|
||||||
left_frame_connector.addBox(0F, 0F, 0F, 1, 1, 2);
|
|
||||||
left_frame_connector.setRotationPoint(-3F, 15F, -1F);
|
|
||||||
left_frame_connector.setTextureSize(128, 128);
|
|
||||||
left_frame_connector.mirror = true;
|
|
||||||
setRotation(left_frame_connector, 0F, 0F, 0F);
|
|
||||||
right_frame_connector = new ModelRenderer(this, 0, 20);
|
|
||||||
right_frame_connector.addBox(0F, 0F, 0F, 1, 1, 2);
|
|
||||||
right_frame_connector.setRotationPoint(2F, 15F, -1F);
|
|
||||||
right_frame_connector.setTextureSize(128, 128);
|
|
||||||
right_frame_connector.mirror = true;
|
|
||||||
setRotation(right_frame_connector, 0F, 0F, 0F);
|
|
||||||
teslapole = new ModelRenderer(this, 0, 0);
|
|
||||||
teslapole.addBox(-1F, -1F, -1F, 2, 15, 2);
|
|
||||||
teslapole.setRotationPoint(0F, 9F, 0F);
|
|
||||||
teslapole.setTextureSize(128, 128);
|
|
||||||
teslapole.mirror = true;
|
|
||||||
setRotation(teslapole, 0F, 0F, 0F);
|
|
||||||
Coil1 = new ModelRenderer(this, 17, 0);
|
|
||||||
Coil1.addBox(-1.5F, -0.5F, -1.5F, 3, 1, 3);
|
|
||||||
Coil1.setRotationPoint(0F, 12.5F, 0F);
|
|
||||||
Coil1.setTextureSize(128, 128);
|
|
||||||
Coil1.mirror = true;
|
|
||||||
setRotation(Coil1, 0F, 0F, 0F);
|
|
||||||
coil2 = new ModelRenderer(this, 17, 0);
|
|
||||||
coil2.addBox(-1.5F, -0.5F, -1.5F, 3, 1, 3);
|
|
||||||
coil2.setRotationPoint(0F, 14F, 0F);
|
|
||||||
coil2.setTextureSize(128, 128);
|
|
||||||
coil2.mirror = true;
|
|
||||||
setRotation(coil2, 0F, 0F, 0F);
|
|
||||||
coil3 = new ModelRenderer(this, 17, 0);
|
|
||||||
coil3.addBox(-1.5F, -0.5F, -1.5F, 3, 1, 3);
|
|
||||||
coil3.setRotationPoint(0F, 9.5F, 0F);
|
|
||||||
coil3.setTextureSize(128, 128);
|
|
||||||
coil3.mirror = true;
|
|
||||||
setRotation(coil3, 0F, 0F, 0F);
|
|
||||||
coil4 = new ModelRenderer(this, 17, 0);
|
|
||||||
coil4.addBox(-1.5F, -0.5F, -1.5F, 3, 1, 3);
|
|
||||||
coil4.setRotationPoint(0F, 11F, 0F);
|
|
||||||
coil4.setTextureSize(128, 128);
|
|
||||||
coil4.mirror = true;
|
|
||||||
setRotation(coil4, 0F, 0F, 0F);
|
|
||||||
pole1 = new ModelRenderer(this, 5, 26);
|
|
||||||
pole1.addBox(-0.5F, -1F, -0.5F, 1, 6, 1);
|
|
||||||
pole1.setRotationPoint(0F, 18F, 6.5F);
|
|
||||||
pole1.setTextureSize(128, 128);
|
|
||||||
pole1.mirror = true;
|
|
||||||
setRotation(pole1, 0F, 0F, 0F);
|
|
||||||
pole2 = new ModelRenderer(this, 5, 26);
|
|
||||||
pole2.addBox(-0.5F, -1F, -0.5F, 1, 6, 1);
|
|
||||||
pole2.setRotationPoint(0F, 18F, -6.5F);
|
|
||||||
pole2.setTextureSize(128, 128);
|
|
||||||
pole2.mirror = true;
|
|
||||||
setRotation(pole2, 0F, 0F, 0F);
|
|
||||||
pole3 = new ModelRenderer(this, 5, 26);
|
|
||||||
pole3.addBox(-0.5F, -1F, -0.5F, 1, 6, 1);
|
|
||||||
pole3.setRotationPoint(-6.5F, 18F, 0F);
|
|
||||||
pole3.setTextureSize(128, 128);
|
|
||||||
pole3.mirror = true;
|
|
||||||
setRotation(pole3, 0F, 0F, 0F);
|
|
||||||
pole4 = new ModelRenderer(this, 5, 26);
|
|
||||||
pole4.addBox(-0.5F, -1F, -0.5F, 1, 6, 1);
|
|
||||||
pole4.setRotationPoint(6.5F, 18F, 0F);
|
|
||||||
pole4.setTextureSize(128, 128);
|
|
||||||
pole4.mirror = true;
|
|
||||||
setRotation(pole4, 0F, 0F, 0F);
|
|
||||||
poletop1 = new ModelRenderer(this, 31, 0);
|
|
||||||
poletop1.addBox(-1F, -1F, -1F, 2, 2, 2);
|
|
||||||
poletop1.setRotationPoint(0F, 16.5F, -6.5F);
|
|
||||||
poletop1.setTextureSize(128, 128);
|
|
||||||
poletop1.mirror = true;
|
|
||||||
setRotation(poletop1, 0F, 0F, 0F);
|
|
||||||
poletop2 = new ModelRenderer(this, 31, 0);
|
|
||||||
poletop2.addBox(-1F, -1F, -1F, 2, 2, 2);
|
|
||||||
poletop2.setRotationPoint(0F, 16.5F, 6.5F);
|
|
||||||
poletop2.setTextureSize(128, 128);
|
|
||||||
poletop2.mirror = true;
|
|
||||||
setRotation(poletop2, 0F, 0F, 0F);
|
|
||||||
poletop3 = new ModelRenderer(this, 31, 0);
|
|
||||||
poletop3.addBox(-1F, -1F, -1F, 2, 2, 2);
|
|
||||||
poletop3.setRotationPoint(6.5F, 16.5F, 0F);
|
|
||||||
poletop3.setTextureSize(128, 128);
|
|
||||||
poletop3.mirror = true;
|
|
||||||
setRotation(poletop3, 0F, 0F, 0F);
|
|
||||||
poletop4 = new ModelRenderer(this, 31, 0);
|
|
||||||
poletop4.addBox(-1F, -1F, -1F, 2, 2, 2);
|
|
||||||
poletop4.setRotationPoint(-6.5F, 16.5F, 0F);
|
|
||||||
poletop4.setTextureSize(128, 128);
|
|
||||||
poletop4.mirror = true;
|
|
||||||
setRotation(poletop4, 0F, 0F, 0F);
|
|
||||||
base1 = new ModelRenderer(this, 0, 55);
|
|
||||||
base1.addBox(0F, 0F, 0F, 16, 1, 8);
|
|
||||||
base1.setRotationPoint(-8F, 23F, -4F);
|
|
||||||
base1.setTextureSize(128, 128);
|
|
||||||
base1.mirror = true;
|
|
||||||
setRotation(base1, 0F, 0F, 0F);
|
|
||||||
base2 = new ModelRenderer(this, 0, 68);
|
|
||||||
base2.addBox(0F, 0F, 0F, 8, 1, 5);
|
|
||||||
base2.setRotationPoint(-4F, 23F, 3F);
|
|
||||||
base2.setTextureSize(128, 128);
|
|
||||||
base2.mirror = true;
|
|
||||||
setRotation(base2, 0F, 0F, 0F);
|
|
||||||
base3 = new ModelRenderer(this, 0, 79);
|
|
||||||
base3.addBox(0F, 0F, 0F, 8, 1, 5);
|
|
||||||
base3.setRotationPoint(-4F, 23F, -8F);
|
|
||||||
base3.setTextureSize(128, 128);
|
|
||||||
base3.mirror = true;
|
|
||||||
setRotation(base3, 0F, 0F, 0F);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void render(float f5)
|
|
||||||
{
|
|
||||||
if (doSpin)
|
|
||||||
{
|
|
||||||
Coil1.rotateAngleY = (float) Math.toRadians(Math.toDegrees(Coil1.rotateAngleY) + 3 < 360 ? Math.toDegrees(Coil1.rotateAngleY) + 3 : 0);
|
|
||||||
coil2.rotateAngleY = (float) Math.toRadians(Math.toDegrees(coil2.rotateAngleY) + 3 < 360 ? Math.toDegrees(coil2.rotateAngleY) + 3 : 0);
|
|
||||||
coil3.rotateAngleY = (float) Math.toRadians(Math.toDegrees(coil3.rotateAngleY) + 3 < 360 ? Math.toDegrees(coil3.rotateAngleY) + 3 : 0);
|
|
||||||
coil4.rotateAngleY = (float) Math.toRadians(Math.toDegrees(coil4.rotateAngleY) + 3 < 360 ? Math.toDegrees(coil4.rotateAngleY) + 3 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
frame1.render(f5);
|
|
||||||
frame2.render(f5);
|
|
||||||
frame3.render(f5);
|
|
||||||
frame4.render(f5);
|
|
||||||
frame5.render(f5);
|
|
||||||
frame6.render(f5);
|
|
||||||
frame7.render(f5);
|
|
||||||
frame8.render(f5);
|
|
||||||
left_frame_connector.render(f5);
|
|
||||||
right_frame_connector.render(f5);
|
|
||||||
teslapole.render(f5);
|
|
||||||
Coil1.render(f5);
|
|
||||||
coil2.render(f5);
|
|
||||||
coil3.render(f5);
|
|
||||||
coil4.render(f5);
|
|
||||||
pole1.render(f5);
|
|
||||||
pole2.render(f5);
|
|
||||||
pole3.render(f5);
|
|
||||||
pole4.render(f5);
|
|
||||||
poletop1.render(f5);
|
|
||||||
poletop2.render(f5);
|
|
||||||
poletop3.render(f5);
|
|
||||||
poletop4.render(f5);
|
|
||||||
base1.render(f5);
|
|
||||||
base2.render(f5);
|
|
||||||
base3.render(f5);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setRotation(ModelRenderer model, float x, float y, float z)
|
|
||||||
{
|
|
||||||
model.rotateAngleX = x;
|
|
||||||
model.rotateAngleY = y;
|
|
||||||
model.rotateAngleZ = z;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,690 +0,0 @@
|
||||||
package resonantinduction.electrical.levitator;
|
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.block.BlockLadder;
|
|
||||||
import net.minecraft.block.BlockSnow;
|
|
||||||
import net.minecraft.block.BlockVine;
|
|
||||||
import net.minecraft.entity.Entity;
|
|
||||||
import net.minecraft.entity.item.EntityItem;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
import net.minecraft.init.Blocks;
|
|
||||||
import net.minecraft.init.Items;
|
|
||||||
import net.minecraft.inventory.IInventory;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.ChatComponentText;
|
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
|
||||||
import net.minecraftforge.fluids.IFluidBlock;
|
|
||||||
import resonant.lib.render.EnumColor;
|
|
||||||
import resonant.lib.utility.LinkUtility;
|
|
||||||
import resonant.lib.utility.WrenchUtility;
|
|
||||||
import resonant.lib.utility.inventory.InventoryUtility;
|
|
||||||
import resonantinduction.core.Settings;
|
|
||||||
import resonantinduction.core.prefab.part.PartFace;
|
|
||||||
import resonantinduction.core.util.MultipartUtil;
|
|
||||||
import resonantinduction.electrical.Electrical;
|
|
||||||
import resonantinduction.electrical.ElectricalContent;
|
|
||||||
import resonantinduction.electrical.tesla.TileTesla;
|
|
||||||
import universalelectricity.core.transform.vector.Vector3;
|
|
||||||
import codechicken.lib.data.MCDataInput;
|
|
||||||
import codechicken.lib.data.MCDataOutput;
|
|
||||||
import codechicken.multipart.TMultiPart;
|
|
||||||
import cpw.mods.fml.relauncher.Side;
|
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
|
||||||
import universalelectricity.core.transform.vector.VectorWorld;
|
|
||||||
|
|
||||||
public class PartLevitator extends PartFace
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* true = suck, false = push
|
|
||||||
*/
|
|
||||||
public boolean input = true;
|
|
||||||
/**
|
|
||||||
* Client Side Only
|
|
||||||
*/
|
|
||||||
public float renderRotation = 0;
|
|
||||||
private int pushDelay;
|
|
||||||
private AxisAlignedBB operationBounds;
|
|
||||||
private AxisAlignedBB suckBounds;
|
|
||||||
/**
|
|
||||||
* Pathfinding
|
|
||||||
*/
|
|
||||||
private ThreadLevitatorPathfinding thread;
|
|
||||||
private PathfinderLevitator pathfinder;
|
|
||||||
private WeakReference<PartLevitator> linked;
|
|
||||||
private int lastCalcTime = 0;
|
|
||||||
/**
|
|
||||||
* Color of beam
|
|
||||||
*/
|
|
||||||
private int dyeID = TileTesla.DEFAULT_COLOR;
|
|
||||||
/**
|
|
||||||
* Linking
|
|
||||||
*/
|
|
||||||
private byte saveLinkSide;
|
|
||||||
private VectorWorld saveLinkVector;
|
|
||||||
|
|
||||||
public static boolean canBePath(World world, Vector3 position)
|
|
||||||
{
|
|
||||||
Block block = position.getBlock(world);
|
|
||||||
return block == null || (block instanceof BlockSnow || block instanceof BlockVine || block instanceof BlockLadder || (block instanceof IFluidBlock && block != Blocks.flowing_lava && block != Blocks.lava));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack itemStack)
|
|
||||||
{
|
|
||||||
if (WrenchUtility.isWrench(itemStack))
|
|
||||||
{
|
|
||||||
if (tryLink(LinkUtility.getLink(itemStack), LinkUtility.getSide(itemStack)))
|
|
||||||
{
|
|
||||||
if (world().isRemote)
|
|
||||||
{
|
|
||||||
player.addChatMessage(new ChatComponentText("Successfully linked devices."));
|
|
||||||
}
|
|
||||||
LinkUtility.clearLink(itemStack);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (world().isRemote)
|
|
||||||
{
|
|
||||||
player.addChatMessage(new ChatComponentText("Marked link for device."));
|
|
||||||
}
|
|
||||||
|
|
||||||
LinkUtility.setLink(itemStack, new VectorWorld(world(), x(), y(), z()));
|
|
||||||
LinkUtility.setSide(itemStack, (byte) placementSide.ordinal());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.getCurrentEquippedItem() != null)
|
|
||||||
{
|
|
||||||
if (player.getCurrentEquippedItem().getItem() == Items.dye)
|
|
||||||
{
|
|
||||||
setDye(player.getCurrentEquippedItem().getItemDamage());
|
|
||||||
|
|
||||||
if (!player.capabilities.isCreativeMode)
|
|
||||||
{
|
|
||||||
player.inventory.decrStackSize(player.inventory.currentItem, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player.isSneaking())
|
|
||||||
{
|
|
||||||
input = !input;
|
|
||||||
}
|
|
||||||
|
|
||||||
updateBounds();
|
|
||||||
updatePath();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Link methods
|
|
||||||
*/
|
|
||||||
public boolean tryLink(VectorWorld linkVector, byte side)
|
|
||||||
{
|
|
||||||
if (linkVector != null)
|
|
||||||
{
|
|
||||||
TMultiPart part = MultipartUtil.getMultipart(world(), linkVector, side);
|
|
||||||
|
|
||||||
if (part instanceof PartLevitator)
|
|
||||||
{
|
|
||||||
setLink((PartLevitator) part, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PartLevitator getLink()
|
|
||||||
{
|
|
||||||
return linked != null && linked.get() != null && linked.get().world() != null ? linked.get() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onEntityCollision(Entity entity)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Attempt to pull items in.
|
|
||||||
*/
|
|
||||||
if (!world().isRemote && input && canFunction() && entity instanceof EntityItem)
|
|
||||||
{
|
|
||||||
EntityItem entityItem = (EntityItem) entity;
|
|
||||||
IInventory inventory = (IInventory) getLatched();
|
|
||||||
|
|
||||||
ItemStack remains = InventoryUtility.putStackInInventory(inventory, entityItem.getEntityItem(), placementSide.getOpposite().getOpposite().ordinal(), false);
|
|
||||||
|
|
||||||
if (remains == null)
|
|
||||||
{
|
|
||||||
entityItem.setDead();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entityItem.getEntityItem().stackSize = remains.stackSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Add redstone pulse and reaction?
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update()
|
|
||||||
{
|
|
||||||
if (ticks % 60 == 0)
|
|
||||||
{
|
|
||||||
updateBounds();
|
|
||||||
}
|
|
||||||
|
|
||||||
super.update();
|
|
||||||
|
|
||||||
pushDelay = Math.max(0, pushDelay - 1);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Try to use temp link vectors from save/loads to link.
|
|
||||||
*/
|
|
||||||
if (saveLinkVector != null)
|
|
||||||
{
|
|
||||||
tryLink(saveLinkVector, saveLinkSide);
|
|
||||||
saveLinkVector = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canFunction())
|
|
||||||
{
|
|
||||||
IInventory inventory = (IInventory) getLatched();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Place items or take items from the inventory into the world.
|
|
||||||
*/
|
|
||||||
if (!input)
|
|
||||||
{
|
|
||||||
renderRotation = Math.min(20, renderRotation + 0.8f);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempt to push items out.
|
|
||||||
*/
|
|
||||||
if (pushDelay == 0)
|
|
||||||
{
|
|
||||||
ItemStack retrieved = InventoryUtility.takeTopItemFromInventory(inventory, placementSide.getOpposite().getOpposite().ordinal());
|
|
||||||
|
|
||||||
if (retrieved != null)
|
|
||||||
{
|
|
||||||
EntityItem entityItem = getItemWithPosition(retrieved);
|
|
||||||
|
|
||||||
if (!world().isRemote)
|
|
||||||
{
|
|
||||||
world().spawnEntityInWorld(entityItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
pushDelay = Settings.LEVITATOR_PUSH_DELAY();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (input)
|
|
||||||
{
|
|
||||||
renderRotation = Math.max(0, renderRotation - 0.8f);
|
|
||||||
}
|
|
||||||
|
|
||||||
final int renderPeriod = 1;
|
|
||||||
final boolean renderBeam = ticks % renderPeriod == 0 && hasLink() && getLink().input != input;
|
|
||||||
|
|
||||||
if (!input)
|
|
||||||
{
|
|
||||||
if (hasLink())
|
|
||||||
{
|
|
||||||
if (getLink().input)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Linked usage.
|
|
||||||
*/
|
|
||||||
if (thread != null)
|
|
||||||
{
|
|
||||||
PathfinderLevitator newPath = thread.getPath();
|
|
||||||
|
|
||||||
if (newPath != null)
|
|
||||||
{
|
|
||||||
pathfinder = newPath;
|
|
||||||
pathfinder.results.add(getPosition());
|
|
||||||
thread = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Push entity along path.
|
|
||||||
if (pathfinder != null)
|
|
||||||
{
|
|
||||||
List<Vector3> results = pathfinder.results;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Draw default beams.
|
|
||||||
*/
|
|
||||||
if (renderBeam)
|
|
||||||
{
|
|
||||||
Electrical.proxy().renderElectricShock(world(), getBeamSpawnPosition(), getPosition().add(0.5), EnumColor.DYES[dyeID].toColor(), world().rand.nextFloat() > 0.9);
|
|
||||||
Electrical.proxy().renderElectricShock(world(), getLink().getPosition().add(0.5), getLink().getBeamSpawnPosition(), EnumColor.DYES[dyeID].toColor(), world().rand.nextFloat() > 0.9);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < results.size(); i++)
|
|
||||||
{
|
|
||||||
Vector3 result = results.get(i).clone();
|
|
||||||
|
|
||||||
if (canBeMovePath(world(), result))
|
|
||||||
{
|
|
||||||
if (i - 1 >= 0)
|
|
||||||
{
|
|
||||||
Vector3 prevResult = results.get(i - 1).clone();
|
|
||||||
|
|
||||||
Vector3 difference = prevResult.clone().subtract(result);
|
|
||||||
final ForgeDirection direction = difference.toForgeDirection();
|
|
||||||
|
|
||||||
if (renderBeam)
|
|
||||||
{
|
|
||||||
Electrical.proxy().renderElectricShock(world(), prevResult.clone().add(0.5), result.clone().add(0.5), EnumColor.DYES[dyeID].toColor(), world().rand.nextFloat() > 0.9);
|
|
||||||
}
|
|
||||||
|
|
||||||
AxisAlignedBB bounds = AxisAlignedBB.getBoundingBox(result.x(), result.y(), result.z(), result.x() + 1, result.y() + 1, result.z() + 1);
|
|
||||||
List<EntityItem> entities = world().getEntitiesWithinAABB(EntityItem.class, bounds);
|
|
||||||
|
|
||||||
for (EntityItem entityItem : entities)
|
|
||||||
{
|
|
||||||
moveEntity(entityItem, direction, result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
updatePath();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
updatePath();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (operationBounds != null)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Non-linked usage.
|
|
||||||
*/
|
|
||||||
for (EntityItem entityItem : (List<EntityItem>) world().getEntitiesWithinAABB(EntityItem.class, operationBounds))
|
|
||||||
{
|
|
||||||
moveEntity(entityItem, placementSide.getOpposite(), getPosition());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ticks % renderPeriod == 0)
|
|
||||||
{
|
|
||||||
Electrical.proxy().renderElectricShock(world(), getBeamSpawnPosition(), new Vector3(operationBounds.maxX - 0.5 - placementSide.offsetX / 3f, operationBounds.maxY - 0.5 - placementSide.offsetY / 3f, operationBounds.maxZ - 0.5 - placementSide.offsetZ / 3f), EnumColor.DYES[dyeID].toColor(), world().rand.nextFloat() > 0.9);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lastCalcTime--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean canBeMovePath(World world, Vector3 position)
|
|
||||||
{
|
|
||||||
TMultiPart partSelf = MultipartUtil.getMultipart(new VectorWorld(world, position), placementSide.ordinal());
|
|
||||||
if (partSelf == this)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
TMultiPart partLink = MultipartUtil.getMultipart(new VectorWorld(world, position), getLink().placementSide.ordinal());
|
|
||||||
if (partLink == getLink())
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return canBePath(world, position);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean hasLink()
|
|
||||||
{
|
|
||||||
return getLink() != null && getLink().getLink() == this;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void moveEntity(EntityItem entityItem, ForgeDirection direction, Vector3 lockVector)
|
|
||||||
{
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
case DOWN:
|
|
||||||
entityItem.setPosition(lockVector.x() + 0.5, entityItem.posY, lockVector.z() + 0.5);
|
|
||||||
|
|
||||||
entityItem.motionX = 0;
|
|
||||||
entityItem.motionZ = 0;
|
|
||||||
|
|
||||||
if (!input)
|
|
||||||
{
|
|
||||||
entityItem.motionY = Math.max(-Settings.LEVITATOR_MAX_SPEED(), entityItem.motionY - Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entityItem.motionY = Math.min(Settings.LEVITATOR_MAX_SPEED(), entityItem.motionY + .04 + Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case UP:
|
|
||||||
|
|
||||||
entityItem.setPosition(lockVector.x() + 0.5, entityItem.posY, lockVector.z() + 0.5);
|
|
||||||
|
|
||||||
entityItem.motionX = 0;
|
|
||||||
entityItem.motionZ = 0;
|
|
||||||
|
|
||||||
if (!input)
|
|
||||||
{
|
|
||||||
entityItem.motionY = Math.min(Settings.LEVITATOR_MAX_SPEED(), entityItem.motionY + .04 + Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entityItem.motionY = Math.max(-Settings.LEVITATOR_MAX_SPEED(), entityItem.motionY - Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case NORTH:
|
|
||||||
|
|
||||||
entityItem.setPosition(lockVector.x() + 0.5, lockVector.y() + 0.5, entityItem.posZ);
|
|
||||||
|
|
||||||
entityItem.motionX = 0;
|
|
||||||
entityItem.motionY = 0;
|
|
||||||
|
|
||||||
if (!input)
|
|
||||||
{
|
|
||||||
entityItem.motionZ = Math.max(-Settings.LEVITATOR_MAX_SPEED(), entityItem.motionZ - Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entityItem.motionZ = Math.min(Settings.LEVITATOR_MAX_SPEED(), entityItem.motionZ + Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case SOUTH:
|
|
||||||
|
|
||||||
entityItem.setPosition(lockVector.x() + 0.5, lockVector.y() + 0.5, entityItem.posZ);
|
|
||||||
|
|
||||||
entityItem.motionX = 0;
|
|
||||||
entityItem.motionY = 0;
|
|
||||||
|
|
||||||
if (!input)
|
|
||||||
{
|
|
||||||
entityItem.motionZ = Math.min(Settings.LEVITATOR_MAX_SPEED(), entityItem.motionZ + Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entityItem.motionZ = Math.max(-Settings.LEVITATOR_MAX_SPEED(), entityItem.motionZ - Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case WEST:
|
|
||||||
|
|
||||||
entityItem.setPosition(entityItem.posX, lockVector.y() + 0.5, lockVector.z() + 0.5);
|
|
||||||
|
|
||||||
entityItem.motionY = 0;
|
|
||||||
entityItem.motionZ = 0;
|
|
||||||
|
|
||||||
if (!input)
|
|
||||||
{
|
|
||||||
entityItem.motionX = Math.max(-Settings.LEVITATOR_MAX_SPEED(), entityItem.motionX - Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entityItem.motionX = Math.min(Settings.LEVITATOR_MAX_SPEED(), entityItem.motionX + Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case EAST:
|
|
||||||
entityItem.setPosition(entityItem.posX, lockVector.y() + 0.5, lockVector.z() + 0.5);
|
|
||||||
|
|
||||||
entityItem.motionY = 0;
|
|
||||||
entityItem.motionZ = 0;
|
|
||||||
|
|
||||||
if (!input)
|
|
||||||
{
|
|
||||||
entityItem.motionX = Math.min(Settings.LEVITATOR_MAX_SPEED(), entityItem.motionX + Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entityItem.motionX = Math.max(-Settings.LEVITATOR_MAX_SPEED(), entityItem.motionX - Settings.LEVITATOR_ACCELERATION());
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
entityItem.ticksExisted = 1;
|
|
||||||
entityItem.isAirBorne = true;
|
|
||||||
entityItem.delayBeforeCanPickup = 1;
|
|
||||||
entityItem.age = Math.max(entityItem.age - 1, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private EntityItem getItemWithPosition(ItemStack toSend)
|
|
||||||
{
|
|
||||||
EntityItem item = new EntityItem(world(), x() + 0.5, y() + 0.5, z() + 0.5, toSend);
|
|
||||||
item.motionX = 0;
|
|
||||||
item.motionY = 0;
|
|
||||||
item.motionZ = 0;
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateBounds()
|
|
||||||
{
|
|
||||||
suckBounds = operationBounds = null;
|
|
||||||
|
|
||||||
ForgeDirection dir = placementSide.getOpposite();
|
|
||||||
MovingObjectPosition mop = world().rayTraceBlocks(getPosition().add(dir).toVec3(), getPosition().add(dir.offsetX * Settings.LEVITATOR_MAX_REACH(), dir.offsetY * Settings.LEVITATOR_MAX_REACH(), dir.offsetZ * Settings.LEVITATOR_MAX_REACH()).toVec3());
|
|
||||||
|
|
||||||
int reach = Settings.LEVITATOR_MAX_REACH();
|
|
||||||
|
|
||||||
if (mop != null)
|
|
||||||
{
|
|
||||||
if (MultipartUtil.getMultipart(world(), mop.blockX, mop.blockY, mop.blockZ, placementSide.getOpposite().ordinal()) instanceof PartLevitator)
|
|
||||||
{
|
|
||||||
reach = (int) Math.min(getPosition().distance(new Vector3(mop.hitVec)), reach);
|
|
||||||
|
|
||||||
if (dir.offsetX + dir.offsetY + dir.offsetZ < 0)
|
|
||||||
{
|
|
||||||
operationBounds = AxisAlignedBB.getBoundingBox(x() + dir.offsetX * reach, y() + dir.offsetY * reach, z() + dir.offsetZ * reach, x() + 1, y() + 1, z() + 1);
|
|
||||||
suckBounds = AxisAlignedBB.getBoundingBox(x() + dir.offsetX, y() + dir.offsetY, z() + dir.offsetZ, x() + 1, y() + 1, z() + 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
operationBounds = AxisAlignedBB.getBoundingBox(x(), y(), z(), x() + 1 + dir.offsetX * reach, y() + 1 + dir.offsetY * reach, z() + 1 + dir.offsetZ * reach);
|
|
||||||
suckBounds = AxisAlignedBB.getBoundingBox(x(), y(), z(), x() + 1 + dir.offsetX, y() + 1 + dir.offsetY, z() + 1 + dir.offsetZ);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNeighborChanged()
|
|
||||||
{
|
|
||||||
super.onNeighborChanged();
|
|
||||||
updateBounds();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean canFunction()
|
|
||||||
{
|
|
||||||
//TODO remove (false) when working on
|
|
||||||
return false && isLatched() && !world().isBlockIndirectlyGettingPowered(x(), y(), z());
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isLatched()
|
|
||||||
{
|
|
||||||
return getLatched() != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TileEntity getLatched()
|
|
||||||
{
|
|
||||||
ForgeDirection side = placementSide;
|
|
||||||
|
|
||||||
TileEntity tile = world().getTileEntity(x() + side.offsetX, y() + side.offsetY, z() + side.offsetZ);
|
|
||||||
|
|
||||||
if (tile instanceof IInventory)
|
|
||||||
{
|
|
||||||
return tile;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readDesc(MCDataInput packet)
|
|
||||||
{
|
|
||||||
super.readDesc(packet);
|
|
||||||
input = packet.readBoolean();
|
|
||||||
dyeID = packet.readByte();
|
|
||||||
|
|
||||||
if (packet.readBoolean())
|
|
||||||
{
|
|
||||||
saveLinkVector = new VectorWorld(packet.readNBTTagCompound());
|
|
||||||
saveLinkSide = packet.readByte();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeDesc(MCDataOutput packet)
|
|
||||||
{
|
|
||||||
super.writeDesc(packet);
|
|
||||||
packet.writeBoolean(input);
|
|
||||||
packet.writeByte(dyeID);
|
|
||||||
|
|
||||||
if (getLink() != null)
|
|
||||||
{
|
|
||||||
packet.writeBoolean(true);
|
|
||||||
NBTTagCompound nbt = new NBTTagCompound();
|
|
||||||
new VectorWorld(getLink().world(), getLink().x(), getLink().y(), getLink().z()).writeNBT(nbt);
|
|
||||||
packet.writeNBTTagCompound(nbt);
|
|
||||||
packet.writeByte(getLink().placementSide.ordinal());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
packet.writeBoolean(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void load(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.load(nbt);
|
|
||||||
|
|
||||||
this.input = nbt.getBoolean("suck");
|
|
||||||
this.dyeID = nbt.getInteger("dyeID");
|
|
||||||
|
|
||||||
if (nbt.hasKey("link"))
|
|
||||||
{
|
|
||||||
saveLinkVector = new VectorWorld(nbt.getCompoundTag("link"));
|
|
||||||
saveLinkSide = nbt.getByte("linkSide");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void save(NBTTagCompound nbt)
|
|
||||||
{
|
|
||||||
super.save(nbt);
|
|
||||||
|
|
||||||
nbt.setBoolean("suck", input);
|
|
||||||
nbt.setInteger("dyeID", dyeID);
|
|
||||||
|
|
||||||
if (getLink() != null && getLink().world() != null)
|
|
||||||
{
|
|
||||||
nbt.setTag("link", new VectorWorld(getLink().world(), getLink().x(), getLink().y(), getLink().z()).writeNBT(new NBTTagCompound()));
|
|
||||||
nbt.setByte("linkSide", (byte) getLink().placementSide.ordinal());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Link between two TileEntities, do pathfinding operation.
|
|
||||||
*/
|
|
||||||
public void setLink(PartLevitator levitator, boolean setOpponent)
|
|
||||||
{
|
|
||||||
if (getLink() != null && setOpponent)
|
|
||||||
{
|
|
||||||
getLink().setLink(null, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
linked = new WeakReference(levitator);
|
|
||||||
|
|
||||||
if (setOpponent)
|
|
||||||
{
|
|
||||||
getLink().setLink(this, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
updatePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updatePath()
|
|
||||||
{
|
|
||||||
if (thread == null && getLink() != null && lastCalcTime <= 0)
|
|
||||||
{
|
|
||||||
pathfinder = null;
|
|
||||||
|
|
||||||
Vector3 start = getPosition();
|
|
||||||
Vector3 target = new Vector3(getLink().x(), getLink().y(), getLink().z());
|
|
||||||
|
|
||||||
if (start.distance(target) < Settings.MAX_LEVITATOR_DISTANCE())
|
|
||||||
{
|
|
||||||
if (canBeMovePath(world(), start) && canBeMovePath(world(), target))
|
|
||||||
{
|
|
||||||
thread = new ThreadLevitatorPathfinding(new PathfinderLevitator(world(), target), start);
|
|
||||||
thread.start();
|
|
||||||
lastCalcTime = 40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDye(int dye)
|
|
||||||
{
|
|
||||||
dyeID = dye;
|
|
||||||
world().markBlockForUpdate(x(), y(), z());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Vector3 getPosition()
|
|
||||||
{
|
|
||||||
return new Vector3(x(), y(), z());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Vector3 getBeamSpawnPosition()
|
|
||||||
{
|
|
||||||
return new Vector3(x() + 0.5 + placementSide.offsetX / 3f, y() + 0.5 + placementSide.offsetY / 3f, z() + 0.5 + placementSide.offsetZ / 3f);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected ItemStack getItem()
|
|
||||||
{
|
|
||||||
return new ItemStack(ElectricalContent.itemLevitator());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType()
|
|
||||||
{
|
|
||||||
return "resonant_induction_levitator";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SideOnly(Side.CLIENT)
|
|
||||||
public void renderDynamic(codechicken.lib.vec.Vector3 pos, float frame, int pass)
|
|
||||||
{
|
|
||||||
if (pass == 0)
|
|
||||||
{
|
|
||||||
RenderLevitator.INSTANCE.render(this, pos.x, pos.y, pos.z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,79 +0,0 @@
|
||||||
package resonantinduction.electrical.levitator;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
|
||||||
import resonant.lib.path.IPathCallBack;
|
|
||||||
import resonant.lib.path.Pathfinder;
|
|
||||||
import resonant.lib.path.PathfinderAStar;
|
|
||||||
import universalelectricity.core.transform.vector.Vector3;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uses the well known A* Pathfinding algorithm.
|
|
||||||
*
|
|
||||||
* @author Calclavia
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class PathfinderLevitator extends PathfinderAStar
|
|
||||||
{
|
|
||||||
private World world;
|
|
||||||
private double maxSearchDistance;
|
|
||||||
|
|
||||||
public PathfinderLevitator(final World world, final Vector3 goal)
|
|
||||||
{
|
|
||||||
super(new IPathCallBack()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public Set<Vector3> getConnectedNodes(Pathfinder finder, Vector3 currentNode)
|
|
||||||
{
|
|
||||||
Set<Vector3> neighbors = new HashSet<Vector3>();
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
Vector3 neighbor = currentNode.clone().add(ForgeDirection.getOrientation(i));
|
|
||||||
|
|
||||||
if (PartLevitator.canBePath(world, neighbor) || neighbor.equals(goal))
|
|
||||||
{
|
|
||||||
neighbors.add(neighbor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return neighbors;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onSearch(Pathfinder finder, Vector3 start, Vector3 node)
|
|
||||||
{
|
|
||||||
return !(start.distance(node) < (start.distance(goal) * 2));
|
|
||||||
}
|
|
||||||
}, goal);
|
|
||||||
|
|
||||||
this.world = world;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean findNodes(Vector3 start)
|
|
||||||
{
|
|
||||||
int blockCount = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++)
|
|
||||||
{
|
|
||||||
ForgeDirection direction = ForgeDirection.getOrientation(i);
|
|
||||||
Vector3 neighbor = this.goal.clone().add(new Vector3(direction.offsetX, direction.offsetY, direction.offsetZ));
|
|
||||||
|
|
||||||
if (!PartLevitator.canBePath(this.world, neighbor))
|
|
||||||
{
|
|
||||||
blockCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (blockCount >= 6)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.findNodes(start);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,69 +0,0 @@
|
||||||
package resonantinduction.electrical.levitator;
|
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
|
||||||
import net.minecraftforge.client.IItemRenderer;
|
|
||||||
import net.minecraftforge.client.model.AdvancedModelLoader;
|
|
||||||
import net.minecraftforge.client.model.IModelCustom;
|
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
|
||||||
|
|
||||||
import resonant.content.prefab.scala.render.ISimpleItemRenderer;
|
|
||||||
import resonant.lib.render.RenderUtility;
|
|
||||||
import resonantinduction.core.Reference;
|
|
||||||
import cpw.mods.fml.client.FMLClientHandler;
|
|
||||||
|
|
||||||
public class RenderLevitator implements ISimpleItemRenderer
|
|
||||||
{
|
|
||||||
public static final RenderLevitator INSTANCE = new RenderLevitator();
|
|
||||||
|
|
||||||
public static final IModelCustom MODEL = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain(), Reference.modelPath() + "levitator.tcn"));
|
|
||||||
public static final ResourceLocation TEXTURE_ON = new ResourceLocation(Reference.domain(), Reference.modelPath() + "levitator_on.png");
|
|
||||||
public static final ResourceLocation TEXTURE_OFF = new ResourceLocation(Reference.domain(), Reference.modelPath() + "levitator_off.png");
|
|
||||||
|
|
||||||
public void render(PartLevitator part, double x, double y, double z)
|
|
||||||
{
|
|
||||||
GL11.glPushMatrix();
|
|
||||||
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
|
|
||||||
RenderUtility.rotateFaceToSideNoTranslate(part.placementSide);
|
|
||||||
|
|
||||||
if (part.canFunction())
|
|
||||||
RenderUtility.bind(TEXTURE_ON);
|
|
||||||
else
|
|
||||||
RenderUtility.bind(TEXTURE_OFF);
|
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
|
||||||
GL11.glRotatef(part.renderRotation, 1, 0, 0);
|
|
||||||
MODEL.renderOnly("ring1");
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
|
||||||
GL11.glRotatef(-part.renderRotation, 1, 0, 0);
|
|
||||||
MODEL.renderOnly("ring2");
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
|
||||||
GL11.glRotatef(part.renderRotation, 0, 0, 1);
|
|
||||||
MODEL.renderOnly("ring3");
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
|
|
||||||
GL11.glPushMatrix();
|
|
||||||
GL11.glRotatef(-part.renderRotation, 0, 0, 1);
|
|
||||||
MODEL.renderOnly("ring4");
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
|
|
||||||
MODEL.renderAllExcept("ring1", "ring2", "ring3", "ring4");
|
|
||||||
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void renderInventoryItem(IItemRenderer.ItemRenderType type, ItemStack itemStack, Object... data)
|
|
||||||
{
|
|
||||||
GL11.glPushMatrix();
|
|
||||||
GL11.glTranslatef(0f, 0.5f, 0f);
|
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_OFF);
|
|
||||||
MODEL.renderAll();
|
|
||||||
GL11.glPopMatrix();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package resonantinduction.electrical.levitator;
|
|
||||||
|
|
||||||
import universalelectricity.core.transform.vector.Vector3;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Calclavia
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class ThreadLevitatorPathfinding extends Thread
|
|
||||||
{
|
|
||||||
private boolean isCompleted = false;
|
|
||||||
private PathfinderLevitator pathfinder;
|
|
||||||
private Vector3 start;
|
|
||||||
|
|
||||||
public ThreadLevitatorPathfinding(PathfinderLevitator pathfinder, Vector3 start)
|
|
||||||
{
|
|
||||||
this.pathfinder = pathfinder;
|
|
||||||
this.start = start;
|
|
||||||
this.setPriority(Thread.MIN_PRIORITY);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
this.pathfinder.findNodes(this.start);
|
|
||||||
this.isCompleted = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PathfinderLevitator getPath()
|
|
||||||
{
|
|
||||||
if (this.isCompleted)
|
|
||||||
{
|
|
||||||
return this.pathfinder;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue