feat: implement ProjectRed converters

This commit is contained in:
LordMZTE 2023-07-14 20:08:33 +02:00
parent c473f2c255
commit 3a88ec952f
Signed by: LordMZTE
GPG key ID: B64802DC33A64FF6
16 changed files with 256 additions and 123 deletions

View file

@ -11,6 +11,7 @@ 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.HBMProxy;
import net.anvilcraft.pccompat.mods.ProjectRedProxy;
import net.anvilcraft.pccompat.mods.RedPowerProxy;
import net.anvilcraft.pccompat.mods.UniversalElectricityProxy;
@ -19,7 +20,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"
= "required-after:PowerConverters3;after:basiccomponents;after:appliedenergistics2;after:hbm;after:RedPowerCore;after:ProjRed|Expansion"
)
public class PCCompat {
public static HashSet<IModProxy> mods = new HashSet<>();
@ -28,7 +29,7 @@ public class PCCompat {
public static void preInit(FMLPreInitializationEvent ev) {
collectMods();
try {
// Fix IC2 scale "Ammount" due to mod outragous developer incompetence
// Fix IC2 scale "Ammount" due to outragous mod developer incompetence
Field field = PowerSystem.class.getDeclaredField("scaleAmmount");
field.setAccessible(true);
field.setInt(PowerSystems.powerSystemIndustrialCraft, 4000);
@ -58,5 +59,7 @@ public class PCCompat {
mods.add(new HBMProxy());
if (Loader.isModLoaded("RedPowerCore"))
mods.add(new RedPowerProxy());
if (Loader.isModLoaded("ProjRed|Expansion"))
mods.add(new ProjectRedProxy());
}
}

View file

@ -0,0 +1,18 @@
package net.anvilcraft.pccompat;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.util.IIcon;
public class Utils {
public static void registerStandardPowerConverterBlockIcons(
IIconRegister reg, IIcon[] icons, String modPrefix
) {
for (int i = 0; i < 4; i++) {
String state = i % 2 == 0 ? "off" : "on";
String type = i < 2 ? "consumer" : "producer";
icons[i]
= reg.registerIcon("pccompat:" + modPrefix + "_" + type + "_" + state);
}
}
}

View file

@ -2,6 +2,7 @@ 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.TileEntityAppliedEnergisticsConsumer;
import net.anvilcraft.pccompat.tiles.TileEntityAppliedEnergisticsProducer;
import net.minecraft.client.renderer.texture.IIconRegister;
@ -16,12 +17,7 @@ public class BlockPowerConverterAppliedEnergistics extends BlockPowerConverter {
@Override
public void registerBlockIcons(IIconRegister reg) {
for (int i = 0; i < 4; i++) {
String state = i % 2 == 0 ? "off" : "on";
String type = i < 2 ? "consumer" : "producer";
this._icons[i] = reg.registerIcon("pccompat:ae_" + type + "_" + state);
}
Utils.registerStandardPowerConverterBlockIcons(reg, this._icons, "ae");
}
@Override

View file

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

View file

@ -2,6 +2,7 @@ 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.TileEntityRedPowerConsumer;
import net.anvilcraft.pccompat.tiles.TileEntityRedPowerProducer;
import net.minecraft.client.renderer.texture.IIconRegister;
@ -16,12 +17,7 @@ public class BlockPowerConverterRedPower extends BlockPowerConverter {
@Override
public void registerBlockIcons(IIconRegister reg) {
for (int i = 0; i < 4; i++) {
String state = i % 2 == 0 ? "off" : "on";
String type = i < 2 ? "consumer" : "producer";
this._icons[i] = reg.registerIcon("pccompat:rp_" + type + "_" + state);
}
Utils.registerStandardPowerConverterBlockIcons(reg, this._icons, "rp");
}
@Override

View file

@ -0,0 +1,43 @@
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 abstract class AbstractItemBlockPowerConverter extends ItemBlock {
public AbstractItemBlockPowerConverter(Block block) {
super(block);
this.setHasSubtypes(true);
this.setMaxDamage(0);
}
public abstract String getModPrefix();
public int getSubItemCount() {
return 2;
}
@Override
public int getMetadata(int meta) {
return meta;
}
@Override
public String getUnlocalizedName(ItemStack stack) {
return "pccompat:power_converter_" + this.getModPrefix() + "_"
+ stack.getItemDamage();
}
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public void getSubItems(Item alec1, CreativeTabs alec2, List list) {
IntStream.range(0, this.getSubItemCount())
.mapToObj((i) -> new ItemStack(this, 1, i))
.forEach(list::add);
}
}

View file

@ -1,38 +1,15 @@
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 class ItemBlockPowerConverterAppliedEnergistics
extends AbstractItemBlockPowerConverter {
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);
public String getModPrefix() {
return "ae";
}
}

View file

@ -1,38 +1,14 @@
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 ItemBlockPowerConverterHBM extends ItemBlock {
public class ItemBlockPowerConverterHBM extends AbstractItemBlockPowerConverter {
public ItemBlockPowerConverterHBM(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_hbm_" + 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);
public String getModPrefix() {
return "hbm";
}
}

View file

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

View file

@ -1,38 +1,14 @@
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 ItemBlockPowerConverterRedPower extends ItemBlock {
public class ItemBlockPowerConverterRedPower extends AbstractItemBlockPowerConverter {
public ItemBlockPowerConverterRedPower(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_rp_" + 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);
public String getModPrefix() {
return "rp";
}
}

View file

@ -1,38 +1,19 @@
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 ItemBlockPowerConverterUniversalElectricity extends ItemBlock {
public class ItemBlockPowerConverterUniversalElectricity extends AbstractItemBlockPowerConverter {
public ItemBlockPowerConverterUniversalElectricity(Block block) {
super(block);
this.setHasSubtypes(true);
this.setMaxDamage(0);
}
@Override
public int getMetadata(int meta) {
return meta;
public int getSubItemCount() {
return 8;
}
@Override
public String getUnlocalizedName(ItemStack stack) {
int meta = stack.getItemDamage();
return "pccompat:power_converter_ue_" + meta;
}
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public void getSubItems(Item alec1, CreativeTabs alec2, List list) {
IntStream.range(0, 8)
.mapToObj((i) -> new ItemStack(this, 1, i))
.forEach(list::add);
public String getModPrefix() {
return "ue";
}
}

View file

@ -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.BlockPowerConverterProjectRed;
import net.anvilcraft.pccompat.items.ItemBlockPowerConverterProjectRed;
import net.anvilcraft.pccompat.tiles.TileEntityProjectRedConsumer;
import net.anvilcraft.pccompat.tiles.TileEntityProjectRedProducer;
import net.minecraft.block.Block;
public class ProjectRedProxy implements IModProxy {
public static PowerSystem powerSystem;
public static Block blockPowerConverter;
@Override
public void registerPowerSystem() {
PowerSystemRegistry.registerPowerSystem(
powerSystem = new PowerSystem("Bluetricity", "BT", 7000, "W")
);
}
@Override
public void registerBlocks() {
GameRegistry.registerBlock(
blockPowerConverter = new BlockPowerConverterProjectRed(),
ItemBlockPowerConverterProjectRed.class,
"power_converter_project_red"
);
}
@Override
public void registerTiles() {
GameRegistry.registerTileEntity(
TileEntityProjectRedConsumer.class, "project_red_consumer"
);
GameRegistry.registerTileEntity(
TileEntityProjectRedProducer.class, "project_red_producer"
);
}
@Override
public void registerRecipes() {}
}

View file

@ -0,0 +1,44 @@
package net.anvilcraft.pccompat.tiles;
import java.util.Map.Entry;
import covers1624.powerconverters.tile.main.TileEntityEnergyConsumer;
import mrtjp.projectred.expansion.TPowerStorage;
import net.anvilcraft.pccompat.mods.ProjectRedProxy;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityProjectRedConsumer
extends TileEntityEnergyConsumer<TPowerStorage> {
private int btLastTick;
public TileEntityProjectRedConsumer() {
super(ProjectRedProxy.powerSystem, 0, TPowerStorage.class);
}
@Override
public void updateEntity() {
super.updateEntity();
btLastTick = 0;
for (Entry<ForgeDirection, TPowerStorage> box : this.getTiles().entrySet()) {
int toStore = (int) Math.min(
box.getValue().storage(),
getTotalEnergyDemand() / this.getPowerSystem().getScaleAmmount()
);
box.getValue().storage_$eq(box.getValue().storage() - toStore);
this.storeEnergy(toStore * this.getPowerSystem().getScaleAmmount(), false);
TileEntity boxTE = (TileEntity) box.getValue();
boxTE.getWorldObj().markBlockForUpdate(
boxTE.xCoord, boxTE.yCoord, boxTE.zCoord
);
btLastTick += toStore;
}
}
@Override
public double getInputRate() {
return this.btLastTick;
}
}

View file

@ -0,0 +1,33 @@
package net.anvilcraft.pccompat.tiles;
import java.util.Map.Entry;
import covers1624.powerconverters.tile.main.TileEntityEnergyProducer;
import mrtjp.projectred.expansion.TPowerStorage;
import net.anvilcraft.pccompat.mods.ProjectRedProxy;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityProjectRedProducer
extends TileEntityEnergyProducer<TPowerStorage> {
public TileEntityProjectRedProducer() {
super(ProjectRedProxy.powerSystem, 0, TPowerStorage.class);
}
@Override
public double produceEnergy(double energy) {
for (Entry<ForgeDirection, TPowerStorage> box : this.getTiles().entrySet()) {
int toStore = (int) Math.min(
(box.getValue().getMaxStorage() - box.getValue().storage()),
energy / getPowerSystem().getScaleAmmount()
);
box.getValue().storage_$eq(box.getValue().storage() + toStore);
TileEntity boxTE = (TileEntity) box.getValue();
boxTE.getWorldObj().markBlockForUpdate(
boxTE.xCoord, boxTE.yCoord, boxTE.zCoord
);
energy -= toStore * getPowerSystem().getScaleAmmount();
}
return energy;
}
}

View file

@ -19,13 +19,13 @@ public class TileEntityRedPowerConsumer extends TileEntityEnergyConsumer<TileBat
super.updateEntity();
btLastTick = 0;
for (Entry<ForgeDirection, TileBatteryBox> box : getTiles().entrySet()) {
for (Entry<ForgeDirection, TileBatteryBox> box : this.getTiles().entrySet()) {
double toStore = Math.min(
box.getValue().Storage,
getTotalEnergyDemand() / getPowerSystem().getScaleAmmount()
getTotalEnergyDemand() / this.getPowerSystem().getScaleAmmount()
);
box.getValue().Storage -= toStore;
this.storeEnergy(toStore * getPowerSystem().getScaleAmmount(), false);
this.storeEnergy(toStore * this.getPowerSystem().getScaleAmmount(), false);
box.getValue().getWorldObj().markBlockForUpdate(
box.getValue().xCoord, box.getValue().yCoord, box.getValue().zCoord
);
@ -35,6 +35,6 @@ public class TileEntityRedPowerConsumer extends TileEntityEnergyConsumer<TileBat
@Override
public double getInputRate() {
return btLastTick;
return this.btLastTick;
}
}

View file

@ -15,3 +15,6 @@ pccompat:power_converter_hbm_1.name=HBM Producer
pccompat:power_converter_rp_0.name=Bluetricity Consumer
pccompat:power_converter_rp_1.name=Bluetricity Producer
pccompat:power_converter_pr_0.name=Bluetricity Consumer
pccompat:power_converter_pr_1.name=Bluetricity Producer