diff --git a/build.gradle b/build.gradle index 54d8090..3712e94 100644 --- a/build.gradle +++ b/build.gradle @@ -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' - } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d4a0bb8..d789009 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/src/main/java/icbm/api/ICBMFlags.java b/src/main/java/icbm/api/ICBMFlags.java index 03ab58c..3f260e9 100644 --- a/src/main/java/icbm/api/ICBMFlags.java +++ b/src/main/java/icbm/api/ICBMFlags.java @@ -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"); } diff --git a/src/main/java/mffs/ConversionHelper.java b/src/main/java/mffs/ConversionHelper.java new file mode 100644 index 0000000..4f5fe6b --- /dev/null +++ b/src/main/java/mffs/ConversionHelper.java @@ -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; + } + +} diff --git a/src/main/java/mffs/ModularForceFieldSystem.java b/src/main/java/mffs/ModularForceFieldSystem.java index 8937802..a3be1a5 100644 --- a/src/main/java/mffs/ModularForceFieldSystem.java +++ b/src/main/java/mffs/ModularForceFieldSystem.java @@ -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"; diff --git a/src/main/java/mffs/Recipes.java b/src/main/java/mffs/Recipes.java index fde741e..f0467a0 100644 --- a/src/main/java/mffs/Recipes.java +++ b/src/main/java/mffs/Recipes.java @@ -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(); diff --git a/src/main/java/mffs/base/TileEntityUniversalEnergy.java b/src/main/java/mffs/base/TileEntityUniversalEnergy.java index d9da3e4..797d0f4 100644 --- a/src/main/java/mffs/base/TileEntityUniversalEnergy.java +++ b/src/main/java/mffs/base/TileEntityUniversalEnergy.java @@ -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); + } + } diff --git a/src/main/java/mffs/gui/GuiCoercionDeriver.java b/src/main/java/mffs/gui/GuiCoercionDeriver.java index 1f1374b..ecd797d 100644 --- a/src/main/java/mffs/gui/GuiCoercionDeriver.java +++ b/src/main/java/mffs/gui/GuiCoercionDeriver.java @@ -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), diff --git a/src/main/java/mffs/tileentity/TileEntityCoercionDeriver.java b/src/main/java/mffs/tileentity/TileEntityCoercionDeriver.java index b4ba8d7..025cd59 100644 --- a/src/main/java/mffs/tileentity/TileEntityCoercionDeriver.java +++ b/src/main/java/mffs/tileentity/TileEntityCoercionDeriver.java @@ -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; + } }