Posted September 1, 20223 yr Hi, I am trying to make a my own version of a flint and steel but changed up a bit. It is supposed to spawn 4 fire blocks in a 2 by 2 area but it is only spawning the fire that I am looking at. Can you help me? Here is my code. package item; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.Item; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.BaseFireBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.gameevent.GameEvent; public class FFSS extends Item { public FFSS(Properties p_41383_) { super(p_41383_); } @Override public InteractionResult useOn(UseOnContext context) { BlockPos pos1 = new BlockPos(context.getClickedPos().getX(), context.getClickedPos().getY() + 1, context.getClickedPos().getZ()); BlockPos pos2 = new BlockPos(pos1.getX() + 1, pos1.getY(), pos1.getZ()); BlockPos pos3 = new BlockPos(pos1.getX(), pos1.getY(), pos1.getZ() + 1); BlockPos pos4 = new BlockPos(pos1.getX() + 1, pos1.getY(), pos1.getZ() + 1); BlockState bs1 = BaseFireBlock.getState(context.getLevel(), pos1); BlockState bs2 = BaseFireBlock.getState(context.getLevel(), pos2); BlockState bs3 = BaseFireBlock.getState(context.getLevel(), pos3); BlockState bs4 = BaseFireBlock.getState(context.getLevel(), pos4); context.getLevel().setBlock(pos1, bs1, 1); context.getLevel().setBlock(pos2, bs2, 1); context.getLevel().setBlock(pos3, bs3, 1); context.getLevel().setBlock(pos4, bs4, 1); context.getLevel().gameEvent(context.getPlayer(), GameEvent.BLOCK_PLACE, pos1); context.getLevel().gameEvent(context.getPlayer(), GameEvent.BLOCK_PLACE, pos2); context.getLevel().gameEvent(context.getPlayer(), GameEvent.BLOCK_PLACE, pos3); context.getLevel().gameEvent(context.getPlayer(), GameEvent.BLOCK_PLACE, pos4); return super.useOn(context); } } Edited September 3, 20223 yr by CoddingDirtMC
September 1, 20223 yr Author It didn't work. This was my return statement. return InteractionResult.sidedSuccess(context.getLevel().isClientSide());
September 2, 20223 yr Did you looked how the FlintAndSteelItem place the Fire? 15 hours ago, CoddingDirtMC said: It didn't work. This was my return statement. Please post the full updated code not only a code snipe. Please post the code you use to register your Item.
September 2, 20223 yr Author Here is the full code: package item; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.Item; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.block.BaseFireBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.gameevent.GameEvent; public class FFSS extends Item { public FFSS(Properties p_41383_) { super(p_41383_); } @Override public InteractionResult useOn(UseOnContext context) { BlockPos pos1 = new BlockPos(context.getClickedPos().getX(), context.getClickedPos().getY() + 1, context.getClickedPos().getZ()); BlockPos pos2 = new BlockPos(pos1.getX() + 1, pos1.getY(), pos1.getZ()); BlockPos pos3 = new BlockPos(pos1.getX(), pos1.getY(), pos1.getZ() + 1); BlockPos pos4 = new BlockPos(pos1.getX() + 1, pos1.getY(), pos1.getZ() + 1); BlockState bs1 = BaseFireBlock.getState(context.getLevel(), pos1); BlockState bs2 = BaseFireBlock.getState(context.getLevel(), pos2); BlockState bs3 = BaseFireBlock.getState(context.getLevel(), pos3); BlockState bs4 = BaseFireBlock.getState(context.getLevel(), pos4); context.getLevel().setBlock(pos1, bs1, 1); context.getLevel().setBlock(pos2, bs2, 1); context.getLevel().setBlock(pos3, bs3, 1); context.getLevel().setBlock(pos4, bs4, 1); context.getLevel().gameEvent(context.getPlayer(), GameEvent.BLOCK_PLACE, pos1); context.getLevel().gameEvent(context.getPlayer(), GameEvent.BLOCK_PLACE, pos2); context.getLevel().gameEvent(context.getPlayer(), GameEvent.BLOCK_PLACE, pos3); context.getLevel().gameEvent(context.getPlayer(), GameEvent.BLOCK_PLACE, pos4); return InteractionResult.sidedSuccess(context.getLevel().isClientSide()); } } And here is the register code: package item; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import com.elliot.juststeel.*; public class ItemInit { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, JustSteel.MODID); public static final RegistryObject<Item> STEELSTEEL = ITEMS.register("steelsteel", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_TOOLS).stacksTo(1))); public static final RegistryObject<Item> FLINTFLINT = ITEMS.register("flintflint", () -> new FlintFlint(new Item.Properties().tab(CreativeModeTab.TAB_TOOLS).stacksTo(1))); public static final RegistryObject<Item> FLINTFLINTSTEELSTEEL = ITEMS.register("flintflintsteelsteel", () -> new FFSS(new Item.Properties().tab(CreativeModeTab.TAB_TOOLS).stacksTo(1))); } I did look at the FlintAndSteelItem class but most of the difference was sound which I don't really care about.
September 2, 20223 yr Replace the 1 in Level#setBlock with a 3 to update the Block to the client. The Fire is placed on server but not correctly on client.
September 3, 20223 yr Author Thank you, it worked! I guess I didn't think of changing that parameter because I didn't know what it did.
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.