feat: improve Fusion Reactor

This commit is contained in:
Timo Ley 2022-11-30 21:20:14 +01:00
parent 983f408142
commit bcf670fd8c
9 changed files with 121 additions and 129 deletions

View file

@ -67,6 +67,8 @@ import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.File;
import java.util.Arrays;
import java.util.logging.Logger;
import net.minecraft.block.Block;
@ -106,7 +108,7 @@ import universalelectricity.prefab.ore.OreGenerator;
dependencies = "required-after:basiccomponents")
public class AtomicScience {
public static Configuration CONFIGURATION =
new Configuration(Loader.instance().getConfigDir(), "AtomicScience.cfg");
new Configuration(new File(Loader.instance().getConfigDir(), "AtomicScience.cfg"));
public static final String ID = "AtomicScience";
public static final String CHANNEL = "AtomicScience";
public static final String PREFIX = "atomicscience:";
@ -120,6 +122,7 @@ public class AtomicScience {
public static boolean ALLOW_LAYERED_TURBINES = true;
public static boolean ALLOW_TOXIC_WASTE = true;
public static boolean ALLOW_RADIOACTIVE_ORES = true;
public static boolean REQUIRE_TRITIUM = false;
public static final int BLOCK_ID_PREFIX = 3768;
public static final int ENTITY_ID_PREFIX = 49;
public static Block blockRadioactive;
@ -142,7 +145,6 @@ public class AtomicScience {
public static Block bAtomicAssembler;
public static Block bFissionReactor;
public static Block bReactorTap;
public static Block bSuperConductor;
public static final int ITEM_ID_PREFIX = 13768;
public static Item itCell;
public static Item itCellUranium;
@ -150,6 +152,7 @@ public class AtomicScience {
public static Item itCellStrangeMatter;
public static Item itCellAntimatter;
public static Item itCellDeuterium;
public static Item itCellTritium;
public static Item itCellWater;
public static Item itBucketToxic;
public static Block bUraniumOre;
@ -164,6 +167,8 @@ public class AtomicScience {
public static Fluid FLUID_URANIUM_HEXAFLOURIDE;
public static Fluid FLUID_STEAM;
public static Fluid FLUID_TOXIC_WASTE;
public static Fluid FLUID_DEUTERIUM;
public static Fluid FLUID_TRITIUM;
public static final ArmorMaterial hazmatArmorMaterial =
EnumHelper.addArmorMaterial("HAZMAT", 0, new int[] {0, 0, 0, 0}, 0);
public static OreGenBase uraniumOreGeneration;
@ -208,7 +213,8 @@ public class AtomicScience {
STEAM_RATIO =
AtomicScience.CONFIGURATION.get("general", "Steam Ratio", STEAM_RATIO)
.getInt(STEAM_RATIO);
PotionRadiation.INSTANCE.getId();
REQUIRE_TRITIUM = AtomicScience.CONFIGURATION.get("general", "Require Tritium", REQUIRE_TRITIUM).getBoolean(REQUIRE_TRITIUM);
PotionRadiation.INSTANCE = new PotionRadiation(21, true, 5149489, "radiation");
blockRadioactive = (new BlockRadioactive()
.setBlockName("atomicscience:radioactive")
.setCreativeTab(TabAS.INSTANCE));
@ -250,6 +256,7 @@ public class AtomicScience {
itCell = new ItCell("cellEmpty");
itCellUranium = new ItFissileFuel();
itCellDeuterium = new ItCell("cellDeuterium");
itCellTritium =new ItCell("cellTritium");
itCellStrangeMatter = new ItStrangeMatter();
itCellAntimatter = new ItAntimatterCell();
itCellWater = new ItCell("cellWater");
@ -260,6 +267,8 @@ public class AtomicScience {
FLUID_URANIUM_HEXAFLOURIDE = getOrRegisterFluid("uranium_hexafluoride");
FLUID_STEAM = getOrRegisterFluid("steam");
FLUID_TOXIC_WASTE = getOrRegisterFluid("toxic_waste");
FLUID_DEUTERIUM = getOrRegisterFluid("deuterium");
FLUID_TRITIUM = getOrRegisterFluid("tritium");
bToxicWaste =
(new BToxicWaste("toxicWaste")).setCreativeTab((CreativeTabs)null);
itBucketToxic = (new ItemBucket(bToxicWaste))
@ -278,6 +287,7 @@ public class AtomicScience {
GameRegistry.registerItem(itCellStrangeMatter, "itCellStrangeMatter");
GameRegistry.registerItem(itCellAntimatter, "itCellAntimatter");
GameRegistry.registerItem(itCellDeuterium, "itCellDeuterium");
GameRegistry.registerItem(itCellTritium, "itCellTritium");
GameRegistry.registerItem(itCellWater, "itCellWater");
GameRegistry.registerItem(itBucketToxic, "itBucketToxic");
GameRegistry.registerItem(itYellowcake, "itYellowcake");
@ -311,7 +321,6 @@ public class AtomicScience {
GameRegistry.registerBlock(bAtomicAssembler, "bAtomicAssembler");
GameRegistry.registerBlock(bToxicWaste, "bToxicWaste");
GameRegistry.registerBlock(bReactorTap, "bReactorTap");
GameRegistry.registerBlock(bSuperConductor, "bSuperConductor");
uraniumOreGeneration = new OreGenReplaceStone("Uranium Ore", "oreUranium",
new ItemStack(bUraniumOre), 0,
25, 9, 3, "pickaxe", 2);
@ -336,6 +345,7 @@ public class AtomicScience {
OreDictionary.registerOre("cellEmpty", itCell);
OreDictionary.registerOre("cellUranium", itCellUranium);
OreDictionary.registerOre("cellDeuterium", itCellDeuterium);
OreDictionary.registerOre("cellTritium", itCellTritium);
OreDictionary.registerOre("cellWater", itCellWater);
OreDictionary.registerOre("strangeMatter", itCellStrangeMatter);
OreDictionary.registerOre("antimatterMilligram",
@ -345,6 +355,12 @@ public class AtomicScience {
FluidContainerRegistry.registerFluidContainer(new FluidContainerData(
new FluidStack(FluidRegistry.WATER, 1000), new ItemStack(itCellWater),
new ItemStack(itCell)));
FluidContainerRegistry.registerFluidContainer(new FluidContainerData(
new FluidStack(FLUID_DEUTERIUM, 200), new ItemStack(itCellDeuterium),
new ItemStack(itCell)));
FluidContainerRegistry.registerFluidContainer(new FluidContainerData(
new FluidStack(FLUID_TRITIUM, 200), new ItemStack(itCellTritium),
new ItemStack(itCell)));
ForgeChunkManager.setForcedChunkLoadingCallback(this, (tickets, world) -> {
for (Ticket ticket : tickets) {
if (ticket.getType() == Type.ENTITY && ticket.getEntity() != null &&

View file

@ -66,10 +66,11 @@ public class BToxicWaste extends BlockFluidClassic {
AtomicScience.FLUID_TOXIC_WASTE.setIcons(this.blockIcon);
// TODO: WTF
AtomicScience.FLUID_URANIUM_HEXAFLOURIDE.setIcons(
iconRegister.registerIcon("atomicscience:uraniumHexafluoride"));
AtomicScience.FLUID_URANIUM_HEXAFLOURIDE.setIcons(iconRegister.registerIcon("atomicscience:uraniumHexafluoride"));
// TODO: might override railcraft icon?
AtomicScience.FLUID_STEAM.setIcons(
iconRegister.registerIcon("atomicscience:steam"));
AtomicScience.FLUID_STEAM.setIcons(iconRegister.registerIcon("atomicscience:steam"));
AtomicScience.FLUID_DEUTERIUM.setIcons(iconRegister.registerIcon("atomicscience:deuterium"));
AtomicScience.FLUID_TRITIUM.setIcons(iconRegister.registerIcon("atomicscience:tritium"));
}
}

View file

@ -6,7 +6,7 @@ import net.minecraft.entity.player.EntityPlayer;
import universalelectricity.prefab.potion.CustomPotion;
public class PotionRadiation extends CustomPotion {
public static final PotionRadiation INSTANCE;
public static PotionRadiation INSTANCE;
public PotionRadiation(int id, boolean isBadEffect, int color, String name) {
super(AtomicScience.CONFIGURATION.get("Potion", name + " potion ID", id)
@ -29,10 +29,4 @@ public class PotionRadiation extends CustomPotion {
public boolean isReady(int duration, int amplifier) {
return duration % 10 == 0;
}
static {
AtomicScience.CONFIGURATION.load();
INSTANCE = new PotionRadiation(21, true, 5149489, "radiation");
AtomicScience.CONFIGURATION.save();
}
}

View file

@ -9,6 +9,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;
public class BFusionReactor extends BBase {
@ -21,23 +22,30 @@ public class BFusionReactor extends BBase {
EntityPlayer entityPlayer, int side,
float hitX, float hitY, float hitZ) {
TileEntity tileEntity = world.getTileEntity(x, y, z);
if (entityPlayer.inventory.getCurrentItem() != null &&
AtomicScience.isFusionFuel(entityPlayer.inventory.getCurrentItem())) {
if (((TFusionReactor) tileEntity).getStackInSlot(0) != null) {
ItemStack var10000 = ((TFusionReactor) tileEntity).getStackInSlot(0);
var10000.stackSize += entityPlayer.inventory.getCurrentItem().stackSize;
} else {
((TFusionReactor) tileEntity)
.setInventorySlotContents(0,
entityPlayer.inventory.getCurrentItem());
if (entityPlayer.inventory.getCurrentItem() != null) {
if (AtomicScience.isFusionFuel(entityPlayer.inventory.getCurrentItem())) {
int deuterium = entityPlayer.inventory.getCurrentItem().stackSize * 200;
int wouldFill = ((TFusionReactor) tileEntity).fill(null, new FluidStack(AtomicScience.FLUID_DEUTERIUM, deuterium), false);
int remainder = wouldFill % 200;
((TFusionReactor) tileEntity).fill(null, new FluidStack(AtomicScience.FLUID_DEUTERIUM, deuterium - remainder), true);
entityPlayer.inventory.getCurrentItem().stackSize -= wouldFill / 200;
if (entityPlayer.inventory.getCurrentItem().stackSize <= 0) {
entityPlayer.inventory.setInventorySlotContents(entityPlayer.inventory.currentItem, (ItemStack) null);
}
return true;
} else if (entityPlayer.inventory.getCurrentItem().getItem() == AtomicScience.itCellTritium) {
int tritium = entityPlayer.inventory.getCurrentItem().stackSize * 200;
int wouldFill = ((TFusionReactor) tileEntity).fill(null, new FluidStack(AtomicScience.FLUID_TRITIUM, tritium), false);
int remainder = wouldFill % 200;
((TFusionReactor) tileEntity).fill(null, new FluidStack(AtomicScience.FLUID_TRITIUM, tritium - remainder), true);
entityPlayer.inventory.getCurrentItem().stackSize -= wouldFill / 200;
if (entityPlayer.inventory.getCurrentItem().stackSize <= 0) {
entityPlayer.inventory.setInventorySlotContents(entityPlayer.inventory.currentItem, (ItemStack) null);
}
return true;
}
entityPlayer.inventory.setInventorySlotContents(
entityPlayer.inventory.currentItem, (ItemStack) null);
return true;
} else {
return false;
}
}
return false;
}
@Override

View file

@ -1,32 +1,37 @@
package atomicscience.hecheng;
import atomicscience.AtomicScience;
import atomicscience.jiqi.TInventory;
import atomicscience.api.IElectromagnet;
import calclavia.lib.TileEntityUniversalRunnable;
import calclavia.lib.render.ITagRender;
import java.util.HashMap;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
import universalelectricity.core.block.IElectricityStorage;
import universalelectricity.core.electricity.ElectricityPack;
import universalelectricity.core.vector.Vector3;
public class TFusionReactor extends TInventory
implements ISidedInventory, IElectricityStorage, ITagRender {
public class TFusionReactor extends TileEntityUniversalRunnable
implements IFluidHandler, IElectricityStorage, ITagRender {
public static final int YAO_DAO = 1000;
public static final int YONG_DIAN = 20000;
private ItemStack deuteriumStack = null;
public final FluidTank deuteriumTank = new FluidTank(AtomicScience.FLUID_DEUTERIUM, 0, 12800);
public final FluidTank tritiumTank = new FluidTank(AtomicScience.FLUID_TRITIUM, 0, 12800);
public float rotation = 0.0F;
@Override
public ElectricityPack getRequest() {
return this.deuteriumStack != null
return this.hasFuel()
? new ElectricityPack(20000.0D / this.getVoltage(), this.getVoltage())
: new ElectricityPack();
}
@ -36,18 +41,22 @@ public class TFusionReactor extends TInventory
super.updateEntity();
if (!this.worldObj.isRemote) {
if (!this.isDisabled() && super.wattsReceived >= 20000.0D &&
this.deuteriumStack != null && super.ticks % 20L == 0L) {
this.hasFuel() && super.ticks % 20L == 0L) {
for (int i = 2; i < 6; ++i) {
Vector3 diDian = new Vector3(this);
diDian.modifyPositionFromSide(ForgeDirection.getOrientation(i), 2.0D);
AtomicScience.bPlasma.spawn(this.worldObj, diDian.intX(),
diDian.intY(), diDian.intZ(),
(byte) 7);
diDian.modifyPositionFromSide(ForgeDirection.getOrientation(i), 1.0D);
if (diDian.getBlock(worldObj) instanceof IElectromagnet) {
diDian.modifyPositionFromSide(ForgeDirection.getOrientation(i), 1.0D);
AtomicScience.bPlasma.spawn(this.worldObj, diDian.intX(), diDian.intY(), diDian.intZ(), (byte) 7);
}
}
this.setJoules(Math.max(super.wattsReceived - 20000.0D, 0.0D));
if (this.worldObj.rand.nextInt(10) == 0) {
this.decrStackSize(0, 1);
deuteriumTank.drain(200, true);
if (AtomicScience.REQUIRE_TRITIUM) {
tritiumTank.drain(200, true);
}
}
}
@ -61,54 +70,36 @@ public class TFusionReactor extends TInventory
public Packet getDescriptionPacket() {
NBTTagCompound nbt = new NBTTagCompound();
nbt.setDouble("wattsReceived", super.wattsReceived);
nbt.setInteger("stackSize", this.deuteriumStack != null
? this.deuteriumStack.stackSize
: 0);
nbt.setInteger("deuterium", this.deuteriumTank.getFluidAmount());
nbt.setInteger("tritium", this.tritiumTank.getFluidAmount());
return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord,
this.getBlockMetadata(), nbt);
}
// @Override
// public void handlePacketData(INetworkManager network, int packetType,
// Packet250CustomPayload packet,
// EntityPlayer player,
// ByteArrayDataInput dataStream) {
// try {
// super.wattsReceived = dataStream.readDouble();
// this.setInventorySlotContents(
// 0, new ItemStack(AtomicScience.itCellDao,
// dataStream.readInt()));
// } catch (Exception var7) {
// var7.printStackTrace();
// }
// }
@Override
public void onDataPacket(NetworkManager arg0,
S35PacketUpdateTileEntity arg1) {
NBTTagCompound nbt = arg1.func_148857_g();
super.wattsReceived = nbt.getDouble("wattsReceived");
this.setInventorySlotContents(0,
new ItemStack(AtomicScience.itCellDeuterium,
nbt.getInteger("stackSize")));
this.deuteriumTank.setFluid(new FluidStack(AtomicScience.FLUID_DEUTERIUM, nbt.getInteger("deuterium")));
this.tritiumTank.setFluid(new FluidStack(AtomicScience.FLUID_TRITIUM, nbt.getInteger("tritium")));
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
super.wattsReceived = nbt.getDouble("wattsReceived");
this.deuteriumStack = new ItemStack(AtomicScience.itCellDeuterium,
nbt.getInteger("stackSize"));
this.deuteriumTank.setFluid(new FluidStack(AtomicScience.FLUID_DEUTERIUM, nbt.getInteger("deuterium")));
this.tritiumTank.setFluid(new FluidStack(AtomicScience.FLUID_TRITIUM, nbt.getInteger("tritium")));
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setDouble("wattsReceived", super.wattsReceived);
nbt.setInteger("stackSize", this.deuteriumStack != null
? this.deuteriumStack.stackSize
: 0);
nbt.setInteger("deuterium", this.deuteriumTank.getFluidAmount());
nbt.setInteger("tritium", this.tritiumTank.getFluidAmount());
}
@Override
@ -126,83 +117,64 @@ public class TFusionReactor extends TInventory
return 20000.0D;
}
@Override
public int getSizeInventory() {
return 1;
}
@Override
public ItemStack getStackInSlot(int var1) {
return this.deuteriumStack != null && this.deuteriumStack.stackSize <= 0
? null
: this.deuteriumStack;
}
@Override
public ItemStack decrStackSize(int i, int amount) {
if (this.deuteriumStack != null) {
ItemStack itemstack;
if (this.deuteriumStack.stackSize <= amount) {
itemstack = this.deuteriumStack;
this.deuteriumStack = null;
return itemstack;
} else {
itemstack = this.deuteriumStack.splitStack(amount);
if (this.deuteriumStack.stackSize == 0) {
this.deuteriumStack = null;
}
return itemstack;
}
} else {
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int var1) {
return this.deuteriumStack;
}
@Override
public void setInventorySlotContents(int i, ItemStack itemStack) {
this.deuteriumStack = itemStack;
}
@Override
public int getInventoryStackLimit() {
return 1000;
}
@Override
public float addInformation(HashMap map, EntityPlayer player) {
if (this.deuteriumStack != null) {
map.put("Deuterium: " + this.deuteriumStack.stackSize,
if (this.deuteriumTank.getFluidAmount() > 0) {
map.put("Deuterium: " + this.deuteriumTank.getFluidAmount() + " mB",
Integer.valueOf(16777215));
} else {
map.put("No Deuterium", Integer.valueOf(16777215));
}
if (this.tritiumTank.getFluidAmount() > 0) {
map.put("Tritium: " + this.tritiumTank.getFluidAmount() + " mB",
Integer.valueOf(16777215));
} else if (AtomicScience.REQUIRE_TRITIUM) {
map.put("No Tritium", Integer.valueOf(16777215));
}
return 1.0F;
}
@Override
public int[] getAccessibleSlotsFromSide(int var1) {
return new int[] { 0 };
public boolean hasFuel() {
return deuteriumTank.getFluidAmount() >= 200 && (tritiumTank.getFluidAmount() >= 200 || !AtomicScience.REQUIRE_TRITIUM);
}
@Override
public boolean isItemValidForSlot(int slotID, ItemStack itemStack) {
return itemStack.getItem() == AtomicScience.itCellDeuterium;
public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
if (resource.getFluid() == AtomicScience.FLUID_DEUTERIUM) {
return deuteriumTank.fill(resource, doFill);
} else if (resource.getFluid() == AtomicScience.FLUID_TRITIUM) {
return tritiumTank.fill(resource, doFill);
}
return 0;
}
@Override
public boolean canInsertItem(int i, ItemStack itemstack, int j) {
return this.isItemValidForSlot(i, itemstack);
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
return null;
}
@Override
public boolean canExtractItem(int i, ItemStack itemstack, int j) {
return this.isItemValidForSlot(i, itemstack);
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) {
return null;
}
@Override
public boolean canFill(ForgeDirection from, Fluid fluid) {
return (fluid == AtomicScience.FLUID_DEUTERIUM && deuteriumTank.getFluidAmount() < deuteriumTank.getCapacity()) || (fluid == AtomicScience.FLUID_TRITIUM && tritiumTank.getFluidAmount() < tritiumTank.getCapacity());
}
@Override
public boolean canDrain(ForgeDirection from, Fluid fluid) {
return false;
}
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection from) {
return new FluidTankInfo[] {
new FluidTankInfo(this.deuteriumTank),
new FluidTankInfo(this.tritiumTank)
};
}
}

View file

@ -14,6 +14,7 @@ item.atomicscience\:bucketToxicWaste.name=Toxic Waste Bucket
item.atomicscience\:cellEmpty.name=Empty Cell
item.atomicscience\:cellWater.name=Water Cell
item.atomicscience\:cellDeuterium.name=Deuterium Cell
item.atomicscience\:cellTritium.name=Tritium Cell
item.atomicscience\:strangeMatter.name=Strange Matter
item.atomicscience\:antimatter.name=Antimatter

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB