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
  • 15993 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
  • 15993 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

    • DrCowiber
      Failed To Start Minecraft Server

      By DrCowiber · Posted 3 minutes ago

      I dont think this has anything to do with the OS, but with maybe the way I installed java? I installed Ubuntu made for the raspberry pi 4 and the same message happened. im installing java with "sudo apt-get install default-jdk", So I tried again with "sudo apt-get install default-jre" and ended up reinstalling the jdk too, same thing happened.
    • CyberNation
      Forge 1.7.10 Server Failed to write Transciever Channels

      By CyberNation · Posted 15 minutes ago

      i made a custom 1.7.10 modpack for my friends and I to play on decided to move it over to my own server host and now im getting an error when starting ive spent several hours trying to look for a solution and cant seem to find one im not sure if im in the right place for this but i hope someone can help me     17:44:27 Can't revert to frozen GameData state without freezing first. Server thread/INFO 17:44:27 Applying holder lookups Holder lookups applied Server thread/WARN 17:44:27 Failed to write Transciever Channels on exit: java.util.concurrent.ExecutionException: java.lang.NullPointerException Server thread/INFO 17:44:27 The state engine was in incorrect state ERRORED and forced into state SERVER_STOPPED. Errors may have been discarded. The state engine was in incorrect state ERRORED and forced into state AVAILABLE. Errors may have been discarded.     full Crash Log Report: Paste Bin https://pastebin.com/cxgY3t6q
    • DrCowiber
      Failed To Start Minecraft Server

      By DrCowiber · Posted 36 minutes ago

      Im wondering if changing the launch options for the main server jar will fix that? I saw some threads where some peoples launch files had "-o" as a launch option, is there a way I can change the launch options for when the vanilla server is launched?
    • DrCowiber
      Failed To Start Minecraft Server

      By DrCowiber · Posted 46 minutes ago

      When I run my forge Server it goes fine, but when I try to host off my Raspberry Pi 4 Model B 8GB RAM, using the 32-bit raspbian and 64-bit raspbian, I get this error at the end of log.   jpotsimple.UnrecognizedOptionException: o is not a recognized option     The full log file: https://pastebin.com/n4GpC53Q
    • KBomb
      Forge 1.12.2 Server Crashing On Start-up

      By KBomb · Posted 50 minutes ago

      I have been able to run the server in vanilla, but after adding the mods the server is crashing during the start-up. I will attach the crash report. I also have screenshots of what the server console was displaying if that may be necessary. crash-2021-02-24_18.58.56-server.txt
  • Topics

    • DrCowiber
      2
      Failed To Start Minecraft Server

      By DrCowiber
      Started 46 minutes ago

    • CyberNation
      0
      Forge 1.7.10 Server Failed to write Transciever Channels

      By CyberNation
      Started 15 minutes ago

    • KBomb
      0
      Forge 1.12.2 Server Crashing On Start-up

      By KBomb
      Started 50 minutes ago

    • milkman69
      0
      My game keeps crashing and I haven't even added any mods on yet

      By milkman69
      Started 2 hours ago

    • Skyriis
      0
      [1.16.5] Adding a Button to KeyBindings

      By Skyriis
      Started 3 hours ago

  • Who's Online (See full list)

    • DrCowiber
    • CyberNation
    • William59
    • Taknax
    • mcnuggies
    • Draco18s
    • Jeldrik
    • PyRoTheLifeLess
  • 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