diff options
author | GTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com> | 2022-08-07 23:53:44 +0100 |
---|---|---|
committer | GTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com> | 2022-08-07 23:53:44 +0100 |
commit | 1585d1c212a51b6e9536d7a493bdb5acd3eba481 (patch) | |
tree | e13556a08f5a605d9607e9f9d983f5d38a8a77dc /src/main/java | |
parent | 424573e564b7d3ea722377537a2ed3401a4129b3 (diff) | |
download | GT5-Unofficial-1585d1c212a51b6e9536d7a493bdb5acd3eba481.tar.gz GT5-Unofficial-1585d1c212a51b6e9536d7a493bdb5acd3eba481.tar.bz2 GT5-Unofficial-1585d1c212a51b6e9536d7a493bdb5acd3eba481.zip |
Idk
Diffstat (limited to 'src/main/java')
3 files changed, 204 insertions, 132 deletions
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java index a88e64b750..ce7bcfd808 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_bhg.java @@ -1,60 +1,60 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.thing.block.QuantumGlassBlock; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.CompressedSpacetimeCoilLevel; import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; import com.github.technus.tectech.util.CommonValues; +import com.gtnewhorizon.structurelib.StructureLibAPI; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTech_API; +import gregtech.api.enums.HeatingCoilLevel; import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHeatingCoil; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.common.blocks.GT_Block_Casings5; +import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.util.function.BiConsumer; +import java.util.function.BiPredicate; +import java.util.function.Consumer; +import java.util.function.Function; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; -import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_decay.URANIUM_INGOT_MASS_DIFF; -import static com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_decay.URANIUM_MASS_TO_EU_INSTANT; import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.util.GT_StructureUtility.ofCoil; import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional; import static net.minecraft.util.StatCollector.translateToLocal; -/** - * Created by danie_000 on 17.12.2016. - */ + public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { //region variables private static Textures.BlockIcons.CustomIcon ScreenOFF; private static Textures.BlockIcons.CustomIcon ScreenON; - //todo CHECK VALUES - private static final double NEUTRONIUM_BLOCK_MASS = 4.1E17; - private static final double NEUTRONIUM_BLOCK_ATOM_COUNT = 2.4478671E44; - private static final double NEUTRONIUM_BLOCK_TO_EU_INSTANT = URANIUM_MASS_TO_EU_INSTANT * NEUTRONIUM_BLOCK_MASS / (URANIUM_INGOT_MASS_DIFF * 1.78266191e-36);//~ 5.314e40 - private static final double NEUTRON_TO_EU_INSTANT = NEUTRONIUM_BLOCK_TO_EU_INSTANT / NEUTRONIUM_BLOCK_ATOM_COUNT;//~ 0.00021708694 - - public boolean glassDome = false; - //endregion + CompressedSpacetimeCoilLevel mCompressionField; - //Time dillatation - to slow down the explosion thing but REALLY REDUCE POWER OUTPUT - //Startcodes to startup - //per dim disable thingies - //region structure actual private static final IStructureDefinition<GT_MetaTileEntity_EM_bhg> STRUCTURE_DEFINITION = IStructureDefinition .<GT_MetaTileEntity_EM_bhg>builder() .addShape("main", transpose(new String[][]{ {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " C C ", " C C ", " C C ", " CCCCCCCCC ", " C C ", " CCCCCCCCC ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " C C ", " C C ", " C C ", " C C ", " DDDDD ", " DDCDCDD ", " CCCCDCCDCCDCCCC ", " DDDDDDD ", " CCCCDCCDCCDCCCC ", " DDCDCDD ", " DDDDD ", " C C ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, - {" ", " ", " ", " ", " ", " ", " ", " C C ", " C C ", " C C ", " D ", " D ", " DDDDDDD ", " DD DD ", " D EEE D ", " CCC D EAAAE D CCC ", " DDD EAAAE DDD ", " CCC D EAAAE D CCC ", " D EEE D ", " DD DD ", " DDDDDDD ", " D ", " D ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " "}, + {" ", " ", " ", " ", " ", " ", " ", " C C ", " C C ", " C C ", " D ", " D ", " DDDDDDD ", " DD DD ", " D EEE D ", " CCC D EBBBE D CCC ", " DDD EBBBE DDD ", " CCC D EBBBE D CCC ", " D EEE D ", " DD DD ", " DDDDDDD ", " D ", " D ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " C C ", " C C ", " D ", " D ", " ", " ", " ", " ", " ", " CC CC ", " DD DD ", " CC CC ", " ", " ", " ", " ", " ", " D ", " D ", " C C ", " C C ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " C C ", " CCCCC ", " D ", " B ", " B ", " ", " ", " ", " ", " C C ", " CC CC ", " CDBB BBDC ", " CC CC ", " C C ", " ", " ", " ", " ", " B ", " B ", " D ", " CCCCC ", " C C ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " C C ", " C C ", " D ", " EEEBEEE ", " ", " ", " ", " ", " ", " E E ", " E E ", " CC E E CC ", " DB BD ", " CC E E CC ", " E E ", " E E ", " ", " ", " ", " ", " ", " EEEBEEE ", " D ", " C C ", " C C ", " ", " ", " ", " "}, @@ -67,9 +67,9 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E {" CCCCCCC ", " C C ", " DDDDDDD ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " D D ", " D D ", "CCD DCC", " D D ", "CCD DCC", " D D ", " D D ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " DDDDDDD ", " C C ", " C C "}, {" CCHHHHHCC ", " DDDDD ", " DD DD ", " ", " ", " E E ", " ", " E E ", " ", " ", " ", " ", " D D ", " D D ", " D D ", "CD DC", " D D ", "CD DC", " D D ", " D D ", " D D ", " ", " ", " ", " ", " E E ", " ", " E E ", " ", " ", " DD DD ", " DDDDD ", " C C "}, {" CHHHHHHHC ", " DDCDCDD ", " D EEE D ", " ", " C C ", " E E ", " C C ", " E E ", " ", " ", " ", " ", " D D ", " D D ", " D D ", "CCE ECC", " DE ED ", "CCE ECC", " D D ", " D D ", " D D ", " ", " ", " ", " ", " E E ", " C C ", " E E ", " C C ", " ", " D EEE D ", " DDCDCDD ", " C C "}, - {" CHHFFFHHC ", " CCCCDCCDCCDCCCC ", " CCC D EAAAE D CCC ", " CC CC ", " CC CC ", " CC E E CC ", " CC CC ", " CC E E CC ", " C C ", " CC CC ", " C C ", " C C ", "CCD DCC", "CD DC", "CCE ECC", "CCA ACC", "CDA ADC", "CCA ACC", "CCE ECC", "CD DC", "CCD DCC", " C C ", " C C ", " CC CC ", " C C ", " CC E E CC ", " CC CC ", " CC E E CC ", " CC CC ", " CC CC ", " CCC D EAAAE D CCC ", " CCCCDCCDCCDCCCC ", " CCCCCCCCC "}, - {" CHHF~FHHC ", " DDDDDDD ", " DDD EAAAE DDD ", " DD DD ", " CDBB BBDC ", " DB BD ", " CDB BDC ", " DB BD ", " DB BD ", " DB BD ", " D D ", " D D ", " D D ", " D D ", " DE ED ", "CDA ADC", " DA AD ", "CDA ADC", " DE ED ", " D D ", " D D ", " D D ", " D D ", " DB BD ", " DB BD ", " DB BD ", " CDB BDC ", " DB BD ", " CDBB BBDC ", " DD DD ", " DDD EAAAE DDD ", " DDDDDDD ", " C C "}, - {" CHHFFFHHC ", " CCCCDCCDCCDCCCC ", " CCC D EAAAE D CCC ", " CC CC ", " CC CC ", " CC E E CC ", " CC CC ", " CC E E CC ", " C C ", " CC CC ", " C C ", " C C ", "CCD DCC", "CD DC", "CCE ECC", "CCA ACC", "CDA ADC", "CCA ACC", "CCE ECC", "CD DC", "CCD DCC", " C C ", " C C ", " CC CC ", " C C ", " CC E E CC ", " CC CC ", " CC E E CC ", " CC CC ", " CC CC ", " CCC D EAAAE D CCC ", " CCCCDCCDCCDCCCC ", " CCCCCCCCC "}, + {" CHHFFFHHC ", " CCCCDCCDCCDCCCC ", " CCC D EBBBE D CCC ", " CC CC ", " CC CC ", " CC E E CC ", " CC CC ", " CC E E CC ", " C C ", " CC CC ", " C C ", " C C ", "CCD DCC", "CD DC", "CCE ECC", "CCB BCC", "CDB BDC", "CCB BCC", "CCE ECC", "CD DC", "CCD DCC", " C C ", " C C ", " CC CC ", " C C ", " CC E E CC ", " CC CC ", " CC E E CC ", " CC CC ", " CC CC ", " CCC D EBBBE D CCC ", " CCCCDCCDCCDCCCC ", " CCCCCCCCC "}, + {" CHHF~FHHC ", " DDDDDDD ", " DDD EBBBE DDD ", " DD DD ", " CDBB BBDC ", " DB BD ", " CDB BDC ", " DB BD ", " DB BD ", " DB BD ", " D D ", " D D ", " D D ", " D D ", " DE ED ", "CDB BDC", " DB BD ", "CDB BDC", " DE ED ", " D D ", " D D ", " D D ", " D D ", " DB BD ", " DB BD ", " DB BD ", " CDB BDC ", " DB BD ", " CDBB BBDC ", " DD DD ", " DDD EBBBE DDD ", " DDDDDDD ", " C C "}, + {" CHHFFFHHC ", " CCCCDCCDCCDCCCC ", " CCC D EBBBE D CCC ", " CC CC ", " CC CC ", " CC E E CC ", " CC CC ", " CC E E CC ", " C C ", " CC CC ", " C C ", " C C ", "CCD DCC", "CD DC", "CCE ECC", "CCB BCC", "CDB BDC", "CCB BCC", "CCE ECC", "CD DC", "CCD DCC", " C C ", " C C ", " CC CC ", " C C ", " CC E E CC ", " CC CC ", " CC E E CC ", " CC CC ", " CC CC ", " CCC D EBBBE D CCC ", " CCCCDCCDCCDCCCC ", " CCCCCCCCC "}, {" CHHHHHHHC ", " DDCDCDD ", " D EEE D ", " ", " C C ", " E E ", " C C ", " E E ", " ", " ", " ", " ", " D D ", " D D ", " D D ", "CCE ECC", " DE ED ", "CCE ECC", " D D ", " D D ", " D D ", " ", " ", " ", " ", " E E ", " C C ", " E E ", " C C ", " ", " D EEE D ", " DDCDCDD ", " C C "}, {" CCHHHHHCC ", " DDDDD ", " DD DD ", " ", " ", " E E ", " ", " E E ", " ", " ", " ", " ", " D D ", " D D ", " D D ", "CD DC", " D D ", "CD DC", " D D ", " D D ", " D D ", " ", " ", " ", " ", " E E ", " ", " E E ", " ", " ", " DD DD ", " DDDDD ", " C C "}, {" CCCCCCC ", " C C ", " DDDDDDD ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " D D ", " D D ", "CCD DCC", " D D ", "CCD DCC", " D D ", " D D ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " DDDDDDD ", " C C ", " C C "}, @@ -82,12 +82,11 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E {" ", " ", " ", " ", " C C ", " C C ", " D ", " EEEBEEE ", " ", " ", " ", " ", " ", " E E ", " E E ", " CC E E CC ", " DB BD ", " CC E E CC ", " E E ", " E E ", " ", " ", " ", " ", " ", " EEEBEEE ", " D ", " C C ", " C C ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " C C ", " CCCCC ", " D ", " B ", " B ", " ", " ", " ", " ", " C C ", " CC CC ", " CDBB BBDC ", " CC CC ", " C C ", " ", " ", " ", " ", " B ", " B ", " D ", " CCCCC ", " C C ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " C C ", " C C ", " D ", " D ", " ", " ", " ", " ", " ", " CC CC ", " DD DD ", " CC CC ", " ", " ", " ", " D ", " D ", " D ", " D ", " C C ", " C C ", " ", " ", " ", " ", " ", " "}, - {" ", " ", " ", " ", " ", " ", " ", " C C ", " C C ", " C C ", " D ", " D ", " DDDDDDD ", " DD DD ", " D EEE D ", " CCC D EAAAE D CCC ", " DDD EAAAE DDD ", " CCC D EAAAE D CCC ", " D EEE D ", " DD DD ", " DDDDDDD ", " D ", " D ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " "}, + {" ", " ", " ", " ", " ", " ", " ", " C C ", " C C ", " C C ", " D ", " D ", " DDDDDDD ", " DD DD ", " D EEE D ", " CCC D EBBBE D CCC ", " DDD EBBBE DDD ", " CCC D EBBBE D CCC ", " D EEE D ", " DD DD ", " DDDDDDD ", " D ", " D ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " C C ", " C C ", " C C ", " C C ", " DDDDD ", " DDCDCDD ", " CCCCDCCDCCDCCCC ", " DDDDDDD ", " CCCCDCCDCCDCCCC ", " DDCDCDD ", " DDDDD ", " C C ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " C C ", " C C ", " C C ", " CCCCCCCCC ", " C C ", " CCCCCCCCC ", " C C ", " C C ", " C C ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "} })) - .addElement('A', ofBlock(sBlockCasingsTT, 10)) - .addElement('B', ofBlock(sBlockCasingsTT, 11)) + .addElement('B', ofCoil(GT_MetaTileEntity_EM_bhg::setCompressedSpacetimeFieldCoilValue, GT_MetaTileEntity_EM_bhg::getCompressedSpacetimeCoilFieldValue)) .addElement('C', ofBlock(sBlockCasingsTT, 12)) .addElement('D', ofBlock(sBlockCasingsTT, 13)) .addElement('E', ofBlock(sBlockCasingsTT, 14)) @@ -96,134 +95,88 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E .addElement('F', ofHatchAdderOptional(GT_MetaTileEntity_EM_bhg::addElementalToMachineList, textureOffset + 4, 2, sBlockCasingsTT, 4)) .build(); - @Override - public IStructureDefinition<GT_MetaTileEntity_EM_bhg> getStructure_EM() { - return STRUCTURE_DEFINITION; + public static <T> IStructureElement<T> ofCoil(BiConsumer<T, CompressedSpacetimeCoilLevel> aHeatingCoilSetter, Function<T, CompressedSpacetimeCoilLevel> aHeatingCoilGetter) { + return ofCoil((t, l) -> { + aHeatingCoilSetter.accept(t, l); + return true; + }, aHeatingCoilGetter); } - private static final String[] description = new String[]{ - EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - translateToLocal("gt.blockmachines.multimachine.em.blackholegenerator.hint.0"),//1 - Classic Hatches or High Power Casing - translateToLocal("gt.blockmachines.multimachine.em.blackholegenerator.hint.1"),//2 - Elemental Hatches or Molecular Casing - }; - //endregion + public interface ICompressedSpacetimeCoil { - public GT_MetaTileEntity_EM_bhg(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } + CompressedSpacetimeCoilLevel getCompressedSpacetimeLevel(int meta); + default CompressedSpacetimeCoilLevel getCompressedSpacetimeLevel(ItemStack stack) { + return getCompressedSpacetimeLevel(stack.getItemDamage()); + } - public GT_MetaTileEntity_EM_bhg(String aName) { - super(aName); + void setOnCoilCheck(Consumer<gregtech.api.interfaces.ICompressedSpacetimeCoil> callback); + Consumer<gregtech.api.interfaces.ICompressedSpacetimeCoil> getOnCoilCheck(); } - /** - * Black hole event horizon radius calculator - * - * @param massKg mass in kg - * @return radius in meters - */ - private static double getSchwarzschildRadius(double massKg) { - return massKg * 1.48523238761875E-27; - } + public static <T> IStructureElement<T> ofCoil(BiPredicate<T, CompressedSpacetimeCoilLevel> aHeatingCoilSetter, Function<T, CompressedSpacetimeCoilLevel> aCompressedSpacetimeGetter) { + if (aHeatingCoilSetter == null || aCompressedSpacetimeGetter == null) { + throw new IllegalArgumentException(); + } + return new IStructureElement<T>() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + if (!(block instanceof IHeatingCoil)) + return false; + CompressedSpacetimeCoilLevel existingLevel = aCompressedSpacetimeGetter.apply(t), + newLevel = ((ICompressedSpacetimeCoil) block).getCompressedSpacetimeLevel(world.getBlockMetadata(x, y, z)); + if (existingLevel == null || existingLevel == CompressedSpacetimeCoilLevel.None) { + return aHeatingCoilSetter.test(t, newLevel); + } else { + return newLevel == existingLevel; + } + } - /** - * Black hole event horizon surface area calculator - * - * @param massKg mass in kg - * @return area in meters^2 - */ - private static double getSchwarzschildArea(double massKg) { - return Math.pow(getSchwarzschildRadius(massKg), 2) * 12.566370614359172; - } + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, GregTech_API.sBlockCasings5, getMeta(trigger)); + return true; + } - /** - * Black hole event horizon temperature calculator - * - * @param massKg mass in kg - * @return temperature in K - */ - private static double getTemperature(double massKg) { - return 2.841438513199716E-9 / (2.3159488515170722E-32 * massKg); - } + private int getMeta(ItemStack trigger) { + return GT_Block_Casings5.getMetaFromCoilHeat(CompressedSpacetimeCoilLevel.getFromTier((byte) Math.min(CompressedSpacetimeCoilLevel.getMaxTier(), Math.max(0, trigger.stackSize - 1)))); + } - /** - * Black hole luminosity calculator - * - * @param massKg mass in kg - * @return luminosity in watts - */ - private static double getLuminosity(double massKg) { - return getSchwarzschildArea(massKg) * 5.670373e-8 * Math.pow(getTemperature(massKg), 4); + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return world.setBlock(x, y, z, GregTech_API.sBlockCasings5, getMeta(trigger), 3); + } + }; } - /** - * Black hole acretion disk luminosity calculator - * - * @param massKgPer1s mass injection kg per s - * @return luminosity in watts - */ - private static double getAcretionDiskLuminosity(double massKgPer1s) { - return massKgPer1s * 7.48962648947348E15; - } - /** - * Black hole gravity field calculator, should be used for gravity blasting - * - * @param massKg mass in kg - * @param distanceSq distance squared in meters - * @return gravity field - */ - private static double getGravityField(double massKg, double distanceSq) { - return massKg * 6.6743015e-11 / distanceSq; + public CompressedSpacetimeCoilLevel getCompressedSpacetimeCoilFieldValue() { + return mCompressionField; } - /** - * Black hole containment force calculator - * - * @param massKg mass in kg - * @param radiusSq radius squared in meters - * @return force in newtons - */ - private static double getContainmentForce(double massKg, double radiusSq) { - return Math.pow(massKg, 2) * 6.6743015e-11 / radiusSq; + public void setCompressedSpacetimeFieldCoilValue(CompressedSpacetimeCoilLevel aCoilLevel) { + mCompressionField = aCoilLevel; } - /** - * Black hole containment pressure calculator F/s, should be used for bhg initial release explosion? - * - * @param massKg mass in kg - * @param radiusSq radius squared in meters - * @return pressure in pascals - */ - private static double getContainmentPressure(double massKg, double radiusSq) { - return getContainmentForce(massKg, radiusSq) / (12.566370614359172 * radiusSq); + @Override + public IStructureDefinition<GT_MetaTileEntity_EM_bhg> getStructure_EM() { + return STRUCTURE_DEFINITION; } - /** - * Black hole containment energy calculator, assuming F*s, and 100% efficient gravity force field - * - * @param massKg mass in kg - * @return power in watts - */ - private static double getContainmentPower(double massKg) { - return Math.pow(massKg, 2) * 8.387174624097334E-10; - } + private static final String[] description = new String[]{ + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.em.blackholegenerator.hint.0"),//1 - Classic Hatches or High Power Casing + translateToLocal("gt.blockmachines.multimachine.em.blackholegenerator.hint.1"),//2 - Elemental Hatches or Molecular Casing + }; + //endregion - /** - * Black hole power balance, zero at mass ~= 2.5525e10 (T~=4.8067e12) - * - * @param massKg mass in kg - * @param massKgPer1s mass injection kg per s - * @return power in watts - */ - @Deprecated - private static double getContainmentPowerBalance(double massKg, double massKgPer1s) { - return getLuminosity(massKg) + getAcretionDiskLuminosity(massKgPer1s) - getContainmentPower(massKg); + public GT_MetaTileEntity_EM_bhg(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); } - //todo compaction energy 8 * Long.MAx_VALUE? - - //todo neutronium decay gen? 0.0007186885 mass diff - actually compute hydrogen amount... + public GT_MetaTileEntity_EM_bhg(String aName) { + super(aName); + } @Override public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { @@ -233,7 +186,7 @@ public class GT_MetaTileEntity_EM_bhg extends GT_MetaTileEntity_MultiblockBase_E @Override public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { if (structureCheck_EM("main", 16, 16, 0)) { - glassDome = false; + System.out.println(mCompressionField.getCompressedVolume()); return true; } return false; diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/CompressedSpacetimeCoilLevel.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/CompressedSpacetimeCoilLevel.java new file mode 100644 index 0000000000..665a9a5d36 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/CompressedSpacetimeCoilLevel.java @@ -0,0 +1,49 @@ +package com.github.technus.tectech.thing.metaTileEntity.multi.base; + +import gregtech.api.enums.HeatingCoilLevel; + +public enum CompressedSpacetimeCoilLevel { + // Volume in cubic Astronomical Units. + None, + AU_1, + AU_10, + AU_100, + AU_1_000, + AU_10_000, + AU_100_000, + AU_1_000_000 + ; + + + private static final CompressedSpacetimeCoilLevel[] VALUES = values(); + + /** + * @return the coil heat, used for recipes in the Electronic Blast Furnace for example. + */ + public long getCompressedVolume() { + return this == None ? 0 : 1L + (900L * this.ordinal()); + } + + /** + * @return the coil tier, used for discount in the Pyrolyse Oven for example. + */ + public long getTier() { + return (byte) (this.ordinal() - 2); + } + + public static int size() { + return VALUES.length; + } + + public static int getMaxTier() { + return VALUES.length - 1; + } + + public static CompressedSpacetimeCoilLevel getFromTier(int tier){ + if (tier < 0 || tier > getMaxTier()) + return CompressedSpacetimeCoilLevel.None; + + return VALUES[tier+2]; + } + +} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TestExtender.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TestExtender.java new file mode 100644 index 0000000000..f39bfab749 --- /dev/null +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TestExtender.java @@ -0,0 +1,70 @@ +package com.github.technus.tectech.thing.metaTileEntity.multi.base.render; + +import com.github.technus.tectech.thing.metaTileEntity.multi.base.CompressedSpacetimeCoilLevel; +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import gregtech.api.GregTech_API; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.interfaces.IHeatingCoil; +import gregtech.api.util.GT_StructureUtility; +import gregtech.common.blocks.GT_Block_Casings5; +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import java.util.function.BiConsumer; +import java.util.function.BiPredicate; +import java.util.function.Function; + +public class TestExtender { + public static <T> IStructureElement<T> ofCoil(BiConsumer<T, CompressedSpacetimeCoilLevel> aHeatingCoilSetter, Function<T, CompressedSpacetimeCoilLevel> aHeatingCoilGetter) { + return ofCoil((t, l) -> { + aHeatingCoilSetter.accept(t, l); + return true; + }, aHeatingCoilGetter); + } + + /** + * Heating coil structure element. + * @param aHeatingCoilSetter Notify the controller of this new coil. + * Got called exactly once per coil. + * Might be called less times if structure test fails. + * If the setter returns false then it assumes the coil is rejected. + * @param aHeatingCoilGetter Get the current heating level. Null means no coil recorded yet. + */ + public static <T> IStructureElement<T> ofCoil(BiPredicate<T, CompressedSpacetimeCoilLevel> aHeatingCoilSetter, Function<T, CompressedSpacetimeCoilLevel> aHeatingCoilGetter) { + if (aHeatingCoilSetter == null || aHeatingCoilGetter == null) { + throw new IllegalArgumentException(); + } + return new IStructureElement<T>() { + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + if (!(block instanceof IHeatingCoil)) + return false; + CompressedSpacetimeCoilLevel existingLevel = aHeatingCoilGetter.apply(t), + newLevel = ((IHeatingCoil) block).getCoilHeat(world.getBlockMetadata(x, y, z)); + if (existingLevel == null || existingLevel == CompressedSpacetimeCoilLevel.None) { + return aHeatingCoilSetter.test(t, newLevel); + } else { + return newLevel == existingLevel; + } + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, GregTech_API.sBlockCasings5, getMeta(trigger)); + return true; + } + + private int getMeta(ItemStack trigger) { + return GT_Block_Casings5.getMetaFromCoilHeat(CompressedSpacetimeCoilLevel.getFromTier(Math.min(CompressedSpacetimeCoilLevel.getMaxTier(), Math.max(0, trigger.stackSize - 1)))); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return world.setBlock(x, y, z, GregTech_API.sBlockCasings5, getMeta(trigger), 3); + } + }; + } +} |