feat: AE2 compat (currently no textures)

closes #9
This commit is contained in:
Timo Ley 2023-06-17 13:33:59 +02:00
parent 9d3f087599
commit 5fc343166a
8 changed files with 349 additions and 0 deletions

View file

@ -45,6 +45,7 @@ dependencies {
implementation "cofh:CoFHCore:[1.7.10]3.1.4-329:dev"
implementation "universalelectricity:universalelectricity:5.2.2:deobf"
implementation "universalelectricity:basiccomponents:2.0.1:deobf"
implementation "appeng:appliedenergistics2:rv3-beta-21:dev"
}
processResources {

View file

@ -9,6 +9,7 @@ import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import net.anvilcraft.pccompat.mods.AppliedEnergisticsProxy;
import net.anvilcraft.pccompat.mods.UniversalElectricityProxy;
@Mod(
@ -48,5 +49,7 @@ public class PCCompat {
private static void collectMods() {
if (Loader.isModLoaded("basiccomponents"))
mods.add(new UniversalElectricityProxy());
if (Loader.isModLoaded("appliedenergistics2"))
mods.add(new AppliedEnergisticsProxy());
}
}

View file

@ -0,0 +1,22 @@
package net.anvilcraft.pccompat.blocks;
import covers1624.powerconverters.block.BlockPowerConverter;
import covers1624.powerconverters.gui.PCCreativeTab;
import net.anvilcraft.pccompat.tiles.TileEntityAppliedEnergisticsConsumer;
import net.anvilcraft.pccompat.tiles.TileEntityAppliedEnergisticsProducer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockPowerConverterAppliedEnergistics extends BlockPowerConverter {
public BlockPowerConverterAppliedEnergistics() {
super(2);
this.setCreativeTab(PCCreativeTab.tab);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return meta == 0 ? new TileEntityAppliedEnergisticsProducer() : new TileEntityAppliedEnergisticsConsumer();
}
}

View file

@ -0,0 +1,40 @@
package net.anvilcraft.pccompat.items;
import java.util.List;
import java.util.stream.IntStream;
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
public class ItemBlockPowerConverterAppliedEnergistics extends ItemBlock {
public ItemBlockPowerConverterAppliedEnergistics(Block block) {
super(block);
this.setHasSubtypes(true);
this.setMaxDamage(0);
}
@Override
public int getMetadata(int meta) {
return meta;
}
@Override
public String getUnlocalizedName(ItemStack stack) {
int meta = stack.getItemDamage();
return "pccompat:power_converter_ae_" + meta;
}
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public void getSubItems(Item alec1, CreativeTabs alec2, List list) {
IntStream.range(0, 2)
.mapToObj((i) -> new ItemStack(this, 1, i))
.forEach(list::add);
}
}

View file

@ -0,0 +1,46 @@
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.BlockPowerConverterAppliedEnergistics;
import net.anvilcraft.pccompat.items.ItemBlockPowerConverterAppliedEnergistics;
import net.anvilcraft.pccompat.tiles.TileEntityAppliedEnergisticsConsumer;
import net.anvilcraft.pccompat.tiles.TileEntityAppliedEnergisticsProducer;
import net.minecraft.block.Block;
public class AppliedEnergisticsProxy implements IModProxy {
public static PowerSystem powerSystem;
public static Block blockPowerConverter;
@Override
public void registerPowerSystem() {
PowerSystemRegistry.registerPowerSystem(
powerSystem = new PowerSystem(
"Applied Energistics",
"AE",
2000,
"AE"
)
);
}
@Override
public void registerBlocks() {
GameRegistry.registerBlock(blockPowerConverter = new BlockPowerConverterAppliedEnergistics(), ItemBlockPowerConverterAppliedEnergistics.class, "power_converter_applied_energistics");
}
@Override
public void registerTiles() {
GameRegistry.registerTileEntity(TileEntityAppliedEnergisticsConsumer.class, "applied_energistics_consumer");
GameRegistry.registerTileEntity(TileEntityAppliedEnergisticsProducer.class, "applied_energistics_producer");
}
@Override
public void registerRecipes() {
}
}

View file

@ -0,0 +1,120 @@
package net.anvilcraft.pccompat.tiles;
import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.networking.IGridHost;
import appeng.api.networking.IGridNode;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.util.AECableType;
import appeng.api.util.DimensionalCoord;
import appeng.me.GridAccessException;
import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.IGridProxyable;
import covers1624.powerconverters.tile.main.TileEntityEnergyConsumer;
import net.anvilcraft.pccompat.mods.AppliedEnergisticsProxy;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityAppliedEnergisticsConsumer extends TileEntityEnergyConsumer<IGridHost> implements IGridProxyable {
private AENetworkProxy proxy;
private boolean init = false;
private double lastInserted = 0.0;
public TileEntityAppliedEnergisticsConsumer() {
super(AppliedEnergisticsProxy.powerSystem, 0, IGridHost.class);
this.proxy = new AENetworkProxy(this, "proxy", new ItemStack(AppliedEnergisticsProxy.blockPowerConverter, 1, 1), true);
this.proxy.setIdlePowerUsage(0.0);
}
@Override
public double getInputRate() {
return lastInserted;
}
@Override
public IGridNode getGridNode(ForgeDirection dir) {
return this.getProxy().getNode();
}
@Override
public AECableType getCableConnectionType(ForgeDirection dir) {
return AECableType.GLASS;
}
@Override
public void securityBreak() {
this.worldObj.func_147480_a(this.xCoord, this.yCoord, this.zCoord, true);
}
@Override
public AENetworkProxy getProxy() {
return this.proxy;
}
@Override
public DimensionalCoord getLocation() {
return new DimensionalCoord(this);
}
@Override
public void gridChanged() {
}
@Override
public void readFromNBT(NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound);
this.getProxy().readFromNBT(tagCompound);
}
@Override
public void writeToNBT(NBTTagCompound tagCompound) {
super.writeToNBT(tagCompound);
this.getProxy().writeToNBT(tagCompound);
}
@Override
public void onChunkUnload() {
super.onChunkUnload();
this.getProxy().onChunkUnload();
}
@Override
public void invalidate() {
super.invalidate();
this.getProxy().invalidate();
}
@Override
public void validate() {
super.validate();
this.getProxy().validate();
}
@Override
public void updateEntity() {
super.updateEntity();
if (!init) {
init = true;
this.getProxy().onReady();
}
if (this.worldObj.isRemote) return;
double aeDemand = this.getTotalEnergyDemand() / this.getPowerSystem().getScaleAmmount();
try {
IEnergyGrid grid = this.getProxy().getEnergy();
double extracted = grid.extractAEPower(aeDemand, Actionable.MODULATE, PowerMultiplier.ONE);
this.storeEnergy(MathHelper.floor_double(extracted * this.getPowerSystem().getScaleAmmount()), false);
this.lastInserted = extracted;
} catch (GridAccessException e) {
// :P
lastInserted = 0.0;
}
}
}

View file

@ -0,0 +1,114 @@
package net.anvilcraft.pccompat.tiles;
import appeng.api.config.Actionable;
import appeng.api.networking.IGridHost;
import appeng.api.networking.IGridNode;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.util.AECableType;
import appeng.api.util.DimensionalCoord;
import appeng.me.GridAccessException;
import appeng.me.helpers.AENetworkProxy;
import appeng.me.helpers.IGridProxyable;
import covers1624.powerconverters.tile.main.TileEntityEnergyProducer;
import net.anvilcraft.pccompat.mods.AppliedEnergisticsProxy;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityAppliedEnergisticsProducer extends TileEntityEnergyProducer<IGridHost> implements IGridProxyable {
private AENetworkProxy proxy;
private boolean init = false;
public TileEntityAppliedEnergisticsProducer() {
super(AppliedEnergisticsProxy.powerSystem, 0, IGridHost.class);
this.proxy = new AENetworkProxy(this, "proxy", new ItemStack(AppliedEnergisticsProxy.blockPowerConverter, 1, 0), true);
this.proxy.setIdlePowerUsage(0.0);
}
@Override
public double produceEnergy(double energy) {
double ae = energy / this.getPowerSystem().getScaleAmmount();
try {
IEnergyGrid grid = this.getProxy().getEnergy();
double toInject = Math.min(Math.min(ae, grid.getEnergyDemand(ae)), 10000.0);
ae -= toInject;
grid.injectPower(toInject, Actionable.MODULATE);
} catch (GridAccessException e) {
// :P
}
return MathHelper.floor_double(ae * this.getPowerSystem().getScaleAmmount());
}
@Override
public IGridNode getGridNode(ForgeDirection dir) {
return this.getProxy().getNode();
}
@Override
public AECableType getCableConnectionType(ForgeDirection dir) {
return AECableType.GLASS;
}
@Override
public void securityBreak() {
this.worldObj.func_147480_a(this.xCoord, this.yCoord, this.zCoord, true);
}
@Override
public AENetworkProxy getProxy() {
return this.proxy;
}
@Override
public DimensionalCoord getLocation() {
return new DimensionalCoord(this);
}
@Override
public void gridChanged() {
}
@Override
public void readFromNBT(NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound);
this.getProxy().readFromNBT(tagCompound);
}
@Override
public void writeToNBT(NBTTagCompound tagCompound) {
super.writeToNBT(tagCompound);
this.getProxy().writeToNBT(tagCompound);
}
@Override
public void onChunkUnload() {
super.onChunkUnload();
this.getProxy().onChunkUnload();
}
@Override
public void invalidate() {
super.invalidate();
this.getProxy().invalidate();
}
@Override
public void validate() {
super.validate();
this.getProxy().validate();
}
@Override
public void updateEntity() {
super.updateEntity();
if (!init) {
init = true;
this.getProxy().onReady();
}
}
}

View file

@ -6,3 +6,6 @@ pccompat:power_converter_ue_4.name=UE 240V Consumer
pccompat:power_converter_ue_5.name=UE 240V Producer
pccompat:power_converter_ue_6.name=UE 480V Consumer
pccompat:power_converter_ue_7.name=UE 480V Producer
pccompat:power_converter_ae_0.name=AE Producer
pccompat:power_converter_ae_1.name=AE Consumer