Jump to content

[Solved] A block with different faces? e.g. Furnace


ProgrammerCam

Recommended Posts

I wanted to make a block similar that looks similar to a furnace. I need it to change the front face based on where you are looking, like a furnace.

If someone could post up code it would be [glow=yellow,2,300]awesome[/glow]!  ;)

;) I am new to forge however am experienced in Java! ;)
Link to comment
Share on other sites

Ok cool thanks I've copied the code, it all works smoothly, except for one thing, the furnace faces always a set direction; it never changes. I checked the furnace code and well i have been unsuccessful...

-------------------------------------------------------------------------------------------------------------------------------

@SideOnly(Side.CLIENT)

    private Icon furnaceIconTop;

    @SideOnly(Side.CLIENT)

    private Icon furnaceIconFront;

 

    /**

    * Called whenever the block is added into the world. Args: world, x, y, z

    */

    public void onBlockAdded(World par1World, int par2, int par3, int par4)

    {

        super.onBlockAdded(par1World, par2, par3, par4);

        this.setDefaultDirection(par1World, par2, par3, par4);

    }

 

    /**

    * set a blocks direction

    */

    private void setDefaultDirection(World par1World, int par2, int par3, int par4)

    {

        if (!par1World.isRemote)

        {

            int l = par1World.getBlockId(par2, par3, par4 - 1);

            int i1 = par1World.getBlockId(par2, par3, par4 + 1);

            int j1 = par1World.getBlockId(par2 - 1, par3, par4);

            int k1 = par1World.getBlockId(par2 + 1, par3, par4);

            byte b0 = 3;

 

            if (Block.opaqueCubeLookup[l] && !Block.opaqueCubeLookup[i1])

            {

                b0 = 3;

            }

 

            if (Block.opaqueCubeLookup[i1] && !Block.opaqueCubeLookup[l])

            {

                b0 = 2;

            }

 

            if (Block.opaqueCubeLookup[j1] && !Block.opaqueCubeLookup[k1])

            {

                b0 = 5;

            }

 

            if (Block.opaqueCubeLookup[k1] && !Block.opaqueCubeLookup[j1])

            {

                b0 = 4;

            }

 

            par1World.setBlockMetadataWithNotify(par2, par3, par4, b0, 2);

        }

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * From the specified side and block metadata retrieves the blocks texture. Args: side, metadata

    */

    public Icon getIcon(int par1, int par2)

    {

        return par1 == 1 ? this.furnaceIconTop : (par1 == 0 ? this.furnaceIconTop : (par1 != par2 ? this.blockIcon : this.furnaceIconFront));

    }

 

    @SideOnly(Side.CLIENT)

 

    /**

    * When this method is called, your block should register all the icons it needs with the given IconRegister. This

    * is the only chance you get to register icons.

    */

    public void registerIcons(IconRegister par1IconRegister)

    {

        this.blockIcon = par1IconRegister.registerIcon("furnace_side");

        this.furnaceIconFront = par1IconRegister.registerIcon("furnace_front_off");

        this.furnaceIconTop = par1IconRegister.registerIcon("furnace_top");

    }

----------------------------------------------------------------------------------------------------------

If i could get some help that would be awesome!

For some reason the code thing isn't working....

;) I am new to forge however am experienced in Java! ;)
Link to comment
Share on other sites

Ok cool thanks I've copied the code, it all works smoothly, except for one thing, the furnace faces always a set direction; it never changes. I checked the furnace code and well i have been unsuccessful...

------------------------------------------------------------------------------------------------------------------------------

So, what you want the face to change sides dynamically when you walk around it?

Link to comment
Share on other sites

You want to copy onBlockPlacedBy(World p_149689_1_, int p_149689_2_, int p_149689_3_, int p_149689_4_, EntityLivingBase p_149689_5_, ItemStack p_149689_6_)

 

That is where the direction is determined and set.

 

Link to comment
Share on other sites

Thank you so much but one more problem.... the block. When you hold a furnace on the right hand side of the icon is the front and on the left side is the side icon. How can i make the icon of my item like that. both the left and right side is the icon for the side.

;) I am new to forge however am experienced in Java! ;)
Link to comment
Share on other sites

The Furnace uses metadata to determine it's placed direction (even when rendering on the hotbar.) The facing when in inventory is due to a trick in RenderBlocks where renderBlockAsItem(Block, meta, color) changes the metadata of the furnace used to lookup icon to 2. So, it forces the furnace to face the proper way to render the item in the hotbar.

You might have to set your own block renderer to overcome that limitation.

A possible workaround I haven't tried is to always create your ItemStack with a furnace with metadata = 2. When it is actually placed it will change accordingly, of course.

Link to comment
Share on other sites

The Furnace uses metadata to determine it's placed direction (even when rendering on the hotbar.) The facing when in inventory is due to a trick in RenderBlocks where renderBlockAsItem(Block, meta, color) changes the metadata of the furnace used to lookup icon to 2. So, it forces the furnace to face the proper way to render the item in the hotbar.

You might have to set your own block renderer to overcome that limitation.

A possible workaround I haven't tried is to always create your ItemStack with a furnace with metadata = 2. When it is actually placed it will change accordingly, of course.

You could also do something way more easy. If the furnace is in the inventory, the metadata is 0, but if it's placed down, the metadata is 2,3,4 or 5. So in your getIcon method, check for a metadata that's 0, and if the side is 2, you need to set the front texture.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Link to comment
Share on other sites

Yes indeed. I hadn't even considered how the furnace will only ever face one of 4 directions, rather than 6. Good advice!

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now


  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I would like to force the pose of a living entity to a standing position (i.e. Pose.STANDING) when it is riding a certain vehicle. I have tried to call Entity#setPose every tick via LivingTickEvent, but the living entity remains in a sitting position. Here is my code: // I made it a low-priority event because I was wondering if the code should be executed at the end of each tick. @SubscribeEvent(priority = EventPriority.LOWEST) public static void livingTickEvent(LivingEvent.LivingTickEvent event) { LivingEntity livingEntity = event.getEntity(); if (!livingEntity.level.isClientSide && livingEntity.getVehicle() instanceof TheVehicle) { livingEntity.setPose(Pose.STANDING); } }   By the way, I am aware there is a setForcedPose method, but it's only for the Player class.
    • I am trying to get a Private Vault Hunters 3rd edition up and running. The server launched fine before I pasted the Vault+Hunters+3rd+Edition-Update-10.0.1_Server-Files Contents into the file I made for the server info. Then after I pasted it I get the log information in the spoiler. I don't understand what I'm looking at. I'm using Forge 1.18.2, I also downloaded the most recent version of JDK.
    • Hey, my friends put together a custom modpack to use and asked me to set up a server to run it. Problem is, they didn't think to log which mods where client side only and which worked server side. Naturally, I only found this out when I actually attempted to run said server. There's quite a long list of them and, frankly, I have no idea which are causing the problem. I just run servers and install modpacks, not curate them. If anyone could help me identify the problem and what's causing the error, it would be greatly appreciated.   To make things a bit easier, I'm running the server in a docker container on a Ubuntu 20.04 server installation. Also, I'm using Java 17 and Forge ver 1.19.2 release 43.2.8 as that is the same version as the modpack, so everything should be working. Again, any help would be really appreciated. latest log: https://pastebin.com/f95NC0X7 All mods installed: https://pastebin.com/xy8d55kJ
    • I'm trying to install Forge for 1.12.2. The installer runs properly and says it installed forged succesfully, but when I go into the launcher there is no Forge profile and forge isn't in the version list when cresting a custom profile. In the versions folder in .minecraft the forge 1.12.2 folder is there, but it only has the .json file, it seems that the installer is not actually getting the .jar file. I tried with both the recommended and latest installers. I also tried downloading the universal .jar directly and pasting it into the versions folder but that didn't work either.   Installer log: JVM info: Oracle Corporation - 1.8.0_371 - 25.371-b11 java.net.preferIPv4Stack=true Found java version 1.8.0_371 Extracting json Considering minecraft client jar Downloading libraries Found 0 additional library directories Considering library net.minecraftforge:forge:1.12.2-14.23.5.2859   File exists: Checksum validated. Considering library org.ow2.asm:asm-debug-all:5.2   File exists: Checksum validated. Considering library net.minecraft:launchwrapper:1.12   File exists: Checksum validated. Considering library org.jline:jline:3.5.1   File exists: Checksum validated. Considering library com.typesafe.akka:akka-actor_2.11:2.3.3   File exists: Checksum validated. Considering library com.typesafe:config:1.2.1   File exists: Checksum validated. Considering library org.scala-lang:scala-actors-migration_2.11:1.1.0   File exists: Checksum validated. Considering library org.scala-lang:scala-compiler:2.11.1   File exists: Checksum validated. Considering library org.scala-lang.plugins:scala-continuations-library_2.11:1.0.2_mc   File exists: Checksum validated. Considering library org.scala-lang.plugins:scala-continuations-plugin_2.11.1:1.0.2_mc   File exists: Checksum validated. Considering library org.scala-lang:scala-library:2.11.1   File exists: Checksum validated. Considering library org.scala-lang:scala-parser-combinators_2.11:1.0.1   File exists: Checksum validated. Considering library org.scala-lang:scala-reflect:2.11.1   File exists: Checksum validated. Considering library org.scala-lang:scala-swing_2.11:1.0.1   File exists: Checksum validated. Considering library org.scala-lang:scala-xml_2.11:1.0.2   File exists: Checksum validated. Considering library lzma:lzma:0.0.1   File exists: Checksum validated. Considering library java3d:vecmath:1.5.2   File exists: Checksum validated. Considering library net.sf.trove4j:trove4j:3.0.3   File exists: Checksum validated. Considering library org.apache.maven:maven-artifact:3.5.3   File exists: Checksum validated. Considering library net.sf.jopt-simple:jopt-simple:5.0.3   File exists: Checksum validated. Considering library org.apache.logging.log4j:log4j-api:2.15.0   File exists: Checksum validated. Considering library org.apache.logging.log4j:log4j-core:2.15.0   File exists: Checksum validated. Considering library org.apache.logging.log4j:log4j-slf4j18-impl:2.15.0   File exists: Checksum validated. Building Processors Injecting profile Finished!
    • So I want to give the player the strength effect when they use a totem, but I can't get it to work. I've tested and if you have an effect when you use a totem, it is removed when you get revived (presumably because you "die.") After testing with System.out.print(), I've concluded the entity is given strength then has it immediately removed. This occurs even if I set the event priority to lowest. Does anyone have any ideas on getting around this? Thanks!
  • Topics

×
×
  • Create New...

Important Information

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