Jump to content

shadowdragon625

Members
  • Posts

    11
  • Joined

  • Last visited

Recent Profile Visitors

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

shadowdragon625's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. ...Huh. It's been about a whole year and a bit more and I still struggle with this, lol. Anybody still here to lend a hand or two with this?
  2. Update: So I have pinpointed possible routes that I can take, but I am unsure of how to modify them. Right now, I believe that in order for me to create the third texture block on top of the other two (default behavior), I must adjust the onBlockPlacedBy method accordingly to add in the third block. I understand that the issue has something to do with rendering, but I am unsure of how to get it to work as intended (with a transparent top door frame with slits like a regular door, just taller.) Using this code below (as I have included the necessary enums), how could I go about adding the third and final block on top of the other two that have already spawned? I have changed other properties that were more-so important to getting the program to recognize this new block, yet the third block never renders. Not even the purple and black boxes. public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld worldIn, BlockPos currentPos, BlockPos facingPos) { TripleBlockThirds tripleblockthirds = stateIn.get(THIRDS); if (facing.getAxis() == Direction.Axis.Y && tripleblockthirds == TripleBlockThirds.LOWER == (facing == Direction.UP)) { return facingState.getBlock() == this && facingState.get(THIRDS) != tripleblockthirds ? stateIn.with(FACING, facingState.get(FACING)).with(OPEN, facingState.get(OPEN)).with(HINGE, facingState.get(HINGE)).with(POWERED, facingState.get(POWERED)) : Blocks.AIR.getDefaultState(); } else { return tripleblockthirds == TripleBlockThirds.LOWER && facing == Direction.DOWN && !stateIn.isValidPosition(worldIn, currentPos) ? Blocks.AIR.getDefaultState() : super.updatePostPlacement(stateIn, facing, facingState, worldIn, currentPos, facingPos); } } @Override public void onBlockPlacedBy(World worldIn, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack) { worldIn.setBlockState(pos.up(), state.with(THIRDS, TripleBlockThirds.UPPER)); }
  3. I figured that was the case. At least I can pinpoint what I need to make this new door; actually implementing that is going to be complicated for me but I'll try. Thanks for the confirmation.
  4. Back here again with yet another question: how could I create a 3-block tall door using the similar technique that's used in forge for making the 2-block tall door? I've looked through the class files and found that there's a relationship between the state.properties packages that involve Half.java and DoubleBlockHalf.java, as well as their respective enums for handling. Inside the DoorBlock.java, there are methods that contain post-placement logic that makes sense in the 2-block tall standard, and should apply theoretically for the next block above for the very top, but upon investigation, it turns out that my only means of creating this door is to create whole new properties and functions that draw out this new door. My plan so far is to make new enums that store both "upper", "middle" and "lower" and top, mid, and bottom in my new package for my mod inside com.[myname].[mymod].states.properties. From there, I'll need to make a blockbase much like the DoorBlock.java that utilizes similar properties, but must also include post-place logic to place 2 more blocks above the bottom piece. How could I go about doing this? Or am I missing other important methods/classes?
  5. Very fair, I'll look into that. It's just a placeholder use for now. I appreciate it
  6. I finally managed to make it work the way that I wanted it to. It came out great! No bugs from what I can see so far. Here's my code that I did in two separate classes (aside from registering the block, textures, rotations, etc.) ChorusCraftingTable.java package com.asonjarossa.enderhaul.blocks; import com.asonjarossa.enderhaul.inventory.container.crafting.ChorusCraftingTableContainer; 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.inventory.container.INamedContainerProvider; import net.minecraft.inventory.container.SimpleNamedContainerProvider; import net.minecraft.stats.Stats; import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; import net.minecraft.util.IWorldPosCallable; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; import net.minecraftforge.common.ToolType; public class ChorusCraftingTable extends Block { private static final ITextComponent ChorusCraftingTableContainer = new TranslationTextComponent("container.crafting"); public ChorusCraftingTable() { super(Block.Properties.create(Material.WOOD) .sound(SoundType.WOOD) .harvestLevel(0) .hardnessAndResistance(2.5f,2.5f) .harvestTool(ToolType.AXE)); } @Override public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { if (worldIn.isRemote) { return ActionResultType.SUCCESS; } else { player.openContainer(state.getContainer(worldIn, pos)); player.addStat(Stats.INTERACT_WITH_CRAFTING_TABLE); return ActionResultType.CONSUME; } } @Override public INamedContainerProvider getContainer(BlockState state, World world, BlockPos pos) { return new SimpleNamedContainerProvider((id, inventory, player) -> { return new ChorusCraftingTableContainer(id, inventory, IWorldPosCallable.of(world, pos)); }, ChorusCraftingTableContainer); } } ChorusCraftingTableContainer.java package com.asonjarossa.enderhaul.inventory.container.crafting; import com.asonjarossa.enderhaul.util.RegistryHandler; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.WorkbenchContainer; import net.minecraft.util.IWorldPosCallable; public class ChorusCraftingTableContainer extends WorkbenchContainer { private final IWorldPosCallable field_217070_e; public ChorusCraftingTableContainer(int id, PlayerInventory playerInventory, IWorldPosCallable p_i50090_3_) { super(id, playerInventory, p_i50090_3_); this.field_217070_e = p_i50090_3_; } @Override public boolean canInteractWith(PlayerEntity player) { return isWithinUsableDistance(this.field_217070_e, player, RegistryHandler.CHORUS_CRAFTING_TABLE.get()); } } Thanks for the help! I'll clean up my variables another day
  7. That doesn't sound as bad as I had initially theorized. So, to summarize, I create a new class that extends the WorkbenchContainer, override the canInteractWith method to point to the custom crafting block from my mod with the vanilla crafting GUI, and then in my crafting block class I return the container? I am having small bits of trouble picturing this, but I believe I understand where you're coming from; I appreciate all kinds of help I can get on this small project. Edit: I also thought I had written this down on my initial post but I completely voided it on accident: I don't have a custom GUI for this table just yet, so I've just wanted to use the vanilla CraftingTable GUI as a placeholder for now. My apologies again.
  8. I figured it had something to do with the container itself. I'm unsure how to implement that with the code that I have just posted above. I apologize for not posting it initially.
  9. All I did was just copy from the CraftingTableBlock class and thought that was it. Here's what I had. import net.minecraft.block.Block; import net.minecraft.block.CraftingTableBlock; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraftforge.common.ToolType; public class ChorusCraftingTable extends CraftingTableBlock { public ChorusCraftingTable() { super(Block.Properties.create(Material.WOOD) .sound(SoundType.WOOD) .harvestLevel(0) .hardnessAndResistance(2.5f,2.5f) .harvestTool(ToolType.AXE)); } }
  10. I've recently been introduced to Forge Modding lately, and with my experience of Java, I figured now would be a good time than any to start learning how to operate Forge to implement new blocks and items as a quick starting point to better understand my Java programming "skills." However, I have come across an issue with the Crafting Table. For some reason, upon extending my new block class from net.minecraft.block.CraftingTableBlock and implementing said block as normal, the GUI refuses to pop up (only for about a single frame) before exiting out back to the overworld. Does any body have an explanation for this and how to go around this? I cannot seem to find any other available resource that could explain what's going on as I seem to be the only one doing this for this version? Any references/explanations would be helpful if applicable.
×
×
  • Create New...

Important Information

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