mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 07:13:28 +01:00
-Update 0.0.6.1
This commit is contained in:
parent
48cb15d2e9
commit
9607128e15
91 changed files with 1237 additions and 2214 deletions
|
@ -31,6 +31,6 @@ What that means? The License can be customized by me:
|
|||
- When it comes to the Mod, always link back to the the Forum Thread linked above.
|
||||
|
||||
### NOTES
|
||||
- The above License only applies for Code I wrote myself, any APIs used (such as the CoFH API, the InventoryTweaks API and the MineFactoryReloaded API) have their own License that is being respected.
|
||||
- The above License only applies for Code I wrote myself, any APIs used (such as the CoFH API and the InventoryTweaks API) have their own License that is being respected.
|
||||
- Almost all of the Assets used in this Mod are made by Glenthor and are owned by me. You are not allowed to copy them for any other Project without my Permission.
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ buildscript {
|
|||
apply plugin: 'forge'
|
||||
apply plugin: 'maven'
|
||||
|
||||
version = "1.7.10-0.0.6.0"
|
||||
version = "1.7.10-0.0.6.1"
|
||||
group = "ellpeck.actuallyadditions"
|
||||
archivesBaseName = "ActuallyAdditions"
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
|||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import ellpeck.actuallyadditions.achievement.InitAchievements;
|
||||
import ellpeck.actuallyadditions.blocks.InitBlocks;
|
||||
import ellpeck.actuallyadditions.communication.InterModCommunications;
|
||||
import ellpeck.actuallyadditions.config.ConfigurationHandler;
|
||||
import ellpeck.actuallyadditions.crafting.GrinderCrafting;
|
||||
import ellpeck.actuallyadditions.crafting.InitCrafting;
|
||||
|
@ -24,6 +25,7 @@ import ellpeck.actuallyadditions.material.InitItemMaterials;
|
|||
import ellpeck.actuallyadditions.network.PacketHandler;
|
||||
import ellpeck.actuallyadditions.proxy.IProxy;
|
||||
import ellpeck.actuallyadditions.recipe.FuelHandler;
|
||||
import ellpeck.actuallyadditions.recipe.HairyBallHandler;
|
||||
import ellpeck.actuallyadditions.tile.TileEntityBase;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import ellpeck.actuallyadditions.util.Util;
|
||||
|
@ -76,8 +78,14 @@ public class ActuallyAdditions{
|
|||
ItemCoffee.initIngredients();
|
||||
GrinderCrafting.init();
|
||||
ItemCrafting.initMashedFoodRecipes();
|
||||
HairyBallHandler.init();
|
||||
proxy.postInit();
|
||||
|
||||
Util.logInfo("PostInitialization Finished.");
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onIMCReceived(FMLInterModComms.IMCEvent event){
|
||||
InterModCommunications.processIMC(event.getMessages());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -113,3 +113,7 @@
|
|||
-Testificate Bucks
|
||||
-Village House that has a Coffee Machine
|
||||
-Villager who sells Coffee and Cookies
|
||||
|
||||
-Inventory Emitter
|
||||
-Emits a Redstone Signal dependant on the Amount of a specified Item in it
|
||||
-Items are configurable in the GUI
|
||||
|
|
|
@ -20,6 +20,7 @@ public abstract class BlockContainerBase extends BlockContainer{
|
|||
}
|
||||
|
||||
public void dropInventory(World world, int x, int y, int z){
|
||||
if(!world.isRemote){
|
||||
TileEntity tile = world.getTileEntity(x, y, z);
|
||||
if(tile instanceof TileEntityInventoryBase){
|
||||
TileEntityInventoryBase tileEntity = (TileEntityInventoryBase)tile;
|
||||
|
@ -44,6 +45,7 @@ public abstract class BlockContainerBase extends BlockContainer{
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasComparatorInputOverride(){
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
package ellpeck.actuallyadditions.blocks;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import ellpeck.actuallyadditions.util.BlockUtil;
|
||||
import ellpeck.actuallyadditions.util.INameableItem;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BlockGeneric extends Block implements INameableItem{
|
||||
|
||||
public String name;
|
||||
|
||||
public BlockGeneric(String name){
|
||||
super(Material.rock);
|
||||
this.name = name;
|
||||
this.setHarvestLevel("pickaxe", 0);
|
||||
this.setHardness(1.0F);
|
||||
this.setStepSound(soundTypeStone);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName(){
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int meta){
|
||||
return this.blockIcon;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister iconReg){
|
||||
this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getOredictName(){
|
||||
return this.getName();
|
||||
}
|
||||
|
||||
public static class TheItemBlock extends ItemBlock{
|
||||
|
||||
private Block theBlock;
|
||||
|
||||
public TheItemBlock(Block block){
|
||||
super(block);
|
||||
this.theBlock = block;
|
||||
this.setHasSubtypes(false);
|
||||
this.setMaxDamage(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack stack){
|
||||
return EnumRarity.uncommon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack stack){
|
||||
return this.getUnlocalizedName();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) {
|
||||
BlockUtil.addInformation(theBlock, list, 1, "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetadata(int meta){
|
||||
return meta;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -121,7 +121,7 @@ public class BlockInputter extends BlockContainerBase implements INameableItem{
|
|||
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) {
|
||||
if(KeyUtil.isShiftPressed()){
|
||||
list.add(StatCollector.translateToLocalFormatted("tooltip." + ModUtil.MOD_ID_LOWER + ".blockInputter.desc." + 1, StringUtil.OBFUSCATED, StringUtil.LIGHT_GRAY));
|
||||
for(int i = 1; i < 6; i++){
|
||||
for(int i = 1; i < 7; i++){
|
||||
list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + ".blockInputter.desc." + (i + 1)));
|
||||
}
|
||||
if((((BlockInputter)theBlock).isAdvanced)) list.add(StatCollector.translateToLocal("tooltip." + ModUtil.MOD_ID_LOWER + "." + ((INameableItem)theBlock).getName() + ".desc"));
|
||||
|
|
|
@ -91,7 +91,7 @@ public class BlockMisc extends Block implements INameableItem{
|
|||
@SuppressWarnings("unchecked")
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) {
|
||||
BlockUtil.addInformation(theBlock, list, 1, allMiscBlocks[stack.getItemDamage()].getName());
|
||||
if(stack.getItemDamage() < allMiscBlocks.length) BlockUtil.addInformation(theBlock, list, 1, allMiscBlocks[stack.getItemDamage()].getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,7 +2,6 @@ package ellpeck.actuallyadditions.blocks;
|
|||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import ellpeck.actuallyadditions.items.ItemSeed;
|
||||
import ellpeck.actuallyadditions.util.BlockUtil;
|
||||
import ellpeck.actuallyadditions.util.INameableItem;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
|
@ -16,16 +15,11 @@ import net.minecraft.item.ItemBlock;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
import powercrystals.minefactoryreloaded.api.FertilizerType;
|
||||
import powercrystals.minefactoryreloaded.api.HarvestType;
|
||||
import powercrystals.minefactoryreloaded.api.IFactoryFertilizable;
|
||||
import powercrystals.minefactoryreloaded.api.IFactoryHarvestable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockPlant extends BlockCrops implements INameableItem, IFactoryHarvestable, IFactoryFertilizable{
|
||||
public class BlockPlant extends BlockCrops implements INameableItem{
|
||||
|
||||
private IIcon[] textures;
|
||||
private String name;
|
||||
|
@ -42,19 +36,9 @@ public class BlockPlant extends BlockCrops implements INameableItem, IFactoryHar
|
|||
this.addDropAmount = addDropAmount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBlockStay(World world, int x, int y, int z){
|
||||
return y > 0 && y < 256 && world.getBlock(x, y-1, z).getMaterial() == ((ItemSeed)this.seedItem).soilBlock.getMaterial();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int quantityDropped(int meta, int fortune, Random random){
|
||||
return meta >= 7 ? super.quantityDropped(meta, fortune, random) : random.nextInt(addDropAmount)+minDropAmount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlaceBlockOn(Block block){
|
||||
return block == ((ItemSeed)this.seedItem).soilBlock;
|
||||
return meta >= 7 ? random.nextInt(addDropAmount)+minDropAmount : super.quantityDropped(meta, fortune, random);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -143,57 +127,4 @@ public class BlockPlant extends BlockCrops implements INameableItem, IFactoryHar
|
|||
return damage;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Block getPlant(){
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canFertilize(World world, int x, int y, int z, FertilizerType fertilizerType){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean fertilize(World world, Random rand, int x, int y, int z, FertilizerType fertilizerType){
|
||||
if (this.func_149851_a(world, x, y, z, world.isRemote)){
|
||||
if(!world.isRemote){
|
||||
if(this.func_149852_a(world, world.rand, x, y, z)){
|
||||
this.func_149853_b(world, world.rand, x, y, z);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HarvestType getHarvestType(){
|
||||
return HarvestType.Normal;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean breakBlock(){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBeHarvested(World world, Map<String, Boolean> harvesterSettings, int x, int y, int z){
|
||||
return world.getBlockMetadata(x, y, z) >= 7;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemStack> getDrops(World world, Random rand, Map<String, Boolean> harvesterSettings, int x, int y, int z){
|
||||
return this.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preHarvest(World world, int x, int y, int z){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postHarvest(World world, int x, int y, int z){
|
||||
|
||||
}
|
||||
}
|
129
src/main/java/ellpeck/actuallyadditions/blocks/BlockSlabs.java
Normal file
129
src/main/java/ellpeck/actuallyadditions/blocks/BlockSlabs.java
Normal file
|
@ -0,0 +1,129 @@
|
|||
package ellpeck.actuallyadditions.blocks;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import ellpeck.actuallyadditions.util.BlockUtil;
|
||||
import ellpeck.actuallyadditions.util.INameableItem;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BlockSlabs extends Block implements INameableItem{
|
||||
|
||||
private String name;
|
||||
private Block fullBlock;
|
||||
|
||||
public BlockSlabs(String name, Block fullBlock){
|
||||
super(Material.rock);
|
||||
this.fullBlock = fullBlock;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axis, List list, Entity entity){
|
||||
this.setBlockBoundsBasedOnState(world, x, y, z);
|
||||
super.addCollisionBoxesToList(world, x, y, z, axis, list, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlockBoundsForItemRender(){
|
||||
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z){
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
float minY = meta == 1 ? 0.5F : 0.0F;
|
||||
float maxY = meta == 1 ? 1.0F : 0.5F;
|
||||
this.setBlockBounds(0.0F, minY, 0F, 1.0F, maxY, 1.0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onBlockPlaced(World par1World, int blockX, int blockY, int blockZ, int side, float hitX, float hitY, float hitZ, int meta){
|
||||
if (side == 1) return meta;
|
||||
if (side == 0 || hitY >= 0.5F) return meta+1;
|
||||
return meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int meta){
|
||||
return this.fullBlock.getIcon(0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName(){
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getOredictName(){
|
||||
return this.getName();
|
||||
}
|
||||
|
||||
public static class TheItemBlock extends ItemBlock{
|
||||
|
||||
private Block theBlock;
|
||||
|
||||
public TheItemBlock(Block block){
|
||||
super(block);
|
||||
this.theBlock = block;
|
||||
this.setHasSubtypes(false);
|
||||
this.setMaxDamage(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack stack){
|
||||
return EnumRarity.uncommon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack stack){
|
||||
return this.getUnlocalizedName();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) {
|
||||
BlockUtil.addInformation(theBlock, list, 1, "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetadata(int meta){
|
||||
return meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ){
|
||||
if(world.getBlock(x, y, z) == this.theBlock && ((side == 1 && world.getBlockMetadata(x, y, z) == 0) || (side == 0 && world.getBlockMetadata(x, y, z) == 1))){
|
||||
if(world.setBlock(x, y, z, ((BlockSlabs)this.theBlock).fullBlock, 0, 3)){
|
||||
world.playSoundEffect(x+0.5F, y+0.5F, z+0.5F, this.theBlock.stepSound.getBreakSound(), (this.theBlock.stepSound.getVolume()+1.0F)/2.0F, this.theBlock.stepSound.getPitch()*0.8F);
|
||||
stack.stackSize--;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.onItemUse(stack, player, world, x, y, z, side, hitX, hitY, hitZ);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
package ellpeck.actuallyadditions.blocks;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import ellpeck.actuallyadditions.util.BlockUtil;
|
||||
import ellpeck.actuallyadditions.util.INameableItem;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockStairs;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BlockStair extends BlockStairs implements INameableItem{
|
||||
|
||||
private String name;
|
||||
|
||||
public BlockStair(Block block, String name){
|
||||
super(block, 0);
|
||||
this.name = name;
|
||||
this.setLightOpacity(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName(){
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getOredictName(){
|
||||
return this.getName();
|
||||
}
|
||||
|
||||
public static class TheItemBlock extends ItemBlock{
|
||||
|
||||
private Block theBlock;
|
||||
|
||||
public TheItemBlock(Block block){
|
||||
super(block);
|
||||
this.theBlock = block;
|
||||
this.setHasSubtypes(false);
|
||||
this.setMaxDamage(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack stack){
|
||||
return EnumRarity.uncommon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack stack){
|
||||
return this.getUnlocalizedName();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) {
|
||||
BlockUtil.addInformation(theBlock, list, 1, "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetadata(int meta){
|
||||
return meta;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
package ellpeck.actuallyadditions.blocks;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import ellpeck.actuallyadditions.blocks.metalists.TheWildPlants;
|
||||
import ellpeck.actuallyadditions.util.BlockUtil;
|
||||
import ellpeck.actuallyadditions.util.INameableItem;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockBush;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BlockWildPlant extends BlockBush implements INameableItem{
|
||||
|
||||
public static final TheWildPlants[] allWildPlants = TheWildPlants.values();
|
||||
public IIcon[] textures = new IIcon[allWildPlants.length];
|
||||
|
||||
public BlockWildPlant(){
|
||||
this.setStepSound(soundTypeGrass);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBlockStay(World world, int x, int y, int z){
|
||||
return world.getBlockMetadata(x, y, z) == TheWildPlants.RICE.ordinal() ? world.getBlock(x, y-1, z).getMaterial() == Material.water : world.getBlock(x, y - 1, z).canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canSilkHarvest(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("all")
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubBlocks(Item item, CreativeTabs tab, List list){
|
||||
for (int j = 0; j < allWildPlants.length; j++){
|
||||
list.add(new ItemStack(item, 1, j));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune){
|
||||
return metadata >= allWildPlants.length ? null : allWildPlants[metadata].wildVersionOf.getDrops(world, x, y, z, 7, fortune);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getIcon(int side, int metadata){
|
||||
return metadata >= allWildPlants.length ? null : allWildPlants[metadata].wildVersionOf.getIcon(0, 7);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName(){
|
||||
return "blockWild";
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public Item getItem(World world, int x, int y, int z){
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
return meta >= allWildPlants.length ? null : ((BlockPlant)allWildPlants[meta].wildVersionOf).seedItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getOredictName(){
|
||||
return "";
|
||||
}
|
||||
|
||||
public static class TheItemBlock extends ItemBlock{
|
||||
|
||||
private Block theBlock;
|
||||
|
||||
public TheItemBlock(Block block){
|
||||
super(block);
|
||||
this.theBlock = block;
|
||||
this.setHasSubtypes(true);
|
||||
this.setMaxDamage(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack stack){
|
||||
return stack.getItemDamage() >= allWildPlants.length ? EnumRarity.common : allWildPlants[stack.getItemDamage()].rarity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack stack){
|
||||
return this.getUnlocalizedName() + (stack.getItemDamage() >= allWildPlants.length ? " ERROR!" : allWildPlants[stack.getItemDamage()].getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean isHeld) {
|
||||
if(stack.getItemDamage() < allWildPlants.length) BlockUtil.addInformation(theBlock, list, 1, allWildPlants[stack.getItemDamage()].getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetadata(int damage){
|
||||
return damage;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public IIcon getIconFromDamage(int meta){
|
||||
return this.theBlock.getIcon(0, meta);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -2,6 +2,7 @@ package ellpeck.actuallyadditions.blocks;
|
|||
|
||||
import ellpeck.actuallyadditions.config.values.ConfigBoolValues;
|
||||
import ellpeck.actuallyadditions.util.BlockUtil;
|
||||
import ellpeck.actuallyadditions.util.CompatUtil;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import ellpeck.actuallyadditions.util.Util;
|
||||
import net.minecraft.block.Block;
|
||||
|
@ -10,12 +11,12 @@ import net.minecraft.item.EnumRarity;
|
|||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
import org.apache.logging.log4j.Level;
|
||||
import powercrystals.minefactoryreloaded.api.FactoryRegistry;
|
||||
|
||||
public class InitBlocks{
|
||||
|
||||
public static Block blockCompost;
|
||||
public static Block blockMisc;
|
||||
public static Block blockWildPlant;
|
||||
public static Block blockFeeder;
|
||||
public static Block blockGiantChest;
|
||||
|
||||
|
@ -67,9 +68,29 @@ public class InitBlocks{
|
|||
public static Block blockEnergizer;
|
||||
public static Block blockEnervator;
|
||||
|
||||
public static Block blockTestifiBucksGreenWall;
|
||||
public static Block blockTestifiBucksWhiteWall;
|
||||
public static Block blockTestifiBucksGreenStairs;
|
||||
public static Block blockTestifiBucksWhiteStairs;
|
||||
public static Block blockTestifiBucksGreenSlab;
|
||||
public static Block blockTestifibucksWhiteSlab;
|
||||
|
||||
public static void init(){
|
||||
Util.logInfo("Initializing Blocks...");
|
||||
|
||||
blockTestifiBucksGreenWall = new BlockGeneric("blockTestifiBucksGreenWall");
|
||||
BlockUtil.register(blockTestifiBucksGreenWall, BlockGeneric.TheItemBlock.class);
|
||||
blockTestifiBucksWhiteWall = new BlockGeneric("blockTestifiBucksWhiteWall");
|
||||
BlockUtil.register(blockTestifiBucksWhiteWall, BlockGeneric.TheItemBlock.class);
|
||||
blockTestifiBucksGreenStairs = new BlockStair(blockTestifiBucksGreenWall, "blockTestifiBucksGreenStairs");
|
||||
BlockUtil.register(blockTestifiBucksGreenStairs, BlockStair.TheItemBlock.class);
|
||||
blockTestifiBucksWhiteStairs = new BlockStair(blockTestifiBucksWhiteWall, "blockTestifiBucksWhiteStairs");
|
||||
BlockUtil.register(blockTestifiBucksWhiteStairs, BlockStair.TheItemBlock.class);
|
||||
blockTestifiBucksGreenSlab = new BlockSlabs("blockTestifiBucksGreenSlab", blockTestifiBucksGreenWall);
|
||||
BlockUtil.register(blockTestifiBucksGreenSlab, BlockSlabs.TheItemBlock.class);
|
||||
blockTestifibucksWhiteSlab = new BlockSlabs("blockTestifibucksWhiteSlab", blockTestifiBucksWhiteWall);
|
||||
BlockUtil.register(blockTestifibucksWhiteSlab, BlockSlabs.TheItemBlock.class);
|
||||
|
||||
blockEnergizer = new BlockEnergizer(true);
|
||||
BlockUtil.register(blockEnergizer, BlockEnergizer.TheItemBlock.class);
|
||||
|
||||
|
@ -108,23 +129,19 @@ public class InitBlocks{
|
|||
|
||||
blockRice = new BlockPlant("blockRice", 6, 1, 2);
|
||||
BlockUtil.register(blockRice, BlockPlant.TheItemBlock.class, false);
|
||||
FactoryRegistry.sendMessage("registerHarvestable", blockRice);
|
||||
FactoryRegistry.sendMessage("registerFertilizable", blockRice);
|
||||
CompatUtil.registerMFRPlant(blockRice);
|
||||
|
||||
blockCanola = new BlockPlant("blockCanola", 4, 3, 3);
|
||||
BlockUtil.register(blockCanola, BlockPlant.TheItemBlock.class, false);
|
||||
FactoryRegistry.sendMessage("registerHarvestable", blockCanola);
|
||||
FactoryRegistry.sendMessage("registerFertilizable", blockCanola);
|
||||
CompatUtil.registerMFRPlant(blockCanola);
|
||||
|
||||
blockFlax = new BlockPlant("blockFlax", 6, 2, 4);
|
||||
BlockUtil.register(blockFlax, BlockPlant.TheItemBlock.class, false);
|
||||
FactoryRegistry.sendMessage("registerHarvestable", blockFlax);
|
||||
FactoryRegistry.sendMessage("registerFertilizable", blockFlax);
|
||||
CompatUtil.registerMFRPlant(blockFlax);
|
||||
|
||||
blockCoffee = new BlockPlant("blockCoffee", 6, 2, 2);
|
||||
BlockUtil.register(blockCoffee, BlockPlant.TheItemBlock.class, false);
|
||||
FactoryRegistry.sendMessage("registerHarvestable", blockCoffee);
|
||||
FactoryRegistry.sendMessage("registerFertilizable", blockCoffee);
|
||||
CompatUtil.registerMFRPlant(blockCoffee);
|
||||
|
||||
blockCompost = new BlockCompost();
|
||||
BlockUtil.register(blockCompost, BlockCompost.TheItemBlock.class);
|
||||
|
@ -189,10 +206,14 @@ public class InitBlocks{
|
|||
blockPhantomBooster = new BlockPhantomBooster();
|
||||
BlockUtil.register(blockPhantomBooster, BlockPhantomBooster.TheItemBlock.class);
|
||||
|
||||
blockWildPlant = new BlockWildPlant();
|
||||
BlockUtil.register(blockWildPlant, BlockWildPlant.TheItemBlock.class, false, BlockWildPlant.allWildPlants);
|
||||
|
||||
registerFluids();
|
||||
}
|
||||
|
||||
public static void registerFluids(){
|
||||
//Canola Fluid
|
||||
String canolaOil = "canolaoil";
|
||||
if(!FluidRegistry.isFluidRegistered(canolaOil) || ConfigBoolValues.PREVENT_CANOLA_OVERRIDE.isEnabled()){
|
||||
fluidCanolaOil = new FluidAA(canolaOil).setDensity(1200).setViscosity(1500).setTemperature(300).setRarity(EnumRarity.uncommon);
|
||||
|
@ -203,6 +224,7 @@ public class InitBlocks{
|
|||
}
|
||||
fluidCanolaOil = FluidRegistry.getFluid(canolaOil);
|
||||
|
||||
//Canola Block
|
||||
if(fluidCanolaOil.getBlock() == null || ConfigBoolValues.PREVENT_CANOLA_BLOCK_OVERRIDE.isEnabled()){
|
||||
blockCanolaOil = new BlockFluidFlowing(fluidCanolaOil, Material.water, "blockCanolaOil");
|
||||
BlockUtil.register(blockCanolaOil, BlockFluidFlowing.TheItemBlock.class, false);
|
||||
|
@ -212,6 +234,7 @@ public class InitBlocks{
|
|||
}
|
||||
blockCanolaOil = fluidCanolaOil.getBlock();
|
||||
|
||||
//Oil Fluid
|
||||
String oil = "oil";
|
||||
if(!FluidRegistry.isFluidRegistered(oil) || ConfigBoolValues.PREVENT_OIL_OVERRIDE.isEnabled()){
|
||||
fluidOil = new FluidAA(oil).setDensity(1200).setViscosity(1500).setTemperature(300).setRarity(EnumRarity.uncommon);
|
||||
|
@ -222,6 +245,7 @@ public class InitBlocks{
|
|||
}
|
||||
fluidOil = FluidRegistry.getFluid(oil);
|
||||
|
||||
//Oil Block
|
||||
if(fluidOil.getBlock() == null || ConfigBoolValues.PREVENT_OIL_BLOCK_OVERRIDE.isEnabled()){
|
||||
blockOil = new BlockFluidFlowing(fluidOil, Material.water, "blockOil");
|
||||
BlockUtil.register(blockOil, BlockFluidFlowing.TheItemBlock.class, false);
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package ellpeck.actuallyadditions.blocks.metalists;
|
||||
|
||||
import ellpeck.actuallyadditions.blocks.InitBlocks;
|
||||
import ellpeck.actuallyadditions.util.INameableItem;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
|
||||
public enum TheWildPlants implements INameableItem{
|
||||
|
||||
CANOLA("Canola", EnumRarity.rare, "blockCanolaWild", InitBlocks.blockCanola),
|
||||
FLAX("Flax", EnumRarity.rare, "blockFlaxWild", InitBlocks.blockFlax),
|
||||
RICE("Rice", EnumRarity.rare, "blockRiceWild", InitBlocks.blockRice),
|
||||
COFFEE("Coffee", EnumRarity.rare, "blockCoffeeWild", InitBlocks.blockCoffee);
|
||||
|
||||
public final String name;
|
||||
public final String oredictName;
|
||||
public final EnumRarity rarity;
|
||||
public final Block wildVersionOf;
|
||||
|
||||
TheWildPlants(String name, EnumRarity rarity, String oredictName, Block wildVersionOf){
|
||||
this.name = name;
|
||||
this.rarity = rarity;
|
||||
this.oredictName = oredictName;
|
||||
this.wildVersionOf = wildVersionOf;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName(){
|
||||
return this.name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getOredictName(){
|
||||
return this.oredictName;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
package ellpeck.actuallyadditions.communication;
|
||||
|
||||
import cpw.mods.fml.common.event.FMLInterModComms;
|
||||
import ellpeck.actuallyadditions.items.ItemCoffee;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipeManualRegistry;
|
||||
import ellpeck.actuallyadditions.recipe.HairyBallHandler;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import ellpeck.actuallyadditions.util.Util;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import org.apache.logging.log4j.Level;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class InterModCommunications{
|
||||
|
||||
public static void processIMC(List<FMLInterModComms.IMCMessage> messages){
|
||||
for(FMLInterModComms.IMCMessage message : messages){
|
||||
if(message.key.equalsIgnoreCase("registerCrusherRecipe")){
|
||||
NBTTagCompound compound = message.getNBTValue();
|
||||
if(compound != null){
|
||||
ItemStack input = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("input"));
|
||||
ItemStack outputOne = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("outputOne"));
|
||||
ItemStack outputTwo = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("outputTwo"));
|
||||
int secondChance = compound.getInteger("secondChance");
|
||||
|
||||
if(input != null && outputOne != null){
|
||||
GrinderRecipeManualRegistry.registerRecipe(input, outputOne, outputTwo, secondChance);
|
||||
Util.logInfo("Crusher Recipe that was sent from Mod " + message.getSender() + " has been registered successfully: " + input.toString() + " -> " + outputOne.toString() + (outputTwo != null ? " + " + outputTwo.toString() + ", Second Chance: " + secondChance : ""));
|
||||
}
|
||||
else ModUtil.LOGGER.log(Level.ERROR, "Crusher Recipe that was sent from Mod " + message.getSender() + " could not be registered: It's missing an Input or an Output!");
|
||||
}
|
||||
}
|
||||
|
||||
if(message.key.equalsIgnoreCase("registerCoffeeMachineRecipe")){
|
||||
NBTTagCompound compound = message.getNBTValue();
|
||||
if(compound != null){
|
||||
ItemStack input = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("input"));
|
||||
int potionID = compound.getInteger("id");
|
||||
int duration = compound.getInteger("duration");
|
||||
int amplifier = compound.getInteger("amplifier");
|
||||
int maxAmp = compound.getInteger("maxAmp");
|
||||
|
||||
if(input != null && potionID > 0 && duration > 0 && maxAmp > 0){
|
||||
PotionEffect effect = new PotionEffect(potionID, duration, amplifier);
|
||||
ItemCoffee.registerIngredient(new ItemCoffee.Ingredient(input, new PotionEffect[]{effect}, maxAmp));
|
||||
Util.logInfo("Coffee Machine Recipe that was sent from Mod " + message.getSender() + " has been registered successfully: " + input.toString() + " -> " + effect.toString());
|
||||
}
|
||||
else ModUtil.LOGGER.log(Level.ERROR, "Coffee Machine Recipe that was sent from Mod " + message.getSender() + " could not be registered: It's missing an Input, a Potion ID, a Duration or a max Amplifier!");
|
||||
}
|
||||
}
|
||||
|
||||
if(message.key.equalsIgnoreCase("registerBallOfHairRecipe")){
|
||||
NBTTagCompound compound = message.getNBTValue();
|
||||
if(compound != null){
|
||||
ItemStack output = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("output"));
|
||||
int chance = compound.getInteger("chance");
|
||||
|
||||
if(output != null && chance > 0){
|
||||
HairyBallHandler.addReturn(output, chance);
|
||||
Util.logInfo("Ball Of Hair Recipe that was sent from Mod " + message.getSender() + " has been registered successfully: " + output.toString() + ", Chance: " + chance);
|
||||
}
|
||||
else ModUtil.LOGGER.log(Level.ERROR, "Ball Of Hair Recipe that was sent from Mod " + message.getSender() + " could not be registered: It's missing an Output or a Chance!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -2,6 +2,7 @@ package ellpeck.actuallyadditions.config.values;
|
|||
|
||||
import ellpeck.actuallyadditions.config.ConfigCategories;
|
||||
import ellpeck.actuallyadditions.config.ConfigValues;
|
||||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||
|
||||
public enum ConfigIntValues{
|
||||
|
||||
|
@ -86,9 +87,9 @@ public enum ConfigIntValues{
|
|||
COFFEE_CACHE_ADDED_PER_ITEM("Coffee Machine: Coffee added per Cup", ConfigCategories.MACHINE_VALUES, 1, 1, 300, "The amount of Coffee added by one Coffee Item in the Coffee Machine"),
|
||||
COFFEE_CACHE_USED_PER_ITEM("Coffee Machine: Coffee used per Cup", ConfigCategories.MACHINE_VALUES, 10, 1, 300, "The amount of Coffee used to brew one Coffee in the Coffee Machine"),
|
||||
COFFEE_MACHINE_TIME_USED("Coffee Machine: Time to Brew", ConfigCategories.MACHINE_VALUES, 500, 10, 10000, "The amount of time the Coffee Machine takes to brew a Coffee"),
|
||||
COFFEE_MACHINE_WATER_USED("Coffee Machine: Water Used per Cup", ConfigCategories.MACHINE_VALUES, 500, 1, 4*FluidContainerRegistry.BUCKET_VOLUME, "The amount of Water the Coffee Machine uses per Cup"),
|
||||
|
||||
COFFEE_DRINK_AMOUNT("Coffee: Drink Amount", ConfigCategories.OTHER, 4, 1, 100, "How often a Coffee can be drunk from"),
|
||||
|
||||
DRILL_ENERGY_USE("Drill: Energy Use Per Block or Hit", ConfigCategories.DRILL_VALUES, 100, 5, 10000, "How much Energy the Drill uses per Block"),
|
||||
|
||||
DRILL_SPEED_EXTRA_USE("Speed Upgrade: Extra Energy Use", ConfigCategories.DRILL_VALUES, 50, 0, 10000, "How much extra Energy the Speed Upgrade uses"),
|
||||
|
|
|
@ -3,9 +3,9 @@ package ellpeck.actuallyadditions.crafting;
|
|||
import ellpeck.actuallyadditions.items.InitItems;
|
||||
import ellpeck.actuallyadditions.items.metalists.TheDusts;
|
||||
import ellpeck.actuallyadditions.items.metalists.TheFoods;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipeRegistry;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipeRegistry.SearchCase;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipes;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipeAutoRegistry;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipeAutoRegistry.SearchCase;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipeManualRegistry;
|
||||
import ellpeck.actuallyadditions.util.Util;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
|
@ -16,28 +16,28 @@ public class GrinderCrafting{
|
|||
public static void init(){
|
||||
Util.logInfo("Initializing Crusher Recipes...");
|
||||
|
||||
GrinderRecipes.registerRecipe(new ItemStack(Blocks.redstone_ore), new ItemStack(Items.redstone, 10));
|
||||
GrinderRecipes.registerRecipe(new ItemStack(Blocks.lapis_ore), new ItemStack(InitItems.itemDust, 12, TheDusts.LAPIS.ordinal()));
|
||||
GrinderRecipes.registerRecipe(new ItemStack(Items.coal), new ItemStack(InitItems.itemDust, 1, TheDusts.COAL.ordinal()));
|
||||
GrinderRecipes.registerRecipe(new ItemStack(Blocks.coal_block), new ItemStack(InitItems.itemDust, 9, TheDusts.COAL.ordinal()));
|
||||
GrinderRecipeManualRegistry.registerRecipe(new ItemStack(Blocks.redstone_ore), new ItemStack(Items.redstone, 10));
|
||||
GrinderRecipeManualRegistry.registerRecipe(new ItemStack(Blocks.lapis_ore), new ItemStack(InitItems.itemDust, 12, TheDusts.LAPIS.ordinal()));
|
||||
GrinderRecipeManualRegistry.registerRecipe(new ItemStack(Items.coal), new ItemStack(InitItems.itemDust, 1, TheDusts.COAL.ordinal()));
|
||||
GrinderRecipeManualRegistry.registerRecipe(new ItemStack(Blocks.coal_block), new ItemStack(InitItems.itemDust, 9, TheDusts.COAL.ordinal()));
|
||||
|
||||
GrinderRecipes.registerRecipe(new ItemStack(Blocks.cobblestone), new ItemStack(Blocks.sand));
|
||||
GrinderRecipes.registerRecipe(new ItemStack(Blocks.gravel), new ItemStack(Items.flint));
|
||||
GrinderRecipes.registerRecipe(new ItemStack(Blocks.stone), new ItemStack(Blocks.cobblestone));
|
||||
GrinderRecipes.registerRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(Items.sugar, 2));
|
||||
GrinderRecipeManualRegistry.registerRecipe(new ItemStack(Blocks.cobblestone), new ItemStack(Blocks.sand));
|
||||
GrinderRecipeManualRegistry.registerRecipe(new ItemStack(Blocks.gravel), new ItemStack(Items.flint));
|
||||
GrinderRecipeManualRegistry.registerRecipe(new ItemStack(Blocks.stone), new ItemStack(Blocks.cobblestone));
|
||||
GrinderRecipeManualRegistry.registerRecipe(new ItemStack(InitItems.itemFoods, 1, TheFoods.RICE.ordinal()), new ItemStack(Items.sugar, 2));
|
||||
|
||||
GrinderRecipes.registerRecipe("oreNickel", "dustNickel", "dustPlatinum", 30, 2);
|
||||
GrinderRecipes.registerRecipe("oreIron", "dustIron", "dustGold", 20, 2);
|
||||
GrinderRecipeManualRegistry.registerRecipe("oreNickel", "dustNickel", "dustPlatinum", 30, 2);
|
||||
GrinderRecipeManualRegistry.registerRecipe("oreIron", "dustIron", "dustGold", 20, 2);
|
||||
|
||||
GrinderRecipeRegistry.searchCases.add(new SearchCase("oreNether", 6));
|
||||
GrinderRecipeRegistry.searchCases.add(new SearchCase("denseore", 8));
|
||||
GrinderRecipeRegistry.searchCases.add(new SearchCase("gem", 1));
|
||||
GrinderRecipeRegistry.searchCases.add(new SearchCase("ingot", 1));
|
||||
GrinderRecipeRegistry.searchCases.add(new SearchCase("ore", 2));
|
||||
GrinderRecipeAutoRegistry.searchCases.add(new SearchCase("oreNether", 6));
|
||||
GrinderRecipeAutoRegistry.searchCases.add(new SearchCase("denseore", 8));
|
||||
GrinderRecipeAutoRegistry.searchCases.add(new SearchCase("gem", 1));
|
||||
GrinderRecipeAutoRegistry.searchCases.add(new SearchCase("ingot", 1));
|
||||
GrinderRecipeAutoRegistry.searchCases.add(new SearchCase("ore", 2));
|
||||
|
||||
GrinderRecipeRegistry.exceptions.add("ingotBrick");
|
||||
GrinderRecipeRegistry.exceptions.add("ingotBrickNether");
|
||||
GrinderRecipeAutoRegistry.exceptions.add("ingotBrick");
|
||||
GrinderRecipeAutoRegistry.exceptions.add("ingotBrickNether");
|
||||
|
||||
GrinderRecipeRegistry.registerFinally();
|
||||
GrinderRecipeAutoRegistry.registerFinally();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,10 +31,10 @@ public class CreativeTab extends CreativeTabs{
|
|||
add(InitBlocks.blockPhantomLiquiface);
|
||||
add(InitBlocks.blockPhantomPlacer);
|
||||
add(InitBlocks.blockPhantomBreaker);
|
||||
add(InitBlocks.blockPhantomBooster);
|
||||
add(InitBlocks.blockCoffeeMachine);
|
||||
add(InitBlocks.blockInputter);
|
||||
add(InitBlocks.blockInputterAdvanced);
|
||||
add(InitBlocks.blockPhantomBooster);
|
||||
add(InitBlocks.blockCoffeeMachine);
|
||||
|
||||
add(InitBlocks.blockGreenhouseGlass);
|
||||
add(InitBlocks.blockGrinder);
|
||||
|
@ -64,6 +64,13 @@ public class CreativeTab extends CreativeTabs{
|
|||
add(InitBlocks.blockCanolaPress);
|
||||
add(InitBlocks.blockFermentingBarrel);
|
||||
|
||||
add(InitBlocks.blockTestifiBucksGreenWall);
|
||||
add(InitBlocks.blockTestifiBucksWhiteWall);
|
||||
add(InitBlocks.blockTestifiBucksGreenStairs);
|
||||
add(InitBlocks.blockTestifiBucksWhiteStairs);
|
||||
add(InitBlocks.blockTestifiBucksGreenSlab);
|
||||
add(InitBlocks.blockTestifibucksWhiteSlab);
|
||||
|
||||
add(InitItems.itemDrill);
|
||||
add(InitItems.itemDrillUpgradeSpeed);
|
||||
add(InitItems.itemDrillUpgradeSpeedII);
|
||||
|
@ -119,10 +126,10 @@ public class CreativeTab extends CreativeTabs{
|
|||
add(InitItems.itemShovelObsidian);
|
||||
add(InitItems.itemHoeObsidian);
|
||||
|
||||
add(InitItems.itemJams);
|
||||
|
||||
add(InitItems.itemPotionRing);
|
||||
add(InitItems.itemPotionRingAdvanced);
|
||||
|
||||
add(InitItems.itemJams);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,11 +2,12 @@ package ellpeck.actuallyadditions.event;
|
|||
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import ellpeck.actuallyadditions.blocks.InitBlocks;
|
||||
import ellpeck.actuallyadditions.blocks.metalists.TheWildPlants;
|
||||
import ellpeck.actuallyadditions.config.values.ConfigBoolValues;
|
||||
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
|
||||
import ellpeck.actuallyadditions.util.WorldUtil;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.event.terraingen.DecorateBiomeEvent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -24,11 +25,11 @@ public class WorldDecorationEvent{
|
|||
int genY = event.world.getTopSolidOrLiquidBlock(genX, genZ);
|
||||
|
||||
if(event.world.getBlock(genX, genY, genZ).getMaterial() == Material.water){
|
||||
ArrayList<Material> blocksAroundBottom = this.getMaterialsAround(event.world, genX, genY, genZ);
|
||||
ArrayList<Material> blocksAroundTop = this.getMaterialsAround(event.world, genX, genY+1, genZ);
|
||||
ArrayList<Material> blocksAroundBottom = WorldUtil.getMaterialsAround(event.world, genX, genY, genZ);
|
||||
ArrayList<Material> blocksAroundTop = WorldUtil.getMaterialsAround(event.world, genX, genY+1, genZ);
|
||||
if(blocksAroundBottom.contains(Material.grass) || blocksAroundBottom.contains(Material.ground) || blocksAroundBottom.contains(Material.rock) || blocksAroundBottom.contains(Material.sand)){
|
||||
if(!blocksAroundTop.contains(Material.water) && !blocksAroundTop.contains(Material.water) && !blocksAroundTop.contains(Material.water) && event.world.getBlock(genX, genY+1, genZ).getMaterial() == Material.air){
|
||||
event.world.setBlock(genX, genY+1, genZ, InitBlocks.blockRice, event.rand.nextInt(8), 2);
|
||||
if(!blocksAroundTop.contains(Material.water) && event.world.getBlock(genX, genY+1, genZ).getMaterial() == Material.air){
|
||||
event.world.setBlock(genX, genY+1, genZ, InitBlocks.blockWildPlant, TheWildPlants.RICE.ordinal(), 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -36,12 +37,12 @@ public class WorldDecorationEvent{
|
|||
}
|
||||
}
|
||||
|
||||
this.genPlantNormally(InitBlocks.blockCanola, ConfigIntValues.CANOLA_AMOUNT.getValue(), ConfigBoolValues.DO_CANOLA_GEN.isEnabled(), Material.grass, event);
|
||||
this.genPlantNormally(InitBlocks.blockFlax, ConfigIntValues.FLAX_AMOUNT.getValue(), ConfigBoolValues.DO_FLAX_GEN.isEnabled(), Material.grass, event);
|
||||
this.genPlantNormally(InitBlocks.blockCoffee, ConfigIntValues.COFFEE_AMOUNT.getValue(), ConfigBoolValues.DO_COFFEE_GEN.isEnabled(), Material.grass, event);
|
||||
this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.CANOLA.ordinal(), ConfigIntValues.CANOLA_AMOUNT.getValue(), ConfigBoolValues.DO_CANOLA_GEN.isEnabled(), Material.grass, event);
|
||||
this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.FLAX.ordinal(), ConfigIntValues.FLAX_AMOUNT.getValue(), ConfigBoolValues.DO_FLAX_GEN.isEnabled(), Material.grass, event);
|
||||
this.genPlantNormally(InitBlocks.blockWildPlant, TheWildPlants.COFFEE.ordinal(), ConfigIntValues.COFFEE_AMOUNT.getValue(), ConfigBoolValues.DO_COFFEE_GEN.isEnabled(), Material.grass, event);
|
||||
}
|
||||
|
||||
public void genPlantNormally(Block plant, int amount, boolean doIt, Material blockBelow, DecorateBiomeEvent event){
|
||||
public void genPlantNormally(Block plant, int meta, int amount, boolean doIt, Material blockBelow, DecorateBiomeEvent event){
|
||||
if(doIt){
|
||||
for(int i = 0; i < amount; i++){
|
||||
if(new Random().nextInt(100) == 0){
|
||||
|
@ -50,21 +51,11 @@ public class WorldDecorationEvent{
|
|||
int genY = event.world.getTopSolidOrLiquidBlock(genX, genZ)-1;
|
||||
|
||||
if(event.world.getBlock(genX, genY, genZ).getMaterial() == blockBelow){
|
||||
event.world.setBlock(genX, genY+1, genZ, plant, event.rand.nextInt(8), 2);
|
||||
event.world.setBlock(genX, genY+1, genZ, plant, meta, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ArrayList<Material> getMaterialsAround(World world, int x, int y, int z){
|
||||
ArrayList<Material> blocks = new ArrayList<Material>();
|
||||
blocks.add(world.getBlock(x+1, y, z).getMaterial());
|
||||
blocks.add(world.getBlock(x-1, y, z).getMaterial());
|
||||
blocks.add(world.getBlock(x, y, z+1).getMaterial());
|
||||
blocks.add(world.getBlock(x, y, z-1).getMaterial());
|
||||
|
||||
return blocks;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,31 +13,34 @@ import net.minecraft.util.WeightedRandomChestContent;
|
|||
import net.minecraft.world.gen.structure.MapGenStructureIO;
|
||||
import net.minecraftforge.common.ChestGenHooks;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class InitVillager{
|
||||
|
||||
public static ChestGenHooks jamHouseChest;
|
||||
public static final String JAM_HOUSE_CHEST_NAME = ModUtil.MOD_ID_LOWER+".jamHouseChest";
|
||||
|
||||
public static void init(){
|
||||
Util.logInfo("Initializing Village Addons...");
|
||||
|
||||
if(ConfigBoolValues.JAM_VILLAGER_EXISTS.isEnabled()){
|
||||
initJamVillagePart();
|
||||
}
|
||||
}
|
||||
|
||||
private static void initJamVillagePart(){
|
||||
int jamID = ConfigIntValues.JAM_VILLAGER_ID.getValue();
|
||||
VillagerRegistry.instance().registerVillagerId(jamID);
|
||||
VillagerRegistry.instance().registerVillageTradeHandler(jamID, new JamVillagerTradeHandler());
|
||||
|
||||
jamHouseChest = new ChestGenHooks("JamHouse", new WeightedRandomChestContent[0], 5, 20);
|
||||
ChestGenHooks jamHouseChest = ChestGenHooks.getInfo(JAM_HOUSE_CHEST_NAME);
|
||||
jamHouseChest.setMin(5);
|
||||
jamHouseChest.setMax(20);
|
||||
for(int i = 0; i < TheJams.values().length; i++){
|
||||
jamHouseChest.addItem(new WeightedRandomChestContent(new ItemStack(InitItems.itemJams, new Random().nextInt(5)+1, i), 1, 1, 15));
|
||||
ChestGenHooks.addItem(JAM_HOUSE_CHEST_NAME, new WeightedRandomChestContent(new ItemStack(InitItems.itemJams, 1, i), 1, 1, 10));
|
||||
}
|
||||
jamHouseChest.addItem(new WeightedRandomChestContent(new ItemStack(Items.glass_bottle, new Random().nextInt(5)+1), 1, 1, 15));
|
||||
jamHouseChest.addItem(new WeightedRandomChestContent(new ItemStack(Items.potionitem, new Random().nextInt(5)+1), 1, 1, 15));
|
||||
ChestGenHooks.addItem(JAM_HOUSE_CHEST_NAME, new WeightedRandomChestContent(new ItemStack(Items.glass_bottle), 1, 2, 30));
|
||||
ChestGenHooks.addItem(JAM_HOUSE_CHEST_NAME, new WeightedRandomChestContent(new ItemStack(Items.potionitem), 1, 1, 20));
|
||||
|
||||
VillagerRegistry.instance().registerVillageCreationHandler(new VillageJamHouseHandler());
|
||||
MapGenStructureIO.func_143031_a(VillageComponentJamHouse.class, ModUtil.MOD_ID_LOWER + ":jamHouseStructure");
|
||||
}
|
||||
MapGenStructureIO.func_143031_a(VillageComponentJamHouse.class, ModUtil.MOD_ID_LOWER+":jamHouseStructure");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import net.minecraft.world.World;
|
|||
import net.minecraft.world.gen.structure.StructureBoundingBox;
|
||||
import net.minecraft.world.gen.structure.StructureComponent;
|
||||
import net.minecraft.world.gen.structure.StructureVillagePieces;
|
||||
import net.minecraftforge.common.ChestGenHooks;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
@ -49,8 +50,8 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{
|
|||
|
||||
for (int i = 0; i < xSize; i++){
|
||||
for(int j = 0; j < zSize; j++){
|
||||
this.clearCurrentPositionBlocksUpwards(world, j, ySize, i, sbb);
|
||||
this.func_151554_b(world, Blocks.cobblestone, 0, j, 0, i, sbb);
|
||||
this.clearCurrentPositionBlocksUpwards(world, i, ySize, j, sbb);
|
||||
this.func_151554_b(world, Blocks.cobblestone, 0, i, -1, j, sbb);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -163,12 +164,9 @@ public class VillageComponentJamHouse extends StructureVillagePieces.House1{
|
|||
|
||||
//Loot Chest
|
||||
this.placeBlockAtCurrentPosition(world, Blocks.chest, 0, 8, 1, 6, sbb);
|
||||
int posX = this.getXWithOffset(8, 6);
|
||||
int posY = this.getYWithOffset(1);
|
||||
int posZ = this.getZWithOffset(8, 6);
|
||||
TileEntity chest = world.getTileEntity(posX, posY, posZ);
|
||||
TileEntity chest = world.getTileEntity(this.getXWithOffset(8, 6), this.getYWithOffset(1), this.getZWithOffset(8, 6));
|
||||
if(chest != null && chest instanceof TileEntityChest){
|
||||
WeightedRandomChestContent.generateChestContents(rand, InitVillager.jamHouseChest.getItems(rand), (TileEntityChest)chest, InitVillager.jamHouseChest.getCount(rand));
|
||||
WeightedRandomChestContent.generateChestContents(rand, ChestGenHooks.getItems(InitVillager.JAM_HOUSE_CHEST_NAME, rand), (TileEntityChest)chest, ChestGenHooks.getCount(InitVillager.JAM_HOUSE_CHEST_NAME, rand));
|
||||
}
|
||||
|
||||
//Torches
|
||||
|
|
|
@ -15,6 +15,9 @@ import net.minecraft.inventory.Container;
|
|||
import net.minecraft.inventory.ICrafting;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
@InventoryContainer
|
||||
public class ContainerCoffeeMachine extends Container{
|
||||
|
@ -24,6 +27,7 @@ public class ContainerCoffeeMachine extends Container{
|
|||
private int lastCoffeeAmount;
|
||||
private int lastEnergyAmount;
|
||||
private int lastBrewTime;
|
||||
private int lastWaterAmount;
|
||||
|
||||
public ContainerCoffeeMachine(InventoryPlayer inventory, TileEntityBase tile){
|
||||
this.machine = (TileEntityCoffeeMachine)tile;
|
||||
|
@ -38,6 +42,9 @@ public class ContainerCoffeeMachine extends Container{
|
|||
}
|
||||
}
|
||||
|
||||
this.addSlotToContainer(new Slot(machine, TileEntityCoffeeMachine.SLOT_WATER_INPUT, 26, 73));
|
||||
this.addSlotToContainer(new SlotOutput(machine, TileEntityCoffeeMachine.SLOT_WATER_OUTPUT, 45, 73));
|
||||
|
||||
for (int i = 0; i < 3; i++){
|
||||
for (int j = 0; j < 9; j++){
|
||||
this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18));
|
||||
|
@ -54,6 +61,7 @@ public class ContainerCoffeeMachine extends Container{
|
|||
iCraft.sendProgressBarUpdate(this, 0, this.machine.storage.getEnergyStored());
|
||||
iCraft.sendProgressBarUpdate(this, 1, this.machine.coffeeCacheAmount);
|
||||
iCraft.sendProgressBarUpdate(this, 2, this.machine.brewTime);
|
||||
iCraft.sendProgressBarUpdate(this, 3, this.machine.tank.getFluidAmount());
|
||||
|
||||
}
|
||||
|
||||
|
@ -66,11 +74,13 @@ public class ContainerCoffeeMachine extends Container{
|
|||
if(this.lastEnergyAmount != this.machine.storage.getEnergyStored()) iCraft.sendProgressBarUpdate(this, 0, this.machine.storage.getEnergyStored());
|
||||
if(this.lastCoffeeAmount != this.machine.coffeeCacheAmount) iCraft.sendProgressBarUpdate(this, 1, this.machine.coffeeCacheAmount);
|
||||
if(this.lastBrewTime != this.machine.brewTime) iCraft.sendProgressBarUpdate(this, 2, this.machine.brewTime);
|
||||
if(this.lastWaterAmount != this.machine.tank.getFluidAmount()) iCraft.sendProgressBarUpdate(this, 3, this.machine.tank.getFluidAmount());
|
||||
}
|
||||
|
||||
this.lastEnergyAmount = this.machine.storage.getEnergyStored();
|
||||
this.lastCoffeeAmount = this.machine.coffeeCacheAmount;
|
||||
this.lastBrewTime = this.machine.brewTime;
|
||||
this.lastWaterAmount = this.machine.tank.getFluidAmount();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -79,6 +89,7 @@ public class ContainerCoffeeMachine extends Container{
|
|||
if(par1 == 0) this.machine.storage.setEnergyStored(par2);
|
||||
if(par1 == 1) this.machine.coffeeCacheAmount = par2;
|
||||
if(par1 == 2) this.machine.brewTime = par2;
|
||||
if(par1 == 3) this.machine.tank.setFluid(new FluidStack(FluidRegistry.WATER, par2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -88,7 +99,7 @@ public class ContainerCoffeeMachine extends Container{
|
|||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int slot){
|
||||
final int inventoryStart = 11;
|
||||
final int inventoryStart = 13;
|
||||
final int inventoryEnd = inventoryStart+26;
|
||||
final int hotbarStart = inventoryEnd+1;
|
||||
final int hotbarEnd = hotbarStart+8;
|
||||
|
@ -109,6 +120,9 @@ public class ContainerCoffeeMachine extends Container{
|
|||
if(ItemCoffee.getIngredientFromStack(newStack) != null){
|
||||
this.mergeItemStack(newStack, 3, 10, false);
|
||||
}
|
||||
if(FluidContainerRegistry.containsFluid(newStack, new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME))){
|
||||
this.mergeItemStack(newStack, TileEntityCoffeeMachine.SLOT_WATER_INPUT, TileEntityCoffeeMachine.SLOT_WATER_INPUT+1, false);
|
||||
}
|
||||
}
|
||||
|
||||
if(slot <= hotbarEnd && slot >= hotbarStart){
|
||||
|
|
|
@ -3,7 +3,7 @@ package ellpeck.actuallyadditions.inventory;
|
|||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import ellpeck.actuallyadditions.inventory.slot.SlotOutput;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipes;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipeManualRegistry;
|
||||
import ellpeck.actuallyadditions.tile.TileEntityBase;
|
||||
import ellpeck.actuallyadditions.tile.TileEntityGrinder;
|
||||
import invtweaks.api.container.InventoryContainer;
|
||||
|
@ -104,7 +104,7 @@ public class ContainerGrinder extends Container{
|
|||
|
||||
if(currentStack.getItem() != null){
|
||||
if(slot <= hotbarEnd && slot >= inventoryStart){
|
||||
if(GrinderRecipes.getOutput(currentStack, false) != null){
|
||||
if(GrinderRecipeManualRegistry.getOutput(currentStack, false) != null){
|
||||
this.mergeItemStack(newStack, TileEntityGrinder.SLOT_INPUT_1, TileEntityGrinder.SLOT_INPUT_1+1, false);
|
||||
if(this.isDouble) this.mergeItemStack(newStack, TileEntityGrinder.SLOT_INPUT_2, TileEntityGrinder.SLOT_INPUT_2+1, false);
|
||||
}
|
||||
|
|
|
@ -20,14 +20,15 @@ public class ContainerInputter extends Container{
|
|||
private TileEntityInputter tileInputter;
|
||||
|
||||
private int lastSideToPut;
|
||||
private int lastSlotToPut;
|
||||
private int lastSideToPull;
|
||||
private int lastSlotToPull;
|
||||
private int lastPlaceToPutSlotAmount;
|
||||
private int lastPlaceToPullSlotAmount;
|
||||
private int lastIsPullWhitelist;
|
||||
private int lastIsPutWhitelist;
|
||||
|
||||
private int lastSlotPutStart;
|
||||
private int lastSlotPutEnd;
|
||||
private int lastSlotPullStart;
|
||||
private int lastSlotPullEnd;
|
||||
|
||||
private boolean isAdvanced;
|
||||
|
||||
public ContainerInputter(InventoryPlayer inventory, TileEntityBase tile, boolean isAdvanced){
|
||||
|
@ -48,11 +49,11 @@ public class ContainerInputter extends Container{
|
|||
|
||||
for(int i = 0; i < 3; i++){
|
||||
for (int j = 0; j < 9; j++){
|
||||
this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18 + (isAdvanced ? 12+GuiInputter.OFFSET_ADVANCED : 0)));
|
||||
this.addSlotToContainer(new Slot(inventory, j + i * 9 + 9, 8 + j * 18, 97 + i * 18 + (isAdvanced ? GuiInputter.OFFSET_ADVANCED : 0)));
|
||||
}
|
||||
}
|
||||
for(int i = 0; i < 9; i++){
|
||||
this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 155 + (isAdvanced ? 12+GuiInputter.OFFSET_ADVANCED : 0)));
|
||||
this.addSlotToContainer(new Slot(inventory, i, 8 + i * 18, 155 + (isAdvanced ? GuiInputter.OFFSET_ADVANCED : 0)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,13 +61,14 @@ public class ContainerInputter extends Container{
|
|||
public void addCraftingToCrafters(ICrafting iCraft){
|
||||
super.addCraftingToCrafters(iCraft);
|
||||
iCraft.sendProgressBarUpdate(this, 0, this.tileInputter.sideToPut);
|
||||
iCraft.sendProgressBarUpdate(this, 1, this.tileInputter.slotToPut);
|
||||
iCraft.sendProgressBarUpdate(this, 2, this.tileInputter.sideToPull);
|
||||
iCraft.sendProgressBarUpdate(this, 3, this.tileInputter.slotToPull);
|
||||
iCraft.sendProgressBarUpdate(this, 4, this.tileInputter.placeToPullSlotAmount);
|
||||
iCraft.sendProgressBarUpdate(this, 5, this.tileInputter.placeToPutSlotAmount);
|
||||
iCraft.sendProgressBarUpdate(this, 6, this.tileInputter.isPullWhitelist ? 1 : 0);
|
||||
iCraft.sendProgressBarUpdate(this, 7, this.tileInputter.isPutWhitelist ? 1 : 0);
|
||||
iCraft.sendProgressBarUpdate(this, 1, this.tileInputter.sideToPull);
|
||||
iCraft.sendProgressBarUpdate(this, 2, this.tileInputter.isPullWhitelist ? 1 : 0);
|
||||
iCraft.sendProgressBarUpdate(this, 3, this.tileInputter.isPutWhitelist ? 1 : 0);
|
||||
|
||||
iCraft.sendProgressBarUpdate(this, 4, this.tileInputter.slotToPutStart);
|
||||
iCraft.sendProgressBarUpdate(this, 5, this.tileInputter.slotToPutEnd);
|
||||
iCraft.sendProgressBarUpdate(this, 6, this.tileInputter.slotToPullStart);
|
||||
iCraft.sendProgressBarUpdate(this, 7, this.tileInputter.slotToPullEnd);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -75,37 +77,39 @@ public class ContainerInputter extends Container{
|
|||
for(Object crafter : this.crafters){
|
||||
ICrafting iCraft = (ICrafting)crafter;
|
||||
if(this.lastSideToPut != this.tileInputter.sideToPut) iCraft.sendProgressBarUpdate(this, 0, this.tileInputter.sideToPut);
|
||||
if(this.lastSlotToPut != this.tileInputter.slotToPut) iCraft.sendProgressBarUpdate(this, 1, this.tileInputter.slotToPut);
|
||||
if(this.lastSideToPull != this.tileInputter.sideToPull) iCraft.sendProgressBarUpdate(this, 2, this.tileInputter.sideToPull);
|
||||
if(this.lastSlotToPull != this.tileInputter.slotToPull) iCraft.sendProgressBarUpdate(this, 3, this.tileInputter.slotToPull);
|
||||
if(this.lastPlaceToPullSlotAmount != this.tileInputter.placeToPullSlotAmount) iCraft.sendProgressBarUpdate(this, 4, this.tileInputter.placeToPullSlotAmount);
|
||||
if(this.lastPlaceToPutSlotAmount != this.tileInputter.placeToPutSlotAmount) iCraft.sendProgressBarUpdate(this, 5, this.tileInputter.placeToPutSlotAmount);
|
||||
if(this.lastIsPullWhitelist != (this.tileInputter.isPullWhitelist ? 1 : 0)) iCraft.sendProgressBarUpdate(this, 6, this.tileInputter.isPullWhitelist ? 1 : 0);
|
||||
if(this.lastIsPutWhitelist != (this.tileInputter.isPutWhitelist ? 1 : 0)) iCraft.sendProgressBarUpdate(this, 7, this.tileInputter.isPutWhitelist ? 1 : 0);
|
||||
if(this.lastSideToPull != this.tileInputter.sideToPull) iCraft.sendProgressBarUpdate(this, 1, this.tileInputter.sideToPull);
|
||||
if(this.lastIsPullWhitelist != (this.tileInputter.isPullWhitelist ? 1 : 0)) iCraft.sendProgressBarUpdate(this, 2, this.tileInputter.isPullWhitelist ? 1 : 0);
|
||||
if(this.lastIsPutWhitelist != (this.tileInputter.isPutWhitelist ? 1 : 0)) iCraft.sendProgressBarUpdate(this, 3, this.tileInputter.isPutWhitelist ? 1 : 0);
|
||||
|
||||
if(this.lastSlotPutStart != this.tileInputter.slotToPutStart) iCraft.sendProgressBarUpdate(this, 4, this.tileInputter.slotToPutStart);
|
||||
if(this.lastSlotPutEnd != this.tileInputter.slotToPutEnd) iCraft.sendProgressBarUpdate(this, 5, this.tileInputter.slotToPutEnd);
|
||||
if(this.lastSlotPullStart != this.tileInputter.slotToPullStart) iCraft.sendProgressBarUpdate(this, 6, this.tileInputter.slotToPullStart);
|
||||
if(this.lastSlotPullEnd != this.tileInputter.slotToPullEnd) iCraft.sendProgressBarUpdate(this, 7, this.tileInputter.slotToPullEnd);
|
||||
}
|
||||
|
||||
this.lastSideToPut = this.tileInputter.sideToPut;
|
||||
this.lastSlotToPut = this.tileInputter.slotToPut;
|
||||
this.lastSideToPull = this.tileInputter.sideToPull;
|
||||
this.lastSlotToPull = this.tileInputter.slotToPull;
|
||||
this.lastPlaceToPullSlotAmount = this.tileInputter.placeToPullSlotAmount;
|
||||
this.lastPlaceToPutSlotAmount = this.tileInputter.placeToPutSlotAmount;
|
||||
this.lastIsPutWhitelist = this.tileInputter.isPutWhitelist ? 1 : 0;
|
||||
this.lastIsPullWhitelist = this.tileInputter.isPullWhitelist ? 1 : 0;
|
||||
|
||||
this.lastSlotPutStart = this.tileInputter.slotToPutStart;
|
||||
this.lastSlotPutEnd = this.tileInputter.slotToPutEnd;
|
||||
this.lastSlotPullStart = this.tileInputter.slotToPullStart;
|
||||
this.lastSlotPullEnd = this.tileInputter.slotToPullEnd;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void updateProgressBar(int par1, int par2){
|
||||
if(par1 == 0) this.tileInputter.sideToPut = par2;
|
||||
if(par1 == 1) this.tileInputter.slotToPut = par2;
|
||||
if(par1 == 2) this.tileInputter.sideToPull = par2;
|
||||
if(par1 == 3) this.tileInputter.slotToPull = par2;
|
||||
if(par1 == 4) this.tileInputter.placeToPullSlotAmount = par2;
|
||||
if(par1 == 5) this.tileInputter.placeToPutSlotAmount = par2;
|
||||
if(par1 == 6) this.tileInputter.isPullWhitelist = par2 == 1;
|
||||
if(par1 == 7) this.tileInputter.isPutWhitelist = par2 == 1;
|
||||
if(par1 == 1) this.tileInputter.sideToPull = par2;
|
||||
if(par1 == 2) this.tileInputter.isPullWhitelist = par2 == 1;
|
||||
if(par1 == 3) this.tileInputter.isPutWhitelist = par2 == 1;
|
||||
|
||||
if(par1 == 4) this.tileInputter.slotToPutStart = par2;
|
||||
if(par1 == 5) this.tileInputter.slotToPutEnd = par2;
|
||||
if(par1 == 6) this.tileInputter.slotToPullStart = par2;
|
||||
if(par1 == 7) this.tileInputter.slotToPullEnd = par2;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -115,10 +119,10 @@ public class ContainerInputter extends Container{
|
|||
|
||||
@Override
|
||||
public ItemStack transferStackInSlot(EntityPlayer player, int slot){
|
||||
final int inventoryStart = this.isAdvanced ? 25 : 1;
|
||||
final int inventoryEnd = inventoryStart+26;
|
||||
final int hotbarStart = inventoryEnd+1;
|
||||
final int hotbarEnd = hotbarStart+8;
|
||||
final int inventory = this.isAdvanced ? 25 : 1;
|
||||
final int inventoryEnd = inventory+26;
|
||||
final int hotbar = inventoryEnd+1;
|
||||
final int hotbarEnd = hotbar+8;
|
||||
|
||||
Slot theSlot = (Slot)this.inventorySlots.get(slot);
|
||||
if(theSlot.getHasStack()){
|
||||
|
@ -126,20 +130,20 @@ public class ContainerInputter extends Container{
|
|||
ItemStack newStack = currentStack.copy();
|
||||
|
||||
if(currentStack.getItem() != null){
|
||||
if(slot <= hotbarEnd && slot >= inventoryStart){
|
||||
if(slot <= hotbarEnd && slot >= inventory){
|
||||
this.mergeItemStack(newStack, 0, 1, false);
|
||||
}
|
||||
|
||||
if(slot <= hotbarEnd && slot >= hotbarStart){
|
||||
this.mergeItemStack(newStack, inventoryStart, inventoryEnd, false);
|
||||
if(slot <= hotbarEnd && slot >= hotbar){
|
||||
this.mergeItemStack(newStack, inventory, inventoryEnd, false);
|
||||
}
|
||||
|
||||
else if(slot <= inventoryEnd && slot >= inventoryStart){
|
||||
this.mergeItemStack(newStack, hotbarStart, hotbarEnd, false);
|
||||
else if(slot <= inventoryEnd && slot >= inventory){
|
||||
this.mergeItemStack(newStack, hotbar, hotbarEnd, false);
|
||||
}
|
||||
|
||||
else if(slot < inventoryStart){
|
||||
this.mergeItemStack(newStack, inventoryStart, hotbarEnd, false);
|
||||
else if(slot < inventory){
|
||||
this.mergeItemStack(newStack, inventory, hotbarEnd, false);
|
||||
}
|
||||
|
||||
if(newStack.stackSize == 0) theSlot.putStack(null);
|
||||
|
|
|
@ -17,6 +17,7 @@ import net.minecraft.util.ResourceLocation;
|
|||
import net.minecraft.util.StatCollector;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import java.util.Collections;
|
||||
|
@ -49,7 +50,7 @@ public class GuiCoffeeMachine extends GuiContainer{
|
|||
public void initGui(){
|
||||
super.initGui();
|
||||
|
||||
GuiButton buttonOkay = new GuiButton(0, guiLeft+60, guiTop+11, 58, 20, "OK");
|
||||
GuiButton buttonOkay = new GuiButton(0, guiLeft+60, guiTop+11, 58, 20, StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.ok"));
|
||||
this.buttonList.add(buttonOkay);
|
||||
}
|
||||
|
||||
|
@ -75,7 +76,11 @@ public class GuiCoffeeMachine extends GuiContainer{
|
|||
|
||||
if(this.machine.getEnergyStored(ForgeDirection.UNKNOWN) > 0){
|
||||
int i = this.machine.getEnergyScaled(83);
|
||||
drawTexturedModalRect(this.guiLeft+17, this.guiTop+89-i, 176, 0, 16, i);
|
||||
drawTexturedModalRect(this.guiLeft+17, this.guiTop+89-i, 176, 0, 6, i);
|
||||
}
|
||||
if(this.machine.tank.getFluidAmount() > 0){
|
||||
int i = this.machine.getWaterScaled(64);
|
||||
drawTexturedModalRect(this.guiLeft+27, this.guiTop+70-i, 182, 0, 6, i);
|
||||
}
|
||||
|
||||
if(this.machine.coffeeCacheAmount > 0){
|
||||
|
@ -97,9 +102,13 @@ public class GuiCoffeeMachine extends GuiContainer{
|
|||
super.drawScreen(x, y, f);
|
||||
|
||||
String text1 = this.machine.getEnergyStored(ForgeDirection.UNKNOWN) + "/" + this.machine.getMaxEnergyStored(ForgeDirection.UNKNOWN) + " RF";
|
||||
if(x >= guiLeft+16 && y >= guiTop+5 && x <= guiLeft+33 && y <= guiTop+89){
|
||||
if(x >= guiLeft+16 && y >= guiTop+5 && x <= guiLeft+23 && y <= guiTop+89){
|
||||
this.func_146283_a(Collections.singletonList(text1), x, y);
|
||||
}
|
||||
String text3 = this.machine.tank.getFluidAmount() + "/" + this.machine.tank.getCapacity() + " mB "+StatCollector.translateToLocal(FluidRegistry.WATER.getUnlocalizedName());
|
||||
if(x >= guiLeft+27 && y >= guiTop+5 && x <= guiLeft+33 && y <= guiTop+70){
|
||||
this.func_146283_a(Collections.singletonList(text3), x, y);
|
||||
}
|
||||
|
||||
String text2 = this.machine.coffeeCacheAmount + "/" + this.machine.coffeeCacheMaxAmount+" "+StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.coffee");
|
||||
if(x >= guiLeft+40 && y >= guiTop+25 && x <= guiLeft+49 && y <= guiTop+56){
|
||||
|
|
|
@ -19,7 +19,7 @@ import java.util.Arrays;
|
|||
public class GuiFeeder extends GuiContainer{
|
||||
|
||||
private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiFeeder");
|
||||
private TileEntityFeeder tileFeeder;
|
||||
public TileEntityFeeder tileFeeder;
|
||||
|
||||
public int loveCounter;
|
||||
|
||||
|
|
|
@ -5,20 +5,22 @@ import cpw.mods.fml.relauncher.SideOnly;
|
|||
import ellpeck.actuallyadditions.inventory.ContainerInputter;
|
||||
import ellpeck.actuallyadditions.network.PacketHandler;
|
||||
import ellpeck.actuallyadditions.network.gui.PacketGuiButton;
|
||||
import ellpeck.actuallyadditions.network.gui.PacketGuiNumber;
|
||||
import ellpeck.actuallyadditions.tile.TileEntityBase;
|
||||
import ellpeck.actuallyadditions.tile.TileEntityInputter;
|
||||
import ellpeck.actuallyadditions.util.AssetUtil;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import ellpeck.actuallyadditions.util.StringUtil;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiTextField;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.StatCollector;
|
||||
import net.minecraft.world.World;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import java.util.Collections;
|
||||
|
@ -29,33 +31,34 @@ public class GuiInputter extends GuiContainer{
|
|||
private static final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiInputter");
|
||||
private static final ResourceLocation resLocAdvanced = AssetUtil.getGuiLocation("guiInputterAdvanced");
|
||||
|
||||
private TileEntityInputter tileInputter;
|
||||
public TileEntityInputter tileInputter;
|
||||
|
||||
private int x;
|
||||
private int y;
|
||||
private int z;
|
||||
private World world;
|
||||
|
||||
private SmallerButton buttonSlotPutP;
|
||||
private SmallerButton buttonSlotPullP;
|
||||
private SmallerButton buttonSlotPutM;
|
||||
private SmallerButton buttonSlotPullM;
|
||||
|
||||
private SmallerButton whitelistPut;
|
||||
private SmallerButton whitelistPull;
|
||||
|
||||
private GuiTextField fieldPutStart;
|
||||
private GuiTextField fieldPutEnd;
|
||||
|
||||
private GuiTextField fieldPullStart;
|
||||
private GuiTextField fieldPullEnd;
|
||||
|
||||
private boolean isAdvanced;
|
||||
|
||||
public static final int OFFSET_ADVANCED = 35;
|
||||
public static final int OFFSET_ADVANCED = 12+36;
|
||||
|
||||
public static final String[] sideString = new String[]{
|
||||
StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.disabled"),
|
||||
StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.up"),
|
||||
StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.down"),
|
||||
StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.north"),
|
||||
StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.east"),
|
||||
StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.south"),
|
||||
StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.west")};
|
||||
StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.disabled"),
|
||||
StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.up"),
|
||||
StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.down"),
|
||||
StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.north"),
|
||||
StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.east"),
|
||||
StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.south"),
|
||||
StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.west")};
|
||||
|
||||
public GuiInputter(InventoryPlayer inventory, TileEntityBase tile, int x, int y, int z, World world, boolean isAdvanced){
|
||||
super(new ContainerInputter(inventory, tile, isAdvanced));
|
||||
|
@ -65,7 +68,7 @@ public class GuiInputter extends GuiContainer{
|
|||
this.z = z;
|
||||
this.world = world;
|
||||
this.xSize = 176;
|
||||
this.ySize = 93+86 + (isAdvanced ? 12+OFFSET_ADVANCED : 0);
|
||||
this.ySize = 93+86+(isAdvanced ? OFFSET_ADVANCED : 0);
|
||||
this.isAdvanced = isAdvanced;
|
||||
}
|
||||
|
||||
|
@ -74,36 +77,105 @@ public class GuiInputter extends GuiContainer{
|
|||
AssetUtil.displayNameString(this.fontRendererObj, xSize, -10, this.tileInputter.getInventoryName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateScreen(){
|
||||
super.updateScreen();
|
||||
|
||||
this.fieldPutStart.updateCursorCounter();
|
||||
this.fieldPutEnd.updateCursorCounter();
|
||||
this.fieldPullStart.updateCursorCounter();
|
||||
this.fieldPullEnd.updateCursorCounter();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void initGui(){
|
||||
super.initGui();
|
||||
|
||||
SmallerButton buttonSidePutP = new SmallerButton(0, guiLeft + 155, guiTop + 43 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), ">");
|
||||
SmallerButton buttonSidePutM = new SmallerButton(1, guiLeft + 90, guiTop + 43 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), "<");
|
||||
buttonSlotPutP = new SmallerButton(2, guiLeft+ 155, guiTop + 64 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), "+");
|
||||
buttonSlotPutM = new SmallerButton(3, guiLeft + 90, guiTop + 64 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), "-");
|
||||
this.fieldPullStart = new GuiTextField(this.fontRendererObj, guiLeft+13, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0), 27, 8);
|
||||
this.fieldPullStart.setMaxStringLength(4);
|
||||
this.fieldPullStart.setEnableBackgroundDrawing(false);
|
||||
this.fieldPullEnd = new GuiTextField(this.fontRendererObj, guiLeft+50, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0), 27, 8);
|
||||
this.fieldPullEnd.setMaxStringLength(4);
|
||||
this.fieldPullEnd.setEnableBackgroundDrawing(false);
|
||||
|
||||
SmallerButton buttonSidePullP = new SmallerButton(4, guiLeft + 70, guiTop + 43 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), ">");
|
||||
SmallerButton buttonSidePullM = new SmallerButton(5, guiLeft + 5, guiTop + 43 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), "<");
|
||||
buttonSlotPullP = new SmallerButton(6, guiLeft + 70, guiTop + 64 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), "+");
|
||||
buttonSlotPullM = new SmallerButton(7, guiLeft + 5, guiTop + 64 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), "-");
|
||||
this.fieldPutStart = new GuiTextField(this.fontRendererObj, guiLeft+98, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0), 27, 8);
|
||||
this.fieldPutStart.setMaxStringLength(4);
|
||||
this.fieldPutStart.setEnableBackgroundDrawing(false);
|
||||
this.fieldPutEnd = new GuiTextField(this.fontRendererObj, guiLeft+135, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0), 27, 8);
|
||||
this.fieldPutEnd.setMaxStringLength(4);
|
||||
this.fieldPutEnd.setEnableBackgroundDrawing(false);
|
||||
|
||||
SmallerButton buttonSidePutP = new SmallerButton(0, guiLeft+155, guiTop+43+(isAdvanced ? OFFSET_ADVANCED : 0), ">");
|
||||
SmallerButton buttonSidePutM = new SmallerButton(1, guiLeft+90, guiTop+43+(isAdvanced ? OFFSET_ADVANCED : 0), "<");
|
||||
|
||||
SmallerButton buttonSidePullP = new SmallerButton(2, guiLeft+70, guiTop+43+(isAdvanced ? OFFSET_ADVANCED : 0), ">");
|
||||
SmallerButton buttonSidePullM = new SmallerButton(3, guiLeft+5, guiTop+43+(isAdvanced ? OFFSET_ADVANCED : 0), "<");
|
||||
|
||||
whitelistPull = new SmallerButton(TileEntityInputter.WHITELIST_PULL_BUTTON_ID, guiLeft+3, guiTop+16, "");
|
||||
whitelistPut = new SmallerButton(TileEntityInputter.WHITELIST_PUT_BUTTON_ID, guiLeft+157, guiTop+16, "");
|
||||
|
||||
this.buttonList.add(buttonSidePutP);
|
||||
this.buttonList.add(buttonSlotPutP);
|
||||
this.buttonList.add(buttonSidePullP);
|
||||
this.buttonList.add(buttonSlotPullP);
|
||||
this.buttonList.add(buttonSidePutM);
|
||||
this.buttonList.add(buttonSlotPutM);
|
||||
this.buttonList.add(buttonSidePullM);
|
||||
this.buttonList.add(buttonSlotPullM);
|
||||
if(this.isAdvanced){
|
||||
this.buttonList.add(whitelistPut);
|
||||
this.buttonList.add(whitelistPull);
|
||||
}
|
||||
|
||||
this.buttonList.add(new TinyButton(TileEntityInputter.OKAY_BUTTON_ID, guiLeft+84, guiTop+80+(isAdvanced ? OFFSET_ADVANCED : 0)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseClicked(int par1, int par2, int par3){
|
||||
this.fieldPutStart.mouseClicked(par1, par2, par3);
|
||||
this.fieldPutEnd.mouseClicked(par1, par2, par3);
|
||||
this.fieldPullStart.mouseClicked(par1, par2, par3);
|
||||
this.fieldPullEnd.mouseClicked(par1, par2, par3);
|
||||
|
||||
super.mouseClicked(par1, par2, par3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(char theChar, int key){
|
||||
if((!fieldPutStart.isFocused() && !fieldPutEnd.isFocused() && !fieldPullStart.isFocused() && !fieldPullEnd.isFocused())){
|
||||
super.keyTyped(theChar, key);
|
||||
}
|
||||
|
||||
if(key == Keyboard.KEY_RETURN || key == Keyboard.KEY_NUMPADENTER){
|
||||
if(this.fieldPutStart.isFocused()) this.setVariable(this.fieldPutStart, 0);
|
||||
if(this.fieldPutEnd.isFocused()) this.setVariable(this.fieldPutEnd, 1);
|
||||
if(this.fieldPullStart.isFocused()) this.setVariable(this.fieldPullStart, 2);
|
||||
if(this.fieldPullEnd.isFocused()) this.setVariable(this.fieldPullEnd, 3);
|
||||
}
|
||||
|
||||
if(Character.isDigit(theChar) || key == Keyboard.KEY_BACK || key == Keyboard.KEY_DELETE || key == Keyboard.KEY_LEFT || key == Keyboard.KEY_RIGHT){
|
||||
this.fieldPutStart.textboxKeyTyped(theChar, key);
|
||||
this.fieldPutEnd.textboxKeyTyped(theChar, key);
|
||||
this.fieldPullStart.textboxKeyTyped(theChar, key);
|
||||
this.fieldPullEnd.textboxKeyTyped(theChar, key);
|
||||
}
|
||||
}
|
||||
|
||||
public void setVariable(GuiTextField field, int sendInt){
|
||||
if(!field.getText().isEmpty()){
|
||||
this.sendPacket(parse(field.getText()), sendInt);
|
||||
field.setText("");
|
||||
}
|
||||
}
|
||||
|
||||
private int parse(String theInt){
|
||||
try{
|
||||
return Integer.parseInt(theInt);
|
||||
}
|
||||
catch(Exception e){
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
private void sendPacket(int text, int textID){
|
||||
PacketHandler.theNetwork.sendToServer(new PacketGuiNumber(x, y, z, world, text, textID, Minecraft.getMinecraft().thePlayer));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -111,31 +183,32 @@ public class GuiInputter extends GuiContainer{
|
|||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
|
||||
this.mc.getTextureManager().bindTexture(AssetUtil.GUI_INVENTORY_LOCATION);
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop+93 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), 0, 0, 176, 86);
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop+93+(isAdvanced ? OFFSET_ADVANCED : 0), 0, 0, 176, 86);
|
||||
|
||||
this.mc.getTextureManager().bindTexture(this.isAdvanced ? resLocAdvanced : resLoc);
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93 + (isAdvanced ? 12+OFFSET_ADVANCED : 0));
|
||||
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93+(isAdvanced ? OFFSET_ADVANCED : 0));
|
||||
|
||||
this.fontRendererObj.drawString(StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.pull"), guiLeft + 22 + 3, guiTop + 32 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), 4210752);
|
||||
this.fontRendererObj.drawString(StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.put"), guiLeft + 107 + 3, guiTop + 32 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), 4210752);
|
||||
this.fontRendererObj.drawString(StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.pull"), guiLeft+22+3, guiTop+32+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT);
|
||||
this.fontRendererObj.drawString(StatCollector.translateToLocal("info."+ModUtil.MOD_ID_LOWER+".gui.put"), guiLeft+107+3, guiTop+32+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT);
|
||||
|
||||
this.fontRendererObj.drawString(sideString[tileInputter.sideToPull+1], guiLeft + 24 + 1, guiTop + 45 + 3 + (isAdvanced ? 12+36 : 0), 4210752);
|
||||
this.fontRendererObj.drawString(StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.slot") + " " + (tileInputter.slotToPull == -1 ? StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.all") : tileInputter.slotToPull).toString(), guiLeft + 24 + 3, guiTop + 66 + 3 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT);
|
||||
this.fontRendererObj.drawString(sideString[tileInputter.sideToPull+1], guiLeft+24+1, guiTop+45+3+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT);
|
||||
this.fontRendererObj.drawString(sideString[tileInputter.sideToPut+1], guiLeft+109+1, guiTop+45+3+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT);
|
||||
|
||||
this.fontRendererObj.drawString(sideString[tileInputter.sideToPut+1], guiLeft + 109 + 1, guiTop + 45 + 3 + (isAdvanced ? 12+36 : 0), 4210752);
|
||||
this.fontRendererObj.drawString(StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.slot") + " " + (tileInputter.slotToPut == -1 ? StatCollector.translateToLocal("info." + ModUtil.MOD_ID_LOWER + ".gui.all") : tileInputter.slotToPut).toString(), guiLeft + 109 + 3, guiTop + 66 + 3 + (isAdvanced ? 12+OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_GRAY_TEXT);
|
||||
this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPutStart), guiLeft+99, guiTop+67+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE);
|
||||
this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPutEnd), guiLeft+136, guiTop+67+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE);
|
||||
this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPullStart), guiLeft+14, guiTop+67+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE);
|
||||
this.fontRendererObj.drawString(Integer.toString(this.tileInputter.slotToPullEnd), guiLeft+51, guiTop+67+(isAdvanced ? OFFSET_ADVANCED : 0), StringUtil.DECIMAL_COLOR_WHITE);
|
||||
|
||||
this.fieldPutStart.drawTextBox();
|
||||
this.fieldPutEnd.drawTextBox();
|
||||
this.fieldPullStart.drawTextBox();
|
||||
this.fieldPullEnd.drawTextBox();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int x, int y, float f){
|
||||
super.drawScreen(x, y, f);
|
||||
|
||||
this.buttonSlotPullP.enabled = this.tileInputter.placeToPullSlotAmount > 0;
|
||||
this.buttonSlotPullM.enabled = this.tileInputter.placeToPullSlotAmount > 0;
|
||||
|
||||
this.buttonSlotPutP.enabled = this.tileInputter.placeToPutSlotAmount > 0;
|
||||
this.buttonSlotPutM.enabled = this.tileInputter.placeToPutSlotAmount > 0;
|
||||
|
||||
this.whitelistPull.displayString = this.tileInputter.isPullWhitelist ? "O" : "X";
|
||||
this.whitelistPut.displayString = this.tileInputter.isPutWhitelist ? "O" : "X";
|
||||
|
||||
|
@ -153,6 +226,13 @@ public class GuiInputter extends GuiContainer{
|
|||
|
||||
@Override
|
||||
public void actionPerformed(GuiButton button){
|
||||
if(button.id == TileEntityInputter.OKAY_BUTTON_ID){
|
||||
this.setVariable(this.fieldPutStart, 0);
|
||||
this.setVariable(this.fieldPutEnd, 1);
|
||||
this.setVariable(this.fieldPullStart, 2);
|
||||
this.setVariable(this.fieldPullEnd, 3);
|
||||
}
|
||||
else
|
||||
PacketHandler.theNetwork.sendToServer(new PacketGuiButton(x, y, z, world, button.id, Minecraft.getMinecraft().thePlayer));
|
||||
}
|
||||
|
||||
|
@ -166,11 +246,10 @@ public class GuiInputter extends GuiContainer{
|
|||
|
||||
@Override
|
||||
public void drawButton(Minecraft mc, int x, int y){
|
||||
if (this.visible){
|
||||
FontRenderer renderer = mc.fontRenderer;
|
||||
if(this.visible){
|
||||
mc.getTextureManager().bindTexture(resLoc);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
this.field_146123_n = x >= this.xPosition && y >= this.yPosition && x < this.xPosition + this.width && y < this.yPosition + this.height;
|
||||
this.field_146123_n = x >= this.xPosition && y >= this.yPosition && x < this.xPosition+this.width && y < this.yPosition+this.height;
|
||||
int k = this.getHoverState(this.field_146123_n);
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
|
||||
|
@ -179,13 +258,36 @@ public class GuiInputter extends GuiContainer{
|
|||
this.mouseDragged(mc, x, y);
|
||||
|
||||
int color = 14737632;
|
||||
if (packedFGColour != 0) color = packedFGColour;
|
||||
else if (!this.enabled) color = 10526880;
|
||||
else if (this.field_146123_n) color = 16777120;
|
||||
if(packedFGColour != 0) color = packedFGColour;
|
||||
else if(!this.enabled) color = 10526880;
|
||||
else if(this.field_146123_n) color = 16777120;
|
||||
|
||||
this.drawCenteredString(renderer, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height-8) / 2, color);
|
||||
this.drawCenteredString(mc.fontRenderer, this.displayString, this.xPosition+this.width/2, this.yPosition+(this.height-8)/2, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class TinyButton extends GuiButton{
|
||||
|
||||
public final ResourceLocation resLoc = AssetUtil.getGuiLocation("guiInputter");
|
||||
|
||||
public TinyButton(int id, int x, int y){
|
||||
super(id, x, y, 8, 8, "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawButton(Minecraft mc, int x, int y){
|
||||
if(this.visible){
|
||||
mc.getTextureManager().bindTexture(resLoc);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
this.field_146123_n = x >= this.xPosition && y >= this.yPosition && x < this.xPosition+this.width && y < this.yPosition+this.height;
|
||||
int k = this.getHoverState(this.field_146123_n);
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
this.drawTexturedModalRect(this.xPosition, this.yPosition, 192, k*8, 8, 8);
|
||||
this.mouseDragged(mc, x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ import ellpeck.actuallyadditions.items.metalists.TheFoods;
|
|||
import ellpeck.actuallyadditions.items.metalists.TheMiscItems;
|
||||
import ellpeck.actuallyadditions.items.tools.*;
|
||||
import ellpeck.actuallyadditions.material.InitItemMaterials;
|
||||
import ellpeck.actuallyadditions.recipe.HairyBallHandler;
|
||||
import ellpeck.actuallyadditions.util.CompatUtil;
|
||||
import ellpeck.actuallyadditions.util.ItemUtil;
|
||||
import ellpeck.actuallyadditions.util.Util;
|
||||
import net.minecraft.init.Blocks;
|
||||
|
@ -13,9 +13,7 @@ import net.minecraft.init.Items;
|
|||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.common.EnumPlantType;
|
||||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||
import powercrystals.minefactoryreloaded.api.FactoryRegistry;
|
||||
|
||||
public class InitItems{
|
||||
|
||||
|
@ -157,26 +155,25 @@ public class InitItems{
|
|||
|
||||
itemHairyBall = new ItemHairyBall();
|
||||
ItemUtil.register(itemHairyBall);
|
||||
HairyBallHandler.init();
|
||||
|
||||
itemCoffeeBean = new ItemCoffeeBean();
|
||||
ItemUtil.register(itemCoffeeBean);
|
||||
|
||||
itemRiceSeed = new ItemSeed("itemRiceSeed", InitBlocks.blockRice, Blocks.water, EnumPlantType.Water, itemFoods, TheFoods.RICE.ordinal());
|
||||
itemRiceSeed = new ItemSeed("itemRiceSeed", InitBlocks.blockRice, itemFoods, TheFoods.RICE.ordinal());
|
||||
ItemUtil.register(itemRiceSeed);
|
||||
FactoryRegistry.sendMessage("registerPlantable", itemRiceSeed);
|
||||
CompatUtil.registerMFRSeed(itemRiceSeed);
|
||||
|
||||
itemCanolaSeed = new ItemSeed("itemCanolaSeed", InitBlocks.blockCanola, Blocks.grass, EnumPlantType.Plains, itemMisc, TheMiscItems.CANOLA.ordinal());
|
||||
itemCanolaSeed = new ItemSeed("itemCanolaSeed", InitBlocks.blockCanola, itemMisc, TheMiscItems.CANOLA.ordinal());
|
||||
ItemUtil.register(itemCanolaSeed);
|
||||
FactoryRegistry.sendMessage("registerPlantable", itemCanolaSeed);
|
||||
CompatUtil.registerMFRSeed(itemCanolaSeed);
|
||||
|
||||
itemFlaxSeed = new ItemSeed("itemFlaxSeed", InitBlocks.blockFlax, Blocks.grass, EnumPlantType.Plains, Items.string, 0);
|
||||
itemFlaxSeed = new ItemSeed("itemFlaxSeed", InitBlocks.blockFlax, Items.string, 0);
|
||||
ItemUtil.register(itemFlaxSeed);
|
||||
FactoryRegistry.sendMessage("registerPlantable", itemFlaxSeed);
|
||||
CompatUtil.registerMFRSeed(itemFlaxSeed);
|
||||
|
||||
itemCoffeeSeed = new ItemSeed("itemCoffeeSeed", InitBlocks.blockCoffee, Blocks.grass, EnumPlantType.Plains, itemCoffeeBean, 0);
|
||||
itemCoffeeSeed = new ItemSeed("itemCoffeeSeed", InitBlocks.blockCoffee, itemCoffeeBean, 0);
|
||||
ItemUtil.register(itemCoffeeSeed);
|
||||
FactoryRegistry.sendMessage("registerPlantable", itemCoffeeSeed);
|
||||
CompatUtil.registerMFRSeed(itemCoffeeSeed);
|
||||
|
||||
itemPickaxeEmerald = new ItemPickaxeAA(InitItemMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemPickaxeEmerald", EnumRarity.rare);
|
||||
itemAxeEmerald = new ItemAxeAA(InitItemMaterials.toolMaterialEmerald, new ItemStack(Items.emerald), "itemAxeEmerald", EnumRarity.rare);
|
||||
|
|
|
@ -3,6 +3,7 @@ package ellpeck.actuallyadditions.items;
|
|||
import cofh.api.energy.ItemEnergyContainer;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Sets;
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import ellpeck.actuallyadditions.ActuallyAdditions;
|
||||
|
@ -35,6 +36,7 @@ import net.minecraft.util.MovingObjectPosition;
|
|||
import net.minecraft.world.World;
|
||||
import org.apache.logging.log4j.Level;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
@ -266,14 +268,14 @@ public class ItemDrill extends ItemEnergyContainer implements INameableItem{
|
|||
if(this.getEnergyStored(stack) >= use){
|
||||
Block block = world.getBlock(xPos, yPos, zPos);
|
||||
float hardness = block.getBlockHardness(world, xPos, yPos, zPos);
|
||||
if(hardness > -1.0F && this.canHarvestBlock(block, stack)){
|
||||
if(hardness > -1.0F && ((x == xPos && y == yPos && z == zPos) || this.canHarvestBlock(block, stack))){
|
||||
this.extractEnergy(stack, use, false);
|
||||
|
||||
ArrayList<ItemStack> drops = new ArrayList<ItemStack>();
|
||||
int meta = world.getBlockMetadata(xPos, yPos, zPos);
|
||||
|
||||
if(block.canSilkHarvest(world, player, xPos, yPos, zPos, meta) && this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.SILK_TOUCH)){
|
||||
drops.add(new ItemStack(block, 1, meta));
|
||||
addSilkDrops(drops, block, meta, world, player);
|
||||
}
|
||||
else{
|
||||
int fortune = this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE) ? (this.getHasUpgrade(stack, ItemDrillUpgrade.UpgradeType.FORTUNE_II) ? 3 : 1) : 0;
|
||||
|
@ -299,6 +301,18 @@ public class ItemDrill extends ItemEnergyContainer implements INameableItem{
|
|||
}
|
||||
}
|
||||
|
||||
public static void addSilkDrops(ArrayList<ItemStack> drops, Block block, int meta, World world, EntityPlayer player){
|
||||
try{
|
||||
Method method = ReflectionHelper.findMethod(Block.class, block, new String[]{"createStackedBlock"}, int.class);
|
||||
ItemStack silkDrop = (ItemStack)method.invoke(block, meta);
|
||||
if(silkDrop != null) drops.add(silkDrop);
|
||||
}
|
||||
catch(Exception e){
|
||||
player.addChatComponentMessage(new ChatComponentText("Oh! That shouldn't have happened! Trying to get and use a private Method here might have bugged! Report this situation to the Mod Author ASAP!"));
|
||||
ModUtil.LOGGER.log(Level.ERROR, "Player "+player.getDisplayName()+" who should break a Block using a Drill at "+player.posX+", "+player.posY+", "+player.posZ+" in World "+world.provider.dimensionId+" threw an Exception trying to get and use a private Method! Report this to the Mod Author ASAP!");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName(){
|
||||
return "itemDrill";
|
||||
|
|
|
@ -7,84 +7,32 @@ import ellpeck.actuallyadditions.util.INameableItem;
|
|||
import ellpeck.actuallyadditions.util.ItemUtil;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemSeeds;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.EnumPlantType;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.event.ForgeEventFactory;
|
||||
import powercrystals.minefactoryreloaded.api.IFactoryPlantable;
|
||||
import powercrystals.minefactoryreloaded.api.ReplacementBlock;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ItemSeed extends ItemSeeds implements INameableItem, IFactoryPlantable{
|
||||
public class ItemSeed extends ItemSeeds implements INameableItem{
|
||||
|
||||
public Block plant;
|
||||
public Block soilBlock;
|
||||
public EnumPlantType type;
|
||||
public String name;
|
||||
|
||||
public ItemSeed(String name, Block plant, Block soilBlock, EnumPlantType type, Item returnItem, int returnMeta){
|
||||
super(plant, soilBlock);
|
||||
public ItemSeed(String name, Block plant, Item returnItem, int returnMeta){
|
||||
super(plant, Blocks.farmland);
|
||||
this.name = name;
|
||||
this.plant = plant;
|
||||
this.soilBlock = soilBlock;
|
||||
this.type = type;
|
||||
((BlockPlant)this.plant).seedItem = this;
|
||||
((BlockPlant)this.plant).returnItem = returnItem;
|
||||
((BlockPlant)this.plant).returnMeta = returnMeta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int hitSide, float hitX, float hitY, float hitZ){
|
||||
if(this.type == EnumPlantType.Water || hitSide != 1) return false;
|
||||
else if(player.canPlayerEdit(x, y, z, hitSide, stack) && player.canPlayerEdit(x, y + 1, z, hitSide, stack)){
|
||||
if(((BlockPlant)this.plant).canPlaceBlockOn(world.getBlock(x, y, z)) && world.isAirBlock(x, y + 1, z)){
|
||||
world.setBlock(x, y + 1, z, this.plant);
|
||||
stack.stackSize--;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player){
|
||||
if(this.type == EnumPlantType.Water){
|
||||
MovingObjectPosition pos = this.getMovingObjectPositionFromPlayer(world, player, true);
|
||||
if(pos != null){
|
||||
if(pos.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK){
|
||||
int i = pos.blockX;
|
||||
int j = pos.blockY;
|
||||
int k = pos.blockZ;
|
||||
|
||||
if(player.canPlayerEdit(i, j, k, pos.sideHit, stack)){
|
||||
if(world.getBlock(i, j, k).getMaterial() == Material.water && world.getBlockMetadata(i, j, k) == 0 && world.isAirBlock(i, j + 1, k)){
|
||||
BlockSnapshot snap = BlockSnapshot.getBlockSnapshot(world, i, j+1, k);
|
||||
world.setBlock(i, j + 1, k, this.plant);
|
||||
if(ForgeEventFactory.onPlayerBlockPlace(player, snap, ForgeDirection.UP).isCanceled()){
|
||||
snap.restore(true, false);
|
||||
return super.onItemRightClick(stack, world, player);
|
||||
}
|
||||
stack.stackSize--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.onItemRightClick(stack, world, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack stack){
|
||||
return EnumRarity.rare;
|
||||
|
@ -107,11 +55,6 @@ public class ItemSeed extends ItemSeeds implements INameableItem, IFactoryPlanta
|
|||
this.itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumPlantType getPlantType(IBlockAccess world, int x, int y, int z){
|
||||
return this.type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Block getPlant(IBlockAccess world, int x, int y, int z){
|
||||
return this.plant;
|
||||
|
@ -131,34 +74,4 @@ public class ItemSeed extends ItemSeeds implements INameableItem, IFactoryPlanta
|
|||
public String getOredictName(){
|
||||
return this.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getSeed(){
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBePlanted(ItemStack stack, boolean forFermenting){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReplacementBlock getPlantedBlock(World world, int x, int y, int z, ItemStack stack){
|
||||
return new ReplacementBlock(this.plant);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBePlantedHere(World world, int x, int y, int z, ItemStack stack){
|
||||
return world.getBlock(x, y, z).isReplaceable(world, x, y, z) && ((BlockPlant)this.plant).canPlaceBlockOn(world.getBlock(x, y-1, z));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prePlant(World world, int x, int y, int z, ItemStack stack){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postPlant(World world, int x, int y, int z, ItemStack stack){
|
||||
|
||||
}
|
||||
}
|
|
@ -6,7 +6,7 @@ import codechicken.nei.PositionedStack;
|
|||
import codechicken.nei.recipe.RecipeInfo;
|
||||
import codechicken.nei.recipe.TemplateRecipeHandler;
|
||||
import ellpeck.actuallyadditions.inventory.gui.GuiGrinder;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipes;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipeManualRegistry;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
import ellpeck.actuallyadditions.util.StringUtil;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
|
@ -84,8 +84,8 @@ public class CrusherRecipeHandler extends TemplateRecipeHandler{
|
|||
@Override
|
||||
public void loadCraftingRecipes(String outputId, Object... results){
|
||||
if(outputId.equals(NAME) && getClass() == CrusherRecipeHandler.class){
|
||||
ArrayList<GrinderRecipes.GrinderRecipe> recipes = GrinderRecipes.recipes;
|
||||
for(GrinderRecipes.GrinderRecipe recipe : recipes){
|
||||
ArrayList<GrinderRecipeManualRegistry.GrinderRecipe> recipes = GrinderRecipeManualRegistry.recipes;
|
||||
for(GrinderRecipeManualRegistry.GrinderRecipe recipe : recipes){
|
||||
arecipes.add(new CachedCrush(recipe.input, recipe.firstOutput, recipe.secondOutput, recipe.secondChance));
|
||||
}
|
||||
}
|
||||
|
@ -94,16 +94,16 @@ public class CrusherRecipeHandler extends TemplateRecipeHandler{
|
|||
|
||||
@Override
|
||||
public void loadCraftingRecipes(ItemStack result){
|
||||
ArrayList<GrinderRecipes.GrinderRecipe> recipes = GrinderRecipes.recipes;
|
||||
for(GrinderRecipes.GrinderRecipe recipe : recipes){
|
||||
ArrayList<GrinderRecipeManualRegistry.GrinderRecipe> recipes = GrinderRecipeManualRegistry.recipes;
|
||||
for(GrinderRecipeManualRegistry.GrinderRecipe recipe : recipes){
|
||||
if(NEIServerUtils.areStacksSameType(recipe.firstOutput, result) || NEIServerUtils.areStacksSameType(recipe.secondOutput, result)) arecipes.add(new CachedCrush(recipe.input, recipe.firstOutput, recipe.secondOutput, recipe.secondChance));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadUsageRecipes(ItemStack ingredient){
|
||||
ArrayList<GrinderRecipes.GrinderRecipe> recipes = GrinderRecipes.recipes;
|
||||
for(GrinderRecipes.GrinderRecipe recipe : recipes){
|
||||
ArrayList<GrinderRecipeManualRegistry.GrinderRecipe> recipes = GrinderRecipeManualRegistry.recipes;
|
||||
for(GrinderRecipeManualRegistry.GrinderRecipe recipe : recipes){
|
||||
if(NEIServerUtils.areStacksSameTypeCrafting(recipe.input, ingredient)){
|
||||
CachedCrush theRecipe = new CachedCrush(recipe.input, recipe.firstOutput, recipe.secondOutput, recipe.secondChance);
|
||||
theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.ingredient), ingredient);
|
||||
|
|
|
@ -38,6 +38,7 @@ public class NEIActuallyAdditionsConfig implements IConfigureNEI{
|
|||
API.hideItem(new ItemStack(InitBlocks.blockCanola));
|
||||
API.hideItem(new ItemStack(InitBlocks.blockFlax));
|
||||
API.hideItem(new ItemStack(InitBlocks.blockCoffee));
|
||||
API.hideItem(new ItemStack(InitBlocks.blockWildPlant, 1, Util.WILDCARD));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -4,6 +4,7 @@ import cpw.mods.fml.common.network.NetworkRegistry;
|
|||
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import ellpeck.actuallyadditions.network.gui.PacketGuiButton;
|
||||
import ellpeck.actuallyadditions.network.gui.PacketGuiNumber;
|
||||
import ellpeck.actuallyadditions.util.ModUtil;
|
||||
|
||||
public class PacketHandler{
|
||||
|
@ -16,5 +17,6 @@ public class PacketHandler{
|
|||
theNetwork.registerMessage(PacketTileEntityFeeder.Handler.class, PacketTileEntityFeeder.class, 0, Side.CLIENT);
|
||||
theNetwork.registerMessage(PacketGuiButton.Handler.class, PacketGuiButton.class, 1, Side.SERVER);
|
||||
theNetwork.registerMessage(PacketFluidCollectorToClient.Handler.class, PacketFluidCollectorToClient.class, 2, Side.CLIENT);
|
||||
theNetwork.registerMessage(PacketGuiNumber.Handler.class, PacketGuiNumber.class, 3, Side.SERVER);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,11 +60,13 @@ public class PacketTileEntityFeeder implements IMessage{
|
|||
if(tile instanceof TileEntityFeeder){
|
||||
TileEntityFeeder tileFeeder = (TileEntityFeeder)tile;
|
||||
tileFeeder.feedAnimal((EntityAnimal)world.getEntityByID(message.animalID));
|
||||
}
|
||||
|
||||
if(Minecraft.getMinecraft().currentScreen instanceof GuiFeeder){
|
||||
if(((GuiFeeder)Minecraft.getMinecraft().currentScreen).tileFeeder == tileFeeder){
|
||||
((GuiFeeder)Minecraft.getMinecraft().currentScreen).loveCounter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package ellpeck.actuallyadditions.network.gui;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
||||
public interface INumberReactor{
|
||||
|
||||
void onNumberReceived(int text, int textID, EntityPlayer player);
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
package ellpeck.actuallyadditions.network.gui;
|
||||
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
|
||||
public class PacketGuiNumber implements IMessage{
|
||||
|
||||
private int tileX;
|
||||
private int tileY;
|
||||
private int tileZ;
|
||||
private int worldID;
|
||||
private int text;
|
||||
private int textID;
|
||||
private int playerID;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public PacketGuiNumber(){
|
||||
|
||||
}
|
||||
|
||||
public PacketGuiNumber(int x, int y, int z, World world, int text, int textID, EntityPlayer player){
|
||||
this.tileX = x;
|
||||
this.tileY = y;
|
||||
this.tileZ = z;
|
||||
this.worldID = world.provider.dimensionId;
|
||||
this.text = text;
|
||||
this.textID = textID;
|
||||
this.playerID = player.getEntityId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf){
|
||||
this.tileX = buf.readInt();
|
||||
this.tileY = buf.readInt();
|
||||
this.tileZ = buf.readInt();
|
||||
this.worldID = buf.readInt();
|
||||
this.text = buf.readInt();
|
||||
this.textID = buf.readInt();
|
||||
this.playerID = buf.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf){
|
||||
buf.writeInt(this.tileX);
|
||||
buf.writeInt(this.tileY);
|
||||
buf.writeInt(this.tileZ);
|
||||
buf.writeInt(this.worldID);
|
||||
buf.writeInt(this.text);
|
||||
buf.writeInt(this.textID);
|
||||
buf.writeInt(this.playerID);
|
||||
}
|
||||
|
||||
public static class Handler implements IMessageHandler<PacketGuiNumber, IMessage>{
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(PacketGuiNumber message, MessageContext ctx){
|
||||
World world = DimensionManager.getWorld(message.worldID);
|
||||
TileEntity tile = world.getTileEntity(message.tileX, message.tileY, message.tileZ);
|
||||
|
||||
if(tile instanceof INumberReactor){
|
||||
INumberReactor reactor = (INumberReactor)tile;
|
||||
reactor.onNumberReceived(message.text, message.textID, (EntityPlayer)world.getEntityByID(message.playerID));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -8,7 +8,7 @@ import org.apache.logging.log4j.Level;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class GrinderRecipeRegistry{
|
||||
public class GrinderRecipeAutoRegistry{
|
||||
|
||||
public static ArrayList<SearchCase> searchCases = new ArrayList<SearchCase>();
|
||||
public static ArrayList<String> exceptions = new ArrayList<String>();
|
||||
|
@ -52,8 +52,8 @@ public class GrinderRecipeRegistry{
|
|||
ItemStack input = theInput.copy();
|
||||
ItemStack output = theDust.copy();
|
||||
output.stackSize = resultAmount;
|
||||
if(!GrinderRecipes.hasRecipe(input, output)){
|
||||
GrinderRecipes.registerRecipe(input, output, null, 0);
|
||||
if(!GrinderRecipeManualRegistry.hasRecipe(input, output)){
|
||||
GrinderRecipeManualRegistry.registerRecipe(input, output, null, 0);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ import net.minecraftforge.oredict.OreDictionary;
|
|||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class GrinderRecipes{
|
||||
public class GrinderRecipeManualRegistry{
|
||||
|
||||
public static ArrayList<GrinderRecipe> recipes = new ArrayList<GrinderRecipe>();
|
||||
|
|
@ -10,19 +10,25 @@ import ellpeck.actuallyadditions.items.ItemCoffee;
|
|||
import ellpeck.actuallyadditions.items.metalists.TheMiscItems;
|
||||
import ellpeck.actuallyadditions.network.gui.IButtonReactor;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.fluids.*;
|
||||
|
||||
public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver{
|
||||
public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements IButtonReactor, IEnergyReceiver, IFluidHandler{
|
||||
|
||||
public static final int SLOT_COFFEE_BEANS = 0;
|
||||
public static final int SLOT_INPUT = 1;
|
||||
public static final int SLOT_OUTPUT = 2;
|
||||
public static final int SLOT_WATER_INPUT = 11;
|
||||
public static final int SLOT_WATER_OUTPUT = 12;
|
||||
|
||||
public EnergyStorage storage = new EnergyStorage(300000);
|
||||
public FluidTank tank = new FluidTank(4*FluidContainerRegistry.BUCKET_VOLUME);
|
||||
|
||||
public static int energyUsePerTick = ConfigIntValues.COFFEE_MACHINE_ENERGY_USED.getValue();
|
||||
public final int waterUsedPerCoffee = 500;
|
||||
|
||||
public final int coffeeCacheMaxAmount = 300;
|
||||
public final int coffeeCacheAddPerItem = ConfigIntValues.COFFEE_CACHE_ADDED_PER_ITEM.getValue();
|
||||
|
@ -33,7 +39,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
public int brewTime;
|
||||
|
||||
public TileEntityCoffeeMachine(){
|
||||
super(11, "coffeeMachine");
|
||||
super(13, "coffeeMachine");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -55,18 +61,27 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
this.coffeeCacheAmount += this.coffeeCacheAddPerItem;
|
||||
}
|
||||
}
|
||||
|
||||
if(this.slots[SLOT_WATER_INPUT] != null && FluidContainerRegistry.containsFluid(this.slots[SLOT_WATER_INPUT], new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME)) && (this.slots[SLOT_WATER_OUTPUT] == null || (this.slots[SLOT_WATER_OUTPUT].stackSize < this.slots[SLOT_WATER_OUTPUT].getMaxStackSize()))){
|
||||
if(FluidContainerRegistry.BUCKET_VOLUME <= this.tank.getCapacity()-this.tank.getFluidAmount()){
|
||||
if(this.slots[SLOT_WATER_OUTPUT] == null) this.slots[SLOT_WATER_OUTPUT] = new ItemStack(Items.bucket);
|
||||
else this.slots[SLOT_WATER_OUTPUT].stackSize++;
|
||||
this.slots[SLOT_WATER_INPUT] = null;
|
||||
this.tank.fill(new FluidStack(FluidRegistry.WATER, FluidContainerRegistry.BUCKET_VOLUME), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void brew(){
|
||||
if(!worldObj.isRemote){
|
||||
if(this.slots[SLOT_INPUT] != null && this.slots[SLOT_INPUT].getItem() == InitItems.itemMisc && this.slots[SLOT_INPUT].getItemDamage() == TheMiscItems.CUP.ordinal() && this.slots[SLOT_OUTPUT] == null && this.coffeeCacheAmount >= this.coffeeCacheUsePerItem){
|
||||
if(this.slots[SLOT_INPUT] != null && this.slots[SLOT_INPUT].getItem() == InitItems.itemMisc && this.slots[SLOT_INPUT].getItemDamage() == TheMiscItems.CUP.ordinal() && this.slots[SLOT_OUTPUT] == null && this.coffeeCacheAmount >= this.coffeeCacheUsePerItem && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == FluidRegistry.WATER && this.tank.getFluidAmount() >= this.waterUsedPerCoffee){
|
||||
if(this.storage.getEnergyStored() >= energyUsePerTick){
|
||||
this.brewTime++;
|
||||
this.storage.extractEnergy(energyUsePerTick, false);
|
||||
if(this.brewTime >= this.maxBrewTime){
|
||||
this.brewTime = 0;
|
||||
ItemStack output = new ItemStack(InitItems.itemCoffee);
|
||||
for(int i = 3; i < this.slots.length; i++){
|
||||
for(int i = 3; i < this.slots.length-2; i++){
|
||||
if(this.slots[i] != null){
|
||||
ItemCoffee.Ingredient ingredient = ItemCoffee.getIngredientFromStack(this.slots[i]);
|
||||
if(ingredient != null){
|
||||
|
@ -81,6 +96,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
this.slots[SLOT_INPUT].stackSize--;
|
||||
if(this.slots[SLOT_INPUT].stackSize <= 0) this.slots[SLOT_INPUT] = null;
|
||||
this.coffeeCacheAmount -= this.coffeeCacheUsePerItem;
|
||||
this.tank.drain(this.waterUsedPerCoffee, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -93,6 +109,11 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
return this.coffeeCacheAmount * i / this.coffeeCacheMaxAmount;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getWaterScaled(int i){
|
||||
return this.tank.getFluidAmount() * i / this.tank.getCapacity();
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getEnergyScaled(int i){
|
||||
return this.getEnergyStored(ForgeDirection.UNKNOWN) * i / this.getMaxEnergyStored(ForgeDirection.UNKNOWN);
|
||||
|
@ -107,6 +128,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
public void writeToNBT(NBTTagCompound compound){
|
||||
super.writeToNBT(compound);
|
||||
this.storage.writeToNBT(compound);
|
||||
this.tank.writeToNBT(compound);
|
||||
compound.setInteger("Cache", this.coffeeCacheAmount);
|
||||
compound.setInteger("Time", this.brewTime);
|
||||
}
|
||||
|
@ -115,6 +137,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
public void readFromNBT(NBTTagCompound compound){
|
||||
super.readFromNBT(compound);
|
||||
this.storage.readFromNBT(compound);
|
||||
this.tank.readFromNBT(compound);
|
||||
this.coffeeCacheAmount = compound.getInteger("Cache");
|
||||
this.brewTime = compound.getInteger("Time");
|
||||
}
|
||||
|
@ -131,7 +154,7 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
|
||||
@Override
|
||||
public boolean canExtractItem(int slot, ItemStack stack, int side){
|
||||
return slot == SLOT_OUTPUT || (slot >= 3 && ItemCoffee.getIngredientFromStack(stack) == null);
|
||||
return slot == SLOT_OUTPUT || (slot >= 3 && slot < this.slots.length-2 && ItemCoffee.getIngredientFromStack(stack) == null) || slot == SLOT_WATER_OUTPUT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -160,4 +183,34 @@ public class TileEntityCoffeeMachine extends TileEntityInventoryBase implements
|
|||
public boolean canConnectEnergy(ForgeDirection from){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int fill(ForgeDirection from, FluidStack resource, boolean doFill){
|
||||
return resource.getFluid() == FluidRegistry.WATER && from != ForgeDirection.DOWN ? this.tank.fill(resource, doFill) : 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain){
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain){
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canFill(ForgeDirection from, Fluid fluid){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canDrain(ForgeDirection from, Fluid fluid){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidTankInfo[] getTankInfo(ForgeDirection from){
|
||||
return new FluidTankInfo[]{this.tank.getInfo()};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,6 @@ package ellpeck.actuallyadditions.tile;
|
|||
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
|
||||
public class TileEntityGiantChest extends TileEntityInventoryBase{
|
||||
|
||||
|
@ -11,36 +9,6 @@ public class TileEntityGiantChest extends TileEntityInventoryBase{
|
|||
super(9*13, "giantChest");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound compound){
|
||||
super.writeToNBT(compound);
|
||||
NBTTagList tagList = new NBTTagList();
|
||||
for(int currentIndex = 0; currentIndex < slots.length; ++currentIndex){
|
||||
if (slots[currentIndex] != null){
|
||||
NBTTagCompound tagCompound = new NBTTagCompound();
|
||||
//Too many slots to get saved as Byte
|
||||
tagCompound.setShort("Slot", (short)currentIndex);
|
||||
slots[currentIndex].writeToNBT(tagCompound);
|
||||
tagList.appendTag(tagCompound);
|
||||
}
|
||||
}
|
||||
compound.setTag("Items", tagList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound compound){
|
||||
super.readFromNBT(compound);
|
||||
NBTTagList tagList = compound.getTagList("Items", 10);
|
||||
for (int i = 0; i < tagList.tagCount(); ++i){
|
||||
NBTTagCompound tagCompound = tagList.getCompoundTagAt(i);
|
||||
//Too many slots to get saved as Byte
|
||||
short slotIndex = tagCompound.getShort("Slot");
|
||||
if (slotIndex >= 0 && slotIndex < slots.length){
|
||||
slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUpdate(){
|
||||
return false;
|
||||
|
|
|
@ -5,7 +5,7 @@ import cofh.api.energy.IEnergyReceiver;
|
|||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import ellpeck.actuallyadditions.config.values.ConfigIntValues;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipes;
|
||||
import ellpeck.actuallyadditions.recipe.GrinderRecipeManualRegistry;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
@ -122,8 +122,8 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg
|
|||
|
||||
public boolean canCrushOn(int theInput, int theFirstOutput, int theSecondOutput){
|
||||
if(this.slots[theInput] != null){
|
||||
ItemStack outputOne = GrinderRecipes.getOutput(this.slots[theInput], false);
|
||||
ItemStack outputTwo = GrinderRecipes.getOutput(this.slots[theInput], true);
|
||||
ItemStack outputOne = GrinderRecipeManualRegistry.getOutput(this.slots[theInput], false);
|
||||
ItemStack outputTwo = GrinderRecipeManualRegistry.getOutput(this.slots[theInput], true);
|
||||
if(this.slots[theInput] != null){
|
||||
if(outputOne != null){
|
||||
if((this.slots[theFirstOutput] == null || (this.slots[theFirstOutput].isItemEqual(outputOne) && this.slots[theFirstOutput].stackSize <= this.slots[theFirstOutput].getMaxStackSize()-outputOne.stackSize)) && (outputTwo == null || (this.slots[theSecondOutput] == null || (this.slots[theSecondOutput].isItemEqual(outputTwo) && this.slots[theSecondOutput].stackSize <= this.slots[theSecondOutput].getMaxStackSize()-outputTwo.stackSize)))){
|
||||
|
@ -136,14 +136,14 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg
|
|||
}
|
||||
|
||||
public void finishCrushing(int theInput, int theFirstOutput, int theSecondOutput){
|
||||
ItemStack outputOnFirst = GrinderRecipes.getOutput(this.slots[theInput], false);
|
||||
ItemStack outputOnFirst = GrinderRecipeManualRegistry.getOutput(this.slots[theInput], false);
|
||||
if(outputOnFirst != null){
|
||||
if(this.slots[theFirstOutput] == null) this.slots[theFirstOutput] = outputOnFirst.copy();
|
||||
else if(this.slots[theFirstOutput].getItem() == outputOnFirst.getItem()) this.slots[theFirstOutput].stackSize += outputOnFirst.stackSize;
|
||||
}
|
||||
|
||||
int chance = GrinderRecipes.getSecondChance(this.slots[theInput]);
|
||||
ItemStack outputOnSecond = GrinderRecipes.getOutput(this.slots[theInput], true);
|
||||
int chance = GrinderRecipeManualRegistry.getSecondChance(this.slots[theInput]);
|
||||
ItemStack outputOnSecond = GrinderRecipeManualRegistry.getOutput(this.slots[theInput], true);
|
||||
if(outputOnSecond != null){
|
||||
int rand = new Random().nextInt(100) + 1;
|
||||
if(rand <= chance){
|
||||
|
@ -189,7 +189,7 @@ public class TileEntityGrinder extends TileEntityInventoryBase implements IEnerg
|
|||
|
||||
@Override
|
||||
public boolean isItemValidForSlot(int i, ItemStack stack){
|
||||
return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && GrinderRecipes.getOutput(stack, false) != null;
|
||||
return (i == SLOT_INPUT_1 || i == SLOT_INPUT_2) && GrinderRecipeManualRegistry.getOutput(stack, false) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package ellpeck.actuallyadditions.tile;
|
||||
|
||||
import ellpeck.actuallyadditions.network.gui.IButtonReactor;
|
||||
import ellpeck.actuallyadditions.network.gui.INumberReactor;
|
||||
import ellpeck.actuallyadditions.util.WorldUtil;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
|
@ -9,7 +10,18 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public class TileEntityInputter extends TileEntityInventoryBase implements IButtonReactor{
|
||||
public class TileEntityInputter extends TileEntityInventoryBase implements IButtonReactor, INumberReactor{
|
||||
|
||||
@Override
|
||||
public void onNumberReceived(int text, int textID, EntityPlayer player){
|
||||
if(text != -1){
|
||||
if(textID == 0) this.slotToPutStart = text;
|
||||
if(textID == 1) this.slotToPutEnd = text;
|
||||
if(textID == 2) this.slotToPullStart = text;
|
||||
if(textID == 3) this.slotToPullEnd = text;
|
||||
}
|
||||
this.markDirty();
|
||||
}
|
||||
|
||||
public static class TileEntityInputterAdvanced extends TileEntityInputter{
|
||||
|
||||
|
@ -25,15 +37,20 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
|
||||
public static final int WHITELIST_PULL_BUTTON_ID = 87;
|
||||
public static final int WHITELIST_PUT_BUTTON_ID = 88;
|
||||
public static final int OKAY_BUTTON_ID = 133;
|
||||
|
||||
public int sideToPut = -1;
|
||||
public int slotToPut = -1;
|
||||
public int placeToPutSlotAmount;
|
||||
|
||||
public int slotToPutStart;
|
||||
public int slotToPutEnd;
|
||||
|
||||
public TileEntity placeToPut;
|
||||
|
||||
public int sideToPull = -1;
|
||||
public int slotToPull = -1;
|
||||
public int placeToPullSlotAmount;
|
||||
|
||||
public int slotToPullStart;
|
||||
public int slotToPullEnd;
|
||||
|
||||
public TileEntity placeToPull;
|
||||
|
||||
public boolean isAdvanced;
|
||||
|
@ -56,24 +73,27 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
this.initVars();
|
||||
|
||||
if(!worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){
|
||||
if(!(this.sideToPull == this.sideToPut && this.slotToPull == this.slotToPut)){
|
||||
if(sideToPull != -1) this.pull();
|
||||
if(sideToPut != -1) this.put();
|
||||
if(!(this.sideToPull == this.sideToPut && this.slotToPullStart == this.slotToPutStart && this.slotToPullEnd == this.slotToPutEnd)){
|
||||
if(sideToPull != -1 && this.placeToPull instanceof IInventory) this.pull();
|
||||
if(sideToPut != -1 && this.placeToPut instanceof IInventory) this.put();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void pull(){
|
||||
if(this.placeToPullSlotAmount > 0){
|
||||
IInventory theInventory = (IInventory)placeToPull;
|
||||
int theSlotToPull = this.slotToPull;
|
||||
if(theInventory.getSizeInventory() > 0){
|
||||
int theSlotToPull = this.slotToPullStart;
|
||||
int maxSize = theInventory.getInventoryStackLimit();
|
||||
ISidedInventory theSided = null;
|
||||
if(theInventory instanceof ISidedInventory) theSided = (ISidedInventory)theInventory;
|
||||
boolean can = false;
|
||||
|
||||
ItemStack theStack = null;
|
||||
for(int i = (theSlotToPull != -1 ? theSlotToPull : 0); i < (theSlotToPull != -1 ? theSlotToPull+1 : placeToPullSlotAmount); i++){
|
||||
for(int i = theSlotToPull; i < this.slotToPullEnd; i++){
|
||||
if(i >= theInventory.getSizeInventory()) return;
|
||||
|
||||
ItemStack tempStack = theInventory.getStackInSlot(i);
|
||||
if(tempStack != null){
|
||||
if(tempStack.getMaxStackSize() < this.getInventoryStackLimit()) maxSize = tempStack.getMaxStackSize();
|
||||
|
@ -85,6 +105,7 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
if(theSided.canExtractItem(i, tempStack, j)){
|
||||
theStack = tempStack;
|
||||
theSlotToPull = i;
|
||||
can = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -92,11 +113,12 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
else{
|
||||
theStack = tempStack;
|
||||
theSlotToPull = i;
|
||||
break;
|
||||
can = true;
|
||||
}
|
||||
}
|
||||
if(can) break;
|
||||
}
|
||||
if(theStack != null){
|
||||
if(can){
|
||||
if(this.slots[0] != null){
|
||||
if(theStack.isItemEqual(this.slots[0])){
|
||||
if(theStack.stackSize <= maxSize - this.slots[0].stackSize){
|
||||
|
@ -121,9 +143,9 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
}
|
||||
|
||||
public void put(){
|
||||
if(this.placeToPutSlotAmount > 0){
|
||||
IInventory theInventory = (IInventory)placeToPut;
|
||||
int theSlotToPut = this.slotToPut;
|
||||
if(theInventory.getSizeInventory() > 0){
|
||||
int theSlotToPut = this.slotToPutStart;
|
||||
int maxSize = theInventory.getInventoryStackLimit();
|
||||
ISidedInventory theSided = null;
|
||||
if(theInventory instanceof ISidedInventory) theSided = (ISidedInventory)theInventory;
|
||||
|
@ -131,7 +153,9 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
|
||||
if(this.slots[0] != null){
|
||||
ItemStack theStack = null;
|
||||
for(int i = (theSlotToPut != -1 ? theSlotToPut : 0); i < (theSlotToPut != -1 ? theSlotToPut+1 : placeToPutSlotAmount); i++){
|
||||
for(int i = theSlotToPut; i < this.slotToPutEnd; i++){
|
||||
if(i >= theInventory.getSizeInventory()) return;
|
||||
|
||||
ItemStack tempStack = theInventory.getStackInSlot(i);
|
||||
if(tempStack != null){
|
||||
if(tempStack.getMaxStackSize() < theInventory.getInventoryStackLimit()) maxSize = tempStack.getMaxStackSize();
|
||||
|
@ -152,9 +176,9 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
theStack = tempStack;
|
||||
theSlotToPut = i;
|
||||
can = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(can) break;
|
||||
}
|
||||
if(can){
|
||||
if(theStack != null){
|
||||
|
@ -198,20 +222,11 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
this.placeToPull = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionByRotatingSide(this.sideToPull), this.worldObj, this.xCoord, this.yCoord, this.zCoord);
|
||||
this.placeToPut = WorldUtil.getTileEntityFromSide(WorldUtil.getDirectionByRotatingSide(this.sideToPut), this.worldObj, this.xCoord, this.yCoord, this.zCoord);
|
||||
|
||||
if(this.placeToPull != null && this.placeToPull instanceof IInventory){
|
||||
this.placeToPullSlotAmount = ((IInventory)this.placeToPull).getSizeInventory();
|
||||
if(this.placeToPull instanceof IInventory){
|
||||
if(this.slotToPullEnd <= 0) this.slotToPullEnd = ((IInventory)this.placeToPull).getSizeInventory();
|
||||
}
|
||||
else{
|
||||
this.placeToPullSlotAmount = 0;
|
||||
this.slotToPull = -1;
|
||||
}
|
||||
|
||||
if(this.placeToPut != null && this.placeToPut instanceof IInventory){
|
||||
this.placeToPutSlotAmount = ((IInventory)this.placeToPut).getSizeInventory();
|
||||
}
|
||||
else{
|
||||
this.placeToPutSlotAmount = 0;
|
||||
this.slotToPut = -1;
|
||||
if(this.placeToPut instanceof IInventory){
|
||||
if(this.slotToPutEnd <= 0) this.slotToPutEnd = ((IInventory)this.placeToPut).getSizeInventory();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -226,33 +241,38 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
return;
|
||||
}
|
||||
|
||||
if(buttonID == 0 || buttonID == 1){
|
||||
this.slotToPutStart = 0;
|
||||
this.slotToPutEnd = 0;
|
||||
}
|
||||
if(buttonID == 2 || buttonID == 3){
|
||||
this.slotToPullStart = 0;
|
||||
this.slotToPullEnd = 0;
|
||||
}
|
||||
|
||||
if(buttonID == 0) this.sideToPut++;
|
||||
if(buttonID == 1) this.sideToPut--;
|
||||
if(buttonID == 2) this.slotToPut++;
|
||||
if(buttonID == 3) this.slotToPut--;
|
||||
|
||||
if(buttonID == 4) this.sideToPull++;
|
||||
if(buttonID == 5) this.sideToPull--;
|
||||
if(buttonID == 6) this.slotToPull++;
|
||||
if(buttonID == 7) this.slotToPull--;
|
||||
if(buttonID == 2) this.sideToPull++;
|
||||
if(buttonID == 3) this.sideToPull--;
|
||||
|
||||
if(this.sideToPut >= 6) this.sideToPut = -1;
|
||||
else if(this.sideToPut < -1) this.sideToPut = 5;
|
||||
else if(this.sideToPull >= 6) this.sideToPull = -1;
|
||||
else if(this.sideToPull < -1) this.sideToPull = 5;
|
||||
else if(this.slotToPut >= this.placeToPutSlotAmount) this.slotToPut = -1;
|
||||
else if(this.slotToPut < -1) this.slotToPut = this.placeToPutSlotAmount-1;
|
||||
else if(this.slotToPull >= this.placeToPullSlotAmount) this.slotToPull = -1;
|
||||
else if(this.slotToPull < -1) this.slotToPull = this.placeToPullSlotAmount-1;
|
||||
|
||||
this.markDirty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound compound){
|
||||
super.writeToNBT(compound);
|
||||
compound.setInteger("SideToPut", this.sideToPut);
|
||||
compound.setInteger("SlotToPut", this.slotToPut);
|
||||
compound.setInteger("SlotToPut", this.slotToPutStart);
|
||||
compound.setInteger("SlotToPutEnd", this.slotToPutEnd);
|
||||
compound.setInteger("SideToPull", this.sideToPull);
|
||||
compound.setInteger("SlotToPull", this.slotToPull);
|
||||
compound.setInteger("SlotToPull", this.slotToPullStart);
|
||||
compound.setInteger("SlotToPullEnd", this.slotToPullEnd);
|
||||
compound.setBoolean("PullWhitelist", this.isPullWhitelist);
|
||||
compound.setBoolean("PutWhitelist", this.isPutWhitelist);
|
||||
}
|
||||
|
@ -260,9 +280,11 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
|
|||
@Override
|
||||
public void readFromNBT(NBTTagCompound compound){
|
||||
this.sideToPut = compound.getInteger("SideToPut");
|
||||
this.slotToPut = compound.getInteger("SlotToPut");
|
||||
this.slotToPutStart = compound.getInteger("SlotToPut");
|
||||
this.slotToPutEnd = compound.getInteger("SlotToPutEnd");
|
||||
this.sideToPull = compound.getInteger("SideToPull");
|
||||
this.slotToPull = compound.getInteger("SlotToPull");
|
||||
this.slotToPullStart = compound.getInteger("SlotToPull");
|
||||
this.slotToPullEnd = compound.getInteger("SlotToPullEnd");
|
||||
this.isPullWhitelist = compound.getBoolean("PullWhitelist");
|
||||
this.isPutWhitelist = compound.getBoolean("PutWhitelist");
|
||||
super.readFromNBT(compound);
|
||||
|
|
|
@ -43,27 +43,31 @@ public class BlockUtil{
|
|||
|
||||
public static final ArrayList<Block> wailaRegisterList = new ArrayList<Block>();
|
||||
|
||||
public static void register(Block block, Class<? extends ItemBlock> itemBlock, Enum[] list){
|
||||
block.setCreativeTab(CreativeTab.instance);
|
||||
public static void register(Block block, Class<? extends ItemBlock> itemBlock, boolean addTab, Enum[] list){
|
||||
if(addTab) block.setCreativeTab(CreativeTab.instance);
|
||||
block.setBlockName(createUnlocalizedName(block));
|
||||
GameRegistry.registerBlock(block, itemBlock, ((INameableItem)block).getName());
|
||||
if(list != null){
|
||||
for(Enum current : list){
|
||||
if(!((INameableItem)current).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)current).getOredictName(), new ItemStack(block, 1, current.ordinal()));
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(!((INameableItem)block).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)block).getOredictName(), new ItemStack(block, 1, Util.WILDCARD));
|
||||
}
|
||||
|
||||
wailaRegisterList.add(block);
|
||||
}
|
||||
|
||||
public static void register(Block block, Class<? extends ItemBlock> itemBlock, Enum[] list){
|
||||
register(block, itemBlock, true, list);
|
||||
}
|
||||
|
||||
public static void register(Block block, Class<? extends ItemBlock> itemBlock){
|
||||
register(block, itemBlock, true);
|
||||
}
|
||||
|
||||
public static void register(Block block, Class<? extends ItemBlock> itemBlock, boolean addTab){
|
||||
if(addTab) block.setCreativeTab(CreativeTab.instance);
|
||||
block.setBlockName(createUnlocalizedName(block));
|
||||
GameRegistry.registerBlock(block, itemBlock, ((INameableItem)block).getName());
|
||||
if(!((INameableItem)block).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)block).getOredictName(), new ItemStack(block, 1, Util.WILDCARD));
|
||||
|
||||
wailaRegisterList.add(block);
|
||||
register(block, itemBlock, addTab, null);
|
||||
}
|
||||
}
|
||||
|
|
27
src/main/java/ellpeck/actuallyadditions/util/CompatUtil.java
Normal file
27
src/main/java/ellpeck/actuallyadditions/util/CompatUtil.java
Normal file
|
@ -0,0 +1,27 @@
|
|||
package ellpeck.actuallyadditions.util;
|
||||
|
||||
import cpw.mods.fml.common.event.FMLInterModComms;
|
||||
import ellpeck.actuallyadditions.items.ItemSeed;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public class CompatUtil{
|
||||
|
||||
public static void registerMFRPlant(Block block){
|
||||
FMLInterModComms.sendMessage("MineFactoryReloaded", "registerHarvestable_Crop", new ItemStack(block, 1, 7));
|
||||
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
compound.setString("plant", Block.blockRegistry.getNameForObject(block));
|
||||
FMLInterModComms.sendMessage("MineFactoryReloaded", "registerFertilizable_Crop", compound);
|
||||
}
|
||||
|
||||
public static void registerMFRSeed(Item item){
|
||||
NBTTagCompound compound = new NBTTagCompound();
|
||||
compound.setString("seed", Item.itemRegistry.getNameForObject(item));
|
||||
compound.setString("crop", Block.blockRegistry.getNameForObject(((ItemSeed)item).plant));
|
||||
FMLInterModComms.sendMessage("MineFactoryReloaded", "registerPlantable_Crop", compound);
|
||||
}
|
||||
|
||||
}
|
|
@ -32,20 +32,26 @@ public class ItemUtil{
|
|||
}
|
||||
|
||||
public static void register(Item item, boolean addTab){
|
||||
if(addTab) item.setCreativeTab(CreativeTab.instance);
|
||||
item.setUnlocalizedName(createUnlocalizedName(item));
|
||||
GameRegistry.registerItem(item, ((INameableItem)item).getName());
|
||||
if(!((INameableItem)item).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)item).getOredictName(), new ItemStack(item, 1, Util.WILDCARD));
|
||||
register(item, addTab, null);
|
||||
}
|
||||
|
||||
public static void register(Item item, Enum[] list){
|
||||
item.setCreativeTab(CreativeTab.instance);
|
||||
register(item, true, list);
|
||||
}
|
||||
|
||||
public static void register(Item item, boolean addTab, Enum[] list){
|
||||
if(addTab) item.setCreativeTab(CreativeTab.instance);
|
||||
item.setUnlocalizedName(createUnlocalizedName(item));
|
||||
GameRegistry.registerItem(item, ((INameableItem)item).getName());
|
||||
if(list != null){
|
||||
for(Enum current : list){
|
||||
if(!((INameableItem)current).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)current).getOredictName(), new ItemStack(item, 1, current.ordinal()));
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(!((INameableItem)item).getOredictName().isEmpty()) OreDictionary.registerOre(((INameableItem)item).getOredictName(), new ItemStack(item, 1, Util.WILDCARD));
|
||||
}
|
||||
}
|
||||
|
||||
public static String createUnlocalizedName(Item item){
|
||||
return ModUtil.MOD_ID_LOWER + "." + ((INameableItem)item).getName();
|
||||
|
|
|
@ -5,7 +5,7 @@ import org.apache.logging.log4j.Logger;
|
|||
|
||||
public class ModUtil{
|
||||
|
||||
public static final String VERSION = "1.7.10-0.0.6.0";
|
||||
public static final String VERSION = "1.7.10-0.0.6.1";
|
||||
|
||||
public static final String MOD_ID = "ActuallyAdditions";
|
||||
public static final String NAME = "Actually Additions";
|
||||
|
|
|
@ -3,6 +3,7 @@ package ellpeck.actuallyadditions.util;
|
|||
import cofh.api.energy.EnergyStorage;
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -15,6 +16,8 @@ import net.minecraftforge.common.util.ForgeDirection;
|
|||
import net.minecraftforge.fluids.*;
|
||||
import org.apache.logging.log4j.Level;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class WorldUtil{
|
||||
|
||||
public static ChunkCoordinates getCoordsFromSide(ForgeDirection side, int x, int y, int z){
|
||||
|
@ -123,4 +126,14 @@ public class WorldUtil{
|
|||
}
|
||||
}
|
||||
|
||||
public static ArrayList<Material> getMaterialsAround(World world, int x, int y, int z){
|
||||
ArrayList<Material> blocks = new ArrayList<Material>();
|
||||
blocks.add(world.getBlock(x+1, y, z).getMaterial());
|
||||
blocks.add(world.getBlock(x-1, y, z).getMaterial());
|
||||
blocks.add(world.getBlock(x, y, z+1).getMaterial());
|
||||
blocks.add(world.getBlock(x, y, z-1).getMaterial());
|
||||
|
||||
return blocks;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,113 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.event.FMLInterModComms;
|
||||
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* @author PowerCrystals
|
||||
*
|
||||
* Class used to register plants and other farming-related things with MFR. Will do nothing if MFR does not exist.
|
||||
*
|
||||
*/
|
||||
public class FactoryRegistry
|
||||
{
|
||||
/*
|
||||
* This may be called at any time during pre-init, init or post-init, assuming all blocks and items
|
||||
* that are being accessed from the registry have been appropriately registered.
|
||||
* Possible messages:
|
||||
*
|
||||
* // Registration:
|
||||
* addLaserPreferredOre | NBTTag with an ItemStack saved on it, with the color on the "value" attribute,
|
||||
* | A ValuedItem with item and value set.
|
||||
* registerAutoSpawnerBlacklist | The String identifier of an entity,
|
||||
* | A subclass of EntityLivingBase.
|
||||
* registerFertilizable | An instance of IFactoryFertilizable.
|
||||
* registerFertilizer | An instance of IFactoryFertilizer.
|
||||
* registerFruitLog | The String identifier of a block.
|
||||
* registerGrindable | An instance of IFactoryGrindable.
|
||||
* registerGrinderBlacklist | A subclass of EntityLivingBase.
|
||||
* registerHarvestable | An instance of IFactoryHarvestable.
|
||||
* registerLaserOre | NBTTag with an ItemStack saved on it, with the weight on the "value" attribute,
|
||||
* | A ValuedItem with item and value set.
|
||||
* registerLiquidDrinkHandler | A ValuedItem with key and object set; ILiquidDrinkHandler expected.
|
||||
* registerMobEggHandler | An instance of IMobEggHandler.
|
||||
* registerPickableFruit | An instance of IFactoryFruit.
|
||||
* registerPlantable | An instance of IFactoryPlantable.
|
||||
* registerRanchable | An instance of IFactoryRanchable.
|
||||
* registerRedNetLogicCircuit | An instance of IRedNetLogicCircuit.
|
||||
* registerRubberTreeBiome | The biomeName field of a biome to white list for rubber trees to spawn in.
|
||||
* registerSafariNetBlacklist | A subclass of EntityLivingBase.
|
||||
* registerSafariNetHandler | An instance of ISafariNetHandler.
|
||||
* registerSludgeDrop | NBTTag with an ItemStack saved on it, with the weight on the "value" attribute,
|
||||
* | A ValuedItem with item and value set.
|
||||
* registerSpawnHandler | An instance of IMobSpawnHandler.
|
||||
* registerVillagerTradeMob | An instance of IRandomMobProvider.
|
||||
*
|
||||
* // Simple implementations:
|
||||
* { Harvestables
|
||||
* registerHarvestable_Standard | The String identifier of a block.
|
||||
* registerHarvestable_Log | The String identifier of a block.
|
||||
* registerHarvestable_Leaves | The String identifier of a block.
|
||||
* registerHarvestable_Vine | The String identifier of a block.
|
||||
* registerHarvestable_Shrub | The String identifier of a block.
|
||||
* registerHarvestable_Mushroom | The String identifier of a block.
|
||||
* registerHarvestable_Crop | An ItemStack of a block, with a damage value indicating the meta value to harvest at.
|
||||
* | A ValuedItem with value and object set; Block expected.
|
||||
* registerHarvestable_Gourd | An NBTTag with the stem and fruit attributes, both String identifiers of blocks.
|
||||
* }
|
||||
* { Plantables
|
||||
* registerPlantable_Standard | An NBTTag with the seed (Item, String identifier), and
|
||||
* crop (Block, String identifier) attributes set, optionally
|
||||
* also having the meta (Integer, accepted metadata value of the seed item) attribute set.
|
||||
* No special checks for location, just sustainability.
|
||||
* registerPlantable_Crop | An NBTTag with the seed (Item, String identifier), and
|
||||
* crop (Block, String identifier) attributes set, optionally
|
||||
* also having the meta (Integer, accepted metadata value of the seed item) attribute set.
|
||||
* Will automatically hoe dirt and grass into farmland when planting.
|
||||
* registerPlantable_Sapling | An NBTTag with the sapling (Block, String identifier), and optionally
|
||||
* the seed (Item, String identifier) attributes set.
|
||||
* }
|
||||
* { Fertilizer
|
||||
* registerFertilizer_Standard | An NBTTag with the fert (Item, String identifier), meta (Integer), and
|
||||
* type (Integer, index into FertilizerType.values()) attributes set.
|
||||
* }
|
||||
* { Fertilizables
|
||||
* registerFertilizable_Grass | The String identifier of a block. Will bonemeal the block and expect
|
||||
* tall grass be planted above and around it, must be IGrowable. Works with
|
||||
* the GrowPlant and Grass type fertilizers, not recommended for crop plants.
|
||||
* registerFertilizable_Gourd | The String identifier of a block. Must be IGrowable, and expects identical
|
||||
* behavior to vanilla stems. Works with the GrowPlant fertilizers.
|
||||
* registerFertilizable_Crop | An NBTTag with the plant (Block, String identifier, IGrowable), and
|
||||
* meta (Integer, max growth phase) attributes set, optionally also having
|
||||
* the type (Integer, index into FertilizerType) attribute set.
|
||||
* registerFertilizable_Cocoa | An NBTTag with the plant (Block, String identifier), and optionally also
|
||||
* the type (Integer, index into FertilizerType) attributes set.
|
||||
* Expects metadata of the block to exactly match cocoa pods.
|
||||
* registerFertilizable_Standard | An NBTTag with the plant (Block, String identifier, IGrowable), and
|
||||
* optionally also the type (Integer, index into FertilizerType) attributes set.
|
||||
* Expects the block to change when successfully grown (e.g., saplings).
|
||||
* }
|
||||
*/
|
||||
public static void sendMessage(String message, Object value)
|
||||
{
|
||||
if (!Loader.isModLoaded("MineFactoryReloaded") ||
|
||||
Loader.instance().activeModContainer() == null)
|
||||
return;
|
||||
try
|
||||
{
|
||||
Method m = FMLInterModComms.class.getDeclaredMethod("enqueueMessage", Object.class, String.class, IMCMessage.class);
|
||||
m.setAccessible(true);
|
||||
Constructor<IMCMessage> c = IMCMessage.class.getDeclaredConstructor(String.class, Object.class);
|
||||
c.setAccessible(true);
|
||||
m.invoke(null, Loader.instance().activeModContainer(), "MineFactoryReloaded", c.newInstance(message, value));
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
/**
|
||||
* Determines what kind of action a given fertilizer can perform. Your
|
||||
* IFactoryFertilizable instances should check this before performing any action
|
||||
* to maintain future compatibility.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public enum FertilizerType {
|
||||
|
||||
/**
|
||||
* The fertilizer will fertilize nothing.
|
||||
*/
|
||||
None,
|
||||
/**
|
||||
* The fertilizer will fertilize grass.
|
||||
*/
|
||||
Grass,
|
||||
/**
|
||||
* The fertilizer will grow a plant.
|
||||
*/
|
||||
GrowPlant,
|
||||
/**
|
||||
* The fertilizer will grow magical crops.
|
||||
*/
|
||||
GrowMagicalCrop,
|
||||
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
/**
|
||||
* Determines what algorithm the Harvester uses when it encounters this
|
||||
* IFactoryHarvestable in the world.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public enum HarvestType {
|
||||
|
||||
/**
|
||||
* Just break the single block - no special action needed. e.g. Carrots,
|
||||
* flowers, wheat.
|
||||
*/
|
||||
Normal,
|
||||
/**
|
||||
* Search for harvestable blocks adjacent to this block but leave this
|
||||
* block. e.g. Pumpkin, melon
|
||||
*/
|
||||
Gourd,
|
||||
/**
|
||||
* Search for identical blocks above.
|
||||
*/
|
||||
Column,
|
||||
/**
|
||||
* Search for identical blocks above but leave the bottom one for the
|
||||
* future. e.g. Cactus, sugarcane.
|
||||
*/
|
||||
LeaveBottom,
|
||||
/**
|
||||
* This block is the base of a tree and the harvester should enter
|
||||
* tree-cutting mode.
|
||||
*/
|
||||
Tree,
|
||||
/**
|
||||
* This block is the base of the tree and the harvester should enter
|
||||
* tree-cutting mode.
|
||||
* The tree is searched for in the negative y axis instead.
|
||||
*/
|
||||
TreeFlipped,
|
||||
/**
|
||||
* This block is part of a tree as above, but leaves are cut before logs.
|
||||
* The tree is searched for in the current mode.
|
||||
* <p>
|
||||
* If not in tree-cutting mode, tree-cutting mode will be entered as though
|
||||
* the type was Tree.
|
||||
*/
|
||||
TreeLeaf,
|
||||
/**
|
||||
* This block is part of a tree as above, but fruits are cut before logs.
|
||||
* e.g. cocoa
|
||||
* The tree is not searched for.
|
||||
*/
|
||||
TreeFruit
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface IDeepStorageUnit {
|
||||
|
||||
/**
|
||||
* @return A populated ItemStack with stackSize for the full amount of
|
||||
* materials in the DSU. <br>
|
||||
* May have a stackSize > getMaxStackSize(). May have a stackSize of
|
||||
* 0 (indicating locked contents).
|
||||
*/
|
||||
ItemStack getStoredItemType();
|
||||
|
||||
/**
|
||||
* Sets the total amount of the item currently being stored, or zero if all
|
||||
* items are to be removed.
|
||||
*/
|
||||
void setStoredItemCount(int amount);
|
||||
|
||||
/**
|
||||
* Sets the type of the stored item and initializes the number of stored
|
||||
* items to amount.
|
||||
* <p>
|
||||
* Will overwrite any existing stored items.
|
||||
*/
|
||||
void setStoredItemType(ItemStack type, int amount);
|
||||
|
||||
/**
|
||||
* @return The maximum number of items the DSU can hold. <br>
|
||||
* May change based on the current type stored.
|
||||
*/
|
||||
int getMaxStoredCount();
|
||||
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Defines a fertilizable block, and the process to fertilize it. You can assume
|
||||
* that you will never have to check that block matches the one returned by
|
||||
* getPlant().
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface IFactoryFertilizable {
|
||||
|
||||
/**
|
||||
* @return The block this instance is managing.
|
||||
*/
|
||||
public Block getPlant();
|
||||
|
||||
/**
|
||||
* @param world
|
||||
* The world this block belongs to.
|
||||
* @param x
|
||||
* The X coordinate of this block.
|
||||
* @param y
|
||||
* The Y coordinate of this block.
|
||||
* @param z
|
||||
* The Z coordinate of this block.
|
||||
* @param fertilizerType
|
||||
* The kind of fertilizer being used.
|
||||
*
|
||||
* @return True if the block at (x,y,z) can be fertilized with the given
|
||||
* type of fertilizer.
|
||||
*/
|
||||
public boolean canFertilize(World world, int x, int y, int z, FertilizerType fertilizerType);
|
||||
|
||||
/**
|
||||
* @param world
|
||||
* The world this block belongs to.
|
||||
* @param rand
|
||||
* A Random instance to use when fertilizing, if necessary.
|
||||
* @param x
|
||||
* The X coordinate of this block.
|
||||
* @param y
|
||||
* The Y coordinate of this block.
|
||||
* @param z
|
||||
* The Z coordinate of this block.
|
||||
* @param fertilizerType
|
||||
* The kind of fertilizer being used.
|
||||
*
|
||||
* @return True if fertilization was successful. If false, the Fertilizer
|
||||
* will not consume a fertilizer item and will not drain power.
|
||||
*/
|
||||
public boolean fertilize(World world, Random rand, int x, int y, int z, FertilizerType fertilizerType);
|
||||
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Defines a fertilizer item for use in the Fertilizer.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface IFactoryFertilizer {
|
||||
|
||||
/**
|
||||
* @return The ID of this fertilizer item.
|
||||
*/
|
||||
Item getFertilizer();
|
||||
|
||||
/**
|
||||
* @return The type of fertilizer this is.
|
||||
*/
|
||||
FertilizerType getFertilizerType(ItemStack stack);
|
||||
|
||||
/**
|
||||
* Called when a fertilization is successful. If you set the ItemStack size
|
||||
* to 0, it will be deleted by the fertilizer.
|
||||
*
|
||||
* @param fertilizer
|
||||
* The ItemStack used to fertilize.
|
||||
*/
|
||||
void consume(ItemStack fertilizer);
|
||||
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Defines a fruit entry for the Fruit Picker.
|
||||
*
|
||||
* @author powercrystals
|
||||
*
|
||||
*/
|
||||
public interface IFactoryFruit {
|
||||
|
||||
/**
|
||||
* @return The block this fruit has in the world.
|
||||
*/
|
||||
public Block getPlant();
|
||||
|
||||
/**
|
||||
* Used to determine if this fruit can be picked (is it ripe yet, etc)
|
||||
*
|
||||
* @param world
|
||||
* The world where the fruit is being picked
|
||||
* @param x
|
||||
* The x-coordinate of the fruit
|
||||
* @param y
|
||||
* The y-coordinate of the fruit
|
||||
* @param z
|
||||
* The z-coordinate of the fruit
|
||||
*
|
||||
* @return True if the fruit can be picked
|
||||
*/
|
||||
public boolean canBePicked(World world, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* @deprecated This method is no longer called. ReplacementBlock now handles
|
||||
* interaction.
|
||||
*/
|
||||
@Deprecated
|
||||
public boolean breakBlock();
|
||||
|
||||
/**
|
||||
* Called by the Fruit Picker to determine what block to replace the picked
|
||||
* block with. At the time this method is called, the fruit still exists.
|
||||
*
|
||||
* @param world
|
||||
* The world where the fruit is being picked
|
||||
* @param x
|
||||
* The x-coordinate of the fruit
|
||||
* @param y
|
||||
* The y-coordinate of the fruit
|
||||
* @param z
|
||||
* The z-coordinate of the fruit
|
||||
*
|
||||
* @return The block to replace the fruit block with, or null for air.
|
||||
*/
|
||||
public ReplacementBlock getReplacementBlock(World world, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Called by the Fruit Picker to determine what drops to generate. At the
|
||||
* time this method is called, the fruit still exists.
|
||||
*
|
||||
* @param world
|
||||
* The world where the fruit is being picked
|
||||
* @param x
|
||||
* The x-coordinate of the fruit
|
||||
* @param y
|
||||
* The y-coordinate of the fruit
|
||||
* @param z
|
||||
* The z-coordinate of the fruit
|
||||
*/
|
||||
public List<ItemStack> getDrops(World world, Random rand, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Called by the Fruit Picker after getDrops, prior to the block being
|
||||
* replaced/removed.
|
||||
*
|
||||
* @param world
|
||||
* The world where the fruit is being picked
|
||||
* @param x
|
||||
* The x-coordinate of the fruit
|
||||
* @param y
|
||||
* The y-coordinate of the fruit
|
||||
* @param z
|
||||
* The z-coordinate of the fruit
|
||||
*/
|
||||
public void prePick(World world, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Called by the Fruit Picker after the fruit is picked.
|
||||
*
|
||||
* @param world
|
||||
* The world where the fruit is being picked
|
||||
* @param x
|
||||
* The x-coordinate of the fruit
|
||||
* @param y
|
||||
* The y-coordinate of the fruit
|
||||
* @param z
|
||||
* The z-coordinate of the fruit
|
||||
*/
|
||||
public void postPick(World world, int x, int y, int z);
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Defines a grindable entity for the Grinder.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface IFactoryGrindable {
|
||||
|
||||
/**
|
||||
* @return The class that this grindable instance is handling. This must be
|
||||
* a subtype of EntityLivingBase or the entity will never
|
||||
* be noticed by the Grinder.
|
||||
*/
|
||||
public Class<? extends EntityLivingBase> getGrindableEntity();
|
||||
|
||||
/**
|
||||
* @param world
|
||||
* The world this entity is in.
|
||||
* @param entity
|
||||
* The entity instance being ground.
|
||||
* @param random
|
||||
* A Random instance.
|
||||
*
|
||||
* @return The drops generated when this entity is killed. Only one of these
|
||||
* will be chosen.
|
||||
*/
|
||||
public List<MobDrop> grind(World world, EntityLivingBase entity, Random random);
|
||||
|
||||
/**
|
||||
* @param entity
|
||||
* The entity instance being ground.
|
||||
*
|
||||
* @return Whether this entity has been fully processed or not. (e.g., it is
|
||||
* already dead)
|
||||
*/
|
||||
public boolean processEntity(EntityLivingBase entity);
|
||||
}
|
|
@ -1,106 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* Defines a harvestable block for the Harvester.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface IFactoryHarvestable {
|
||||
|
||||
/**
|
||||
* @return The block this harvestable instance is managing.
|
||||
*/
|
||||
public Block getPlant();
|
||||
|
||||
/**
|
||||
* @return The type of harvest the Harvester should perform on this block.
|
||||
*/
|
||||
public HarvestType getHarvestType();
|
||||
|
||||
/**
|
||||
* Used to determine if the harvester should replace this block with air.
|
||||
*
|
||||
* @return Whether or not the Harvester should break the block when
|
||||
* harvesting. If false, no changes will be performed by the
|
||||
* Harvester itself.
|
||||
*/
|
||||
public boolean breakBlock();
|
||||
|
||||
/**
|
||||
* Used to determine if this crop can be harvested (is it at a stage that
|
||||
* drops crops, etc.)
|
||||
*
|
||||
* @param world
|
||||
* The world this block is in.
|
||||
* @param harvesterSettings
|
||||
* The harvester's current settings. Do not modify these.
|
||||
* @param x
|
||||
* The X coordinate of the block being harvested.
|
||||
* @param y
|
||||
* The Y coordinate of the block being harvested.
|
||||
* @param z
|
||||
* The Z coordinate of the block being harvested.
|
||||
*
|
||||
* @return True if this block can be harvested.
|
||||
*/
|
||||
public boolean canBeHarvested(World world, Map<String, Boolean> harvesterSettings, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* @param world
|
||||
* The world this block is in.
|
||||
* @param rand
|
||||
* A Random instance to use when generating drops.
|
||||
* @param harvesterSettings
|
||||
* The harvester's current settings. Do not modify these.
|
||||
* @param x
|
||||
* The X coordinate of the block being harvested.
|
||||
* @param y
|
||||
* The Y coordinate of the block being harvested.
|
||||
* @param z
|
||||
* The Z coordinate of the block being harvested.
|
||||
*
|
||||
* @return The drops generated by breaking this block. For a default
|
||||
* implementation, calling Block.getDrops() is usually
|
||||
* sufficient.
|
||||
*/
|
||||
public List<ItemStack> getDrops(World world, Random rand, Map<String, Boolean> harvesterSettings, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Called before the block is going to be harvested, after getDrops. Usually
|
||||
* empty.
|
||||
*
|
||||
* @param world
|
||||
* The world this block is in.
|
||||
* @param x
|
||||
* The X coordinate of the block being harvested.
|
||||
* @param y
|
||||
* The Y coordinate of the block being harvested.
|
||||
* @param z
|
||||
* The Z coordinate of the block being harvested.
|
||||
*/
|
||||
public void preHarvest(World world, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Called after the block is going to be harvested. Used to re-till soil,
|
||||
* for example.
|
||||
*
|
||||
* @param world
|
||||
* The world this block is in.
|
||||
* @param x
|
||||
* The X coordinate of the block being harvested.
|
||||
* @param y
|
||||
* The Y coordinate of the block being harvested.
|
||||
* @param z
|
||||
* The Z coordinate of the block being harvested.
|
||||
*/
|
||||
public void postHarvest(World world, int x, int y, int z);
|
||||
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
/**
|
||||
* Defines a target for the laser blocks. TileEntities that implement this
|
||||
* interface will sustain the beam.
|
||||
*
|
||||
* @author skyboy
|
||||
*/
|
||||
public interface IFactoryLaserSource {
|
||||
|
||||
/**
|
||||
* Used to determine if laser blocks can remain in the world when emitted
|
||||
* from <tt>from</tt>
|
||||
*
|
||||
* @param from
|
||||
* The direction the laser is oriented
|
||||
*
|
||||
* @return True if the beam should be sustained from this side
|
||||
*/
|
||||
public boolean canFormBeamFrom(ForgeDirection from);
|
||||
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
/**
|
||||
* Defines a target for the Laser Drill Precharger
|
||||
*
|
||||
* @author skyboy
|
||||
*/
|
||||
public interface IFactoryLaserTarget {
|
||||
|
||||
/**
|
||||
* Used to be determined if a laser can be formed on <tt>from</tt>
|
||||
*
|
||||
* @param from
|
||||
* The direction the laser is coming from
|
||||
*
|
||||
* @return True if the precharger can form a beam from this side
|
||||
*/
|
||||
public boolean canFormBeamWith(ForgeDirection from);
|
||||
|
||||
/**
|
||||
* Used to add energy to the tile.
|
||||
*
|
||||
* @param from
|
||||
* The direction the energy is coming from
|
||||
* @param energy
|
||||
* The amount of energy being transferred
|
||||
* @param simulate
|
||||
* true if this transaction will only be simulated
|
||||
*
|
||||
* @return The amount of energy not consumed
|
||||
*/
|
||||
public int addEnergy(ForgeDirection from, int energy, boolean simulate);
|
||||
|
||||
}
|
|
@ -1,94 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
/**
|
||||
* Defines a plantable object for use in the Planter.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface IFactoryPlantable {
|
||||
|
||||
/**
|
||||
* @return The item this plantable is managing.
|
||||
*/
|
||||
public Item getSeed();
|
||||
|
||||
/**
|
||||
* @param stack
|
||||
* The stack being planted.
|
||||
* @param forFermenting
|
||||
* True if this stack will be converted to biofuel
|
||||
*
|
||||
* @return True if this plantable can be planted (useful for metadata
|
||||
* items).
|
||||
*/
|
||||
public boolean canBePlanted(ItemStack stack, boolean forFermenting);
|
||||
|
||||
/**
|
||||
* @param world
|
||||
* The world instance this block or item will be placed into.
|
||||
* @param x
|
||||
* The destination X coordinate.
|
||||
* @param y
|
||||
* The destination Y coordinate.
|
||||
* @param z
|
||||
* The destination Z coordinate.
|
||||
* @param stack
|
||||
* The stack being planted.
|
||||
*
|
||||
* @return The block that will be placed into the world.
|
||||
*/
|
||||
public ReplacementBlock getPlantedBlock(World world, int x, int y, int z, ItemStack stack);
|
||||
|
||||
/**
|
||||
* @param world
|
||||
* The world instance this block or item will be placed into.
|
||||
* @param x
|
||||
* The destination X coordinate.
|
||||
* @param y
|
||||
* The destination Y coordinate.
|
||||
* @param z
|
||||
* The destination Z coordinate.
|
||||
* @param stack
|
||||
* The stack being planted.
|
||||
*
|
||||
* @return True if this plantable can be placed at the provided coordinates.
|
||||
*/
|
||||
public boolean canBePlantedHere(World world, int x, int y, int z, ItemStack stack);
|
||||
|
||||
/**
|
||||
* Called before planting is performed. Used to till soil, for example.
|
||||
*
|
||||
* @param world
|
||||
* The world instance this block or item will be placed into.
|
||||
* @param x
|
||||
* The destination X coordinate.
|
||||
* @param y
|
||||
* The destination Y coordinate.
|
||||
* @param z
|
||||
* The destination Z coordinate.
|
||||
* @param stack
|
||||
* The stack being planted.
|
||||
*/
|
||||
public void prePlant(World world, int x, int y, int z, ItemStack stack);
|
||||
|
||||
/**
|
||||
* Called after planting is performed. Usually empty.
|
||||
*
|
||||
* @param world
|
||||
* The world instance this block or item will be placed into.
|
||||
* @param x
|
||||
* The destination X coordinate.
|
||||
* @param y
|
||||
* The destination Y coordinate.
|
||||
* @param z
|
||||
* The destination Z coordinate.
|
||||
* @param stack
|
||||
* The stack being planted.
|
||||
*/
|
||||
public void postPlant(World world, int x, int y, int z, ItemStack stack);
|
||||
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Defines a ranchable entity for use in the Rancher.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface IFactoryRanchable {
|
||||
|
||||
/**
|
||||
* @return The entity being ranched. Must be a subtype of EntityLivingBase.
|
||||
*/
|
||||
public Class<? extends EntityLivingBase> getRanchableEntity();
|
||||
|
||||
/**
|
||||
* @param world
|
||||
* The world this entity is in.
|
||||
* @param entity
|
||||
* The entity instance being ranched.
|
||||
* @param rancher
|
||||
* The rancher instance doing the ranching. Used to access the
|
||||
* Rancher's inventory when milking cows, for example.
|
||||
*
|
||||
* @return A list of drops. All Items be dropped, fluids not matching the tank's contents will be discarded.
|
||||
*/
|
||||
public List<RanchedItem> ranch(World world, EntityLivingBase entity, IInventory rancher);
|
||||
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
|
||||
public interface ILiquidDrinkHandler {
|
||||
|
||||
/**
|
||||
* Called when an entity has consumed the fluid this manages.
|
||||
*
|
||||
* @param entity
|
||||
* The entity that has consumed the fluid this
|
||||
* ILiquidDrinkHandler manages
|
||||
*/
|
||||
public void onDrink(EntityLivingBase entity);
|
||||
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
/**
|
||||
* Defines a tool that can rotate MFR machines. Implement on an Item class.
|
||||
* Requires no additional work on your part.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface IMFRHammer {
|
||||
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.entity.EntityList.EntityEggInfo;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Defines a class that MFR will use to local egg info for a given mob. This is
|
||||
* used to color the Safari Net based on the captured mob.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface IMobEggHandler {
|
||||
|
||||
/**
|
||||
* @param safariNet
|
||||
* The Safari Net that is looking for egg info.
|
||||
*
|
||||
* @return An EntityEggInfo, or null if this instance cannot handle this
|
||||
* mob.
|
||||
*/
|
||||
public EntityEggInfo getEgg(ItemStack safariNet);
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
|
||||
/**
|
||||
* Defines a handler for mob spawns from the autospawner. Added primarily to
|
||||
* solve item duping on exact spawn & entity inventories
|
||||
*
|
||||
* @author skyboy
|
||||
*/
|
||||
public interface IMobSpawnHandler {
|
||||
|
||||
/**
|
||||
* @return The class that this instance is handling.
|
||||
*/
|
||||
public Class<? extends EntityLivingBase> getMobClass();
|
||||
|
||||
/**
|
||||
* Called when a mob has been spawned normally.
|
||||
*
|
||||
* @param entity
|
||||
* The entity instance being spawned. Typically your regular
|
||||
* spawn code 100% handles this
|
||||
*/
|
||||
public void onMobSpawn(EntityLivingBase entity);
|
||||
|
||||
/**
|
||||
* Called when an exact copy of an entity has been made.
|
||||
*
|
||||
* @param entity
|
||||
* The entity instance being exact-copied. Clear your inventories
|
||||
* & etc. here
|
||||
*/
|
||||
public void onMobExactSpawn(EntityLivingBase entity);
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public interface INeedleAmmo {
|
||||
|
||||
public boolean onHitEntity(ItemStack stac, EntityPlayer owner, Entity hit, double distance);
|
||||
|
||||
public void onHitBlock(ItemStack stac, EntityPlayer owner, World world, int x, int y, int z, int side, double distance);
|
||||
|
||||
public float getSpread(ItemStack stack);
|
||||
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IRandomMobProvider {
|
||||
|
||||
/**
|
||||
* Called to provide random entities to be spawned by mystery SafariNets
|
||||
*
|
||||
* @param world
|
||||
* The world object the entities will be spawned in.
|
||||
* @return A list of RandomMob instances of entities that are all ready to
|
||||
* be spawned in the world with no additional method calls.
|
||||
*/
|
||||
public List<RandomMob> getRandomMobs(World world);
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Defines an object that can display information about a captured mob in a
|
||||
* Safari net.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface ISafariNetHandler {
|
||||
|
||||
/**
|
||||
* @return The class of mob that this handler applies to.
|
||||
*/
|
||||
public Class<?> validFor();
|
||||
|
||||
/**
|
||||
* Called to add information regarding a mob contained in a SafariNet.
|
||||
*
|
||||
* @param safariNetStack
|
||||
* The Safari Net that is requesting information.
|
||||
* @param player
|
||||
* The player holding the Safari Net.
|
||||
* @param infoList
|
||||
* The current list of information strings. Add yours to this.
|
||||
* @param advancedTooltips
|
||||
* True if the advanced tooltips option is on.
|
||||
*/
|
||||
public void addInformation(ItemStack safariNetStack, EntityPlayer player, List<String> infoList, boolean advancedTooltips);
|
||||
|
||||
}
|
|
@ -1,64 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
/**
|
||||
* Defines a syringe for use in the Vet machine.
|
||||
*
|
||||
* @author PowerCrystals
|
||||
*/
|
||||
public interface ISyringe {
|
||||
|
||||
/**
|
||||
* Called when the vet is deciding if it should use this syringe.
|
||||
*
|
||||
* @param world
|
||||
* The world instance.
|
||||
* @param entity
|
||||
* The entity being injected.
|
||||
* @param syringe
|
||||
* The syringe ItemStack.
|
||||
*
|
||||
* @return True if the entity can be injected by this syringe.
|
||||
*/
|
||||
public boolean canInject(World world, EntityLivingBase entity, ItemStack syringe);
|
||||
|
||||
/**
|
||||
* Called to perform an injection.
|
||||
*
|
||||
* @param world
|
||||
* The world instance.
|
||||
* @param entity
|
||||
* The entity being injected.
|
||||
* @param syringe
|
||||
* The syringe ItemStack.
|
||||
*
|
||||
* @return True if injection was successful.
|
||||
*/
|
||||
public boolean inject(World world, EntityLivingBase entity, ItemStack syringe);
|
||||
|
||||
/**
|
||||
* Called to check if a syringe is empty
|
||||
*
|
||||
* @param syringe
|
||||
* The syringe ItemStack.
|
||||
*
|
||||
* @return True if the syringe is empty
|
||||
*/
|
||||
public boolean isEmpty(ItemStack syringe);
|
||||
|
||||
/**
|
||||
* Called to get the empty syringe
|
||||
* <p>
|
||||
* <b>Note</b>: this will replace the syringe, max stacksize should be 1
|
||||
*
|
||||
* @param syringe
|
||||
* The syringe ItemStack.
|
||||
*
|
||||
* @return An empty syringe ItemStack
|
||||
*/
|
||||
public ItemStack getEmptySyringe(ItemStack syringe);
|
||||
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.WeightedRandom;
|
||||
|
||||
public class MobDrop extends WeightedRandom.Item
|
||||
{
|
||||
private ItemStack _stack;
|
||||
|
||||
public MobDrop(int weight, ItemStack stack)
|
||||
{
|
||||
super(weight);
|
||||
_stack = stack;
|
||||
}
|
||||
|
||||
public ItemStack getStack()
|
||||
{
|
||||
if(_stack == null) return null;
|
||||
return _stack.copy();
|
||||
}
|
||||
}
|
|
@ -1,68 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
/**
|
||||
* @author skyboy026
|
||||
*
|
||||
* Defines an ItemStack or a FluidStack that is the result of an entity being ranched
|
||||
*/
|
||||
public final class RanchedItem {
|
||||
private final ItemStack item;
|
||||
private final FluidStack fluid;
|
||||
|
||||
public RanchedItem(Block item, int amount, int meta)
|
||||
{
|
||||
this(new ItemStack(item, amount, meta));
|
||||
}
|
||||
|
||||
public RanchedItem(Block item, int amount)
|
||||
{
|
||||
this(new ItemStack(item, amount));
|
||||
}
|
||||
|
||||
public RanchedItem(Block item)
|
||||
{
|
||||
this(new ItemStack(item));
|
||||
}
|
||||
|
||||
public RanchedItem(Item item, int amount, int meta)
|
||||
{
|
||||
this(new ItemStack(item, amount, meta));
|
||||
}
|
||||
|
||||
public RanchedItem(Item item, int amount)
|
||||
{
|
||||
this(new ItemStack(item, amount));
|
||||
}
|
||||
|
||||
public RanchedItem(Item item)
|
||||
{
|
||||
this(new ItemStack(item));
|
||||
}
|
||||
|
||||
public RanchedItem(ItemStack item)
|
||||
{
|
||||
this.item = item;
|
||||
fluid = null;
|
||||
}
|
||||
|
||||
public RanchedItem(FluidStack fluid)
|
||||
{
|
||||
this.fluid = fluid;
|
||||
item = null;
|
||||
}
|
||||
|
||||
public boolean hasFluid()
|
||||
{
|
||||
return item == null & fluid != null;
|
||||
}
|
||||
|
||||
public Object getResult()
|
||||
{
|
||||
return item == null ? fluid : item;
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.WeightedRandom;
|
||||
|
||||
public class RandomMob extends WeightedRandom.Item
|
||||
{
|
||||
private Entity _mob;
|
||||
public final boolean shouldInit;
|
||||
|
||||
public RandomMob(Entity savedMob, int weight, boolean init)
|
||||
{
|
||||
super(weight);
|
||||
_mob = savedMob;
|
||||
shouldInit = init;
|
||||
}
|
||||
|
||||
public RandomMob(Entity savedMob, int weight)
|
||||
{
|
||||
this(savedMob, weight, true);
|
||||
}
|
||||
|
||||
public Entity getMob()
|
||||
{
|
||||
if(_mob == null) return null;
|
||||
return _mob;
|
||||
}
|
||||
}
|
|
@ -1,137 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class ReplacementBlock
|
||||
{
|
||||
protected byte _hasMeta;
|
||||
protected int _meta;
|
||||
protected final Block _block;
|
||||
protected final NBTTagCompound _tileTag;
|
||||
|
||||
/**
|
||||
* Called to replace a block in the world.
|
||||
* @param world The world object
|
||||
* @param x The X coord
|
||||
* @param y The Y coord
|
||||
* @param z The Z coord
|
||||
* @param stack The ItemStack being used to replace the block (may be null)
|
||||
* @return True if the block was set successfully
|
||||
*/
|
||||
public boolean replaceBlock(World world, int x, int y, int z, ItemStack stack)
|
||||
{
|
||||
int meta = getMeta(world, x, y, z, stack);
|
||||
if (world.setBlock(x, y, z, _block, meta, 3))
|
||||
{
|
||||
if (hasTag(stack) && _block.hasTileEntity(meta))
|
||||
{
|
||||
TileEntity tile = world.getTileEntity(x, y, z);
|
||||
if (tile != null)
|
||||
tile.readFromNBT(getTag(world, x, y, z, stack));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to get the metadata of the replacement block in the world.
|
||||
* @param world The world object
|
||||
* @param x The X coord
|
||||
* @param y The Y coord
|
||||
* @param z The Z coord
|
||||
* @param stack The ItemStack being used to replace the block (may be null)
|
||||
* @return The metadata of the block
|
||||
*/
|
||||
protected int getMeta(World world, int x, int y, int z, ItemStack stack)
|
||||
{
|
||||
int m = 0;
|
||||
if (_hasMeta > 0)
|
||||
{
|
||||
if (_hasMeta > 1)
|
||||
return _meta;
|
||||
m = stack.getItemDamage();
|
||||
Item item = stack.getItem();
|
||||
if (item instanceof ItemBlock)
|
||||
m = ((ItemBlock)item).getMetadata(m);
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to set the metdata of this ReplacementBlock to a fixed value
|
||||
* @param meta The metadata of the block
|
||||
* @return This instance
|
||||
*/
|
||||
public ReplacementBlock setMeta(int meta)
|
||||
{
|
||||
if (meta >= 0)
|
||||
{
|
||||
_hasMeta = 2;
|
||||
_meta = meta;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to set the metdata of this ReplacementBlock to a value read from an ItemStack
|
||||
* @param meta The metadata of the block
|
||||
* @return This instance
|
||||
*/
|
||||
public ReplacementBlock setMeta(boolean hasMeta)
|
||||
{
|
||||
_hasMeta = (byte) (hasMeta ? 1 : 0);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to get the NBTTagCompound a TileEntity will read its state from
|
||||
* @param world The world object
|
||||
* @param x The X coord
|
||||
* @param y The Y coord
|
||||
* @param z The Z coord
|
||||
* @param stack The ItemStack being used to replace the block (may be null)
|
||||
* @return The NBTTagCompound a TileEntity will read its state from
|
||||
*/
|
||||
protected NBTTagCompound getTag(World world, int x, int y, int z, ItemStack stack)
|
||||
{
|
||||
return _tileTag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to see if a TileEntity should have its state set
|
||||
* @param stack The ItemStack being used to replace the block (may be null)
|
||||
* @return True if the TileEntity should have its state set
|
||||
*/
|
||||
protected boolean hasTag(ItemStack stack)
|
||||
{
|
||||
return _tileTag != null;
|
||||
}
|
||||
|
||||
public ReplacementBlock(Item block)
|
||||
{
|
||||
this(Block.getBlockFromItem(block));
|
||||
}
|
||||
|
||||
public ReplacementBlock(Item block, NBTTagCompound tag)
|
||||
{
|
||||
this(Block.getBlockFromItem(block), tag);
|
||||
}
|
||||
|
||||
public ReplacementBlock(Block block)
|
||||
{
|
||||
this(block, null);
|
||||
}
|
||||
|
||||
public ReplacementBlock(Block block, NBTTagCompound tag)
|
||||
{
|
||||
_block = block;
|
||||
_tileTag = tag;
|
||||
}
|
||||
}
|
|
@ -1,72 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class ValuedItem
|
||||
{
|
||||
public final int value;
|
||||
public final ItemStack item;
|
||||
public final String key;
|
||||
public final Object object;
|
||||
|
||||
public ValuedItem(int v, ItemStack i)
|
||||
{
|
||||
value = v;
|
||||
item = i;
|
||||
key = null;
|
||||
object = null;
|
||||
}
|
||||
|
||||
public ValuedItem(String v, Object i)
|
||||
{
|
||||
value = -1;
|
||||
item = null;
|
||||
key = v;
|
||||
object = i;
|
||||
}
|
||||
|
||||
/**
|
||||
* Presently unused but included so that if they do get used in the future,
|
||||
* people including this in their jar and loading before MFR don't destroy everyone
|
||||
*/
|
||||
|
||||
public ValuedItem(int v, Object i)
|
||||
{
|
||||
value = v;
|
||||
item = null;
|
||||
key = null;
|
||||
object = i;
|
||||
}
|
||||
|
||||
public ValuedItem(String v, ItemStack i)
|
||||
{
|
||||
value = -1;
|
||||
item = i;
|
||||
key = v;
|
||||
object = null;
|
||||
}
|
||||
|
||||
public ValuedItem(int v, String k, ItemStack i)
|
||||
{
|
||||
value = v;
|
||||
item = i;
|
||||
key = k;
|
||||
object = null;
|
||||
}
|
||||
|
||||
public ValuedItem(int v, String k, Object i)
|
||||
{
|
||||
value = v;
|
||||
item = null;
|
||||
key = k;
|
||||
object = i;
|
||||
}
|
||||
|
||||
public ValuedItem(int v, String k, ItemStack i, Object o)
|
||||
{
|
||||
value = v;
|
||||
item = i;
|
||||
key = k;
|
||||
object = o;
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.IChatComponent;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Defines a Block that can print information about itself using the RedNet Meter. This must be implemented on your Block class.
|
||||
*/
|
||||
public interface IRedNetInfo
|
||||
{
|
||||
/**
|
||||
* This function appends information to a list provided to it.
|
||||
*
|
||||
* @param world Reference to the world.
|
||||
* @param x X coordinate of the block.
|
||||
* @param y Y coordinate of the block.
|
||||
* @param z Z coordinate of the block.
|
||||
* @param side The side of the block that is being queried.
|
||||
* @param player Player doing the querying - this can be NULL.
|
||||
* @param info The list that the information should be appended to.
|
||||
*/
|
||||
public void getRedNetInfo(IBlockAccess world, int x, int y, int z,
|
||||
ForgeDirection side, EntityPlayer player, List<IChatComponent> info);
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection;
|
||||
|
||||
/**
|
||||
* Defines a Block that can connect to RedNet cables. This must be implemented on your Block class.
|
||||
* <p>
|
||||
* Note that when you implement this, the RedNet network makes several assumptions about your code -
|
||||
* It will not clamp values to 0 <= x <= 15. This means you must be able to accept any possible integer
|
||||
* without crashing, even negatives. It will also assume that calling the onInput(s)Changed() methods
|
||||
* are sufficient, and will not issue block updates. In Single mode, it will call onInputChanged.
|
||||
* <p>
|
||||
* RedNet cables have their subnets indicated to the user by colored bands on the cable.
|
||||
* The color of a given subnet is the same as the wool with metadata equal to the subnet number.
|
||||
* <p>
|
||||
* For reference:<br>
|
||||
* 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray,
|
||||
* 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black
|
||||
*/
|
||||
public interface IRedNetInputNode extends IRedNetConnection
|
||||
{
|
||||
/**
|
||||
* Called when the input values to this block change. Only called if your block is connected in "All" mode.
|
||||
* Do not issue a network value update from inside this method call; it will be ignored. Issue your updates
|
||||
* on the next tick.
|
||||
*
|
||||
* @param world The world this block is in.
|
||||
* @param x This block's X coordinate.
|
||||
* @param y This block's Y coordinate.
|
||||
* @param z This block's Z coordinate.
|
||||
* @param side The side the input values are being changed on.
|
||||
* @param inputValues The new set of input values. This array will be 16 elements long. Do not alter or cache.
|
||||
*/
|
||||
public void onInputsChanged(World world, int x, int y, int z, ForgeDirection side, int[] inputValues);
|
||||
|
||||
/**
|
||||
* Called when the input value to this block changes. Only called if your block is connected in "Single" mode.
|
||||
* Do not issue a network value update from inside this method call; it will be ignored. Issue your updates
|
||||
* on the next tick.
|
||||
*
|
||||
* @param world The world this block is in.
|
||||
* @param x This block's X coordinate.
|
||||
* @param y This block's Y coordinate.
|
||||
* @param z This block's Z coordinate.
|
||||
* @param side The side the input values are being changed on.
|
||||
* @param inputValue The new input value
|
||||
*/
|
||||
public void onInputChanged(World world, int x, int y, int z, ForgeDirection side, int inputValue);
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
public interface IRedNetLogicCircuit
|
||||
{
|
||||
public byte getInputCount();
|
||||
|
||||
public byte getOutputCount();
|
||||
|
||||
public int[] recalculateOutputValues(long worldTime, int[] inputValues);
|
||||
|
||||
public String getUnlocalizedName();
|
||||
public String getInputPinLabel(int pin);
|
||||
public String getOutputPinLabel(int pin);
|
||||
|
||||
public void readFromNBT(NBTTagCompound tag);
|
||||
public void writeToNBT(NBTTagCompound tag);
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author skyboy
|
||||
*/
|
||||
public interface IRedNetLogicPoint
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @param out
|
||||
* @return
|
||||
*/
|
||||
public void transformOutput(int[] out);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param out
|
||||
* @return
|
||||
*/
|
||||
public void transformOutput(int out);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param in
|
||||
* @return
|
||||
*/
|
||||
public int[] transformInput(int[] in);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param in
|
||||
* @return
|
||||
*/
|
||||
public int transformInput(int in);
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
/**
|
||||
*
|
||||
* You should not implement this yourself. Instead, use this to look for cables to notify from your IRedNetOmniNode as this does not
|
||||
* require a block update. This will be implemented on the cable's Block class.
|
||||
*
|
||||
*/
|
||||
public interface IRedNetNetworkContainer
|
||||
{
|
||||
/**
|
||||
* Tells the network to recalculate all subnets.
|
||||
* @param world The world this cable is in.
|
||||
* @param x The x-coordinate of this cable.
|
||||
* @param x The y-coordinate of this cable.
|
||||
* @param x The z-coordinate of this cable.
|
||||
*/
|
||||
public void updateNetwork(World world, int x, int y, int z, ForgeDirection from);
|
||||
|
||||
/**
|
||||
* Tells the network to recalculate a specific subnet.
|
||||
* @param world The world this cable is in.
|
||||
* @param x The x-coordinate of this cable.
|
||||
* @param x The y-coordinate of this cable.
|
||||
* @param x The z-coordinate of this cable.
|
||||
* @param subnet The subnet to recalculate.
|
||||
*/
|
||||
public void updateNetwork(World world, int x, int y, int z, int subnet, ForgeDirection from);
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet;
|
||||
|
||||
/**
|
||||
* Defines a Block that can connect to RedNet cables. This must be implemented on your Block class.
|
||||
* <p>
|
||||
* Note that when you implement this, the RedNet network makes several assumptions about your code -
|
||||
* It will not clamp values to 0 <= x <= 15. This means you must be able to accept any possible integer
|
||||
* without crashing, even negatives. It will also assume that calling the onInput(s)Changed() methods
|
||||
* are sufficient, and will not issue block updates. It will never call the vanilla redstone output
|
||||
* methods, and will only query the methods contained in this interface.
|
||||
* <p>
|
||||
* RedNet cables have their subnets indicated to the user by colored bands on the cable.
|
||||
* The color of a given subnet is the same as the wool with metadata equal to the subnet number.
|
||||
* <p>
|
||||
* For reference:<br>
|
||||
* 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray,
|
||||
* 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black
|
||||
*/
|
||||
public interface IRedNetOmniNode extends IRedNetInputNode, IRedNetOutputNode
|
||||
{
|
||||
// this is merely provided for convenience
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection;
|
||||
|
||||
/**
|
||||
* Defines a Block that can connect to RedNet cables. This must be implemented on your Block class.
|
||||
* <p>
|
||||
* Note that when you implement this, the RedNet network makes several assumptions about your code -
|
||||
* It will never call the vanilla redstone output methods, querying only the methods contained in
|
||||
* this interface, and will not issue block updates.
|
||||
* <p>
|
||||
* RedNet cables have their subnets indicated to the user by colored bands on the cable.
|
||||
* The color of a given subnet is the same as the wool with metadata equal to the subnet number.
|
||||
* <p>
|
||||
* For reference:<br>
|
||||
* 0:White, 1:Orange, 2:Magenta, 3:LightBlue, 4:Yellow, 5:Lime, 6:Pink, 7:Gray,
|
||||
* 8:LightGray, 9:Cyan, 10:Purple, 11:Blue, 12:Brown, 13:Green, 14:Red, 15:Black
|
||||
*/
|
||||
public interface IRedNetOutputNode extends IRedNetConnection
|
||||
{
|
||||
/**
|
||||
* Returns the output values of this RedNet node.
|
||||
* This array must be 16 elements long.
|
||||
* Only called if your block is connected in "All" mode.
|
||||
*
|
||||
* @param world The world this block is in.
|
||||
* @param x This block's X coordinate.
|
||||
* @param y This block's Y coordinate.
|
||||
* @param z This block's Z coordinate.
|
||||
* @param side The side the output values are required for.
|
||||
* @return The output values.
|
||||
*/
|
||||
public int[] getOutputValues(World world, int x, int y, int z, ForgeDirection side);
|
||||
|
||||
/**
|
||||
* Returns the output value of this RedNet node for a given subnet.
|
||||
* Must be the same as getOutputValues(world, x, y, z, side)[subnet].
|
||||
*
|
||||
* @param world The world this block is in.
|
||||
* @param x This block's X coordinate.
|
||||
* @param y This block's Y coordinate.
|
||||
* @param z This block's Z coordinate.
|
||||
* @param side The side the output value is required for.
|
||||
* @param subnet The subnet to get the output value for (0-15).
|
||||
* @return The output value.
|
||||
*/
|
||||
public int getOutputValue(World world, int x, int y, int z, ForgeDirection side, int subnet);
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet.connectivity;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
/**
|
||||
* Defines a Block that can connect to RedNet cables. This must be implemented on your Block class.
|
||||
*/
|
||||
public interface IRedNetConnection
|
||||
{
|
||||
/**
|
||||
* Returns the connection type of this Block. If this value must be changed
|
||||
* while the block is alive, it must notify neighbors of a change.
|
||||
* <p>
|
||||
* For nodes that want to interact with rednet,
|
||||
* see IRedNetInputNode, IRedNetOutputNode, and IRedNetOmniNode
|
||||
*
|
||||
* @param world The world this block is in.
|
||||
* @param x This block's X coordinate.
|
||||
* @param y This block's Y coordinate.
|
||||
* @param z This block's Z coordinate.
|
||||
* @param side The side that connection information is required for.
|
||||
* @return The connection type.
|
||||
*/
|
||||
public RedNetConnectionType getConnectionType(World world, int x, int y, int z, ForgeDirection side);
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet.connectivity;
|
||||
|
||||
/**
|
||||
* This must be implemented on your Block class.
|
||||
* <p>
|
||||
* RedNet cables will treat your block similar to a vanilla block that's not redstone active.
|
||||
*/
|
||||
public interface IRedNetDecorative
|
||||
{
|
||||
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet.connectivity;
|
||||
|
||||
/**
|
||||
* This must be implemented on your Block class.
|
||||
* <p>
|
||||
* RedNet cables will not connect to your block.
|
||||
* <br>
|
||||
* This behavior can be overridden in subclasses by IRedNetConnection
|
||||
*/
|
||||
public interface IRedNetNoConnection
|
||||
{
|
||||
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet.connectivity;
|
||||
|
||||
/**
|
||||
* This must be implemented on your Block class.
|
||||
* <p>
|
||||
* RedNet cables will treat your block similar to a redstone dust, and subtract one from the power value.
|
||||
*/
|
||||
public interface IRedstoneAlike {
|
||||
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
package powercrystals.minefactoryreloaded.api.rednet.connectivity;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Defines how RedNet cable connects to a block
|
||||
* <p>
|
||||
* None: RedNet will never connect to this block (if this is all you want: use IRedNetNoConnection)
|
||||
* <p>
|
||||
* CableSingle: Connections will use the cable renderer with a single band, best used for whole blocks
|
||||
* <br>
|
||||
* PlateSingle: Connections will use the plate renderer with a single band, used for conveyers and rails
|
||||
* <p>
|
||||
* CableAll: Connections permit access to all 16 bands
|
||||
* <br>
|
||||
* PlateAll: Connections permit access to all 16 bands
|
||||
* <p><p>
|
||||
* Forced connection modes are best used for decoration blocks: RedNet will not connect normally,
|
||||
* but will if the user forces it. Typically, IRedNetDecorative is desired for this instead
|
||||
* <p>
|
||||
* ForcedCableSingle: Connections permit access to a single band, only when the cable is in forced connection mode
|
||||
* <br>
|
||||
* ForcedPlateSingle: Connections permit access to a single band, only when the cable is in forced connection mode
|
||||
* <p>
|
||||
* ForcedCableAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode
|
||||
* <br>
|
||||
* ForcedPlateAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode
|
||||
* <p><p>
|
||||
* The decorative nodes are for when you want rednet to decide how to connect to your block,
|
||||
* but also need to receive full updates from the network.
|
||||
* <p>
|
||||
* DecorativeSingle: Connections permit access to a single band, using standard connection logic
|
||||
* <br>
|
||||
* DecorativeAll: Connections permit access to all 16 bands, using standard connection logic
|
||||
* <br>
|
||||
* ForcedDecorativeSingle: Connections permit access to a single band, only when the cable is in forced connection mode
|
||||
* <br>
|
||||
* ForcedDecorativeAll: Connections permit access to all 16 bands, only when the cable is in forced connection mode
|
||||
*/
|
||||
public enum RedNetConnectionType
|
||||
{
|
||||
None, // 0; 0000000
|
||||
CableSingle, // 11; 0001011
|
||||
PlateSingle, // 13; 0001101
|
||||
CableAll, // 19; 0010011
|
||||
PlateAll, // 21; 0010101
|
||||
ForcedCableSingle, // 43; 0101011
|
||||
ForcedPlateSingle, // 45; 0101101
|
||||
ForcedCableAll, // 51; 0110011
|
||||
ForcedPlateAll, // 53; 0110101
|
||||
DecorativeSingle, // NA; 0001001
|
||||
DecorativeAll, // NA; 0010001
|
||||
ForcedDecorativeSingle, // NA; 0101001
|
||||
ForcedDecorativeAll; // NA; 0110001
|
||||
|
||||
public final boolean isConnected = this.ordinal() != 0; // 0 bit (mask: 1)
|
||||
public final boolean isSingleSubnet = this.name().endsWith("Single"); // 3 bit (mask: 8)
|
||||
public final boolean isAllSubnets = this.name().endsWith("All"); // 4 bit (mask: 16)
|
||||
public final boolean isPlate = this.name().contains("Plate"); // 2 bit (mask: 4)
|
||||
public final boolean isCable = this.name().contains("Cable"); // 1 bit (mask: 2)
|
||||
public final boolean isConnectionForced = this.name().startsWith("Forced"); // 5 bit (mask: 32)
|
||||
public final boolean isDecorative = this.name().contains("Decorative");
|
||||
public final short flags = toFlags(isConnected, isCable, isPlate,
|
||||
isSingleSubnet, isAllSubnets, isConnectionForced);
|
||||
|
||||
public static final RedNetConnectionType fromFlags(short flags)
|
||||
{
|
||||
return connections.get(flags);
|
||||
}
|
||||
|
||||
private static final short toFlags(boolean ...flags)
|
||||
{
|
||||
short ret = 0;
|
||||
for (int i = flags.length; i --> 0;)
|
||||
ret |= (flags[i] ? 1 : 0) << i;
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static final Map<Short, RedNetConnectionType> connections = new HashMap<Short, RedNetConnectionType>();
|
||||
|
||||
static {
|
||||
for (RedNetConnectionType type : RedNetConnectionType.values())
|
||||
connections.put(type.flags, type);
|
||||
}
|
||||
}
|
|
@ -44,7 +44,7 @@ tooltip.actuallyadditions.itemMiscRiceDough.desc=It's Dough, but made from Rice
|
|||
item.actuallyadditions.itemFoodRiceBread.name=Rice Bread
|
||||
tooltip.actuallyadditions.itemFoodRiceBread.desc=It's like Bread, but ricey!
|
||||
item.actuallyadditions.itemRiceSeed.name=Rice Seeds
|
||||
tooltip.actuallyadditions.itemRiceSeed.desc=Grows on Water!
|
||||
tooltip.actuallyadditions.itemRiceSeed.desc=Grows on Farmland! Makes delicious Rice!
|
||||
|
||||
item.actuallyadditions.itemMiscTinyCoal.name=Tiny Coal
|
||||
tooltip.actuallyadditions.itemMiscTinyCoal.desc=Crafted from Coal, smelts one Item
|
||||
|
@ -127,7 +127,7 @@ tooltip.actuallyadditions.itemCoffee.desc.1=Brewed in a Coffee Machine! See Effe
|
|||
tooltip.actuallyadditions.itemCoffee.desc.2=You can drink me %s times!
|
||||
|
||||
item.actuallyadditions.itemCoffeeSeed.name=Coffee Seeds
|
||||
tooltip.actuallyadditions.itemCoffeeSeed.desc=Grows Coffee on Grass Blocks
|
||||
tooltip.actuallyadditions.itemCoffeeSeed.desc=Grows Coffee on Farmland
|
||||
|
||||
tile.actuallyadditions.blockCoffee.name=Coffee Plant
|
||||
tooltip.actuallyadditions.blockCoffee.desc=Grows Coffee! Noms!
|
||||
|
@ -135,12 +135,21 @@ tooltip.actuallyadditions.blockCoffee.desc=Grows Coffee! Noms!
|
|||
item.actuallyadditions.itemCoffeeBeans.name=Coffee Beans
|
||||
tooltip.actuallyadditions.itemCoffeeBeans.desc=Used in a Coffee Machine... delicious!
|
||||
|
||||
tile.actuallyadditions.blockWildCanola.name=Wild Canola
|
||||
tile.actuallyadditions.blockWildRice.name=Wild Rice
|
||||
tile.actuallyadditions.blockWildCoffee.name=Wild Coffee
|
||||
tile.actuallyadditions.blockWildFlax.name=Wild Flax
|
||||
tooltip.actuallyadditions.blockWildCanola.desc=Grows in the Wild... Gets you Canola Seeds!
|
||||
tooltip.actuallyadditions.blockWildRice.desc=Grows in the Wild... Gets you Rice Seeds!
|
||||
tooltip.actuallyadditions.blockWildCoffee.desc=Grows in the Wild... Gets you Coffee Seeds!
|
||||
tooltip.actuallyadditions.blockWildFlax.desc=Grows in the Wild... Gets you Flax Seeds!
|
||||
|
||||
item.actuallyadditions.itemCanolaSeed.name=Canola Seeds
|
||||
tooltip.actuallyadditions.itemCanolaSeed.desc=Grows on Grass!
|
||||
tooltip.actuallyadditions.itemCanolaSeed.desc=Grows on Farmland! Makes Canola!
|
||||
item.actuallyadditions.itemMiscCanola.name=Canola
|
||||
tooltip.actuallyadditions.itemMiscCanola.desc=Used to make Oil in a Canola Press
|
||||
tile.actuallyadditions.blockCanola.name=Canola Plant
|
||||
tooltip.actuallyadditions.blockCanola.desc=It's growing... kind of..
|
||||
tooltip.actuallyadditions.blockCanola.desc=It's growing... making Canola.. slowly!
|
||||
|
||||
item.actuallyadditions.itemResonantRice.name=Resonant Rice
|
||||
tooltip.actuallyadditions.itemResonantRice.desc=Don't know what it does... maybe if you right-click it?
|
||||
|
@ -182,17 +191,17 @@ tile.actuallyadditions.blockInputter.add.11.name=Extra-Long Solidifying Dissocia
|
|||
tile.actuallyadditions.blockInputter.add.12.name=Energetic Solo Dancer
|
||||
tile.actuallyadditions.blockInputter.add.13.name=Efficient Sucking Dilettant
|
||||
tile.actuallyadditions.blockInputter.add.14.name=Extreme Sand Digger
|
||||
tile.actuallyadditions.blockInputter.add.15.name=MISSINGNO
|
||||
tile.actuallyadditions.blockInputter.add.15.name=Ending Serious Daughter
|
||||
|
||||
item.actuallyadditions.itemDrillUpgradeSpeed.name=Drill Speed I Augment
|
||||
item.actuallyadditions.itemDrillUpgradeSpeedII.name=Drill Speed II Augment
|
||||
item.actuallyadditions.itemDrillUpgradeSpeedIII.name=Drill Speed III Augment
|
||||
item.actuallyadditions.itemDrillUpgradeSpeed.name=Drill Speed Augment I
|
||||
item.actuallyadditions.itemDrillUpgradeSpeedII.name=Drill Speed Augment II
|
||||
item.actuallyadditions.itemDrillUpgradeSpeedIII.name=Drill Speed Augment III
|
||||
item.actuallyadditions.itemDrillUpgradeSilkTouch.name=Drill Silk Touch Augment
|
||||
item.actuallyadditions.itemDrillUpgradeFortune.name=Drill Fortune I Augment
|
||||
item.actuallyadditions.itemDrillUpgradeFortuneII.name=Drill Fortune II Augment
|
||||
item.actuallyadditions.itemDrillUpgradeFortune.name=Drill Fortune Augment I
|
||||
item.actuallyadditions.itemDrillUpgradeFortuneII.name=Drill Fortune Augment II (That gives you Fortune III as it says in the tooltip...)
|
||||
item.actuallyadditions.itemDrillUpgradeBlockPlacing.name=Drill Block Placing Augment
|
||||
item.actuallyadditions.itemDrillUpgradeThreeByThree.name=Drill Three By Three Mining Augment
|
||||
item.actuallyadditions.itemDrillUpgradeFiveByFive.name=Drill Five By Five Mining Augment
|
||||
item.actuallyadditions.itemDrillUpgradeThreeByThree.name=Drill Mining Augment I
|
||||
item.actuallyadditions.itemDrillUpgradeFiveByFive.name=Drill Mining Augment II
|
||||
|
||||
tooltip.actuallyadditions.itemDrillUpgradeSpeed.desc=Makes the Drill faster!
|
||||
tooltip.actuallyadditions.itemDrillUpgradeSpeedII.desc=Makes the Drill even faster! Requires Tier 1.
|
||||
|
@ -350,8 +359,9 @@ tooltip.actuallyadditions.blockInputter.desc.2=Acts like a more advanced Hopper
|
|||
tooltip.actuallyadditions.blockInputter.desc.3=Turn me off with Redstone!
|
||||
tooltip.actuallyadditions.blockInputter.desc.4=Configurable:
|
||||
tooltip.actuallyadditions.blockInputter.desc.5=-Side to Output to and Input from
|
||||
tooltip.actuallyadditions.blockInputter.desc.6=-Slot in the other Inventory to Output to and Input from
|
||||
tooltip.actuallyadditions.blockInputterAdvanced.desc=Has an Input and Output Filter!
|
||||
tooltip.actuallyadditions.blockInputter.desc.6=-A Range of Slots in the other Inventory to Output to and Input from
|
||||
tooltip.actuallyadditions.blockInputter.desc.7=-> Just input the Minimum and Maximum Slots into the input Fields!
|
||||
tooltip.actuallyadditions.blockInputterAdvanced.desc=Has an Input and Output Filter! (White- and Blacklist!)
|
||||
tooltip.actuallyadditions.blockFishingNet.desc=Catches Fish automatically when placed above Water
|
||||
tooltip.actuallyadditions.blockFurnaceSolar.desc=Produces RF in Daylight
|
||||
tooltip.actuallyadditions.blockHeatCollector.desc.1=Produces RF
|
||||
|
@ -454,12 +464,12 @@ info.actuallyadditions.gui.east=East
|
|||
info.actuallyadditions.gui.south=South
|
||||
info.actuallyadditions.gui.west=West
|
||||
info.actuallyadditions.gui.all=All
|
||||
info.actuallyadditions.gui.slot=Slot
|
||||
info.actuallyadditions.gui.put=Put
|
||||
info.actuallyadditions.gui.pull=Pull
|
||||
info.actuallyadditions.gui.whitelist=Whitelist
|
||||
info.actuallyadditions.gui.blacklist=Blacklist
|
||||
info.actuallyadditions.gui.coffee=Coffee
|
||||
info.actuallyadditions.gui.ok=Ok
|
||||
|
||||
tooltip.actuallyadditions.uses.desc=Uses
|
||||
tooltip.actuallyadditions.produces.desc=Produces
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 3.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2 KiB |
|
@ -1 +1 @@
|
|||
Drills, Drill Upgrades, Energizer, Enervator, Batteries
|
||||
Coffee Machine needs Water, ESD Revamp, Plants grow on Farmland
|
|
@ -1 +1 @@
|
|||
1.7.10-0.0.6.0
|
||||
1.7.10-0.0.6.1
|
Loading…
Reference in a new issue