feat: RF and EU compat

This commit is contained in:
Timo Ley 2022-11-27 10:52:24 +01:00
parent 4101578cd5
commit 7bf5274829
9 changed files with 192 additions and 31 deletions

View File

@ -1,9 +1,10 @@
buildscript {
repositories {
mavenCentral()
maven { url 'https://maven.tilera.xyz' }
maven {
name = "forge"
url = "https://files.minecraftforge.net/maven"
url = "https://maven.minecraftforge.net/"
}
maven {
name = "sonatype"
@ -11,7 +12,7 @@ buildscript {
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
classpath 'com.anatawa12.forge:ForgeGradle:1.2-1.1.0-SNAPSHOT'
}
}
@ -41,24 +42,28 @@ minecraft {
repositories {
maven { url = "https://maven.tilera.xyz" }
maven {
name = "ic2c"
url = "https://maven.ic2.player.to/"
metadataSources {
artifact()
}
}
}
dependencies {
compile "universalelectricity:basiccomponents:1.0.2-dirty:deobf"
implementation "universalelectricity:basiccomponents:1.1.0:deobf"
implementation 'net.industrial-craft:industrialcraft-2:2.2.827-experimental:dev'
}
processResources
{
processResources {
// This will ensure that this task is redone when the versions change.
inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version
from(sourceSets.main.resources.srcDirs) {
include 'mcmod.info'
// Replace values in only mcmod.info.
filesMatching('mcmod.info') {
// Replace version and mcversion.
expand 'version':project.version, 'mcversion':project.minecraft.version
}
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
}
}

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip

View File

@ -1,15 +1,11 @@
package icbm.api;
import universalelectricity.prefab.flag.FlagRegistry;
public class ICBMFlags {
// TODO: WTF
// public static final String FLAG_BAN_GLOBAL =
// FlagRegistry.registerFlag("ban_icbm");
// public static final String FLAG_BAN_EXPLOSIVE =
// FlagRegistry.registerFlag("ban_explosive");
// public static final String FLAG_BAN_GRENADE =
// FlagRegistry.registerFlag("ban_grenade");
// public static final String FLAG_BAN_MISSILE =
// FlagRegistry.registerFlag("ban_missile");
// public static final String FLAG_BAN_MINECART =
// FlagRegistry.registerFlag("ban_minecart");
public static final String FLAG_BAN_GLOBAL = FlagRegistry.registerFlag("ban_icbm");
public static final String FLAG_BAN_EXPLOSIVE = FlagRegistry.registerFlag("ban_explosive");
public static final String FLAG_BAN_GRENADE = FlagRegistry.registerFlag("ban_grenade");
public static final String FLAG_BAN_MISSILE = FlagRegistry.registerFlag("ban_missile");
public static final String FLAG_BAN_MINECART = FlagRegistry.registerFlag("ban_minecart");
}

View File

@ -0,0 +1,23 @@
package mffs;
import universalelectricity.core.UniversalElectricity;
public class ConversionHelper {
public static double toEU(double joules) {
return joules / UniversalElectricity.UE_IC2_RATIO;
}
public static double fromEU(double eu) {
return eu * UniversalElectricity.UE_IC2_RATIO;
}
public static int toRF(double joules) {
return (int) (joules / UniversalElectricity.UE_RF_RATIO);
}
public static double fromRF(int rf) {
return rf * UniversalElectricity.UE_RF_RATIO;
}
}

View File

@ -75,7 +75,7 @@ import universalelectricity.prefab.CustomDamageSource;
import universalelectricity.prefab.TranslationHelper;
@Mod(modid = "MFFS", name = "Modular Force Field System", version = "3.1.0",
useMetadata = true)
useMetadata = true, dependencies = "required-after:basiccomponents;after:IC2")
public class ModularForceFieldSystem {
public static final String CHANNEL = "MFFS";
public static final String ID = "MFFS";

View File

@ -221,7 +221,7 @@ public class Recipes {
new RecipeBuilder(new ShapedOreRecipeAdapter())
.output(ModularForceFieldSystem.itemModuleRotate)
.pattern("F ", " F", " F")
.pattern("F ", " F ", " F")
.ingredient('F', ModularForceFieldSystem.itemFocusMatrix)
.register();

View File

@ -1,19 +1,44 @@
package mffs.base;
import cpw.mods.fml.common.Optional;
import calclavia.lib.IUniversalEnergyTile;
import cofh.api.energy.IEnergyReceiver;
import ic2.api.energy.event.EnergyTileLoadEvent;
import ic2.api.energy.event.EnergyTileUnloadEvent;
import ic2.api.energy.tile.IEnergySink;
import mffs.ConversionHelper;
import mffs.tileentity.TileEntityCoercionDeriver;
import java.util.EnumSet;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.ForgeDirection;
import universalelectricity.core.UniversalElectricity;
import universalelectricity.core.electricity.ElectricityNetworkHelper;
import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.vector.Vector3;
@Optional.Interface(modid = "IC2", iface = "ic2.api.energy.tile.IEnergySink")
public abstract class TileEntityUniversalEnergy
extends TileEntityModuleAcceptor implements IUniversalEnergyTile {
extends TileEntityModuleAcceptor implements IUniversalEnergyTile, IEnergyReceiver, IEnergySink {
public double prevWatts;
public double wattsReceived;
public TileEntityUniversalEnergy() { this.wattsReceived = 0.0; }
@Override
public void initiate() {
super.initiate();
MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this));
}
@Override
public void invalidate() {
MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this));
super.invalidate();
}
@Override
public void updateEntity() {
super.updateEntity();
@ -61,4 +86,75 @@ public abstract class TileEntityUniversalEnergy
return remaining;
}
public int produceRF(int amount) {
int available = amount;
for(ForgeDirection dir : ForgeDirection.values()) {
TileEntity te = new Vector3(this).modifyPositionFromSide(dir).getTileEntity(this.worldObj);
if (te instanceof IEnergyReceiver) {
IEnergyReceiver receiver = (IEnergyReceiver) te;
if (!receiver.canConnectEnergy(dir.getOpposite())) continue;
available -= receiver.receiveEnergy(dir.getOpposite(), (available), false);
}
}
return amount - available;
}
@Override
public boolean canConnectEnergy(ForgeDirection side) {
return canConnect(side);
}
@Override
public int receiveEnergy(ForgeDirection side, int energy, boolean simulate) {
if (!canConnect(side)) return 0;
double toReceive = ConversionHelper.fromRF(energy);
double free = getWattBuffer() - wattsReceived;
double toInject = Math.min(toReceive, free);
if (!simulate) {
wattsReceived += toInject;
}
return (int) Math.ceil(toInject / UniversalElectricity.UE_RF_RATIO);
}
@Override
public int getEnergyStored(ForgeDirection var1) {
return ConversionHelper.toRF(getFortronEnergy() * TileEntityCoercionDeriver.FORTRON_UE_RATIO);
}
@Override
public int getMaxEnergyStored(ForgeDirection var1) {
return ConversionHelper.toRF(getFortronCapacity() * TileEntityCoercionDeriver.FORTRON_UE_RATIO);
}
@Optional.Method(modid = "IC2")
@Override
public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction) {
return getConsumingSides().contains(direction);
}
@Optional.Method(modid = "IC2")
@Override
public double getDemandedEnergy() {
return ConversionHelper.toEU(this.getRequest().getWatts());
}
@Optional.Method(modid = "IC2")
@Override
public int getSinkTier() {
return 2;
}
@Optional.Method(modid = "IC2")
@Override
public double injectEnergy(ForgeDirection direction, double i, double voltage) {
double givenElectricity = ConversionHelper.fromEU(i);
double rejects = 0.0;
if (givenElectricity > this.getWattBuffer()) {
rejects = givenElectricity - this.getRequest().getWatts();
}
this.onReceive(new ElectricityPack(givenElectricity / this.getVoltage(), this.getVoltage()));
return ConversionHelper.toEU(rejects);
}
}

View File

@ -53,9 +53,9 @@ public class GuiCoercionDeriver extends GuiBase {
}
}
this.fontRendererObj.drawString(
1000.0 * UniversalElectricity.TO_BC_RATIO + " MJ/s", 85, 30, 4210752);
1000.0 * UniversalElectricity.UE_RF_RATIO + " RF/s", 85, 30, 4210752);
this.fontRendererObj.drawString(
1000.0 * UniversalElectricity.TO_IC2_RATIO + " EU/s", 85, 40, 4210752);
1000.0 * UniversalElectricity.UE_IC2_RATIO + " EU/s", 85, 40, 4210752);
this.fontRendererObj.drawString(
ElectricityDisplay.getDisplayShort(
1000.0, ElectricityDisplay.ElectricUnit.WATT),

View File

@ -1,5 +1,8 @@
package mffs.tileentity;
import cpw.mods.fml.common.Optional;
import ic2.api.energy.tile.IEnergySource;
import mffs.ConversionHelper;
import mffs.ModularForceFieldSystem;
import mffs.Settings;
import mffs.api.modules.IModule;
@ -13,13 +16,16 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack;
import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.item.ElectricItemHelper;
import universalelectricity.core.item.IItemElectric;
import universalelectricity.core.item.IItemElectricityStorage;
public class TileEntityCoercionDeriver extends TileEntityUniversalEnergy {
@Optional.Interface(modid = "IC2", iface = "ic2.api.energy.tile.IEnergySource")
public class TileEntityCoercionDeriver extends TileEntityUniversalEnergy implements IEnergySource {
public static final int WATTAGE = 1000;
public static final int REQUIRED_TIME = 200;
public static final int MULTIPLE_PRODUCTION = 4;
@ -52,8 +58,12 @@ public class TileEntityCoercionDeriver extends TileEntityUniversalEnergy {
this.getStackInSlot(1), remainder.getWatts(),
this.getVoltage());
}
double convertedToRF = 0.0;
if ((remainder.getWatts() - electricItemGiven) > 0.0) {
convertedToRF = ConversionHelper.fromRF(this.produceRF(ConversionHelper.toRF(remainder.getWatts() - electricItemGiven)));
}
this.requestFortron(
(int)((watts - (remainder.getWatts() - electricItemGiven)) / FORTRON_UE_RATIO),
(int)Math.ceil((watts - (remainder.getWatts() - (electricItemGiven + convertedToRF))) / FORTRON_UE_RATIO),
true);
} else {
super.wattsReceived += ElectricItemHelper.dechargeItem(
@ -197,4 +207,35 @@ public class TileEntityCoercionDeriver extends TileEntityUniversalEnergy {
public boolean canConnect(final ForgeDirection direction) {
return true;
}
@Optional.Method(modid = "IC2")
@Override
public boolean emitsEnergyTo(TileEntity receiver, ForgeDirection direction) {
return canConnect(direction) && this.getStackInSlot(1) != null;
}
@Optional.Method(modid = "IC2")
@Override
public double getOfferedEnergy() {
ItemStack battery = this.getStackInSlot(1);
if (battery == null || !(battery.getItem() instanceof IItemElectricityStorage) || !this.isInversed) return 0;
IItemElectricityStorage impl = (IItemElectricityStorage) battery.getItem();
double joules = impl.getJoules(battery);
return Math.min(ConversionHelper.toEU(joules), 32);
}
@Optional.Method(modid = "IC2")
@Override
public void drawEnergy(double amount) {
ItemStack battery = this.getStackInSlot(1);
if (battery == null || !(battery.getItem() instanceof IItemElectricityStorage)) return;
IItemElectricityStorage impl = (IItemElectricityStorage) battery.getItem();
impl.setJoules(impl.getJoules(battery)- ConversionHelper.fromEU(amount), battery);
}
@Optional.Method(modid = "IC2")
@Override
public int getSourceTier() {
return 1;
}
}