Jump to content

[SOLVED] =+--1.12.2--+= .Custom furnace glitch.


Recommended Posts

Posted (edited)

So I've created a custom furnace and it works like I expected it to, until I took out the output. When I remove the output, it just stops smelting.

Block.class:

Spoiler

package galileogalilei.ironmanarmormod.blocks;

import java.util.Random;

import galileogalilei.ironmanarmormod.Main;
import galileogalilei.ironmanarmormod.Reference;
import galileogalilei.ironmanarmormod.blocks.tileentities.TileEntityElectricFusionReactor;
import galileogalilei.ironmanarmormod.init.BlockInit;
import net.minecraft.block.BlockHorizontal;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.Mirror;
import net.minecraft.util.Rotation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class BlockElectricFusionReactor extends BlockBase
{
    public static final PropertyDirection FACING = BlockHorizontal.FACING;
    public static final PropertyBool BURNING = PropertyBool.create("burning");
    
    public BlockElectricFusionReactor(String name) 
    {
        super(name, Material.IRON);
        setHardness(8.0f);
        setResistance(25.0f);
        setCreativeTab(Main.BLOCKS);
        setHarvestLevel("pickaxe", 2);
        setLightLevel(9.0f);
        setSoundType(SoundType.METAL);
        this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(BURNING, false));
    }
    
    @Override
    public Item getItemDropped(IBlockState state, Random rand, int fortune) 
    {
        return Item.getItemFromBlock(BlockInit.ELECTRIC_FUSION_REACTOR);
    }
    
    @Override
    public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state)
    {
        return new ItemStack(BlockInit.ELECTRIC_FUSION_REACTOR);
    }
    
    @Override
    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) 
    {
        if(!worldIn.isRemote)
        {
            playerIn.openGui(Main.instance, Reference.GUI_ELECTRIC_FUSION_REACTOR, worldIn, pos.getX(), pos.getY(), pos.getZ());
        }
        
        return true;
    }
    
    @Override
    public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) 
    {
        if (!worldIn.isRemote) 
        {
            IBlockState north = worldIn.getBlockState(pos.north());
            IBlockState south = worldIn.getBlockState(pos.south());
            IBlockState west = worldIn.getBlockState(pos.west());
            IBlockState east = worldIn.getBlockState(pos.east());
            EnumFacing face = (EnumFacing)state.getValue(FACING);

            if (face == EnumFacing.NORTH && north.isFullBlock() && !south.isFullBlock()) face = EnumFacing.SOUTH;
            else if (face == EnumFacing.SOUTH && south.isFullBlock() && !north.isFullBlock()) face = EnumFacing.NORTH;
            else if (face == EnumFacing.WEST && west.isFullBlock() && !east.isFullBlock()) face = EnumFacing.EAST;
            else if (face == EnumFacing.EAST && east.isFullBlock() && !west.isFullBlock()) face = EnumFacing.WEST;
            worldIn.setBlockState(pos, state.withProperty(FACING, face), 2);
        }
    }
    
    public static void setState(boolean active, World worldIn, BlockPos pos) 
    {
        IBlockState state = worldIn.getBlockState(pos);
        TileEntity tileentity = worldIn.getTileEntity(pos);
        
        if(active) worldIn.setBlockState(pos, BlockInit.ELECTRIC_FUSION_REACTOR.getDefaultState().withProperty(FACING, state.getValue(FACING)).withProperty(BURNING, true), 3);
        else worldIn.setBlockState(pos, BlockInit.ELECTRIC_FUSION_REACTOR.getDefaultState().withProperty(FACING, state.getValue(FACING)).withProperty(BURNING, false), 3);
        
        if(tileentity != null) 
        {
            tileentity.validate();
            worldIn.setTileEntity(pos, tileentity);
        }
    }
    
    @Override
    public boolean hasTileEntity(IBlockState state) 
    {
        return true;
    }
    
    @Override
    public TileEntity createTileEntity(World world, IBlockState state) 
    {
        return new TileEntityElectricFusionReactor();
    }
    
    @Override
    public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) 
    {
        return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite());
    }
    
    @Override
    public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) 
    {
        worldIn.setBlockState(pos, this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()), 2);
    }
    
    @Override
    public EnumBlockRenderType getRenderType(IBlockState state) 
    {
        return EnumBlockRenderType.MODEL;
    }
    
    @Override
    public IBlockState withRotation(IBlockState state, Rotation rot)
    {
        return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING)));
    }
    
    @Override
    public IBlockState withMirror(IBlockState state, Mirror mirrorIn) 
    {
        return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING)));
    }
    
    @Override
    protected BlockStateContainer createBlockState() 
    {
        return new BlockStateContainer(this, new IProperty[] {BURNING,FACING});
    }
    
    @Override
    public IBlockState getStateFromMeta(int meta) 
    {
        EnumFacing facing = EnumFacing.getFront(meta);
        if(facing.getAxis() == EnumFacing.Axis.Y) facing = EnumFacing.NORTH;
        return this.getDefaultState().withProperty(FACING, facing);
    }
    
    @Override
    public int getMetaFromState(IBlockState state) 
    {
        return ((EnumFacing)state.getValue(FACING)).getIndex();
    }    
}

 

Recipe.class

Spoiler

package galileogalilei.ironmanarmormod.blocks.recipes;

import java.util.Map;
import java.util.Map.Entry;

import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Maps;
import com.google.common.collect.Table;

import galileogalilei.ironmanarmormod.init.BlockInit;
import galileogalilei.ironmanarmormod.init.ItemInit;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;

public class FusionReactorRecipes 
{    
    private static final FusionReactorRecipes INSTANCE = new FusionReactorRecipes();
    private final Table<ItemStack, ItemStack, ItemStack> smeltingList = HashBasedTable.<ItemStack, ItemStack, ItemStack>create();
    private final Map<ItemStack, Float> experienceList = Maps.<ItemStack, Float>newHashMap();
    
    public static FusionReactorRecipes getInstance()
    {
        return INSTANCE;
    }
    
    private FusionReactorRecipes() 
    {
        addSinteringRecipe(new ItemStack(Items.DIAMOND), new ItemStack(ItemInit.VIBRANIUM_INGOT), new ItemStack(ItemInit.VIBRANIUM_CORE), 5.0F);
    }

    
    public void addSinteringRecipe(ItemStack input1, ItemStack input2, ItemStack result, float experience) 
    {
        if(getSinteringResult(input1, input2) != ItemStack.EMPTY) return;
        this.smeltingList.put(input1, input2, result);
        this.experienceList.put(result, Float.valueOf(experience));
    }
    
    public ItemStack getSinteringResult(ItemStack input1, ItemStack input2) 
    {
        for(Entry<ItemStack, Map<ItemStack, ItemStack>> entry : this.smeltingList.columnMap().entrySet()) 
        {
            if(this.compareItemStacks(input1, (ItemStack)entry.getKey())) 
            {
                for(Entry<ItemStack, ItemStack> ent : entry.getValue().entrySet()) 
                {
                    if(this.compareItemStacks(input2, (ItemStack)ent.getKey())) 
                    {
                        return (ItemStack)ent.getValue();
                    }
                }
            }
        }
        return ItemStack.EMPTY;
    }
    
    private boolean compareItemStacks(ItemStack stack1, ItemStack stack2)
    {
        return stack2.getItem() == stack1.getItem() && (stack2.getMetadata() == 32767 || stack2.getMetadata() == stack1.getMetadata());
    }
    
    public Table<ItemStack, ItemStack, ItemStack> getDualSmeltingList() 
    {
        return this.smeltingList;
    }
    
    public float getReactingExperience(ItemStack stack)
    {
        for (Entry<ItemStack, Float> entry : this.experienceList.entrySet()) 
        {
            if(this.compareItemStacks(stack, (ItemStack)entry.getKey())) 
            {
                return ((Float)entry.getValue()).floatValue();
            }
        }
        return 0.0F;
    }
}

TileEntity.class

Spoiler

package galileogalilei.ironmanarmormod.blocks.tileentities;

import galileogalilei.ironmanarmormod.blocks.BlockElectricFusionReactor;
import galileogalilei.ironmanarmormod.blocks.recipes.FusionReactorRecipes;
import galileogalilei.ironmanarmormod.energy.ImamEnergyStorage;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ITickable;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.ItemStackHandler;

public class TileEntityElectricFusionReactor extends TileEntity implements ITickable
{
    int tick;
    private ImamEnergyStorage storage = new ImamEnergyStorage(25000, 20, 0, 0);
    public ItemStackHandler handler = new ItemStackHandler(3);
    private String customName;
    public int cookTime, energy = storage.getEnergyStored();
    private ItemStack smelting = ItemStack.EMPTY;
    
    @Override
    public boolean hasCapability(Capability<?> capability, EnumFacing facing) 
    {
        if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) return true;
        if(capability == CapabilityEnergy.ENERGY) return true;
        return super.hasCapability(capability, facing);
    }
    
    @Override
    public <T> T getCapability(Capability<T> capability, EnumFacing facing) 
    {
        if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) return (T) this.handler;
        if(capability == CapabilityEnergy.ENERGY) return (T)this.storage;
        return super.getCapability(capability, facing);
    }
    
    @Override
    public NBTTagCompound writeToNBT(NBTTagCompound compound)
    {
        super.writeToNBT(compound);
        compound.setTag("Inventory", this.handler.serializeNBT());
        compound.setInteger("CookTime", cookTime);
        compound.setInteger("GuiEnergy", energy);
        this.storage.writeToNBT(compound);
        compound.setString("Name", getDisplayName().toString());
        return compound;
    }
    
    @Override
    public void readFromNBT(NBTTagCompound compound) 
    {
        super.readFromNBT(compound);
        this.handler.deserializeNBT(compound.getCompoundTag("Inventory"));
        this.storage.readFromNBT(compound);
        this.cookTime = compound.getInteger("CookTime");
        this.energy = compound.getInteger("GuiEnergy");
        if(compound.hasKey("Name")) this.customName = compound.getString("Name");
    }
    
    @Override
    public void update()
    {
        tick++;
        if(tick > 20) tick = 0;
        
        if(tick == 0)
        {
            System.out.println(Integer.toString(energy));
        }
        
        if(world.isBlockPowered(pos)) energy += 100;
        
        ItemStack[] inputs = new ItemStack[] {handler.getStackInSlot(0), handler.getStackInSlot(1)};
        
        if(energy >= 20)
        {
            if(cookTime > 0)
            {
                energy -= 20;
                cookTime++;
                BlockElectricFusionReactor.setState(true, world, pos);
                if(cookTime == 100)
                {
                    if(handler.getStackInSlot(2).getCount() > 0)
                    {
                        handler.getStackInSlot(2).grow(1);
                    }
                    else
                    {
                        handler.insertItem(2, smelting, false);
                    }
                    smelting = ItemStack.EMPTY;
                    cookTime = 0;
                    return;
                }
            }
            else
            {
                if(!inputs[0].isEmpty() && !inputs[1].isEmpty())
                {
                    ItemStack output = FusionReactorRecipes.getInstance().getSinteringResult(inputs[0], inputs[1]);
                    if(!output.isEmpty())
                    {
                        smelting = output;
                        cookTime++;
                        inputs[0].shrink(1);
                        inputs[1].shrink(1);
                        handler.setStackInSlot(0, inputs[0]);
                        handler.setStackInSlot(1, inputs[1]);
                        energy -= 20;
                    }
                }
            }
        }
    }
    
    @Override
    public ITextComponent getDisplayName() 
    {
        return new TextComponentTranslation("container.electric_fusion_reactor");
    }
    
    public int getEnergyStored()
    {
        return this.energy;
    }
    
    public int getMaxEnergyStored()
    {
        return this.storage.getMaxEnergyStored();
    }
    
    public boolean isUsableByPlayer(EntityPlayer player) 
    {
        return this.world.getTileEntity(this.pos) != this ? false : player.getDistanceSq((double)this.pos.getX() + 0.5D, (double)this.pos.getY() + 0.5D, (double)this.pos.getZ() + 0.5D) <= 64.0D;
    }
    
    public int getField(int id) 
    {
        switch(id) 
        {
        case 0:
            return this.cookTime;
        case 1:
            return this.energy;
        default:
            return 0;
        }
    }

    public void setField(int id, int value) 
    {
        switch(id) 
        {
        case 0:
            this.cookTime = value;
            break;
        case 1:
            this.energy = value;
        }
    }
}

Container.class

Spoiler

package galileogalilei.ironmanarmormod.blocks.containers;

import galileogalilei.ironmanarmormod.blocks.recipes.FusionReactorRecipes;
import galileogalilei.ironmanarmormod.blocks.tileentities.TileEntityElectricFusionReactor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IContainerListener;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.SlotItemHandler;

public class ContainerElectricFusionReactor extends Container
{
    private final TileEntityElectricFusionReactor tileentity;
    private int cookTime, energy;
    
    public ContainerElectricFusionReactor(InventoryPlayer player, TileEntityElectricFusionReactor tileentity) 
    {
        this.tileentity = tileentity;
        IItemHandler handler = tileentity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null);
        
        this.addSlotToContainer(new SlotItemHandler(handler, 0, 44, 21));
        this.addSlotToContainer(new SlotItemHandler(handler, 1, 44, 50));
        this.addSlotToContainer(new SlotItemHandler(handler, 2, 97, 36));
        
        for(int y = 0; y < 3; y++)
        {
            for(int x = 0; x < 9; x++)
            {
                this.addSlotToContainer(new Slot(player, x + y*9 + 9, 8 + x*18, 84 + y*18));
            }
        }
        
        for(int x = 0; x < 9; x++)
        {
            this.addSlotToContainer(new Slot(player, x, 8 + x * 18, 142));
        }
    }
    
    @Override
    public boolean canInteractWith(EntityPlayer playerIn) 
    {
        return this.tileentity.isUsableByPlayer(playerIn);
    }
    
    @Override
    public void updateProgressBar(int id, int data) 
    {
        this.tileentity.setField(id, data);
    }
    
    @Override
    public void detectAndSendChanges() 
    {
        super.detectAndSendChanges();
        
        for(int i = 0; i < this.listeners.size(); ++i) 
        {
            IContainerListener listener = (IContainerListener)this.listeners.get(i);
            
            if(this.cookTime != this.tileentity.getField(0)) listener.sendWindowProperty(this, 0, this.tileentity.getField(0));
            if(this.energy != this.tileentity.getField(1)) listener.sendWindowProperty(this, 1, this.tileentity.getField(1));
        }
        
        this.cookTime = this.tileentity.getField(0);
        this.energy = this.tileentity.getField(1);
    }
    
    @Override
    public ItemStack transferStackInSlot(EntityPlayer playerIn, int index) 
    {
        ItemStack stack = ItemStack.EMPTY;
        Slot slot = (Slot)this.inventorySlots.get(index);
        
        if(slot != null && slot.getHasStack()) 
        {
            ItemStack stack1 = slot.getStack();
            stack = stack1.copy();
            
            if(index == 2) 
            {
                if(!this.mergeItemStack(stack1, 4, 40, true)) return ItemStack.EMPTY;
                slot.onSlotChange(stack1, stack);
            }
            else if(index != 2 && index != 1 && index != 0) 
            {        
                Slot slot1 = (Slot)this.inventorySlots.get(index + 1);
                
                if(!FusionReactorRecipes.getInstance().getSinteringResult(stack1, slot1.getStack()).isEmpty())
                {
                    if(!this.mergeItemStack(stack1, 0, 2, false)) 
                    {
                        return ItemStack.EMPTY;
                    }
                    else if(index >= 4 && index < 31)
                    {
                        if(!this.mergeItemStack(stack1, 31, 40, false)) return ItemStack.EMPTY;
                    }
                    else if(index >= 31 && index < 40 && !this.mergeItemStack(stack1, 4, 31, false))
                    {
                        return ItemStack.EMPTY;
                    }
                }
            } 
            else if(!this.mergeItemStack(stack1, 4, 40, false)) 
            {
                return ItemStack.EMPTY;
            }
            if(stack1.isEmpty())
            {
                slot.putStack(ItemStack.EMPTY);
            }
            else
            {
                slot.onSlotChanged();

            }
            if(stack1.getCount() == stack.getCount()) return ItemStack.EMPTY;
            slot.onTake(playerIn, stack1);
        }
        return stack;
    }
}

Gui.class

Spoiler

package galileogalilei.ironmanarmormod.blocks.guis;

import galileogalilei.ironmanarmormod.Reference;
import galileogalilei.ironmanarmormod.blocks.containers.ContainerElectricFusionReactor;
import galileogalilei.ironmanarmormod.blocks.tileentities.TileEntityElectricFusionReactor;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;

public class GuiElectricFusionReactor extends GuiContainer
{
    private static final ResourceLocation TEXTURES = new ResourceLocation(Reference.MODID + ":textures/gui/electric_fusion_reactor.png");
    private final InventoryPlayer player;
    private final TileEntityElectricFusionReactor tileentity;
    
    public GuiElectricFusionReactor(InventoryPlayer player, TileEntityElectricFusionReactor tileentity) 
    {
        super(new ContainerElectricFusionReactor(player, tileentity));
        this.player = player;
        this.tileentity = tileentity;
    }
    
    @Override
    protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) 
    {
        String tileName = this.tileentity.getDisplayName().getUnformattedText();
        this.fontRenderer.drawString(tileName, (this.xSize / 2 - this.fontRenderer.getStringWidth(tileName) / 2) -5, 6, 4210752);
        this.fontRenderer.drawString(this.player.getDisplayName().getUnformattedText(), 7, this.ySize - 96 + 2, 4210752);
        this.fontRenderer.drawString(Integer.toString(this.tileentity.getEnergyStored()), 115, 72, 4210752);
    }
    
    @Override
    protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY)
    {
        GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
        this.mc.getTextureManager().bindTexture(TEXTURES);
        this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize);
        
        int l = this.getCookProgressScaled(24);
        this.drawTexturedModalRect(this.guiLeft + 63, this.guiTop + 36, 176, 14, l + 1, 16);
        
        int k = this.getEnergyStoredScaled(75);
        this.drawTexturedModalRect(this.guiLeft + 152, this.guiTop + 7, 176, 32, 16, 76 - k);
    }
    
    private int getCookProgressScaled(int pixels)
    {
        int i = this.tileentity.cookTime;
        return i != 0 ? i * pixels / 100 : 0;
    }
    
    private int getEnergyStoredScaled(int pixels)
    {
        int i = this.tileentity.getEnergyStored();
        int j = this.tileentity.getMaxEnergyStored();
        return i != 0 && j != 0 ? i * pixels / j : 0; 
    }
}

Machine/Block.class

Spoiler

package galileogalilei.ironmanarmormod.blocks.machines;

import java.util.Random;

import galileogalilei.ironmanarmormod.Main;
import galileogalilei.ironmanarmormod.Reference;
import galileogalilei.ironmanarmormod.blocks.BlockBase;
import galileogalilei.ironmanarmormod.blocks.tileentities.TileEntityElectricFusionReactor;
import galileogalilei.ironmanarmormod.init.BlockInit;
import net.minecraft.block.BlockHorizontal;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumBlockRenderType;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.Mirror;
import net.minecraft.util.Rotation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class BlockElectricFusionReactor extends BlockBase
{
    public static final PropertyDirection FACING = BlockHorizontal.FACING;
    public static final PropertyBool BURNING = PropertyBool.create("burning");
    
    public BlockElectricFusionReactor(String name) 
    {
        super(name, Material.IRON);
        setCreativeTab(Main.BLOCKS);
        this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(BURNING, false));
    }
    
    @Override
    public Item getItemDropped(IBlockState state, Random rand, int fortune) 
    {
        return Item.getItemFromBlock(BlockInit.ELECTRIC_FUSION_REACTOR);
    }
    
    @Override
    public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state)
    {
        return new ItemStack(BlockInit.ELECTRIC_FUSION_REACTOR);
    }
    
    @Override
    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) 
    {
        if(!worldIn.isRemote)
        {
            playerIn.openGui(Main.instance, Reference.GUI_ELECTRIC_FUSION_REACTOR, worldIn, pos.getX(), pos.getY(), pos.getZ());
        }
        
        return true;
    }
    
    @Override
    public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) 
    {
        if (!worldIn.isRemote) 
        {
            IBlockState north = worldIn.getBlockState(pos.north());
            IBlockState south = worldIn.getBlockState(pos.south());
            IBlockState west = worldIn.getBlockState(pos.west());
            IBlockState east = worldIn.getBlockState(pos.east());
            EnumFacing face = (EnumFacing)state.getValue(FACING);

            if (face == EnumFacing.NORTH && north.isFullBlock() && !south.isFullBlock()) face = EnumFacing.SOUTH;
            else if (face == EnumFacing.SOUTH && south.isFullBlock() && !north.isFullBlock()) face = EnumFacing.NORTH;
            else if (face == EnumFacing.WEST && west.isFullBlock() && !east.isFullBlock()) face = EnumFacing.EAST;
            else if (face == EnumFacing.EAST && east.isFullBlock() && !west.isFullBlock()) face = EnumFacing.WEST;
            worldIn.setBlockState(pos, state.withProperty(FACING, face), 2);
        }
    }
    
    public static void setState(boolean active, World worldIn, BlockPos pos) 
    {
        IBlockState state = worldIn.getBlockState(pos);
        TileEntity tileentity = worldIn.getTileEntity(pos);
        
        if(active) worldIn.setBlockState(pos, BlockInit.ELECTRIC_FUSION_REACTOR.getDefaultState().withProperty(FACING, state.getValue(FACING)).withProperty(BURNING, true), 3);
        else worldIn.setBlockState(pos, BlockInit.ELECTRIC_FUSION_REACTOR.getDefaultState().withProperty(FACING, state.getValue(FACING)).withProperty(BURNING, false), 3);
        
        if(tileentity != null) 
        {
            tileentity.validate();
            worldIn.setTileEntity(pos, tileentity);
        }
    }
    
    @Override
    public boolean hasTileEntity() 
    {
        return true;
    }
    
    @Override
    public boolean hasTileEntity(IBlockState state)
    {
        return true;
    }
    
    @Override
    public TileEntity createTileEntity(World world, IBlockState state)
    {
        return new TileEntityElectricFusionReactor();
    }
    
    @Override
    public IBlockState getStateForPlacement(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer, EnumHand hand) 
    {
        return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite());
    }
    
    @Override
    public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) 
    {
        worldIn.setBlockState(pos, this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()), 2);
    }
    
    @Override
    public void breakBlock(World worldIn, BlockPos pos, IBlockState state) 
    {
        TileEntityElectricFusionReactor tileentity = (TileEntityElectricFusionReactor)worldIn.getTileEntity(pos);
        worldIn.spawnEntity(new EntityItem(worldIn, pos.getX(), pos.getY(), pos.getZ(), tileentity.handler.getStackInSlot(0)));
        worldIn.spawnEntity(new EntityItem(worldIn, pos.getX(), pos.getY(), pos.getZ(), tileentity.handler.getStackInSlot(1)));
        worldIn.spawnEntity(new EntityItem(worldIn, pos.getX(), pos.getY(), pos.getZ(), tileentity.handler.getStackInSlot(2)));
        super.breakBlock(worldIn, pos, state);
    }
    
    @Override
    public EnumBlockRenderType getRenderType(IBlockState state) 
    {
        return EnumBlockRenderType.MODEL;
    }
    
    @Override
    public IBlockState withRotation(IBlockState state, Rotation rot)
    {
        return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING)));
    }
    
    @Override
    public IBlockState withMirror(IBlockState state, Mirror mirrorIn) 
    {
        return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING)));
    }
    
    @Override
    protected BlockStateContainer createBlockState() 
    {
        return new BlockStateContainer(this, new IProperty[] {BURNING,FACING});
    }
    
    @Override
    public IBlockState getStateFromMeta(int meta) 
    {
        EnumFacing facing = EnumFacing.getFront(meta);
        if(facing.getAxis() == EnumFacing.Axis.Y) facing = EnumFacing.NORTH;
        return this.getDefaultState().withProperty(FACING, facing);
    }
    
    @Override
    public int getMetaFromState(IBlockState state) 
    {
        return ((EnumFacing)state.getValue(FACING)).getIndex();
    }    
}

Can anyone help me please?

Edited by Noob_Master69
Posted

Because you (quite literally) stole the stack from your recipe manager.

 

ItemStack output = FusionReactorRecipes.getInstance().getSinteringResult(inputs[0], inputs[1]);
if(!output.isEmpty())
{
    smelting = output;

 

You have to call .copy() on it.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
11 hours ago, Draco18s said:

Because you (quite literally) stole the stack from your recipe manager.

 


ItemStack output = FusionReactorRecipes.getInstance().getSinteringResult(inputs[0], inputs[1]);
if(!output.isEmpty())
{
    smelting = output;

 

You have to call .copy() on it.

so like this?

if(!output.copy().isEmpty())
					{
						smelting = output;
						cookTime++;
						inputs[0].shrink(1);
						inputs[1].shrink(1);
						handler.setStackInSlot(0, inputs[0]);
						handler.setStackInSlot(1, inputs[1]);
						energy -= 20;
					}

 

Posted
8 hours ago, Noob_Master69 said:

if(!output.copy().isEmpty())

Like this spot fucking mattered. All this is is a check to see if the stack isn't empty. Copying it doesn't change anything. Honestly.

 

The other (useful) spot to do it would have been here:

8 hours ago, Noob_Master69 said:

ItemStack output = FusionReactorRecipes.getInstance().getSinteringResult(inputs[0], inputs[1]).copy();

 

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • In this article, we’ll dive into the “Temu Coupon Code [acs670886],” highlighting incredible savings opportunities designed just for you. Whether you're a seasoned bargain hunter searching for exclusive deals or a first-time shopper aiming for the best discounts, we’ve got you covered. Let’s transform every shopping experience into a budget-friendly journey! Use the exclusive code “acs670886” to unlock maximum savings in the USA, Canada, and European countries. Whether you're treating yourself or shopping for gifts, this code ensures unbeatable discounts. Don’t miss out on the Temu 70% off coupon and the Temu 70% off coupon code today. It’s time to embrace incredible deals and make your shopping spree both enjoyable and affordable! What Is The Coupon Code For Temu 70% Off? Both new and existing customers can reap incredible benefits with our Temu coupon 70% off on the Temu app and website. Use the 70% off Temu coupon and enjoy unparalleled savings. acs670886: Flat 70% off your total purchase. acs670886: Access a 70% coupon pack for multiple uses. acs670886: Enjoy 70% off as a new customer. acs670886: Extra 70% promo code benefits for existing customers. acs670886: Exclusive 70% coupon for users in the USA/Canada. Temu Coupon Code 70% Off For New Users In 2025 New users can get unmatched savings with the Temu coupon 70% off and Temu coupon code 70% off. Use our exclusive code to unlock these amazing benefits: acs670886: Flat 70% discount for first-time shoppers. acs670886: A 70% coupon bundle for new customers. acs670886: Up to 70% off for multiple uses. acs670886: Free shipping to 68 countries worldwide. acs670886: An additional 70% off on your first purchase. acs670886: Also Flat 70% off on selected items. How To Redeem The Temu Coupon 70% Off For New Customers? Follow these steps to use the Temu 70% coupon and Temu 70% off coupon code for new users: Visit the Temu website or download the app. Add items to your cart and proceed to checkout. Enter the coupon code “acs670886” in the promo field. Click “Apply” to see the discount. Complete the payment and enjoy your savings. Temu Coupon 70% Off For Existing Customers Existing users can also benefit from our Temu 70% coupon codes for existing users and Temu coupon 70% off for existing customers free shipping. Use “acs670886” to unlock these perks: acs670886: Extra 70% discount for loyal Temu users. acs670886: A 70% coupon bundle for multiple purchases. acs670886: Free gift with express shipping across the USA/Canada. acs670886: Additional 70% off on top of existing discounts. acs670886: Free shipping to 68 countries. acs670886: Flat 70% off on select purchases. How To Use The Temu Coupon Code 70% Off For Existing Customers? Follow these steps to use the Temu coupon code 70% off and Temu coupon 70% off code: Log in to your Temu account. Select items and add them to your cart. Enter the coupon code “acs670886” at checkout. Apply the code and confirm the discount. Proceed with payment and enjoy exclusive offers. Latest Temu Coupon 70% Off First Order First-time shoppers can enjoy maximum benefits with the Temu coupon code 70% off first order, Temu coupon code first order, and Temu coupon code 70% off first time user. Use the “acs670886” code to unlock these offers: acs670886: Flat 70% off on your first order. acs670886: A 70% Temu coupon pack for first-time buyers. acs670886: Up to 70% off for multiple uses. acs670886: Free shipping to 68 countries. acs670886: Additional 70% discount for first-time purchases. acs670886: Flat 70% off on selected items. How To Find The Temu Coupon Code 70% Off? Discover verified Temu coupon 70% off and Temu coupon 70% off Reddit deals by subscribing to the Temu newsletter. Check Temu’s social media pages for the latest promos or visit trusted coupon websites for regularly updated offers. Is Temu 70% Off Coupon Legit? Yes, the Temu 70% Off Coupon Legit and Temu 70% off coupon legit. Our code “acs670886” is tested, verified, and works globally. Use it confidently for discounts on both first and recurring orders. How Does Temu 70% Off Coupon Work? The Temu coupon code 70% off first-time user and Temu coupon codes 70% off offer instant savings. Enter the code at checkout to reduce your bill by 70% or more, ensuring great value on every purchase. How To Earn Temu 70% Coupons As A New Customer? Unlock the Temu coupon code 70% off and 70% off Temu coupon code by signing up for Temu’s rewards program. Earn additional discounts through referrals and promotional activities. What Are The Advantages Of Using The Temu Coupon 70% Off? Save 70% on your first order. Access a 70% bundle for multiple uses. Flat 70% off for selected items. Up to 70% off on trending items. Additional 70% off for existing customers. Up to 70% off on selected items. Free gift for new users. Free shipping to 68 countries. Temu 70% Discount Code And Free Gift For New And Existing Customers Take advantage of the Temu 70% off coupon code and 70% off Temu coupon code. Use “acs670886” to unlock: acs670886: 70% off on the first order. acs670886: Extra 70% discount on any item. acs670886: Flat 70% off on select purchases. acs670886: Free gift for new users. acs670886: Up to 70% off on select items. acs670886: Free shipping to 68 countries. Pros And Cons Of Using The Temu Coupon Code 70% Off This Month Pros: Flat 70% discount for new and existing users. Additional 70% off on top of discounts. Flat 70% off for specific items. Free shipping to 68 countries. No minimum purchase required. Valid globally. Cons: Limited to specific regions for maximum benefits. Some items may be excluded from the offer. Terms And Conditions Of Using The Temu Coupon 70% Off In 2025 Temu coupon code 70% off free shipping: No minimum purchase required. Latest Temu coupon code 70% off: Valid worldwide. Use “acs670886” anytime, as it has no expiration date. Applicable to both new and existing customers. Free shipping to 68 countries. Use The Latest Temu Coupon Code 70% Off Don’t miss out on incredible savings with the Temu coupon code 70% off. Shop smart and make every dollar count. With the Temu coupon 70% off, you’re guaranteed a rewarding shopping experience. Start saving today!
    • Hello everyone new here how are you all?
    • I haven't tested it but under https://minecraft.wiki/w/Items_model_definition it says now:   So I guess the resource location must have changed with 1.24.4, which means you need to move your models/item/ to the new source. But as I said I haven't tested this so it also may be that this wont work. Nevertheless give it a try      EDIT (important) So now I tested it and found out how it works   Let the model files (e.g. the .json from blockbench) within "assets/<your_mod_id>/models/item" In addition to that do the following: Every model you added will need a new file under "assets/<your_mod_id>/items" That file is also a JSON and looks like this: { "model": { "type": "minecraft:model", "model": "your_mod_id:item/custom_item" } } - "type" can be minecraft:model, minecraft:composite, minecraft:condition, minecraft:select, minecraft:range_dispatch, minecraft:empty, minecraft:bundle/selected_item or minecraft:special. (In most cases you would need minecraft:model) - "model" is the path to your actual model for this item. For example the value above would point to "assets/your_mod_id/models/item/custom_item"
    • On version 1.20.1 there is a build with the AE2 mod, and when opening the reference book for this mod inside Minecraft, it just freezes and closes
    • public ExampleMod(FMLJavaModLoadingContext context) { var modEventBus = context.getModEventBus(); } Refer to the javadocs and MDK for more pointers and examples.
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.