mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-26 08:48:34 +01:00
Added Treasure Chests
This commit is contained in:
parent
5d963805d8
commit
551ecf0501
14 changed files with 426 additions and 26 deletions
|
@ -26,6 +26,7 @@ import ellpeck.actuallyadditions.ore.InitOreDict;
|
||||||
import ellpeck.actuallyadditions.proxy.IProxy;
|
import ellpeck.actuallyadditions.proxy.IProxy;
|
||||||
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.tile.TileEntityBase;
|
import ellpeck.actuallyadditions.tile.TileEntityBase;
|
||||||
import ellpeck.actuallyadditions.util.ModUtil;
|
import ellpeck.actuallyadditions.util.ModUtil;
|
||||||
import ellpeck.actuallyadditions.util.Util;
|
import ellpeck.actuallyadditions.util.Util;
|
||||||
|
@ -80,6 +81,7 @@ public class ActuallyAdditions{
|
||||||
CrusherCrafting.init();
|
CrusherCrafting.init();
|
||||||
ItemCrafting.initMashedFoodRecipes();
|
ItemCrafting.initMashedFoodRecipes();
|
||||||
HairyBallHandler.init();
|
HairyBallHandler.init();
|
||||||
|
TreasureChestHandler.init();
|
||||||
proxy.postInit();
|
proxy.postInit();
|
||||||
|
|
||||||
ModUtil.LOGGER.info("PostInitialization Finished.");
|
ModUtil.LOGGER.info("PostInitialization Finished.");
|
||||||
|
|
|
@ -25,10 +25,10 @@ public abstract class BlockContainerBase extends BlockContainer{
|
||||||
if(tile instanceof TileEntityInventoryBase){
|
if(tile instanceof TileEntityInventoryBase){
|
||||||
TileEntityInventoryBase tileEntity = (TileEntityInventoryBase)tile;
|
TileEntityInventoryBase tileEntity = (TileEntityInventoryBase)tile;
|
||||||
if(tileEntity.getSizeInventory() > 0){
|
if(tileEntity.getSizeInventory() > 0){
|
||||||
|
Random rand = new Random();
|
||||||
for(int i = 0; i < tileEntity.getSizeInventory(); i++){
|
for(int i = 0; i < tileEntity.getSizeInventory(); i++){
|
||||||
ItemStack itemStack = tileEntity.getStackInSlot(i);
|
ItemStack itemStack = tileEntity.getStackInSlot(i);
|
||||||
if(itemStack != null && itemStack.stackSize > 0){
|
if(itemStack != null && itemStack.stackSize > 0){
|
||||||
Random rand = new Random();
|
|
||||||
float dX = rand.nextFloat()*0.8F+0.1F;
|
float dX = rand.nextFloat()*0.8F+0.1F;
|
||||||
float dY = rand.nextFloat()*0.8F+0.1F;
|
float dY = rand.nextFloat()*0.8F+0.1F;
|
||||||
float dZ = rand.nextFloat()*0.8F+0.1F;
|
float dZ = rand.nextFloat()*0.8F+0.1F;
|
||||||
|
|
|
@ -0,0 +1,165 @@
|
||||||
|
package ellpeck.actuallyadditions.blocks;
|
||||||
|
|
||||||
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
import ellpeck.actuallyadditions.recipe.TreasureChestHandler;
|
||||||
|
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.EntityLivingBase;
|
||||||
|
import net.minecraft.entity.item.EntityItem;
|
||||||
|
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.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.IIcon;
|
||||||
|
import net.minecraft.util.MathHelper;
|
||||||
|
import net.minecraft.util.WeightedRandom;
|
||||||
|
import net.minecraft.world.IBlockAccess;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class BlockTreasureChest extends Block implements INameableItem{
|
||||||
|
|
||||||
|
private IIcon topIcon;
|
||||||
|
private IIcon onIcon;
|
||||||
|
private IIcon frontIcon;
|
||||||
|
|
||||||
|
public BlockTreasureChest(){
|
||||||
|
super(Material.wood);
|
||||||
|
this.setHarvestLevel("axe", 0);
|
||||||
|
this.setHardness(2.0F);
|
||||||
|
this.setResistance(10.0F);
|
||||||
|
this.setStepSound(soundTypeWood);
|
||||||
|
this.setTickRandomly(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack){
|
||||||
|
int rotation = MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
|
||||||
|
|
||||||
|
if (rotation == 0) world.setBlockMetadataWithNotify(x, y, z, 0, 2);
|
||||||
|
if (rotation == 1) world.setBlockMetadataWithNotify(x, y, z, 3, 2);
|
||||||
|
if (rotation == 2) world.setBlockMetadataWithNotify(x, y, z, 1, 2);
|
||||||
|
if (rotation == 3) world.setBlockMetadataWithNotify(x, y, z, 2, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item getItemDropped(int par1, Random rand, int par3){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IIcon getIcon(int side, int meta){
|
||||||
|
if(side == 1) return this.topIcon;
|
||||||
|
if(side == 3) return this.frontIcon;
|
||||||
|
return this.blockIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side){
|
||||||
|
int meta = world.getBlockMetadata(x, y, z);
|
||||||
|
if(side == 1) return this.topIcon;
|
||||||
|
if(side == meta+2 && meta <= 3) return this.frontIcon;
|
||||||
|
else if(side == meta-2 && meta > 3) return this.onIcon;
|
||||||
|
return this.blockIcon;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public void registerBlockIcons(IIconRegister iconReg){
|
||||||
|
this.blockIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName());
|
||||||
|
this.topIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Top");
|
||||||
|
this.onIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "On");
|
||||||
|
this.frontIcon = iconReg.registerIcon(ModUtil.MOD_ID_LOWER + ":" + this.getName() + "Front");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9){
|
||||||
|
if(!world.isRemote){
|
||||||
|
world.playSoundAtEntity(player, "random.chestopen", 0.2F, new Random().nextFloat()*0.1F+0.9F);
|
||||||
|
this.dropItems(world, x, y, z);
|
||||||
|
world.setBlockToAir(x, y, z);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void breakBlock(World world, int x, int y, int z, Block block, int par6){
|
||||||
|
this.dropItems(world, x, y, z);
|
||||||
|
super.breakBlock(world, x, y, z, block, par6);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dropItems(World world, int x, int y, int z){
|
||||||
|
Random rand = new Random();
|
||||||
|
for(int i = 0; i < MathHelper.getRandomIntegerInRange(rand, 3, 6); i++){
|
||||||
|
TreasureChestHandler.Return theReturn = (TreasureChestHandler.Return)WeightedRandom.getRandomItem(rand, TreasureChestHandler.returns);
|
||||||
|
ItemStack itemStack = theReturn.returnItem.copy();
|
||||||
|
itemStack.stackSize = MathHelper.getRandomIntegerInRange(rand, theReturn.minAmount, theReturn.maxAmount);
|
||||||
|
|
||||||
|
float dX = rand.nextFloat()*0.8F+0.1F;
|
||||||
|
float dY = rand.nextFloat()*0.8F+0.1F;
|
||||||
|
float dZ = rand.nextFloat()*0.8F+0.1F;
|
||||||
|
EntityItem entityItem = new EntityItem(world, x+dX, y+dY, z+dZ, itemStack.copy());
|
||||||
|
if(itemStack.hasTagCompound()) entityItem.getEntityItem().setTagCompound((NBTTagCompound)itemStack.getTagCompound().copy());
|
||||||
|
float factor = 0.05F;
|
||||||
|
entityItem.motionX = rand.nextGaussian()*factor;
|
||||||
|
entityItem.motionY = rand.nextGaussian()*factor+0.2F;
|
||||||
|
entityItem.motionZ = rand.nextGaussian()*factor;
|
||||||
|
world.spawnEntityInWorld(entityItem);
|
||||||
|
itemStack.stackSize = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public void randomDisplayTick(World world, int x, int y, int z, Random rand){
|
||||||
|
//TODO Bubble Particles if in water
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName(){
|
||||||
|
return "blockTreasureChest";
|
||||||
|
}
|
||||||
|
|
||||||
|
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.epic;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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 damage){
|
||||||
|
return damage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -78,6 +78,8 @@ public class InitBlocks{
|
||||||
public static Block blockColoredLampOn;
|
public static Block blockColoredLampOn;
|
||||||
public static Block blockLampPowerer;
|
public static Block blockLampPowerer;
|
||||||
|
|
||||||
|
public static Block blockTreasureChest;
|
||||||
|
|
||||||
public static void init(){
|
public static void init(){
|
||||||
ModUtil.LOGGER.info("Initializing Blocks...");
|
ModUtil.LOGGER.info("Initializing Blocks...");
|
||||||
|
|
||||||
|
@ -101,6 +103,9 @@ public class InitBlocks{
|
||||||
blockLampPowerer = new BlockLampPowerer();
|
blockLampPowerer = new BlockLampPowerer();
|
||||||
BlockUtil.register(blockLampPowerer, BlockLampPowerer.TheItemBlock.class);
|
BlockUtil.register(blockLampPowerer, BlockLampPowerer.TheItemBlock.class);
|
||||||
|
|
||||||
|
blockTreasureChest = new BlockTreasureChest();
|
||||||
|
BlockUtil.register(blockTreasureChest, BlockTreasureChest.TheItemBlock.class);
|
||||||
|
|
||||||
blockEnergizer = new BlockEnergizer(true);
|
blockEnergizer = new BlockEnergizer(true);
|
||||||
BlockUtil.register(blockEnergizer, BlockEnergizer.TheItemBlock.class);
|
BlockUtil.register(blockEnergizer, BlockEnergizer.TheItemBlock.class);
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import cpw.mods.fml.common.event.FMLInterModComms;
|
||||||
import ellpeck.actuallyadditions.items.ItemCoffee;
|
import ellpeck.actuallyadditions.items.ItemCoffee;
|
||||||
import ellpeck.actuallyadditions.recipe.CrusherRecipeManualRegistry;
|
import ellpeck.actuallyadditions.recipe.CrusherRecipeManualRegistry;
|
||||||
import ellpeck.actuallyadditions.recipe.HairyBallHandler;
|
import ellpeck.actuallyadditions.recipe.HairyBallHandler;
|
||||||
|
import ellpeck.actuallyadditions.recipe.TreasureChestHandler;
|
||||||
import ellpeck.actuallyadditions.util.ModUtil;
|
import ellpeck.actuallyadditions.util.ModUtil;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
@ -63,6 +64,22 @@ public class InterModCommunications{
|
||||||
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!");
|
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!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(message.key.equalsIgnoreCase("registerTreasureChestRecipe")){
|
||||||
|
NBTTagCompound compound = message.getNBTValue();
|
||||||
|
if(compound != null){
|
||||||
|
ItemStack output = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("output"));
|
||||||
|
int chance = compound.getInteger("chance");
|
||||||
|
int minAmount = compound.getInteger("minAmount");
|
||||||
|
int maxAmount = compound.getInteger("maxAmount");
|
||||||
|
|
||||||
|
if(output != null && chance > 0 && minAmount > 0 && maxAmount >= minAmount){
|
||||||
|
TreasureChestHandler.addReturn(output, chance, minAmount, maxAmount);
|
||||||
|
ModUtil.LOGGER.info("Treasure Chest Recipe that was sent from Mod "+message.getSender()+" has been registered successfully: "+output.toString()+", Chance: "+chance+", Min Amount: "+minAmount+", Max Amount: "+maxAmount);
|
||||||
|
}
|
||||||
|
else ModUtil.LOGGER.log(Level.ERROR, "Treasure Chest Recipe that was sent from Mod " + message.getSender() + " could not be registered: It's missing an Output, a Chance or minimum and maximum Amounts!");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ public enum ConfigBoolValues{
|
||||||
DO_CANOLA_GEN("Canola Gen", ConfigCategories.WORLD_GEN, true, "If Canola should generate in the World"),
|
DO_CANOLA_GEN("Canola Gen", ConfigCategories.WORLD_GEN, true, "If Canola should generate in the World"),
|
||||||
DO_FLAX_GEN("Flax Gen", ConfigCategories.WORLD_GEN, true, "If Flax should generate in the World"),
|
DO_FLAX_GEN("Flax Gen", ConfigCategories.WORLD_GEN, true, "If Flax should generate in the World"),
|
||||||
DO_COFFEE_GEN("Coffee Gen", ConfigCategories.WORLD_GEN, true, "If Coffee should generate in the World"),
|
DO_COFFEE_GEN("Coffee Gen", ConfigCategories.WORLD_GEN, true, "If Coffee should generate in the World"),
|
||||||
|
DO_TREASURE_CHEST_GEN("Treasure Chest Gen", ConfigCategories.WORLD_GEN, true, "If Treasure Chests should generate in the World"),
|
||||||
|
|
||||||
PREVENT_OIL_OVERRIDE("Oil Fluid Override", ConfigCategories.FLUIDS, false, "If not registering Oil Fluids from Actually Additions if other Oil is already registered should be prevented"+ConfigurationHandler.ISSUES_WARNING),
|
PREVENT_OIL_OVERRIDE("Oil Fluid Override", ConfigCategories.FLUIDS, false, "If not registering Oil Fluids from Actually Additions if other Oil is already registered should be prevented"+ConfigurationHandler.ISSUES_WARNING),
|
||||||
PREVENT_CANOLA_OVERRIDE("Canola Oil Fluid Override", ConfigCategories.FLUIDS, false, "If not registering Canola Oil Fluids from Actually Additions if other Canola Oil is already registered should be prevented"+ConfigurationHandler.ISSUES_WARNING),
|
PREVENT_CANOLA_OVERRIDE("Canola Oil Fluid Override", ConfigCategories.FLUIDS, false, "If not registering Canola Oil Fluids from Actually Additions if other Canola Oil is already registered should be prevented"+ConfigurationHandler.ISSUES_WARNING),
|
||||||
|
|
|
@ -54,6 +54,9 @@ public enum ConfigIntValues{
|
||||||
CANOLA_AMOUNT("Canola Amount", ConfigCategories.WORLD_GEN, 10, 1, 50, "The Chance of Canola generating"),
|
CANOLA_AMOUNT("Canola Amount", ConfigCategories.WORLD_GEN, 10, 1, 50, "The Chance of Canola generating"),
|
||||||
FLAX_AMOUNT("Flax Amount", ConfigCategories.WORLD_GEN, 8, 1, 50, "The Chance of Flax generating"),
|
FLAX_AMOUNT("Flax Amount", ConfigCategories.WORLD_GEN, 8, 1, 50, "The Chance of Flax generating"),
|
||||||
COFFEE_AMOUNT("Coffee Amount", ConfigCategories.WORLD_GEN, 6, 1, 50, "The Chance of Coffee generating"),
|
COFFEE_AMOUNT("Coffee Amount", ConfigCategories.WORLD_GEN, 6, 1, 50, "The Chance of Coffee generating"),
|
||||||
|
RICE_CHANCE("Rice Chance", ConfigCategories.WORLD_GEN, 50, 1, 3000, "The 1 in X chance for Rice to generate"),
|
||||||
|
NORMAL_PLANT_CHANCE("Plant Chance", ConfigCategories.WORLD_GEN, 400, 1, 3000, "The 1 in X chance for Flax, Coffee and Canola to generate"),
|
||||||
|
TREASURE_CHEST_CHANCE("Treasure Chest Chance", ConfigCategories.WORLD_GEN, 300, 1, 3000, "The 1 in X chance for a Treasure Chest to generate in a Deep Ocean"),
|
||||||
|
|
||||||
GRINDER_ENERGY_USED("Energy Use: Crusher", ConfigCategories.MACHINE_VALUES, 40, 1, 500, "The Amount of Energy used by the Crusher per Tick"),
|
GRINDER_ENERGY_USED("Energy Use: Crusher", ConfigCategories.MACHINE_VALUES, 40, 1, 500, "The Amount of Energy used by the Crusher per Tick"),
|
||||||
GRINDER_DOUBLE_ENERGY_USED("Energy Use: Double Crusher", ConfigCategories.MACHINE_VALUES, 60, 1, 500, "The Amount of Energy used by the Double Crusher per Tick"),
|
GRINDER_DOUBLE_ENERGY_USED("Energy Use: Double Crusher", ConfigCategories.MACHINE_VALUES, 60, 1, 500, "The Amount of Energy used by the Double Crusher per Tick"),
|
||||||
|
|
|
@ -2,6 +2,7 @@ package ellpeck.actuallyadditions.event;
|
||||||
|
|
||||||
import ellpeck.actuallyadditions.util.ModUtil;
|
import ellpeck.actuallyadditions.util.ModUtil;
|
||||||
import ellpeck.actuallyadditions.util.Util;
|
import ellpeck.actuallyadditions.util.Util;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
|
||||||
public class InitEvents{
|
public class InitEvents{
|
||||||
|
|
||||||
|
@ -14,8 +15,8 @@ public class InitEvents{
|
||||||
Util.registerEvent(new PickupEvent());
|
Util.registerEvent(new PickupEvent());
|
||||||
Util.registerEvent(new TooltipEvent());
|
Util.registerEvent(new TooltipEvent());
|
||||||
Util.registerEvent(new EntityLivingEvent());
|
Util.registerEvent(new EntityLivingEvent());
|
||||||
Util.registerEvent(new WorldDecorationEvent());
|
|
||||||
Util.registerEvent(new BucketFillEvent());
|
Util.registerEvent(new BucketFillEvent());
|
||||||
|
MinecraftForge.TERRAIN_GEN_BUS.register(new WorldDecorationEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package ellpeck.actuallyadditions.event;
|
package ellpeck.actuallyadditions.event;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.eventhandler.Event;
|
||||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||||
import ellpeck.actuallyadditions.blocks.InitBlocks;
|
import ellpeck.actuallyadditions.blocks.InitBlocks;
|
||||||
import ellpeck.actuallyadditions.blocks.metalists.TheWildPlants;
|
import ellpeck.actuallyadditions.blocks.metalists.TheWildPlants;
|
||||||
|
@ -8,6 +9,7 @@ import ellpeck.actuallyadditions.config.values.ConfigIntValues;
|
||||||
import ellpeck.actuallyadditions.util.WorldUtil;
|
import ellpeck.actuallyadditions.util.WorldUtil;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.material.Material;
|
import net.minecraft.block.material.Material;
|
||||||
|
import net.minecraft.world.biome.BiomeGenBase;
|
||||||
import net.minecraftforge.event.terraingen.DecorateBiomeEvent;
|
import net.minecraftforge.event.terraingen.DecorateBiomeEvent;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -16,10 +18,52 @@ import java.util.Random;
|
||||||
public class WorldDecorationEvent{
|
public class WorldDecorationEvent{
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onWorldDecoration(DecorateBiomeEvent event){
|
public void onWorldDecoration(DecorateBiomeEvent.Decorate event){
|
||||||
|
if((event.getResult() == Event.Result.ALLOW || event.getResult() == Event.Result.DEFAULT)){
|
||||||
|
this.generateRice(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);
|
||||||
|
|
||||||
|
//Generate Treasure Chests
|
||||||
|
if(ConfigBoolValues.DO_TREASURE_CHEST_GEN.isEnabled()){
|
||||||
|
if(new Random().nextInt(ConfigIntValues.TREASURE_CHEST_CHANCE.getValue()) == 0){
|
||||||
|
int genX = event.chunkX+event.rand.nextInt(16)+8;
|
||||||
|
int genZ = event.chunkZ+event.rand.nextInt(16)+8;
|
||||||
|
int genY = event.world.getTopSolidOrLiquidBlock(genX, genZ);
|
||||||
|
|
||||||
|
if(event.world.getBiomeGenForCoords(genX, genZ) == BiomeGenBase.deepOcean){
|
||||||
|
if(event.world.getBlock(genX, genY, genZ).getMaterial() == Material.water){
|
||||||
|
if(event.world.getBlock(genX, genY-1, genZ).getMaterial().isSolid()){
|
||||||
|
event.world.setBlock(genX, genY, genZ, InitBlocks.blockTreasureChest, 0, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private 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(ConfigIntValues.NORMAL_PLANT_CHANCE.getValue()) == 0){
|
||||||
|
int genX = event.chunkX+event.rand.nextInt(16)+8;
|
||||||
|
int genZ = event.chunkZ+event.rand.nextInt(16)+8;
|
||||||
|
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, meta, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void generateRice(DecorateBiomeEvent event){
|
||||||
if(ConfigBoolValues.DO_RICE_GEN.isEnabled()){
|
if(ConfigBoolValues.DO_RICE_GEN.isEnabled()){
|
||||||
for(int i = 0; i < ConfigIntValues.RICE_AMOUNT.getValue(); i++){
|
for(int i = 0; i < ConfigIntValues.RICE_AMOUNT.getValue(); i++){
|
||||||
if(new Random().nextInt(10) == 0){
|
if(new Random().nextInt(ConfigIntValues.RICE_CHANCE.getValue()) == 0){
|
||||||
int genX = event.chunkX+event.rand.nextInt(16)+8;
|
int genX = event.chunkX+event.rand.nextInt(16)+8;
|
||||||
int genZ = event.chunkZ+event.rand.nextInt(16)+8;
|
int genZ = event.chunkZ+event.rand.nextInt(16)+8;
|
||||||
int genY = event.world.getTopSolidOrLiquidBlock(genX, genZ);
|
int genY = event.world.getTopSolidOrLiquidBlock(genX, genZ);
|
||||||
|
@ -36,26 +80,5 @@ public class WorldDecorationEvent{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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 meta, int amount, boolean doIt, Material blockBelow, DecorateBiomeEvent event){
|
|
||||||
if(doIt){
|
|
||||||
for(int i = 0; i < amount; i++){
|
|
||||||
if(new Random().nextInt(100) == 0){
|
|
||||||
int genX = event.chunkX+event.rand.nextInt(16)+8;
|
|
||||||
int genZ = event.chunkZ+event.rand.nextInt(16)+8;
|
|
||||||
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, meta, 2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,7 +118,7 @@ public class HairyBallRecipeHandler extends TemplateRecipeHandler{
|
||||||
if(recipe.result != null){
|
if(recipe.result != null){
|
||||||
int secondChance = recipe.chance;
|
int secondChance = recipe.chance;
|
||||||
String secondString = secondChance + "%";
|
String secondString = secondChance + "%";
|
||||||
GuiDraw.drawString(secondString, 65+32, 48, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false);
|
GuiDraw.drawString(secondString, 65+32, 45, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,10 @@ public class NEIActuallyAdditionsConfig implements IConfigureNEI{
|
||||||
API.registerRecipeHandler(ballRecipeHandler);
|
API.registerRecipeHandler(ballRecipeHandler);
|
||||||
API.registerUsageHandler(ballRecipeHandler);
|
API.registerUsageHandler(ballRecipeHandler);
|
||||||
|
|
||||||
|
TreasureChestRecipeHandler treasureRecipeHandler = new TreasureChestRecipeHandler();
|
||||||
|
API.registerRecipeHandler(treasureRecipeHandler);
|
||||||
|
API.registerUsageHandler(treasureRecipeHandler);
|
||||||
|
|
||||||
CompostRecipeHandler compostRecipeHandler = new CompostRecipeHandler();
|
CompostRecipeHandler compostRecipeHandler = new CompostRecipeHandler();
|
||||||
API.registerRecipeHandler(compostRecipeHandler);
|
API.registerRecipeHandler(compostRecipeHandler);
|
||||||
API.registerUsageHandler(compostRecipeHandler);
|
API.registerUsageHandler(compostRecipeHandler);
|
||||||
|
|
|
@ -0,0 +1,134 @@
|
||||||
|
package ellpeck.actuallyadditions.nei;
|
||||||
|
|
||||||
|
import codechicken.lib.gui.GuiDraw;
|
||||||
|
import codechicken.nei.NEIServerUtils;
|
||||||
|
import codechicken.nei.PositionedStack;
|
||||||
|
import codechicken.nei.recipe.RecipeInfo;
|
||||||
|
import codechicken.nei.recipe.TemplateRecipeHandler;
|
||||||
|
import ellpeck.actuallyadditions.recipe.TreasureChestHandler;
|
||||||
|
import ellpeck.actuallyadditions.util.ModUtil;
|
||||||
|
import ellpeck.actuallyadditions.util.StringUtil;
|
||||||
|
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.StatCollector;
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
public class TreasureChestRecipeHandler extends TemplateRecipeHandler{
|
||||||
|
|
||||||
|
public static final String NAME = "actuallyadditions.treasureChest";
|
||||||
|
|
||||||
|
public TreasureChestRecipeHandler(){
|
||||||
|
super();
|
||||||
|
RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CachedTreasure extends CachedRecipe{
|
||||||
|
|
||||||
|
public PositionedStack result;
|
||||||
|
public PositionedStack input;
|
||||||
|
public int chance;
|
||||||
|
public int minAmount;
|
||||||
|
public int maxAmount;
|
||||||
|
|
||||||
|
public CachedTreasure(ItemStack input, ItemStack result, int chance, int minAmount, int maxAmount){
|
||||||
|
this.result = new PositionedStack(result, 67+32, 19);
|
||||||
|
this.chance = chance;
|
||||||
|
this.input = new PositionedStack(input, 5+32, 19);
|
||||||
|
this.minAmount = minAmount;
|
||||||
|
this.maxAmount = maxAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PositionedStack getIngredient(){
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PositionedStack getResult(){
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int recipiesPerPage(){
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends GuiContainer> getGuiClass(){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRecipeName(){
|
||||||
|
return StatCollector.translateToLocal("container.nei." + NAME + ".name");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadTransferRects(){
|
||||||
|
transferRects.add(new RecipeTransferRect(new Rectangle(31+32, 18, 22, 16), NAME));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadCraftingRecipes(String outputId, Object... results){
|
||||||
|
if(outputId.equals(NAME) && getClass() == TreasureChestRecipeHandler.class){
|
||||||
|
ArrayList<TreasureChestHandler.Return> recipes = TreasureChestHandler.returns;
|
||||||
|
for(TreasureChestHandler.Return recipe : recipes){
|
||||||
|
arecipes.add(new CachedTreasure(recipe.input, recipe.returnItem, recipe.itemWeight, recipe.minAmount, recipe.maxAmount));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else super.loadCraftingRecipes(outputId, results);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadCraftingRecipes(ItemStack result){
|
||||||
|
ArrayList<TreasureChestHandler.Return> recipes = TreasureChestHandler.returns;
|
||||||
|
for(TreasureChestHandler.Return recipe : recipes){
|
||||||
|
if(NEIServerUtils.areStacksSameType(recipe.returnItem, result)) arecipes.add(new CachedTreasure(recipe.input, recipe.returnItem, recipe.itemWeight, recipe.minAmount, recipe.maxAmount));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadUsageRecipes(ItemStack ingredient){
|
||||||
|
ArrayList<TreasureChestHandler.Return> recipes = TreasureChestHandler.returns;
|
||||||
|
for(TreasureChestHandler.Return recipe : recipes){
|
||||||
|
if(NEIServerUtils.areStacksSameTypeCrafting(recipe.input, ingredient)){
|
||||||
|
CachedTreasure theRecipe = new CachedTreasure(recipe.input, recipe.returnItem, recipe.itemWeight, recipe.minAmount, recipe.maxAmount);
|
||||||
|
theRecipe.setIngredientPermutation(Collections.singletonList(theRecipe.input), ingredient);
|
||||||
|
arecipes.add(theRecipe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getGuiTexture(){
|
||||||
|
return ModUtil.MOD_ID_LOWER + ":textures/gui/guiNEITreasure.png";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawBackground(int recipeIndex){
|
||||||
|
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||||
|
GuiDraw.changeTexture(getGuiTexture());
|
||||||
|
GuiDraw.drawTexturedModalRect(32, 0, 0, 0, 96, 60);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawExtras(int rec){
|
||||||
|
CachedTreasure recipe = (CachedTreasure)this.arecipes.get(rec);
|
||||||
|
if(recipe.result != null){
|
||||||
|
int secondChance = recipe.chance;
|
||||||
|
String secondString = secondChance + "%";
|
||||||
|
//TODO
|
||||||
|
GuiDraw.drawString(recipe.minAmount + "-" + recipe.maxAmount + " Items at " + secondString, 65+10, 45, StringUtil.DECIMAL_COLOR_GRAY_TEXT, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getOverlayIdentifier(){
|
||||||
|
return NAME;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package ellpeck.actuallyadditions.recipe;
|
||||||
|
|
||||||
|
import ellpeck.actuallyadditions.blocks.InitBlocks;
|
||||||
|
import net.minecraft.init.Items;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.WeightedRandom;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class TreasureChestHandler{
|
||||||
|
|
||||||
|
public static ArrayList<Return> returns = new ArrayList<Return>();
|
||||||
|
|
||||||
|
public static void init(){
|
||||||
|
addReturn(new ItemStack(Items.diamond), 5, 1, 2);
|
||||||
|
addReturn(new ItemStack(Items.iron_ingot), 30, 1, 5);
|
||||||
|
addReturn(new ItemStack(Items.gold_nugget), 60, 1, 8);
|
||||||
|
addReturn(new ItemStack(Items.gold_ingot), 35, 1, 3);
|
||||||
|
addReturn(new ItemStack(Items.ender_pearl), 10, 1, 2);
|
||||||
|
addReturn(new ItemStack(Items.emerald), 3, 1, 1);
|
||||||
|
addReturn(new ItemStack(Items.experience_bottle), 5, 3, 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addReturn(ItemStack stack, int chance, int minAmount, int maxAmount){
|
||||||
|
returns.add(new Return(stack, chance, minAmount, maxAmount));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Return extends WeightedRandom.Item{
|
||||||
|
|
||||||
|
public ItemStack returnItem;
|
||||||
|
public ItemStack input;
|
||||||
|
public int minAmount;
|
||||||
|
public int maxAmount;
|
||||||
|
|
||||||
|
public Return(ItemStack returnItem, int chance, int minAmount, int maxAmount){
|
||||||
|
super(chance);
|
||||||
|
this.returnItem = returnItem;
|
||||||
|
this.input = new ItemStack(InitBlocks.blockTreasureChest);
|
||||||
|
this.minAmount = minAmount;
|
||||||
|
this.maxAmount = maxAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Binary file not shown.
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Loading…
Reference in a new issue