8 juil. 2015, 16:20

Bonjour à tous.
Je me suis mis en tête de rajouter une fonctionalité a la gun powder.
J’ai donc rajouté un item, Gunpowder Raffiné. Comme effet, lorsqu’on right click dessus sur le sol, il y a une redstone, qui a pour effetd 'exploser au contact du feu

Item

​package eryah.usefulthings.init;

import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import eryah.usefulthings.Reference;
import eryah.usefulthings.UsefulthingsMod;

public class RafinedGunpowder extends Item {

public static Item rafined_gunpowder;

public static void init(){
rafined_gunpowder = new RafinedGunpowder().setUnlocalizedName("rafined_gunpowder").setCreativeTab(UsefulthingsMod.UTTab);
}

public static void register()
{
GameRegistry.registerItem(rafined_gunpowder, rafined_gunpowder.getUnlocalizedName().substring(5));
}

public static void registerRenders()
{
registerRender(rafined_gunpowder);
}

public static void registerRender(Item item)
{
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
}

public boolean onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ)
   {
       boolean flag = worldIn.getBlockState(pos).getBlock().isReplaceable(worldIn, pos);
       BlockPos blockpos1 = flag ? pos : pos.offset(side);

       if (!playerIn.canPlayerEdit(blockpos1, side, stack))
       {
           return false;
       }
       else
       {
           Block block = worldIn.getBlockState(blockpos1).getBlock();

           if (!worldIn.canBlockBePlaced(block, blockpos1, false, side, (Entity)null, stack))
           {
               return false;
           }
           else if (Blocks.redstone_wire.canPlaceBlockAt(worldIn, blockpos1))
           {
               –stack.stackSize;
               worldIn.setBlockState(blockpos1, Blocks.redstone_wire.getDefaultState());
               return true;
           }
           else
           {
               return false;
           }
       }

   }
}

Poudre

​package eryah.usefulthings.blocks;

import java.util.ArrayList;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;

import com.google.common.collect.Lists;
import com.google.common.collect.Sets;

import net.minecraft.block.Block;
import net.minecraft.block.BlockRedstoneDiode;
import net.minecraft.block.BlockRedstoneRepeater;
import net.minecraft.block.BlockRedstoneWire;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.EnumWorldBlockLayer;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import eryah.usefulthings.Reference;
import eryah.usefulthings.UsefulthingsMod;
import eryah.usefulthings.init.RafinedGunpowder;

public class BRefinedGunpowder extends Block {

public static final PropertyBool NORTH = PropertyBool.create("north");
    public static final PropertyBool EAST = PropertyBool.create("east");
    public static final PropertyBool SOUTH = PropertyBool.create("south");
    public static final PropertyBool WEST = PropertyBool.create("west");
    public static Item rafined_gunpowder_wire;   

    public BRefinedGunpowder()
    {
        super(Material.circuits);
        this.setDefaultState(this.blockState.getBaseState().withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)));
        this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.15625F, 1.0F);
        this.setTickRandomly(true);
    }

    public static void init(){
rafined_gunpowder_wire = new RafinedGunpowder().setUnlocalizedName("rafined_gunpowder_wire").setCreativeTab(UsefulthingsMod.UTTab);
}

public static void register()
{
GameRegistry.registerItem(rafined_gunpowder_wire, rafined_gunpowder_wire.getUnlocalizedName().substring(5));
}

public static void registerRenders()
{
registerRender(rafined_gunpowder_wire);
}

public static void registerRender(Item item)
{
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
}

    public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state)
    {
        return null;
    }

    public boolean isOpaqueCube()
    {
        return false;
    }

    public boolean isFullCube()
    {
        return false;
    }

    @SideOnly(Side.CLIENT)
    public EnumWorldBlockLayer getBlockLayer()
    {
        return EnumWorldBlockLayer.TRANSLUCENT;
    }

    public Item getItemDropped(IBlockState state, Random rand, int fortune)
    {
        return Items.string;
    }

    @SideOnly(Side.CLIENT)
    public Item getItem(World worldIn, BlockPos pos)
    {
        return Items.string;
    }

    protected BlockState createBlockState()
    {
        return new BlockState(this, new IProperty[] {NORTH, EAST, WEST, SOUTH});
    }

@Override
public int getFlammability(IBlockAccess world, BlockPos pos, EnumFacing face) {
return 200;
}

@Override
public boolean isBurning(IBlockAccess world, BlockPos pos) {
return false;
}

public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand, Entity entity) {
if(isBurning(worldIn, pos)); {
worldIn.createExplosion(entity, 0.5D, 0.5D, 0.5D, 0.5F, true);
}
}

}

Déso, bug d’édition
Donc, le problème, bah sa n’explose pas, et surtout, sa a l’apparence de la redstone, sauf que je voudrait pas que ce soit de la redstone 😞


PS : Je n’ai pas utilisé l’item pour placer le block