Added millstone

This commit is contained in:
Calclavia 2014-01-28 00:00:21 +08:00
parent 5ad8643350
commit ee0f2d216d
21 changed files with 297 additions and 39 deletions

View file

@ -66,7 +66,7 @@ public class RecipeUtils
@Override @Override
public ItemStack getItemStack() public ItemStack getItemStack()
{ {
return itemStack; return itemStack.copy();
} }
} }

View file

@ -4,7 +4,9 @@ import net.minecraft.block.Block;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapedOreRecipe;
import resonantinduction.archaic.blocks.BlockMillstone;
import resonantinduction.archaic.blocks.BlockTurntable; import resonantinduction.archaic.blocks.BlockTurntable;
import resonantinduction.archaic.blocks.TileMillstone;
import resonantinduction.archaic.crate.BlockCrate; import resonantinduction.archaic.crate.BlockCrate;
import resonantinduction.archaic.crate.ItemBlockCrate; import resonantinduction.archaic.crate.ItemBlockCrate;
import resonantinduction.archaic.crate.TileCrate; import resonantinduction.archaic.crate.TileCrate;
@ -16,7 +18,7 @@ import resonantinduction.archaic.firebox.BlockHotPlate;
import resonantinduction.archaic.firebox.TileFirebox; import resonantinduction.archaic.firebox.TileFirebox;
import resonantinduction.archaic.firebox.TileHotPlate; import resonantinduction.archaic.firebox.TileHotPlate;
import resonantinduction.archaic.imprint.BlockImprinter; import resonantinduction.archaic.imprint.BlockImprinter;
import resonantinduction.archaic.imprint.ItemBlockImprint; import resonantinduction.archaic.imprint.ItemImprint;
import resonantinduction.archaic.imprint.TileImprinter; import resonantinduction.archaic.imprint.TileImprinter;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
@ -68,6 +70,7 @@ public class Archaic
public static Block blockTurntable; public static Block blockTurntable;
public static Block blockFirebox; public static Block blockFirebox;
public static Block blockHotPlate; public static Block blockHotPlate;
public static Block blockMillstone;
public static Block blockMachinePart; public static Block blockMachinePart;
public static Item itemImprint; public static Item itemImprint;
@ -86,10 +89,10 @@ public class Archaic
blockTurntable = contentRegistry.createBlock(BlockTurntable.class); blockTurntable = contentRegistry.createBlock(BlockTurntable.class);
blockFirebox = contentRegistry.createTile(BlockFirebox.class, TileFirebox.class); blockFirebox = contentRegistry.createTile(BlockFirebox.class, TileFirebox.class);
blockHotPlate = contentRegistry.createBlock(BlockHotPlate.class, ItemBlockMetadata.class, TileHotPlate.class); blockHotPlate = contentRegistry.createBlock(BlockHotPlate.class, ItemBlockMetadata.class, TileHotPlate.class);
blockMillstone = contentRegistry.createTile(BlockMillstone.class, TileMillstone.class);
blockMachinePart = contentRegistry.createBlock(BlockMachineMaterial.class, ItemBlockMetadata.class); blockMachinePart = contentRegistry.createBlock(BlockMachineMaterial.class, ItemBlockMetadata.class);
itemImprint = contentRegistry.createItem(ItemBlockImprint.class); itemImprint = contentRegistry.createItem(ItemImprint.class);
itemHammer = contentRegistry.createItem(ItemHammer.class); itemHammer = contentRegistry.createItem(ItemHammer.class);
proxy.preInit(); proxy.preInit();
Settings.save(); Settings.save();

View file

@ -0,0 +1,144 @@
package resonantinduction.archaic.blocks;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import resonantinduction.api.recipe.MachineRecipes;
import resonantinduction.api.recipe.MachineRecipes.RecipeType;
import resonantinduction.archaic.crate.TileCrate;
import resonantinduction.core.Reference;
import resonantinduction.core.prefab.block.BlockRI;
import universalelectricity.api.vector.Vector2;
import universalelectricity.api.vector.Vector3;
import universalelectricity.api.vector.VectorWorld;
import calclavia.lib.utility.inventory.InventoryUtility;
import codechicken.multipart.ControlKeyModifer;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BlockMillstone extends BlockRI
{
Icon top;
public BlockMillstone()
{
super("millstone", Material.wood);
setTextureName(Reference.PREFIX + "material_wood_surface");
}
@SideOnly(Side.CLIENT)
@Override
public void registerIcons(IconRegister iconReg)
{
this.top = iconReg.registerIcon(Reference.PREFIX + "material_wood_top");
super.registerIcons(iconReg);
}
@Override
@SideOnly(Side.CLIENT)
public Icon getBlockTexture(IBlockAccess world, int x, int y, int z, int side)
{
return getIcon(side, 0);
}
/** Returns the block texture based on the side being looked at. Args: side */
@Override
@SideOnly(Side.CLIENT)
public Icon getIcon(int side, int meta)
{
if (side == 1)
{
return top;
}
return blockIcon;
}
@Override
public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player)
{
if (!world.isRemote)
{
TileEntity te = world.getBlockTileEntity(x, y, z);
if (te instanceof TileMillstone)
{
TileMillstone tile = (TileMillstone) te;
ItemStack output = tile.getStackInSlot(0);
if (output != null)
{
InventoryUtility.dropItemStack(world, new Vector3(player), output, 0);
tile.setInventorySlotContents(0, null);
}
tile.onInventoryChanged();
}
}
}
@Override
public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player, int hitSide, float hitX, float hitY, float hitZ)
{
TileEntity te = world.getBlockTileEntity(x, y, z);
if (te instanceof TileMillstone)
{
TileMillstone tile = (TileMillstone) te;
ItemStack current = player.inventory.getCurrentItem();
ItemStack output = tile.getStackInSlot(0);
if (output != null)
{
InventoryUtility.dropItemStack(world, new Vector3(player), output, 0);
tile.setInventorySlotContents(0, null);
}
else if (current != null && tile.isItemValidForSlot(0, current))
{
tile.setInventorySlotContents(0, current);
player.inventory.setInventorySlotContents(player.inventory.currentItem, null);
}
world.markBlockForUpdate(x, y, z);
}
return false;
}
@Override
public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ)
{
TileEntity te = world.getBlockTileEntity(x, y, z);
if (te instanceof TileMillstone)
{
TileMillstone tile = (TileMillstone) te;
ItemStack output = tile.getStackInSlot(0);
if (output != null)
{
tile.doGrind(new Vector3(entityPlayer));
entityPlayer.addExhaustion(0.3f);
return true;
}
}
return false;
}
@Override
public TileEntity createNewTileEntity(World var1)
{
return new TileMillstone();
}
}

View file

@ -0,0 +1,24 @@
package resonantinduction.archaic.blocks;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import resonantinduction.core.render.RenderItemOverlayTile;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderMillstone extends RenderItemOverlayTile
{
private final RenderBlocks renderBlocks = new RenderBlocks();
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float var8)
{
if (tileEntity instanceof TileMillstone)
{
TileMillstone tile = (TileMillstone) tileEntity;
renderItemOnSides(tileEntity, tile.getStackInSlot(0), x, y, z, "Empty");
}
}
}

View file

@ -0,0 +1,83 @@
package resonantinduction.archaic.blocks;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.packet.Packet;
import resonantinduction.api.recipe.MachineRecipes;
import resonantinduction.api.recipe.MachineRecipes.RecipeType;
import resonantinduction.api.recipe.RecipeUtils.Resource;
import resonantinduction.core.ResonantInduction;
import universalelectricity.api.vector.Vector3;
import calclavia.lib.network.IPacketReceiver;
import calclavia.lib.network.PacketHandler;
import calclavia.lib.prefab.tile.TileExternalInventory;
import calclavia.lib.utility.inventory.InventoryUtility;
import com.google.common.io.ByteArrayDataInput;
public class TileMillstone extends TileExternalInventory implements IPacketReceiver
{
private int grindCount = 0;
public void onInventoryChanged()
{
grindCount = 0;
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}
public void doGrind(Vector3 spawnPos)
{
Resource[] outputs = MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER, getStackInSlot(0));
if (outputs.length > 0)
{
if (++grindCount > 20)
{
for (Resource res : outputs)
{
InventoryUtility.dropItemStack(worldObj, spawnPos, res.getItemStack().copy());
}
decrStackSize(0, 1);
onInventoryChanged();
}
}
}
@Override
public boolean canUpdate()
{
return false;
}
@Override
public boolean isItemValidForSlot(int i, ItemStack itemstack)
{
return MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER, itemstack).length > 0;
}
/**
* Packets
*/
@Override
public Packet getDescriptionPacket()
{
NBTTagCompound nbt = new NBTTagCompound();
this.writeToNBT(nbt);
return ResonantInduction.PACKET_TILE.getPacket(this, nbt);
}
@Override
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
{
try
{
this.readFromNBT(PacketHandler.readNBTTagCompound(data));
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

View file

@ -56,7 +56,7 @@ public class ItemHammer extends ItemRI
} }
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, Reference.PREFIX + "hammer", 0.5f, 0.8f + (0.2f * world.rand.nextFloat())); world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, Reference.PREFIX + "hammer", 0.5f, 0.8f + (0.2f * world.rand.nextFloat()));
player.addExhaustion(1); player.addExhaustion(0.3f);
stack.damageItem(1, player); stack.damageItem(1, player);
} }
} }

View file

@ -21,7 +21,7 @@ import org.apache.commons.lang3.ArrayUtils;
import resonantinduction.api.IArmbot; import resonantinduction.api.IArmbot;
import resonantinduction.api.IArmbotUseable; import resonantinduction.api.IArmbotUseable;
import resonantinduction.archaic.imprint.ItemBlockImprint; import resonantinduction.archaic.imprint.ItemImprint;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.electrical.encoder.coding.args.ArgumentData; import resonantinduction.electrical.encoder.coding.args.ArgumentData;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
@ -329,9 +329,9 @@ public class TileEngineeringTable extends TileAdvanced implements IPacketReceive
{ {
ItemStack filterStack = craftingMatrix[CENTER_SLOT]; ItemStack filterStack = craftingMatrix[CENTER_SLOT];
if (filterStack != null && filterStack.getItem() instanceof ItemBlockImprint) if (filterStack != null && filterStack.getItem() instanceof ItemImprint)
{ {
Set<ItemStack> filters = ItemBlockImprint.getFilters(filterStack); Set<ItemStack> filters = ItemImprint.getFilters(filterStack);
for (ItemStack outputStack : filters) for (ItemStack outputStack : filters)
{ {

View file

@ -182,7 +182,7 @@ public class BlockImprinter extends BlockRI
InventoryUtility.dropItemStack(world, new Vector3(player), output, 0); InventoryUtility.dropItemStack(world, new Vector3(player), output, 0);
tile.setInventorySlotContents(9, null); tile.setInventorySlotContents(9, null);
} }
else if (current != null && current.getItem() instanceof ItemBlockImprint) else if (current != null && current.getItem() instanceof ItemImprint)
{ {
tile.setInventorySlotContents(9, current); tile.setInventorySlotContents(9, current);
player.inventory.setInventorySlotContents(player.inventory.currentItem, null); player.inventory.setInventorySlotContents(player.inventory.currentItem, null);

View file

@ -17,14 +17,14 @@ import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInductionTabs; import resonantinduction.core.ResonantInductionTabs;
import resonantinduction.core.Settings; import resonantinduction.core.Settings;
public class ItemBlockImprint extends Item public class ItemImprint extends Item
{ {
public ItemBlockImprint() public ItemImprint()
{ {
this(Settings.getNextItemID()); this(Settings.getNextItemID());
} }
public ItemBlockImprint(int id) public ItemImprint(int id)
{ {
super(Settings.CONFIGURATION.getItem("imprint", id).getInt()); super(Settings.CONFIGURATION.getItem("imprint", id).getInt());
this.setUnlocalizedName(Reference.PREFIX + "imprint"); this.setUnlocalizedName(Reference.PREFIX + "imprint");

View file

@ -21,18 +21,6 @@ public class TileImprinter extends TileAdvanced implements ISidedInventory, IPac
{ {
public ItemStack[] inventory = new ItemStack[10]; public ItemStack[] inventory = new ItemStack[10];
@Override
public boolean canUpdate()
{
return false;
}
@Override
public int getSizeInventory()
{
return this.inventory.length;
}
@Override @Override
public Packet getDescriptionPacket() public Packet getDescriptionPacket()
{ {
@ -54,6 +42,21 @@ public class TileImprinter extends TileAdvanced implements ISidedInventory, IPac
} }
} }
/**
* Inventory methods.
*/
@Override
public boolean canUpdate()
{
return false;
}
@Override
public int getSizeInventory()
{
return this.inventory.length;
}
/** /**
* Sets the given item stack to the specified slot in the inventory (can be crafting or armor * Sets the given item stack to the specified slot in the inventory (can be crafting or armor
* sections). * sections).
@ -144,11 +147,11 @@ public class TileImprinter extends TileAdvanced implements ISidedInventory, IPac
/** Makes the stamping recipe for filters */ /** Makes the stamping recipe for filters */
ItemStack fitlerStack = this.inventory[9]; ItemStack fitlerStack = this.inventory[9];
if (fitlerStack != null && fitlerStack.getItem() instanceof ItemBlockImprint) if (fitlerStack != null && fitlerStack.getItem() instanceof ItemImprint)
{ {
ItemStack outputStack = fitlerStack.copy(); ItemStack outputStack = fitlerStack.copy();
outputStack.stackSize = 1; outputStack.stackSize = 1;
Set<ItemStack> filters = ItemBlockImprint.getFilters(outputStack); Set<ItemStack> filters = ItemImprint.getFilters(outputStack);
Set<ItemStack> toAdd = new HashSet<ItemStack>(); Set<ItemStack> toAdd = new HashSet<ItemStack>();
/** A hashset of to be imprinted items containing NO repeats. */ /** A hashset of to be imprinted items containing NO repeats. */
@ -194,7 +197,7 @@ public class TileImprinter extends TileAdvanced implements ISidedInventory, IPac
filters.addAll(toAdd); filters.addAll(toAdd);
ItemBlockImprint.setFilters(outputStack, filters); ItemImprint.setFilters(outputStack, filters);
this.inventory[9] = outputStack; this.inventory[9] = outputStack;
} }
} }

View file

@ -8,7 +8,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
import net.minecraft.world.World; import net.minecraft.world.World;
import resonantinduction.api.IFilterable; import resonantinduction.api.IFilterable;
import resonantinduction.archaic.imprint.ItemBlockImprint; import resonantinduction.archaic.imprint.ItemImprint;
import resonantinduction.core.prefab.tile.TileEntityFilterable; import resonantinduction.core.prefab.tile.TileEntityFilterable;
/** /**
@ -51,7 +51,7 @@ public abstract class BlockImprintable extends BlockRIRotatable
{ {
if (player.getCurrentEquippedItem() != null) if (player.getCurrentEquippedItem() != null)
{ {
if (player.getCurrentEquippedItem().getItem() instanceof ItemBlockImprint) if (player.getCurrentEquippedItem().getItem() instanceof ItemImprint)
{ {
((IFilterable) tileEntity).setFilter(player.getCurrentEquippedItem()); ((IFilterable) tileEntity).setFilter(player.getCurrentEquippedItem());
player.inventory.setInventorySlotContents(player.inventory.currentItem, null); player.inventory.setInventorySlotContents(player.inventory.currentItem, null);

View file

@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.api.IFilterable; import resonantinduction.api.IFilterable;
import resonantinduction.archaic.imprint.ItemBlockImprint; import resonantinduction.archaic.imprint.ItemImprint;
import calclavia.lib.prefab.tile.IRotatable; import calclavia.lib.prefab.tile.IRotatable;
import calclavia.lib.prefab.tile.TileExternalInventory; import calclavia.lib.prefab.tile.TileExternalInventory;
@ -36,7 +36,7 @@ public abstract class TileEntityFilterable extends TileExternalInventory impleme
{ {
if (this.getFilter() != null && itemStack != null) if (this.getFilter() != null && itemStack != null)
{ {
Set<ItemStack> checkStacks = ItemBlockImprint.getFilters(getFilter()); Set<ItemStack> checkStacks = ItemImprint.getFilters(getFilter());
if (checkStacks != null) if (checkStacks != null)
{ {

View file

@ -8,7 +8,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition;
import resonantinduction.archaic.imprint.ItemBlockImprint; import resonantinduction.archaic.imprint.ItemImprint;
import resonantinduction.core.prefab.tile.TileEntityFilterable; import resonantinduction.core.prefab.tile.TileEntityFilterable;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import calclavia.lib.render.RenderUtility; import calclavia.lib.render.RenderUtility;
@ -41,7 +41,7 @@ public abstract class RenderImprintable extends TileEntitySpecialRenderer
{ {
if (objectPosition.blockX == tileFilterable.xCoord && objectPosition.blockY == tileFilterable.yCoord && objectPosition.blockZ == tileFilterable.zCoord) if (objectPosition.blockX == tileFilterable.xCoord && objectPosition.blockY == tileFilterable.yCoord && objectPosition.blockZ == tileFilterable.zCoord)
{ {
Set<ItemStack> filters = ItemBlockImprint.getFilters(filter); Set<ItemStack> filters = ItemImprint.getFilters(filter);
int i = 0; int i = 0;
for (ItemStack filterStack : filters) for (ItemStack filterStack : filters)

View file

@ -88,7 +88,7 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer
renderItemOnSides(tile, itemStack, x, y, z, "No Output"); renderItemOnSides(tile, itemStack, x, y, z, "No Output");
} }
public void renderItemOnSides(TileEntity tile, ItemStack itemStack, double x, double y, double z, String itemName) public void renderItemOnSides(TileEntity tile, ItemStack itemStack, double x, double y, double z, String renderText)
{ {
RenderItem renderItem = ((RenderItem) RenderManager.instance.getEntityClassRenderObject(EntityItem.class)); RenderItem renderItem = ((RenderItem) RenderManager.instance.getEntityClassRenderObject(EntityItem.class));
@ -99,7 +99,7 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer
if (itemStack != null) if (itemStack != null)
{ {
itemName = itemStack.getDisplayName(); renderText = itemStack.getDisplayName();
amount = Integer.toString(itemStack.stackSize); amount = Integer.toString(itemStack.stackSize);
} }
@ -155,7 +155,7 @@ public abstract class RenderItemOverlayTile extends TileEntitySpecialRenderer
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
this.renderText(itemName, side, 0.02f, x, y - 0.35f, z); this.renderText(renderText, side, 0.02f, x, y - 0.35f, z);
this.renderText(amount, side, 0.02f, x, y - 0.15f, z); this.renderText(amount, side, 0.02f, x, y - 0.15f, z);
} }
} }

View file

@ -10,7 +10,7 @@ import net.minecraft.network.packet.Packet;
import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.api.IManipulator; import resonantinduction.api.IManipulator;
import resonantinduction.archaic.imprint.ItemBlockImprint; import resonantinduction.archaic.imprint.ItemImprint;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.core.prefab.tile.TileEntityFilterable; import resonantinduction.core.prefab.tile.TileEntityFilterable;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
@ -214,7 +214,7 @@ public class TileManipulator extends TileEntityFilterable implements IRotatable,
{ {
if (invExtractionHelper == null || invExtractionHelper.world != this.worldObj) if (invExtractionHelper == null || invExtractionHelper.world != this.worldObj)
{ {
this.invExtractionHelper = new InternalInventoryHandler(this.worldObj, new Vector3(this), this.getFilter() != null ? ItemBlockImprint.getFilters(getFilter()) : null, this.isInverted()); this.invExtractionHelper = new InternalInventoryHandler(this.worldObj, new Vector3(this), this.getFilter() != null ? ItemImprint.getFilters(getFilter()) : null, this.isInverted());
} }
return invExtractionHelper; return invExtractionHelper;
} }
@ -224,7 +224,7 @@ public class TileManipulator extends TileEntityFilterable implements IRotatable,
{ {
super.setFilter(filter); super.setFilter(filter);
/* Reset inv Helper's filters */ /* Reset inv Helper's filters */
this.invHelper().setFilter(this.getFilter() != null ? ItemBlockImprint.getFilters(this.getFilter()) : null, this.isInverted()); this.invHelper().setFilter(this.getFilter() != null ? ItemImprint.getFilters(this.getFilter()) : null, this.isInverted());
} }
/** Is this manipulator set to output items */ /** Is this manipulator set to output items */

View file

@ -37,6 +37,7 @@ item.resonantinduction\:hammer.name=Hammer
## Machines ## Machines
tile.resonantinduction\:millstone.name=Millstone tile.resonantinduction\:millstone.name=Millstone
tile.resonantinduction\:millstone.tooltip=Put some rubble in the millstone and start wrenching to grind rubble into dust.
tile.resonantinduction\:imprinter.name=Imprinter tile.resonantinduction\:imprinter.name=Imprinter
tile.resonantinduction\:engineeringTable.name=Engineering Table tile.resonantinduction\:engineeringTable.name=Engineering Table
tile.resonantinduction\:firebox.name=Firebox tile.resonantinduction\:firebox.name=Firebox

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB