Merge branch 'HbmMods:master' into master

This commit is contained in:
Raaaaaaaaaay 2026-03-26 23:24:20 +02:00 committed by GitHub
commit 27d18939b0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
180 changed files with 241 additions and 214 deletions

View File

@ -6,6 +6,9 @@
* This allows plasma forges to be chained, or unused residue energy to be used in turbines
* Parts that interact with the fusion reactor directly, like the collector chambers, are not compatible
* Like all assembler-type machines, features custom animations (i spent a lot of time on those, please look at them for prolonged periods of time, ideally without blinking)
* Base production rates for plasma forge exclusive recipes are very slow
* Does not accept upgrades, however, can use up otherwise useless fission fragments and unstable isotopes to gain a temporary x4 speed bonus with no penalty
* Can also assemble fusion reactor vessels, which are cheaper but need quantum circuits
## Changed
* Doubled bismuth and tantalum yields from high-performance solvent bedrock ore processing
@ -17,9 +20,12 @@
* The DFC parts are now made in the plasma forge, with the recipes being more expensive
* The restrictions for firing Folly (using the scope, waiting for the startup) no longer apply to NPCs (which can never fulfill them anyway), allowing them to actually use it
* The plinking sound played when a drill cannot break a block now only plays once for the entire AoE instead of once for every single block that couldn't be broken
* Fluid barrels now have a sideways connector when hooked up to pipes, bridging the two pixel gap
## Fixed
* Fixed size 15 dual kerosene thruster not rendering at all
* Fixed HUD/jetpack toggle popup not working at all on multiplayer servers
* Fixed assembly machine NEI handler not being able to handle all thirteen inputs at once
* Fixed RBMK fuel channels playing the meltdown sound when broken while hot with meltdowns disabled
* Fixed RBMK fuel channels playing the meltdown sound when broken while hot with meltdowns disabled
* Fixed destroyer and crate minecarts having the same entity IDs, causing them to turn into each other when loading a save
* Fixed GL state leak for ICF lasers

View File

@ -1,6 +1,7 @@
package com.hbm.blocks.machine.fusion;
import com.hbm.blocks.BlockDummyable;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.fusion.TileEntityFusionPlasmaForge;
@ -28,11 +29,41 @@ public class MachineFusionPlasmaForge extends BlockDummyable {
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override public int[] getDimensions() { return new int[] { 0, 0, 5, 5, 5, 5 }; }
@Override public int[] getDimensions() { return new int[] { 2, 0, 2, 2, 5, 5 }; }
@Override public int getOffset() { return 5; }
@Override
public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return super.checkRequirement(world, x, y, z, dir, o) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, 3, -2, 4, 4}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, -2, 3, 4, 4}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, 4, -3, 3, 3}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, -3, 4, 3, 3}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, 5, -4, 2, 2}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, -4, 5, 2, 2}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {3, -2, 1, 1, 5, 5}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, -3, 0, 0, 4, 4}, x, y, z, dir);
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, 3, -2, 4, 4}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, -2, 3, 4, 4}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, 4, -3, 3, 3}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, -3, 4, 3, 3}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, 5, -4, 2, 2}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {2, 0, -4, 5, 2, 2}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {3, -2, 1, 1, 5, 5}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, -3, 0, 0, 4, 4}, this, dir);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
x += dir.offsetX * o;
z += dir.offsetZ * o;
for(int i = -2; i <= 2; i++) {
this.makeExtra(world, x + dir.offsetX * 5 + rot.offsetX * i, y, z + dir.offsetZ * 5 + rot.offsetZ * i);
}
}
}

View File

@ -181,10 +181,8 @@ public class EntityMappings {
addEntity(EntityGrenadeBouncyGeneric.class, "entity_grenade_bouncy_generic", 250);
addEntity(EntityGrenadeImpactGeneric.class, "entity_grenade_impact_generic", 250);
addEntity(EntityMinecartCrate.class, "entity_ntm_cart_crate", 250, false);
addEntity(EntityMinecartDestroyer.class, "entity_ntm_cart_crate", 250, false);
addEntity(EntityMinecartDestroyer.class, "entity_ntm_cart_destroyer", 250, false);
addEntity(EntityMinecartOre.class, "entity_ntm_cart_ore", 250, false);
addEntity(EntityMinecartBogie.class, "entity_ntm_cart_bogie", 250, false);
addEntity(EntityMagnusCartus.class, "entity_ntm_cart_chungoid", 250, false);
addEntity(EntityMinecartPowder.class, "entity_ntm_cart_powder", 250, false);
addEntity(EntityMinecartSemtex.class, "entity_ntm_cart_semtex", 250, false);
addEntity(EntityNukeTorex.class, "entity_effect_torex", 250, false);

View File

@ -1,20 +0,0 @@
package com.hbm.entity.cart;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.world.World;
public class EntityMinecartBogie extends EntityMinecart {
public EntityMinecartBogie(World world) {
super(world);
}
public EntityMinecartBogie(World world, double x, double y, double z) {
super(world, x, y ,z);
}
@Override
public int getMinecartType() {
return -1;
}
}

View File

@ -1,107 +0,0 @@
package com.hbm.entity.item;
import com.hbm.entity.cart.EntityMinecartBogie;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.packet.toclient.AuxParticlePacketNT;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class EntityMagnusCartus extends EntityMinecart {
public EntityMinecartBogie bogie;
public EntityMagnusCartus(World world) {
super(world);
}
public EntityMagnusCartus(World p_i1713_1_, double p_i1713_2_, double p_i1713_4_, double p_i1713_6_) {
super(p_i1713_1_, p_i1713_2_, p_i1713_4_, p_i1713_6_);
}
@Override
public int getMinecartType() {
return -1;
}
@Override
protected void entityInit() {
super.entityInit();
this.dataWatcher.addObject(25, new Integer(0));
}
public void setBogie(EntityMinecartBogie bogie) {
this.bogie = bogie;
this.dataWatcher.updateObject(25, bogie.getEntityId());
}
public int getBogieID() {
return this.dataWatcher.getWatchableObjectInt(25);
}
@Override
public void onUpdate() {
super.onUpdate();
if(!worldObj.isRemote) {
double dist = 3.0D;
double force = 0.3D;
if(bogie == null) {
Vec3 vec = Vec3.createVectorHelper(dist, 0, 0);
vec.rotateAroundY(rand.nextFloat() * 6.28F);
EntityMinecartBogie bog = new EntityMinecartBogie(worldObj, posX + vec.xCoord, posY + vec.yCoord, posZ + vec.zCoord);
this.setBogie(bog);
worldObj.spawnEntityInWorld(bog);
}
Vec3 delta = Vec3.createVectorHelper(posX - bogie.posX, posY - bogie.posY, posZ - bogie.posZ);
delta = delta.normalize();
delta.xCoord *= dist;
delta.yCoord *= dist;
delta.zCoord *= dist;
double x = posX - delta.xCoord;
double y = posY - delta.yCoord;
double z = posZ - delta.zCoord;
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", "reddust");
PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(this.dimension, x, y, z, 25));
Vec3 pull = Vec3.createVectorHelper(x - bogie.posX, y - bogie.posY, z - bogie.posZ);
bogie.motionX += pull.xCoord * force;
bogie.motionY += pull.yCoord * force;
bogie.motionZ += pull.zCoord * force;
if(pull.lengthVector() > 1) {
this.motionX -= pull.xCoord * force;
this.motionY -= pull.yCoord * force;
this.motionZ -= pull.zCoord * force;
}
}
}
@Override
protected void readEntityFromNBT(NBTTagCompound nbt) {
super.readEntityFromNBT(nbt);
int bogieID = nbt.getInteger("bogie");
Entity e = worldObj.getEntityByID(bogieID);
if(e instanceof EntityMinecartBogie) {
this.setBogie((EntityMinecartBogie) e);
}
}
@Override
protected void writeEntityToNBT(NBTTagCompound nbt) {
super.writeEntityToNBT(nbt);
nbt.setInteger("bogie", this.getBogieID());
}
}

View File

@ -1,5 +1,8 @@
package com.hbm.inventory.gui;
import java.util.ArrayList;
import java.util.List;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerMachinePlasmaForge;
@ -18,6 +21,7 @@ import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.ResourceLocation;
@ -58,6 +62,40 @@ public class GUIMachinePlasmaForge extends GuiInfoContainer {
} else {
drawCustomInfoStat(mouseX, mouseY, guiLeft + 25, guiTop + 115, 18, 18, mouseX, mouseY, "0TU / 0TU");
}
if(this.isMouseOverSlot(this.inventorySlots.getSlot(2), mouseX, mouseY) && forge.slots[2] == null && this.mc.thePlayer.inventory.getItemStack() == null) {
List<ItemStack> list = new ArrayList();
forge.boosters.forEach((pair) -> list.addAll(pair.getKey().extractForNEI()));
List<Object[]> lines = new ArrayList();
ItemStack selected = list.get(0);
// ...i should really make a util for this
if(list.size() > 1) {
int cycle = (int) ((System.currentTimeMillis() % (1000 * list.size())) / 1000);
selected = ((ItemStack) list.get(cycle)).copy();
selected.stackSize = 0;
list.set(cycle, selected);
}
lines.add(new Object[] {"Booster Isotope:"});
if(list.size() < 10) {
lines.add(list.toArray());
} else if(list.size() < 24) {
lines.add(list.subList(0, list.size() / 2).toArray());
lines.add(list.subList(list.size() / 2, list.size()).toArray());
} else {
int bound0 = (int) Math.ceil(list.size() / 3D);
int bound1 = (int) Math.ceil(list.size() / 3D * 2D);
lines.add(list.subList(0, bound0).toArray());
lines.add(list.subList(bound0, bound1).toArray());
lines.add(list.subList(bound1, list.size()).toArray());
}
lines.add(new Object[] {I18nUtil.resolveKey(selected.getDisplayName())});
this.drawStackText(lines, mouseX, mouseY, this.fontRendererObj);
}
}
@Override
@ -81,7 +119,7 @@ public class GUIMachinePlasmaForge extends GuiInfoContainer {
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
int p = (int) (forge.power * 61 / forge.maxPower);
int p = (int) (forge.power * 62 / forge.maxPower);
drawTexturedModalRect(guiLeft + 152, guiTop + 80 - p, 176, 62 - p, 16, p);
if(forge.plasmaModule.progress > 0) {
@ -106,7 +144,7 @@ public class GUIMachinePlasmaForge extends GuiInfoContainer {
}
double inputGauge = recipe == null ? 0 : Math.min(((double) forge.plasmaEnergySync / (double) recipe.ignitionTemp), 1.5) / 1.5D;
double boosterGauge = 0;
double boosterGauge = forge.maxBooster <= 0 ? 0 : (double) forge.booster / (double) forge.maxBooster;
// input energy
GaugeUtil.drawSmoothGauge(guiLeft + 34, guiTop + 124, this.zLevel, inputGauge, 5, 2, 1, 0xA00000);

View File

@ -25,7 +25,7 @@ public class PlasmaForgeRecipe extends GenericRecipe {
autoSwitch(list);
duration(list);
power(list);
list.add(EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("gui.recipe.fusionIn") + ": " + BobMathUtil.getShortNumber(ignitionTemp) + "TU/t");
list.add(EnumChatFormatting.LIGHT_PURPLE + I18nUtil.resolveKey("gui.recipe.plasmaIn") + ": " + BobMathUtil.getShortNumber(ignitionTemp) + "TU/t");
input(list);
output(list);

View File

@ -57,7 +57,7 @@ public class PlasmaForgeRecipes extends GenericRecipes<PlasmaForgeRecipe> {
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.hde").setInputEnergy(10_000_000).setup(600, 25_000_000L)
.outputItems(DictFrame.fromOne(ModItems.part_generic, EnumPartType.HDE))
.inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 2), new OreDictStack(CMB.plateWelded(), 1), new ComparableStack(ModItems.ingot_cft))
.inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000)).setGroup(autoPlate, this));
.inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000)));
// Welded Plates
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.weldiron").setInputEnergy(500_000).setup(50, 100L)
@ -99,52 +99,68 @@ public class PlasmaForgeRecipes extends GenericRecipes<PlasmaForgeRecipe> {
.inputItems(new OreDictStack(OSMIRIDIUM.plateCast(), 2))
.inputFluids(new FluidStack(Fluids.REFORMGAS, 16_000)).setGroup(autoPlate, this));
// Fusion
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.fusionvessel").setInputEnergy(3_000_000).setup(1_200, 2_000_000).outputItems(new ItemStack(ModBlocks.fusion_torus))
.inputItems(new ComparableStack(ModBlocks.fusion_component, 64, 0),
new ComparableStack(ModBlocks.fusion_component, 64, 0),
new ComparableStack(ModBlocks.fusion_component, 64, 0),
new ComparableStack(ModBlocks.fusion_component, 64, 0),
new ComparableStack(ModBlocks.fusion_component, 64, 0),
new ComparableStack(ModBlocks.fusion_component, 64, 0),
new ComparableStack(ModBlocks.fusion_component, 64, 3),
new ComparableStack(ModBlocks.fusion_component, 64, 3),
new ComparableStack(ModBlocks.fusion_component, 64, 3),
new ComparableStack(ModBlocks.fusion_component, 64, 2),
new ComparableStack(ModBlocks.fusion_component, 64, 2),
new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
// ICF
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcell").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal()))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcell").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CELL.ordinal()))
.inputItems(new ComparableStack(ModItems.ingot_cft, 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new ComparableStack(ModBlocks.glass_quartz, 16))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 2, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 8), new ComparableStack(ModBlocks.glass_quartz, 16))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfemitter").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.EMITTER.ordinal()))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfemitter").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.EMITTER.ordinal()))
.inputItems(new OreDictStack(W.plateWelded(), 4), new OreDictStack(MAGTUNG.wireDense(), 16))
.inputItemsEx(new OreDictStack(W.plateWelded(), 8), new OreDictStack(MAGTUNG.wireDense(), 16))
.inputFluids(new FluidStack(Fluids.XENON, 16_000))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcapacitor").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CAPACITOR.ordinal()))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcapacitor").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CAPACITOR.ordinal()))
.inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 1), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 3, EnumExpensiveType.FERRO_PLATING), new OreDictStack(ND.wireDense(), 16), new OreDictStack(SBD.wireDense(), 2))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfturbo").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.TURBO.ordinal()))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfturbo").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.TURBO.ordinal()))
.inputItems(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new OreDictStack(DNT.wireDense(), 4), new OreDictStack(SBD.wireDense(), 4))
.inputItemsEx(new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(DNT.wireDense(), 8), new OreDictStack(SBD.wireDense(), 4))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcasing").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CASING.ordinal()))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcasing").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.CASING.ordinal()))
.inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(BIGMT.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfport").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.PORT.ordinal()))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfport").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_laser_component, 1, EnumICFPart.PORT.ordinal()))
.inputItems(new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new OreDictStack(ND.wireDense(), 16))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcontroller").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_controller, 1))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcontroller").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_controller, 1))
.inputItems(new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 4), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.BRONZE_TUBES), new ComparableStack(ModItems.ingot_cft, 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.COMPUTER))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfscaffold").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_component, 1, 0))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfscaffold").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_component, 1, 0))
.inputItems(new OreDictStack(STEEL.plateWelded(), 4), new OreDictStack(TI.plateWelded(), 2))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 8, EnumExpensiveType.STEEL_PLATING))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfvessel").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_component, 1, 1))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfvessel").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_component, 1, 1))
.inputItems(new ComparableStack(ModItems.ingot_cft, 1), new OreDictStack(CMB.plateCast(), 1), new OreDictStack(W.plateWelded(), 2))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfstructural").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_component, 1, 3))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfstructural").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.icf_component, 1, 3))
.inputItems(new OreDictStack(STEEL.plateWelded(), 2), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 1))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(STEEL.plateWelded(), 8))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcore").setInputEnergy(1_000_000).setup(1_200, 10_000_000).outputItems(new ItemStack(ModBlocks.struct_icf_core, 1))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfcore").setInputEnergy(1_000_000).setup(3_000, 10_000_000).outputItems(new ItemStack(ModBlocks.struct_icf_core, 1))
.inputItems(new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 16), new OreDictStack(ANY_BISMOIDBRONZE.plateCast(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.BISMOID), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.QUANTUM))
.inputItemsEx(new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.BRONZE_TUBES), new OreDictStack(CMB.plateWelded(), 16), new OreDictStack(SBD.wireDense(), 32), new ComparableStack(ModItems.circuit, 32, EnumCircuitType.QUANTUM), new ComparableStack(ModItems.item_expensive, 16, EnumExpensiveType.COMPUTER))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfpress").setInputEnergy(1_000_000).setup(200, 10_000_000).outputItems(new ItemStack(ModBlocks.machine_icf_press, 1))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.icfpress").setInputEnergy(1_000_000).setup(800, 10_000_000).outputItems(new ItemStack(ModBlocks.machine_icf_press, 1))
.inputItems(new OreDictStack(GOLD.plateCast(), 8), new ComparableStack(ModItems.motor, 4), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID))
.setPools528(PlasmaForgeRecipes.POOL_PREFIX_528 + "chlorophyte"));
@ -164,7 +180,7 @@ public class PlasmaForgeRecipes extends GenericRecipes<PlasmaForgeRecipe> {
new ComparableStack(ModItems.fragment_meteorite, 64),
new ComparableStack(ModItems.fragment_meteorite, 64)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("ass.fensusan").setInputEnergy(50_000_000).setup(1_200, 50_000_000).outputItems(new ItemStack(ModBlocks.machine_battery_redd, 1))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("ass.fensusan").setInputEnergy(50_000_000).setup(6_000, 50_000_000).outputItems(new ItemStack(ModBlocks.machine_battery_redd, 1))
.inputItems(new ComparableStack(ModItems.ingot_electronium, 64),
new ComparableStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_QUANTUM),
new OreDictStack(OSMIRIDIUM.plateWelded(), 64),
@ -190,7 +206,7 @@ public class PlasmaForgeRecipes extends GenericRecipes<PlasmaForgeRecipe> {
new ComparableStack(ModItems.ingot_cft, 64),
new ComparableStack(ModItems.ingot_cft, 64)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.gerald").setInputEnergy(25_000_000).setup(6_000, 50_000_000).outputItems(new ItemStack(ModItems.sat_gerald, 1))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.gerald").setInputEnergy(25_000_000).setup(12_000, 50_000_000).outputItems(new ItemStack(ModItems.sat_gerald, 1))
.inputItems(new OreDictStack(SBD.plateCast(), 64),
new OreDictStack(SBD.plateCast(), 64),
new OreDictStack(BSCCO.wireDense(), 64),
@ -216,15 +232,15 @@ public class PlasmaForgeRecipes extends GenericRecipes<PlasmaForgeRecipe> {
new ComparableStack(ModItems.coin_ufo, 1)).setPools(PlasmaForgeRecipes.POOL_PREFIX_DISCOVER + "gerald"));
// really, really boring fucking temp recipes
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfccore").setInputEnergy(50_000_000).setup(1_200, 100_000_000).outputItems(new ItemStack(ModBlocks.dfc_core)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 12_000))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfccore").setInputEnergy(50_000_000).setup(12_000, 100_000_000).outputItems(new ItemStack(ModBlocks.dfc_core)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 12_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(DNT.wireDense(), 16), new ComparableStack(ModItems.circuit, 12, EnumCircuitType.CONTROLLER_QUANTUM), new ComparableStack(ModItems.singularity_spark), new ComparableStack(ModItems.powder_chlorophyte, 64)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcemitter").setInputEnergy(50_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_emitter)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcemitter").setInputEnergy(50_000_000).setup(1_200, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_emitter)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(STAR.wireDense(), 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_QUANTUM)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcreceiver").setInputEnergy(50_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_receiver)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcreceiver").setInputEnergy(50_000_000).setup(1_200, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_receiver)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(STAR.plateCast(), 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_QUANTUM)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcinjector").setInputEnergy(50_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_injector)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcinjector").setInputEnergy(50_000_000).setup(1_200, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_injector)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(BIGMT.plateCast(), 16), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CONTROLLER_ADVANCED)));
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcstabilizer").setInputEnergy(50_000_000).setup(600, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_stabilizer)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
this.register((PlasmaForgeRecipe) new PlasmaForgeRecipe("plsm.dfcstabilizer").setInputEnergy(50_000_000).setup(1_200, 10_000_000).outputItems(new ItemStack(ModBlocks.dfc_stabilizer)).inputFluids(new FluidStack(Fluids.STELLAR_FLUX, 4_000))
.inputItems(new OreDictStack(OSMIRIDIUM.plateWelded(), 16), new OreDictStack(SBD.wireDense(), 16), new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CONTROLLER_QUANTUM)));
}

View File

@ -728,7 +728,6 @@ public class ClientProxy extends ServerProxy {
RenderingRegistry.registerEntityRenderingHandler(EntityMinecartTest.class, new RenderMinecartTest());
RenderingRegistry.registerEntityRenderingHandler(EntityMinecartCrate.class, new RenderMinecart());
RenderingRegistry.registerEntityRenderingHandler(EntityMinecartNTM.class, new RenderNeoCart());
RenderingRegistry.registerEntityRenderingHandler(EntityMagnusCartus.class, new RenderMagnusCartus());
RenderingRegistry.registerEntityRenderingHandler(EntityBoatRubber.class, new RenderBoatRubber());
//trains
RenderingRegistry.registerEntityRenderingHandler(SeatDummyEntity.class, new RenderEmpty());

View File

@ -15,6 +15,8 @@ public class NEIRegistry {
if(!handlers.isEmpty()) return handlers;
handlers.add(new ToolingHandler());
handlers.add(new ConstructionHandler());
handlers.add(new AnnihilatorHandler());
handlers.add(new AnvilRecipeHandler());
handlers.add(new SmithingRecipeHandler());
@ -47,8 +49,6 @@ public class NEIRegistry {
handlers.add(new FuelPoolHandler());
handlers.add(new RBMKRodDisassemblyHandler());
handlers.add(new RBMKWasteDecayHandler());
handlers.add(new ToolingHandler());
handlers.add(new ConstructionHandler());
handlers.add(new SatelliteHandler());
//universal boyes

View File

@ -1,44 +0,0 @@
package com.hbm.render.entity.item;
import org.lwjgl.opengl.GL11;
import com.hbm.entity.cart.EntityMinecartBogie;
import com.hbm.entity.item.EntityMagnusCartus;
import com.hbm.main.ResourceManager;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Vec3;
public class RenderMagnusCartus extends Render {
@Override
public void doRender(Entity entity, double x, double y, double z, float f0, float f1) {
EntityMagnusCartus cart = (EntityMagnusCartus) entity;
Entity e = entity.worldObj.getEntityByID(cart.getBogieID());
EntityMinecartBogie bogie = null;
if(e instanceof EntityMinecartBogie) {
bogie = (EntityMinecartBogie) e;
}
if(bogie == null)
return;
Vec3 vec = Vec3.createVectorHelper(cart.posX - bogie.posX, cart.posY - bogie.posY, cart.posZ - bogie.posZ);
GL11.glPushMatrix();
GL11.glTranslated(x - vec.xCoord * 0.5, y - vec.yCoord * 0.5, z - vec.zCoord * 0.5);
GL11.glScaled(1.2, 1.2, 1.2);
GL11.glRotated(Math.atan2(vec.xCoord, vec.zCoord) / Math.PI * 180D - 90, 0, 1, 0);
this.bindTexture(this.getEntityTexture(cart));
ResourceManager.b29.renderAll();
GL11.glPopMatrix();
}
@Override
protected ResourceLocation getEntityTexture(Entity entity) {
return ResourceManager.b29_0_tex;
}
}

View File

@ -50,6 +50,15 @@ public class RenderFusionPlasmaForge extends TileEntitySpecialRenderer implement
TileEntityFusionPlasmaForge forge = (TileEntityFusionPlasmaForge) tile;
GL11.glShadeModel(GL11.GL_SMOOTH);
if(forge.connected) {
GL11.glPushMatrix();
GL11.glTranslated(-2, 0, 0);
bindTexture(ResourceManager.fusion_torus_tex);
ResourceManager.fusion_torus.renderPart("Bolts1");
GL11.glPopMatrix();
}
bindTexture(ResourceManager.fusion_plasma_forge_tex);
ResourceManager.fusion_plasma_forge.renderPart("Body");
@ -113,7 +122,8 @@ public class RenderFusionPlasmaForge extends TileEntitySpecialRenderer implement
GL11.glRotated(jet[2], 0, 0, 1);
GL11.glTranslated(-1.5, -3.75, 0);
ResourceManager.fusion_plasma_forge.renderPart("Jet");
if(forge.didProcess && forge.armJet.angles[2] == forge.armJet.prevAngles[2]) renderJet(forge);
// the forge needs to be active and the jet arm needs to not move and not be in base position
if(forge.didProcess && forge.armJet.angles[2] == forge.armJet.prevAngles[2] && forge.armJet.angles[2] != 0) renderJet(forge);
} GL11.glPopMatrix();
} GL11.glPopMatrix();

View File

@ -38,6 +38,7 @@ public class RenderICFController extends TileEntitySpecialRenderer {
BeamPronter.prontBeam(Vec3.createVectorHelper(controller.laserLength, 0, 0), EnumWaveType.SPIRAL, EnumBeamType.SOLID, 0x202020, 0x100000, 0, 1, 0F, 10, 0.125F);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopAttrib();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
}

View File

@ -1,10 +1,16 @@
package com.hbm.tileentity.machine.fusion;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Random;
import java.util.function.Consumer;
import static com.hbm.inventory.OreDictManager.*;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.RecipesCommon.AStack;
import com.hbm.inventory.RecipesCommon.OreDictStack;
import com.hbm.inventory.container.ContainerMachinePlasmaForge;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
@ -13,6 +19,7 @@ import com.hbm.inventory.recipes.PlasmaForgeRecipe;
import com.hbm.inventory.recipes.PlasmaForgeRecipes;
import com.hbm.items.ModItems;
import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.module.machine.ModuleMachinePlasma;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachineBase;
@ -21,6 +28,7 @@ import com.hbm.uninos.INetworkProvider;
import com.hbm.uninos.UniNodespace;
import com.hbm.uninos.networkproviders.PlasmaNetworkProvider;
import com.hbm.util.BobMathUtil;
import com.hbm.util.Tuple.Pair;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.DirPos;
@ -53,6 +61,10 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
public double neutronEnergy;
protected GenNode receiverNode;
protected GenNode providerNode;
public boolean connected;
public int booster;
public int maxBooster;
public int timeOffset = -1;
@ -67,6 +79,31 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
public ForgeArm armStriker;
public ForgeArm armJet;
public static List<Pair<AStack, Integer>> boosters = new ArrayList();
static {
boosters.add(new Pair(new OreDictStack(CO60.nugget()), 20));
boosters.add(new Pair(new OreDictStack(CO60.billet()), 120));
boosters.add(new Pair(new OreDictStack(CO60.ingot()), 200));
boosters.add(new Pair(new OreDictStack(CO60.dust()), 200));
boosters.add(new Pair(new OreDictStack(SR90.nugget()), 40));
boosters.add(new Pair(new OreDictStack(SR90.dustTiny()), 40));
boosters.add(new Pair(new OreDictStack(SR90.billet()), 240));
boosters.add(new Pair(new OreDictStack(SR90.ingot()), 400));
boosters.add(new Pair(new OreDictStack(SR90.dust()), 400));
boosters.add(new Pair(new OreDictStack(AU198.nugget()), 60));
boosters.add(new Pair(new OreDictStack(AU198.billet()), 360));
boosters.add(new Pair(new OreDictStack(AU198.ingot()), 600));
boosters.add(new Pair(new OreDictStack(AU198.dust()), 600));
boosters.add(new Pair(new OreDictStack(I131.dustTiny()), 60));
boosters.add(new Pair(new OreDictStack(I131.dust()), 600));
boosters.add(new Pair(new OreDictStack(XE135.dustTiny()), 60));
boosters.add(new Pair(new OreDictStack(XE135.dust()), 600));
boosters.add(new Pair(new OreDictStack(CS137.dustTiny()), 50));
boosters.add(new Pair(new OreDictStack(CS137.dust()), 500));
boosters.add(new Pair(new OreDictStack(AT209.dust()), 1_200));
}
public TileEntityFusionPlasmaForge() {
super(16);
this.inputTank = new FluidTank(Fluids.NONE, 16_000);
@ -102,6 +139,16 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
this.plasmaEnergySync = this.plasmaEnergy;
this.plasmaEnergy = 0;
if(booster <= 0 && slots[2] != null) {
for(Pair<AStack, Integer> booster : boosters) {
if(booster.getKey().matchesRecipe(slots[2], true)) {
this.maxBooster = this.booster = booster.getValue();
this.decrStackSize(2, 1);
break;
}
}
}
ForgeDirection rot = ForgeDirection.getOrientation(this.getBlockMetadata() - 10).getRotation(ForgeDirection.UP);
if(receiverNode == null || receiverNode.expired) receiverNode = this.createNode(PlasmaNetworkProvider.THE_PROVIDER, rot);
if(providerNode == null || providerNode.expired) providerNode = this.createNode(PlasmaNetworkProvider.THE_PROVIDER, rot.getOpposite());
@ -120,7 +167,7 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
if(inputTank.getTankType() != Fluids.NONE) this.trySubscribe(inputTank.getTankType(), worldObj, pos);
}
double speed = 1D;
double speed = booster > 0 ? 4D : 1D;
double pow = 1D;
boolean ignition = recipe != null ? recipe.ignitionTemp <= this.plasmaEnergySync : true;
@ -130,17 +177,22 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
if(this.plasmaModule.markDirty) this.markDirty();
long powerReceived = (long) Math.ceil(this.plasmaEnergySync * 0.75);
if(powerReceived > 0 && providerNode != null && providerNode.hasValidNet()) {
this.connected = false;
if(providerNode != null && providerNode.hasValidNet() && !providerNode.net.receiverEntries.isEmpty()) connected = true;
if(providerNode != null && providerNode.hasValidNet()) {
for(Object o : providerNode.net.receiverEntries.entrySet()) {
Entry<Object, Long> entry = (Entry<Object, Long>) o;
if(entry.getKey() instanceof IFusionPowerReceiver) {
((IFusionPowerReceiver) entry.getKey()).receiveFusionPower(powerReceived, this.neutronEnergy, plasmaRed, plasmaGreen, plasmaBlue);
if(powerReceived > 0) ((IFusionPowerReceiver) entry.getKey()).receiveFusionPower(powerReceived, this.neutronEnergy, plasmaRed, plasmaGreen, plasmaBlue);
}
}
}
if(this.didProcess && this.booster > 0) this.booster--;
this.neutronEnergy = 0D;
this.networkPackNT(100);
@ -171,7 +223,6 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
if(this.ringDelay <= 0) {
this.ringTarget += (worldObj.rand.nextDouble() + 1) * 60 * (worldObj.rand.nextBoolean() ? - 1 : 1);
this.ringSpeed = 2.5D;
//if(!this.muffled) MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, NTMSounds.ASSEMBLER_START, this.getVolume(0.25F), 1.25F + worldObj.rand.nextFloat() * 0.25F);
}
}
}
@ -190,6 +241,16 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
return node;
}
@Override
public void invalidate() {
super.invalidate();
if(!worldObj.isRemote) {
if(receiverNode != null) UniNodespace.destroyNode(worldObj, receiverNode);
if(providerNode != null) UniNodespace.destroyNode(worldObj, providerNode);
}
}
public DirPos[] getConPos() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10);
@ -220,6 +281,9 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
buf.writeLong(power);
buf.writeLong(maxPower);
buf.writeBoolean(didProcess);
buf.writeBoolean(connected);
buf.writeInt(booster);
buf.writeInt(maxBooster);
this.plasmaModule.serialize(buf);
}
@ -234,6 +298,9 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
this.power = buf.readLong();
this.maxPower = buf.readLong();
this.didProcess = buf.readBoolean();
this.connected = buf.readBoolean();
this.booster = buf.readInt();
this.maxBooster = buf.readInt();
this.plasmaModule.deserialize(buf);
}
@ -243,6 +310,8 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
this.inputTank.readFromNBT(nbt, "i");
this.power = nbt.getLong("power");
this.maxPower = nbt.getLong("maxPower");
this.booster = nbt.getInteger("booster");
this.maxBooster = nbt.getInteger("maxBooster");
this.plasmaModule.readFromNBT(nbt);
}
@ -252,6 +321,8 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
this.inputTank.writeToNBT(nbt, "i");
nbt.setLong("power", power);
nbt.setLong("maxPower", maxPower);
nbt.setInteger("booster", booster);
nbt.setInteger("maxBooster", maxBooster);
this.plasmaModule.writeToNBT(nbt);
}
@ -259,8 +330,12 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
public boolean isItemValidForSlot(int slot, ItemStack stack) {
if(slot == 0) return true; // battery
if(slot == 1 && stack.getItem() == ModItems.blueprints) return true;
// TODO booster material
if(this.plasmaModule.isItemValid(slot, stack)) return true; // recipe input crap
if(slot == 2) {
for(Pair<AStack, Integer> booster : boosters) { // booster isotopes
if(booster.getKey().matchesRecipe(stack, true)) return true;
}
}
return false;
}
@ -338,6 +413,9 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
public void updateArm() {
for(int i = 0; i < angles.length; i++) prevAngles[i] = angles[i];
if(!didProcess()) this.state = ForgeArmState.RETIRE;
if(this.state == ForgeArmState.RETIRE) this.actionDelay = 0;
if(this.actionDelay > 0) {
this.actionDelay--;
@ -372,6 +450,10 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
return !didMove;
}
public void playStrikerSound() {
MainRegistry.proxy.playSoundClient(xCoord, yCoord, zCoord, "hbm:item.boltgun", getVolume(0.25F), 1.25F);
}
public double[] getPositions(float interp) {
double[] pos = new double[this.angles.length];
for(int i = 0; i < pos.length; i++) {
@ -383,7 +465,7 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
public static enum ForgeArmType {
STRIKER(STRIKER_STATE_MACHINE, 6), // pivot to lower arm, lower arm to upper arm, upper arm to mount, mount to strikers, striker 1, striker 2
JET(JET_STATE_MACHINE, 4); // pivot to lower arm, lower arm to upper arm, upper arm to jet, jet
JET(JET_STATE_MACHINE, 4); // pivot to lower arm, lower arm to upper arm, upper arm to jet, jet (unused, actual jet is handled via other conditions)
protected final int angleCount;
protected final Consumer<ForgeArm> stateMachine;
@ -423,8 +505,6 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
public static Consumer<ForgeArm> STRIKER_STATE_MACHINE = (arm) -> {
if(!arm.didProcess()) arm.state = ForgeArmState.RETIRE;
switch(arm.state) {
case REPOSITION: {
if(arm.move()) {
@ -438,6 +518,7 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
arm.actionDelay = 0;
arm.state = ForgeArmState.RETRACT1;
arm.targetAngles[4] = 0D;
arm.playStrikerSound();
}
} break;
case RETRACT1: {
@ -452,6 +533,7 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
arm.actionDelay = 0;
arm.state = ForgeArmState.RETRACT2;
arm.targetAngles[5] = 0D;
arm.playStrikerSound();
}
} break;
case RETRACT2: {
@ -477,6 +559,7 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
} break;
}
// experimental bit to make the dual pivots reset between repositions for more movement, looked way too janky
/*if(arm.state == ForgeArmState.REPOSITION || arm.state == ForgeArmState.RETIRE) {
arm.targetAngles[3] = 0;
} else {
@ -487,12 +570,10 @@ public class TileEntityFusionPlasmaForge extends TileEntityMachineBase implement
@SuppressWarnings("incomplete-switch") // shut up
public static Consumer<ForgeArm> JET_STATE_MACHINE = (arm) -> {
if(!arm.didProcess()) arm.state = ForgeArmState.RETIRE;
switch(arm.state) {
case REPOSITION: {
if(arm.move()) {
arm.actionDelay = 20;
arm.actionDelay = 20 + rand.nextInt(3) * 10;
arm.state = ForgeArmState.REPOSITION;
choosePosition(arm, jetPositions);
}

View File

@ -411,6 +411,7 @@ container.machineLargeTurbine=Industrielle Dampfturbine
container.machineLiquefactor=Verflüssiger
container.machineMixer=Industrieller Mixer
container.machineOreSlopper=B.E.M.
container.machinePlasmaForge=Plasmaschmiede
container.machinePrecAss=Präzisions-Montagemaschine
container.machinePUREX=PUREX
container.machinePyroOven=Pyrolyseofen
@ -700,6 +701,19 @@ geiger.playerRes=Strahlungsresistenz:
geiger.title=GEIGERZÄHLER
geiger.title.dosimeter=DOSIMETER
general.na=N/A
gui.recipe.duration=Dauer
gui.recipe.consumption=Verbrauch
gui.recipe.fusionFlux=Produzierter Neutronenflux
gui.recipe.fusionIn=Benötigte Klystronenergie
gui.recipe.fusionOut=Erzeugte Plasmaenergie
gui.recipe.input=Input
gui.recipe.output=Output
gui.recipe.plasmaIn=Benötigte Plasmaenergie
gui.recipe.atPressure=bei
gui.recipe.setRecipe=Klicken um Rezept zu ändern
hadron.analysis=Analysiere...
hadron.buttonOn=Analysekammer (falls vorhanden) ist AN
hadron.buttonOff=Analysekammer ist AUS
@ -4366,6 +4380,7 @@ tile.fusion_klystron_creative.desc=Erzeugt unendlich viel Klystron-Energie.
tile.fusion_mhdt.name=MHD-Turbine
tile.fusion_mhdt.desc=Wandelt Plasmaenergie in verwendbare$elektrische Energie um. Effizienter als ein$konventioneller Boiler.$Benötigt Kühlung!
tile.fusion_motor.name=Magnetmotorstück
tile.fusion_plasma_forge.name=Plasmaschmiede
tile.fusion_torus.name=Fusionsreaktor-Plasmagefäß
tile.fusion_torus.desc=Hauptkomponente des Reaktors.$Benötigt Energie von einem Klystron zur Zündung,$erzeugt Plasmaenergie und Neutronenflux.$Benötigt Kühlung!
tile.fwatz_computer.name=Watzwerkrechenmatrix

View File

@ -817,6 +817,7 @@ container.machineLargeTurbine=Industrial Steam Turbine
container.machineLiquefactor=Liquefactor
container.machineMixer=Industrial Mixer
container.machineOreSlopper=B.O.P.
container.machinePlasmaForge=Plasma Forge
container.machinePrecAss=Precision Assembly Machine
container.machinePUREX=PUREX
container.machinePyroOven=Pyrolysis Oven
@ -1294,6 +1295,7 @@ gui.recipe.fusionIn=Klystron Input Energy
gui.recipe.fusionOut=Plasma Output Energy
gui.recipe.input=Input
gui.recipe.output=Output
gui.recipe.plasmaIn=Plasma Input Energy
gui.recipe.atPressure=at
gui.recipe.setRecipe=Click to set recipe
@ -5622,6 +5624,7 @@ tile.fusion_klystron_creative.desc=Provides infinite klystron energy.
tile.fusion_mhdt.name=MHD Turbine
tile.fusion_mhdt.desc=Turns plasma energy into usable$electricity directly. More efficient$than a conventional boiler.$Requires cooling!
tile.fusion_motor.name=Magnet Motor Piece
tile.fusion_plasma_forge.name=Plasma Forge
tile.fusion_torus.name=Fusion Reactor Vessel
tile.fusion_torus.desc=Fusion reactor main component.$Requires klystron input energy to ignite plasma,$produces plasma energy and neutron flux.$Requires cooling!
tile.fwatz_computer.name=Fusionary Watz Reactor Calculation Matrix

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 319 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 155 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 394 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 475 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 305 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 922 B

Some files were not shown because too many files have changed in this diff Show More