[09Jul2025 19:41:12.192] [Worker-Main-15/ERROR] [net.minecraftforge.common.ForgeHooks/]: Couldn't parse element loot_tables:prehistoricascension:blocks/ginkgo_knuckles
com.google.gson.JsonSyntaxException: Expected name to be an item, was unknown string 'prehistoricascension:ginkgo_knuckles'
	at net.minecraft.util.GsonHelper.lambda$convertToItem$0(GsonHelper.java:145) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at java.util.Optional.orElseThrow(Optional.java:403) ~[?:?]
	at net.minecraft.util.GsonHelper.convertToItem(GsonHelper.java:145) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.util.GsonHelper.getAsItem(GsonHelper.java:153) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.entries.LootItem$Serializer.deserialize(LootItem.java:55) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.entries.LootItem$Serializer.deserialize(LootItem.java:40) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer$Serializer.deserializeCustom(LootPoolSingletonContainer.java:151) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer$Serializer.deserializeCustom(LootPoolSingletonContainer.java:129) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer$Serializer.deserialize(LootPoolEntryContainer.java:86) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer$Serializer.deserialize(LootPoolEntryContainer.java:74) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.GsonAdapterFactory$JsonAdapter.deserialize(GsonAdapterFactory.java:102) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:76) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.Gson.fromJson(Gson.java:1214) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.Gson.fromJson(Gson.java:1319) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.Gson.fromJson(Gson.java:1290) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.internal.bind.TreeTypeAdapter$GsonContextImpl.deserialize(TreeTypeAdapter.java:179) ~[gson-2.10.jar%23130!/:?]
	at net.minecraft.util.GsonHelper.convertToObject(GsonHelper.java:463) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.util.GsonHelper.getAsObject(GsonHelper.java:471) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.LootPool$Serializer.deserialize(LootPool.java:192) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.LootPool$Serializer.deserialize(LootPool.java:189) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:76) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.Gson.fromJson(Gson.java:1214) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.Gson.fromJson(Gson.java:1319) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.Gson.fromJson(Gson.java:1290) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.internal.bind.TreeTypeAdapter$GsonContextImpl.deserialize(TreeTypeAdapter.java:179) ~[gson-2.10.jar%23130!/:?]
	at net.minecraft.util.GsonHelper.convertToObject(GsonHelper.java:463) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.util.GsonHelper.getAsObject(GsonHelper.java:481) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.LootTable$Serializer.deserialize(LootTable.java:294) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.LootTable$Serializer.deserialize(LootTable.java:291) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:76) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.Gson.fromJson(Gson.java:1214) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.Gson.fromJson(Gson.java:1319) ~[gson-2.10.jar%23130!/:?]
	at com.google.gson.Gson.fromJson(Gson.java:1261) ~[gson-2.10.jar%23130!/:?]
	at net.minecraftforge.common.ForgeHooks.loadLootTable(ForgeHooks.java:871) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23190%23197!/:?]
	at net.minecraftforge.common.ForgeHooks.lambda$getLootTableDeserializer$3(ForgeHooks.java:848) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23190%23197!/:?]
	at net.minecraft.world.level.storage.loot.LootDataType.deserialize(LootDataType.java:45) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at net.minecraft.world.level.storage.loot.LootDataManager.lambda$scheduleElementParse$4(LootDataManager.java:56) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at java.util.HashMap.forEach(HashMap.java:1421) ~[?:?]
	at net.minecraft.world.level.storage.loot.LootDataManager.lambda$scheduleElementParse$5(LootDataManager.java:55) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar%23191!/:?]
	at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?]
	at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?]
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?]
	at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?]
	at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?]
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?]
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?]


[09Jul2025 19:41:25.438] [Render thread/ERROR] [net.minecraft.client.Minecraft/FATAL]: Unreported exception thrown!
java.lang.IllegalArgumentException: The stack count must be 1
	at net.minecraftforge.common.ForgeHooks.lambda$onCreativeModeTabBuildContents$17(ForgeHooks.java:1629) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.world.item.CreativeModeTab$Output.accept(CreativeModeTab.java:414) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.newt.prehistoricascension.item.ModCreativeModTabs.lambda$static$1(ModCreativeModTabs.java:45) ~[main/:?]
	at net.minecraftforge.common.ForgeHooks.onCreativeModeTabBuildContents(ForgeHooks.java:1627) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.world.item.CreativeModeTab.buildContents(CreativeModeTab.java:129) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.world.item.CreativeModeTabs.lambda$buildAllTabContents$50(CreativeModeTabs.java:1696) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[?:?]
	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[?:?]
	at java.util.Iterator.forEachRemaining(Iterator.java:133) ~[?:?]
	at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845) ~[?:?]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
	at net.minecraft.world.item.CreativeModeTabs.buildAllTabContents(CreativeModeTabs.java:1695) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.world.item.CreativeModeTabs.tryRebuildTabContents(CreativeModeTabs.java:1710) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen.<init>(CreativeModeInventoryScreen.java:86) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.client.gui.screens.inventory.InventoryScreen.init(InventoryScreen.java:48) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.client.gui.screens.Screen.init(Screen.java:321) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.client.Minecraft.setScreen(Minecraft.java:1007) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.client.Minecraft.handleKeybinds(Minecraft.java:1928) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.client.Minecraft.tick(Minecraft.java:1795) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.client.Minecraft.runTick(Minecraft.java:1112) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.client.Minecraft.run(Minecraft.java:718) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at net.minecraft.client.main.Main.main(Main.java:218) ~[forge-1.20.1-47.4.1_mapped_parchment_2023.09.03-1.20.1.jar:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
	at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:111) ~[fmlloader-1.20.1-47.4.1.jar:?]
	at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:99) ~[fmlloader-1.20.1-47.4.1.jar:?]
	at net.minecraftforge.fml.loading.targets.ForgeClientUserdevLaunchHandler.devService(ForgeClientUserdevLaunchHandler.java:19) ~[fmlloader-1.20.1-47.4.1.jar:?]
	at net.minecraftforge.fml.loading.targets.CommonDevLaunchHandler.lambda$makeService$7(CommonDevLaunchHandler.java:135) ~[fmlloader-1.20.1-47.4.1.jar:?]
	at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) ~[modlauncher-10.0.9.jar:?]
	at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) ~[modlauncher-10.0.9.jar:?]
	at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) ~[modlauncher-10.0.9.jar:?]
	at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) ~[modlauncher-10.0.9.jar:?]
	at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) ~[modlauncher-10.0.9.jar:?]
	at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) ~[modlauncher-10.0.9.jar:?]
	at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) ~[modlauncher-10.0.9.jar:?]
	at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) ~[bootstraplauncher-1.1.2.jar:?]


package net.newt.prehistoricascension.block.custom;

import net.minecraft.core.Direction;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.DirectionProperty;

public class GinkgoKnucklesBlock extends Block {
    public static final DirectionProperty FACING = BlockStateProperties.FACING;

    public GinkgoKnucklesBlock(Properties properties) {
        super(properties);
        this.registerDefaultState(this.defaultBlockState().setValue(FACING, Direction.DOWN)); // Default to facing down (upside down)
    }

    @Override
    protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
        builder.add(FACING); // Add the FACING property
    }
}
package net.newt.prehistoricascension.block.custom;

import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.newt.prehistoricascension.block.ModBlocks; // Import your ModBlocks class

public class GinkgoKnucklesItem extends BlockItem {
    // Define an array of allowed blocks (you can add more here)
    private static final Block[] ALLOWED_BLOCKS = {
            ModBlocks.GINKO_LOG.get() // Currently only ginko_log; add more as needed, e.g., ModBlocks.ANOTHER_BLOCK.get()
    };

    public GinkgoKnucklesItem(Block block, Item.Properties properties) {
        super(block, properties);
    }

    @Override
    public InteractionResult useOn(UseOnContext context) {
        Level level = context.getLevel();
        BlockPos clickedPos = context.getClickedPos();
        Direction face = context.getClickedFace();
        BlockState clickedState = level.getBlockState(clickedPos);

        // Check if the block being clicked on is in the allowed blocks list
        boolean isAllowedBlock = false;
        for (Block allowedBlock : ALLOWED_BLOCKS) {
            if (clickedState.getBlock() == allowedBlock) {
                isAllowedBlock = true;
                break;
            }
        }

        if (!isAllowedBlock) {
            return InteractionResult.FAIL; // Fail if not on an allowed block
        }

        // The position to place the block is offset by the face clicked
        BlockPos placePos = clickedPos.relative(face);
        if (!level.getBlockState(placePos).canBeReplaced()) {
            return InteractionResult.FAIL; // Can't place if the spot is occupied
        }

        // Get the block state with FACING set to DOWN (upside down)
        BlockState placeState = getBlock().defaultBlockState().setValue(GinkgoKnucklesBlock.FACING, Direction.DOWN);

        // Place the block
        if (level.setBlock(placePos, placeState, 11)) {
            return InteractionResult.sidedSuccess(level.isClientSide());
        }

        return InteractionResult.FAIL;
    }
}

    public static final RegistryObject<Block> GINKGO_KNUCKLES = BLOCKS.register("ginkgo_knuckles",
            () -> new GinkgoKnucklesBlock(BlockBehaviour.Properties.copy(Blocks.SPRUCE_PLANKS).noOcclusion()));
{
  "variants": {
    "facing=down":  { "model": "prehistoricascension:block/ginkgo_knuckles", "x": 180, "y": 0 },
    "facing=up":    { "model": "prehistoricascension:block/ginkgo_knuckles_up" },
    "facing=north": { "model": "prehistoricascension:block/ginkgo_knuckles" },
    "facing=south": { "model": "prehistoricascension:block/ginkgo_knuckles", "y": 180 },
    "facing=west":  { "model": "prehistoricascension:block/ginkgo_knuckles", "y": 270 },
    "facing=east":  { "model": "prehistoricascension:block/ginkgo_knuckles", "y": 90 }
  }
}
{
  "parent": "minecraft:block/pointed_dripstone",
  "textures": {
    "cross": "prehistoricascension:block/ginkgo_knuckles"
  }
}
{
  "parent": "minecraft:item/generated",
  "textures": {
    "layer0": "prehistoricascension:block/ginkgo_knuckles"
  }
}