the rim flappe on a bongfish is mated to the bungus of its fuccbone.

the scrotewad is onyl present on females above the pootsack (see: snogbag).
This commit is contained in:
Bob 2025-02-02 17:21:34 +01:00
parent 98aea38025
commit 0e0777f196
32 changed files with 294 additions and 106 deletions

View File

@ -1,8 +1,11 @@
## Changed
* Blast doors will now pulverize any block that gets in their way during closing
* The nuclear and RTG furnaces will be retired, their recipes have been removed but they remain operational for now
* Changed the magnetron recipe to be 3 copper plates and 4 tungsten wires
* Added recipes to some secret ammo types
## Fixed
* Fixed the CCGT's steam output breaking as soon as the steam buffer runs full
* Fixed crash caused by mobs holding belt-fed guns
* Fixed boiler heat input being way too low due to operation order (diffusion was applied AFTER the input heat was capped)
* Fixed boiler heat input being way too low due to operation order (diffusion was applied AFTER the input heat was capped)
* Fixed stinger playing its lockon sound on the wrong side

View File

@ -1,15 +1,20 @@
package com.hbm.blocks.machine.albion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.albion.TileEntityPABeamline;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockPABeamline extends BlockDummyable {
public class BlockPABeamline extends BlockDummyable implements ITooltipProvider {
public BlockPABeamline() {
super(Material.iron);
@ -25,4 +30,9 @@ public class BlockPABeamline extends BlockDummyable {
@Override public int[] getDimensions() { return new int[] {0, 0, 0, 0, 1, 1}; }
@Override public int getOffset() { return 0; }
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -1,6 +1,9 @@
package com.hbm.blocks.machine.albion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityProxyCombo;
@ -8,11 +11,12 @@ import com.hbm.tileentity.machine.albion.TileEntityPADetector;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockPADetector extends BlockDummyable {
public class BlockPADetector extends BlockDummyable implements ITooltipProvider {
public BlockPADetector() {
super(Material.iron);
@ -48,4 +52,9 @@ public class BlockPADetector extends BlockDummyable {
this.makeExtra(world, x - rot.offsetX * 4 + dir.offsetX, y, z - rot.offsetZ * 4 + dir.offsetZ);
this.makeExtra(world, x - rot.offsetX * 4 - dir.offsetX, y, z - rot.offsetZ * 4 - dir.offsetZ);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -1,6 +1,9 @@
package com.hbm.blocks.machine.albion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityProxyCombo;
@ -8,11 +11,12 @@ import com.hbm.tileentity.machine.albion.TileEntityPADipole;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockPADipole extends BlockDummyable {
public class BlockPADipole extends BlockDummyable implements ITooltipProvider {
public BlockPADipole() {
super(Material.iron);
@ -49,4 +53,9 @@ public class BlockPADipole extends BlockDummyable {
this.makeExtra(world, x, y + 1, z + 1);
this.makeExtra(world, x, y + 1, z - 1);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -1,6 +1,9 @@
package com.hbm.blocks.machine.albion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityProxyCombo;
@ -8,11 +11,12 @@ import com.hbm.tileentity.machine.albion.TileEntityPAQuadrupole;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockPAQuadrupole extends BlockDummyable {
public class BlockPAQuadrupole extends BlockDummyable implements ITooltipProvider {
public BlockPAQuadrupole() {
super(Material.iron);
@ -45,4 +49,9 @@ public class BlockPAQuadrupole extends BlockDummyable {
this.makeExtra(world, x, y + 1, z);
this.makeExtra(world, x, y - 1, z);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -1,6 +1,9 @@
package com.hbm.blocks.machine.albion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityProxyCombo;
@ -8,11 +11,12 @@ import com.hbm.tileentity.machine.albion.TileEntityPARFC;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockPARFC extends BlockDummyable {
public class BlockPARFC extends BlockDummyable implements ITooltipProvider {
public BlockPARFC() {
super(Material.iron);
@ -48,4 +52,9 @@ public class BlockPARFC extends BlockDummyable {
this.makeExtra(world, x - dir.offsetX * 3, y - 1, z - dir.offsetZ * 3);
this.makeExtra(world, x, y - 1, z);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -1,6 +1,9 @@
package com.hbm.blocks.machine.albion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityProxyCombo;
@ -8,11 +11,12 @@ import com.hbm.tileentity.machine.albion.TileEntityPASource;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockPASource extends BlockDummyable {
public class BlockPASource extends BlockDummyable implements ITooltipProvider {
public BlockPASource() {
super(Material.iron);
@ -50,4 +54,9 @@ public class BlockPASource extends BlockDummyable {
this.makeExtra(world, x - dir.offsetX + rot.offsetX * 2, y, z - dir.offsetZ + rot.offsetZ * 2);
this.makeExtra(world, x - dir.offsetX - rot.offsetX * 2, y, z - dir.offsetZ - rot.offsetZ * 2);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -158,8 +158,6 @@ public class WeaponRecipes {
//Ammo assemblies
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pellet_flechette, 1), new Object[] { " L ", " L ", "LLL", 'L', PB.nugget() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.pellet_claws, 1), new Object[] { " X ", "X X", " XX", 'X', STEEL.plate() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.assembly_nuke, 1), new Object[] { " WP", "SEP", " WP", 'W', GOLD.wireFine(), 'P', STEEL.plate(), 'S', STEEL.shell(), 'E', ModItems.ball_tatb });
//240mm Shells

View File

@ -0,0 +1,37 @@
package com.hbm.handler.nei;
import java.util.Locale;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.recipes.ParticleAcceleratorRecipes;
import com.hbm.inventory.recipes.ParticleAcceleratorRecipes.ParticleAcceleratorRecipe;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
public class ParticleAcceleratorHandler extends NEIUniversalHandler {
public ParticleAcceleratorHandler() {
super(ModBlocks.pa_detector.getLocalizedName(), ModBlocks.pa_detector, ParticleAcceleratorRecipes.getRecipes());
}
@Override
public String getKey() {
return "ntmParticleAccelerator";
}
@Override
public void drawExtras(int recipe) {
RecipeSet rec = (RecipeSet) this.arecipes.get(recipe);
ParticleAcceleratorRecipe paRecipe = ParticleAcceleratorRecipes.getOutput(rec.input[0].item, rec.input[1].item);
if(paRecipe != null) {
FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer;
String momentum = "Momentum: " + String.format(Locale.US, "%,d", paRecipe.momentum);
int side = 8;
fontRenderer.drawString(momentum, side, 52, 0x404040);
}
}
}

View File

@ -1,5 +1,7 @@
package com.hbm.inventory.gui;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import org.lwjgl.opengl.GL11;
@ -9,6 +11,7 @@ import com.hbm.lib.RefStrings;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.NBTControlPacket;
import com.hbm.tileentity.machine.albion.TileEntityPASource;
import com.hbm.util.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
@ -39,7 +42,11 @@ public class GUIPASource extends GuiInfoContainer {
source.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 36, 16, 52);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 18, 16, 52, source.power, source.getMaxPower());
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 105, guiTop + 18, 10, 10, mouseX, mouseY, "Last momentum: " + source.lastSpeed);
List<String> info = new ArrayList();
info.add(EnumChatFormatting.BLUE + "Last momentum: " + EnumChatFormatting.RESET + String.format(Locale.US, "%,d", source.lastSpeed));
String[] message = I18nUtil.resolveKeyArray("pa." + this.source.state.name().toLowerCase(Locale.US) + ".desc");
for(String s : message) info.add(EnumChatFormatting.YELLOW + s);
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 105, guiTop + 18, 10, 10, mouseX, mouseY, info);
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 105, guiTop + 30, 10, 10, mouseX, mouseY, EnumChatFormatting.RED + "Cancel operation");
}

View File

@ -99,7 +99,7 @@ public class Mats {
//Base metals
public static final NTMMaterial MAT_TITANIUM = makeSmeltable(2200, TI, 0xF7F3F2, 0x4F4C4B, 0xA99E79).setAutogen(FRAGMENT, DUST, PLATE, DENSEWIRE, CASTPLATE, WELDEDPLATE, SHELL, BLOCK, HEAVY_COMPONENT).m();
public static final NTMMaterial MAT_COPPER = makeSmeltable(2900, CU, 0xFDCA88, 0x601E0D, 0xC18336).setAutogen(FRAGMENT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m();
public static final NTMMaterial MAT_COPPER = makeSmeltable(2900, CU, 0xFDCA88, 0x601E0D, 0xC18336).setAutogen(FRAGMENT, WIRE, DUST, PLATE, DENSEWIRE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m();
public static final NTMMaterial MAT_TUNGSTEN = makeSmeltable(7400, W, 0x868686, 0x000000, 0x977474).setAutogen(FRAGMENT, WIRE, BOLT, DUST, DENSEWIRE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT).m();
public static final NTMMaterial MAT_ALUMINIUM = makeSmeltable(1300, AL, 0xFFFFFF, 0x344550, 0xD0B8EB).setAutogen(FRAGMENT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m();
public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setAutogen(FRAGMENT, NUGGET, WIRE, BOLT, DUST, PLATE, CASTPLATE, PIPE, BLOCK, HEAVY_COMPONENT).m();

View File

@ -32,6 +32,7 @@ import com.hbm.items.ItemGenericPart.EnumPartType;
import com.hbm.items.machine.ItemAssemblyTemplate;
import com.hbm.items.machine.ItemCircuit.EnumCircuitType;
import com.hbm.items.machine.ItemDrillbit.EnumDrillType;
import com.hbm.items.machine.ItemPACoil.EnumCoilType;
import com.hbm.items.machine.ItemPistons.EnumPistonType;
import com.hbm.items.weapon.ItemAmmoHIMARS;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
@ -107,7 +108,7 @@ public class AssemblerRecipes extends SerializableRecipe {
makeRecipe(new ComparableStack(ModItems.tritium_deuterium_cake, 1), new AStack[] {new ComparableStack(ModItems.cell_deuterium, 6), new ComparableStack(ModItems.cell_tritium, 2), new OreDictStack(LI.ingot(), 4), },150);
makeRecipe(new ComparableStack(ModItems.pellet_cluster, 1), new AStack[] {new OreDictStack(STEEL.plate(), 4), new ComparableStack(Blocks.tnt, 1), }, 50);
makeRecipe(new ComparableStack(ModItems.pellet_buckshot, 1), new AStack[] {new OreDictStack(PB.nugget(), 6), }, 50);
makeRecipe(new ComparableStack(ModItems.magnetron, 1), new AStack[] {new OreDictStack(ALLOY.plate(), 3), new OreDictStack(W.wireFine(), 1), new ComparableStack(ModItems.coil_tungsten, 1), },100);
makeRecipe(new ComparableStack(ModItems.magnetron, 1), new AStack[] {new OreDictStack(CU.plate(), 3), new OreDictStack(W.wireFine(), 4), },100);
makeRecipe(new ComparableStack(ModItems.redcoil_capacitor, 1), new AStack[] {new OreDictStack(GOLD.plate(), 3), new ComparableStack(ModItems.fuse, 1), new OreDictStack(ALLOY.wireFine(), 4), new ComparableStack(ModItems.coil_advanced_alloy, 6), new ComparableStack(Blocks.redstone_block, 2), },200);
makeRecipe(new ComparableStack(ModItems.part_lithium, 8), new AStack[] {new OreDictStack(ANY_RUBBER.ingot(), 1), new OreDictStack(LI.dust(), 1), },50);
makeRecipe(new ComparableStack(ModItems.part_beryllium, 8), new AStack[] {new OreDictStack(ANY_RUBBER.ingot(), 1), new OreDictStack(BE.dust(), 1), },50);
@ -548,14 +549,6 @@ public class AssemblerRecipes extends SerializableRecipe {
new OreDictStack(STEEL.pipe(), 24),
new OreDictStack(Fluids.LUBRICANT.getDict(1_000), 4)
}, 600);
makeRecipe(new ComparableStack(ModItems.pellet_chlorophyte, 2), new AStack[] {
new ComparableStack(ModItems.powder_chlorophyte, 1),
new OreDictStack(PB.nugget(), 12),
}, 50);
makeRecipe(new ComparableStack(ModItems.pellet_canister, 2), new AStack[] {
new OreDictStack(IRON.ingot(), 3),
}, 50);
makeRecipe(new ComparableStack(ModBlocks.machine_cyclotron, 1), new AStack[] {
new ComparableStack(ModBlocks.machine_lithium_battery, 3),
@ -946,6 +939,50 @@ public class AssemblerRecipes extends SerializableRecipe {
new ComparableStack(ModItems.circuit, 8, EnumCircuitType.BASIC)
}, 200);
makeRecipe(new ComparableStack(ModItems.pa_coil, 1, EnumCoilType.GOLD), new AStack[] { new OreDictStack(GOLD.wireDense(), 128) }, 400);
makeRecipe(new ComparableStack(ModItems.pa_coil, 1, EnumCoilType.NIOBIUM), new AStack[] { new OreDictStack(NB.wireDense(), 64), new OreDictStack(TI.wireDense(), 64) }, 400);
makeRecipe(new ComparableStack(ModItems.pa_coil, 1, EnumCoilType.BSCCO), new AStack[] { new OreDictStack(BSCCO.wireDense(), 64), new OreDictStack(ANY_PLASTIC.ingot(), 64) }, 400);
makeRecipe(new ComparableStack(ModItems.pa_coil, 1, EnumCoilType.CHLOROPHYTE), new AStack[] { new OreDictStack(CU.wireDense(), 128), new ComparableStack(ModItems.powder_chlorophyte, 16) }, 400);
makeRecipe(new ComparableStack(ModBlocks.pa_beamline), new AStack[] {
new OreDictStack(STEEL.plateCast(), 8),
new OreDictStack(CU.plate(), 16),
new OreDictStack(GOLD.wireDense(), 4)
}, 200);
makeRecipe(new ComparableStack(ModBlocks.pa_rfc), new AStack[] {
new ComparableStack(ModBlocks.pa_beamline, 3),
new OreDictStack(STEEL.plateCast(), 16),
new OreDictStack(CU.plate(), 64),
new OreDictStack(ANY_HARDPLASTIC.ingot(), 16),
new ComparableStack(ModItems.magnetron, 16),
}, 400);
makeRecipe(new ComparableStack(ModBlocks.pa_quadrupole), new AStack[] {
new ComparableStack(ModBlocks.pa_beamline, 1),
new OreDictStack(STEEL.plateCast(), 16),
new OreDictStack(ANY_HARDPLASTIC.ingot(), 16),
new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BISMOID),
}, 400);
makeRecipe(new ComparableStack(ModBlocks.pa_dipole), new AStack[] {
new ComparableStack(ModBlocks.pa_beamline, 2),
new OreDictStack(STEEL.plateCast(), 16),
new OreDictStack(ANY_HARDPLASTIC.ingot(), 32),
new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID),
}, 400);
makeRecipe(new ComparableStack(ModBlocks.pa_source), new AStack[] {
new ComparableStack(ModBlocks.pa_beamline, 3),
new OreDictStack(STEEL.plateCast(), 16),
new OreDictStack(ANY_HARDPLASTIC.ingot(), 16),
new ComparableStack(ModItems.magnetron, 16),
new ComparableStack(ModItems.circuit, 1, EnumCircuitType.QUANTUM),
}, 400);
makeRecipe(new ComparableStack(ModBlocks.pa_detector), new AStack[] {
new ComparableStack(ModBlocks.pa_beamline, 3),
new OreDictStack(STEEL.plateCast(), 24),
new OreDictStack(GOLD.wireDense(), 16),
new OreDictStack(ANY_HARDPLASTIC.ingot(), 16),
new ComparableStack(ModItems.circuit, 4, EnumCircuitType.QUANTUM),
}, 400);
makeRecipe(new ComparableStack(ModBlocks.machine_exposure_chamber, 1), new AStack[] {
!exp ? new OreDictStack(AL.plateCast(), 12) : new OreDictStack(AL.heavyComp(), 1),
new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4),

View File

@ -2,6 +2,7 @@ package com.hbm.inventory.recipes;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.google.gson.JsonElement;
@ -12,7 +13,6 @@ import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.recipes.loader.SerializableRecipe;
import com.hbm.items.ModItems;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
@ -26,65 +26,65 @@ public class ParticleAcceleratorRecipes extends SerializableRecipe {
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(ModItems.particle_hydrogen),
new ComparableStack(ModItems.particle_copper),
900,
new ItemStack(ModItems.particle_aproton),
new ItemStack(ModItems.particle_aelectron)
300,
new ItemStack(ModItems.particle_amat),
null
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(ModItems.particle_amat),
new ComparableStack(ModItems.particle_amat),
900,
400,
new ItemStack(ModItems.particle_aschrab),
new ItemStack(ModItems.particle_empty)
null
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(ModItems.particle_aschrab),
new ComparableStack(ModItems.particle_aschrab),
100000,
10_000,
new ItemStack(ModItems.particle_dark),
new ItemStack(ModItems.particle_empty)
null
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(ModItems.particle_hydrogen),
new ComparableStack(ModItems.particle_amat),
2000,
2_500,
new ItemStack(ModItems.particle_muon),
new ItemStack(ModItems.particle_empty)
null
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(ModItems.particle_hydrogen),
new ComparableStack(ModItems.particle_lead),
5000,
6_500,
new ItemStack(ModItems.particle_higgs),
new ItemStack(ModItems.particle_empty)
null
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(ModItems.particle_muon),
new ComparableStack(ModItems.particle_higgs),
2000,
5_000,
new ItemStack(ModItems.particle_tachyon),
new ItemStack(ModItems.particle_empty)
null
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(ModItems.particle_muon),
new ComparableStack(ModItems.particle_dark),
100000,
12_500,
new ItemStack(ModItems.particle_strange),
new ItemStack(ModItems.particle_empty)
null
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(ModItems.particle_strange),
new ComparableStack(ModItems.powder_magic),
500000,
12_500,
new ItemStack(ModItems.particle_sparkticle),
new ItemStack(ModItems.dust)
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(ModItems.particle_sparkticle),
new ComparableStack(ModItems.particle_higgs),
1000000,
70_000,
new ItemStack(ModItems.particle_digamma),
new ItemStack(ModItems.particle_empty)
null
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(Items.chicken),
@ -93,21 +93,13 @@ public class ParticleAcceleratorRecipes extends SerializableRecipe {
new ItemStack(ModItems.nugget),
new ItemStack(ModItems.nugget)
));
recipes.add(new ParticleAcceleratorRecipe(
new ComparableStack(Blocks.sand),
new ComparableStack(Blocks.sand),
10,
new ItemStack(ModItems.static_sandwich),
new ItemStack(ModItems.static_sandwich)
));
}
public ParticleAcceleratorRecipe getOutput(ItemStack input1, ItemStack input2, int momentum) {
public static ParticleAcceleratorRecipe getOutput(ItemStack input1, ItemStack input2) {
for(ParticleAcceleratorRecipe recipe : recipes) {
if(momentum >= recipe.momentum &&
((recipe.input1.matchesRecipe(input1, true) && recipe.input2.matchesRecipe(input2, true)) ||
if(((recipe.input1.matchesRecipe(input1, true) && recipe.input2.matchesRecipe(input2, true)) ||
(recipe.input1.matchesRecipe(input2, true) && recipe.input2.matchesRecipe(input1, true)))) {
return recipe;
}
@ -116,6 +108,20 @@ public class ParticleAcceleratorRecipes extends SerializableRecipe {
return null;
}
public static HashMap getRecipes() {
HashMap<Object[], Object> recipes = new HashMap<Object[], Object>();
for(ParticleAcceleratorRecipe entry : ParticleAcceleratorRecipes.recipes) {
List<ItemStack> outputs = new ArrayList();
if(entry.output1 != null) outputs.add(entry.output1);
if(entry.output2 != null) outputs.add(entry.output2);
recipes.put(new Object[] {entry.input1, entry.input2}, outputs.toArray(new ItemStack[0]));
}
return recipes;
}
public static class ParticleAcceleratorRecipe {
public AStack input1;
public AStack input2;

View File

@ -18,6 +18,8 @@ import com.hbm.inventory.recipes.loader.SerializableRecipe;
import com.hbm.items.ItemEnums.EnumSecretType;
import com.hbm.items.food.ItemConserve.EnumFoodType;
import com.hbm.items.ModItems;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
@ -71,6 +73,17 @@ public class PedestalRecipes extends SerializableRecipe {
new OreDictStack(BSCCO.ingot(), 16), new OreDictStack(STAR.block(), 64), new OreDictStack(BSCCO.ingot(), 16),
new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.CONTROLLER), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.SELENIUM_STEEL))
.extra(PedestalExtraCondition.FULL_MOON));
recipes.add(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 1, EnumAmmoSecret.FOLLY_SM.ordinal()),
new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1),
new ComparableStack(ModItems.powder_magic), new ComparableStack(ModBlocks.moon_turf), new ComparableStack(ModItems.powder_magic),
new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1))
.extra(PedestalExtraCondition.FULL_MOON));
recipes.add(new PedestalRecipe(new ItemStack(ModItems.ammo_secret, 1, EnumAmmoSecret.FOLLY_NUKE.ordinal()),
new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1),
new ComparableStack(ModItems.powder_magic), new ComparableStack(ModItems.ammo_standard, 4, EnumAmmo.NUKE_HIGH), new ComparableStack(ModItems.powder_magic),
new OreDictStack(STAR.ingot(), 1), new ComparableStack(ModItems.powder_magic), new OreDictStack(STAR.ingot(), 1))
.extra(PedestalExtraCondition.FULL_MOON));
}
@Override

View File

@ -43,7 +43,6 @@ public class AnvilRecipes extends SerializableRecipe {
public static void register() {
registerSmithing();
registerConstruction();
}
@Override public String getFileName() { return "hbmAnvil.json"; }
@ -598,7 +597,6 @@ public class AnvilRecipes extends SerializableRecipe {
constructionRecipes.add(new AnvilConstructionRecipe(new AStack[]{new ComparableStack(ModItems.mold_base), new OreDictStack(STEEL.ingot(), 4)}, new AnvilOutput(new ItemStack(ModItems.mold, 1, 28))).setTier(2));
pullFromAssembler(new ComparableStack(ModItems.pellet_buckshot), 1);
pullFromAssembler(new ComparableStack(ModItems.pellet_canister), 1);
}
public static void registerConstructionUpgrades() {

View File

@ -1186,10 +1186,6 @@ public class ModItems {
public static Item pellet_gas;
public static Item magnetron;
public static Item pellet_buckshot;
public static Item pellet_flechette;
public static Item pellet_chlorophyte;
public static Item pellet_canister;
public static Item pellet_claws;
public static Item pellet_charged;
public static Item designator;
@ -3614,10 +3610,6 @@ public class ModItems {
pellet_gas = new ItemCustomLore().setUnlocalizedName("pellet_gas").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellet_gas");
magnetron = new ItemCustomLore().setUnlocalizedName("magnetron").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":magnetron_alt");
pellet_buckshot = new Item().setUnlocalizedName("pellet_buckshot").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_lead");
pellet_flechette = new Item().setUnlocalizedName("pellet_flechette").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_flechette");
pellet_chlorophyte = new Item().setUnlocalizedName("pellet_chlorophyte").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_chlorophyte");
pellet_canister = new Item().setUnlocalizedName("pellet_canister").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_canister");
pellet_claws = new Item().setUnlocalizedName("pellet_claws").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_claws");
pellet_charged = new Item().setUnlocalizedName("pellet_charged").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":pellets_charged");
designator = new ItemDesingator().setUnlocalizedName("designator").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":designator");
@ -5711,10 +5703,6 @@ public class ModItems {
GameRegistry.registerItem(tritium_deuterium_cake, tritium_deuterium_cake.getUnlocalizedName());
GameRegistry.registerItem(pellet_cluster, pellet_cluster.getUnlocalizedName());
GameRegistry.registerItem(pellet_buckshot, pellet_buckshot.getUnlocalizedName());
GameRegistry.registerItem(pellet_flechette, pellet_flechette.getUnlocalizedName());
GameRegistry.registerItem(pellet_chlorophyte, pellet_chlorophyte.getUnlocalizedName());
GameRegistry.registerItem(pellet_canister, pellet_canister.getUnlocalizedName());
GameRegistry.registerItem(pellet_claws, pellet_claws.getUnlocalizedName());
GameRegistry.registerItem(pellet_charged, pellet_charged.getUnlocalizedName());
GameRegistry.registerItem(pellet_gas, pellet_gas.getUnlocalizedName());
GameRegistry.registerItem(magnetron, magnetron.getUnlocalizedName());

View File

@ -1,12 +1,14 @@
package com.hbm.items.machine;
import java.util.List;
import java.util.Locale;
import com.hbm.items.ItemEnumMulti;
import com.hbm.util.EnumUtil;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
public class ItemPACoil extends ItemEnumMulti {
@ -16,30 +18,33 @@ public class ItemPACoil extends ItemEnumMulti {
}
public static enum EnumCoilType {
GOLD(0, 10_000, 0, 10_000, 0.99D),
NIOBIUM(5_000, 100_000, 5_000, 100_000, 0.999D),
BSCCO(50_000, 500_000, 50_000, 500_000, 0.99975D);
GOLD(0, 2_200, 0, 2_200, 15),
NIOBIUM(1_500, 8_400, 1_500, 8_400, 21),
BSCCO(7_500, 15_000, 7_500, 15_000, 27),
CHLOROPHYTE(14_500, 75_000, 14_500, 75_000, 51);
public int quadMin;
public int quadMax;
public int diMin;
public int diMax;
public double diMult;
public int diDistMin;
private EnumCoilType(int quadMin, int quadMax, int diMin, int diMax, double diMult) {
private EnumCoilType(int quadMin, int quadMax, int diMin, int diMax, int diDistMin) {
this.quadMin = quadMin;
this.quadMax = quadMax;
this.diMin = diMin;
this.diMax = diMax;
this.diMult = diMult;
this.diDistMin = diDistMin;
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
EnumCoilType type = EnumUtil.grabEnumSafely(theEnum, stack.getItemDamage());
list.add("Quadrupole operational range: " + type.quadMin + " - " + type.quadMax);
list.add("Dipole operational range: " + type.diMin + " - " + type.diMax);
list.add("Dipole momentum multiplier: x" + type.diMult);
list.add(EnumChatFormatting.BLUE + "Quadrupole operational range: " + EnumChatFormatting.RESET + String.format(Locale.US, "%,d", type.quadMin) + " - " + String.format(Locale.US, "%,d", type.quadMax));
list.add(EnumChatFormatting.BLUE + "Dipole operational range: " + EnumChatFormatting.RESET + String.format(Locale.US, "%,d", type.diMin) + " - " + String.format(Locale.US, "%,d", type.diMax));
list.add(EnumChatFormatting.BLUE + "Dipole minimum side length: " + EnumChatFormatting.RESET + type.diDistMin);
list.add(EnumChatFormatting.RED + "Minimums not met result in a power draw penalty!");
list.add(EnumChatFormatting.RED + "Maximums exceeded result in the particle crashing!");
}
}

View File

@ -771,26 +771,27 @@ public class Orchestras {
public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA_STINGER = (stack, ctx) -> {
EntityLivingBase entity = ctx.entity;
if(entity.worldObj.isRemote) return;
AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex);
AudioWrapper runningAudio = ItemGunBaseNT.loopedSounds.get(entity);
if(ItemGunStinger.getLockonProgress(stack) > 0 && !ItemGunStinger.getIsLockedOn(stack)) {
//start sound
if(runningAudio == null || !runningAudio.isPlaying()) {
AudioWrapper audio = MainRegistry.proxy.getLoopedSound("hbm:weapon.fire.lockon", (float) entity.posX, (float) entity.posY, (float) entity.posZ, 1F, 15F, 1F, 10);
ItemGunBaseNT.loopedSounds.put(entity, audio);
audio.startSound();
if(entity.worldObj.isRemote) {
AudioWrapper runningAudio = ItemGunBaseNT.loopedSounds.get(entity);
if(ItemGunStinger.getLockonProgress(stack) > 0 && !ItemGunStinger.getIsLockedOn(stack)) {
//start sound
if(runningAudio == null || !runningAudio.isPlaying()) {
AudioWrapper audio = MainRegistry.proxy.getLoopedSound("hbm:weapon.fire.lockon", (float) entity.posX, (float) entity.posY, (float) entity.posZ, 1F, 15F, 1F, 10);
ItemGunBaseNT.loopedSounds.put(entity, audio);
audio.startSound();
}
//keepalive
if(runningAudio != null && runningAudio.isPlaying()) {
runningAudio.keepAlive();
runningAudio.updatePosition((float) entity.posX, (float) entity.posY, (float) entity.posZ);
}
} else {
//stop sound due to timeout
if(runningAudio != null && runningAudio.isPlaying()) runningAudio.stopSound();
}
//keepalive
if(runningAudio != null && runningAudio.isPlaying()) {
runningAudio.keepAlive();
runningAudio.updatePosition((float) entity.posX, (float) entity.posY, (float) entity.posZ);
}
} else {
//stop sound due to timeout
if(runningAudio != null && runningAudio.isPlaying()) runningAudio.stopSound();
}
if(type == AnimType.RELOAD) {

View File

@ -1639,6 +1639,10 @@ public class MainRegistry {
ignoreMappings.add("hbm:item.assembly_calamity");
ignoreMappings.add("hbm:item.assembly_lacunae");
ignoreMappings.add("hbm:item.assembly_luna");
ignoreMappings.add("hbm:item.pellet_chlorophyte");
ignoreMappings.add("hbm:item.pellet_canister");
ignoreMappings.add("hbm:item.pellet_claws");
ignoreMappings.add("hbm:item.pellet_flechette");
/// REMAP ///
remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses);

View File

@ -69,6 +69,7 @@ public class NEIRegistry {
handlers.add(new RotaryFurnaceHandler());
handlers.add(new AmmoPressHandler());
handlers.add(new CompressorHandler());
handlers.add(new ParticleAcceleratorHandler());
//this shit comes last
handlers.add(new FluidRecipeHandler());

View File

@ -19,7 +19,9 @@ public class TileEntityPABeamline extends TileEntity implements IParticleUser {
}
@Override
public void onEnter(Particle particle, ForgeDirection dir) { }
public void onEnter(Particle particle, ForgeDirection dir) {
particle.addDistance(3);
}
@Override
public BlockPos getExitPos(Particle particle) {

View File

@ -49,6 +49,10 @@ public class TileEntityPADetector extends TileEntityCooledBase implements IGUIPr
public long getMaxPower() {
return 1_000_000;
}
@Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return slot == 1 || slot == 2; }
@Override public boolean canExtractItem(int slot, ItemStack stack, int side) { return slot == 3 || slot == 4; }
@Override public int[] getAccessibleSlotsFromSide(int side) { return new int[] { 1, 2, 3, 4 }; }
AxisAlignedBB bb = null;
@ -107,7 +111,7 @@ public class TileEntityPADetector extends TileEntityCooledBase implements IGUIPr
(recipe.input1.matchesRecipe(particle.input2, true) && recipe.input2.matchesRecipe(particle.input1, true)))) {
if(canAccept(recipe)) {
if(recipe.output1.getItem().hasContainerItem(recipe.output1)) this.decrStackSize(1, 1);
if(recipe.output2.getItem().hasContainerItem(recipe.output2)) this.decrStackSize(2, 1);
if(recipe.output2 != null && recipe.output2.getItem().hasContainerItem(recipe.output2)) this.decrStackSize(2, 1);
if(slots[3] == null) {
slots[3] = recipe.output1.copy();
@ -115,10 +119,12 @@ public class TileEntityPADetector extends TileEntityCooledBase implements IGUIPr
slots[3].stackSize += recipe.output1.stackSize;
}
if(slots[4] == null) {
slots[4] = recipe.output2.copy();
} else {
slots[4].stackSize += recipe.output2.stackSize;
if(recipe.output2 != null) {
if(slots[4] == null) {
slots[4] = recipe.output2.copy();
} else {
slots[4].stackSize += recipe.output2.stackSize;
}
}
}
particle.crash(PAState.SUCCESS);

View File

@ -40,7 +40,7 @@ public class TileEntityPADipole extends TileEntityCooledBase implements IGUIProv
@Override
public long getMaxPower() {
return 1_000_000;
return 5_000_000;
}
@Override
@ -70,7 +70,8 @@ public class TileEntityPADipole extends TileEntityCooledBase implements IGUIProv
int mult = 1;
if(slots[1] != null && slots[1].getItem() == ModItems.pa_coil) {
type = EnumUtil.grabEnumSafely(EnumCoilType.class, slots[1].getItemDamage());
mult = type.diMin > particle.momentum ? 5 : 1;
if(type.diMin > particle.momentum) mult *= 5;
if(type.diDistMin > particle.distanceTraveled) mult *= 5;
}
if(!isCool()) particle.crash(PAState.CRASH_NOCOOL);
@ -79,8 +80,8 @@ public class TileEntityPADipole extends TileEntityCooledBase implements IGUIProv
if(type != null && type.diMax < particle.momentum) particle.crash(PAState.CRASH_OVERSPEED);
if(particle.invalid) return;
particle.momentum *= type.diMult;
particle.resetDistance();
this.power -= this.usage * mult;
}

View File

@ -62,7 +62,8 @@ public class TileEntityPAQuadrupole extends TileEntityCooledBase implements IGUI
if(type != null && type.quadMax < particle.momentum) particle.crash(PAState.CRASH_OVERSPEED);
if(particle.invalid) return;
particle.addDistance(3);
particle.focus(focusGain);
this.power -= this.usage * mult;
}

View File

@ -51,7 +51,8 @@ public class TileEntityPARFC extends TileEntityCooledBase implements IGUIProvide
if(this.power < this.usage) particle.crash(PAState.CRASH_NOPOWER);
if(particle.invalid) return;
particle.addDistance(9);
particle.momentum += this.momentumGain;
particle.defocus(defocusGain);
this.power -= this.usage;

View File

@ -127,7 +127,7 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv
super.serialize(buf);
buf.writeInt(debugSpeed);
buf.writeByte((byte) this.state.ordinal());
buf.writeInt(particle != null ? particle.momentum : 0);
buf.writeInt(this.lastSpeed);
}
@Override
@ -135,10 +135,7 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv
super.deserialize(buf);
debugSpeed = buf.readInt();
state = EnumUtil.grabEnumSafely(PAState.class, buf.readByte());
int lastSpeed = buf.readInt();
if(lastSpeed != 0) {
this.lastSpeed = lastSpeed;
}
this.lastSpeed = buf.readInt();
}
@Override
@ -243,6 +240,7 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv
public ForgeDirection dir;
public int momentum;
public int defocus;
public int distanceTraveled;
public static final int maxDefocus = 100;
public boolean invalid = false;
@ -268,8 +266,12 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv
this.x = pos.getX();
this.y = pos.getY();
this.z = pos.getZ();
this.source.lastSpeed = this.momentum;
}
public void addDistance(int dist) { this.distanceTraveled += dist; }
public void resetDistance() { this.distanceTraveled = 0; }
public void defocus(int amount) {
this.defocus += amount;
if(this.defocus > this.maxDefocus) this.crash(PAState.CRASH_DEFOCUS);

View File

@ -2939,6 +2939,10 @@ item.ore_seared.name=Geätztes %serz
item.ore_separated.name=Separiertes %serz
item.overfuse.name=Singularitätsschraubenzieher
item.oxy_mask.name=Sauerstoffmaske
item.pa_coil.bscco.name=Große BSCCO-Spule
item.pa_coil.chlorophyte.name=Große Grünalgenspule
item.pa_coil.gold.name=Große Goldspule
item.pa_coil.niobium.name=Große NbTi-Spule
item.paa_boots.name=PaA-"olle Latschen"
item.paa_legs.name=PaA-Beinverstärkungsschienen
item.paa_plate.name=PaA-Brustschutzplatte

View File

@ -3787,6 +3787,7 @@ item.overfuse.name=Singularity Screwdriver
item.overfuse.desc=Say what?
item.oxy_mask.name=Oxygen Mask
item.pa_coil.bscco.name=Large BSCCO Coil
item.pa_coil.chlorophyte.name=Large Chlorophyte Coil
item.pa_coil.gold.name=Large Gold Coil
item.pa_coil.niobium.name=Large NbTi Coil
item.paa_boots.name=PaA "good ol' shoes"
@ -4832,16 +4833,27 @@ itemGroup.tabTest=Nuclear Tech Mod Test Tab
itemGroup.tabWeapon=NTM Weapons and Turrets
pa.idle=Idle
pa.idle.desc=Idle
pa.running=Running
pa.running.desc=Running
pa.success=Success
pa.success.desc=Success
pa.pause_unloaded=Paused
pa.pause_unloaded.desc=The particle has entered an$unloaded chunk. The operation has$been suspended, until both the$particle and the particle source$are loaded.
pa.crash_defocus=Defocus!
pa.crash_defocus.desc=The particle has lost focus.$Ensure the accelerator has enough quadrupole magnets.
pa.crash_derail=Derail!
pa.crash_derail.desc=The particle has left the accelerator.$Ensure no parts are missing,$and that dipoles are configured correctly.
pa.crash_cannot_enter=Denied!
pa.crash_cannot_enter.desc=The particle tried to enter$part of the accelerator, but couldn't.$Ensure all parts are oriented correctly.
pa.crash_nocool=No cooling!
pa.crash_nocool.desc=The particle has entered an uncooled$part of the accelerator. Ensure all cooled$parts are connected and filled$with cold perfluoroethyl.
pa.crash_nopower=No power!
pa.crash_nopower.desc=The particle has entered an unpowered$part of the accelerator. Ensure all parts$receive power, and that the$power supply is sufficient.
pa.crash_nocoil=No coils!
pa.crash_nocoil.desc=The particle has entered a dipole$or quadrupole which lacks coils.$Install coils to allow this part to work.
pa.crash_overspeed=Overspeed!
pa.crash_overspeed.desc=The particle has entered a dipole$or quadrupole, while its speed exceeded$the coil's rating. Install higher$tier coils, or configure the dipoles$to leave the accelerator ring sooner.
potion.hbm_bang=! ! !
potion.hbm_death=Astolfization
@ -5193,7 +5205,7 @@ tile.cm_engine.bismuth.name=Bismuth Motor Block
tile.cm_engine.desh.name=Desh Motor Block
tile.cm_engine.standard.name=Motor Block
tile.cm_flux.name=Neutron Flux Receiver
tile.cm_heat.name=Heat receiver
tile.cm_heat.name=Heat Receiver
tile.cm_port.alloy.name=Advanced Alloy Port
tile.cm_port.desh.name=Desh Port
tile.cm_port.steel.name=Steel Port
@ -5846,11 +5858,17 @@ tile.ore_verticium.name=Dollar Green Mineral
tile.ore_volcano.name=Geothermal Vent
tile.ore_weidanium.name=Weidite
tile.pa_beamline.name=Beamline
tile.pa_beamline.desc=Optional part, connects different accelerator parts.$Also allows to cheaply extend the ring's size,$for meeting dipole coil size requirements.
tile.pa_detector.name=Particle Detector
tile.pa_detector.desc=Requires cooling!$Accepts particles and performs the recipe.$Recipes may require containers (particle capsules).$Particle needs a defocus of 0 to be accepted.
tile.pa_dipole.name=Dipole Magnets
tile.pa_dipole.desc=Requires cooling!$Redirects particles based on momentum.$Has outputs for below threshold,$above threshold and above threshold$with restone applied.$Requires large coils to work.
tile.pa_quadrupole.name=Quadrupole Magnets
tile.pa_quadrupole.desc=Requires cooling!$Reduces particle defocus by 100 points.$Requires large coils to work.
tile.pa_rfc.name=RF Cavity
tile.pa_rfc.desc=Requires cooling!$Accelerates particles by 100 points,$and adds 100 points of defocus.
tile.pa_source.name=Particle Source
tile.pa_source.desc=Requires cooling!$Uses two items to create a particle.
tile.part_emitter.name=Deco Particle Emitter
tile.pedestal.name=Pedestal
tile.pink_barrel.name=Kerosene Barrel

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB