Jump to content

blahblahbal

Members
  • Posts

    96
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed
  • Personal Text
    I am new!

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

blahblahbal's Achievements

Stone Miner

Stone Miner (3/8)

0

Reputation

  1. I think you misunderstood - I'm not trying to get it to show up in the recipe book, I'm trying to get the recipe to work at all. Currently when I put the items from the JSON recipe file into the modded station, nothing shows up in the result slot.
  2. What is that supposed to mean? I'm not sure how that helps point me in the right direction to be completely honest. I'm really not sure what I need to do to fix it. I learn by seeing something, and then being explained how that something works.
  3. The recipe is a JSON file, in the format of a shapeless recipe (which I think should work based on the code I did... maybe I have something wrong there too), and the log literally just says what I put above (along with normal stuff - the only thing that's out of the ordinary is the "unknown recipe category" part). The recipe also doesn't work somehow (like, when I put these items into the modded station, the result doesn't show up in the output slot), but here is the JSON: { "type": "coreascent:catalyzer", "ingredients": [ { "item": "minecraft:coal_block", "item": "coreascent:sulphur", "item": "minecraft:lava_bucket" } ], "result": { "item": "minecraft:diamond", "count": 1 } }
  4. Alright, so I'm having an issue with a crafting station I'm adding, and (there is another issue as well - trying to fix that too) every time I load up a world, it says "Unknown recipe category: coreascent:catalyzer/coreascent:catalyzer/diamond_catalyzer" in the log. I must be missing some sort of registering for the recipe type, but I can't for the life of me figure out what it is. Here is the github page: https://github.com/blahblahbal/CoreAscensionForge1.18 (Not sure which file is missing something, but the recipe stuff is in coreascent\api\crafting)
  5. Okay, I'm an idiot. I now know why it was erroring, but now I'm having a different problem. The slab just won't place. Working on it...
  6. Okay so now I'm running into a similar problem. It now says "Cannot set property PropertyDirection{name=dir, clazz=class net.minecraft.util.EnumFacing, values=[down, up]} to north on block null, it is not an allowed value." But... why is the block null? I don't understand why or how it could be null. EDIT: I've resorted to extending the Block class for a new ModBlockSideSlab class, and then creating a ModItemBlockSideSlab class, and a ModBlockSideSlabHalf class. No double slab class is needed because that would be pointless.
  7. Alright, so.... I've been trying to do something that, well, probably all of us have wanted to do at some point. Add side slabs. And... it's not going too well. Currently, I'm getting the error "Cannot set property PropertyEnum{name=dir, clazz=class net.minecraft.util.EnumFacing, values=[down, up, north, south, west, east]} as it does not exist in BlockState{block=null, properties=[variant]}"... but, I've created the property. Here is my code: package blahblahbal.blahmod.blocks; import java.util.Random; import blahblahbal.blahmod.Main; import net.minecraft.block.Block; import net.minecraft.block.BlockSlab; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.IStringSerializable; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public abstract class ModBlockSlab extends BlockSlab { /** * The property used for the variant. * Needed for interactions with ItemSlab. */ public static final PropertyBool VARIANT_PROPERTY = PropertyBool.create("variant"); public static final PropertyEnum<EnumFacing> DIR = PropertyEnum.<EnumFacing>create("dir", EnumFacing.class); /** * The unlocalized name. */ private static final String NAME = "stainedBricksSlab"; /** * Hardness value for the material. */ private static final float HARDNESS = 2.0f; /** * Resistance value for the material. */ private static final float RESISTANCE = 10.0f; /** * The bit in metadata used by the half property. */ private static final int HALF_META_BIT = 8; /** * Name - needed for creating the model. */ public String name; public abstract Item getHalfSlabReference(); /** * Initializes a new instance of the ModBlockSlab class. * @param uname the unlocalized name of this ModBlockSlab */ public ModBlockSlab(String uname, Material m) { super(m); this.useNeighborBrightness = !this.isDouble(); setHardness(HARDNESS); setResistance(RESISTANCE); setStepSound(soundTypePiston); this.name = uname; setUnlocalizedName(uname); if (uname == "sequoiaSlab" || uname == "palmSlab" || uname == "cedarSlab" || uname == "dreadSlab" || uname == "frostSlab") { this.setStepSound(soundTypeWood); this.setHarvestLevel("axe", 0); } if (uname == "dirtSlab" || uname == "grassSlab") { this.setStepSound(soundTypeGrass); this.setHarvestLevel("shovel", 0); } if (uname == "leatherSlab" || uname == "woolSlab") { this.setStepSound(soundTypeCloth); } if (!this.isDouble()) { setCreativeTab(Main.blahTabBlock); } IBlockState blockState = this.createBlockState().getBaseState(); blockState = blockState.withProperty(VARIANT_PROPERTY, false).withProperty(DIR, EnumFacing.NORTH); if (!this.isDouble() && !this.name.contains("side")) { blockState = blockState.withProperty(HALF, EnumBlockHalf.BOTTOM); } setDefaultState(blockState); } /** * Gets the ID for the game registry. * @return the unique id for the registry. */ public final String getId() { return this.innerGetId(this.isDouble()); } /** * Gets the unlocalized name based on metadata/damage. * @param metadata block metadata. * @return the unlocalized name. */ @Override public final String getUnlocalizedName(final int metadata) { return this.getUnlocalizedName(); } /** * Gets the value of the variant property based on the item. * @param itemStack item stack. * @return the variant value null. */ @Override public final Object getVariant(final ItemStack itemStack) { return false; } /** * Gets the variant property. * @return the variant property null. */ @Override public final IProperty getVariantProperty() { return VARIANT_PROPERTY; } @Override public void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos) { if (!this.name.contains("side")) { super.setBlockBoundsBasedOnState(worldIn, pos); } else { if (this.isDouble()) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } else { IBlockState iblockstate = worldIn.getBlockState(pos); if (iblockstate.getBlock() == this) { if (iblockstate.getValue(DIR) == EnumFacing.NORTH) { this.setBlockBounds(0.5F, 0F, 0F, 1F, 1F, 1F); } else if (iblockstate.getValue(DIR) == EnumFacing.EAST) { this.setBlockBounds(0F, 0F, 0.5F, 1F, 1F, 1F); } else if (iblockstate.getValue(DIR) == EnumFacing.WEST) { this.setBlockBounds(0F, 0F, 0F, 1F, 1F, 0.5F); } else if (iblockstate.getValue(DIR) == EnumFacing.SOUTH) { this.setBlockBounds(0F, 0F, 0F, 0.5F, 1F, 1F); } } } } } @Override public void setBlockBoundsForItemRender() { if (!this.name.contains("side")) { if (this.isDouble()) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } else { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); } } else { if (this.isDouble()) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } else { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1F, 0.5F); } } } @Override public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { if (this.name.contains("side")) { IBlockState iblockstate = super.onBlockPlaced(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer).withProperty(HALF, BlockSlab.EnumBlockHalf.BOTTOM); if (this.isDouble()) return iblockstate; else if (facing == EnumFacing.NORTH) { return iblockstate.withProperty(DIR, EnumFacing.NORTH); } else if (facing == EnumFacing.EAST) { return iblockstate.withProperty(DIR, EnumFacing.EAST); } else if (facing == EnumFacing.WEST) { return iblockstate.withProperty(DIR, EnumFacing.WEST); } else if (facing == EnumFacing.SOUTH) { return iblockstate.withProperty(DIR, EnumFacing.SOUTH); } } IBlockState iblockstate = super.onBlockPlaced(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer).withProperty(HALF, BlockSlab.EnumBlockHalf.BOTTOM); return this.isDouble() ? iblockstate : (facing != EnumFacing.DOWN && (facing == EnumFacing.UP || (double)hitY <= 0.5D) ? iblockstate : iblockstate.withProperty(HALF, BlockSlab.EnumBlockHalf.TOP)); } /** * Gets a block state from metadata. * @param meta the metadata or color value. * @return a block state with the meta encoded as the variant property. */ @Override public final IBlockState getStateFromMeta(final int meta) { IBlockState blockState = this.getDefaultState(); blockState = blockState.withProperty(VARIANT_PROPERTY, false); if (!this.isDouble()) { if (!this.name.contains("side")) { EnumBlockHalf value = EnumBlockHalf.BOTTOM; if ((meta & HALF_META_BIT) != 0) { value = EnumBlockHalf.TOP; } blockState = blockState.withProperty(HALF, value); } else { EnumFacing value = EnumFacing.NORTH; if (meta == 2) { value = EnumFacing.SOUTH; } else if (meta == 3) { value = EnumFacing.WEST; } else if (meta == 4) { value = EnumFacing.EAST; } blockState = blockState.withProperty(DIR, value); } } return blockState; } @Override public int quantityDropped(Random r) { return this.isDouble() ? 2 : 1; } /** * Gets the metadata value from a block state. * @param state the block state. * @return the metadata or color value. */ @Override public final int getMetaFromState(final IBlockState state) { if (this.isDouble()) { return 0; } if (!this.name.contains("side")) { if ((EnumBlockHalf)state.getValue(HALF) == EnumBlockHalf.TOP) { return HALF_META_BIT; } else { return 0; } } else { if ((EnumFacing)state.getValue(DIR) == EnumFacing.NORTH) { return 1; } else if ((EnumFacing)state.getValue(DIR) == EnumFacing.SOUTH) { return 2; } else if ((EnumFacing)state.getValue(DIR) == EnumFacing.WEST) { return 3; } else if ((EnumFacing)state.getValue(DIR) == EnumFacing.EAST) { return 4; } return 0; } } /** * Gets the damage for the block's item when dropped. * @param state the block's state. * @return the metadata or color value. */ @Override public final int damageDropped(final IBlockState state) { return 0; } /** * Gets the item dropped when the block is broken. * @param blockState the block's state. * @param random the random number generator * @param unused an integer. * @return the half slab item. */ @Override public final Item getItemDropped(final IBlockState blockState, final java.util.Random random, final int unused) { return this.getHalfSlabReference(); } /** * Gets the item dropped when the block is broken. * @param world the world * @param blockPos the block position. * @return the item dropped, the half slab. */ /*@SideOnly(Side.CLIENT) @Override public final net.minecraft.item.Item getItem( final net.minecraft.world.World world, final net.minecraft.util.BlockPos blockPos) { String blockId = this.innerGetId(this.isDouble()); if (blockId.substring(0, 7) == "double_") { ItemStack i = new ItemStack(GameRegistry.findItem("blahmod", blockId.substring(7)), 2); return i.getItem(); } return GameRegistry.findItem("blahmod", blockId); }*/ /** * Creates the block state object. * @return the block state with properties defined. */ @Override protected final BlockState createBlockState() { if (this.isDouble()) { return new BlockState(this, new IProperty[] {VARIANT_PROPERTY}); } else { /*if (this.name.contains("side")) { return new BlockState(this, new IProperty[] {VARIANT_PROPERTY, DIR}); }*/ return new BlockState(this, new IProperty[] {VARIANT_PROPERTY, HALF, DIR}); } } /** * Gets the ID of the block. * @param isDoubleStacked override the isDouble() method. * @return the unique block id. */ private String innerGetId(final boolean isDoubleStacked) { String result = ""; if (isDoubleStacked) { result = "double_"; } String ID = ""; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs[0])) ID = "woolSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs[1])) ID = "ironSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs[2])) ID = "goldSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs[3])) ID = "diamondSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs[4])) ID = "emeraldSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs[5])) ID = "sulphurSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs[6])) ID = "limestoneSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs[7])) ID = "uraniumSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs2[0])) ID = "dirtSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs2[1])) ID = "grassSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs2[2])) ID = "leatherSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs2[3])) ID = "lapisSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs2[4])) ID = "obsidianSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs2[5])) ID = "mossSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs2[6])) ID = "endStoneBrickSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs2[7])) ID = "tadaniteSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.woodSlabs[0])) ID = "sequoiaSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.woodSlabs[1])) ID = "palmSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.woodSlabs[2])) ID = "cedarSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.woodSlabs[3])) ID = "petrifiedWoodSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.woodSlabs[4])) ID = "dreadSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.woodSlabs[5])) ID = "dreadSandSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.woodSlabs[6])) ID = "blackSandSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.woodSlabs[7])) ID = "frostSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs3[0])) ID = "blazeSlab"; if (Block.getIdFromBlock(this) == Block.getIdFromBlock(ModBlocks.slabs3[1])) ID = "frostBrickSlab"; return result + ID; } } Don't think that I know what I'm doing, because I don't. Don't criticize me because of that. All I want to know is *why* my code is causing the error I mentioned above, and how to fix it. I know it's possible to do this, because furnaces grab the direction you're facing and swap that when you place them. What I don't know is why it's giving me that error. (Also, the metadata saving/loading is probably wrong, and I'd like help with that if so. But the first priority is fixing the error. Further, I don't need criticisms on me not using metadata for different slab types. I know that this is bad practice, but I likely won't be releasing this mod, especially since this is a practice ground for me. I'll also likely be updating to a later version of Minecraft. I've delayed for so long because of the crap combat system in 1.9+.)
  8. Derp, thanks. I don't know why I didn't think of that myself.
  9. Is there a way to extend the range of the 'sustaining' function? My palm tree's foliage is too large to stay 'alive' with the default leaf code, and it'd look weird if I added wood to the foliage.
  10. Oh, that's... simple. I didn't even realize that was a thing. For some reason my eyes glossed over that in the mods I've looked at.
  11. I'm having another issue (actually this issue has been occurring for quite some time), this time with leaf decay. I've been looking at other mods' code for clues on how to get leaves to decay once the logs are mined away, but nothing has caught my eye. Is there something I'm missing? Currently, I have the leaves set to not decay at all, so my custom trees don't go nude over time. Here is the code for the leaves: https://github.com/blahblahbal/Blah-s-Minecraft-Mod/blob/Structure-fix/src/main/java/blahblahbal/blahmod/blocks/ModBlockLeaves.java Here is the code for the logs: https://github.com/blahblahbal/Blah-s-Minecraft-Mod/blob/Structure-fix/src/main/java/blahblahbal/blahmod/blocks/ModBlockLog.java EDIT: I just noticed that the indentation is all messed up. Please ignore that, I'll fix it. EDIT2: Fixed the indentation.
  12. How do I get the coordinates? Same as what I'm doing currently, except without the biomeName field? For example, I want to make Topaz Ore only generate in Desert biomes, and Sapphire Ore only generate in Ocean biomes. Similar to how Emerald Ore only generates in Extreme Hills.
  13. I have no clue how the chunk<X or Z> * 16 was missed by me, as it's in BlahWorldGen, and I'm pretty sure I just duplicated the code for the second file. I should probably merge the two of those generators, and use a boolean to determine which it should use. The reason my code for checking the biome is string-based is because that's how a tutorial showed me how to do it. How would I use the BiomeDictionary to check if the biome the generator is in is a certain biome? I've looked in the BiomeDictionary source file and can't find any method that looks promising.
  14. I've been meaning to post this for quite a while, but just never got around to it. I'm having issues with consistency in ore generation, such that one or more ores/blocks won't generate in the world. Here is the code for the generation (in CommonProxy.init()): https://github.com/blahblahbal/Blah-s-Minecraft-Mod/blob/Structure-fix/src/main/java/blahblahbal/blahmod/CommonProxy.java Here is the BlahWorldGen file: https://github.com/blahblahbal/Blah-s-Minecraft-Mod/blob/Structure-fix/src/main/java/blahblahbal/blahmod/world/BlahWorldGen.java And the BlahWorldGen2 file: https://github.com/blahblahbal/Blah-s-Minecraft-Mod/blob/Structure-fix/src/main/java/blahblahbal/blahmod/world/BlahWorldGen2.java To further explain: - Before I moved sulphur ore generation to the Nether, it wouldn't always generate in igneous rock. Now it generates in Netherrack just fine. - Lumite ore doesn't generate at the moment. I have no clue why this is happening, as it seems to be completely random when it spawns and when it doesn't. If, for example, I were to move the lines in CommonProxy.init() around, swapping lines, some of them will not generate. Is there anything I'm missing about the generation of ores that could be causing this issue?
  15. So.. wait a minute, I have to have a PotionEffect extension as well? Or is that created with the custom potion class? I'm just really confused by all this stuff. I want to add a Spelunker Potion (basically reveals ores), but now that I get into it it seems really complex in 1.8.9. No wonder there aren't any tutorials.
×
×
  • Create New...

Important Information

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