Removed errors from tesla tower and its effects

This commit is contained in:
Robert S 2014-08-08 00:48:51 -04:00
parent db15b85ae8
commit 9a4acf902f
10 changed files with 371 additions and 562 deletions

View file

@ -34,4 +34,6 @@ final object Reference
final val itemTextureDirectory: String = textureDirectory + "items/"
final val modelPath: String = "models/"
final val modelDirectory: String = assetDirectory + modelPath
def instance() : Unit = this
}

View file

@ -2,20 +2,27 @@ package resonantinduction.electrical;
import java.awt.Color;
import cpw.mods.fml.common.network.IGuiHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import resonant.lib.prefab.ProxyBase;
import resonantinduction.electrical.encoder.TileEncoder;
import resonantinduction.electrical.encoder.gui.ContainerEncoder;
import resonantinduction.electrical.multimeter.ContainerMultimeter;
import resonantinduction.electrical.multimeter.PartMultimeter;
import universalelectricity.core.transform.vector.Vector3;
import codechicken.multipart.TMultiPart;
import codechicken.multipart.TileMultipart;
public class CommonProxy extends ProxyBase
public class CommonProxy implements IGuiHandler
{
public void preInit() {
}
public void init() {
}
public void postInit() {
}
@Override
public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z)
{
@ -29,15 +36,16 @@ public class CommonProxy extends ProxyBase
return new ContainerMultimeter(player.inventory, ((PartMultimeter) part));
}
}
else if (tileEntity instanceof TileEncoder)
{
return new ContainerEncoder(player.inventory, (TileEncoder) tileEntity);
}
return null;
}
public void renderElectricShock(World world, Vector3 start, Vector3 target, float r, float g, float b, boolean split)
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
return null;
}
public void renderElectricShock(World world, Vector3 start, Vector3 target, float r, float g, float b, boolean split)
{
}
@ -67,4 +75,5 @@ public class CommonProxy extends ProxyBase
this.renderElectricShock(world, start, target, 0.55f, 0.7f, 1f, b);
}
}

View file

@ -1,237 +0,0 @@
package resonantinduction.electrical;
import ic2.api.item.Items;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import resonant.lib.content.ContentRegistry;
import resonant.lib.modproxy.ProxyHandler;
import resonant.lib.network.PacketHandler;
import resonant.lib.recipe.UniversalRecipe;
import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInduction;
import resonantinduction.core.ResonantTab;
import resonantinduction.core.Settings;
import resonantinduction.core.resource.ItemResourcePart;
import resonantinduction.electrical.armbot.BlockArmbot;
import resonantinduction.electrical.armbot.TileArmbot;
import resonantinduction.electrical.battery.BlockBattery;
import resonantinduction.electrical.battery.ItemBlockBattery;
import resonantinduction.electrical.battery.TileBattery;
import resonantinduction.electrical.charger.ItemCharger;
import resonantinduction.electrical.generator.BlockMotor;
import resonantinduction.electrical.generator.TileMotor;
import resonantinduction.electrical.generator.TileSolarPanel;
import resonantinduction.electrical.generator.thermopile.BlockThermopile;
import resonantinduction.electrical.generator.TileThermopile;
import resonantinduction.electrical.laser.gun.ItemMiningLaser;
import resonantinduction.electrical.levitator.ItemLevitator;
import resonantinduction.electrical.multimeter.ItemMultimeter;
import resonantinduction.electrical.tesla.BlockTesla;
import resonantinduction.electrical.tesla.TileTesla;
import resonantinduction.electrical.transformer.ItemTransformer;
import resonantinduction.electrical.wire.EnumWireMaterial;
import resonantinduction.electrical.wire.ItemWire;
import resonantinduction.atomic.gate.ItemQuantumGlyph;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.ModMetadata;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
/** Resonant Induction Electrical Module
*
* @author Calclavia */
@Mod(modid = Electrical.ID, name = Electrical.NAME, version = Reference.VERSION, dependencies = "before:ThermalExpansion;before:Mekanism;after:ResonantInduction|Mechanical;required-after:" + ResonantInduction.ID)
@NetworkMod(channels = Reference.CHANNEL, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class)
public class Electrical
{
/** Mod Information */
public static final String ID = "ResonantInduction|Electrical";
public static final String NAME = Reference.NAME + " Electrical";
@Instance(ID)
public static Electrical INSTANCE;
@SidedProxy(clientSide = "ClientProxy", serverSide = "CommonProxy")
public static CommonProxy proxy;
@Mod.Metadata(ID)
public static ModMetadata metadata;
public static final ContentRegistry contentRegistry = new ContentRegistry(Settings.config, Settings.idManager, ID).setPrefix(Reference.PREFIX).setTab(ResonantTab.DEFAULT);
// Energy
public static Item itemWire;
public static Item itemMultimeter;
public static Item itemTransformer;
public static Item itemCharger;
public static Block blockTesla;
public static Block blockBattery;
public static Block blockEncoder;
// Railings
public static Item itemRailing;
// Generators
public static Block blockSolarPanel;
public static Block blockMotor;
public static Block blockThermopile;
// Transport
public static Item itemLevitator;
public static Block blockArmbot;
public static Item itemDisk;
public static Item itemInsulation;
// Quantum
public static Block blockQuantumGate;
public static Item itemQuantumGlyph;
// Tools
public static Item itemLaserGun;
public ProxyHandler modproxies;
@EventHandler
public void preInit(FMLPreInitializationEvent evt)
{
modproxies = new ProxyHandler();
NetworkRegistry.instance().registerGuiHandler(this, proxy);
Settings.config.load();
// Energy
itemWire = contentRegistry.createItem(ItemWire.class);
itemMultimeter = contentRegistry.createItem(ItemMultimeter.class);
itemTransformer = contentRegistry.createItem(ItemTransformer.class);
itemCharger = contentRegistry.createItem(ItemCharger.class);
blockTesla = contentRegistry.createTile(BlockTesla.class, TileTesla.class);
blockBattery = contentRegistry.createBlock(BlockBattery.class, ItemBlockBattery.class, TileBattery.class);
blockArmbot = contentRegistry.createBlock(BlockArmbot.class, null, TileArmbot.class);
// Transport
itemLevitator = contentRegistry.createItem(ItemLevitator.class);
itemInsulation = contentRegistry.createItem("insulation", ItemResourcePart.class);
itemLaserGun = contentRegistry.createItem("laserDrill", ItemMiningLaser.class);
// Generator
blockSolarPanel = contentRegistry.newBlock(TileSolarPanel.class);
blockMotor = contentRegistry.createTile(BlockMotor.class, TileMotor.class);
blockThermopile = contentRegistry.createTile(BlockThermopile.class, TileThermopile.class);
// Quantum
itemQuantumGlyph = contentRegistry.createItem(ItemQuantumGlyph.class);
//Railings
//itemRailing = contentRegistry.createItem(ItemItemRailing.class);
Settings.config.save();
OreDictionary.registerOre("wire", itemWire);
OreDictionary.registerOre("motor", blockMotor);
OreDictionary.registerOre("battery", ItemBlockBattery.setTier(new ItemStack(blockBattery, 1, 0), (byte) 0));
OreDictionary.registerOre("batteryBox", ItemBlockBattery.setTier(new ItemStack(blockBattery, 1, 0), (byte) 0));
/** Set reference itemstacks */
ResonantTab.ITEMSTACK = new ItemStack(itemTransformer);
for (EnumWireMaterial material : EnumWireMaterial.values())
{
material.setWire(itemWire);
}
proxy.preInit();
modproxies.preInit();
}
@EventHandler
public void init(FMLInitializationEvent evt)
{
Settings.setModMetadata(metadata, ID, NAME, ResonantInduction.ID);
MultipartElectrical.INSTANCE = new MultipartElectrical();
proxy.init();
modproxies.init();
}
@EventHandler
public void postInit(FMLPostInitializationEvent evt)
{
/** Recipes */
/** Tesla - by Jyzarc */
GameRegistry.addRecipe(new ShapedOreRecipe(blockTesla, "WEW", " C ", "DID", 'W', "wire", 'E', Item.eyeOfEnder, 'C', UniversalRecipe.BATTERY.get(), 'D', Item.diamond, 'I', UniversalRecipe.PRIMARY_PLATE.get()));
/** Multimeter */
GameRegistry.addRecipe(new ShapedOreRecipe(itemMultimeter, "WWW", "ICI", 'W', "wire", 'C', UniversalRecipe.BATTERY.get(), 'I', UniversalRecipe.PRIMARY_METAL.get()));
// GameRegistry.addRecipe(new ShapedOreRecipe(itemDisk, "PPP", "RRR", "WWW", 'W', "wire",
// 'P', Item.paper, 'R', Item.redstone));
/** Battery */
ItemStack tierOneBattery = ItemBlockBattery.setTier(new ItemStack(blockBattery, 1, 0), (byte) 0);
ItemStack tierTwoBattery = ItemBlockBattery.setTier(new ItemStack(blockBattery, 1, 0), (byte) 1);
ItemStack tierThreeBattery = ItemBlockBattery.setTier(new ItemStack(blockBattery, 1, 0), (byte) 2);
GameRegistry.addRecipe(new ShapedOreRecipe(tierOneBattery, "III", "IRI", "III", 'R', Block.blockRedstone, 'I', UniversalRecipe.PRIMARY_METAL.get()));
GameRegistry.addRecipe(new ShapedOreRecipe(tierTwoBattery, "RRR", "RIR", "RRR", 'R', tierOneBattery, 'I', UniversalRecipe.PRIMARY_PLATE.get()));
GameRegistry.addRecipe(new ShapedOreRecipe(tierThreeBattery, "RRR", "RIR", "RRR", 'R', tierTwoBattery, 'I', Block.blockDiamond));
/** Wires **/
//GameRegistry.addRecipe(new ShapelessOreRecipe(itemInsulation, Item.slimeBall, new ItemStack(Block.cloth, 2, OreDictionary.WILDCARD_VALUE)));
//GameRegistry.addRecipe(new ShapelessOreRecipe(itemInsulation, "slimeball", new ItemStack(Block.cloth, 2, OreDictionary.WILDCARD_VALUE)));
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.COPPER.getWire(3), "MMM", 'M', "ingotCopper"));
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.TIN.getWire(3), "MMM", 'M', "ingotTin"));
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.IRON.getWire(3), "MMM", 'M', Item.ingotIron));
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.ALUMINUM.getWire(3), "MMM", 'M', "ingotAluminum"));
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.SILVER.getWire(), "MMM", 'M', "ingotSilver"));
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.SUPERCONDUCTOR.getWire(3), "MMM", 'M', "ingotSuperconductor"));
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.SUPERCONDUCTOR.getWire(3), "MMM", "MEM", "MMM", 'M', Item.ingotGold, 'E', Item.eyeOfEnder));
GameRegistry.addRecipe(new ShapedOreRecipe(itemCharger, "WWW", "ICI", 'W', "wire", 'I', UniversalRecipe.PRIMARY_METAL.get(), 'C', UniversalRecipe.CIRCUIT_T1.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()));
/** Quantum Gates */
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(itemQuantumGlyph, 1, 0), " CT", "LBL", "TCT", 'B', Block.blockDiamond, 'L', itemLevitator, 'C', itemCharger, 'T', blockTesla));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(itemQuantumGlyph, 1, 1), "TCT", "LBL", " CT", 'B', Block.blockDiamond, 'L', itemLevitator, 'C', itemCharger, 'T', blockTesla));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(itemQuantumGlyph, 1, 2), "TC ", "LBL", "TCT", 'B', Block.blockDiamond, 'L', itemLevitator, 'C', itemCharger, 'T', blockTesla));
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(itemQuantumGlyph, 1, 3), "TCT", "LBL", "TC ", 'B', Block.blockDiamond, 'L', itemLevitator, 'C', itemCharger, 'T', blockTesla));
/** Generators **/
GameRegistry.addRecipe(new ShapedOreRecipe(blockSolarPanel, "CCC", "WWW", "III", 'W', "wire", 'C', Item.coal, 'I', UniversalRecipe.PRIMARY_METAL.get()));
GameRegistry.addRecipe(new ShapedOreRecipe(blockMotor, "SRS", "SMS", "SWS", 'W', "wire", 'R', Item.redstone, 'M', Block.blockIron, 'S', UniversalRecipe.PRIMARY_METAL.get()));
GameRegistry.addRecipe(new ShapedOreRecipe(blockThermopile, "ORO", "OWO", "OOO", 'W', "wire", 'O', Block.obsidian, 'R', Item.redstone));
GameRegistry.addRecipe(new ShapedOreRecipe(itemLaserGun, "RDR", "RDR", "ICB", 'R', Item.redstone, 'D', Item.diamond, 'I', Item.ingotGold, 'C', UniversalRecipe.CIRCUIT_T2.get(), 'B', ItemBlockBattery.setTier(new ItemStack(blockBattery, 1, 0), (byte) 0)));
/** Wire Compatiblity **/
if (Loader.isModLoaded("IC2"))
{
GameRegistry.addRecipe(new ShapelessOreRecipe(EnumWireMaterial.COPPER.getWire(), Items.getItem("copperCableItem")));
GameRegistry.addRecipe(new ShapelessOreRecipe(EnumWireMaterial.TIN.getWire(), Items.getItem("tinCableItem")));
GameRegistry.addRecipe(new ShapelessOreRecipe(EnumWireMaterial.IRON.getWire(), Items.getItem("ironCableItem")));
GameRegistry.addRecipe(new ShapelessOreRecipe(Items.getItem("copperCableItem"), EnumWireMaterial.COPPER.getWire()));
GameRegistry.addRecipe(new ShapelessOreRecipe(Items.getItem("tinCableItem"), EnumWireMaterial.TIN.getWire()));
GameRegistry.addRecipe(new ShapelessOreRecipe(Items.getItem("ironCableItem"), EnumWireMaterial.IRON.getWire()));
}
if (Loader.isModLoaded("Mekanism"))
{
GameRegistry.addRecipe(new ShapelessOreRecipe(EnumWireMaterial.COPPER.getWire(), "universalCable"));
}
proxy.postInit();
modproxies.postInit();
}
}

View file

@ -0,0 +1,153 @@
package resonantinduction.electrical
import ic2.api.item.IC2Items
import net.minecraft.block.Block
import net.minecraft.init.Blocks
import net.minecraft.init.Items
import net.minecraft.item.Item
import net.minecraft.item.ItemStack
import net.minecraftforge.oredict.OreDictionary
import net.minecraftforge.oredict.ShapedOreRecipe
import net.minecraftforge.oredict.ShapelessOreRecipe
import resonant.content.loader.ModManager
import resonant.lib.loadable.LoadableHandler
import resonant.lib.recipe.UniversalRecipe
import resonantinduction.core.Reference
import resonantinduction.core.ResonantInduction
import resonantinduction.core.ResonantTab
import resonantinduction.core.Settings
import resonantinduction.core.resource.ItemResourcePart
import resonantinduction.electrical.battery.BlockBattery
import resonantinduction.electrical.battery.ItemBlockBattery
import resonantinduction.electrical.battery.TileBattery
import resonantinduction.electrical.generator.TileMotor
import resonantinduction.electrical.generator.TileSolarPanel
import resonantinduction.electrical.generator.TileThermopile
import resonantinduction.electrical.levitator.ItemLevitator
import resonantinduction.electrical.multimeter.ItemMultimeter
import resonantinduction.electrical.tesla.TileTesla
import resonantinduction.electrical.transformer.ItemTransformer
import resonantinduction.electrical.wire.EnumWireMaterial
import resonantinduction.electrical.wire.ItemWire
import resonantinduction.atomic.gate.ItemQuantumGlyph
import cpw.mods.fml.common.Loader
import cpw.mods.fml.common.Mod
import cpw.mods.fml.common.Mod.EventHandler
import cpw.mods.fml.common.Mod.Instance
import cpw.mods.fml.common.ModMetadata
import cpw.mods.fml.common.SidedProxy
import cpw.mods.fml.common.event.FMLInitializationEvent
import cpw.mods.fml.common.event.FMLPostInitializationEvent
import cpw.mods.fml.common.event.FMLPreInitializationEvent
import cpw.mods.fml.common.network.NetworkRegistry
import cpw.mods.fml.common.registry.GameRegistry
/** Resonant Induction Electrical Module
*
* @author Calclavia */
object Electrical {
/** Mod Information */
final val ID: String = "ResonantInduction|Electrical"
final val NAME: String = Reference.name + " Electrical"
@Instance(ID) var INSTANCE: Electrical = null
@SidedProxy(clientSide = "ClientProxy", serverSide = "CommonProxy") var proxy: CommonProxy = null
@Mod.Metadata(ID) var metadata: ModMetadata = null
final val contentRegistry: ModManager = new ModManager().setPrefix(Reference.prefix).setTab(ResonantTab.tab)
var itemWire: Item = null
var itemMultimeter: Item = null
var itemTransformer: Item = null
var itemCharger: Item = null
var blockTesla: Block = null
var blockBattery: Block = null
var blockEncoder: Block = null
var itemRailing: Item = null
var blockSolarPanel: Block = null
var blockMotor: Block = null
var blockThermopile: Block = null
var itemLevitator: Item = null
var blockArmbot: Block = null
var itemDisk: Item = null
var itemInsulation: Item = null
var blockQuantumGate: Block = null
var itemQuantumGlyph: Item = null
var itemLaserGun: Item = null
}
@Mod(modid = Electrical.ID, name = Electrical.NAME, version = Reference.version, dependencies = "before:ThermalExpansion;before:Mekanism;after:ResonantInduction|Mechanical;required-after:" + Reference.coreID) class Electrical {
@EventHandler def preInit(evt: FMLPreInitializationEvent) {
modproxies = new LoadableHandler
NetworkRegistry.INSTANCE.registerGuiHandler(this, Electrical.proxy)
Settings.config.load
Electrical.itemWire = Electrical.contentRegistry.newItem(classOf[ItemWire])
Electrical.itemMultimeter = Electrical.contentRegistry.newItem(classOf[ItemMultimeter])
Electrical.itemTransformer = Electrical.contentRegistry.newItem(classOf[ItemTransformer])
Electrical.blockTesla = Electrical.contentRegistry.newBlock(classOf[TileTesla])
Electrical.blockBattery = Electrical.contentRegistry.newBlock(classOf[BlockBattery], classOf[ItemBlockBattery], classOf[TileBattery])
Electrical.itemLevitator = Electrical.contentRegistry.newItem(classOf[ItemLevitator])
Electrical.itemInsulation = Electrical.contentRegistry.newItem("insulation", classOf[ItemResourcePart])
Electrical.blockSolarPanel = Electrical.contentRegistry.newBlock(classOf[TileSolarPanel])
Electrical.blockMotor = Electrical.contentRegistry.newBlock(classOf[TileMotor])
Electrical.blockThermopile = Electrical.contentRegistry.newBlock(classOf[TileThermopile])
Electrical.itemQuantumGlyph = Electrical.contentRegistry.newItem(classOf[ItemQuantumGlyph])
Settings.config.save
OreDictionary.registerOre("wire", Electrical.itemWire)
OreDictionary.registerOre("motor", Electrical.blockMotor)
OreDictionary.registerOre("battery", ItemBlockBattery.setTier(new ItemStack(Electrical.blockBattery, 1, 0), 0.asInstanceOf[Byte]))
OreDictionary.registerOre("batteryBox", ItemBlockBattery.setTier(new ItemStack(Electrical.blockBattery, 1, 0), 0.asInstanceOf[Byte]))
ResonantTab.itemStack(new ItemStack(Electrical.itemTransformer))
for (material <- EnumWireMaterial.values) {
material.setWire(Electrical.itemWire)
}
Electrical.proxy.preInit
modproxies.preInit
}
@EventHandler def init(evt: FMLInitializationEvent) {
MultipartElectrical.INSTANCE = new MultipartElectrical
Electrical.proxy.init
modproxies.init
}
@EventHandler def postInit(evt: FMLPostInitializationEvent) {
GameRegistry.addRecipe(new ShapedOreRecipe(Electrical.blockTesla, "WEW", " C ", "DID", 'W', "wire", 'E', Items.ender_eye, 'C', UniversalRecipe.BATTERY.get, 'D', Items.diamond, 'I', UniversalRecipe.PRIMARY_PLATE.get))
GameRegistry.addRecipe(new ShapedOreRecipe(Electrical.itemMultimeter, "WWW", "ICI", 'W', "wire", 'C', UniversalRecipe.BATTERY.get, 'I', UniversalRecipe.PRIMARY_METAL.get))
val tierOneBattery: ItemStack = ItemBlockBattery.setTier(new ItemStack(Electrical.blockBattery, 1, 0), 0.asInstanceOf[Byte])
val tierTwoBattery: ItemStack = ItemBlockBattery.setTier(new ItemStack(Electrical.blockBattery, 1, 0), 1.asInstanceOf[Byte])
val tierThreeBattery: ItemStack = ItemBlockBattery.setTier(new ItemStack(Electrical.blockBattery, 1, 0), 2.asInstanceOf[Byte])
GameRegistry.addRecipe(new ShapedOreRecipe(tierOneBattery, "III", "IRI", "III", 'R', Blocks.redstone_block, 'I', UniversalRecipe.PRIMARY_METAL.get))
GameRegistry.addRecipe(new ShapedOreRecipe(tierTwoBattery, "RRR", "RIR", "RRR", 'R', tierOneBattery, 'I', UniversalRecipe.PRIMARY_PLATE.get))
GameRegistry.addRecipe(new ShapedOreRecipe(tierThreeBattery, "RRR", "RIR", "RRR", 'R', tierTwoBattery, 'I', Blocks.diamond_block))
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.COPPER.getWire(3), "MMM", 'M', "ingotCopper"))
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.TIN.getWire(3), "MMM", 'M', "ingotTin"))
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.IRON.getWire(3), "MMM", 'M', Items.iron_ingot))
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.ALUMINUM.getWire(3), "MMM", 'M', "ingotAluminum"))
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.SILVER.getWire, "MMM", 'M', "ingotSilver"))
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.SUPERCONDUCTOR.getWire(3), "MMM", 'M', "ingotSuperconductor"))
GameRegistry.addRecipe(new ShapedOreRecipe(EnumWireMaterial.SUPERCONDUCTOR.getWire(3), "MMM", "MEM", "MMM", 'M', Items.gold_ingot, 'E', Items.ender_eye))
GameRegistry.addRecipe(new ShapedOreRecipe(Electrical.itemCharger, "WWW", "ICI", 'W', "wire", 'I', UniversalRecipe.PRIMARY_METAL.get, 'C', UniversalRecipe.CIRCUIT_T1.get))
GameRegistry.addRecipe(new ShapedOreRecipe(Electrical.itemTransformer, "WWW", "WWW", "III", 'W', "wire", 'I', UniversalRecipe.PRIMARY_METAL.get))
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Electrical.itemQuantumGlyph, 1, 0), " CT", "LBL", "TCT", 'B', Blocks.diamond_block, 'L', Electrical.itemLevitator, 'C', Electrical.itemCharger, 'T', Electrical.blockTesla))
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Electrical.itemQuantumGlyph, 1, 1), "TCT", "LBL", " CT", 'B', Blocks.diamond_block, 'L', Electrical.itemLevitator, 'C', Electrical.itemCharger, 'T', Electrical.blockTesla))
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Electrical.itemQuantumGlyph, 1, 2), "TC ", "LBL", "TCT", 'B', Blocks.diamond_block, 'L', Electrical.itemLevitator, 'C', Electrical.itemCharger, 'T', Electrical.blockTesla))
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Electrical.itemQuantumGlyph, 1, 3), "TCT", "LBL", "TC ", 'B', Blocks.diamond_block, 'L', Electrical.itemLevitator, 'C', Electrical.itemCharger, 'T', Electrical.blockTesla))
GameRegistry.addRecipe(new ShapedOreRecipe(Electrical.blockSolarPanel, "CCC", "WWW", "III", 'W', "wire", 'C', Items.coal, 'I', UniversalRecipe.PRIMARY_METAL.get))
GameRegistry.addRecipe(new ShapedOreRecipe(Electrical.blockMotor, "SRS", "SMS", "SWS", 'W', "wire", 'R', Items.redstone, 'M', Blocks.iron_block, 'S', UniversalRecipe.PRIMARY_METAL.get))
GameRegistry.addRecipe(new ShapedOreRecipe(Electrical.blockThermopile, "ORO", "OWO", "OOO", 'W', "wire", 'O', Blocks.obsidian, 'R', Items.redstone))
GameRegistry.addRecipe(new ShapedOreRecipe(Electrical.itemLaserGun, "RDR", "RDR", "ICB", 'R', Items.redstone, 'D', Items.diamond, 'I', Items.gold_ingot, 'C', UniversalRecipe.CIRCUIT_T2.get, 'B', ItemBlockBattery.setTier(new ItemStack(Electrical.blockBattery, 1, 0), 0.asInstanceOf[Byte])))
if (Loader.isModLoaded("IC2")) {
GameRegistry.addRecipe(new ShapelessOreRecipe(EnumWireMaterial.COPPER.getWire, IC2Items.getItem("copperCableItem")))
GameRegistry.addRecipe(new ShapelessOreRecipe(EnumWireMaterial.TIN.getWire, IC2Items.getItem("tinCableItem")))
GameRegistry.addRecipe(new ShapelessOreRecipe(EnumWireMaterial.IRON.getWire, IC2Items.getItem("ironCableItem")))
GameRegistry.addRecipe(new ShapelessOreRecipe(IC2Items.getItem("copperCableItem"), EnumWireMaterial.COPPER.getWire))
GameRegistry.addRecipe(new ShapelessOreRecipe(IC2Items.getItem("tinCableItem"), EnumWireMaterial.TIN.getWire))
GameRegistry.addRecipe(new ShapelessOreRecipe(IC2Items.getItem("ironCableItem"), EnumWireMaterial.IRON.getWire))
}
if (Loader.isModLoaded("Mekanism")) {
GameRegistry.addRecipe(new ShapelessOreRecipe(EnumWireMaterial.COPPER.getWire, "universalCable"))
}
Electrical.proxy.postInit
modproxies.postInit
}
var modproxies: LoadableHandler = null
}

View file

@ -27,6 +27,7 @@ import net.minecraft.world.World;
import org.lwjgl.opengl.GL11;
import resonantinduction.core.Reference;
import universalelectricity.core.transform.rotation.Quaternion;
import universalelectricity.core.transform.vector.Vector3;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.relauncher.Side;
@ -41,7 +42,7 @@ import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class FXElectricBolt extends EntityFX
{
public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "fadedSphere.png");
public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.domain(), Reference.modelPath() + "fadedSphere.png");
public static final ResourceLocation PARTICLE_RESOURCE = new ResourceLocation("textures/particle/particles.png");
/** The width of the electrical bolt. */
@ -62,15 +63,15 @@ public class FXElectricBolt extends EntityFX
public FXElectricBolt(World world, Vector3 startVec, Vector3 targetVec, boolean doSplits)
{
super(world, startVec.x, startVec.y, startVec.z);
super(world, startVec.x(), startVec.y(), startVec.z());
this.rand = new Random();
this.start = new BoltPoint(startVec);
this.end = new BoltPoint(targetVec);
if (this.end.y == Double.POSITIVE_INFINITY)
if (this.end.y() == Double.POSITIVE_INFINITY)
{
this.end.y = Minecraft.getMinecraft().thePlayer.posY + 30;
this.end.y(Minecraft.getMinecraft().thePlayer.posY + 30);
}
/** By default, we do an electrical color */
@ -106,18 +107,12 @@ public class FXElectricBolt extends EntityFX
this.split(2, offsetRatio / 70, 0, 0, 0);
this.recalculate();
Collections.sort(this.segments, new Comparator()
Collections.sort(this.segments, new Comparator<BoltSegment>()
{
public int compare(BoltSegment bolt1, BoltSegment bolt2)
{
return Float.compare(bolt2.alpha, bolt1.alpha);
}
@Override
public int compare(Object obj1, Object obj2)
{
return compare((BoltSegment) obj1, (BoltSegment) obj2);
}
});
}
}
@ -151,7 +146,7 @@ public class FXElectricBolt extends EntityFX
{
prev = segment.prev;
/** Length of each subsegment */
Vector3 subSegment = segment.difference.clone().scale(1.0F / splitAmount);
Vector3 subSegment = segment.difference.clone().multiply(1.0F / splitAmount);
/**
* Creates an array of new bolt points. The first and last points of the bolts are the
@ -167,8 +162,8 @@ public class FXElectricBolt extends EntityFX
*/
for (int i = 1; i < splitAmount; i++)
{
Vector3 newOffset = segment.difference.getPerpendicular().rotate(this.rand.nextFloat() * 360, segment.difference).scale((this.rand.nextFloat() - 0.5F) * offset);
Vector3 basePoint = startPoint.clone().add(subSegment.clone().scale(i));
Vector3 newOffset = segment.difference.perpendicular().transform(new Quaternion(this.rand.nextFloat() * 360, segment.difference)).multiply((this.rand.nextFloat() - 0.5F) * offset);
Vector3 basePoint = startPoint.clone().add(subSegment.clone().multiply(i));
newPoints[i] = new BoltPoint(basePoint, newOffset);
}
@ -185,8 +180,8 @@ public class FXElectricBolt extends EntityFX
if ((i != 0) && (this.rand.nextFloat() < splitChance))
{
Vector3 splitrot = next.difference.xCrossProduct().rotate(this.rand.nextFloat() * 360, next.difference);
Vector3 diff = next.difference.clone().rotate((this.rand.nextFloat() * 0.66F + 0.33F) * splitAngle, splitrot).scale(splitLength);
Vector3 splitrot = next.difference.xCross().transform(new Quaternion(this.rand.nextFloat() * 360, next.difference));
Vector3 diff = next.difference.clone().transform(new Quaternion((this.rand.nextFloat() * 0.66F + 0.33F) * splitAngle, splitrot)).multiply(splitLength);
this.maxSplitID += 1;
this.parentIDMap.put(this.maxSplitID, next.splitID);
BoltSegment split = new BoltSegment(newPoints[i], new BoltPoint(newPoints[(i + 1)].base, newPoints[(i + 1)].offset.clone().add(diff)), segment.alpha / 2f, next.id, this.maxSplitID);
@ -313,24 +308,24 @@ public class FXElectricBolt extends EntityFX
double renderWidth = this.boltWidth * ((new Vector3(player).distance(segment.start) / 5f + 1f) * (1 + segment.alpha) * 0.5f);
renderWidth = Math.min(this.boltWidth, Math.max(renderWidth, 0));
if (segment.difference.getMagnitude() > 0 && segment.difference.getMagnitude() != Double.NaN && segment.difference.getMagnitude() != Double.POSITIVE_INFINITY && renderWidth > 0 && renderWidth != Double.NaN && renderWidth != Double.POSITIVE_INFINITY)
if (segment.difference.magnitude() > 0 && segment.difference.magnitude() != Double.NaN && segment.difference.magnitude() != Double.POSITIVE_INFINITY && renderWidth > 0 && renderWidth != Double.NaN && renderWidth != Double.POSITIVE_INFINITY)
{
Vector3 diffPrev = playerVector.crossProduct(segment.prevDiff).scale(renderWidth / segment.sinPrev);
Vector3 diffNext = playerVector.crossProduct(segment.nextDiff).scale(renderWidth / segment.sinNext);
Vector3 diffPrev = playerVector.cross(segment.prevDiff).multiply(renderWidth / segment.sinPrev);
Vector3 diffNext = playerVector.cross(segment.nextDiff).multiply(renderWidth / segment.sinNext);
Vector3 startVec = segment.start;
Vector3 endVec = segment.end;
float rx1 = (float) (startVec.x - interpPosX);
float ry1 = (float) (startVec.y - interpPosY);
float rz1 = (float) (startVec.z - interpPosZ);
float rx2 = (float) (endVec.x - interpPosX);
float ry2 = (float) (endVec.y - interpPosY);
float rz2 = (float) (endVec.z - interpPosZ);
float rx1 = (float) (startVec.x() - interpPosX);
float ry1 = (float) (startVec.y() - interpPosY);
float rz1 = (float) (startVec.z() - interpPosZ);
float rx2 = (float) (endVec.x() - interpPosX);
float ry2 = (float) (endVec.y() - interpPosY);
float rz2 = (float) (endVec.z() - interpPosZ);
tessellator.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, (1.0F - (this.particleAge >= 0 ? ((float) this.particleAge / (float) this.particleMaxAge) : 0.0F) * 0.6f) * segment.alpha);
tessellator.addVertexWithUV(rx2 - diffNext.x, ry2 - diffNext.y, rz2 - diffNext.z, 0.5D, 0.0D);
tessellator.addVertexWithUV(rx1 - diffPrev.x, ry1 - diffPrev.y, rz1 - diffPrev.z, 0.5D, 0.0D);
tessellator.addVertexWithUV(rx1 + diffPrev.x, ry1 + diffPrev.y, rz1 + diffPrev.z, 0.5D, 1.0D);
tessellator.addVertexWithUV(rx2 + diffNext.x, ry2 + diffNext.y, rz2 + diffNext.z, 0.5D, 1.0D);
tessellator.addVertexWithUV(rx2 - diffNext.x(), ry2 - diffNext.y(), rz2 - diffNext.z(), 0.5D, 0.0D);
tessellator.addVertexWithUV(rx1 - diffPrev.x(), ry1 - diffPrev.y(), rz1 - diffPrev.z(), 0.5D, 0.0D);
tessellator.addVertexWithUV(rx1 + diffPrev.x(), ry1 + diffPrev.y(), rz1 + diffPrev.z(), 0.5D, 1.0D);
tessellator.addVertexWithUV(rx2 + diffNext.x(), ry2 + diffNext.y(), rz2 + diffNext.z(), 0.5D, 1.0D);
/**
* Render the bolts balls.
@ -338,26 +333,26 @@ public class FXElectricBolt extends EntityFX
if (segment.next == null)
{
Vector3 roundEnd = segment.end.clone().add(segment.difference.clone().normalize().scale(renderWidth));
float rx3 = (float) (roundEnd.x - interpPosX);
float ry3 = (float) (roundEnd.y - interpPosY);
float rz3 = (float) (roundEnd.z - interpPosZ);
tessellator.addVertexWithUV(rx3 - diffNext.x, ry3 - diffNext.y, rz3 - diffNext.z, 0.0D, 0.0D);
tessellator.addVertexWithUV(rx2 - diffNext.x, ry2 - diffNext.y, rz2 - diffNext.z, 0.5D, 0.0D);
tessellator.addVertexWithUV(rx2 + diffNext.x, ry2 + diffNext.y, rz2 + diffNext.z, 0.5D, 1.0D);
tessellator.addVertexWithUV(rx3 + diffNext.x, ry3 + diffNext.y, rz3 + diffNext.z, 0.0D, 1.0D);
Vector3 roundEnd = segment.end.clone().add(segment.difference.clone().normalize().multiply(renderWidth));
float rx3 = (float) (roundEnd.x() - interpPosX);
float ry3 = (float) (roundEnd.y() - interpPosY);
float rz3 = (float) (roundEnd.z() - interpPosZ);
tessellator.addVertexWithUV(rx3 - diffNext.x(), ry3 - diffNext.y(), rz3 - diffNext.z(), 0.0D, 0.0D);
tessellator.addVertexWithUV(rx2 - diffNext.x(), ry2 - diffNext.y(), rz2 - diffNext.z(), 0.5D, 0.0D);
tessellator.addVertexWithUV(rx2 + diffNext.x(), ry2 + diffNext.y(), rz2 + diffNext.z(), 0.5D, 1.0D);
tessellator.addVertexWithUV(rx3 + diffNext.x(), ry3 + diffNext.y(), rz3 + diffNext.z(), 0.0D, 1.0D);
}
if (segment.prev == null)
{
Vector3 roundEnd = segment.start.clone().difference(segment.difference.clone().normalize().scale(renderWidth));
float rx3 = (float) (roundEnd.x - interpPosX);
float ry3 = (float) (roundEnd.y - interpPosY);
float rz3 = (float) (roundEnd.z - interpPosZ);
tessellator.addVertexWithUV(rx1 - diffPrev.x, ry1 - diffPrev.y, rz1 - diffPrev.z, 0.5D, 0.0D);
tessellator.addVertexWithUV(rx3 - diffPrev.x, ry3 - diffPrev.y, rz3 - diffPrev.z, 0.0D, 0.0D);
tessellator.addVertexWithUV(rx3 + diffPrev.x, ry3 + diffPrev.y, rz3 + diffPrev.z, 0.0D, 1.0D);
tessellator.addVertexWithUV(rx1 + diffPrev.x, ry1 + diffPrev.y, rz1 + diffPrev.z, 0.5D, 1.0D);
Vector3 roundEnd = segment.start.clone().subtract(segment.difference.clone().normalize().multiply(renderWidth));
float rx3 = (float) (roundEnd.x() - interpPosX);
float ry3 = (float) (roundEnd.y() - interpPosY);
float rz3 = (float) (roundEnd.z() - interpPosZ);
tessellator.addVertexWithUV(rx1 - diffPrev.x(), ry1 - diffPrev.y(), rz1 - diffPrev.z(), 0.5D, 0.0D);
tessellator.addVertexWithUV(rx3 - diffPrev.x(), ry3 - diffPrev.y(), rz3 - diffPrev.z(), 0.0D, 0.0D);
tessellator.addVertexWithUV(rx3 + diffPrev.x(), ry3 + diffPrev.y(), rz3 + diffPrev.z(), 0.0D, 1.0D);
tessellator.addVertexWithUV(rx1 + diffPrev.x(), ry1 + diffPrev.y(), rz1 + diffPrev.z(), 0.5D, 1.0D);
}
}
}
@ -423,7 +418,7 @@ public class FXElectricBolt extends EntityFX
this.alpha = alpha;
this.id = id;
this.splitID = splitID;
this.difference = this.end.clone().difference(this.start);
this.difference = this.end.clone().subtract(this.start);
}
public void recalculate()
@ -433,7 +428,7 @@ public class FXElectricBolt extends EntityFX
Vector3 prevDiffNorm = this.prev.difference.clone().normalize();
Vector3 diffNorm = this.difference.clone().normalize();
this.prevDiff = diffNorm.clone().add(prevDiffNorm).normalize();
this.sinPrev = Math.sin(diffNorm.anglePreNorm(prevDiffNorm.clone().scale(-1)) / 2);
this.sinPrev = Math.sin(diffNorm.anglePreNorm(prevDiffNorm.clone().multiply(-1)) / 2);
}
else
{
@ -446,7 +441,7 @@ public class FXElectricBolt extends EntityFX
Vector3 nextDiffNorm = this.next.difference.clone().normalize();
Vector3 diffNorm = this.difference.clone().normalize();
this.nextDiff = diffNorm.clone().add(nextDiffNorm).normalize();
this.sinNext = Math.sin(diffNorm.anglePreNorm(nextDiffNorm.clone().scale(-1)) / 2);
this.sinNext = Math.sin(diffNorm.anglePreNorm(nextDiffNorm.clone().multiply(-1)) / 2);
}
else
{

View file

@ -1,166 +0,0 @@
/**
*
*/
package resonantinduction.electrical.tesla;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import resonant.lib.prefab.block.BlockSidedIO;
import resonant.lib.render.block.BlockRenderingHandler;
import resonant.lib.utility.LanguageUtility;
import resonant.lib.utility.LinkUtility;
import resonant.lib.utility.WrenchUtility;
import resonantinduction.core.prefab.part.MultipartUtility;
import resonantinduction.core.Reference;
import universalelectricity.api.UniversalElectricity;
import universalelectricity.api.vector.VectorWorld;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* @author Calclavia
*
*/
public class BlockTesla extends BlockSidedIO implements ITileEntityProvider
{
public BlockTesla(int id)
{
super(id, UniversalElectricity.machine);
setTextureName(Reference.PREFIX + "material_metal_side");
}
@Override
public void onBlockAdded(World world, int x, int y, int z)
{
super.onBlockAdded(world, x, y, z);
TileEntity tileEntity = world.getTileEntity(x, y, z);
((TileTesla) tileEntity).updatePositionStatus();
}
@Override
public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ)
{
TileEntity t = world.getTileEntity(x, y, z);
TileTesla tileEntity = ((TileTesla) t).getMultiBlock().get();
if (entityPlayer.getCurrentEquippedItem() != null)
{
int dyeColor = MultipartUtility.isDye(entityPlayer.getCurrentEquippedItem());
if (dyeColor != -1)
{
tileEntity.setDye(dyeColor);
if (!entityPlayer.capabilities.isCreativeMode)
{
entityPlayer.inventory.decrStackSize(entityPlayer.inventory.currentItem, 1);
}
return true;
}
else if (entityPlayer.getCurrentEquippedItem().itemID == Item.redstone.itemID)
{
boolean status = tileEntity.toggleEntityAttack();
if (!entityPlayer.capabilities.isCreativeMode)
{
entityPlayer.inventory.decrStackSize(entityPlayer.inventory.currentItem, 1);
}
if (!world.isRemote)
{
entityPlayer.addChatMessage(LanguageUtility.getLocal("message.tesla.toggleAttack").replace("%v", status + ""));
}
return true;
}
}
else
{
boolean receiveMode = tileEntity.toggleReceive();
if (!world.isRemote)
{
entityPlayer.addChatMessage(LanguageUtility.getLocal("message.tesla.mode").replace("%v", receiveMode + ""));
}
return true;
}
return false;
}
@Override
public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
{
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileTesla)
{
ItemStack itemStack = player.getCurrentEquippedItem();
if (WrenchUtility.isWrench(itemStack))
{
if (((TileTesla) tile).tryLink(LinkUtility.getLink(itemStack)))
{
if (world.isRemote)
player.addChatMessage("Successfully linked devices.");
LinkUtility.clearLink(itemStack);
}
else
{
if (world.isRemote)
player.addChatMessage("Marked link for device.");
LinkUtility.setLink(itemStack, new VectorWorld(world, x, y, z));
}
return true;
}
}
return false;
}
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, int id)
{
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TileTesla)
{
((TileTesla) tile).updatePositionStatus();
}
}
@Override
public TileEntity createNewTileEntity(World world)
{
return new TileTesla();
}
@SideOnly(Side.CLIENT)
@Override
public int getRenderType()
{
return BlockRenderingHandler.INSTANCE.getRenderId();
}
@Override
public boolean renderAsNormalBlock()
{
return false;
}
@Override
public boolean isOpaqueCube()
{
return false;
}
}

View file

@ -16,7 +16,7 @@ public interface ITesla
* @param doTransfer - Actually transfer
* @return Energy actually transfered.
*/
public long teslaTransfer(long transferEnergy, boolean doTransfer);
public double teslaTransfer(double transferEnergy, boolean doTransfer);
public boolean canTeslaTransfer(TileEntity transferTile);

View file

@ -19,13 +19,13 @@ import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderTesla extends TileEntitySpecialRenderer
{
public static final ResourceLocation TEXTURE_BOTTOM = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "tesla_bottom.png");
public static final ResourceLocation TEXTURE_MIDDLE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "tesla_middle.png");
public static final ResourceLocation TEXTURE_TOP = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "tesla_top.png");
public static final ResourceLocation TEXTURE_BOTTOM = new ResourceLocation(Reference.domain(), Reference.modelPath() + "tesla_bottom.png");
public static final ResourceLocation TEXTURE_MIDDLE = new ResourceLocation(Reference.domain(), Reference.modelPath() + "tesla_middle.png");
public static final ResourceLocation TEXTURE_TOP = new ResourceLocation(Reference.domain(), Reference.modelPath() + "tesla_top.png");
public static final IModelCustom MODEL_BOTTOM = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "teslaBottom.tcn");
public static final IModelCustom MODEL_MIDDLE = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "teslaMiddle.tcn");
public static final IModelCustom MODEL_TOP = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "teslaTop.tcn");
public static final IModelCustom MODEL_BOTTOM = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain(), Reference.modelDirectory() + "teslaBottom.tcn"));
public static final IModelCustom MODEL_MIDDLE = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain(), Reference.modelDirectory() + "teslaMiddle.tcn"));
public static final IModelCustom MODEL_TOP = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain(), Reference.modelDirectory() + "teslaTop.tcn"));
@Override
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)

View file

@ -7,11 +7,8 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.Set;
import java.util.WeakHashMap;
import net.minecraft.server.ServerListenThread;
import net.minecraft.server.ThreadMinecraftServer;
import net.minecraft.tileentity.TileEntity;
import calclavia.api.mffs.fortron.IServerThread;
import resonant.api.mffs.fortron.IServerThread;
/**
* @author Calclavia
@ -61,7 +58,7 @@ public class TeslaGrid
{
Thread thr = Thread.currentThread();
if ((thr instanceof ThreadMinecraftServer) || (thr instanceof ServerListenThread) || (thr instanceof IServerThread))
if (thr instanceof IServerThread)
{
return INSTANCE_SERVER;
}

View file

@ -11,35 +11,42 @@ import java.util.List;
import java.util.PriorityQueue;
import java.util.Set;
import cpw.mods.fml.common.network.ByteBufUtils;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.packet.Packet;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import resonant.lib.multiblock.IMultiBlockStructure;
import resonant.lib.multiblock.MultiBlockHandler;
import resonant.lib.network.IPacketReceiver;
import resonant.lib.network.IPacketSender;
import resonant.lib.network.PacketHandler;
import resonant.lib.multiblock.reference.IMultiBlockStructure;
import resonant.lib.multiblock.reference.MultiBlockHandler;
import resonant.lib.network.discriminator.PacketTile;
import resonant.lib.network.discriminator.PacketType;
import resonant.lib.network.handle.IPacketReceiver;
import resonant.lib.prefab.damage.ElectricalDamage;
import resonant.lib.prefab.tile.TileElectrical;
import resonant.lib.render.EnumColor;
import resonant.lib.utility.LanguageUtility;
import resonant.lib.utility.LinkUtility;
import resonant.lib.utility.WrenchUtility;
import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInduction;
import resonantinduction.core.Settings;
import resonantinduction.core.prefab.part.MultipartUtility;
import resonantinduction.electrical.Electrical;
import universalelectricity.api.UniversalElectricity;
import universalelectricity.api.energy.EnergyStorageHandler;
import universalelectricity.core.transform.vector.Vector3;
import universalelectricity.api.vector.VectorWorld;
import com.google.common.io.ByteArrayDataInput;
import cpw.mods.fml.common.network.PacketDispatcher;
import resonant.lib.content.prefab.java.TileElectric;
import universalelectricity.core.transform.vector.VectorWorld;
/**
* The Tesla TileEntity.
@ -49,10 +56,10 @@ import cpw.mods.fml.common.network.PacketDispatcher;
* @author Calclavia
*
*/
public class TileTesla extends TileElectrical implements IMultiBlockStructure<TileTesla>, ITesla, IPacketSender, IPacketReceiver
public class TileTesla extends TileElectric implements IMultiBlockStructure<TileTesla>, ITesla, IPacketReceiver
{
public final static int DEFAULT_COLOR = 12;
public final long TRANSFER_CAP = 10000;
public final double TRANSFER_CAP = 10000D;
private int dyeID = DEFAULT_COLOR;
private boolean canReceive = true;
@ -65,6 +72,11 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
private final Set<TileTesla> outputBlacklist = new HashSet<TileTesla>();
private final Set<TileTesla> connectedTeslas = new HashSet<TileTesla>();
/**
* Multiblock Methods.
*/
private MultiBlockHandler<TileTesla> multiBlock;
/**
* Quantum Tesla
*/
@ -82,8 +94,13 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
public TileTesla()
{
this.energy = new EnergyStorageHandler(TRANSFER_CAP);
this.saveIOMap = true;
super(Material.iron);
setCapacity(TRANSFER_CAP * 2);
setMaxTransfer(TRANSFER_CAP);
setTextureName(Reference.prefix() + "material_metal_side");
normalRender(false);
isOpaqueCube(false);
//this.saveIOMap(true);
}
@Override
@ -94,20 +111,18 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
}
@Override
public void updateEntity()
public void update()
{
super.updateEntity();
super.update();
boolean doPacketUpdate = this.energy.getEnergy() > 0;
boolean doPacketUpdate = energy().getEnergy() > 0;
/**
* Only transfer if it is the controlling Tesla tower.
*/
if (this.getMultiBlock().isPrimary())
{
this.produce();
if (this.ticks % (4 + this.worldObj.rand.nextInt(2)) == 0 && ((this.worldObj.isRemote && isTransfering) || (!this.energy.isEmpty() && !this.worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord))))
if (this.ticks() % (4 + this.worldObj.rand.nextInt(2)) == 0 && ((this.worldObj.isRemote && isTransfering) || (!this.energy().isEmpty() && !this.worldObj.isBlockIndirectlyGettingPowered(this.xCoord, this.yCoord, this.zCoord))))
{
final TileTesla topTesla = this.getTopTelsa();
final Vector3 topTeslaVector = new Vector3(topTesla);
@ -127,18 +142,18 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
if (transferTile instanceof TileTesla && !transferTile.isInvalid())
{
this.transfer(((TileTesla) transferTile), Math.min(this.energy.getEnergy(), TRANSFER_CAP));
this.transfer(((TileTesla) transferTile), Math.min(energy().getEnergy(), TRANSFER_CAP));
if (this.zapCounter % 5 == 0 && Settings.SOUND_FXS)
if (this.zapCounter % 5 == 0 && Settings.SOUND_FXS())
{
this.worldObj.playSoundEffect(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5, Reference.PREFIX + "electricshock", (float) this.energy.getEnergy() / (float) TRANSFER_CAP, 1.3f - 0.5f * (this.dyeID / 16f));
this.worldObj.playSoundEffect(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5, Reference.prefix() + "electricshock", (float) this.energy().getEnergy() / (float) TRANSFER_CAP, 1.3f - 0.5f * (this.dyeID / 16f));
}
}
}
}
else
{
Electrical.proxy.renderElectricShock(this.worldObj, topTeslaVector.clone().add(0.5), topTeslaVector.clone().add(new Vector3(0.5, Double.POSITIVE_INFINITY, 0.5)), false);
Electrical.proxy().renderElectricShock(this.worldObj, topTeslaVector.clone().add(0.5), topTeslaVector.clone().add(new Vector3(0.5, Double.POSITIVE_INFINITY, 0.5)), false);
}
}
else
@ -146,7 +161,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
/**
* Normal transportation
*/
PriorityQueue<ITesla> teslaToTransfer = new PriorityQueue<ITesla>(1024, new Comparator()
PriorityQueue<ITesla> teslaToTransfer = new PriorityQueue<ITesla>(1024, new Comparator<ITesla>()
{
public int compare(ITesla o1, ITesla o2)
{
@ -164,12 +179,6 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
return 0;
}
@Override
public int compare(Object obj, Object obj1)
{
return compare((ITesla) obj, (ITesla) obj1);
}
});
for (ITesla otherTesla : TeslaGrid.instance().get())
@ -198,7 +207,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
if (teslaToTransfer.size() > 0)
{
long transferEnergy = this.energy.getEnergy() / teslaToTransfer.size();
double transferEnergy = this.energy().getEnergy() / teslaToTransfer.size();
boolean sentPacket = false;
@ -208,9 +217,9 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
{
ITesla tesla = teslaToTransfer.poll();
if (this.zapCounter % 5 == 0 && Settings.SOUND_FXS)
if (this.zapCounter % 5 == 0 && Settings.SOUND_FXS())
{
this.worldObj.playSoundEffect(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5, Reference.PREFIX + "electricshock", (float) this.energy.getEnergy() / (float) TRANSFER_CAP, 1.3f - 0.5f * (this.dyeID / 16f));
this.worldObj.playSoundEffect(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5, Reference.prefix() + "electricshock", (float) this.energy().getEnergy() / (float) TRANSFER_CAP, 1.3f - 0.5f * (this.dyeID / 16f));
}
Vector3 targetVector = new Vector3((TileEntity) tesla);
@ -225,7 +234,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
double distance = topTeslaVector.distance(targetVector);
Electrical.proxy.renderElectricShock(this.worldObj, new Vector3(topTesla).add(new Vector3(0.5)), targetVector.add(new Vector3(0.5, Math.random() * heightRange / 3 - heightRange / 3, 0.5)), EnumColor.DYES[this.dyeID].toColor());
Electrical.proxy().renderElectricShock(this.worldObj, new Vector3(topTesla).add(new Vector3(0.5)), targetVector.add(new Vector3(0.5, Math.random() * heightRange / 3 - heightRange / 3, 0.5)), EnumColor.DYES[this.dyeID].toColor());
this.transfer(tesla, Math.min(transferEnergy, TRANSFER_CAP));
@ -233,20 +242,6 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
{
this.sendPacket(3);
}
if (this.attackEntities && this.zapCounter % 5 == 0)
{
MovingObjectPosition mop = topTeslaVector.clone().add(0.5).rayTraceEntities(this.worldObj, targetVector.clone().add(0.5));
if (mop != null && mop.entityHit != null)
{
if (mop.entityHit instanceof EntityLivingBase)
{
ElectricalDamage.electrocuteEntity(mop.entityHit, this, UniversalElectricity.DEFAULT_VOLTAGE * 4, 1);
Electrical.proxy.renderElectricShock(this.worldObj, new Vector3(topTesla).clone().add(0.5), new Vector3(mop.entityHit));
}
}
}
}
}
}
@ -258,7 +253,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
this.doTransfer = false;
}
if (!this.worldObj.isRemote && this.energy.didEnergyStateChange())
if (!this.worldObj.isRemote && this.energy().didEnergyStateChange())
{
this.sendPacket(2);
}
@ -267,7 +262,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
this.topCache = null;
}
private void transfer(ITesla tesla, long transferEnergy)
private void transfer(ITesla tesla, double transferEnergy)
{
if (transferEnergy > 0)
{
@ -294,21 +289,15 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
}
@Override
public boolean canConnect(ForgeDirection direction, Object obj)
{
return super.canConnect(direction, obj) && this.getMultiBlock().isPrimary() && !(obj instanceof TileTesla);
}
public void sendPacket(int type)
{
PacketDispatcher.sendPacketToAllInDimension(ResonantInduction.PACKET_TILE.getPacket(this, this.getPacketData(type).toArray()), this.worldObj.provider.dimensionId);
sendPacket(new PacketTile(this, this.getPacketData(type).toArray()));
}
@Override
public Packet getDescriptionPacket()
public PacketTile getDescPacket()
{
return ResonantInduction.PACKET_TILE.getPacket(this, this.getPacketData(1).toArray());
return new PacketTile(this, this.getPacketData(1).toArray());
}
/**
@ -316,7 +305,6 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
* 2 - Energy Update
* 3 - Tesla Beam
*/
@Override
public ArrayList getPacketData(int type)
{
ArrayList data = new ArrayList();
@ -337,7 +325,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
}
case 2:
{
data.add(this.energy.getEnergy() > 0);
data.add(this.energy().getEnergy() > 0);
break;
}
}
@ -346,7 +334,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
}
@Override
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
public void read(ByteBuf data, EntityPlayer player, PacketType type)
{
try
{
@ -357,7 +345,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
this.canReceive = data.readBoolean();
this.attackEntities = data.readBoolean();
this.isLinkedClient = data.readBoolean();
getMultiBlock().load(PacketHandler.readNBTTagCompound(data));
getMultiBlock().load(ByteBufUtils.readTag(data));
break;
case 2:
this.isTransfering = data.readBoolean();
@ -373,15 +361,15 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
}
@Override
public long teslaTransfer(long transferEnergy, boolean doTransfer)
public double teslaTransfer(double transferEnergy, boolean doTransfer)
{
if (getMultiBlock().isPrimary())
{
if (doTransfer)
{
this.energy.receiveEnergy(transferEnergy, true);
this.energy().receiveEnergy(transferEnergy, true);
if (this.energy.didEnergyStateChange())
if (this.energy().didEnergyStateChange())
{
this.sendPacket(2);
}
@ -391,10 +379,10 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
}
else
{
if (this.energy.getEnergy() > 0)
if (this.energy().getEnergy() > 0)
{
transferEnergy += this.energy.getEnergy();
this.energy.setEnergy(0);
transferEnergy += this.energy().getEnergy();
this.energy().setEnergy(0);
}
return getMultiBlock().get().teslaTransfer(transferEnergy, doTransfer);
@ -459,7 +447,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
break;
}
checkPosition.y++;
checkPosition.add(0, 1, 0);
}
this.topCache = returnTile;
@ -552,9 +540,9 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
if (this.linked != null)
{
nbt.setInteger("link_x", (int) this.linked.x);
nbt.setInteger("link_y", (int) this.linked.y);
nbt.setInteger("link_z", (int) this.linked.z);
nbt.setInteger("link_x", (int) this.linked.x());
nbt.setInteger("link_y", (int) this.linked.y());
nbt.setInteger("link_z", (int) this.linked.z());
nbt.setInteger("linkDim", this.linkDim);
}
getMultiBlock().save(nbt);
@ -601,7 +589,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
{
if (vector.getTileEntity() instanceof TileTesla)
{
setLink(vector, vector.world.provider.dimensionId, true);
setLink(vector, vector.world().provider.dimensionId, true);
}
return true;
@ -610,10 +598,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
return false;
}
/**
* Multiblock Methods.
*/
private MultiBlockHandler<TileTesla> multiBlock;
@Override
public void onMultiBlockChanged()
@ -641,7 +626,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
break;
}
checkPosition.y++;
checkPosition.add(0, 1, 0);
}
return vectors.toArray(new Vector3[0]);
@ -665,7 +650,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
break;
}
checkPosition.y--;
checkPosition.add(0, -1, 0);
}
return lowest;
@ -716,11 +701,82 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
return getMultiBlock().get().getIO(dir);
}
@Override
public EnumSet<ForgeDirection> getOutputDirections()
{
EnumSet<ForgeDirection> dirs = super.getOutputDirections();
dirs.remove(ForgeDirection.UP);
return dirs;
}
@Override
public boolean use(EntityPlayer entityPlayer, int side, Vector3 hit)
{
if (entityPlayer.getCurrentEquippedItem() != null)
{
int dyeColor = MultipartUtility.isDye(entityPlayer.getCurrentEquippedItem());
if (dyeColor != -1)
{
getMultiBlock().get().setDye(dyeColor);
if (!entityPlayer.capabilities.isCreativeMode)
{
entityPlayer.inventory.decrStackSize(entityPlayer.inventory.currentItem, 1);
}
return true;
}
else if (entityPlayer.getCurrentEquippedItem().getItem() == Items.redstone)
{
boolean status = getMultiBlock().get().toggleEntityAttack();
if (!entityPlayer.capabilities.isCreativeMode)
{
entityPlayer.inventory.decrStackSize(entityPlayer.inventory.currentItem, 1);
}
if (!world().isRemote)
{
entityPlayer.addChatMessage(new ChatComponentText(LanguageUtility.getLocal("message.tesla.toggleAttack").replace("%v", status + "")));
}
return true;
}
}
else
{
boolean receiveMode = getMultiBlock().get().toggleReceive();
if (!world().isRemote)
{
entityPlayer.addChatMessage(new ChatComponentText(LanguageUtility.getLocal("message.tesla.mode").replace("%v", receiveMode + "")));
}
return true;
}
return false;
}
@Override
public boolean configure(EntityPlayer player, int side, Vector3 hit)
{
ItemStack itemStack = player.getCurrentEquippedItem();
if (player.isSneaking()) {
if (tryLink(LinkUtility.getLink(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(this));
}
return true;
}
return super.configure(player, side, hit);
}
@Override
public void onNeighborChanged(Block id)
{
updatePositionStatus();
}
}