From f812442a4f88700f2a84b83bf368e9e041816f65 Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Thu, 27 Jul 2023 18:16:33 +0200 Subject: [PATCH] feat: Magneticraft converters --- .../net/anvilcraft/pccompat/PCCompat.java | 5 +- .../BlockPowerConverterMagneticraft.java | 28 ++++++ .../ItemBlockPowerConverterMagneticraft.java | 14 +++ .../pccompat/mods/MagneticraftProxy.java | 45 +++++++++ .../tiles/TileEntityMagneticraftConsumer.java | 97 +++++++++++++++++++ .../tiles/TileEntityMagneticraftProducer.java | 95 ++++++++++++++++++ .../resources/assets/pccompat/lang/en_US.lang | 3 + 7 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/anvilcraft/pccompat/blocks/BlockPowerConverterMagneticraft.java create mode 100644 src/main/java/net/anvilcraft/pccompat/items/ItemBlockPowerConverterMagneticraft.java create mode 100644 src/main/java/net/anvilcraft/pccompat/mods/MagneticraftProxy.java create mode 100644 src/main/java/net/anvilcraft/pccompat/tiles/TileEntityMagneticraftConsumer.java create mode 100644 src/main/java/net/anvilcraft/pccompat/tiles/TileEntityMagneticraftProducer.java diff --git a/src/main/java/net/anvilcraft/pccompat/PCCompat.java b/src/main/java/net/anvilcraft/pccompat/PCCompat.java index dd69ba5..0399437 100644 --- a/src/main/java/net/anvilcraft/pccompat/PCCompat.java +++ b/src/main/java/net/anvilcraft/pccompat/PCCompat.java @@ -12,6 +12,7 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import net.anvilcraft.pccompat.mods.AppliedEnergisticsProxy; import net.anvilcraft.pccompat.mods.GregTechProxy; import net.anvilcraft.pccompat.mods.HBMProxy; +import net.anvilcraft.pccompat.mods.MagneticraftProxy; import net.anvilcraft.pccompat.mods.ProjectRedProxy; import net.anvilcraft.pccompat.mods.RailcraftProxy; import net.anvilcraft.pccompat.mods.RedPowerProxy; @@ -23,7 +24,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;after:UltraTech;after:Railcraft" + = "required-after:PowerConverters3;after:basiccomponents;after:appliedenergistics2;after:hbm;after:RedPowerCore;after:ProjRed|Expansion;after:gregtech;after:UltraTech;after:Railcraft;after:Magneticraft" ) public class PCCompat { public static HashSet mods = new HashSet<>(); @@ -70,5 +71,7 @@ public class PCCompat { mods.add(new UltraTechProxy()); if (Loader.isModLoaded("Railcraft")) mods.add(new RailcraftProxy()); + if (Loader.isModLoaded("Magneticraft")) + mods.add(new MagneticraftProxy()); } } diff --git a/src/main/java/net/anvilcraft/pccompat/blocks/BlockPowerConverterMagneticraft.java b/src/main/java/net/anvilcraft/pccompat/blocks/BlockPowerConverterMagneticraft.java new file mode 100644 index 0000000..9f8a6ee --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/blocks/BlockPowerConverterMagneticraft.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.TileEntityMagneticraftConsumer; +import net.anvilcraft.pccompat.tiles.TileEntityMagneticraftProducer; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockPowerConverterMagneticraft extends BlockPowerConverter { + public BlockPowerConverterMagneticraft() { + super(2); // 1 Consumer, 1 Producer + this.setCreativeTab(PCCreativeTab.tab); + } + + @Override + public void registerBlockIcons(IIconRegister reg) { + Utils.registerStandardPowerConverterBlockIcons(reg, this._icons, "mc"); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return meta == 0 ? new TileEntityMagneticraftConsumer() + : new TileEntityMagneticraftProducer(); + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/items/ItemBlockPowerConverterMagneticraft.java b/src/main/java/net/anvilcraft/pccompat/items/ItemBlockPowerConverterMagneticraft.java new file mode 100644 index 0000000..fd3453f --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/items/ItemBlockPowerConverterMagneticraft.java @@ -0,0 +1,14 @@ +package net.anvilcraft.pccompat.items; + +import net.minecraft.block.Block; + +public class ItemBlockPowerConverterMagneticraft extends AbstractItemBlockPowerConverter { + public ItemBlockPowerConverterMagneticraft(Block block) { + super(block); + } + + @Override + public String getModPrefix() { + return "mc"; + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/mods/MagneticraftProxy.java b/src/main/java/net/anvilcraft/pccompat/mods/MagneticraftProxy.java new file mode 100644 index 0000000..1fbd055 --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/mods/MagneticraftProxy.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.BlockPowerConverterMagneticraft; +import net.anvilcraft.pccompat.items.ItemBlockPowerConverterMagneticraft; +import net.anvilcraft.pccompat.tiles.TileEntityMagneticraftConsumer; +import net.anvilcraft.pccompat.tiles.TileEntityMagneticraftProducer; +import net.minecraft.block.Block; + +public class MagneticraftProxy implements IModProxy { + public static PowerSystem powerSystem; + public static Block blockPowerConverter; + + @Override + public void registerPowerSystem() { + PowerSystemRegistry.registerPowerSystem( + powerSystem = new PowerSystem("Joules", "J", 100, "W") + ); + } + + @Override + public void registerBlocks() { + GameRegistry.registerBlock( + blockPowerConverter = new BlockPowerConverterMagneticraft(), + ItemBlockPowerConverterMagneticraft.class, + "power_converter_magneticraft" + ); + } + + @Override + public void registerTiles() { + GameRegistry.registerTileEntity( + TileEntityMagneticraftConsumer.class, "magneticraft_consumber" + ); + GameRegistry.registerTileEntity( + TileEntityMagneticraftProducer.class, "magneticraft_producer" + ); + } + + @Override + public void registerRecipes() {} +} diff --git a/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityMagneticraftConsumer.java b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityMagneticraftConsumer.java new file mode 100644 index 0000000..54665f0 --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityMagneticraftConsumer.java @@ -0,0 +1,97 @@ +package net.anvilcraft.pccompat.tiles; + +import com.cout970.magneticraft.api.electricity.ElectricConstants; +import com.cout970.magneticraft.api.electricity.ElectricUtils; +import com.cout970.magneticraft.api.electricity.IElectricConductor; +import com.cout970.magneticraft.api.electricity.IElectricTile; +import com.cout970.magneticraft.api.electricity.prefab.BufferedConductor; +import com.cout970.magneticraft.api.util.MgDirection; +import com.cout970.magneticraft.api.util.VecInt; + +import covers1624.powerconverters.tile.main.TileEntityEnergyConsumer; +import net.anvilcraft.pccompat.mods.MagneticraftProxy; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityMagneticraftConsumer + extends TileEntityEnergyConsumer implements IElectricTile { + public double lastTransfer; + public IElectricConductor cond; + + public TileEntityMagneticraftConsumer() { + super(MagneticraftProxy.powerSystem, 0, IElectricTile.class); + this.cond = new BufferedConductor( + this, ElectricConstants.RESISTANCE_COPPER_LOW, 5000000, 0.0, 10.0 + ); + } + + @Override + public void updateEntity() { + super.updateEntity(); + if (this.worldObj.isRemote) + return; + + this.cond.recache(); + this.cond.iterate(); + + int toStore = (int) Math.min( + this.cond.getStorage(), + this.getTotalEnergyDemand() / this.getPowerSystem().getScaleAmmount() + ); + this.cond.drainCharge(toStore); + this.lastTransfer = toStore; + this.storeEnergy(toStore * this.getPowerSystem().getScaleAmmount(), false); + } + + @Override + public void onNeighboorChanged() { + super.onNeighboorChanged(); + this.cond.disconnect(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.cond.load(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + this.cond.save(nbt); + } + + @Override + public IElectricConductor[] getConds(VecInt arg0, int arg1) { + return new IElectricConductor[] { this.cond }; + } + + @Override + public double getInputRate() { + return this.lastTransfer; + } + + @Override + public boolean isSideConnected(int side_) { + MgDirection side = MgDirection.getDirection(side_); + IElectricConductor[] conds = ElectricUtils.getElectricCond( + new VecInt(this).add(side).getTileEntity(this.worldObj), VecInt.NULL_VECTOR, 0 + ); + + return conds != null && conds.length > 0; + } + + @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; + } +} diff --git a/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityMagneticraftProducer.java b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityMagneticraftProducer.java new file mode 100644 index 0000000..daa6f64 --- /dev/null +++ b/src/main/java/net/anvilcraft/pccompat/tiles/TileEntityMagneticraftProducer.java @@ -0,0 +1,95 @@ +package net.anvilcraft.pccompat.tiles; + +import com.cout970.magneticraft.api.electricity.ElectricConstants; +import com.cout970.magneticraft.api.electricity.ElectricUtils; +import com.cout970.magneticraft.api.electricity.IElectricConductor; +import com.cout970.magneticraft.api.electricity.IElectricTile; +import com.cout970.magneticraft.api.electricity.prefab.ElectricConductor; +import com.cout970.magneticraft.api.util.MgDirection; +import com.cout970.magneticraft.api.util.VecInt; + +import covers1624.powerconverters.tile.main.TileEntityEnergyProducer; +import net.anvilcraft.pccompat.mods.MagneticraftProxy; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityMagneticraftProducer + extends TileEntityEnergyProducer implements IElectricTile { + private IElectricConductor cond; + + public TileEntityMagneticraftProducer() { + super(MagneticraftProxy.powerSystem, 0, IElectricTile.class); + this.cond = new ElectricConductor(this); + } + + @Override + public IElectricConductor[] getConds(VecInt arg0, int arg1) { + return new IElectricConductor[] { this.cond }; + } + + @Override + public void onNeighboorChanged() { + super.onNeighboorChanged(); + this.cond.disconnect(); + } + + @Override + public void updateEntity() { + super.updateEntity(); + this.cond.recache(); + this.cond.iterate(); + } + + @Override + public double produceEnergy(double energy) { + if (this.cond.getVoltage() >= ElectricConstants.ALTERNATOR_DISCHARGE + || energy <= 0.0) + return energy; + + double joules = energy / this.getPowerSystem().getScaleAmmount(); + double alec = Math.min( + (ElectricConstants.ALTERNATOR_DISCHARGE - this.cond.getVoltage()) * 80, // WTF + Math.min(joules, 400) + ); + + this.cond.applyPower(alec); + + return energy - alec * this.getPowerSystem().getScaleAmmount(); + } + + @Override + public boolean isSideConnected(int side_) { + MgDirection side = MgDirection.getDirection(side_); + IElectricConductor[] conds = ElectricUtils.getElectricCond( + new VecInt(this).add(side).getTileEntity(this.worldObj), VecInt.NULL_VECTOR, 0 + ); + + return conds != null && conds.length > 0; + } + + @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 void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.cond.load(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + this.cond.save(nbt); + } +} diff --git a/src/main/resources/assets/pccompat/lang/en_US.lang b/src/main/resources/assets/pccompat/lang/en_US.lang index 4b043f9..af8636c 100644 --- a/src/main/resources/assets/pccompat/lang/en_US.lang +++ b/src/main/resources/assets/pccompat/lang/en_US.lang @@ -33,3 +33,6 @@ pccompat:power_converter_ut_1.name=Quantum Power Producer pccompat:power_converter_rc_0.name=Railcraft Consumer pccompat:power_converter_rc_1.name=Railcraft Producer + +pccompat:power_converter_mc_0.name=Magneticraft Consumer +pccompat:power_converter_mc_1.name=Magneticraft Producer