Removed errors from tesla tower and its effects
This commit is contained in:
parent
db15b85ae8
commit
9a4acf902f
10 changed files with 371 additions and 562 deletions
|
@ -34,4 +34,6 @@ final object Reference
|
||||||
final val itemTextureDirectory: String = textureDirectory + "items/"
|
final val itemTextureDirectory: String = textureDirectory + "items/"
|
||||||
final val modelPath: String = "models/"
|
final val modelPath: String = "models/"
|
||||||
final val modelDirectory: String = assetDirectory + modelPath
|
final val modelDirectory: String = assetDirectory + modelPath
|
||||||
|
|
||||||
|
def instance() : Unit = this
|
||||||
}
|
}
|
|
@ -2,20 +2,27 @@ package resonantinduction.electrical;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.network.IGuiHandler;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.world.World;
|
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.ContainerMultimeter;
|
||||||
import resonantinduction.electrical.multimeter.PartMultimeter;
|
import resonantinduction.electrical.multimeter.PartMultimeter;
|
||||||
import universalelectricity.core.transform.vector.Vector3;
|
import universalelectricity.core.transform.vector.Vector3;
|
||||||
import codechicken.multipart.TMultiPart;
|
import codechicken.multipart.TMultiPart;
|
||||||
import codechicken.multipart.TileMultipart;
|
import codechicken.multipart.TileMultipart;
|
||||||
|
|
||||||
public class CommonProxy extends ProxyBase
|
public class CommonProxy implements IGuiHandler
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public void preInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void postInit() {
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z)
|
public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z)
|
||||||
{
|
{
|
||||||
|
@ -29,11 +36,12 @@ public class CommonProxy extends ProxyBase
|
||||||
return new ContainerMultimeter(player.inventory, ((PartMultimeter) part));
|
return new ContainerMultimeter(player.inventory, ((PartMultimeter) part));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (tileEntity instanceof TileEncoder)
|
|
||||||
{
|
return null;
|
||||||
return new ContainerEncoder(player.inventory, (TileEncoder) tileEntity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,4 +75,5 @@ public class CommonProxy extends ProxyBase
|
||||||
this.renderElectricShock(world, start, target, 0.55f, 0.7f, 1f, b);
|
this.renderElectricShock(world, start, target, 0.55f, 0.7f, 1f, b);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
153
src/main/scala/resonantinduction/electrical/Electrical.scala
Normal file
153
src/main/scala/resonantinduction/electrical/Electrical.scala
Normal 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
|
||||||
|
}
|
|
@ -27,6 +27,7 @@ import net.minecraft.world.World;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import resonantinduction.core.Reference;
|
import resonantinduction.core.Reference;
|
||||||
|
import universalelectricity.core.transform.rotation.Quaternion;
|
||||||
import universalelectricity.core.transform.vector.Vector3;
|
import universalelectricity.core.transform.vector.Vector3;
|
||||||
import cpw.mods.fml.client.FMLClientHandler;
|
import cpw.mods.fml.client.FMLClientHandler;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
@ -41,7 +42,7 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public class FXElectricBolt extends EntityFX
|
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");
|
public static final ResourceLocation PARTICLE_RESOURCE = new ResourceLocation("textures/particle/particles.png");
|
||||||
|
|
||||||
/** The width of the electrical bolt. */
|
/** 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)
|
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.rand = new Random();
|
||||||
this.start = new BoltPoint(startVec);
|
this.start = new BoltPoint(startVec);
|
||||||
this.end = new BoltPoint(targetVec);
|
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 */
|
/** 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.split(2, offsetRatio / 70, 0, 0, 0);
|
||||||
this.recalculate();
|
this.recalculate();
|
||||||
|
|
||||||
Collections.sort(this.segments, new Comparator()
|
Collections.sort(this.segments, new Comparator<BoltSegment>()
|
||||||
{
|
{
|
||||||
public int compare(BoltSegment bolt1, BoltSegment bolt2)
|
public int compare(BoltSegment bolt1, BoltSegment bolt2)
|
||||||
{
|
{
|
||||||
return Float.compare(bolt2.alpha, bolt1.alpha);
|
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;
|
prev = segment.prev;
|
||||||
/** Length of each subsegment */
|
/** 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
|
* 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++)
|
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 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().scale(i));
|
Vector3 basePoint = startPoint.clone().add(subSegment.clone().multiply(i));
|
||||||
|
|
||||||
newPoints[i] = new BoltPoint(basePoint, newOffset);
|
newPoints[i] = new BoltPoint(basePoint, newOffset);
|
||||||
}
|
}
|
||||||
|
@ -185,8 +180,8 @@ public class FXElectricBolt extends EntityFX
|
||||||
|
|
||||||
if ((i != 0) && (this.rand.nextFloat() < splitChance))
|
if ((i != 0) && (this.rand.nextFloat() < splitChance))
|
||||||
{
|
{
|
||||||
Vector3 splitrot = next.difference.xCrossProduct().rotate(this.rand.nextFloat() * 360, next.difference);
|
Vector3 splitrot = next.difference.xCross().transform(new Quaternion(this.rand.nextFloat() * 360, next.difference));
|
||||||
Vector3 diff = next.difference.clone().rotate((this.rand.nextFloat() * 0.66F + 0.33F) * splitAngle, splitrot).scale(splitLength);
|
Vector3 diff = next.difference.clone().transform(new Quaternion((this.rand.nextFloat() * 0.66F + 0.33F) * splitAngle, splitrot)).multiply(splitLength);
|
||||||
this.maxSplitID += 1;
|
this.maxSplitID += 1;
|
||||||
this.parentIDMap.put(this.maxSplitID, next.splitID);
|
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);
|
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);
|
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));
|
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 diffPrev = playerVector.cross(segment.prevDiff).multiply(renderWidth / segment.sinPrev);
|
||||||
Vector3 diffNext = playerVector.crossProduct(segment.nextDiff).scale(renderWidth / segment.sinNext);
|
Vector3 diffNext = playerVector.cross(segment.nextDiff).multiply(renderWidth / segment.sinNext);
|
||||||
Vector3 startVec = segment.start;
|
Vector3 startVec = segment.start;
|
||||||
Vector3 endVec = segment.end;
|
Vector3 endVec = segment.end;
|
||||||
float rx1 = (float) (startVec.x - interpPosX);
|
float rx1 = (float) (startVec.x() - interpPosX);
|
||||||
float ry1 = (float) (startVec.y - interpPosY);
|
float ry1 = (float) (startVec.y() - interpPosY);
|
||||||
float rz1 = (float) (startVec.z - interpPosZ);
|
float rz1 = (float) (startVec.z() - interpPosZ);
|
||||||
float rx2 = (float) (endVec.x - interpPosX);
|
float rx2 = (float) (endVec.x() - interpPosX);
|
||||||
float ry2 = (float) (endVec.y - interpPosY);
|
float ry2 = (float) (endVec.y() - interpPosY);
|
||||||
float rz2 = (float) (endVec.z - interpPosZ);
|
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.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(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, 0.0D);
|
||||||
tessellator.addVertexWithUV(rx1 + diffPrev.x, ry1 + diffPrev.y, rz1 + diffPrev.z, 0.5D, 1.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, 1.0D);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render the bolts balls.
|
* Render the bolts balls.
|
||||||
|
@ -338,26 +333,26 @@ public class FXElectricBolt extends EntityFX
|
||||||
|
|
||||||
if (segment.next == null)
|
if (segment.next == null)
|
||||||
{
|
{
|
||||||
Vector3 roundEnd = segment.end.clone().add(segment.difference.clone().normalize().scale(renderWidth));
|
Vector3 roundEnd = segment.end.clone().add(segment.difference.clone().normalize().multiply(renderWidth));
|
||||||
float rx3 = (float) (roundEnd.x - interpPosX);
|
float rx3 = (float) (roundEnd.x() - interpPosX);
|
||||||
float ry3 = (float) (roundEnd.y - interpPosY);
|
float ry3 = (float) (roundEnd.y() - interpPosY);
|
||||||
float rz3 = (float) (roundEnd.z - interpPosZ);
|
float rz3 = (float) (roundEnd.z() - interpPosZ);
|
||||||
tessellator.addVertexWithUV(rx3 - diffNext.x, ry3 - diffNext.y, rz3 - diffNext.z, 0.0D, 0.0D);
|
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, 0.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, 1.0D);
|
||||||
tessellator.addVertexWithUV(rx3 + diffNext.x, ry3 + diffNext.y, rz3 + diffNext.z, 0.0D, 1.0D);
|
tessellator.addVertexWithUV(rx3 + diffNext.x(), ry3 + diffNext.y(), rz3 + diffNext.z(), 0.0D, 1.0D);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (segment.prev == null)
|
if (segment.prev == null)
|
||||||
{
|
{
|
||||||
Vector3 roundEnd = segment.start.clone().difference(segment.difference.clone().normalize().scale(renderWidth));
|
Vector3 roundEnd = segment.start.clone().subtract(segment.difference.clone().normalize().multiply(renderWidth));
|
||||||
float rx3 = (float) (roundEnd.x - interpPosX);
|
float rx3 = (float) (roundEnd.x() - interpPosX);
|
||||||
float ry3 = (float) (roundEnd.y - interpPosY);
|
float ry3 = (float) (roundEnd.y() - interpPosY);
|
||||||
float rz3 = (float) (roundEnd.z - interpPosZ);
|
float rz3 = (float) (roundEnd.z() - interpPosZ);
|
||||||
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, 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, 0.0D);
|
||||||
tessellator.addVertexWithUV(rx3 + diffPrev.x, ry3 + diffPrev.y, rz3 + diffPrev.z, 0.0D, 1.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);
|
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.alpha = alpha;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.splitID = splitID;
|
this.splitID = splitID;
|
||||||
this.difference = this.end.clone().difference(this.start);
|
this.difference = this.end.clone().subtract(this.start);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void recalculate()
|
public void recalculate()
|
||||||
|
@ -433,7 +428,7 @@ public class FXElectricBolt extends EntityFX
|
||||||
Vector3 prevDiffNorm = this.prev.difference.clone().normalize();
|
Vector3 prevDiffNorm = this.prev.difference.clone().normalize();
|
||||||
Vector3 diffNorm = this.difference.clone().normalize();
|
Vector3 diffNorm = this.difference.clone().normalize();
|
||||||
this.prevDiff = diffNorm.clone().add(prevDiffNorm).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
|
else
|
||||||
{
|
{
|
||||||
|
@ -446,7 +441,7 @@ public class FXElectricBolt extends EntityFX
|
||||||
Vector3 nextDiffNorm = this.next.difference.clone().normalize();
|
Vector3 nextDiffNorm = this.next.difference.clone().normalize();
|
||||||
Vector3 diffNorm = this.difference.clone().normalize();
|
Vector3 diffNorm = this.difference.clone().normalize();
|
||||||
this.nextDiff = diffNorm.clone().add(nextDiffNorm).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
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -16,7 +16,7 @@ public interface ITesla
|
||||||
* @param doTransfer - Actually transfer
|
* @param doTransfer - Actually transfer
|
||||||
* @return Energy actually transfered.
|
* @return Energy actually transfered.
|
||||||
*/
|
*/
|
||||||
public long teslaTransfer(long transferEnergy, boolean doTransfer);
|
public double teslaTransfer(double transferEnergy, boolean doTransfer);
|
||||||
|
|
||||||
public boolean canTeslaTransfer(TileEntity transferTile);
|
public boolean canTeslaTransfer(TileEntity transferTile);
|
||||||
|
|
||||||
|
|
|
@ -19,13 +19,13 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public class RenderTesla extends TileEntitySpecialRenderer
|
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_BOTTOM = new ResourceLocation(Reference.domain(), Reference.modelPath() + "tesla_bottom.png");
|
||||||
public static final ResourceLocation TEXTURE_MIDDLE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "tesla_middle.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.MODEL_PATH + "tesla_top.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_BOTTOM = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain(), Reference.modelDirectory() + "teslaBottom.tcn"));
|
||||||
public static final IModelCustom MODEL_MIDDLE = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "teslaMiddle.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(Reference.MODEL_DIRECTORY + "teslaTop.tcn");
|
public static final IModelCustom MODEL_TOP = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain(), Reference.modelDirectory() + "teslaTop.tcn"));
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)
|
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f)
|
||||||
|
|
|
@ -7,11 +7,8 @@ import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
|
||||||
import net.minecraft.server.ServerListenThread;
|
|
||||||
import net.minecraft.server.ThreadMinecraftServer;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import calclavia.api.mffs.fortron.IServerThread;
|
import resonant.api.mffs.fortron.IServerThread;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Calclavia
|
* @author Calclavia
|
||||||
|
@ -61,7 +58,7 @@ public class TeslaGrid
|
||||||
{
|
{
|
||||||
Thread thr = Thread.currentThread();
|
Thread thr = Thread.currentThread();
|
||||||
|
|
||||||
if ((thr instanceof ThreadMinecraftServer) || (thr instanceof ServerListenThread) || (thr instanceof IServerThread))
|
if (thr instanceof IServerThread)
|
||||||
{
|
{
|
||||||
return INSTANCE_SERVER;
|
return INSTANCE_SERVER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,35 +11,42 @@ import java.util.List;
|
||||||
import java.util.PriorityQueue;
|
import java.util.PriorityQueue;
|
||||||
import java.util.Set;
|
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.EntityLivingBase;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
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.nbt.NBTTagCompound;
|
||||||
import net.minecraft.network.packet.Packet;
|
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.ChatComponentText;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
import resonant.lib.multiblock.IMultiBlockStructure;
|
import resonant.lib.multiblock.reference.IMultiBlockStructure;
|
||||||
import resonant.lib.multiblock.MultiBlockHandler;
|
import resonant.lib.multiblock.reference.MultiBlockHandler;
|
||||||
import resonant.lib.network.IPacketReceiver;
|
import resonant.lib.network.discriminator.PacketTile;
|
||||||
import resonant.lib.network.IPacketSender;
|
import resonant.lib.network.discriminator.PacketType;
|
||||||
import resonant.lib.network.PacketHandler;
|
import resonant.lib.network.handle.IPacketReceiver;
|
||||||
import resonant.lib.prefab.damage.ElectricalDamage;
|
import resonant.lib.prefab.damage.ElectricalDamage;
|
||||||
import resonant.lib.prefab.tile.TileElectrical;
|
|
||||||
import resonant.lib.render.EnumColor;
|
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.Reference;
|
||||||
import resonantinduction.core.ResonantInduction;
|
import resonantinduction.core.ResonantInduction;
|
||||||
import resonantinduction.core.Settings;
|
import resonantinduction.core.Settings;
|
||||||
|
import resonantinduction.core.prefab.part.MultipartUtility;
|
||||||
import resonantinduction.electrical.Electrical;
|
import resonantinduction.electrical.Electrical;
|
||||||
import universalelectricity.api.UniversalElectricity;
|
|
||||||
import universalelectricity.api.energy.EnergyStorageHandler;
|
|
||||||
import universalelectricity.core.transform.vector.Vector3;
|
import universalelectricity.core.transform.vector.Vector3;
|
||||||
import universalelectricity.api.vector.VectorWorld;
|
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
import resonant.lib.content.prefab.java.TileElectric;
|
||||||
import cpw.mods.fml.common.network.PacketDispatcher;
|
import universalelectricity.core.transform.vector.VectorWorld;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Tesla TileEntity.
|
* The Tesla TileEntity.
|
||||||
|
@ -49,10 +56,10 @@ import cpw.mods.fml.common.network.PacketDispatcher;
|
||||||
* @author Calclavia
|
* @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 static int DEFAULT_COLOR = 12;
|
||||||
public final long TRANSFER_CAP = 10000;
|
public final double TRANSFER_CAP = 10000D;
|
||||||
private int dyeID = DEFAULT_COLOR;
|
private int dyeID = DEFAULT_COLOR;
|
||||||
|
|
||||||
private boolean canReceive = true;
|
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> outputBlacklist = new HashSet<TileTesla>();
|
||||||
private final Set<TileTesla> connectedTeslas = new HashSet<TileTesla>();
|
private final Set<TileTesla> connectedTeslas = new HashSet<TileTesla>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Multiblock Methods.
|
||||||
|
*/
|
||||||
|
private MultiBlockHandler<TileTesla> multiBlock;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Quantum Tesla
|
* Quantum Tesla
|
||||||
*/
|
*/
|
||||||
|
@ -82,8 +94,13 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
|
|
||||||
public TileTesla()
|
public TileTesla()
|
||||||
{
|
{
|
||||||
this.energy = new EnergyStorageHandler(TRANSFER_CAP);
|
super(Material.iron);
|
||||||
this.saveIOMap = true;
|
setCapacity(TRANSFER_CAP * 2);
|
||||||
|
setMaxTransfer(TRANSFER_CAP);
|
||||||
|
setTextureName(Reference.prefix() + "material_metal_side");
|
||||||
|
normalRender(false);
|
||||||
|
isOpaqueCube(false);
|
||||||
|
//this.saveIOMap(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -94,20 +111,18 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.
|
* Only transfer if it is the controlling Tesla tower.
|
||||||
*/
|
*/
|
||||||
if (this.getMultiBlock().isPrimary())
|
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 TileTesla topTesla = this.getTopTelsa();
|
||||||
final Vector3 topTeslaVector = new Vector3(topTesla);
|
final Vector3 topTeslaVector = new Vector3(topTesla);
|
||||||
|
@ -127,18 +142,18 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
|
|
||||||
if (transferTile instanceof TileTesla && !transferTile.isInvalid())
|
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
|
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
|
else
|
||||||
|
@ -146,7 +161,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
/**
|
/**
|
||||||
* Normal transportation
|
* 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)
|
public int compare(ITesla o1, ITesla o2)
|
||||||
{
|
{
|
||||||
|
@ -164,12 +179,6 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int compare(Object obj, Object obj1)
|
|
||||||
{
|
|
||||||
return compare((ITesla) obj, (ITesla) obj1);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
for (ITesla otherTesla : TeslaGrid.instance().get())
|
for (ITesla otherTesla : TeslaGrid.instance().get())
|
||||||
|
@ -198,7 +207,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
|
|
||||||
if (teslaToTransfer.size() > 0)
|
if (teslaToTransfer.size() > 0)
|
||||||
{
|
{
|
||||||
long transferEnergy = this.energy.getEnergy() / teslaToTransfer.size();
|
double transferEnergy = this.energy().getEnergy() / teslaToTransfer.size();
|
||||||
|
|
||||||
boolean sentPacket = false;
|
boolean sentPacket = false;
|
||||||
|
|
||||||
|
@ -208,9 +217,9 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
{
|
{
|
||||||
ITesla tesla = teslaToTransfer.poll();
|
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);
|
Vector3 targetVector = new Vector3((TileEntity) tesla);
|
||||||
|
@ -225,7 +234,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
|
|
||||||
double distance = topTeslaVector.distance(targetVector);
|
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));
|
this.transfer(tesla, Math.min(transferEnergy, TRANSFER_CAP));
|
||||||
|
|
||||||
|
@ -233,20 +242,6 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
{
|
{
|
||||||
this.sendPacket(3);
|
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;
|
this.doTransfer = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.worldObj.isRemote && this.energy.didEnergyStateChange())
|
if (!this.worldObj.isRemote && this.energy().didEnergyStateChange())
|
||||||
{
|
{
|
||||||
this.sendPacket(2);
|
this.sendPacket(2);
|
||||||
}
|
}
|
||||||
|
@ -267,7 +262,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
this.topCache = null;
|
this.topCache = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void transfer(ITesla tesla, long transferEnergy)
|
private void transfer(ITesla tesla, double transferEnergy)
|
||||||
{
|
{
|
||||||
if (transferEnergy > 0)
|
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)
|
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
|
@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
|
* 2 - Energy Update
|
||||||
* 3 - Tesla Beam
|
* 3 - Tesla Beam
|
||||||
*/
|
*/
|
||||||
@Override
|
|
||||||
public ArrayList getPacketData(int type)
|
public ArrayList getPacketData(int type)
|
||||||
{
|
{
|
||||||
ArrayList data = new ArrayList();
|
ArrayList data = new ArrayList();
|
||||||
|
@ -337,7 +325,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
data.add(this.energy.getEnergy() > 0);
|
data.add(this.energy().getEnergy() > 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -346,7 +334,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
|
public void read(ByteBuf data, EntityPlayer player, PacketType type)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -357,7 +345,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
this.canReceive = data.readBoolean();
|
this.canReceive = data.readBoolean();
|
||||||
this.attackEntities = data.readBoolean();
|
this.attackEntities = data.readBoolean();
|
||||||
this.isLinkedClient = data.readBoolean();
|
this.isLinkedClient = data.readBoolean();
|
||||||
getMultiBlock().load(PacketHandler.readNBTTagCompound(data));
|
getMultiBlock().load(ByteBufUtils.readTag(data));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
this.isTransfering = data.readBoolean();
|
this.isTransfering = data.readBoolean();
|
||||||
|
@ -373,15 +361,15 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long teslaTransfer(long transferEnergy, boolean doTransfer)
|
public double teslaTransfer(double transferEnergy, boolean doTransfer)
|
||||||
{
|
{
|
||||||
if (getMultiBlock().isPrimary())
|
if (getMultiBlock().isPrimary())
|
||||||
{
|
{
|
||||||
if (doTransfer)
|
if (doTransfer)
|
||||||
{
|
{
|
||||||
this.energy.receiveEnergy(transferEnergy, true);
|
this.energy().receiveEnergy(transferEnergy, true);
|
||||||
|
|
||||||
if (this.energy.didEnergyStateChange())
|
if (this.energy().didEnergyStateChange())
|
||||||
{
|
{
|
||||||
this.sendPacket(2);
|
this.sendPacket(2);
|
||||||
}
|
}
|
||||||
|
@ -391,10 +379,10 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (this.energy.getEnergy() > 0)
|
if (this.energy().getEnergy() > 0)
|
||||||
{
|
{
|
||||||
transferEnergy += this.energy.getEnergy();
|
transferEnergy += this.energy().getEnergy();
|
||||||
this.energy.setEnergy(0);
|
this.energy().setEnergy(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return getMultiBlock().get().teslaTransfer(transferEnergy, doTransfer);
|
return getMultiBlock().get().teslaTransfer(transferEnergy, doTransfer);
|
||||||
|
@ -459,7 +447,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkPosition.y++;
|
checkPosition.add(0, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.topCache = returnTile;
|
this.topCache = returnTile;
|
||||||
|
@ -552,9 +540,9 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
|
|
||||||
if (this.linked != null)
|
if (this.linked != null)
|
||||||
{
|
{
|
||||||
nbt.setInteger("link_x", (int) this.linked.x);
|
nbt.setInteger("link_x", (int) this.linked.x());
|
||||||
nbt.setInteger("link_y", (int) this.linked.y);
|
nbt.setInteger("link_y", (int) this.linked.y());
|
||||||
nbt.setInteger("link_z", (int) this.linked.z);
|
nbt.setInteger("link_z", (int) this.linked.z());
|
||||||
nbt.setInteger("linkDim", this.linkDim);
|
nbt.setInteger("linkDim", this.linkDim);
|
||||||
}
|
}
|
||||||
getMultiBlock().save(nbt);
|
getMultiBlock().save(nbt);
|
||||||
|
@ -601,7 +589,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
{
|
{
|
||||||
if (vector.getTileEntity() instanceof TileTesla)
|
if (vector.getTileEntity() instanceof TileTesla)
|
||||||
{
|
{
|
||||||
setLink(vector, vector.world.provider.dimensionId, true);
|
setLink(vector, vector.world().provider.dimensionId, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -610,10 +598,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Multiblock Methods.
|
|
||||||
*/
|
|
||||||
private MultiBlockHandler<TileTesla> multiBlock;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMultiBlockChanged()
|
public void onMultiBlockChanged()
|
||||||
|
@ -641,7 +626,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkPosition.y++;
|
checkPosition.add(0, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return vectors.toArray(new Vector3[0]);
|
return vectors.toArray(new Vector3[0]);
|
||||||
|
@ -665,7 +650,7 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
checkPosition.y--;
|
checkPosition.add(0, -1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return lowest;
|
return lowest;
|
||||||
|
@ -717,10 +702,81 @@ public class TileTesla extends TileElectrical implements IMultiBlockStructure<Ti
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EnumSet<ForgeDirection> getOutputDirections()
|
public boolean use(EntityPlayer entityPlayer, int side, Vector3 hit)
|
||||||
{
|
{
|
||||||
EnumSet<ForgeDirection> dirs = super.getOutputDirections();
|
if (entityPlayer.getCurrentEquippedItem() != null)
|
||||||
dirs.remove(ForgeDirection.UP);
|
{
|
||||||
return dirs;
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue