mirror of
https://github.com/Ellpeck/NaturesAura.git
synced 2024-11-22 11:53:29 +01:00
gold tree stuff
This commit is contained in:
parent
17cc118c62
commit
c5ed74bfd5
15 changed files with 339 additions and 45 deletions
61
build.gradle
61
build.gradle
|
@ -7,73 +7,48 @@ buildscript {
|
|||
classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
|
||||
}
|
||||
}
|
||||
apply plugin: 'net.minecraftforge.gradle.forge'
|
||||
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
|
||||
|
||||
apply plugin: 'net.minecraftforge.gradle.forge'
|
||||
apply plugin: 'maven'
|
||||
|
||||
version = "1.0"
|
||||
group = "de.ellpeck.naturesaura" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||
group = "de.ellpeck.naturesaura"
|
||||
archivesBaseName = "naturesaura"
|
||||
|
||||
sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
|
||||
sourceCompatibility = targetCompatibility = '1.8'
|
||||
compileJava {
|
||||
sourceCompatibility = targetCompatibility = '1.8'
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
url "http://dvs1.progwml6.com/files/maven"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
deobfCompile "mezz.jei:jei_1.12.2:4.13.1.220"
|
||||
}
|
||||
|
||||
|
||||
minecraft {
|
||||
version = "1.12.2-14.23.5.2768"
|
||||
runDir = "run"
|
||||
|
||||
// the mappings can be changed at any time, and must be in the following format.
|
||||
// snapshot_YYYYMMDD snapshot are built nightly.
|
||||
// stable_# stables are built at the discretion of the MCP team.
|
||||
// Use non-default mappings at your own risk. they may not always work.
|
||||
// simply re-run your setup task after changing the mappings to update your workspace.
|
||||
mappings = "snapshot_20180720"
|
||||
// makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
|
||||
|
||||
runDir = "run"
|
||||
makeObfSourceJar = false
|
||||
|
||||
replaceIn "NaturesAura.java"
|
||||
replace "@VERSION@", project.version.toString()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// you may put jars on which you depend on in ./libs
|
||||
// or you may define them like so..
|
||||
//compile "some.group:artifact:version:classifier"
|
||||
//compile "some.group:artifact:version"
|
||||
|
||||
// real examples
|
||||
//compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env
|
||||
//compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env
|
||||
|
||||
// the 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime.
|
||||
//provided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
|
||||
|
||||
// the deobf configurations: 'deobfCompile' and 'deobfProvided' are the same as the normal compile and provided,
|
||||
// except that these dependencies get remapped to your current MCP mappings
|
||||
//deobfCompile 'com.mod-buildcraft:buildcraft:6.0.8:dev'
|
||||
//deobfProvided 'com.mod-buildcraft:buildcraft:6.0.8:dev'
|
||||
|
||||
// for more info...
|
||||
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
|
||||
// http://www.gradle.org/docs/current/userguide/dependency_management.html
|
||||
|
||||
}
|
||||
|
||||
processResources {
|
||||
// this will ensure that this task is redone when the versions change.
|
||||
inputs.property "version", project.version
|
||||
inputs.property "mcversion", project.minecraft.version
|
||||
|
||||
// replace stuff in mcmod.info, nothing else
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include 'mcmod.info'
|
||||
|
||||
// replace version and mcversion
|
||||
expand 'version': project.version, 'mcversion': project.minecraft.version
|
||||
}
|
||||
|
||||
// copy everything else except the mcmod.info
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
exclude 'mcmod.info'
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ package de.ellpeck.naturesaura;
|
|||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -23,4 +25,12 @@ public final class Helper {
|
|||
return tiles;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static int blendColors(int c1, int c2, float ratio) {
|
||||
int a = (int) ((c1 >> 24 & 0xFF) * ratio + (c2 >> 24 & 0xFF) * (1 - ratio));
|
||||
int r = (int) ((c1 >> 16 & 0xFF) * ratio + (c2 >> 16 & 0xFF) * (1 - ratio));
|
||||
int g = (int) ((c1 >> 8 & 0xFF) * ratio + (c2 >> 8 & 0xFF) * (1 - ratio));
|
||||
int b = (int) ((c1 & 0xFF) * ratio + (c2 & 0xFF) * (1 - ratio));
|
||||
return ((a & 255) << 24) | ((r & 255) << 16) | ((g & 255) << 8) | (b & 255);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,176 @@
|
|||
package de.ellpeck.naturesaura.blocks;
|
||||
|
||||
import de.ellpeck.naturesaura.Helper;
|
||||
import de.ellpeck.naturesaura.NaturesAura;
|
||||
import de.ellpeck.naturesaura.items.ModItems;
|
||||
import de.ellpeck.naturesaura.reg.*;
|
||||
import net.minecraft.block.BlockLeaves;
|
||||
import net.minecraft.block.BlockPlanks;
|
||||
import net.minecraft.block.properties.PropertyInteger;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.renderer.color.IBlockColor;
|
||||
import net.minecraft.client.renderer.color.IItemColor;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeColorHelper;
|
||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockGoldenLeaves extends BlockLeaves implements
|
||||
IModItem, IModelProvider, IColorProvidingBlock, IColorProvidingItem {
|
||||
|
||||
private static final int HIGHEST_STAGE = 3;
|
||||
private static final PropertyInteger STAGE = PropertyInteger.create("stage", 0, HIGHEST_STAGE);
|
||||
|
||||
public BlockGoldenLeaves() {
|
||||
this.leavesFancy = true;
|
||||
ModRegistry.addItemOrBlock(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getBaseName() {
|
||||
return "golden_leaves";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldAddCreative() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPreInit(FMLPreInitializationEvent event) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onInit(FMLInitializationEvent event) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPostInit(FMLPostInitializationEvent event) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ItemStack, ModelVariant> getModelLocations() {
|
||||
return Collections.singletonMap(new ItemStack(this), new ModelVariant(new ResourceLocation(NaturesAura.MOD_ID, this.getBaseName()), "inventory"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemStack> onSheared(ItemStack item, IBlockAccess world, BlockPos pos, int fortune) {
|
||||
NonNullList<ItemStack> drops = NonNullList.create();
|
||||
this.getDrops(drops, world, pos, world.getBlockState(pos), fortune);
|
||||
return drops;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BlockStateContainer createBlockState() {
|
||||
return new BlockStateContainer(this, CHECK_DECAY, DECAYABLE, STAGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBlockState getStateFromMeta(int meta) {
|
||||
boolean check = (meta & 4) != 0; // 4th bit
|
||||
boolean decay = (meta & 8) != 0; // 3rd bit
|
||||
int stage = meta & HIGHEST_STAGE; // 1st and 2nd bit
|
||||
|
||||
return this.getDefaultState().withProperty(CHECK_DECAY, check).withProperty(DECAYABLE, decay).withProperty(STAGE, stage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetaFromState(IBlockState state) {
|
||||
boolean check = state.getValue(CHECK_DECAY);
|
||||
boolean decay = state.getValue(DECAYABLE);
|
||||
|
||||
return (check ? 1 : 0) << 3 | (decay ? 1 : 0) << 2 | state.getValue(STAGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginLeavesDecay(IBlockState state, World world, BlockPos pos) {
|
||||
if (!state.getValue(CHECK_DECAY) && state.getValue(DECAYABLE)) {
|
||||
world.setBlockState(pos, state.withProperty(CHECK_DECAY, true), 4);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockPlanks.EnumType getWoodType(int meta) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IBlockColor getBlockColor() {
|
||||
return (state, worldIn, pos, tintIndex) -> {
|
||||
int color = 0xF2FF00;
|
||||
if (state != null && worldIn != null && pos != null) {
|
||||
int foliage = BiomeColorHelper.getFoliageColorAtPos(worldIn, pos);
|
||||
return Helper.blendColors(color, foliage, state.getValue(STAGE) / (float) HIGHEST_STAGE);
|
||||
} else {
|
||||
return color;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IItemColor getItemColor() {
|
||||
return (stack, tintIndex) -> 0xF2FF00;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getDrops(NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
|
||||
Random rand = world instanceof World ? ((World) world).rand : RANDOM;
|
||||
if (state.getValue(STAGE) < HIGHEST_STAGE) {
|
||||
if (rand.nextFloat() >= 0.75F) {
|
||||
drops.add(new ItemStack(ModItems.GOLD_FIBER));
|
||||
}
|
||||
} else if (rand.nextFloat() >= 0.25F) {
|
||||
drops.add(new ItemStack(ModItems.GOLD_LEAF));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) {
|
||||
super.updateTick(worldIn, pos, state, rand);
|
||||
if (!worldIn.isRemote) {
|
||||
int stage = state.getValue(STAGE);
|
||||
if (stage < HIGHEST_STAGE) {
|
||||
worldIn.setBlockState(pos, state.withProperty(STAGE, stage + 1));
|
||||
}
|
||||
|
||||
if (stage > 1) {
|
||||
EnumFacing facing = EnumFacing.random(rand);
|
||||
convert(worldIn, pos.offset(facing));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean convert(World world, BlockPos pos) {
|
||||
IBlockState state = world.getBlockState(pos);
|
||||
if (state.getBlock() == Blocks.LEAVES || state.getBlock() == Blocks.LEAVES2) {
|
||||
if (!world.isRemote) {
|
||||
world.setBlockState(pos, ModBlocks.GOLDEN_LEAVES.getDefaultState()
|
||||
.withProperty(CHECK_DECAY, state.getValue(CHECK_DECAY))
|
||||
.withProperty(DECAYABLE, state.getValue(DECAYABLE)));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -13,6 +13,8 @@ public class BlockNatureAltar extends BlockContainerImpl {
|
|||
|
||||
public BlockNatureAltar() {
|
||||
super(Material.ROCK, "nature_altar", TileEntityNatureAltar.class, "nature_altar");
|
||||
this.setHardness(4F);
|
||||
this.setHarvestLevel("pickaxe", 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -12,4 +12,5 @@ public final class ModBlocks {
|
|||
public static final Block ANCIENT_SAPLING = new BlockAncientSapling();
|
||||
public static final Block NATURE_ALTAR = new BlockNatureAltar();
|
||||
public static final Block DECAYED_LEAVES = new BlockDecayedLeaves();
|
||||
public static final Block GOLDEN_LEAVES = new BlockGoldenLeaves();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package de.ellpeck.naturesaura.items;
|
||||
|
||||
import de.ellpeck.naturesaura.blocks.BlockGoldenLeaves;
|
||||
import de.ellpeck.naturesaura.reg.IColorProvidingItem;
|
||||
import net.minecraft.client.renderer.color.IItemColor;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumActionResult;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class ItemGoldFiber extends ItemImpl implements IColorProvidingItem {
|
||||
|
||||
public ItemGoldFiber() {
|
||||
super("gold_fiber");
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemColor getItemColor() {
|
||||
return (stack, tintIndex) -> 0xF2FF00;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
|
||||
ItemStack stack = player.getHeldItem(hand);
|
||||
if (BlockGoldenLeaves.convert(worldIn, pos)) {
|
||||
if (!worldIn.isRemote) {
|
||||
stack.shrink(1);
|
||||
}
|
||||
return EnumActionResult.SUCCESS;
|
||||
}
|
||||
return EnumActionResult.PASS;
|
||||
}
|
||||
}
|
|
@ -5,4 +5,6 @@ import net.minecraft.item.Item;
|
|||
public final class ModItems {
|
||||
|
||||
public static final Item EYE = new ItemEye();
|
||||
public static final Item GOLD_FIBER = new ItemGoldFiber();
|
||||
public static final Item GOLD_LEAF = new ItemImpl("gold_leaf");
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": {
|
||||
"model": "minecraft:leaves",
|
||||
"textures": {
|
||||
"all": "minecraft:blocks/leaves_oak"
|
||||
},
|
||||
"transform": "forge:default-block"
|
||||
},
|
||||
"variants": {
|
||||
"normal": [{}],
|
||||
"inventory": [{}],
|
||||
"decayable": {
|
||||
"true": {},
|
||||
"false": {}
|
||||
},
|
||||
"check_decay": {
|
||||
"true": {},
|
||||
"false": {}
|
||||
},
|
||||
"stage": {
|
||||
"0": {},
|
||||
"1": {},
|
||||
"2": {},
|
||||
"3": {}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,5 +6,8 @@ tile.naturesaura.ancient_leaves.name=Ancient Leaves
|
|||
tile.naturesaura.ancient_sapling.name=Ancient Sapling
|
||||
tile.naturesaura.nature_altar.name=Natural Altar
|
||||
tile.naturesaura.decayed_leaves.name=Decayed Leaves
|
||||
tile.naturesaura.golden_leaves.name=Golden Leaves
|
||||
|
||||
item.naturesaura.eye.name=Environmental Eye
|
||||
item.naturesaura.gold_fiber.name=Brilliant Fiber
|
||||
item.naturesaura.gold_leaf.name=Gold Leaf
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "naturesaura:items/gold_fiber"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "naturesaura:items/gold_leaf"
|
||||
}
|
||||
}
|
23
src/main/resources/assets/naturesaura/recipes/eye.json
Normal file
23
src/main/resources/assets/naturesaura/recipes/eye.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"type": "forge:ore_shaped",
|
||||
"pattern": [
|
||||
"WLW",
|
||||
"LEL",
|
||||
"WLW"
|
||||
],
|
||||
"key": {
|
||||
"E": {
|
||||
"item": "minecraft:spider_eye"
|
||||
},
|
||||
"L": {
|
||||
"item": "naturesaura:gold_leaf"
|
||||
},
|
||||
"W": {
|
||||
"type": "forge:ore_dict",
|
||||
"ore": "logWood"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "naturesaura:eye"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"type": "forge:ore_shaped",
|
||||
"pattern": [
|
||||
"LNL",
|
||||
"NGN",
|
||||
"LNL"
|
||||
],
|
||||
"key": {
|
||||
"N": {
|
||||
"type": "forge:ore_dict",
|
||||
"ore": "nuggetGold"
|
||||
},
|
||||
"G": {
|
||||
"item": "minecraft:tallgrass",
|
||||
"data": 1
|
||||
},
|
||||
"L": {
|
||||
"type": "forge:ore_dict",
|
||||
"ore": "treeLeaves"
|
||||
}
|
||||
},
|
||||
"result": {
|
||||
"item": "naturesaura:gold_fiber",
|
||||
"count": 4
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 399 B |
Binary file not shown.
After Width: | Height: | Size: 688 B |
Loading…
Reference in a new issue