Jump to content
  • Home
  • Files
  • Docs
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
  • Non-Square multiblock
Currently Supported: 1.16.X (Latest) and 1.15.X (LTS)
Sign in to follow this  
Followers 1
jmilthedude

Non-Square multiblock

By jmilthedude, June 20, 2018 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

jmilthedude    0

jmilthedude

jmilthedude    0

  • Tree Puncher
  • jmilthedude
  • Members
  • 0
  • 8 posts
Posted June 20, 2018

Hello, I have searched thoroughly on this and have so far come up with nothing. I would like to make a multiblock structure that has an odd shape. You can see what I mean in the image attached. 
I have been thinking of approaching this two ways. One would be utilizing a few different blocks that need to be placed a certain way, and then an item to activate the multiblock, which would change how it is rendered into one uniform model. The other approach is to have a tile entity that has a java model and is in essence a single block with a bounding box extending past the single block space.

 

The structure is going to be a table that is 3 wide and 2 deep, with 3 buckets along the back half. Thus a semi complicated model I think and I can't recall another structure out there that I can reference.

image.png

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2414

Draco18s

Draco18s    2414

  • Reality Controller
  • Draco18s
  • Members
  • 2414
  • 15995 posts
Posted June 20, 2018
43 minutes ago, jmilthedude said:

The other approach is to have a tile entity that has a java model and is in essence a single block with a bounding box extending past the single block space.

You cannot do this. If it was even allowed, programmatically (it is not), it would play havoc on the AI pathfinding and "can the entity be here" checks.

  • Quote

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.

Share this post


Link to post
Share on other sites

jmilthedude    0

jmilthedude

jmilthedude    0

  • Tree Puncher
  • jmilthedude
  • Members
  • 0
  • 8 posts
Posted June 20, 2018

Alright then I need to have each piece of the multiblock have its own block and model (9 blocks total). Perhaps I can have the player place particular blocks and then their model changes when the multiblock is formed? I really don't know how to approach this. I suppose I should look at immersive engineering in how they form the coal coke furnace and apply one texture to the whole 3x3 side of it.

To determine what blocks are where I am thinking I can use a 3 dimensional array.. 

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2414

Draco18s

Draco18s    2414

  • Reality Controller
  • Draco18s
  • Members
  • 2414
  • 15995 posts
Posted June 20, 2018

Pretty much. You can use blockstates to determine which textures to show, and have some manner by which you detect that the multiblock is complete.

Usually a central block that looks at the other positions around itself and if it finds them all, it says "hooray!" and the structure is built. Then when any of the blocks is broken, alert the central one and say "recheck!"

  • Quote

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.

Share this post


Link to post
Share on other sites

jabelar    594

jabelar

jabelar    594

  • Reality Controller
  • jabelar
  • Members
  • 594
  • 3266 posts
Posted June 20, 2018

Approach 1) You can basically do what doors and fences and beds do. Basically they sort of figure out what their neighbors are and the orientation and render accordingly.

 

Approach 2) If you want to allow the player to place it all at once, then you can just check when block placed (using event) and place all the blocks for the structure accordingly. Similarly, you can handle the breaking block event and break them all. That is if you really want it to be a single thing that gets placed and/or destroyed all at once.

  • Quote

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Share this post


Link to post
Share on other sites

jmilthedude    0

jmilthedude

jmilthedude    0

  • Tree Puncher
  • jmilthedude
  • Members
  • 0
  • 8 posts
Posted June 21, 2018

So, approach 2. This works, but I feel like there has to be a better way.. Seems excessive to me, the way I've done it.

	public static void onMiniPlaced(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
		String facing = placer.getHorizontalFacing().toString();

		if (facing == "north") {
			worldIn.setBlockState(pos.add(-1, 0, 0), ModBlocks.BLOCK_FRONT_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(0, 0, 0), ModBlocks.BLOCK_FRONT_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(1, 0, 0), ModBlocks.BLOCK_FRONT_RIGHT.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 0, -1), ModBlocks.BLOCK_BACK_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(0, 0, -1), ModBlocks.BLOCK_BACK_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(1, 0, -1), ModBlocks.BLOCK_BACK_RIGHT.getDefaultState());
			worldIn.setBlockState(pos.add(1, 1, -1), ModBlocks.BLOCK_TOP_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(0, 1, -1), ModBlocks.BLOCK_TOP_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 1, -1), ModBlocks.BLOCK_TOP_RIGHT.getDefaultState());
		} else if (facing == "east") {
			worldIn.setBlockState(pos.add(0, 0, -1), ModBlocks.BLOCK_FRONT_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(0, 0, 0), ModBlocks.BLOCK_FRONT_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(0, 0, 1), ModBlocks.BLOCK_FRONT_RIGHT.getDefaultState());
			worldIn.setBlockState(pos.add(1, 0, -1), ModBlocks.BLOCK_BACK_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(1, 0, 0), ModBlocks.BLOCK_BACK_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(1, 0, 1), ModBlocks.BLOCK_BACK_RIGHT.getDefaultState());
			worldIn.setBlockState(pos.add(1, 1, -1), ModBlocks.BLOCK_TOP_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(1, 1, 0), ModBlocks.BLOCK_TOP_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(1, 1, 1), ModBlocks.BLOCK_TOP_RIGHT.getDefaultState());
		} else if (facing == "south") {
			worldIn.setBlockState(pos.add(1, 0, 0), ModBlocks.BLOCK_FRONT_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(0, 0, 0), ModBlocks.BLOCK_FRONT_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 0, 0), ModBlocks.BLOCK_FRONT_RIGHT.getDefaultState());
			worldIn.setBlockState(pos.add(1, 0, 1), ModBlocks.BLOCK_BACK_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(0, 0, 1), ModBlocks.BLOCK_BACK_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 0, 1), ModBlocks.BLOCK_BACK_RIGHT.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 1, 1), ModBlocks.BLOCK_TOP_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(0, 1, 1), ModBlocks.BLOCK_TOP_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(1, 1, 1), ModBlocks.BLOCK_TOP_RIGHT.getDefaultState());
		} else if (facing == "west") {
			worldIn.setBlockState(pos.add(0, 0, 1), ModBlocks.BLOCK_FRONT_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(0, 0, 0), ModBlocks.BLOCK_FRONT_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(0, 0, -1), ModBlocks.BLOCK_FRONT_RIGHT.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 0, 1), ModBlocks.BLOCK_BACK_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 0, 0), ModBlocks.BLOCK_BACK_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 0, -1), ModBlocks.BLOCK_BACK_RIGHT.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 1, 1), ModBlocks.BLOCK_TOP_LEFT.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 1, 0), ModBlocks.BLOCK_TOP_CENTER.getDefaultState());
			worldIn.setBlockState(pos.add(-1, 1, -1), ModBlocks.BLOCK_TOP_RIGHT.getDefaultState());
		}

	}

 

  • Quote

Share this post


Link to post
Share on other sites

Animefan8888    741

Animefan8888

Animefan8888    741

  • Reality Controller
  • Animefan8888
  • Forge Modder
  • 741
  • 6157 posts
Posted June 21, 2018
1 hour ago, jmilthedude said:

Seems excessive to me, the way I've done it.

You could try implementing some kind of for loop. That should make your code cleaner, also you don't need to turn EntityPlayer#getHorizontalFacing into a string, it is an enum, and comparing strings with == will not work.

  • Quote

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Share this post


Link to post
Share on other sites

jmilthedude    0

jmilthedude

jmilthedude    0

  • Tree Puncher
  • jmilthedude
  • Members
  • 0
  • 8 posts
Posted June 21, 2018

got it. changed to EnumFacing and checked if EnumFacing.NORTH, etc. Though it worked the other way, I suppose this is better in the long run. Now to make sure that it will not place if any of the blocks will collide with existing blocks..

  • 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 1
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • diesieben07
      The game crashed whilst rendering overlay

      By diesieben07 · Posted 1 hour ago

      In the future please make your own thread instead of posting in an old, unrelated thread.   Delete this file.
    • FactionsFire
      Exit code 0 Sorry for inconvenience

      By FactionsFire · Posted 1 hour ago

      I am trying to lanuch 1.8.9 forge and i get "An unexpected issue happened and the game has crashed exit sorry for inconvenience exit code 0"" And this has happened for about a week. 
    • Merken
      The game crashed whilst rendering overlay

      By Merken · Posted 1 hour ago

      The game crashed whilst rendering overlay Error: net.minecraftforge.fml.config.ConfigFileTypeHandler$ConfigLoadingException: Failed loading config file forge-client.toml of type CLIENT for modid forge Exit Code: -1
    • Merken
      The game crashed whilst rendering overlay

      By Merken · Posted 1 hour ago

      The game crashed whilst rendering overlay Error: net.minecraftforge.fml.config.ConfigFileTypeHandler$ConfigLoadingException: Failed loading config file forge-client.toml of type CLIENT for modid forge Exit Code: -1
    • diesieben07
      My game keeps crashing

      By diesieben07 · Posted 2 hours ago

      You do not. In the future please make your own thread instead of posting in some random thread that looks vaguely similar.   Your Optifine version is outdated and not listed as compatible with your version of Forge. Refer to the Optifine downloads page regarding compatibility with Forge.
  • Topics

    • Merken
      2
      The game crashed whilst rendering overlay

      By Merken
      Started 1 hour ago

    • FactionsFire
      0
      Exit code 0 Sorry for inconvenience

      By FactionsFire
      Started 1 hour ago

    • seekR4621
      1
      My game keeps crashing

      By seekR4621
      Started 3 hours ago

    • NorthWestWind
      2
      [1.16.x] Stop Held Item blobbing in Hand

      By NorthWestWind
      Started 3 hours ago

    • ehbean
      1
      1.16.x Custom Furnace/Brewing Stand

      By ehbean
      Started 12 hours ago

  • Who's Online (See full list)

    • diesieben07
    • Nanook
    • NorthWestWind
    • Ginge
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • Non-Square multiblock
  • Theme

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