feat: implement railcraft converters

closes #5
This commit is contained in:
Timo Ley 2023-07-19 21:29:39 +02:00
parent 4e4b32d541
commit 8e257346ba
7 changed files with 221 additions and 1 deletions

View file

@ -13,6 +13,7 @@ import net.anvilcraft.pccompat.mods.AppliedEnergisticsProxy;
import net.anvilcraft.pccompat.mods.GregTechProxy;
import net.anvilcraft.pccompat.mods.HBMProxy;
import net.anvilcraft.pccompat.mods.ProjectRedProxy;
import net.anvilcraft.pccompat.mods.RailcraftProxy;
import net.anvilcraft.pccompat.mods.RedPowerProxy;
import net.anvilcraft.pccompat.mods.UltraTechProxy;
import net.anvilcraft.pccompat.mods.UniversalElectricityProxy;
@ -22,7 +23,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"
= "required-after:PowerConverters3;after:basiccomponents;after:appliedenergistics2;after:hbm;after:RedPowerCore;after:ProjRed|Expansion;after:gregtech;after:UltraTech;after:Railcraft"
)
public class PCCompat {
public static HashSet<IModProxy> mods = new HashSet<>();
@ -67,5 +68,7 @@ public class PCCompat {
mods.add(new GregTechProxy());
if (Loader.isModLoaded("UltraTech"))
mods.add(new UltraTechProxy());
if (Loader.isModLoaded("Railcraft"))
mods.add(new RailcraftProxy());
}
}

View file

@ -0,0 +1,30 @@
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.TileEntityRailcraftConsumer;
import net.anvilcraft.pccompat.tiles.TileEntityRailcraftProducer;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockPowerConverterRailcraft extends BlockPowerConverter {
public BlockPowerConverterRailcraft() {
super(2);
this.setCreativeTab(PCCreativeTab.tab);
}
@Override
public void registerBlockIcons(IIconRegister reg) {
Utils.registerStandardPowerConverterBlockIcons(reg, this._icons, "rc");
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return meta == 0 ? new TileEntityRailcraftConsumer()
: new TileEntityRailcraftProducer();
}
}

View file

@ -0,0 +1,16 @@
package net.anvilcraft.pccompat.items;
import net.minecraft.block.Block;
public class ItemBlockPowerConverterRailcraft extends AbstractItemBlockPowerConverter {
public ItemBlockPowerConverterRailcraft(Block block) {
super(block);
}
@Override
public String getModPrefix() {
return "rc";
}
}

View file

@ -0,0 +1,49 @@
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.BlockPowerConverterRailcraft;
import net.anvilcraft.pccompat.items.ItemBlockPowerConverterRailcraft;
import net.anvilcraft.pccompat.tiles.TileEntityRailcraftConsumer;
import net.anvilcraft.pccompat.tiles.TileEntityRailcraftProducer;
import net.minecraft.block.Block;
public class RailcraftProxy implements IModProxy {
public static PowerSystem powerSystem;
public static Block blockPowerConverter;
@Override
public void registerPowerSystem() {
PowerSystemRegistry.registerPowerSystem(
powerSystem = new PowerSystem("Railcraft", "Charge", 4000, "C")
);
}
@Override
public void registerBlocks() {
GameRegistry.registerBlock(
blockPowerConverter = new BlockPowerConverterRailcraft(),
ItemBlockPowerConverterRailcraft.class,
"power_converter_railcraft"
);
}
@Override
public void registerTiles() {
GameRegistry.registerTileEntity(
TileEntityRailcraftConsumer.class, "railcraft_consumer"
);
GameRegistry.registerTileEntity(
TileEntityRailcraftProducer.class, "railcraft_producer"
);
}
@Override
public void registerRecipes() {
}
}

View file

@ -0,0 +1,62 @@
package net.anvilcraft.pccompat.tiles;
import covers1624.powerconverters.tile.main.TileEntityEnergyConsumer;
import mods.railcraft.api.electricity.IElectricGrid;
import mods.railcraft.api.electricity.IElectricGrid.ChargeHandler.ConnectType;
import net.anvilcraft.pccompat.mods.RailcraftProxy;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
public class TileEntityRailcraftConsumer extends TileEntityEnergyConsumer<IElectricGrid> implements IElectricGrid {
private ChargeHandler chargeHandler;
private double lastTransfer = 0.0;
public TileEntityRailcraftConsumer() {
super(RailcraftProxy.powerSystem, 0, IElectricGrid.class);
this.chargeHandler = new ChargeHandler(this, ConnectType.BLOCK);
}
@Override
public ChargeHandler getChargeHandler() {
return this.chargeHandler;
}
@Override
public TileEntity getTile() {
return this;
}
@Override
public void readFromNBT(NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound);
this.chargeHandler.readFromNBT(tagCompound);
}
@Override
public void updateEntity() {
super.updateEntity();
if (!this.worldObj.isRemote) {
this.chargeHandler.tick();
double demand = this.getTotalEnergyDemand() / this.getPowerSystem().getScaleAmmount();
double consumed = 0;
if (demand > 0) {
consumed = this.chargeHandler.removeCharge(demand);
this.storeEnergy(consumed * this.getPowerSystem().getScaleAmmount(), false);
}
this.lastTransfer = consumed;
}
}
@Override
public void writeToNBT(NBTTagCompound tagCompound) {
super.writeToNBT(tagCompound);
this.chargeHandler.writeToNBT(tagCompound);
}
@Override
public double getInputRate() {
return this.lastTransfer;
}
}

View file

@ -0,0 +1,57 @@
package net.anvilcraft.pccompat.tiles;
import covers1624.powerconverters.tile.main.TileEntityEnergyProducer;
import mods.railcraft.api.electricity.IElectricGrid;
import mods.railcraft.api.electricity.IElectricGrid.ChargeHandler.ConnectType;
import net.anvilcraft.pccompat.mods.RailcraftProxy;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
public class TileEntityRailcraftProducer extends TileEntityEnergyProducer<IElectricGrid> implements IElectricGrid {
private ChargeHandler chargeHandler;
public TileEntityRailcraftProducer() {
super(RailcraftProxy.powerSystem, 0, IElectricGrid.class);
this.chargeHandler = new ChargeHandler(this, ConnectType.BLOCK);
}
@Override
public double produceEnergy(double energy) {
double charge = energy / this.getPowerSystem().getScaleAmmount();
double toProduce = Math.min(charge, this.chargeHandler.getCapacity() - this.chargeHandler.getCharge());
this.chargeHandler.addCharge(toProduce);
return energy - toProduce * this.getPowerSystem().getScaleAmmount();
}
@Override
public ChargeHandler getChargeHandler() {
return this.chargeHandler;
}
@Override
public TileEntity getTile() {
return this;
}
@Override
public void readFromNBT(NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound);
this.chargeHandler.readFromNBT(tagCompound);
}
@Override
public void updateEntity() {
super.updateEntity();
if (!this.worldObj.isRemote) {
this.chargeHandler.tick();
}
}
@Override
public void writeToNBT(NBTTagCompound tagCompound) {
super.writeToNBT(tagCompound);
this.chargeHandler.writeToNBT(tagCompound);
}
}

View file

@ -30,3 +30,6 @@ 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
pccompat:power_converter_rc_0.name=Railcraft Consumer
pccompat:power_converter_rc_1.name=Railcraft Producer