Added Atomic Reconstructor, made it function (Still needs particles etc. though)

This commit is contained in:
Ellpeck 2015-11-14 21:27:36 +01:00
parent 50f2dbba0d
commit fbd869dc7b
11 changed files with 233 additions and 13 deletions

View file

@ -35,6 +35,7 @@ import ellpeck.actuallyadditions.misc.*;
import ellpeck.actuallyadditions.network.PacketHandler; import ellpeck.actuallyadditions.network.PacketHandler;
import ellpeck.actuallyadditions.ore.InitOreDict; import ellpeck.actuallyadditions.ore.InitOreDict;
import ellpeck.actuallyadditions.proxy.IProxy; import ellpeck.actuallyadditions.proxy.IProxy;
import ellpeck.actuallyadditions.recipe.AtomicReconstructorRecipeHandler;
import ellpeck.actuallyadditions.recipe.FuelHandler; import ellpeck.actuallyadditions.recipe.FuelHandler;
import ellpeck.actuallyadditions.recipe.HairyBallHandler; import ellpeck.actuallyadditions.recipe.HairyBallHandler;
import ellpeck.actuallyadditions.recipe.TreasureChestHandler; import ellpeck.actuallyadditions.recipe.TreasureChestHandler;
@ -100,6 +101,7 @@ public class ActuallyAdditions{
ItemCrafting.initMashedFoodRecipes(); ItemCrafting.initMashedFoodRecipes();
HairyBallHandler.init(); HairyBallHandler.init();
TreasureChestHandler.init(); TreasureChestHandler.init();
AtomicReconstructorRecipeHandler.init();
InitForeignPaxels.init(); InitForeignPaxels.init();
proxy.postInit(event); proxy.postInit(event);

View file

@ -0,0 +1,70 @@
/*
* This file ("BlockAtomicReconstructor.java") is part of the Actually Additions Mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015 Ellpeck
*/
package ellpeck.actuallyadditions.blocks;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ellpeck.actuallyadditions.tile.TileEntityAtomicReconstructor;
import ellpeck.actuallyadditions.util.IActAddItemOrBlock;
import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.init.Blocks;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class BlockAtomicReconstructor extends BlockContainerBase implements IActAddItemOrBlock{
public BlockAtomicReconstructor(){
super(Material.rock);
this.setHarvestLevel("pickaxe", 0);
this.setHardness(6F);
this.setResistance(20F);
this.setStepSound(soundTypeStone);
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int metadata){
return this.blockIcon;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconReg){
this.blockIcon = Blocks.stone.getIcon(0, 0);
}
@Override
public String getName(){
return "blockAtomicReconstructor";
}
@Override
public EnumRarity getRarity(ItemStack stack){
return EnumRarity.epic;
}
@Override
public TileEntity createNewTileEntity(World world, int i){
return new TileEntityAtomicReconstructor();
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack){
int rotation = BlockPistonBase.determineOrientation(world, x, y, z, player);
world.setBlockMetadataWithNotify(x, y, z, rotation, 2);
}
}

View file

@ -107,6 +107,9 @@ public class InitBlocks{
public static void init(){ public static void init(){
ModUtil.LOGGER.info("Initializing Blocks..."); ModUtil.LOGGER.info("Initializing Blocks...");
blockAtomicReconstructor = new BlockAtomicReconstructor();
BlockUtil.register(blockAtomicReconstructor);
blockCrystal = new BlockCrystal(); blockCrystal = new BlockCrystal();
BlockUtil.register(blockCrystal, BlockCrystal.TheItemBlock.class); BlockUtil.register(blockCrystal, BlockCrystal.TheItemBlock.class);

View file

@ -26,6 +26,9 @@ import java.util.List;
public class ItemCrystal extends Item implements IActAddItemOrBlock{ public class ItemCrystal extends Item implements IActAddItemOrBlock{
@SideOnly(Side.CLIENT)
public IIcon[] textures;
public ItemCrystal(){ public ItemCrystal(){
this.setHasSubtypes(true); this.setHasSubtypes(true);
this.setMaxDamage(0); this.setMaxDamage(0);
@ -43,8 +46,8 @@ public class ItemCrystal extends Item implements IActAddItemOrBlock{
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int pass){ public IIcon getIconFromDamage(int par1){
return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? super.getColorFromItemStack(stack, pass) : BlockCrystal.allCrystals[stack.getItemDamage()].color; return par1 >= this.textures.length ? null : this.textures[par1];
} }
@Override @Override
@ -52,12 +55,6 @@ public class ItemCrystal extends Item implements IActAddItemOrBlock{
return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? EnumRarity.common : BlockCrystal.allCrystals[stack.getItemDamage()].rarity; return stack.getItemDamage() >= BlockCrystal.allCrystals.length ? EnumRarity.common : BlockCrystal.allCrystals[stack.getItemDamage()].rarity;
} }
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(ItemStack stack, int pass){
return this.itemIcon;
}
@SuppressWarnings("all") @SuppressWarnings("all")
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tab, List list){ public void getSubItems(Item item, CreativeTabs tab, List list){
@ -69,7 +66,10 @@ public class ItemCrystal extends Item implements IActAddItemOrBlock{
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister iconReg){ public void registerIcons(IIconRegister iconReg){
this.itemIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER+":"+this.getName()); this.textures = new IIcon[BlockCrystal.allCrystals.length];
for(int i = 0; i < this.textures.length; i++){
this.textures[i] = iconReg.registerIcon(ModUtil.MOD_ID_LOWER+":"+this.getName()+BlockCrystal.allCrystals[i].name);
}
} }
@Override @Override

View file

@ -14,10 +14,11 @@ import net.minecraft.item.EnumRarity;
public enum TheCrystals{ public enum TheCrystals{
REDSTONE("Red", EnumRarity.rare, 12595250), REDSTONE("Red", EnumRarity.rare, 16318464),
LAPIS("Blue", EnumRarity.uncommon, 24983), LAPIS("Blue", EnumRarity.uncommon, 131437),
DIAMOND("LightBlue", EnumRarity.epic, 40140), DIAMOND("LightBlue", EnumRarity.epic, 9211636),
COAL("Black", EnumRarity.uncommon, 2500135); COAL("Black", EnumRarity.uncommon, 986895),
EMERALD("Green", EnumRarity.epic, 382466);
public final String name; public final String name;
public final EnumRarity rarity; public final EnumRarity rarity;

View file

@ -0,0 +1,61 @@
/*
* This file ("AtomicReconstructorRecipeHandler.java") is part of the Actually Additions Mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015 Ellpeck
*/
package ellpeck.actuallyadditions.recipe;
import ellpeck.actuallyadditions.blocks.InitBlocks;
import ellpeck.actuallyadditions.items.metalists.TheCrystals;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import java.util.ArrayList;
public class AtomicReconstructorRecipeHandler{
public static ArrayList<Recipe> recipes = new ArrayList<Recipe>();
public static void init(){
addRecipe(Blocks.redstone_block, 0, InitBlocks.blockCrystal, TheCrystals.REDSTONE.ordinal());
addRecipe(Blocks.lapis_block, 0, InitBlocks.blockCrystal, TheCrystals.LAPIS.ordinal());
addRecipe(Blocks.diamond_block, 0, InitBlocks.blockCrystal, TheCrystals.DIAMOND.ordinal());
addRecipe(Blocks.coal_block, 0, InitBlocks.blockCrystal, TheCrystals.COAL.ordinal());
addRecipe(Blocks.emerald_block, 0, InitBlocks.blockCrystal, TheCrystals.EMERALD.ordinal());
}
public static void addRecipe(Block input, int inputMeta, Block output, int outputMeta){
recipes.add(new Recipe(input, inputMeta, output, outputMeta));
}
public static Recipe getRecipe(Block input, int inputMeta){
for(Recipe recipe : recipes){
if(recipe.input == input && recipe.inputMeta == inputMeta){
return recipe;
}
}
return null;
}
public static class Recipe{
public Block input;
public int inputMeta;
public Block output;
public int outputMeta;
public Recipe(Block input, int inputMeta, Block output, int outputMeta){
this.input = input;
this.inputMeta = inputMeta;
this.output = output;
this.outputMeta = outputMeta;
}
}
}

View file

@ -0,0 +1,75 @@
/*
* This file ("TileEntityAtomicReconstructor.java") is part of the Actually Additions Mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015 Ellpeck
*/
package ellpeck.actuallyadditions.tile;
import ellpeck.actuallyadditions.recipe.AtomicReconstructorRecipeHandler;
import ellpeck.actuallyadditions.util.WorldPos;
import ellpeck.actuallyadditions.util.WorldUtil;
import net.minecraft.block.Block;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityAtomicReconstructor extends TileEntityBase{
private int currentTime;
@Override
@SuppressWarnings("unchecked")
public void updateEntity(){
if(!this.worldObj.isRemote){
if(this.currentTime > 0){
this.currentTime--;
if(this.currentTime <= 0){
ForgeDirection sideToManipulate = ForgeDirection.getOrientation(worldObj.getBlockMetadata(xCoord, yCoord, zCoord));
for(int i = 0; i < 10; i++){
WorldPos coordsBlock = WorldUtil.getCoordsFromSide(sideToManipulate, worldObj, xCoord, yCoord, zCoord, i);
if(coordsBlock != null){
if(!coordsBlock.getBlock().isAir(coordsBlock.getWorld(), coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ())){
//Converting the Blocks
int range = 2; //TODO Config
for(int reachX = -range; reachX < range+1; reachX++){
for(int reachZ = -range; reachZ < range+1; reachZ++){
for(int reachY = -range; reachY < range+1; reachY++){
WorldPos pos = new WorldPos(worldObj, coordsBlock.getX()+reachX, coordsBlock.getY()+reachY, coordsBlock.getZ()+reachZ);
AtomicReconstructorRecipeHandler.Recipe recipe = AtomicReconstructorRecipeHandler.getRecipe(pos.getBlock(), pos.getMetadata());
if(recipe != null){
pos.setBlock(recipe.output, recipe.outputMeta, 2);
this.worldObj.playAuxSFX(2001, coordsBlock.getX(), coordsBlock.getY(), coordsBlock.getZ(), Block.getIdFromBlock(pos.getBlock())+(pos.getMetadata() << 12));
}
}
}
}
break;
}
}
}
}
}
else{
this.currentTime = 40; //TODO Config
}
}
}
@Override
public void writeSyncableNBT(NBTTagCompound compound, boolean sync){
super.writeSyncableNBT(compound, sync);
compound.setInteger("CurrentTime", this.currentTime);
}
@Override
public void readSyncableNBT(NBTTagCompound compound, boolean sync){
super.readSyncableNBT(compound, sync);
this.currentTime = compound.getInteger("CurrentTime");
}
}

View file

@ -24,6 +24,7 @@ public abstract class TileEntityBase extends TileEntity{
public static void init(){ public static void init(){
ModUtil.LOGGER.info("Registering TileEntities..."); ModUtil.LOGGER.info("Registering TileEntities...");
GameRegistry.registerTileEntity(TileEntityCompost.class, ModUtil.MOD_ID_LOWER+":tileEntityCompost"); GameRegistry.registerTileEntity(TileEntityCompost.class, ModUtil.MOD_ID_LOWER+":tileEntityCompost");
GameRegistry.registerTileEntity(TileEntityFeeder.class, ModUtil.MOD_ID_LOWER+":tileEntityFeeder"); GameRegistry.registerTileEntity(TileEntityFeeder.class, ModUtil.MOD_ID_LOWER+":tileEntityFeeder");
GameRegistry.registerTileEntity(TileEntityGiantChest.class, ModUtil.MOD_ID_LOWER+":tileEntityGiantChest"); GameRegistry.registerTileEntity(TileEntityGiantChest.class, ModUtil.MOD_ID_LOWER+":tileEntityGiantChest");
@ -62,6 +63,7 @@ public abstract class TileEntityBase extends TileEntity{
GameRegistry.registerTileEntity(TileEntityDirectionalBreaker.class, ModUtil.MOD_ID_LOWER+":tileEntityDirectionalBreaker"); GameRegistry.registerTileEntity(TileEntityDirectionalBreaker.class, ModUtil.MOD_ID_LOWER+":tileEntityDirectionalBreaker");
GameRegistry.registerTileEntity(TileEntityRangedCollector.class, ModUtil.MOD_ID_LOWER+":tileEntityRangedCollector"); GameRegistry.registerTileEntity(TileEntityRangedCollector.class, ModUtil.MOD_ID_LOWER+":tileEntityRangedCollector");
GameRegistry.registerTileEntity(TileEntityLaserRelay.class, ModUtil.MOD_ID_LOWER+":tileEntityLaserRelay"); GameRegistry.registerTileEntity(TileEntityLaserRelay.class, ModUtil.MOD_ID_LOWER+":tileEntityLaserRelay");
GameRegistry.registerTileEntity(TileEntityAtomicReconstructor.class, ModUtil.MOD_ID_LOWER+":tileEntityAtomicReconstructor");
} }
@Override @Override

View file

@ -68,6 +68,12 @@ public class WorldPos{
return pos != null && this.x == pos.getX() && this.y == pos.getY() && this.z == pos.getZ() && this.getWorld() == pos.getWorld(); return pos != null && this.x == pos.getX() && this.y == pos.getY() && this.z == pos.getZ() && this.getWorld() == pos.getWorld();
} }
public void setBlock(Block block, int meta, int flag){
if(this.getWorld() != null){
this.getWorld().setBlock(this.x, this.y, this.z, block, meta, flag);
}
}
public int getX(){ public int getX(){
return this.x; return this.x;
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 B

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 429 B