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 { buildscript {
repositories { repositories {
mavenCentral() mavenCentral()
maven { url 'https://maven.tilera.xyz' }
maven { maven {
name = "forge" name = "forge"
url = "https://files.minecraftforge.net/maven" url = "https://maven.minecraftforge.net/"
} }
maven { maven {
name = "sonatype" name = "sonatype"
@ -11,7 +12,7 @@ buildscript {
} }
} }
dependencies { 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 { repositories {
maven { url = "https://maven.tilera.xyz" } maven { url = "https://maven.tilera.xyz" }
maven {
name = "ic2c"
url = "https://maven.ic2.player.to/"
metadataSources {
artifact()
}
}
} }
dependencies { 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 "version", project.version
inputs.property "mcversion", project.minecraft.version inputs.property "mcversion", project.minecraft.version
from(sourceSets.main.resources.srcDirs) { // Replace values in only mcmod.info.
include 'mcmod.info' filesMatching('mcmod.info') {
// Replace version and mcversion.
expand 'version':project.version, 'mcversion':project.minecraft.version 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 distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists 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; package icbm.api;
import universalelectricity.prefab.flag.FlagRegistry;
public class ICBMFlags { public class ICBMFlags {
// TODO: WTF public static final String FLAG_BAN_GLOBAL = FlagRegistry.registerFlag("ban_icbm");
// public static final String FLAG_BAN_GLOBAL = public static final String FLAG_BAN_EXPLOSIVE = FlagRegistry.registerFlag("ban_explosive");
// FlagRegistry.registerFlag("ban_icbm"); public static final String FLAG_BAN_GRENADE = FlagRegistry.registerFlag("ban_grenade");
// public static final String FLAG_BAN_EXPLOSIVE = public static final String FLAG_BAN_MISSILE = FlagRegistry.registerFlag("ban_missile");
// FlagRegistry.registerFlag("ban_explosive"); public static final String FLAG_BAN_MINECART = FlagRegistry.registerFlag("ban_minecart");
// 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; import universalelectricity.prefab.TranslationHelper;
@Mod(modid = "MFFS", name = "Modular Force Field System", version = "3.1.0", @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 class ModularForceFieldSystem {
public static final String CHANNEL = "MFFS"; public static final String CHANNEL = "MFFS";
public static final String ID = "MFFS"; public static final String ID = "MFFS";

View File

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

View File

@ -1,19 +1,44 @@
package mffs.base; package mffs.base;
import cpw.mods.fml.common.Optional;
import calclavia.lib.IUniversalEnergyTile; 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 java.util.EnumSet;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import universalelectricity.core.UniversalElectricity; import universalelectricity.core.UniversalElectricity;
import universalelectricity.core.electricity.ElectricityNetworkHelper; import universalelectricity.core.electricity.ElectricityNetworkHelper;
import universalelectricity.core.electricity.ElectricityPack; import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.vector.Vector3;
@Optional.Interface(modid = "IC2", iface = "ic2.api.energy.tile.IEnergySink")
public abstract class TileEntityUniversalEnergy public abstract class TileEntityUniversalEnergy
extends TileEntityModuleAcceptor implements IUniversalEnergyTile { extends TileEntityModuleAcceptor implements IUniversalEnergyTile, IEnergyReceiver, IEnergySink {
public double prevWatts; public double prevWatts;
public double wattsReceived; public double wattsReceived;
public TileEntityUniversalEnergy() { this.wattsReceived = 0.0; } 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 @Override
public void updateEntity() { public void updateEntity() {
super.updateEntity(); super.updateEntity();
@ -61,4 +86,75 @@ public abstract class TileEntityUniversalEnergy
return remaining; 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( 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( 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( this.fontRendererObj.drawString(
ElectricityDisplay.getDisplayShort( ElectricityDisplay.getDisplayShort(
1000.0, ElectricityDisplay.ElectricUnit.WATT), 1000.0, ElectricityDisplay.ElectricUnit.WATT),

View File

@ -1,5 +1,8 @@
package mffs.tileentity; package mffs.tileentity;
import cpw.mods.fml.common.Optional;
import ic2.api.energy.tile.IEnergySource;
import mffs.ConversionHelper;
import mffs.ModularForceFieldSystem; import mffs.ModularForceFieldSystem;
import mffs.Settings; import mffs.Settings;
import mffs.api.modules.IModule; import mffs.api.modules.IModule;
@ -13,13 +16,16 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager; import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet; import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import universalelectricity.core.electricity.ElectricityPack; import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.item.ElectricItemHelper; import universalelectricity.core.item.ElectricItemHelper;
import universalelectricity.core.item.IItemElectric; 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 WATTAGE = 1000;
public static final int REQUIRED_TIME = 200; public static final int REQUIRED_TIME = 200;
public static final int MULTIPLE_PRODUCTION = 4; public static final int MULTIPLE_PRODUCTION = 4;
@ -52,8 +58,12 @@ public class TileEntityCoercionDeriver extends TileEntityUniversalEnergy {
this.getStackInSlot(1), remainder.getWatts(), this.getStackInSlot(1), remainder.getWatts(),
this.getVoltage()); this.getVoltage());
} }
double convertedToRF = 0.0;
if ((remainder.getWatts() - electricItemGiven) > 0.0) {
convertedToRF = ConversionHelper.fromRF(this.produceRF(ConversionHelper.toRF(remainder.getWatts() - electricItemGiven)));
}
this.requestFortron( this.requestFortron(
(int)((watts - (remainder.getWatts() - electricItemGiven)) / FORTRON_UE_RATIO), (int)Math.ceil((watts - (remainder.getWatts() - (electricItemGiven + convertedToRF))) / FORTRON_UE_RATIO),
true); true);
} else { } else {
super.wattsReceived += ElectricItemHelper.dechargeItem( super.wattsReceived += ElectricItemHelper.dechargeItem(
@ -197,4 +207,35 @@ public class TileEntityCoercionDeriver extends TileEntityUniversalEnergy {
public boolean canConnect(final ForgeDirection direction) { public boolean canConnect(final ForgeDirection direction) {
return true; 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;
}
} }