Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.15.1] Block - texture, model, blockstate - understanding


KillBill61
 Share

Recommended Posts

Hi,

I have several questions about that, but let me first show you what I have (It works as I want, but I think I don't understand it well - the "powered" part is not finished, but that is not the problem - I just don't need it now). Questions are on bottom.

(MODID = "automation")

 

In "assets.automation.blockstates" I have file "chopping_block.json"

Spoiler

{
	"variants": {
		"facing=north,powered=false": {
			"model": "automation:blocks/chopping_block"
		},
		"facing=south,powered=false": {
			"model": "automation:blocks/chopping_block",
			"y": 180
		},
		"facing=west,powered=false": {
			"model": "automation:blocks/chopping_block",
			"y": 270
		},
		"facing=east,powered=false": {
			"model": "automation:blocks/chopping_block",
			"y": 90
		},
		"facing=up,powered=false": {
			"model": "automation:blocks/chopping_block",
			"x": -90
		},
		"facing=down,powered=false": {
			"model": "automation:blocks/chopping_block",
			"x": 90
		},
		"facing=north,powered=true": {
			"model": "automation:blocks/chopping_block_powered"
		},
		"facing=south,powered=true": {
			"model": "automation:blocks/chopping_block_powered",
			"y": 180
		},
		"facing=west,powered=true": {
			"model": "automation:blocks/chopping_block_powered",
			"y": 270
		},
		"facing=east,powered=true": {
			"model": "automation:blocks/chopping_block_powered",
			"y": 90
		},
		"facing=up,powered=true": {
			"model": "automation:blocks/chopping_block_powered",
			"x": -90
		},
		"facing=down,powered=true": {
			"model": "automation:blocks/chopping_block_powered",
			"x": 90
		}
	}
}

 

In "assets.automation.models.blocks" I have "chopping_block.json"

Spoiler

{
	"parent": "block/cube",
	"textures": {
		"particle": "automation:blocks/chopping_block/north",
		"north": "automation:blocks/chopping_block/north",
		"south": "automation:blocks/chopping_block/south",
		"west": "automation:blocks/chopping_block/west",
		"east": "automation:blocks/chopping_block/east",
		"up": "automation:blocks/chopping_block/up",
		"down": "automation:blocks/chopping_block/down"
	}
}

 

and also "chopping_block_powered.json"

Spoiler

{
	"parent": "block/cube",
	"textures": {
		"particle": "automation:blocks/chopping_block/north_powered",
		"north": "automation:blocks/chopping_block/north_powered",
		"south": "automation:blocks/chopping_block/south_powered",
		"west": "automation:blocks/chopping_block/west_powered",
		"east": "automation:blocks/chopping_block/east_powered",
		"up": "automation:blocks/chopping_block/up_powered",
		"down": "automation:blocks/chopping_block/down_powered"
	}
}

 

In "assets.automation.textures.blocks.chopping_block" folder there are all 12 PNG files with the right name.

 

And in my "ChoppingBlock" class I have these methods (that I copied - I understand them easily btw)

Spoiler

@Override
public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity entity, ItemStack stack) {
	if (entity != null) {
		world.setBlockState(pos, state.with(BlockStateProperties.FACING, getFacingFromEntity(pos, entity)), 2);
	}
}

private static Direction getFacingFromEntity(BlockPos block, LivingEntity entity) {
	return Direction.getFacingFromVector((float) (entity.prevPosX - block.getX()), (float) (entity.prevPosY - block.getY()), (float) (entity.prevPosZ - block.getZ()));
}

 

Questions:

1) Does file in "assets.automation.blockstates" have to be really that complicated? I mean that what texture it has to use is defined in files in "assets.automation.models.blocks". In the first file there are basically two states - when it is powered use this model and when it is not powered use this model. I tried to understand that "facing" parameter and "x" and "y" parameter but I don't understand why it has to be this way.

2) When I used to place my "ChoppingBlock" it always faced the same direction eg. north part of cube faced north etc. and it didn't matter from what position I placed it. So I added that part of code (onBlockPlaceBy), but I feel I am kinda cheating? :D I tried to copy code from chest or furnace or piston because these blocks always face to you when you place them but I didn't find the part in the code what causes it. How do you do it by "default" so I don't have to put this part of code into every block that has different textures on each side.

 

Thx for everything btw :D

Link to comment
Share on other sites

3 hours ago, KillBill61 said:

1) Does file in "assets.automation.blockstates" have to be really that complicated?

No, use Forge states.

https://mcforge.readthedocs.io/en/1.13.x/models/blockstates/forgeBlockstates/

3 hours ago, KillBill61 said:

So I added that part of code (onBlockPlaceBy), but I feel I am kinda cheating?

Eh, that's more or less how it works. Furnaces handle it in AbstractFurnaceBlock in a method called getStateForPlacement().

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.

Link to comment
Share on other sites

Thx for the answers - the second one with "getStateForPlacement()" is much better than what I had.

 

But I still don't know about the first one. When I do for example:

{
	"variants": {
		"powered=false": {
			"model": "automation:blocks/chopping_block"
		},
		"powered=true": {
			"model": "automation:blocks/chopping_block_powered"
		}
	}
}

it always face north and I still don't understand how should I do it "easily" so I don't have to define all 6 facing states. I want that my block acts for example as a furnace. Is there some easy way or I need to define all 6 facing states as I did firstly? I didn't get it from website you posted. How my json file have to look like?

Link to comment
Share on other sites

You need to include all the variant properties. When using Forge states you can list each property separately and it will do the combinations for you:

https://github.com/Draco18s/ReasonableRealism/blob/1.14.4/src/main/resources/assets/harderores/blockstates/axel.json#L10-L34

Notice how there is both a axel_orientation variant and a facing variant.

Edited by Draco18s

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.

Link to comment
Share on other sites

Hi,

still not working - I removed the "default" part because it is not necessary as I read (and it does nothing with my problem), but I made this:

Spoiler



{
	"forge_marker": 1,
	"variants": {
		"powered": {
			"false": {
				"model": "automation:blocks/chopping_block"
			},
			"true": {
				"model": "automation:blocks/chopping_block_powered"
			}
		},
		"facing": {
			"north": {
				"y": 0
			},
			"east": {
				"y": 90
			},
			"south": {
				"y": 180
			},
			"west": {
				"y": 270
			},
			"down": {
				"x": 90
			},
			"up": {
				"x": 270
			}
		}
	}
}


 

as my json file in blockstate (everything other is same - I only changed this file) and it doesn't load texture in game and I found this part that is probably why it does not work:

Spoiler

[m[32m[13:49:00] [Forge Version Check/INFO] [ne.mi.fm.VersionChecker/]: [forge] Found status: BETA_OUTDATED Current: 30.0.15 Target: 30.0.26
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=north,powered=false'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=east,powered=false'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=south,powered=true'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=west,powered=true'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=west,powered=false'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=east,powered=true'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=south,powered=false'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=down,powered=true'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=north,powered=true'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=down,powered=false'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=up,powered=true'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=up,powered=false'
[m[33m[13:49:01] [Server-Worker-5/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' in resourcepack: 'Mod Resources': Missing model, expected to find a string

 

Can you help me? I am totally lost :D I swear I am not that stoopid.

Link to comment
Share on other sites

If that's the entire error, I'm not sure. It could be that your blockstate is fine, but the model is not.

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.

Link to comment
Share on other sites

1 hour ago, Draco18s said:

If that's the entire error, I'm not sure. It could be that your blockstate is fine, but the model is not.

what is wrong with it? :D

 

Spoiler

{
	"parent": "block/cube",
	"textures": {
		"particle": "automation:blocks/chopping_block/north",
		"north": "automation:blocks/chopping_block/north",
		"south": "automation:blocks/chopping_block/south",
		"west": "automation:blocks/chopping_block/west",
		"east": "automation:blocks/chopping_block/east",
		"up": "automation:blocks/chopping_block/up",
		"down": "automation:blocks/chopping_block/down"
	}
}

 

again - everything is in my first comment btw - I am just resending it now

Link to comment
Share on other sites

2 hours ago, Draco18s said:

If that's the entire error, I'm not sure.

 

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.

Link to comment
Share on other sites

So for testing I removed the "facing" and leave there only the "powered"

Everything is same except my blockstates file:

Spoiler

{
	"forge_marker": 1,
	"variants": {
		"powered": {
			"false": {
				"model": "automation:blocks/chopping_block"
			},
			"true": {
				"model": "automation:blocks/chopping_block_powered"
			}
		}
	}
}

 

and in my ChoppingBlock class I changed this:

Spoiler

@Override
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
	//builder.add(BlockStateProperties.FACING, BlockStateProperties.POWERED);
	builder.add(BlockStateProperties.POWERED);
}

 

and this is the only problem it prints:

Spoiler

[m[32m[19:59:38] [Forge Version Check/INFO] [ne.mi.fm.VersionChecker/]: [forge] Found status: BETA_OUTDATED Current: 30.0.15 Target: 30.0.30
[m[33m[19:59:39] [Server-Worker-6/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#powered=false'
[m[33m[19:59:39] [Server-Worker-6/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#powered=true'
[m[33m[19:59:39] [Server-Worker-6/WARN] [minecraft/ModelBakery]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' in resourcepack: 'Mod Resources': Missing model, expected to find a string

 

I still don't know what to do...

 

Also side question: When I use my first complicated code I can see my block that is black, white and red as should look, but for some reason when I hold it, it has same texture and look except one thing and that is that everything that should be red is white... ???

Link to comment
Share on other sites

You removed the facing property and the errors involving the facing property went away. Gasp.

 

The underlying issue (whatever it is) still exists and nothing has changed. I don't know what this issue is. 

Edited by Draco18s

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.

Link to comment
Share on other sites

Am I using the

"forge_marker": 1,

correctly?

I mean... I do this for MC version 1.15.1 and the forge version is 30.0.15

I have feeling that it completely ignores this line, because with or without it it do always the same things and it would make sense why it shows these errors.

I downloaded it from forge page and normally followed instructions and everything works except this. Or do I need something else that is not included in my files or code?

Link to comment
Share on other sites

3 hours ago, KillBill61 said:

I have feeling that it completely ignores this line, because with or without it it do always the same things and it would make sense why it shows these errors.

If it "does the same thing with or without that line" then that line isn't related to the error.

(That line is what lets you specify two variants once each, rather than X*Y times)

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.

Link to comment
Share on other sites

1 hour ago, Draco18s said:

If it "does the same thing with or without that line" then that line isn't related to the error.

I am not saying it is 'error'. I am saying that line is telling that it should use that "enchanted scripting" where you don't have to use "vanilla scripting" and make all the combinations by yourself. I am saying that the reason why I have these errors is because it is not using that "forge_marker" ("enchanted scripting") and instead it is using "vanilla scripting" and that is why it shows these errors.

 

Btw so much thanks to you that you are wasting time with me :( I appreciate it.

If anybody don't know where is the problem (I even download whole forge again) there is probably end and I am stucked with "vanilla" while I am making blockstates files. Just pray for me if some of my future blocks will have 5 states with 10 values and I have to create all combinations xD

Link to comment
Share on other sites

I misunderstood.

Yes. You need the forge_marker in order to use forge states.

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.

Link to comment
Share on other sites

1 hour ago, Draco18s said:

I misunderstood.

Yes. You need the forge_marker in order to use forge states.

Well - yes :D But the question is should it work with the basic forge I downloaded as I wrote or I need some other plugin, files that I missed? I can't find anything.

Link to comment
Share on other sites

...what?

Of course it works with "the basic forge" (there is Forge and there is Forge, there aren't "extra plugins"). Your question makes no sense.

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.

Link to comment
Share on other sites

Ok.

Let me very, very blunt here.

 

Explain your problem and post all relevant code, preferably as a git repo.

 

Your last several posts have flip-flopped back and forth over what you did (or didn't do), that it worked (or didn't), and trying to ask a question about why what you did worked (or didn't) that I have no fucking clue what it is you're asking me (including whether or not you still have a problem!).

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.

Link to comment
Share on other sites

Fine I do it again. This is current status. I included everything that is part of it.

 

Spoiler

image.thumb.png.f99479562f76a7ac9f4fc44dfd84d600.png

 

"chopping_block.json" in "assets.automation.blockstates"

Spoiler

{
	"forge_marker": 1,
	"variants": {
		"powered": {
			"false": {
				"model": "automation:blocks/chopping_block"
			},
			"true": {
				"model": "automation:blocks/chopping_block_powered"
			}
		},
		"facing": {
			"north": {
				"y": 0
			},
			"east": {
				"y": 90
			},
			"south": {
				"y": 180
			},
			"west": {
				"y": 270
			},
			"down": {
				"x": 90
			},
			"up": {
				"x": 270
			}
		}
	}
}

 

 

"chopping_block.json" in "assets.automation.models.blocks"

Spoiler

{
	"parent": "block/cube",
	"textures": {
		"particle": "automation:blocks/chopping_block/north",
		"north": "automation:blocks/chopping_block/north",
		"south": "automation:blocks/chopping_block/south",
		"west": "automation:blocks/chopping_block/west",
		"east": "automation:blocks/chopping_block/east",
		"up": "automation:blocks/chopping_block/up",
		"down": "automation:blocks/chopping_block/down"
	}
}

 

 

"chopping_block_powered.json" in "assets.automation.models.blocks"

Spoiler

{
	"parent": "block/cube",
	"textures": {
		"particle": "automation:blocks/chopping_block/north_powered",
		"north": "automation:blocks/chopping_block/north_powered",
		"south": "automation:blocks/chopping_block/south_powered",
		"west": "automation:blocks/chopping_block/west_powered",
		"east": "automation:blocks/chopping_block/east_powered",
		"up": "automation:blocks/chopping_block/up_powered",
		"down": "automation:blocks/chopping_block/down_powered"
	}
}

 

 

"AutoTrees.java"

Spoiler

package com.autotrees.main;

import com.autotrees.mechanics.AutoPlanting;
import com.autotrees.objects.ChoppingBlock;

import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;

@Mod(ModSetup.MODID)
public class AutoTrees {
	
	//------------------------------------------------------------------------------------------------------------------------------------------------
	
	//recipe book - own tab with these recipes + unlocked from start maybe?
	
	//------------------------------------------------------------------------------------------------------------------------------------------------
	
    public AutoTrees() {
    	//MinecraftForge.EVENT_BUS.register(new AutoPlanting());
        MinecraftForge.EVENT_BUS.register(this);
    }
    
    //------------------------------------------------------------------------------------------------------------------------------------------------

	@EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
    public static class RegistryEventsMod {
    	@SubscribeEvent
        public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
            blockRegistryEvent.getRegistry().register(ChoppingBlock.getINSTANCE());
        }
    	
    	@SubscribeEvent
        public static void onItemsRegistry(final RegistryEvent.Register<Item> itemRegistryEvent) {
            itemRegistryEvent.getRegistry().register(ChoppingBlock.getBlockItemINSTANCE());
        }
    	
    	@SubscribeEvent
        public static void onTileEntityRegistry(final RegistryEvent.Register<TileEntityType<?>> tileEntityRegistryEvent) {
    		//tileEntityRegistryEvent.getRegistry().register(TileEntityType.Builder.create(ChoppingBlockTile::new, ModSetup.CHOPPING_BLOCK).build(null).setRegistryName("firstblock"));
        }
    }
}

 

 

"ChoppingBlock.java"

Spoiler

package com.autotrees.objects;

import javax.annotation.Nullable;

import com.autotrees.main.ModSetup;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.Item;
import net.minecraft.state.StateContainer;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.common.ToolType;
import net.minecraftforge.fml.network.NetworkHooks;

public class ChoppingBlock extends Block {

	//otazky - ten file je naky komplikovany - nejde to rychleji?, FACING automaticky? a co ta func depricated a click taky a action neni?
	//proc je item bily?
	
	// textura, funkce-gui-inventar

	private static final ChoppingBlock INSTANCE = new ChoppingBlock();

	private ChoppingBlock() {
		super(getProperties());
		setRegistryName(ModSetup.CHOPPING_BLOCK_NAME);
	}

	public static Block getINSTANCE() {
		return INSTANCE;
	}

	private static Properties getProperties() {
		Properties properties = Properties.create(Material.IRON);
		properties.sound(SoundType.METAL);
		properties.harvestTool(ToolType.PICKAXE);
		properties.hardnessAndResistance(3.0f);
		properties.lightValue(10);
		return properties;
	}

	public static Item getBlockItemINSTANCE() {
		return ChoppingBlockItem.getINSTANCE();
	}

	// ------------------------------------------------------------------------------------------------------------------------------------------------
	/*
	@Override
    public boolean hasTileEntity(BlockState state) {
        return true;
    }

    @Nullable
    @Override
    public TileEntity createTileEntity(BlockState state, IBlockReader world) {
        return new ChoppingBlockTile();
    }*/

    @Override
    public int getLightValue(BlockState state) {
        return state.get(BlockStateProperties.POWERED) ? lightValue : 0;
    }
	
	@Override
	public BlockState getStateForPlacement(BlockItemUseContext context) {
		return this.getDefaultState().with(BlockStateProperties.FACING, context.getPlacementHorizontalFacing().getOpposite());
	}
	
	@Override
    protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
        builder.add(BlockStateProperties.FACING, BlockStateProperties.POWERED);
		//builder.add(BlockStateProperties.POWERED);
    }
	/*
	@Override
	public ActionResultType func_225533_a_(BlockState p_225533_1_, World p_225533_2_, BlockPos p_225533_3_, PlayerEntity p_225533_4_, Hand p_225533_5_, BlockRayTraceResult p_225533_6_) {
        if (!p_225533_2_.isRemote) {
            TileEntity tileEntity = p_225533_2_.getTileEntity(p_225533_3_);
            if (tileEntity instanceof INamedContainerProvider) {
                NetworkHooks.openGui((ServerPlayerEntity) p_225533_4_, (INamedContainerProvider) tileEntity, tileEntity.getPos());
            } else {
                throw new IllegalStateException("Our named container provider is missing!");
            }
        }
        return super.func_225533_a_(p_225533_1_, p_225533_2_, p_225533_3_, p_225533_4_, p_225533_5_, p_225533_6_);
    }*/
}

 

 

"ChoppingBlockItem.java"

Spoiler

package com.autotrees.objects;

import com.autotrees.main.ModSetup;

import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;

public class ChoppingBlockItem extends BlockItem {

	private static final BlockItem INSTANCE = new ChoppingBlockItem();

	private ChoppingBlockItem() {
		super(ModSetup.CHOPPING_BLOCK, getProperties());
		setRegistryName(ModSetup.CHOPPING_BLOCK_NAME);
	}

	public static BlockItem getINSTANCE() {
		return INSTANCE;
	}
	
	private static Properties getProperties() {
		Properties propeties = new Item.Properties().group(AutomationItemGroup.getINSTANCE());
		return propeties;
	}
}

 

 

"AutomationItemGroup.java"

Spoiler

package com.autotrees.objects;

import com.autotrees.main.ModSetup;

import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;

public class AutomationItemGroup extends ItemGroup {

	private static final AutomationItemGroup INSTANCE = new AutomationItemGroup();

	private AutomationItemGroup() {
		super(ModSetup.AUTOMATION_ITEM_GROUP_NAME);
	}

	@Override
	public ItemStack createIcon() {
        return new ItemStack(ModSetup.CHOPPING_BLOCK);
	}

	public static AutomationItemGroup getINSTANCE() {
		return INSTANCE;
	}
}

 

 

"ModSetup.java"

Spoiler

package com.autotrees.main;

import com.autotrees.objects.ChoppingBlock;
import com.autotrees.objects.ChoppingBlockTile;

import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.registries.ObjectHolder;

public class ModSetup {
	
	//mechanics
	public static final int UNTIL_PLANT_TIMER = 5;

	//names, strings, registry names etc.
	public static final String MODID= "automation";
	public static final String CHOPPING_BLOCK_NAME = "chopping_block";
	public static final String AUTOMATION_ITEM_GROUP_NAME = "automation_item_group";
	
	//------------------------------------------------------------------------------------------------------------------------------------------------
	
	@ObjectHolder((MODID+":"+CHOPPING_BLOCK_NAME))
	public static ChoppingBlock CHOPPING_BLOCK;
	
	//@ObjectHolder((MODID+":"+CHOPPING_BLOCK_NAME))
    //public static TileEntityType<ChoppingBlockTile> CHOPPING_BLOCK_TILE;
}

 

 

I wanted include debug file but it is too long - only errors and warnings is this:

Spoiler

[08Jan2020 00:00:49.156] [Forge Version Check/INFO] [net.minecraftforge.fml.VersionChecker/]: [forge] Found status: BETA_OUTDATED Current: 30.0.30 Target: 30.0.33
[08Jan2020 00:00:50.249] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=north,powered=false'
[08Jan2020 00:00:50.250] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=east,powered=false'
[08Jan2020 00:00:50.251] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=south,powered=true'
[08Jan2020 00:00:50.251] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=west,powered=true'
[08Jan2020 00:00:50.252] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=west,powered=false'
[08Jan2020 00:00:50.252] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=east,powered=true'
[08Jan2020 00:00:50.252] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=south,powered=false'
[08Jan2020 00:00:50.253] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=down,powered=true'
[08Jan2020 00:00:50.254] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=north,powered=true'
[08Jan2020 00:00:50.254] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=down,powered=false'
[08Jan2020 00:00:50.255] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=up,powered=true'
[08Jan2020 00:00:50.256] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' missing model for variant: 'automation:chopping_block#facing=up,powered=false'
[08Jan2020 00:00:50.257] [Server-Worker-2/WARN] [net.minecraft.client.renderer.model.ModelBakery/]: Exception loading blockstate definition: 'automation:blockstates/chopping_block.json' in resourcepack: 'Mod Resources': Missing model, expected to find a string

 

 

Question and problem:

Block has default purple/black texture so it didn't load. What am I doing wrong?

Edited by KillBill61
Link to comment
Share on other sites

1 hour ago, KillBill61 said:

private static final ChoppingBlock INSTANCE = new ChoppingBlock();

Oh hey look. A static initializer. Don't do this. It fucks everything up. Problematic Code #8.

 

1 hour ago, KillBill61 said:

public static BlockItem getINSTANCE() { return INSTANCE; }

This is literally what @ObjectHolders are for. Not this garbage.

Edit, I see you're using this to register your blocks. Don't do this either. Just call new inside the registry event.

Edited by Draco18s

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.

Link to comment
Share on other sites

I changed it so it probably eliminate some future problems but it actually didn't change anything.

I changed this:

 

"AutoTrees"

Spoiler

package com.autotrees.main;

import com.autotrees.mechanics.AutoPlanting;
import com.autotrees.objects.ChoppingBlock;
import com.autotrees.objects.ChoppingBlockItem;

import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;

@Mod(ModSetup.MODID)
public class AutoTrees {
	
	//------------------------------------------------------------------------------------------------------------------------------------------------
	
	//recipe book - own tab with these recipes + unlocked from start maybe?
	
	//------------------------------------------------------------------------------------------------------------------------------------------------
	
    public AutoTrees() {
    	MinecraftForge.EVENT_BUS.register(new AutoPlanting());
        MinecraftForge.EVENT_BUS.register(this);
    }
    
    //------------------------------------------------------------------------------------------------------------------------------------------------

	@EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
    public static class RegistryEventsMod {
    	@SubscribeEvent
        public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
            blockRegistryEvent.getRegistry().register(new ChoppingBlock());
        }
    	
    	@SubscribeEvent
        public static void onItemsRegistry(final RegistryEvent.Register<Item> itemRegistryEvent) {
            itemRegistryEvent.getRegistry().register(new ChoppingBlockItem());
        }
    	
    	@SubscribeEvent
        public static void onTileEntityRegistry(final RegistryEvent.Register<TileEntityType<?>> tileEntityRegistryEvent) {
    		//tileEntityRegistryEvent.getRegistry().register(TileEntityType.Builder.create(ChoppingBlockTile::new, ModSetup.CHOPPING_BLOCK).build(null).setRegistryName("firstblock"));
        }
    }
}

 

 

"ModSetup.java"

Spoiler

package com.autotrees.main;

import com.autotrees.objects.AutomationItemGroup;
import com.autotrees.objects.ChoppingBlock;
import com.autotrees.objects.ChoppingBlockItem;
import com.autotrees.objects.ChoppingBlockTile;

import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.registries.ObjectHolder;

public class ModSetup {
	
	//mechanics
	public static final int UNTIL_PLANT_TIMER = 5;

	//names, strings, registry names etc.
	public static final String MODID= "automation";
	public static final String CHOPPING_BLOCK_NAME = "chopping_block";
	public static final String AUTOMATION_ITEM_GROUP_NAME = "automation_item_group";
	
	//------------------------------------------------------------------------------------------------------------------------------------------------
	
	@ObjectHolder((MODID+":"+CHOPPING_BLOCK_NAME))
	public static ChoppingBlock CHOPPING_BLOCK;
	
	@ObjectHolder((MODID+":"+CHOPPING_BLOCK_NAME))
	public static ChoppingBlockItem CHOPPING_BLOCK_ITEM;
	
	//@ObjectHolder((MODID+":"+CHOPPING_BLOCK_NAME))
    //public static TileEntityType<ChoppingBlockTile> CHOPPING_BLOCK_TILE;
}

 

 

"ChoppingBlock.java"

Spoiler

package com.autotrees.objects;

import javax.annotation.Nullable;

import com.autotrees.main.ModSetup;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.item.Item;
import net.minecraft.state.StateContainer;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.common.ToolType;
import net.minecraftforge.fml.network.NetworkHooks;

public class ChoppingBlock extends Block {

	//otazky - ten file je naky komplikovany - nejde to rychleji?, FACING automaticky? a co ta func depricated a click taky a action neni?
	//proc je item bily?
	
	// textura, funkce-gui-inventar

	public ChoppingBlock() {
		super(getProperties());
		setRegistryName(ModSetup.CHOPPING_BLOCK_NAME);
	}

	private static Properties getProperties() {
		Properties properties = Properties.create(Material.IRON);
		properties.sound(SoundType.METAL);
		properties.harvestTool(ToolType.PICKAXE);
		properties.hardnessAndResistance(3.0f);
		properties.lightValue(10);
		return properties;
	}

	// ------------------------------------------------------------------------------------------------------------------------------------------------
	/*
	@Override
    public boolean hasTileEntity(BlockState state) {
        return true;
    }

    @Nullable
    @Override
    public TileEntity createTileEntity(BlockState state, IBlockReader world) {
        return new ChoppingBlockTile();
    }*/

    @Override
    public int getLightValue(BlockState state) {
        return state.get(BlockStateProperties.POWERED) ? lightValue : 0;
    }
	
	@Override
	public BlockState getStateForPlacement(BlockItemUseContext context) {
		return this.getDefaultState().with(BlockStateProperties.FACING, context.getPlacementHorizontalFacing().getOpposite());
	}
	
	@Override
    protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
        builder.add(BlockStateProperties.FACING, BlockStateProperties.POWERED);
		//builder.add(BlockStateProperties.POWERED);
    }
	/*
	@Override
	public ActionResultType func_225533_a_(BlockState p_225533_1_, World p_225533_2_, BlockPos p_225533_3_, PlayerEntity p_225533_4_, Hand p_225533_5_, BlockRayTraceResult p_225533_6_) {
        if (!p_225533_2_.isRemote) {
            TileEntity tileEntity = p_225533_2_.getTileEntity(p_225533_3_);
            if (tileEntity instanceof INamedContainerProvider) {
                NetworkHooks.openGui((ServerPlayerEntity) p_225533_4_, (INamedContainerProvider) tileEntity, tileEntity.getPos());
            } else {
                throw new IllegalStateException("Our named container provider is missing!");
            }
        }
        return super.func_225533_a_(p_225533_1_, p_225533_2_, p_225533_3_, p_225533_4_, p_225533_5_, p_225533_6_);
    }*/
}

 

 

"ChoppingBlockItem.java"

Spoiler

package com.autotrees.objects;

import com.autotrees.main.ModSetup;

import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;

public class ChoppingBlockItem extends BlockItem {

	public ChoppingBlockItem() {
		super(ModSetup.CHOPPING_BLOCK, getProperties());
		setRegistryName(ModSetup.CHOPPING_BLOCK_NAME);
	}
	
	private static Properties getProperties() {
		Properties propeties = new Item.Properties().group(AutomationItemGroup.getINSTANCE());
		return propeties;
	}
}

 

 

"AutomationItemGroup" is same because I can't use it with @ObjectHolder and calling its constructor multiple time means multiple tabs in game.

 

 

Just screenshot of my blocks (still same as before changes). Don't mind my texture - just trying how it looks in game + information about what is which side. You can see that placed block don't have texture and the blockitem has texture.

Spoiler

image.png.59b0bc7d3fb27e0146fe1884a2e13eef.png

 

This is "chopping_block.json" in "assets.automation.models.item"

Spoiler

{
  "parent": "automation:blocks/chopping_block"
}

 

 

Also can you be more decent? I know you try to help me but you are constantly swearing at me and it makes me sad :/ You know you can write it without it.

Link to comment
Share on other sites

  • 2 months later...

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
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.

 Share



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.