diff --git a/src/main/java/net/anvilcraft/pccompat/PCCompat.java b/src/main/java/net/anvilcraft/pccompat/PCCompat.java index 7215bc3..f63fa06 100644 --- a/src/main/java/net/anvilcraft/pccompat/PCCompat.java +++ b/src/main/java/net/anvilcraft/pccompat/PCCompat.java @@ -14,6 +14,7 @@ import net.anvilcraft.pccompat.mods.GregTechProxy; import net.anvilcraft.pccompat.mods.HBMProxy; import net.anvilcraft.pccompat.mods.ProjectRedProxy; import net.anvilcraft.pccompat.mods.RedPowerProxy; +import net.anvilcraft.pccompat.mods.UltraTechProxy; import net.anvilcraft.pccompat.mods.UniversalElectricityProxy; @Mod( @@ -21,7 +22,7 @@ import net.anvilcraft.pccompat.mods.UniversalElectricityProxy; name = "PC Compat", version = "0.1.0", dependencies - = "required-after:PowerConverters3;after:basiccomponents;after:appliedenergistics2;after:hbm;after:RedPowerCore;after:ProjRed|Expansion;after:gregtech" + = "required-after:PowerConverters3;after:basiccomponents;after:appliedenergistics2;after:hbm;after:RedPowerCore;after:ProjRed|Expansion;after:gregtech;after:UltraTech" ) public class PCCompat { public static HashSet mods = new HashSet<>(); @@ -64,5 +65,7 @@ public class PCCompat { mods.add(new ProjectRedProxy()); if (Loader.isModLoaded("gregtech")) mods.add(new GregTechProxy()); + if (Loader.isModLoaded("UltraTech")) + mods.add(new UltraTechProxy()); } } diff --git a/src/main/java/net/anvilcraft/pccompat/blocks/BlockPowerConverterUltraTech.java b/src/main/java/net/anvilcraft/pccompat/blocks/BlockPowerConverterUltraTech.java new file mode 100644 index 0000000..ebf94d4 --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/blocks/BlockPowerConverterUltraTech.java @@ -0,0 +1,28 @@ +package net.anvilcraft.pccompat.blocks; + +import covers1624.powerconverters.block.BlockPowerConverter; +import covers1624.powerconverters.gui.PCCreativeTab; +import net.anvilcraft.pccompat.Utils; +import net.anvilcraft.pccompat.tiles.TileEntityUltraTechConsumer; +import net.anvilcraft.pccompat.tiles.TileEntityUltraTechProducer; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockPowerConverterUltraTech extends BlockPowerConverter { + public BlockPowerConverterUltraTech() { + super(2); // 1 Consumer, 1 Producer + this.setCreativeTab(PCCreativeTab.tab); + } + + @Override + public void registerBlockIcons(IIconRegister reg) { + Utils.registerStandardPowerConverterBlockIcons(reg, this._icons, "ut"); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return meta == 0 ? new TileEntityUltraTechConsumer() + : new TileEntityUltraTechProducer(); + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/items/ItemBlockPowerConverterUltraTech.java b/src/main/java/net/anvilcraft/pccompat/items/ItemBlockPowerConverterUltraTech.java new file mode 100644 index 0000000..7a0c6fe --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/items/ItemBlockPowerConverterUltraTech.java @@ -0,0 +1,14 @@ +package net.anvilcraft.pccompat.items; + +import net.minecraft.block.Block; + +public class ItemBlockPowerConverterUltraTech extends AbstractItemBlockPowerConverter { + public ItemBlockPowerConverterUltraTech(Block block) { + super(block); + } + + @Override + public String getModPrefix() { + return "ut"; + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/mods/UltraTechProxy.java b/src/main/java/net/anvilcraft/pccompat/mods/UltraTechProxy.java new file mode 100644 index 0000000..979bcb1 --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/mods/UltraTechProxy.java @@ -0,0 +1,45 @@ +package net.anvilcraft.pccompat.mods; + +import covers1624.powerconverters.api.registry.PowerSystemRegistry; +import covers1624.powerconverters.api.registry.PowerSystemRegistry.PowerSystem; +import cpw.mods.fml.common.registry.GameRegistry; +import net.anvilcraft.pccompat.IModProxy; +import net.anvilcraft.pccompat.blocks.BlockPowerConverterUltraTech; +import net.anvilcraft.pccompat.items.ItemBlockPowerConverterUltraTech; +import net.anvilcraft.pccompat.tiles.TileEntityUltraTechConsumer; +import net.anvilcraft.pccompat.tiles.TileEntityUltraTechProducer; +import net.minecraft.block.Block; + +public class UltraTechProxy implements IModProxy { + public static PowerSystem powerSystem; + public static Block blockPowerConverter; + + @Override + public void registerPowerSystem() { + PowerSystemRegistry.registerPowerSystem( + powerSystem = new PowerSystem("Quantum Power", "QP", 20000, "QP/t") + ); + } + + @Override + public void registerBlocks() { + GameRegistry.registerBlock( + blockPowerConverter = new BlockPowerConverterUltraTech(), + ItemBlockPowerConverterUltraTech.class, + "power_converter_ultra_tech" + ); + } + + @Override + public void registerTiles() { + GameRegistry.registerTileEntity( + TileEntityUltraTechConsumer.class, "ultra_tech_consumer" + ); + GameRegistry.registerTileEntity( + TileEntityUltraTechProducer.class, "ultra_tech_producer" + ); + } + + @Override + public void registerRecipes() {} +} diff --git a/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUltraTechConsumer.java b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUltraTechConsumer.java new file mode 100644 index 0000000..324f67e --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUltraTechConsumer.java @@ -0,0 +1,101 @@ +package net.anvilcraft.pccompat.tiles; + +import covers1624.powerconverters.tile.main.TileEntityEnergyConsumer; +import net.anvilcraft.pccompat.mods.UltraTechProxy; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import ultratech.api.power.NetworkManagerRegistry; +import ultratech.api.power.PowerInterface; +import ultratech.api.power.StorageInterface; +import ultratech.api.power.StorageInterface.PowerIO; +import ultratech.api.power.interfaces.ICable; +import ultratech.api.power.interfaces.IPowerConductor; +import ultratech.api.power.prefab.CableInterfaceBlock; + +public class TileEntityUltraTechConsumer + extends TileEntityEnergyConsumer implements IPowerConductor { + private double lastTransfer; + private StorageInterface interf; + + public TileEntityUltraTechConsumer() { + super(UltraTechProxy.powerSystem, 0, IPowerConductor.class); + this.interf + = new StorageInterface(this, new CableInterfaceBlock(this), 10000, 1); + this.interf.configIO = PowerIO.Input; + } + + @Override + public void updateEntity() { + super.updateEntity(); + this.interf.MachineUpdate(); + + if (this.worldObj.isRemote) + return; + + double demand + = this.getTotalEnergyDemand() / this.getPowerSystem().getScaleAmmount(); + double toConsume = Math.min(demand, this.interf.getCharge()); + this.interf.removeCharge(toConsume); + this.storeEnergy(toConsume * this.getPowerSystem().getScaleAmmount(), false); + this.lastTransfer = toConsume; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.interf.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + this.interf.writeToNBT(nbt); + } + + @Override + public boolean isSideConnected(int side_) { + ForgeDirection side = ForgeDirection.getOrientation(side_); + TileEntity adjTE = this.worldObj.getTileEntity( + this.xCoord + side.offsetX, + this.yCoord + side.offsetY, + this.zCoord + side.offsetZ + ); + + if (adjTE instanceof IPowerConductor) + return true; + + if (adjTE == null) + return false; + + for (ICable cable : NetworkManagerRegistry.getConnections(adjTE)) + if (cable.shouldConnectWithThis(this.interf.getCable(), side.getOpposite())) + return true; + + return false; + } + + @Override + public boolean isSideConnectedClient(int side) { + return this.isSideConnected(side); + } + + @Override + public boolean isConnected() { + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + if (this.isSideConnected(dir.ordinal())) + return true; + + return false; + } + + @Override + public PowerInterface getPower() { + return this.interf; + } + + @Override + public double getInputRate() { + return lastTransfer; + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUltraTechProducer.java b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUltraTechProducer.java new file mode 100644 index 0000000..a5f7c6f --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityUltraTechProducer.java @@ -0,0 +1,95 @@ +package net.anvilcraft.pccompat.tiles; + +import covers1624.powerconverters.tile.main.TileEntityEnergyProducer; +import net.anvilcraft.pccompat.mods.UltraTechProxy; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import ultratech.api.power.NetworkManagerRegistry; +import ultratech.api.power.PowerInterface; +import ultratech.api.power.StorageInterface; +import ultratech.api.power.StorageInterface.PowerIO; +import ultratech.api.power.interfaces.ICable; +import ultratech.api.power.interfaces.IPowerConductor; +import ultratech.api.power.prefab.CableInterfaceBlock; + +public class TileEntityUltraTechProducer + extends TileEntityEnergyProducer implements IPowerConductor { + private StorageInterface interf; + + public TileEntityUltraTechProducer() { + super(UltraTechProxy.powerSystem, 0, IPowerConductor.class); + this.interf = new StorageInterface(this, new CableInterfaceBlock(this), 10000, 1); + this.interf.configIO = PowerIO.Output; + } + + @Override + public void updateEntity() { + super.updateEntity(); + this.interf.MachineUpdate(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.interf.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + this.interf.writeToNBT(nbt); + } + + @Override + public boolean isSideConnected(int side_) { + ForgeDirection side = ForgeDirection.getOrientation(side_); + TileEntity adjTE = this.worldObj.getTileEntity( + this.xCoord + side.offsetX, + this.yCoord + side.offsetY, + this.zCoord + side.offsetZ + ); + + if (adjTE instanceof IPowerConductor) + return true; + + if (adjTE == null) + return false; + + for (ICable cable : NetworkManagerRegistry.getConnections(adjTE)) + if (cable.shouldConnectWithThis(this.interf.getCable(), side.getOpposite())) + return true; + + return false; + } + + @Override + public boolean isSideConnectedClient(int side) { + return this.isSideConnected(side); + } + + @Override + public boolean isConnected() { + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + if (this.isSideConnected(dir.ordinal())) + return true; + + return false; + } + + @Override + public PowerInterface getPower() { + return this.interf; + } + + @Override + public double produceEnergy(double energy) { + double toProduce = Math.min( + energy / this.getPowerSystem().getScaleAmmount(), + this.interf.getCapacity() - this.interf.getCharge() + ); + this.interf.addCharge(toProduce); + + return energy - toProduce * this.getPowerSystem().getScaleAmmount(); + } +} diff --git a/src/main/resources/assets/pccompat/lang/en_US.lang b/src/main/resources/assets/pccompat/lang/en_US.lang index b909e4c..80b460d 100644 --- a/src/main/resources/assets/pccompat/lang/en_US.lang +++ b/src/main/resources/assets/pccompat/lang/en_US.lang @@ -19,11 +19,14 @@ pccompat:power_converter_rp_1.name=Bluetricity Producer pccompat:power_converter_pr_0.name=Bluetricity Consumer pccompat:power_converter_pr_1.name=Bluetricity Producer -pccompat:power_converter_gregtech_0.name=GregTech LV Consumer -pccompat:power_converter_gregtech_1.name=GregTech LV Producer -pccompat:power_converter_gregtech_2.name=GregTech MV Consumer -pccompat:power_converter_gregtech_3.name=GregTech MV Producer -pccompat:power_converter_gregtech_4.name=GregTech HV Consumer -pccompat:power_converter_gregtech_5.name=GregTech HV Producer -pccompat:power_converter_gregtech_6.name=GregTech EV Consumer -pccompat:power_converter_gregtech_7.name=GregTech EV Producer +pccompat:power_converter_gt_0.name=GregTech LV Consumer +pccompat:power_converter_gt_1.name=GregTech LV Producer +pccompat:power_converter_gt_2.name=GregTech MV Consumer +pccompat:power_converter_gt_3.name=GregTech MV Producer +pccompat:power_converter_gt_4.name=GregTech HV Consumer +pccompat:power_converter_gt_5.name=GregTech HV Producer +pccompat:power_converter_gt_6.name=GregTech EV Consumer +pccompat:power_converter_gt_7.name=GregTech EV Producer + +pccompat:power_converter_ut_0.name=Quantum Power Consumer +pccompat:power_converter_ut_1.name=Quantum Power Producer