Jump to content
  • Home
  • Files
  • Docs
  • Merch
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [SOLVED] [1.7.2] Can't place torches on top of custom wall or fences
1.13 Update Notes for Mod Creators
Sign in to follow this  
Followers 0
JimiIT92

[SOLVED] [1.7.2] Can't place torches on top of custom wall or fences

By JimiIT92, July 6, 2014 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

JimiIT92    19

JimiIT92

JimiIT92    19

  • Dragon Slayer
  • JimiIT92
  • Members
  • 19
  • 723 posts
Posted July 6, 2014

Hi everybody! I figured it out that i can't place torches on my custon walls or fences.

Here is the code for my custom wall:

package mod.mineworld.blocks.mod_vanilla;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import java.util.List;

import mod.mineworld.mod_tabs;
import mod.mineworld.mod_vanilla;
import net.minecraft.block.Block;
import net.minecraft.block.BlockWall;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;

public class BlockVanillaWall extends BlockWall
{

private Block block;
private int meta;

    public BlockVanillaWall(Block par1, int par2)
    {
        super(par1);
        this.setHardness(1.0F);
        this.setResistance(3.0F / 3.0F);
        this.setStepSound(par1.stepSound);
        this.setCreativeTab(mod_tabs.tabVanillaBlocks);
        this.block = par1;
        this.meta = par2;
        if(this == mod_vanilla.packed_ice_wall)
        	this.slipperiness = 0.98F;
    }

    /**
     * Gets the block's texture. Args: side, meta
     */
    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int par1, int par2)
    {
        return this.block.getIcon(par1, this.meta);
    }

    /**
     * The type of render function that is called for this block
     */
    public int getRenderType()
    {
        return 32;
    }

    /**
     * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
     */
    public boolean renderAsNormalBlock()
    {
        return false;
    }

    public boolean getBlocksMovement(IBlockAccess par1, int par2, int par3, int par4)
    {
        return false;
    }

    /**
     * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two
     * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
     */
    public boolean isOpaqueCube()
    {
        return false;
    }

    /**
     * Updates the blocks bounds based on its current state. Args: world, x, y, z
     */
    public void setBlockBoundsBasedOnState(IBlockAccess par1, int par2, int par3, int par4)
    {
        boolean flag = this.canConnectWallTo(par1, par2, par3, par4 - 1);
        boolean flag1 = this.canConnectWallTo(par1, par2, par3, par4 + 1);
        boolean flag2 = this.canConnectWallTo(par1, par2 - 1, par3, par4);
        boolean flag3 = this.canConnectWallTo(par1, par2 + 1, par3, par4);
        float f = 0.25F;
        float f1 = 0.75F;
        float f2 = 0.25F;
        float f3 = 0.75F;
        float f4 = 1.0F;

        if (flag)
        {
            f2 = 0.0F;
        }

        if (flag1)
        {
            f3 = 1.0F;
        }

        if (flag2)
        {
            f = 0.0F;
        }

        if (flag3)
        {
            f1 = 1.0F;
        }

        if (flag && flag1 && !flag2 && !flag3)
        {
            f4 = 0.8125F;
            f = 0.3125F;
            f1 = 0.6875F;
        }
        else if (!flag && !flag1 && flag2 && flag3)
        {
            f4 = 0.8125F;
            f2 = 0.3125F;
            f3 = 0.6875F;
        }

        this.setBlockBounds(f, 0.0F, f2, f1, f4, f3);
    }

    /**
     * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been
     * cleared to be reused)
     */
    public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1, int par2, int par3, int par4)
    {
        this.setBlockBoundsBasedOnState(par1, par2, par3, par4);
        this.maxY = 1.5D;
        return super.getCollisionBoundingBoxFromPool(par1, par2, par3, par4);
    }

    /**
     * Return whether an adjacent block can connect to a wall.
     */
    public boolean canConnectWallTo(IBlockAccess par1, int par2, int par3, int par4)
    {
        Block block = par1.getBlock(par2, par3, par4);
        return block != this && block != Blocks.fence_gate ? (block.getMaterial().isOpaque() && block.renderAsNormalBlock() ? block.getMaterial() != Material.gourd : false) : true;
    }

    
    
    /**
     * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given
     * coordinates.  Args: blockAccess, x, y, z, side
     */
    @SideOnly(Side.CLIENT)
    public boolean shouldSideBeRendered(IBlockAccess par1, int par2, int par3, int par4, int par5)
    {
        return par5 == 0 ? super.shouldSideBeRendered(par1, par2, par3, par4, par5) : true;
    }

    /**
     * Returns the mobility information of the block, 0 = free, 1 = can't push but can move over, 2 = total immobility
     * and stop pistons
     */
    public int getMobilityFlag()
    {
        if(this == mod_vanilla.obsidian_wall)
        	return 2;
        else return 0;
    }
    
}

 

For fences i have no code, i've just call the vanilla BlockFence class to create them.

white_marble_fence = new BlockFence(MineWorld.MODID + ":mod_ores/" + "oreMarble_white", Material.rock).setCreativeTab(mod_tabs.tabOreDecorations).setHardness(2.0F).setResistance(5.0F).setStepSound(Block.soundTypeStone).setBlockName("whiteMarbleFence");
pink_marble_fence = new BlockFence(MineWorld.MODID + ":mod_ores/" + "oreMarble_pink", Material.rock).setCreativeTab(mod_tabs.tabOreDecorations).setHardness(2.0F).setResistance(5.0F).setStepSound(Block.soundTypeStone).setBlockName("pinkMarbleFence");

 

Thanks in advice for all who will help me :D

  • Quote

Share this post


Link to post
Share on other sites

diesieben07    6693

diesieben07

diesieben07    6693

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6693
  • 45741 posts
Posted July 6, 2014

Override canPlaceTorchOnTop in your Block class.

  • Quote

Share this post


Link to post
Share on other sites

JimiIT92    19

JimiIT92

JimiIT92    19

  • Dragon Slayer
  • JimiIT92
  • Members
  • 19
  • 723 posts
Posted July 6, 2014

Allright, it worked :D Thanks! But now i have another error: my fences has a wrong icon in inventory. This was caused because i had to make a separated class and renderBlock for this fences (otherwise it shouldn't work) and now i have the plain planks icon

 

66hp9u.png

 

This is the BlockColoredFence class:

package mod.mineworld.blocks.mod_colors;

import java.util.List;

import mod.mineworld.mod_colors;
import mod.mineworld.mod_ores;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFence;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemLead;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class BlockColoredFence extends Block
{
    private final String texture_path;

    public BlockColoredFence(String par1, Material par2)
    {
        super(par2);
        this.texture_path = par1;
    }

    /**
     * Adds all intersecting collision boxes to a list. (Be sure to only add boxes to the list if they intersect the
     * mask.) Parameters: World, X, Y, Z, mask, list, colliding entity
     */
    public void addCollisionBoxesToList(World par1, int par2, int par3, int par4, AxisAlignedBB par5, List par6, Entity par7)
    {
        boolean flag = this.canConnectFenceTo(par1, par2, par3, par4 - 1);
        boolean flag1 = this.canConnectFenceTo(par1, par2, par3, par4 + 1);
        boolean flag2 = this.canConnectFenceTo(par1, par2 - 1, par3, par4);
        boolean flag3 = this.canConnectFenceTo(par1, par2 + 1, par3, par4);
        float f = 0.375F;
        float f1 = 0.625F;
        float f2 = 0.375F;
        float f3 = 0.625F;

        if (flag)
        {
            f2 = 0.0F;
        }

        if (flag1)
        {
            f3 = 1.0F;
        }

        if (flag || flag1)
        {
            this.setBlockBounds(f, 0.0F, f2, f1, 1.5F, f3);
            super.addCollisionBoxesToList(par1, par2, par3, par4, par5, par6, par7);
        }

        f2 = 0.375F;
        f3 = 0.625F;

        if (flag2)
        {
            f = 0.0F;
        }

        if (flag3)
        {
            f1 = 1.0F;
        }

        if (flag2 || flag3 || !flag && !flag1)
        {
            this.setBlockBounds(f, 0.0F, f2, f1, 1.5F, f3);
            super.addCollisionBoxesToList(par1, par2, par3, par4, par5, par6, par7);
        }

        if (flag)
        {
            f2 = 0.0F;
        }

        if (flag1)
        {
            f3 = 1.0F;
        }

        this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3);
    }

    /**
     * Updates the blocks bounds based on its current state. Args: world, x, y, z
     */
    public void setBlockBoundsBasedOnState(IBlockAccess par1, int par2, int par3, int par4)
    {
        boolean flag = this.canConnectFenceTo(par1, par2, par3, par4 - 1);
        boolean flag1 = this.canConnectFenceTo(par1, par2, par3, par4 + 1);
        boolean flag2 = this.canConnectFenceTo(par1, par2 - 1, par3, par4);
        boolean flag3 = this.canConnectFenceTo(par1, par2 + 1, par3, par4);
        float f = 0.375F;
        float f1 = 0.625F;
        float f2 = 0.375F;
        float f3 = 0.625F;

        if (flag)
        {
            f2 = 0.0F;
        }

        if (flag1)
        {
            f3 = 1.0F;
        }

        if (flag2)
        {
            f = 0.0F;
        }

        if (flag3)
        {
            f1 = 1.0F;
        }

        this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3);
    }

    /**
     * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two
     * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
     */
    public boolean isOpaqueCube()
    {
        return false;
    }

    /**
     * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
     */
    public boolean renderAsNormalBlock()
    {
        return false;
    }

    public boolean getBlocksMovement(IBlockAccess par1, int par2, int par3, int par4)
    {
        return false;
    }

    /**
     * The type of render function that is called for this block
     */
    public int getRenderType()
    {
        return mod_colors.fenceModelID;
    }

    /**
     * Returns true if the specified block can be connected by a fence
     */
    public boolean canConnectFenceTo(IBlockAccess par1, int par2, int par3, int par4)
    {
        Block block = par1.getBlock(par2, par3, par4);
        for(int i = 0; i < 16; i++)
	{if(block == mod_colors.colored_fence_gate[i])
	return true;}
        	if(block == mod_colors.colored_fence[0] || block == mod_colors.colored_fence[1] || block == mod_colors.colored_fence[2] ||
        			block == mod_colors.colored_fence[3] || block == mod_colors.colored_fence[4] || block == mod_colors.colored_fence[5] ||
        			block == mod_colors.colored_fence[6] || block == mod_colors.colored_fence[7] || block == mod_colors.colored_fence[8] ||
        			block == mod_colors.colored_fence[9] || block == mod_colors.colored_fence[10] || block == mod_colors.colored_fence[11] ||
        			block == mod_colors.colored_fence[12] || block == mod_colors.colored_fence[13] || block == mod_colors.colored_fence[14] ||
        			block == mod_colors.colored_fence[15])
        		return true;
        	else
        	return block != this && block != Blocks.fence_gate && block != mod_colors.colored_fence_gate[0]
        			&& block != mod_colors.colored_fence_gate[0] && block != mod_colors.colored_fence_gate[1] && block != mod_colors.colored_fence_gate[2]
        					&& block != mod_colors.colored_fence_gate[3] && block != mod_colors.colored_fence_gate[4] && block != mod_colors.colored_fence_gate[5]
        							&& block != mod_colors.colored_fence_gate[6] && block != mod_colors.colored_fence_gate[7] && block != mod_colors.colored_fence_gate[8]
        									&& block != mod_colors.colored_fence_gate[9] && block != mod_colors.colored_fence_gate[10] && block != mod_colors.colored_fence_gate[11]
        											&& block != mod_colors.colored_fence_gate[12] && block != mod_colors.colored_fence_gate[13] && block != mod_colors.colored_fence_gate[14]
        													&& block != mod_colors.colored_fence_gate[15]? (block.getMaterial().isOpaque() && block.renderAsNormalBlock() ? block.getMaterial() != Material.gourd : false) : true;
    }

    public static boolean func_149825_a(Block par1)
    {
        return par1 == Blocks.fence || par1 == Blocks.nether_brick_fence;
    }

    /**
     * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given
     * coordinates.  Args: blockAccess, x, y, z, side
     */
    @SideOnly(Side.CLIENT)
    public boolean shouldSideBeRendered(IBlockAccess par1, int par2, int par3, int par4, int par5)
    {
        return true;
    }

    @SideOnly(Side.CLIENT)
    public void registerBlockIcons(IIconRegister par1)
    {
        this.blockIcon = par1.registerIcon(this.texture_path);
    }


    /**
     * Called upon block activation (right click on the block.)
     */
    public boolean onBlockActivated(World par1, int par2, int par3, int par4, EntityPlayer par5, int par6, float par7, float par8, float par9)
    {
        return par1.isRemote ? true : ItemLead.func_150909_a(par5, par1, par2, par3, par4);
    }
    
    public boolean canPlaceTorchOnTop(World world, int x, int y, int z) {
	return true;
}
}

 

This is the RenderColoredFence class:

package mod.mineworld.items.render.mod_colors;

import mod.mineworld.mod_colors;
import mod.mineworld.mod_redstone;
import mod.mineworld.blocks.mod_colors.BlockColoredFence;
import mod.mineworld.blocks.mod_redstone.BlockLantern;
import net.minecraft.block.Block;
import net.minecraft.block.BlockCocoa;
import net.minecraft.block.BlockDirectional;
import net.minecraft.block.BlockFence;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.init.Blocks;
import net.minecraft.util.IIcon;
import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;


public class RenderColoredFence implements ISimpleBlockRenderingHandler 
{
    public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)
    {
    }

    public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
    	return renderBlockColoredFence((BlockColoredFence)block, x, y, z, renderer);
}

public boolean shouldRender3DInInventory(int modelID)
    {
         return false;
    }

    @Override
    public int getRenderId()
    {
         return 0;
    }
    
    public int getRenderType()
    {
        return mod_colors.fenceModelID;
    }
    
    public boolean renderBlockColoredFence(BlockColoredFence par1, int par2, int par3, int par4, RenderBlocks renderer)
    {
        boolean flag = false;
        float f = 0.375F;
        float f1 = 0.625F;
        renderer.setRenderBounds((double)f, 0.0D, (double)f, (double)f1, 1.0D, (double)f1);
        renderer.renderStandardBlock(par1, par2, par3, par4);
        flag = true;
        boolean flag1 = false;
        boolean flag2 = false;

        if (par1.canConnectFenceTo(renderer.blockAccess, par2 - 1, par3, par4) || par1.canConnectFenceTo(renderer.blockAccess, par2 + 1, par3, par4))
        {
            flag1 = true;
        }

        if (par1.canConnectFenceTo(renderer.blockAccess, par2, par3, par4 - 1) || par1.canConnectFenceTo(renderer.blockAccess, par2, par3, par4 + 1))
        {
            flag2 = true;
        }

        boolean flag3 = par1.canConnectFenceTo(renderer.blockAccess, par2 - 1, par3, par4);
        boolean flag4 = par1.canConnectFenceTo(renderer.blockAccess, par2 + 1, par3, par4);
        boolean flag5 = par1.canConnectFenceTo(renderer.blockAccess, par2, par3, par4 - 1);
        boolean flag6 = par1.canConnectFenceTo(renderer.blockAccess, par2, par3, par4 + 1);

        if (!flag1 && !flag2)
        {
            flag1 = true;
        }

        f = 0.4375F;
        f1 = 0.5625F;
        float f2 = 0.75F;
        float f3 = 0.9375F;
        float f4 = flag3 ? 0.0F : f;
        float f5 = flag4 ? 1.0F : f1;
        float f6 = flag5 ? 0.0F : f;
        float f7 = flag6 ? 1.0F : f1;

        if (flag1)
        {
            renderer.setRenderBounds((double)f4, (double)f2, (double)f, (double)f5, (double)f3, (double)f1);
            renderer.renderStandardBlock(par1, par2, par3, par4);
            flag = true;
        }

        if (flag2)
        {
            renderer.setRenderBounds((double)f, (double)f2, (double)f6, (double)f1, (double)f3, (double)f7);
            renderer.renderStandardBlock(par1, par2, par3, par4);
            flag = true;
        }

        f2 = 0.375F;
        f3 = 0.5625F;

        if (flag1)
        {
            renderer.setRenderBounds((double)f4, (double)f2, (double)f, (double)f5, (double)f3, (double)f1);
            renderer.renderStandardBlock(par1, par2, par3, par4);
            flag = true;
        }

        if (flag2)
        {
            renderer.setRenderBounds((double)f, (double)f2, (double)f6, (double)f1, (double)f3, (double)f7);
            renderer.renderStandardBlock(par1, par2, par3, par4);
            flag = true;
        }

        par1.setBlockBoundsBasedOnState(renderer.blockAccess, par2, par3, par4);
        return flag;
    }
    
    
}

 

in the ClientProxy:

mod_colors.fenceModelID = RenderingRegistry.instance().getNextAvailableRenderId();	
RenderingRegistry.instance().registerBlockHandler(mod_colors.fenceModelID , new RenderColoredFence());

  • Quote

Share this post


Link to post
Share on other sites

Elyon    77

Elyon

Elyon    77

  • Diamond Finder
  • Elyon
  • Members
  • 77
  • 270 posts
Posted July 6, 2014

The method name

shouldRender3DInInventory

really says it all, though, doesn't it? :)

  • Quote

Share this post


Link to post
Share on other sites

JimiIT92    19

JimiIT92

JimiIT92    19

  • Dragon Slayer
  • JimiIT92
  • Members
  • 19
  • 723 posts
Posted July 6, 2014

I've changed it from false to true but now i have no icon in inventory (if i select the first slot in the previous image i see no icon, only the block name) :/

  • Quote

Share this post


Link to post
Share on other sites

diesieben07    6693

diesieben07

diesieben07    6693

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6693
  • 45741 posts
Posted July 6, 2014

You can use the default fence renderer if you extend BlockFence (you should do that anyways, instead of just copying the code -.-)

  • Quote

Share this post


Link to post
Share on other sites

JimiIT92    19

JimiIT92

JimiIT92    19

  • Dragon Slayer
  • JimiIT92
  • Members
  • 19
  • 723 posts
Posted July 6, 2014

Yes i know but if i do i can't place torches on top of them :/

EDIT: i was forgotten the @Override annotation -.- Allright, thanks for supported me :D

  • Quote

Share this post


Link to post
Share on other sites

diesieben07    6693

diesieben07

diesieben07    6693

  • Reality Controller
  • diesieben07
  • Forum Team
  • 6693
  • 45741 posts
Posted July 6, 2014

As I said earlier: Use canPlaceTorchOnTop.

  • Quote

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

  • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 0
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • troyvs
      problems starting with modding

      By troyvs · Posted 39 minutes ago

      what command did you run to set up?  
    • MightyAhmed
      Immediate Crash On Any Version Of Forge

      By MightyAhmed · Posted 1 hour ago

      ok so its been a while but it was workling fine before somehow but now minecraft still works it just freezes and lagspikes every 5 seconds please help me on this issue i cant find anything on the internet also ihave 4GB ram total in my computer and i have dedicated 2gb ram to minecraft in the JVM arguments section also i have 125 mods installed.
    • deanvangreunen
      Custom Armor Item - Help - MC/Forge 1.14.4/1.14.3

      By deanvangreunen · Posted 2 hours ago

      Hello, I'm in progress of making a Minecraft 1.14.4 Mod using Forge. Needing some help, Could you please look at the following Class File and Explain what I'm doing wrong or what I should be doing?.   The "OnArmorTick" and other ".....Tick" functions don't work.   My intent: - if water is below and near player by 1 block while the boots are on then turn the water into ice. I'm trying to implement "Frost Walking Boots"   Code: - FrostBootsItem.java <- File I need help with - My Project Repo  <- Repo, So if you want to see how my mod is setup. (includes my world saves, etc)   Dev Details: - Minecraft Version: 1.14.4 - Minecraft Snapshot: 20191020-1.14.3 - Forge Version: 1.14.4-28.1.61   Notes: - I've followed a tutorial for 1.14.4 modding by MCJty on youtube (The author of RFTools) - I'm new to minecraft modding. I have expeirenced as a software developer/engineer.   ❤️❤️❤️❤️❤️❤️❤️❤️❤️  ❤️  .Thanks in advance. ❤️  ❤️❤️❤️❤️❤️❤️❤️❤️❤️ 
    • DragonITA
      [1.14.4] How to get Minecraft Horse model/texture to make a custom unicorn?

      By DragonITA · Posted 2 hours ago

      please see the screenshoot above.
    • Ommina
      re:server tick loop

      By Ommina · Posted 2 hours ago

      FTBAcademy, as a pack, contains about 120 mods.  Your mod folder seems to contain about five.  For whatever reason, the pack installation is not just incomplete, it's barely started.   Adding a single mod isn't going to make it fly; whatever was used to install the pack originally, it didn't work.  
  • Topics

    • coolian
      1
      problems starting with modding

      By coolian
      Started October 9

    • MightyAhmed
      83
      Immediate Crash On Any Version Of Forge

      By MightyAhmed
      Started November 10

    • deanvangreunen
      0
      Custom Armor Item - Help - MC/Forge 1.14.4/1.14.3

      By deanvangreunen
      Started 2 hours ago

    • DragonITA
      48
      [1.14.4] How to get Minecraft Horse model/texture to make a custom unicorn?

      By DragonITA
      Started December 9

    • daylite
      6
      re:server tick loop

      By daylite
      Started 4 hours ago

  • Who's Online (See full list)

    • GttiqwT
    • darkgreenminer
    • Choonster
    • bitman
    • Ommina
    • ericgolde555
    • AkosM
    • jinenze
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [SOLVED] [1.7.2] Can't place torches on top of custom wall or fences
  • Theme
  • Contact Us
  • Discord

Copyright © 2019 ForgeDevelopment LLC · Ads by Curse Powered by Invision Community