Jump to content

Creating custom recipe types in Forge 48


JacksStuff

Recommended Posts

I'm somewhat of a beginner at forge and I'm trying to add custom recipe types to my mod. I've been trying to adapt the solution from https://www.youtube.com/watch?v=IOFbegpYY0k and update it to 1.20.2 with the help of the forge docs without success.

Does anyone know anything about creating such behaviour? Any help would be appreciated.

My recipe is a simple recipe similar to the legacy smithing recipe, heres a JSON example (the "//" will be replaced with some items):

{
  "type": "magic_overhaul:rune_inscribing",
  "base": {
    "item": "//base item"
  },
  "template": {
    "item": "//template item"
  },
  "output": {
    "count": 1,
    "item": "//output item"
  }
}

What I'm interested most is how to implement the RecipeSerializer and RecipeType classes within my Recipe class.

Here's my current RecipeSerializer:

Spoiler
public static class Serializer implements RecipeSerializer<RuneInscribingRecipe> {
        private static final Codec<RuneInscribingRecipe> CODEC = RecordCodecBuilder.create(
                (builder) -> builder.group(
                        Ingredient.CODEC.fieldOf("template").forGetter(RuneInscribingRecipe::getTemplate),
                        Ingredient.CODEC.fieldOf("base").forGetter(RuneInscribingRecipe::getBase),
                        ItemStack.CODEC.fieldOf("output").forGetter((RuneInscribingRecipe recipe) -> recipe.output)
                ).apply(builder, RuneInscribingRecipe::new));


        public Serializer() {

        }

        @Override
        public Codec<RuneInscribingRecipe> codec() {
            return CODEC;
        }


        @Override
        public @Nullable RuneInscribingRecipe fromNetwork(FriendlyByteBuf friendlyByteBuf) {
            Ingredient base = Ingredient.fromNetwork(friendlyByteBuf);
            Ingredient template = Ingredient.fromNetwork(friendlyByteBuf);

            ItemStack output = friendlyByteBuf.readItem();

            return new RuneInscribingRecipe(base, template, output);
        }

        @Override
        public void toNetwork(FriendlyByteBuf friendlyByteBuf, RuneInscribingRecipe runeInscribingRecipe) {
            runeInscribingRecipe.base.toNetwork(friendlyByteBuf);
            runeInscribingRecipe.template.toNetwork(friendlyByteBuf);

            friendlyByteBuf.writeItemStack(runeInscribingRecipe.output, false);
        }
    }

 

Here's the RecipeType:

Spoiler
public static class Type implements RecipeType<RuneInscribingRecipe> {
        @Override
        public String toString() {
            return MagicOverhaul.MOD_ID + ":rune_inscribing";
        }
    }

 

 

Please comment if you need any more code fragments.

Edited by JacksStuff
Link to comment
Share on other sites

1 hour ago, dee12452 said:

I don't spot anything obvious. Can you post the code where you register the serializer?

public class ModRecipes {
    public static final DeferredRegister<RecipeSerializer<?>> SERIALIZERS =
            DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, MagicOverhaul.MOD_ID);

    public static final RegistryObject<RecipeSerializer<RuneInscribingRecipe>> RUNE_INSCRIBING_SERIALIZER =
            SERIALIZERS.register("rune_inscribing", () -> new RuneInscribingRecipe.Serializer());


    public static void register(IEventBus eventBus){
        SERIALIZERS.register(eventBus);
    }
}

 

Link to comment
Share on other sites

29 minutes ago, dee12452 said:

Yeah this looks good, alright post all of `RuneInscribingRecipe`

Spoiler
public class RuneInscribingRecipe implements Recipe<SimpleContainer> {
    private final Ingredient base;
    private final Ingredient template;
    private final ItemStack output;


    public RuneInscribingRecipe(Ingredient base, Ingredient template, ItemStack output) {
        this.base = base;
        this.template = template;
        this.output = output;
    }

    @Override
    public boolean matches(SimpleContainer simpleContainer, Level level) {
        if (level.isClientSide()) {
            return false;
        }

        return base.test(simpleContainer.getItem(RuneInscriberMenu.BASE_INPUT_SLOT)) && template.test(simpleContainer.getItem(RuneInscriberMenu.TEMPLATE_INPUT_SLOT));
    }

    @Override
    public ItemStack assemble(SimpleContainer simpleContainer, RegistryAccess registryAccess) {
        return output.copy();
    }

    @Override
    public boolean canCraftInDimensions(int i, int i1) {
        return true;
    }

    @Override
    public ItemStack getResultItem(RegistryAccess registryAccess) {
        return output.copy();
    }


    @Override
    public RecipeSerializer<?> getSerializer() {
        return ModRecipes.RUNE_INSCRIBING_SERIALIZER.get();
    }


    public Ingredient getTemplate() {
        return this.template;
    }

    public Ingredient getBase() {
        return this.base;
    }


    @Override
    public RecipeType<?> getType() {
        return new Type();
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }



    public static class Type implements RecipeType<RuneInscribingRecipe> {
        @Override
        public String toString() {
            return MagicOverhaul.MOD_ID + ":rune_inscribing";
        }
    }


    public static class Serializer implements RecipeSerializer<RuneInscribingRecipe> {
        private static final Codec<RuneInscribingRecipe> CODEC = RecordCodecBuilder.create(
                (builder) -> builder.group(
                        Ingredient.CODEC.fieldOf("template").forGetter(RuneInscribingRecipe::getTemplate),
                        Ingredient.CODEC.fieldOf("base").forGetter(RuneInscribingRecipe::getBase),
                        ItemStack.CODEC.fieldOf("output").forGetter((RuneInscribingRecipe recipe) -> recipe.output)
                ).apply(builder, RuneInscribingRecipe::new));


        public Serializer() {

        }

        @Override
        public Codec<RuneInscribingRecipe> codec() {
            return CODEC;
        }


        @Override
        public @Nullable RuneInscribingRecipe fromNetwork(FriendlyByteBuf friendlyByteBuf) {
            Ingredient base = Ingredient.fromNetwork(friendlyByteBuf);
            Ingredient template = Ingredient.fromNetwork(friendlyByteBuf);

            ItemStack output = friendlyByteBuf.readItem();

            return new RuneInscribingRecipe(base, template, output);
        }

        @Override
        public void toNetwork(FriendlyByteBuf friendlyByteBuf, RuneInscribingRecipe runeInscribingRecipe) {
            runeInscribingRecipe.base.toNetwork(friendlyByteBuf);
            runeInscribingRecipe.template.toNetwork(friendlyByteBuf);

            friendlyByteBuf.writeItemStack(runeInscribingRecipe.output, false);
        }
    }
}

 

 

Link to comment
Share on other sites

There's a couple of discrepancies between my 1.20.2 implementation that's working and yours here but nothing I'd imagine is directly causing an issue. 

What's the exact problem that's happening? Is there a crash? Are you using a custom crafting menu you made from scratch (i.e. a new class that likely extends AbstractContainerMenu + a screen to go along with it)?  

Link to comment
Share on other sites

Posted (edited)
6 hours ago, dee12452 said:

There's a couple of discrepancies between my 1.20.2 implementation that's working and yours here but nothing I'd imagine is directly causing an issue. 

What's the exact problem that's happening? Is there a crash? Are you using a custom crafting menu you made from scratch (i.e. a new class that likely extends AbstractContainerMenu + a screen to go along with it)?  

1.The game doesn't crash, everything seems normal, but when i insert the designated items into the block entity, the result item does not show up.

2.Yes, I'm using a custom menu, here's the source code:

Spoiler
public class RuneInscriberMenu extends AbstractContainerMenu {
    private final RuneInscriberBlockEntity blockEntity;
    private final ContainerLevelAccess levelAccess;
    private final ItemStackHandler inventory;

    public static final int BASE_INPUT_SLOT = 0;
    public static final int TEMPLATE_INPUT_SLOT = 1;
    public static final int OUTPUT_SLOT = 2;

    private ArrayList<ItemStack> stored = new ArrayList<>();



    //Client Constructor
    public RuneInscriberMenu(int pContainerId, Inventory inv, FriendlyByteBuf extraData) {
        this(pContainerId, inv, inv.player.level().getBlockEntity(extraData.readBlockPos()));
    }

    //Server Constructor
    public RuneInscriberMenu(int pContainerId, Inventory inv, BlockEntity entity) {
        super(ModMenuTypes.RUNE_INSCRIBER_MENU.get(), pContainerId);
        if (entity instanceof RuneInscriberBlockEntity be) {
            this.blockEntity = be;
        }
        else {
            throw new IllegalStateException("Incorrect block entity class (%s) passed into RuneInscriberMenu".formatted(entity.getClass().getCanonicalName()));
        }

        this.levelAccess = ContainerLevelAccess.create(blockEntity.getLevel(), blockEntity.getBlockPos());
        this.inventory = blockEntity.getInventory();
        createPlayerHotbar(inv);
        createPlayerInventory(inv);
        createBlockEntityInventory(blockEntity);
    }





    @Override
    public ItemStack quickMoveStack(Player playerIn, int pIndex) {
        Slot fromSlot = getSlot(pIndex);
        ItemStack fromStack = fromSlot.getItem();

        if(fromStack.getCount() <= 0)
            fromSlot.set(ItemStack.EMPTY);

        if(!fromSlot.hasItem())
            return ItemStack.EMPTY;

        ItemStack copyFromStack = fromStack.copy();

        if(pIndex < 36) {
            // We are inside of the player's playerInventory
            if(!moveItemStackTo(fromStack, 36, 37, false))
                return ItemStack.EMPTY;
        } else if (pIndex < 63) {
            // We are inside of the block entity playerInventory
            if(!moveItemStackTo(fromStack, 0, 36, false))
                return ItemStack.EMPTY;
        } else {
            System.err.println("Invalid slot index: " + pIndex);
            return ItemStack.EMPTY;
        }

        fromSlot.setChanged();
        fromSlot.onTake(playerIn, fromStack);

        return copyFromStack;
    }

    private boolean isEmpty() {
        return inventory.getStackInSlot(BASE_INPUT_SLOT).isEmpty() &&
                inventory.getStackInSlot(TEMPLATE_INPUT_SLOT).isEmpty() &&
                inventory.getStackInSlot(OUTPUT_SLOT).isEmpty();
    }

    private boolean isCrafted = false;

    @Override
    public boolean stillValid(Player player) {
        return stillValid(this.levelAccess, player, ModBlocks.RUNE_INSCRIBER.get());
    }


    public RuneInscriberBlockEntity getBlockEntity() {
        return blockEntity;
    }

    private boolean hasRecipe() {
        Optional<RecipeHolder<RuneInscribingRecipe>> recipe = getCurrentRecipe();

        if (recipe.isEmpty()) {
            return false;
        }

        return !isEmpty() &&
                recipe.get().value().getBase().test(inventory.getStackInSlot(RuneInscriberMenu.BASE_INPUT_SLOT)) &&
                recipe.get().value().getTemplate().test(inventory.getStackInSlot(RuneInscriberMenu.TEMPLATE_INPUT_SLOT));
    }

    private void suggestCraft()
    {

        if (!hasRecipe()) {
            clearOutput();
            return;
        }
        Optional<RecipeHolder<RuneInscribingRecipe>> recipe = getCurrentRecipe();
        ItemStack result = recipe.get().value().getResultItem(this.blockEntity.getLevel().registryAccess());


        blockEntity.getInventory().setStackInSlot(OUTPUT_SLOT, result);
    }

 
    private void craft() {
        Optional<RecipeHolder<RuneInscribingRecipe>> recipe = getCurrentRecipe();
        blockEntity.getInventory().setStackInSlot(BASE_INPUT_SLOT, new ItemStack(Items.AIR));
        isCrafted = true;
    }


	//Clears the output item from the block entity inventory
    private void clearOutput() {
        ItemStack stack = inventory.getStackInSlot(OUTPUT_SLOT);
        stack.shrink(1);
        inventory.setStackInSlot(OUTPUT_SLOT, stack);
    }

    @Override
    public void removed(Player pPlayer) {
        clear(pPlayer, blockEntity.getInventory().getStackInSlot(BASE_INPUT_SLOT));
        clear(pPlayer, blockEntity.getInventory().getStackInSlot(TEMPLATE_INPUT_SLOT));
        isEmpty();
        if (isCrafted) {
            clear(pPlayer, blockEntity.getInventory().getStackInSlot(OUTPUT_SLOT));
        }
        clearOutput();

        super.removed(pPlayer);
    }

	//Clears the item from the block entity inventory
    private void clear(Player pPlayer, ItemStack stack) {
        if (pPlayer instanceof ServerPlayer) {
            if (!stack.isEmpty()) {
                if (pPlayer.isAlive() && !((ServerPlayer) pPlayer).hasDisconnected()) {
                    pPlayer.getInventory().placeItemBackInInventory(stack);
                } else {
                    pPlayer.drop(stack, false);
                }
                stored.clear();
            }
        }
    }



    private Optional<RecipeHolder<RuneInscribingRecipe>> getCurrentRecipe() {
        SimpleContainer inventory = new SimpleContainer(2);
        inventory.setItem(BASE_INPUT_SLOT, this.inventory.getStackInSlot(BASE_INPUT_SLOT));
        inventory.setItem(TEMPLATE_INPUT_SLOT, this.inventory.getStackInSlot(TEMPLATE_INPUT_SLOT));
        List<RecipeHolder<RuneInscribingRecipe>> list = this.blockEntity.getLevel().getRecipeManager().getRecipesFor(new RuneInscribingRecipe.Type(), inventory, this.blockEntity.getLevel());
        if (list.isEmpty()) {
            return Optional.empty();
        }

        return Optional.of(list.get(0));
    }


    private void createBlockEntityInventory(RuneInscriberBlockEntity be) {
        be.getOptional().ifPresent(inventory -> {
            this.addSlot(new SlotItemHandler(inventory, BASE_INPUT_SLOT, 26, 35) {
                @Override
                public void setChanged() {
                    if (getItem().is(Tags.Items.STONE)) {
                        suggestCraft();
                    }
                    else {
                        clearOutput();
                    }
                    super.setChanged();
                }


                @Override
                public boolean mayPlace(@NotNull ItemStack stack) {
                    return stack.is(Tags.Items.STONE);
                }


                @Override
                public int getMaxStackSize() {
                    return 1;
                }

                @Override
                public int getMaxStackSize(@NotNull ItemStack stack) {
                    return 1;
                }
            });

            this.addSlot(new SlotItemHandler(inventory, TEMPLATE_INPUT_SLOT, 80, 35) {
                @Override
                public void setChanged() {
                    suggestCraft();
                    super.setChanged();
                }


                @Override
                public boolean mayPlace(@NotNull ItemStack stack) {
                    return stack.is(ModTags.Items.RUNE_TEMPLATES);
                }


                @Override
                public int getMaxStackSize() {
                    return 1;
                }

                @Override
                public int getMaxStackSize(@NotNull ItemStack stack) {
                    return 1;
                }
            });

            this.addSlot(new RuneOutputSlot(inventory, OUTPUT_SLOT, 133, 35));
        });
    }

    private void createPlayerInventory (Inventory playerInventory) {
        for (int row = 0; row < 3; row++) {
            for (int column = 0; column < 9; column++) {
                this.addSlot(new Slot(playerInventory, 9 + column + row * 9, 8 + column * 18, 84 + row * 18));
            }
        }
    }


    private void createPlayerHotbar (Inventory playerInventory) {
        for (int column = 0; column < 9; column++) {
            this.addSlot(new Slot(playerInventory, column, 8 + column * 18, 142));
        }
    }

    public class RuneOutputSlot extends SlotItemHandler {

        public RuneOutputSlot(IItemHandler itemHandler, int index, int xPosition, int yPosition) {
            super(itemHandler, index, xPosition, yPosition);
        }

        @Override
        public void setChanged() {
            if (this.hasItem())
                craft();
            super.setChanged();
        }

        @Override
        public void onTake(Player pPlayer, ItemStack pStack) {
            super.onTake(pPlayer, pStack);
        }


        @Override
        public boolean mayPlace(@NotNull ItemStack stack) {
            return false;
        }
    }

}

 

 

Edited by JacksStuff
Link to comment
Share on other sites

Ok yeah I think this might be where the problem starts.

For starters, I think you can get rid of your RecipeType impl and make it a static constant instead. I'm not 100% sure this will fix it but it's posssible.

RuneInscribingRecipe

    public class RuneInscribingRecipe implements Recipe<SimpleContainer> {
        public static final RecipeType<RuneInscribingRecipe> RECIPE_TYPE = new RecipeType<>(){};
        
        // ....

        @Override
        public RecipeType<?> getType() {
            return RECIPE_TYPE;
        }
        
        // ....
    }

RuneInscriberMenu

    private Optional<RecipeHolder<RuneInscribingRecipe>> getCurrentRecipe() {
        SimpleContainer inventory = new SimpleContainer(2);
        inventory.setItem(BASE_INPUT_SLOT, this.inventory.getStackInSlot(BASE_INPUT_SLOT));
        inventory.setItem(TEMPLATE_INPUT_SLOT, this.inventory.getStackInSlot(TEMPLATE_INPUT_SLOT));
        List<RecipeHolder<RuneInscribingRecipe>> list = this.blockEntity.getLevel().getRecipeManager().getRecipesFor(RuneInscribingRecipe.RECIPE_TYPE, inventory, this.blockEntity.getLevel());
        if (list.isEmpty()) {
            return Optional.empty();
        }

        return Optional.of(list.get(0));
    }

 

Also, this here is a little suspicious where you're getting the `this.inventory.getStackInSlot` calls. I'd try and make sure those are what you expect they are with either a Debug line in IDE or print statement

SimpleContainer inventory = new SimpleContainer(2);
inventory.setItem(BASE_INPUT_SLOT, this.inventory.getStackInSlot(BASE_INPUT_SLOT));
System.out.printf("CHECKING BASE INPUT OF RECIPE: %s\n", this.inventory.getStackInSlot(BASE_INPUT_SLOT));
inventory.setItem(TEMPLATE_INPUT_SLOT, this.inventory.getStackInSlot(TEMPLATE_INPUT_SLOT));
System.out.printf("CHECKING TEMPLATE INPUT OF RECIPE: %s\n", this.inventory.getStackInSlot(TEMPLATE_INPUT_SLOT));

^ See what the result of those print statements are, make sure they're right

Edited by dee12452
Remove potential false info
Link to comment
Share on other sites

2 hours ago, dee12452 said:

Ok yeah I think this might be where the problem starts.

For starters, I think you can get rid of your RecipeType impl and make it a static constant instead. I'm not 100% sure this will fix it but it's posssible.

RuneInscribingRecipe

    public class RuneInscribingRecipe implements Recipe<SimpleContainer> {
        public static final RecipeType<RuneInscribingRecipe> RECIPE_TYPE = new RecipeType<>(){};
        
        // ....

        @Override
        public RecipeType<?> getType() {
            return RECIPE_TYPE;
        }
        
        // ....
    }

RuneInscriberMenu

    private Optional<RecipeHolder<RuneInscribingRecipe>> getCurrentRecipe() {
        SimpleContainer inventory = new SimpleContainer(2);
        inventory.setItem(BASE_INPUT_SLOT, this.inventory.getStackInSlot(BASE_INPUT_SLOT));
        inventory.setItem(TEMPLATE_INPUT_SLOT, this.inventory.getStackInSlot(TEMPLATE_INPUT_SLOT));
        List<RecipeHolder<RuneInscribingRecipe>> list = this.blockEntity.getLevel().getRecipeManager().getRecipesFor(RuneInscribingRecipe.RECIPE_TYPE, inventory, this.blockEntity.getLevel());
        if (list.isEmpty()) {
            return Optional.empty();
        }

        return Optional.of(list.get(0));
    }

 

Also, this here is a little suspicious where you're getting the `this.inventory.getStackInSlot` calls. I'd try and make sure those are what you expect they are with either a Debug line in IDE or print statement

SimpleContainer inventory = new SimpleContainer(2);
inventory.setItem(BASE_INPUT_SLOT, this.inventory.getStackInSlot(BASE_INPUT_SLOT));
System.out.printf("CHECKING BASE INPUT OF RECIPE: %s\n", this.inventory.getStackInSlot(BASE_INPUT_SLOT));
inventory.setItem(TEMPLATE_INPUT_SLOT, this.inventory.getStackInSlot(TEMPLATE_INPUT_SLOT));
System.out.printf("CHECKING TEMPLATE INPUT OF RECIPE: %s\n", this.inventory.getStackInSlot(TEMPLATE_INPUT_SLOT));

^ See what the result of those print statements are, make sure they're right

Thanks for the suggestions, but nothing seemed to change after applying them. Also the "this.inventory.getStackInSlot" thing prints the correct items.

Link to comment
Share on other sites

Hm yeah sorry, not seeing anything else that's sticking out, I'd need to debug myself probably. Do you have a github or bitbucket repo? I could poke around when I have time to see what the problem might be.

Link to comment
Share on other sites

2 hours ago, dee12452 said:

Hm yeah sorry, not seeing anything else that's sticking out, I'd need to debug myself probably. Do you have a github or bitbucket repo? I could poke around when I have time to see what the problem might be.

Here's my github repo https://github.com/JacksStuff0905/magic-overhaul-1.20.X, maybe you might find something. Either way thanks a lot for all the help.

Link to comment
Share on other sites

Sure, I'm sorry I couldn't be more helpful so far.

 

 Does this always return empty?

List<RecipeHolder<RuneInscribingRecipe>> list = this.blockEntity.getLevel().getRecipeManager().getRecipesFor(RuneInscribingRecipe.RECIPE_TYPE, inventory, this.blockEntity.getLevel());

 

Link to comment
Share on other sites

10 minutes ago, dee12452 said:

Sure, I'm sorry I couldn't be more helpful so far.

 

 Does this always return empty?

List<RecipeHolder<RuneInscribingRecipe>> list = this.blockEntity.getLevel().getRecipeManager().getRecipesFor(RuneInscribingRecipe.RECIPE_TYPE, inventory, this.blockEntity.getLevel());

 

Yeah, always an empty list, I checked multiple times. 

Link to comment
Share on other sites

{
  "type": "magic_overhaul:rune_inscribing",
  "base": {
    "item": "//base item"
  },
  "template": {
    "item": "//template item"
  },
  "output": {
    "count": 1,
    "item": "//output item"
  }
}

^ Ok, where is your recipe JSON placed in your file structure? What's it called? And paste the actual JSON you're testing with, because it needs to be valid.

Link to comment
Share on other sites

14 hours ago, dee12452 said:
{
  "type": "magic_overhaul:rune_inscribing",
  "base": {
    "item": "//base item"
  },
  "template": {
    "item": "//template item"
  },
  "output": {
    "count": 1,
    "item": "//output item"
  }
}

^ Ok, where is your recipe JSON placed in your file structure? What's it called? And paste the actual JSON you're testing with, because it needs to be valid.

I accidentally forgot to push the recent changes, so all the stuff about the recipes is missing from github. Just fixed that. The JSON is located in the data/magic_overhaul/recipes folder and looks like this:

{
  "type": "magic_overhaul:rune_inscribing",
  "base": {
    "item": "minecraft:stone"
  },
  "template": {
    "item": "magic_overhaul:rune_template_acnar"
  },
  "output": {
    "count": 1,
    "item": "magic_overhaul:rune_acnar"
  }
}

 

Link to comment
Share on other sites

@JacksStuff looks like at least one of your problems is your recipe JSON. ItemStack's CODEC isn't defined the way you're thinking it is. Try this instead

{
  "type": "magic_overhaul:rune_inscribing",
  "base": {
    "item": "minecraft:stone"
  },
  "template": {
    "item": "magic_overhaul:rune_template_acnar"
  },
  "output": {
    "Count": 1,
    "id": "magic_overhaul:rune_acnar"
  }
}

 

Link to comment
Share on other sites

16 hours ago, chxr said:

Im running on a similar problem. Codecs are hurting my head more than they should

Yeah CODECs are super funky the first time you start working with them, I definitely had a few woes in the beginning when moving to 1.20.2. What's the JSON structure of your recipe? I'm sure either I or ChatGPT can whip you up a CODEC for it pretty quickly lol.

Link to comment
Share on other sites

2 hours ago, dee12452 said:

Yeah CODECs are super funky the first time you start working with them, I definitely had a few woes in the beginning when moving to 1.20.2. What's the JSON structure of your recipe? I'm sure either I or ChatGPT can whip you up a CODEC for it pretty quickly lol.

Funny enough, Chatgpt is confusing me even more. My BE works like a furnace, you need 8 items and two fuel to make a third item. Here is an example recipe. In this case, 8 aberrant shards, each one in one slot, and two of aberrant fuel, each one on one slot for a total of 10 slots. Supposedly any block with the tag aberrant_fuel should be accepted but im not sure this is how the json should look:

 

{
  "type": "relativedimensions:particle_rebound",
  "inputItem": [
    {
      "item": "relativedimensions:aberrant_shard"
    }
  ],
  "fuelItem": [
    {
      "tag": "relativedimensions:block/aberrant_fuel"
    }
  ],
  "output": {
    "Count": 1,
    "id": "relativedimensions:aberrant_ingot"
  }
}

 

Link to comment
Share on other sites

@chxr

Looks like you're making some sort of a crafting table / furnace hybrid? Are the inputs needing arranging like a shaped recipe, or is it shapeless?

I'll assume it's shapeless since that just adds a lot more complexity. In that case I'd probably do something like this

{
  "type": "relativedimensions:particle_rebound",
  "inputs": [
    {
      "ingredient": {
        "item": "relativedimensions:aberrant_shard"
      },
      "count": 8
    }
  ],
  "fuel": {
    "tag": "relativedimensions:block/aberrant_fuel"
  },
  "output": {
    "Count": 1,
    "id": "relativedimensions:aberrant_ingot"
  }
}

inputs: A list of ingredients and how many are needed. The count among each input adds up to 8. Since there's only 1 ingredient, the count is set to 8.

fuel: Same thing as before but remove the list and just make it an object with a tag.

output: Kept the same.

 

In this case the Codec I would make is

    public record ParticleReboundIngredient(Ingredient ingredient, int count) {
        public static final Codec<ParticleReboundIngredient> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(
                        Ingredient.CODEC.fieldOf("ingredient").forGetter((i) -> i.ingredient),
                        Codec.INT.fieldOf("count").forGetter(i -> i.count)
                ).apply(builder, ParticleReboundIngredient::new)
        );
    }
    
    public record ParticleReboundFuel(String tag) {
        public static final Codec<ParticleReboundFuel> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(Codec.STRING.fieldOf("tag").forGetter(f -> f.tag)).apply(builder, ParticleReboundFuel::new)
        );
        
        public boolean isFuel(ItemStack stack) {
            // TODO: Check if fuel item matches the tag
        }
    }

    public record ParticleReboundRecipe(List<ParticleReboundIngredient> inputs, ParticleReboundFuel fuel, ItemStack output) {
        public static final Codec<ParticleReboundRecipe> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(
                        ParticleReboundIngredient.CODEC.listOf().fieldOf("inputs").forGetter(r -> r.inputs),
                        ParticleReboundFuel.CODEC.fieldOf("fuel").forGetter(r -> r.fuel),
                        ItemStack.CODEC.fieldOf("output").forGetter(r -> r.output)
                ).apply(builder, ParticleReboundRecipe::new)
        );
    }

 

There might be a more proper Codec for the fuel and the tag that's built into minecraft / forge, but I didn't look

Link to comment
Share on other sites

 

3 hours ago, dee12452 said:

@chxr

Looks like you're making some sort of a crafting table / furnace hybrid? Are the inputs needing arranging like a shaped recipe, or is it shapeless?

I'll assume it's shapeless since that just adds a lot more complexity. In that case I'd probably do something like this

{
  "type": "relativedimensions:particle_rebound",
  "inputs": [
    {
      "ingredient": {
        "item": "relativedimensions:aberrant_shard"
      },
      "count": 8
    }
  ],
  "fuel": {
    "tag": "relativedimensions:block/aberrant_fuel"
  },
  "output": {
    "Count": 1,
    "id": "relativedimensions:aberrant_ingot"
  }
}

inputs: A list of ingredients and how many are needed. The count among each input adds up to 8. Since there's only 1 ingredient, the count is set to 8.

fuel: Same thing as before but remove the list and just make it an object with a tag.

output: Kept the same.

 

In this case the Codec I would make is

    public record ParticleReboundIngredient(Ingredient ingredient, int count) {
        public static final Codec<ParticleReboundIngredient> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(
                        Ingredient.CODEC.fieldOf("ingredient").forGetter((i) -> i.ingredient),
                        Codec.INT.fieldOf("count").forGetter(i -> i.count)
                ).apply(builder, ParticleReboundIngredient::new)
        );
    }
    
    public record ParticleReboundFuel(String tag) {
        public static final Codec<ParticleReboundFuel> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(Codec.STRING.fieldOf("tag").forGetter(f -> f.tag)).apply(builder, ParticleReboundFuel::new)
        );
        
        public boolean isFuel(ItemStack stack) {
            // TODO: Check if fuel item matches the tag
        }
    }

    public record ParticleReboundRecipe(List<ParticleReboundIngredient> inputs, ParticleReboundFuel fuel, ItemStack output) {
        public static final Codec<ParticleReboundRecipe> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(
                        ParticleReboundIngredient.CODEC.listOf().fieldOf("inputs").forGetter(r -> r.inputs),
                        ParticleReboundFuel.CODEC.fieldOf("fuel").forGetter(r -> r.fuel),
                        ItemStack.CODEC.fieldOf("output").forGetter(r -> r.output)
                ).apply(builder, ParticleReboundRecipe::new)
        );
    }

 

There might be a more proper Codec for the fuel and the tag that's built into minecraft / forge, but I didn't look

Pretty much, although all the recipes im planning to make on it are shapeless. The idea is that the chamber uses energy to "fuse" the items in each of the center slots together, in this case an ingot. The two slots at the sides are fuel. (A special kind of wood in this case).

Here is an image of the interface just for reference (The center slot is the output)

spacer.png

 

As for the code- Can you elaborate a little bit on it? Seeing three different record classes has confused me a lot. (Elaborate as in why make them in three different records. I understand the code itself more or less)

Edited by chxr
Link to comment
Share on other sites

35 minutes ago, chxr said:

 

Pretty much, although all the recipes im planning to make on it are shapeless. The idea is that the chamber uses energy to "fuse" the items in each of the center slots together, in this case an ingot. The two slots at the sides are fuel. (A special kind of wood in this case).

Here is an image of the interface just for reference (The center slot is the output)

spacer.png

 

As for the code- Can you elaborate a little bit on it? Seeing three different record classes has confused me a lot. (Elaborate as in why make them in three different records. I understand the code itself more or less)

That looks pretty cool, nice!

 

Sure, so looking at that JSON file I posted, I pretty much made a record class for each "custom" data type in that JSON. The Input is a good example of why

```

"inputs": [ { "ingredient": { "item": "relativedimensions:aberrant_shard" }, "count": 8 } ],

```

So here's the inputs, it's an array, which we can use the Codec builder's builder.listOf to define an array. Each Item is of some arbitrary object with keys "ingredient" (which we know is an Ingredient) and a "count" which is an int. You don't have to have an intermediate class to map this to necessarily but I found that it's just easier to see the data that way, hence the 'ParticleReboundIngredient' represents one of these inputs.

 

Let me know if that makes sense or not. 

Link to comment
Share on other sites

33 minutes ago, dee12452 said:

That looks pretty cool, nice!

 

Sure, so looking at that JSON file I posted, I pretty much made a record class for each "custom" data type in that JSON. The Input is a good example of why

```

"inputs": [ { "ingredient": { "item": "relativedimensions:aberrant_shard" }, "count": 8 } ],

```

So here's the inputs, it's an array, which we can use the Codec builder's builder.listOf to define an array. Each Item is of some arbitrary object with keys "ingredient" (which we know is an Ingredient) and a "count" which is an int. You don't have to have an intermediate class to map this to necessarily but I found that it's just easier to see the data that way, hence the 'ParticleReboundIngredient' represents one of these inputs.

 

Let me know if that makes sense or not. 

It does but I'm struggling to see how to make it work in my recipe? (Its structure is the same as OP's, with a serializer subclass)

Link to comment
Share on other sites

 public class ParticleReboundRecipe implements Recipe<CraftingContainer> {
   private List<ParticleReboundIngredient> inputs;
   private ParticleReboundFuel fuel; 
   private ItemStack output;
   
   public ParticleReboundRecipe(List<ParticleReboundIngredient> inputs, ParticleReboundFuel fuel, ItemStack output) {
     this.inputs = inputs;
     this.fuel = fuel;
     this.output = output;
   }
   
    // TODO: Implement interface ...
   
   // TODO: Move to separate file if desired
	public record ParticleReboundIngredient(Ingredient ingredient, int count) {
        public static final Codec<ParticleReboundIngredient> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(
                        Ingredient.CODEC.fieldOf("ingredient").forGetter((i) -> i.ingredient),
                        Codec.INT.fieldOf("count").forGetter(i -> i.count)
                ).apply(builder, ParticleReboundIngredient::new)
        );
    }
    
   // TODO: Move to separate file if desired
    public record ParticleReboundFuel(String tag) {
        public static final Codec<ParticleReboundFuel> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(Codec.STRING.fieldOf("tag").forGetter(f -> f.tag)).apply(builder, ParticleReboundFuel::new)
        );
        
        public boolean isFuel(ItemStack stack) {
            // TODO: Check if fuel item matches the tag
        }
    }
   
   public class Serializer implements RecipeSerializer<ParticleReboundRecipe> {
     public static final Codec<ParticleReboundRecipe> CODEC = RecordCodecBuilder.create(
       builder -> builder.group(
         ParticleReboundIngredient.CODEC.listOf().fieldOf("inputs").forGetter(r -> r.inputs),
         ParticleReboundFuel.CODEC.fieldOf("fuel").forGetter(r -> r.fuel),
         ItemStack.CODEC.fieldOf("output").forGetter(r -> r.output)
       ).apply(builder, ParticleReboundRecipe::new)
     );

     @Override
     public @NotNull Codec<ParticleReboundRecipe> codec() {
       return CODEC;
     }
     
     // TODO: The rest ...
   }
 }

 

?

Link to comment
Share on other sites

14 hours ago, dee12452 said:
 public class ParticleReboundRecipe implements Recipe<CraftingContainer> {
   private List<ParticleReboundIngredient> inputs;
   private ParticleReboundFuel fuel; 
   private ItemStack output;
   
   public ParticleReboundRecipe(List<ParticleReboundIngredient> inputs, ParticleReboundFuel fuel, ItemStack output) {
     this.inputs = inputs;
     this.fuel = fuel;
     this.output = output;
   }
   
    // TODO: Implement interface ...
   
   // TODO: Move to separate file if desired
	public record ParticleReboundIngredient(Ingredient ingredient, int count) {
        public static final Codec<ParticleReboundIngredient> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(
                        Ingredient.CODEC.fieldOf("ingredient").forGetter((i) -> i.ingredient),
                        Codec.INT.fieldOf("count").forGetter(i -> i.count)
                ).apply(builder, ParticleReboundIngredient::new)
        );
    }
    
   // TODO: Move to separate file if desired
    public record ParticleReboundFuel(String tag) {
        public static final Codec<ParticleReboundFuel> CODEC = RecordCodecBuilder.create(
                builder -> builder.group(Codec.STRING.fieldOf("tag").forGetter(f -> f.tag)).apply(builder, ParticleReboundFuel::new)
        );
        
        public boolean isFuel(ItemStack stack) {
            // TODO: Check if fuel item matches the tag
        }
    }
   
   public class Serializer implements RecipeSerializer<ParticleReboundRecipe> {
     public static final Codec<ParticleReboundRecipe> CODEC = RecordCodecBuilder.create(
       builder -> builder.group(
         ParticleReboundIngredient.CODEC.listOf().fieldOf("inputs").forGetter(r -> r.inputs),
         ParticleReboundFuel.CODEC.fieldOf("fuel").forGetter(r -> r.fuel),
         ItemStack.CODEC.fieldOf("output").forGetter(r -> r.output)
       ).apply(builder, ParticleReboundRecipe::new)
     );

     @Override
     public @NotNull Codec<ParticleReboundRecipe> codec() {
       return CODEC;
     }
     
     // TODO: The rest ...
   }
 }

 

?

Yeah sorry i just managed to make it now, i shouldn't have tried to make it work in my head yesterday late at night. It correctly is recognizing the recipe. Im running on some other errors but they are now due to my recipe's inner workings and not the game not recognizing the recipe itself

Link to comment
Share on other sites

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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I'm creating a Curio mod and one of those items gives the player Freezing immunity, It works fine with the vanilla Minecraft freezing effect i trayed to to also make it work with Ice and Fire: ice Dragon freezing effect, and the method I was to change the nbtTag the mod add to the player but nothing that i know of works
    • Hi guys! I'm really not good at this kind of thing at all, and I've been throwing together a modpack for my personal entertainment. I had tried loading some worlds earlier when I had 78 and that worked, but now I'm at 90 and something went wrong. I can't enter any world I try to create, it just crashes after lagging for a while at the "Loading World" section.   https://pastebin.com/embed_iframe/WwaKFxiK (please let me know if that link to my crash report doesn't work it's my first time doing this)   I was creating a fresh new world, it's not something that happened in an active world. I create worlds to make sure everything works quickly every 10 mods or so before deleting them. I also downloaded Not Enough Crashes and it doesn't seem to suspect any particular mod. I'm using the Prism Launcher. Any advice helps, I'm very new to this and don't want to have to start making my modpack over again! ❤️
    • Add crash-reports with sites like https://paste.ee/ and paste the link to it here   There is an issue with decorative_blocks - maybe a conflict with Optifine Make a test without Optifine first - if there is no change, remove decorative_blocks
    • While the mods are loading, I get this message and Minecraft crashes, I don't know why   Can anyone kindly help me if you know why? Thank you    ---- Minecraft Crash Report ---- // Don't do that. Time: 2024-05-26 22:17:38 Description: Initializing game java.lang.RuntimeException: null     at net.minecraftforge.registries.GameData.postRegisterEvents(GameData.java:320) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}     at net.minecraftforge.common.ForgeStatesProvider.lambda$new$4(ForgeStatesProvider.java:25) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}     at net.minecraftforge.fml.ModLoader.handleInlineTransition(ModLoader.java:219) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}     at net.minecraftforge.fml.ModLoader.lambda$dispatchAndHandleError$19(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}     at java.util.Optional.ifPresent(Optional.java:178) ~[?:?] {re:mixin}     at net.minecraftforge.fml.ModLoader.dispatchAndHandleError(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}     at net.minecraftforge.fml.ModLoader.lambda$gatherAndInitializeMods$13(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}     at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}     at net.minecraftforge.fml.ModLoader.gatherAndInitializeMods(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}     at net.minecraftforge.client.loading.ClientModLoader.lambda$begin$1(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraftforge.client.loading.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:72) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraftforge.client.loading.ClientModLoader.begin(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.<init>(Minecraft.java:484) ~[forge-1.20.4-49.0.50-client.jar:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:dynamic_fps-common.mixins.json:MinecraftMixin,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:196) ~[forge-1.20.4-49.0.50-client.jar:?] {re:classloading,pl:runtimedistcleaner:A}     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:568) ~[?:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:91) ~[fmlloader-1.20.4-49.0.50.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:75) ~[fmlloader-1.20.4-49.0.50.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) ~[modlauncher-10.1.2.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:74) ~[modlauncher-10.1.2.jar:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:114) ~[modlauncher-10.1.2.jar:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:73) ~[modlauncher-10.1.2.jar:?] {}     at cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) ~[modlauncher-10.1.2.jar:?] {}     at net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) ~[bootstrap-2.1.0.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:568) ~[?:?] {}     at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) ~[bootstrap-2.1.0.jar!/:?] {}     at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) ~[bootstrap-2.1.0.jar!/:?] {}     at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) ~[bootstrap-2.1.0.jar!/:?] {}     Suppressed: net.minecraftforge.fml.ModLoadingException: Decorative Blocks (decorative_blocks) encountered an error during the common_setup event phase §7java.lang.NoSuchMethodError: 'void net.minecraft.world.level.block.TrapDoorBlock.<init>(net.minecraft.world.level.block.state.BlockBehaviour$Properties, net.minecraft.world.level.block.state.properties.BlockSetType)'         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:110) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         at net.minecraftforge.fml.ModLoader.lambda$postEventWithWrapInModOrder$33(ModLoader.java:347) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModList.forEachModInOrder(ModList.java:227) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {re:mixin}         at net.minecraftforge.fml.ModLoader.postEventWithWrapInModOrder(ModLoader.java:345) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.postEventWrapContainerInModOrder(ModLoader.java:338) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.registries.GameData.postRegisterEvents(GameData.java:334) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.common.ForgeStatesProvider.lambda$new$4(ForgeStatesProvider.java:25) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.fml.ModLoader.handleInlineTransition(ModLoader.java:219) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$dispatchAndHandleError$19(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.util.Optional.ifPresent(Optional.java:178) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.dispatchAndHandleError(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$gatherAndInitializeMods$13(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.gatherAndInitializeMods(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.client.loading.ClientModLoader.lambda$begin$1(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:72) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.begin(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraft.client.Minecraft.<init>(Minecraft.java:484) ~[forge-1.20.4-49.0.50-client.jar:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:dynamic_fps-common.mixins.json:MinecraftMixin,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin,pl:mixin:A,pl:runtimedistcleaner:A}         at net.minecraft.client.main.Main.main(Main.java:196) ~[forge-1.20.4-49.0.50-client.jar:?] {re:classloading,pl:runtimedistcleaner:A}         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:568) ~[?:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:91) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:75) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:74) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.run(Launcher.java:114) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.main(Launcher.java:73) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) ~[modlauncher-10.1.2.jar:?] {}         at net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) ~[bootstrap-2.1.0.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:568) ~[?:?] {}         at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) ~[bootstrap-2.1.0.jar!/:?] {}     Caused by: java.lang.NoSuchMethodError: 'void net.minecraft.world.level.block.TrapDoorBlock.<init>(net.minecraft.world.level.block.state.BlockBehaviour$Properties, net.minecraft.world.level.block.state.properties.BlockSetType)'         at lilypuree.decorative_blocks.blocks.BarPanelBlock.<init>(BarPanelBlock.java:30) ~[decorative_blocks-forge-1.20.1-4.0.2.jar!/:4.0.2] {re:classloading}         at lilypuree.decorative_blocks.core.DBBlocks.lambda$static$12(DBBlocks.java:67) ~[decorative_blocks-forge-1.20.1-4.0.2.jar!/:4.0.2] {re:classloading}         at net.minecraftforge.registries.DeferredRegister$EventDispatcher.lambda$handleEvent$0(DeferredRegister.java:366) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:eventbus:A}         at net.minecraftforge.registries.RegisterEvent.register(RegisterEvent.java:59) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:eventbus:A}         at net.minecraftforge.registries.DeferredRegister$EventDispatcher.handleEvent(DeferredRegister.java:366) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:eventbus:A}         at net.minecraftforge.registries.__EventDispatcher_handleEvent_RegisterEvent.invoke(.dynamic) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:eventbus:B}         at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:58) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:300) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:281) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:106) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         ... 38 more     Suppressed: net.minecraftforge.fml.ModLoadingException: Decorative Blocks (decorative_blocks) encountered an error during the common_setup event phase §7java.lang.NullPointerException: Registry Object not present: decorative_blocks:bar_panel         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:110) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         at net.minecraftforge.fml.ModLoader.lambda$postEventWithWrapInModOrder$33(ModLoader.java:347) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModList.forEachModInOrder(ModList.java:227) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {re:mixin}         at net.minecraftforge.fml.ModLoader.postEventWithWrapInModOrder(ModLoader.java:345) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.postEventWrapContainerInModOrder(ModLoader.java:338) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.registries.GameData.postRegisterEvents(GameData.java:334) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.common.ForgeStatesProvider.lambda$new$4(ForgeStatesProvider.java:25) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.fml.ModLoader.handleInlineTransition(ModLoader.java:219) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$dispatchAndHandleError$19(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.util.Optional.ifPresent(Optional.java:178) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.dispatchAndHandleError(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$gatherAndInitializeMods$13(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.gatherAndInitializeMods(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.client.loading.ClientModLoader.lambda$begin$1(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:72) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.begin(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraft.client.Minecraft.<init>(Minecraft.java:484) ~[forge-1.20.4-49.0.50-client.jar:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:dynamic_fps-common.mixins.json:MinecraftMixin,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin,pl:mixin:A,pl:runtimedistcleaner:A}         at net.minecraft.client.main.Main.main(Main.java:196) ~[forge-1.20.4-49.0.50-client.jar:?] {re:classloading,pl:runtimedistcleaner:A}         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:568) ~[?:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:91) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:75) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:74) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.run(Launcher.java:114) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.main(Launcher.java:73) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) ~[modlauncher-10.1.2.jar:?] {}         at net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) ~[bootstrap-2.1.0.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:568) ~[?:?] {}         at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) ~[bootstrap-2.1.0.jar!/:?] {}     Caused by: java.lang.NullPointerException: Registry Object not present: decorative_blocks:bar_panel         at java.util.Objects.requireNonNull(Objects.java:336) ~[?:?] {re:mixin}         at net.minecraftforge.registries.RegistryObject.get(RegistryObject.java:204) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,re:mixin}         at lilypuree.decorative_blocks.registration.forge.ForgeRegistrationFactory$Provider$1.get(ForgeRegistrationFactory.java:145) ~[decorative_blocks-forge-1.20.1-4.0.2.jar!/:4.0.2] {re:classloading}         at lilypuree.decorative_blocks.registration.BlockRegistryObject$1.get(BlockRegistryObject.java:87) ~[decorative_blocks-forge-1.20.1-4.0.2.jar!/:4.0.2] {re:classloading}         at lilypuree.decorative_blocks.registration.BlockRegistryObject$1.get(BlockRegistryObject.java:74) ~[decorative_blocks-forge-1.20.1-4.0.2.jar!/:4.0.2] {re:classloading}         at lilypuree.decorative_blocks.core.DBItems.lambda$registerBlockItem$3(DBItems.java:83) ~[decorative_blocks-forge-1.20.1-4.0.2.jar!/:4.0.2] {re:classloading}         at net.minecraftforge.registries.DeferredRegister$EventDispatcher.lambda$handleEvent$0(DeferredRegister.java:366) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:eventbus:A}         at net.minecraftforge.registries.RegisterEvent.register(RegisterEvent.java:59) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:eventbus:A}         at net.minecraftforge.registries.DeferredRegister$EventDispatcher.handleEvent(DeferredRegister.java:366) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:eventbus:A}         at net.minecraftforge.registries.__EventDispatcher_handleEvent_RegisterEvent.invoke(.dynamic) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:eventbus:B}         at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:58) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:300) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:281) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:106) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         ... 38 more     Suppressed: net.minecraftforge.fml.ModLoadingException: GlitchCore (glitchcore) encountered an error during the common_setup event phase §7java.lang.NullPointerException: null         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:110) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         at net.minecraftforge.fml.ModLoader.lambda$postEventWithWrapInModOrder$33(ModLoader.java:347) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModList.forEachModInOrder(ModList.java:227) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {re:mixin}         at net.minecraftforge.fml.ModLoader.postEventWithWrapInModOrder(ModLoader.java:345) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.postEventWrapContainerInModOrder(ModLoader.java:338) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.registries.GameData.postRegisterEvents(GameData.java:334) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.common.ForgeStatesProvider.lambda$new$4(ForgeStatesProvider.java:25) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.fml.ModLoader.handleInlineTransition(ModLoader.java:219) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$dispatchAndHandleError$19(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.util.Optional.ifPresent(Optional.java:178) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.dispatchAndHandleError(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$gatherAndInitializeMods$13(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.gatherAndInitializeMods(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.client.loading.ClientModLoader.lambda$begin$1(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:72) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.begin(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraft.client.Minecraft.<init>(Minecraft.java:484) ~[forge-1.20.4-49.0.50-client.jar:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:dynamic_fps-common.mixins.json:MinecraftMixin,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin,pl:mixin:A,pl:runtimedistcleaner:A}         at net.minecraft.client.main.Main.main(Main.java:196) ~[forge-1.20.4-49.0.50-client.jar:?] {re:classloading,pl:runtimedistcleaner:A}         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:568) ~[?:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:91) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:75) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:74) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.run(Launcher.java:114) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.main(Launcher.java:73) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) ~[modlauncher-10.1.2.jar:?] {}         at net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) ~[bootstrap-2.1.0.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:568) ~[?:?] {}         at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) ~[bootstrap-2.1.0.jar!/:?] {}     Caused by: java.lang.NullPointerException         at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:903) ~[guava-32.1.2-jre.jar!/:?] {}         at com.google.common.collect.ImmutableSet.construct(ImmutableSet.java:206) ~[guava-32.1.2-jre.jar!/:?] {re:mixin}         at com.google.common.collect.ImmutableSet.constructUnknownDuplication(ImmutableSet.java:172) ~[guava-32.1.2-jre.jar!/:?] {re:mixin}         at com.google.common.collect.ImmutableSet.copyOf(ImmutableSet.java:300) ~[guava-32.1.2-jre.jar!/:?] {re:mixin}         at net.minecraft.world.level.block.entity.BlockEntityType$Builder.m_155273_(BlockEntityType.java:127) ~[forge-1.20.4-49.0.50-client.jar!/:?] {re:classloading}         at biomesoplenty.init.ModBlockEntities.registerBlockEntities(ModBlockEntities.java:26) ~[BiomesOPlenty-forge-1.20.4-19.0.0.89.jar!/:19.0.0.89] {re:classloading}         at glitchcore.util.RegistryHelper.lambda$accept$0(RegistryHelper.java:43) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at glitchcore.util.RegistryHelper.accept(RegistryHelper.java:41) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at glitchcore.util.RegistryHelper.accept(RegistryHelper.java:18) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at glitchcore.event.EventManager.fire(EventManager.java:45) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:mixin,re:classloading}         at glitchcore.forge.handlers.RegistryEventHandler.onRegister(RegistryEventHandler.java:22) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at glitchcore.forge.handlers.__RegistryEventHandler_onRegister_RegisterEvent.invoke(.dynamic) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading,pl:eventbus:B}         at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:58) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:300) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:281) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:106) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         ... 38 more     Suppressed: net.minecraftforge.fml.ModLoadingException: GlitchCore (glitchcore) encountered an error during the common_setup event phase §7java.lang.NullPointerException: null         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:110) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         at net.minecraftforge.fml.ModLoader.lambda$postEventWithWrapInModOrder$33(ModLoader.java:347) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModList.forEachModInOrder(ModList.java:227) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {re:mixin}         at net.minecraftforge.fml.ModLoader.postEventWithWrapInModOrder(ModLoader.java:345) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.postEventWrapContainerInModOrder(ModLoader.java:338) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.registries.GameData.postRegisterEvents(GameData.java:334) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.common.ForgeStatesProvider.lambda$new$4(ForgeStatesProvider.java:25) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.fml.ModLoader.handleInlineTransition(ModLoader.java:219) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$dispatchAndHandleError$19(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.util.Optional.ifPresent(Optional.java:178) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.dispatchAndHandleError(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$gatherAndInitializeMods$13(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.gatherAndInitializeMods(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.client.loading.ClientModLoader.lambda$begin$1(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:72) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.begin(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraft.client.Minecraft.<init>(Minecraft.java:484) ~[forge-1.20.4-49.0.50-client.jar:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:dynamic_fps-common.mixins.json:MinecraftMixin,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin,pl:mixin:A,pl:runtimedistcleaner:A}         at net.minecraft.client.main.Main.main(Main.java:196) ~[forge-1.20.4-49.0.50-client.jar:?] {re:classloading,pl:runtimedistcleaner:A}         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:568) ~[?:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:91) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:75) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:74) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.run(Launcher.java:114) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.main(Launcher.java:73) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) ~[modlauncher-10.1.2.jar:?] {}         at net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) ~[bootstrap-2.1.0.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:568) ~[?:?] {}         at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) ~[bootstrap-2.1.0.jar!/:?] {}     Caused by: java.lang.NullPointerException         at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:903) ~[guava-32.1.2-jre.jar!/:?] {}         at com.google.common.collect.ImmutableSet.construct(ImmutableSet.java:206) ~[guava-32.1.2-jre.jar!/:?] {re:mixin}         at com.google.common.collect.ImmutableSet.of(ImmutableSet.java:152) ~[guava-32.1.2-jre.jar!/:?] {re:mixin}         at biomesoplenty.worldgen.carver.OriginCaveWorldCarver.<init>(OriginCaveWorldCarver.java:20) ~[BiomesOPlenty-forge-1.20.4-19.0.0.89.jar!/:19.0.0.89] {re:classloading}         at biomesoplenty.worldgen.carver.BOPWorldCarvers.registerCarvers(BOPWorldCarvers.java:21) ~[BiomesOPlenty-forge-1.20.4-19.0.0.89.jar!/:19.0.0.89] {re:classloading}         at glitchcore.util.RegistryHelper.lambda$accept$0(RegistryHelper.java:43) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at glitchcore.util.RegistryHelper.accept(RegistryHelper.java:41) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at glitchcore.util.RegistryHelper.accept(RegistryHelper.java:18) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at glitchcore.event.EventManager.fire(EventManager.java:45) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:mixin,re:classloading}         at glitchcore.forge.handlers.RegistryEventHandler.onRegister(RegistryEventHandler.java:22) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at glitchcore.forge.handlers.__RegistryEventHandler_onRegister_RegisterEvent.invoke(.dynamic) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading,pl:eventbus:B}         at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:58) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:300) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:281) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:106) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         ... 38 more     Suppressed: net.minecraftforge.fml.ModLoadingException: GlitchCore (glitchcore) encountered an error during the common_setup event phase §7java.lang.NullPointerException: at index 0         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:110) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         at net.minecraftforge.fml.ModLoader.lambda$postEventWithWrapInModOrder$33(ModLoader.java:347) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModList.forEachModInOrder(ModList.java:227) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {re:mixin}         at net.minecraftforge.fml.ModLoader.postEventWithWrapInModOrder(ModLoader.java:345) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.postEventWrapContainerInModOrder(ModLoader.java:338) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.registries.GameData.postRegisterEvents(GameData.java:334) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.common.ForgeStatesProvider.lambda$new$4(ForgeStatesProvider.java:25) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}         at net.minecraftforge.fml.ModLoader.handleInlineTransition(ModLoader.java:219) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$dispatchAndHandleError$19(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.util.Optional.ifPresent(Optional.java:178) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.dispatchAndHandleError(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.fml.ModLoader.lambda$gatherAndInitializeMods$13(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at net.minecraftforge.fml.ModLoader.gatherAndInitializeMods(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar:1.0] {}         at net.minecraftforge.client.loading.ClientModLoader.lambda$begin$1(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:72) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraftforge.client.loading.ClientModLoader.begin(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}         at net.minecraft.client.Minecraft.<init>(Minecraft.java:484) ~[forge-1.20.4-49.0.50-client.jar:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:dynamic_fps-common.mixins.json:MinecraftMixin,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin,pl:mixin:A,pl:runtimedistcleaner:A}         at net.minecraft.client.main.Main.main(Main.java:196) ~[forge-1.20.4-49.0.50-client.jar:?] {re:classloading,pl:runtimedistcleaner:A}         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:568) ~[?:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:91) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:75) ~[fmlloader-1.20.4-49.0.50.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:74) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.run(Launcher.java:114) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.Launcher.main(Launcher.java:73) ~[modlauncher-10.1.2.jar:?] {}         at cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) ~[modlauncher-10.1.2.jar:?] {}         at net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) ~[bootstrap-2.1.0.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:568) ~[?:?] {}         at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) ~[bootstrap-2.1.0.jar!/:?] {}         at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) ~[bootstrap-2.1.0.jar!/:?] {}     Caused by: java.lang.NullPointerException: at index 0         at com.google.common.collect.ObjectArrays.checkElementNotNull(ObjectArrays.java:232) ~[guava-32.1.2-jre.jar!/:?] {}         at com.google.common.collect.ObjectArrays.checkElementsNotNull(ObjectArrays.java:222) ~[guava-32.1.2-jre.jar!/:?] {}         at com.google.common.collect.ObjectArrays.checkElementsNotNull(ObjectArrays.java:216) ~[guava-32.1.2-jre.jar!/:?] {}         at com.google.common.collect.ImmutableList.construct(ImmutableList.java:353) ~[guava-32.1.2-jre.jar!/:?] {}         at com.google.common.collect.ImmutableList.of(ImmutableList.java:225) ~[guava-32.1.2-jre.jar!/:?] {}         at biomesoplenty.init.ModCreativeTab.registerCreativeTabs(ModCreativeTab.java:25) ~[BiomesOPlenty-forge-1.20.4-19.0.0.89.jar!/:19.0.0.89] {re:classloading}         at glitchcore.util.RegistryHelper.lambda$accept$0(RegistryHelper.java:43) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}         at glitchcore.util.RegistryHelper.accept(RegistryHelper.java:41) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at glitchcore.util.RegistryHelper.accept(RegistryHelper.java:18) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at glitchcore.event.EventManager.fire(EventManager.java:45) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:mixin,re:classloading}         at glitchcore.forge.handlers.RegistryEventHandler.onRegister(RegistryEventHandler.java:22) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading}         at glitchcore.forge.handlers.__RegistryEventHandler_onRegister_RegisterEvent.invoke(.dynamic) ~[GlitchCore-forge-1.20.4-1.0.0.59.jar!/:1.0.0.59] {re:classloading,pl:eventbus:B}         at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:58) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:300) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.eventbus.EventBus.post(EventBus.java:281) ~[eventbus-6.2.0.jar:?] {}         at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:106) ~[javafmllanguage-1.20.4-49.0.50.jar:49.0.50] {}         ... 38 more A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Suspected Mods: NONE Stacktrace:     at net.minecraftforge.registries.GameData.postRegisterEvents(GameData.java:320) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}     at net.minecraftforge.common.ForgeStatesProvider.lambda$new$4(ForgeStatesProvider.java:25) ~[forge-1.20.4-49.0.50-universal.jar:?] {re:classloading}     at net.minecraftforge.fml.ModLoader.handleInlineTransition(ModLoader.java:219) ~[fmlcore-1.20.4-49.0.50.jar!/:1.0] {}     at net.minecraftforge.fml.ModLoader.lambda$dispatchAndHandleError$19(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar!/:1.0] {}     at java.util.Optional.ifPresent(Optional.java:178) ~[?:?] {re:mixin}     at net.minecraftforge.fml.ModLoader.dispatchAndHandleError(ModLoader.java:211) ~[fmlcore-1.20.4-49.0.50.jar!/:1.0] {}     at net.minecraftforge.fml.ModLoader.lambda$gatherAndInitializeMods$13(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar!/:1.0] {}     at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {re:mixin}     at net.minecraftforge.fml.ModLoader.gatherAndInitializeMods(ModLoader.java:185) ~[fmlcore-1.20.4-49.0.50.jar!/:1.0] {}     at net.minecraftforge.client.loading.ClientModLoader.lambda$begin$1(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraftforge.client.loading.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:72) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraftforge.client.loading.ClientModLoader.begin(ClientModLoader.java:52) ~[forge-1.20.4-49.0.50-universal.jar!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.<init>(Minecraft.java:484) ~[forge-1.20.4-49.0.50-client.jar!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:glitchcore.mixins.json:client.MixinMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:dynamic_fps-common.mixins.json:MinecraftMixin,pl:mixin:APP:sound_physics_remastered.mixins.json:MinecraftMixin,pl:mixin:A,pl:runtimedistcleaner:A} -- Initialization -- Details:     Modules:          ADVAPI32.dll:API Windows 32 Base avanzato:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         COMCTL32.dll:Libreria di controlli per le azioni dell'utente:6.10 (WinBuild.160101.0800):Microsoft Corporation         CRYPT32.dll:Crypto API32:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         CRYPTBASE.dll:Base cryptographic API DLL:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         CRYPTSP.dll:Cryptographic Service Provider API:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         ColorAdapterClient.dll:Microsoft Color Adapter Client:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         CoreMessaging.dll:Microsoft CoreMessaging Dll:10.0.19041.4355:Microsoft Corporation         CoreUIComponents.dll:Microsoft Core UI Components Dll:10.0.19041.3636:Microsoft Corporation         DBGHELP.DLL:Windows Image Helper:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         DEVOBJ.dll:Device Information Set DLL:10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         DNSAPI.dll:DLL API client DNS:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         DPAPI.DLL:Data Protection API:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         GDI32.dll:GDI Client DLL:10.0.19041.3996 (WinBuild.160101.0800):Microsoft Corporation         GLU32.dll:OpenGL Utility Library DLL:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         IMM32.DLL:Multi-User Windows IMM32 API Client DLL:10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         IPHLPAPI.DLL:API helper IP:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         KERNEL32.DLL:DLL client di Windows NT BASE API:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         KERNELBASE.dll:DLL client di Windows NT BASE API:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         MSCTF.dll:MSCTF Server DLL:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         NLAapi.dll:Network Location Awareness 2:10.0.19041.4123 (WinBuild.160101.0800):Microsoft Corporation         NSI.dll:NSI User-mode interface DLL:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         NTASN1.dll:Microsoft ASN.1 API:10.0.19041.1 (WinBuild.160101.0800):Microsoft Corporation         OLEAUT32.dll:OLEAUT32.DLL:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         POWRPROF.dll:DLL helper del profilo di alimentazione:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         PROPSYS.dll:Sistema di proprietà Microsoft:7.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         PSAPI.DLL:Process Status Helper:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         Pdh.dll:DLL helper Dati di prestazione di Windows:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         RPCRT4.dll:Runtime RPC (Remote Procedure Call):10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         SHCORE.dll:SHCORE:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         SHELL32.dll:DLL comune della shell di Windows:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         SSPICLI.DLL:Security Support Provider Interface:10.0.19041.4239 (WinBuild.160101.0800):Microsoft Corporation         Secur32.dll:Security Support Provider Interface:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         UMPDC.dll         USER32.dll:Multi-User Windows USER API Client DLL:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         USERENV.dll:Userenv:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         VCRUNTIME140.dll:Microsoft® C Runtime Library:14.29.30139.0 built by: vcwrkspc:Microsoft Corporation         VERSION.dll:Version Checking and File Installation Libraries:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         WINHTTP.dll:Servizi HTTP Windows:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         WINMM.dll:DLL API MCI:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         WS2_32.dll:DLL a 32 bit di Windows Socket 2.0:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         WSOCK32.dll:Windows Socket 32-Bit DLL:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         Wldp.dll:Criterio di blocco di Windows:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         amsi.dll:Anti-Malware Scan Interface:10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         apphelp.dll:Libreria client compatibilità applicazione:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         awt.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         bcrypt.dll:Libreria primitive di crittografia di Windows:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         bcryptPrimitives.dll:Windows Cryptographic Primitives Library:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         cfgmgr32.dll:Configuration Manager DLL:10.0.19041.3996 (WinBuild.160101.0800):Microsoft Corporation         clbcatq.dll:COM+ Configuration Catalog:2001.12.10941.16384 (WinBuild.160101.0800):Microsoft Corporation         com_antivirus.dll:Kaspersky ComAntivirus Component:30.1580.0.940:AO Kaspersky Lab         combase.dll:Microsoft COM per Windows:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         dbgcore.DLL:Windows Core Debugging Helpers:10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         dhcpcsvc.DLL:Servizio Client DHCP:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         dhcpcsvc6.DLL:Client DHCPv6:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         dinput8.dll:Microsoft DirectInput:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         dwmapi.dll:API di Gestione finestre desktop Microsoft:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         dxgi.dll:DirectX Graphics Infrastructure:10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         fwpuclnt.dll:API modalità utente FWP/IPsec:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         gdi32full.dll:GDI Client DLL:10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         glfw.dll:GLFW 3.4.0 DLL:3.4.0:GLFW         icm32.dll:Microsoft Color Management Module (CMM):10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         ig9icd64.dll:OpenGL(R) Driver for Intel(R) Graphics Accelerator:27.20.100.8682:Intel Corporation         igc64.dll:Intel Graphics Shader Compiler for Intel(R) Graphics Accelerator:27.20.100.8682:Intel Corporation         igdgmm64.dll:User Mode Driver for Intel(R) Graphics Technology:27.20.100.8682:Intel Corporation         igdml64.dll:Metrics Library for Intel(R) Graphics Technology:27.20.100.8682:Intel Corporation         inputhost.dll:InputHost:10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         java.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         javaw.exe:OpenJDK Platform binary:17.0.8.0:Microsoft         jemalloc.dll         jimage.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         jli.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         jna14716657657075399810.dll:JNA native library:6.1.6:Java(TM) Native Access (JNA)         jsvml.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         jvm.dll:OpenJDK 64-Bit server VM:17.0.8.0:Microsoft         kernel.appcore.dll:AppModel API Host:10.0.19041.3758 (WinBuild.160101.0800):Microsoft Corporation         lwjgl.dll         lwjgl_opengl.dll         lwjgl_stb.dll         management.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         management_ext.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         mscms.dll:DLL sistema di corrispondenza colori Microsoft:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         msvcp140.dll:Microsoft® C Runtime Library:14.29.30139.0 built by: vcwrkspc:Microsoft Corporation         msvcp_win.dll:Microsoft® C Runtime Library:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         msvcrt.dll:Windows NT CRT DLL:7.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         mswsock.dll:Service Provider Microsoft Windows Sockets 2.0:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         napinsp.dll:Provider shim denominazione posta elettronica:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         ncrypt.dll:Windows NCrypt Router:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         net.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         nio.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         ntdll.dll:DLL del livello NT:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         ntmarta.dll:Provider MARTA per Windows NT:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         ole32.dll:Microsoft OLE per Windows:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         opengl32.dll:OpenGL Client DLL:10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         perfos.dll:DLL oggetti delle prestazioni del sistema Windows:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         pnrpnsp.dll:Provider spazio dei nomi PNRP:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         profapi.dll:User Profile Basic API:10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         rasadhlp.dll:Remote Access AutoDial Helper:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         rsaenh.dll:Microsoft Enhanced Cryptographic Provider:10.0.19041.1 (WinBuild.160101.0800):Microsoft Corporation         sechost.dll:Host for SCM/SDDL/LSA Lookup APIs:10.0.19041.1 (WinBuild.160101.0800):Microsoft Corporation         shlwapi.dll:Libreria leggera di utilità per la shell:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         sunmscapi.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         textinputframework.dll:"TextInputFramework.DYNLINK":10.0.19041.4355 (WinBuild.160101.0800):Microsoft Corporation         ucrtbase.dll:Microsoft® C Runtime Library:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         uxtheme.dll:Libreria UxTheme di Microsoft:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         vcruntime140_1.dll:Microsoft® C Runtime Library:14.29.30139.0 built by: vcwrkspc:Microsoft Corporation         verify.dll:OpenJDK Platform binary:17.0.8.0:Microsoft         win32u.dll:Win32u:10.0.19041.4412 (WinBuild.160101.0800):Microsoft Corporation         windows.storage.dll:API archiviazione Microsoft WinRT:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         winrnr.dll:LDAP RnR Provider DLL:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         wintypes.dll:DLL tipi di base Windows:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         wshbth.dll:Windows Sockets Helper DLL:10.0.19041.3636 (WinBuild.160101.0800):Microsoft Corporation         xinput1_4.dll:API periferica comune Microsoft:10.0.19041.4165 (WinBuild.160101.0800):Microsoft Corporation         zip.dll:OpenJDK Platform binary:17.0.8.0:Microsoft Stacktrace:     at net.minecraft.client.main.Main.main(Main.java:196) ~[forge-1.20.4-49.0.50-client.jar:?] {re:classloading,pl:runtimedistcleaner:A}     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:568) ~[?:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:91) ~[fmlloader-1.20.4-49.0.50.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:75) ~[fmlloader-1.20.4-49.0.50.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) ~[modlauncher-10.1.2.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:74) ~[modlauncher-10.1.2.jar:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:114) ~[modlauncher-10.1.2.jar:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:73) ~[modlauncher-10.1.2.jar:?] {}     at cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) ~[modlauncher-10.1.2.jar:?] {}     at net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) ~[bootstrap-2.1.0.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:568) ~[?:?] {}     at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) ~[bootstrap-2.1.0.jar!/:?] {}     at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) ~[bootstrap-2.1.0.jar!/:?] {}     at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) ~[bootstrap-2.1.0.jar!/:?] {} -- System Details -- Details:     Minecraft Version: 1.20.4     Minecraft Version ID: 1.20.4     Operating System: Windows 10 (amd64) version 10.0     Java Version: 17.0.8, Microsoft     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Microsoft     Memory: 715257464 bytes (682 MiB) / 1447034880 bytes (1380 MiB) up to 4294967296 bytes (4096 MiB)     CPUs: 4     Processor Vendor: GenuineIntel     Processor Name: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz     Identifier: Intel64 Family 6 Model 142 Stepping 9     Microarchitecture: Amber Lake     Frequency (GHz): 2.71     Number of physical packages: 1     Number of physical CPUs: 2     Number of logical CPUs: 4     Graphics card #0 name: NVIDIA GeForce 930MX     Graphics card #0 vendor: NVIDIA (0x10de)     Graphics card #0 VRAM (MB): 2048.00     Graphics card #0 deviceId: 0x134e     Graphics card #0 versionInfo: DriverVersion=30.0.15.1179     Graphics card #1 name: Intel(R) HD Graphics 620     Graphics card #1 vendor: Intel Corporation (0x8086)     Graphics card #1 VRAM (MB): 1024.00     Graphics card #1 deviceId: 0x5916     Graphics card #1 versionInfo: DriverVersion=27.20.100.8682     Memory slot #0 capacity (MB): 4096.00     Memory slot #0 clockSpeed (GHz): 2.13     Memory slot #0 type: DDR4     Virtual memory max (MB): 14220.26     Virtual memory used (MB): 8538.14     Swap memory total (MB): 10240.00     Swap memory used (MB): 1415.27     JVM Flags: 4 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx4096m -Xms256m     Launched Version: forge-49.0.50     Launcher name: minecraft-launcher     Backend library: LWJGL version 3.3.2+13     Backend API: Intel(R) HD Graphics 620 GL version 4.6.0 - Build 27.20.100.8682, Intel     Window size: <not initialized>     GL Caps: Using framebuffer using OpenGL 3.2     GL debug messages:      Using VBOs: Yes     Is Modded: Definitely; Client brand changed to 'forge'     Universe: 404     Type: Client (map_client.txt)     Locale: en_US     CPU: 4x Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz     OptiFine Version: OptiFine_1.20.4_HD_U_I7     OptiFine Build: 20240317-172634     Render Distance Chunks: 8     Mipmaps: 4     Anisotropic Filtering: 1     Antialiasing: 0     Multitexture: false     Shaders: null     OpenGlVersion: 4.6.0 - Build 27.20.100.8682     OpenGlRenderer: Intel(R) HD Graphics 620     OpenGlVendor: Intel     CpuCount: 4     ModLauncher: 10.1.2     ModLauncher launch target: forge_client     ModLauncher naming: srg     ModLauncher services:          / slf4jfixer PLUGINSERVICE          / runtimedistcleaner PLUGINSERVICE          / runtime_enum_extender PLUGINSERVICE          / object_holder_definalize PLUGINSERVICE          / capability_token_subclass PLUGINSERVICE          / accesstransformer PLUGINSERVICE          / eventbus PLUGINSERVICE          / mixin PLUGINSERVICE          / OptiFine TRANSFORMATIONSERVICE          / fml TRANSFORMATIONSERVICE          / mixin TRANSFORMATIONSERVICE      FML Language Providers:          lowcodefml@49         [email protected]         [email protected]     Mod List:          forge-1.20.4-49.0.50-client.jar                   |Minecraft                     |minecraft                     |1.20.4              |COMMON_SET|Manifest: NOSIGNATURE         mcw-bridges-3.0.0-mc1.20.4forge.jar               |Macaw's Bridges               |mcwbridges                    |3.0.0               |COMMON_SET|Manifest: NOSIGNATURE         saturn-mc1.20.4-0.1.3.jar                         |Saturn                        |saturn                        |0.1.3               |COMMON_SET|Manifest: NOSIGNATURE         TerraBlender-forge-1.20.4-3.3.0.12.jar            |TerraBlender                  |terrablender                  |3.3.0.12            |COMMON_SET|Manifest: NOSIGNATURE         mcw-fences-1.1.1-mc1.20.4forge.jar                |Macaw's Fences and Walls      |mcwfences                     |1.1.1               |COMMON_SET|Manifest: NOSIGNATURE         jei-1.20.4-forge-17.3.0.52.jar                    |Just Enough Items             |jei                           |17.3.0.52           |COMMON_SET|Manifest: NOSIGNATURE         spectrelib-forge-0.15.2+1.20.4.jar                |SpectreLib                    |spectrelib                    |0.15.2+1.20.4       |COMMON_SET|Manifest: NOSIGNATURE         mcw-windows-2.2.1-mc1.20.4forge.jar               |Macaw's Windows               |mcwwindows                    |2.2.1               |COMMON_SET|Manifest: NOSIGNATURE         ForgeEndertech-1.20.4-11.4.1.1-build.0170.jar     |ForgeEndertech                |forgeendertech                |11.4.1.1            |COMMON_SET|Manifest: NOSIGNATURE         Croptopia-1.20.4-FORGE-3.0.4.jar                  |Croptopia                     |croptopia                     |3.0.4               |COMMON_SET|Manifest: NOSIGNATURE         journeymap-1.20.4-5.9.25-forge.jar                |Journeymap                    |journeymap                    |5.9.25              |COMMON_SET|Manifest: NOSIGNATURE         comforts-forge-7.2.2+1.20.4.jar                   |Comforts                      |comforts                      |7.2.2+1.20.4        |COMMON_SET|Manifest: NOSIGNATURE         travelersbackpack-forge-1.20.4-9.4.2.jar          |Traveler's Backpack           |travelersbackpack             |9.4.2               |COMMON_SET|Manifest: NOSIGNATURE         EpheroLib-1.20.4-FORGE-1.2.0.jar                  |EpheroLib                     |epherolib                     |1.2.0               |COMMON_SET|Manifest: NOSIGNATURE         YungsApi-1.20.4-Forge-4.4.3.jar                   |YUNG's API                    |yungsapi                      |1.20.4-Forge-4.4.3  |COMMON_SET|Manifest: NOSIGNATURE         decorative_blocks-forge-1.20.1-4.0.2.jar          |Decorative Blocks             |decorative_blocks             |4.0.2               |COMMON_SET|Manifest: NOSIGNATURE         mixinextras-forge-0.3.5.jar                       |MixinExtras                   |mixinextras                   |0.3.5               |COMMON_SET|Manifest: NOSIGNATURE         GlitchCore-forge-1.20.4-1.0.0.59.jar              |GlitchCore                    |glitchcore                    |1.0.0.59            |COMMON_SET|Manifest: NOSIGNATURE         BiomesOPlenty-forge-1.20.4-19.0.0.89.jar          |Biomes O' Plenty              |biomesoplenty                 |19.0.0.89           |COMMON_SET|Manifest: NOSIGNATURE         mcw-roofs-2.3.0-mc1.20.4forge.jar                 |Macaw's Roofs                 |mcwroofs                      |2.3.0               |COMMON_SET|Manifest: NOSIGNATURE         architectury-11.1.17-minecraftforge.jar           |Architectury                  |architectury                  |11.1.17             |COMMON_SET|Manifest: NOSIGNATURE         moremobvariants-forge+1.20.4-1.3.0.1.jar          |More Mob Variants             |moremobvariants               |1.3.0.1             |COMMON_SET|Manifest: NOSIGNATURE         additional_lights-1.20.4-2.1.7.jar                |Additional Lights             |additional_lights             |2.1.7               |COMMON_SET|Manifest: NOSIGNATURE         dynamic-fps-3.4.3+minecraft-1.20.0-forge.jar      |Dynamic FPS                   |dynamic_fps                   |3.4.3               |COMMON_SET|Manifest: NOSIGNATURE         AdChimneys-1.20.4-10.4.1.1-build.0170.jar         |Advanced Chimneys             |adchimneys                    |10.4.1.1            |COMMON_SET|Manifest: NOSIGNATURE         macawsroofsbop-1.20-1.0.jar                       |Macaw's Roofs - BOP           |macawsroofsbop                |1.20-1.0            |COMMON_SET|Manifest: NOSIGNATURE         cloth-config-13.0.121-forge.jar                   |Cloth Config v13 API          |cloth_config                  |13.0.121            |COMMON_SET|Manifest: NOSIGNATURE         sound-physics-remastered-forge-1.20.4-1.4.2.jar   |Sound Physics Remastered      |sound_physics_remastered      |1.20.4-1.4.2        |COMMON_SET|Manifest: NOSIGNATURE         [1.20.2-forge]-Epic-Knights-8.11.jar              |Epic Knights Mod              |magistuarmory                 |8.11                |COMMON_SET|Manifest: NOSIGNATURE         forge-1.20.4-49.0.50-universal.jar                |Forge                         |forge                         |49.0.50             |COMMON_SET|Manifest: NOSIGNATURE         appleskin-forge-mc1.20.2-2.5.1.jar                |AppleSkin                     |appleskin                     |2.5.1+mc1.20.2      |COMMON_SET|Manifest: NOSIGNATURE         t_and_t-1.12.1.1.jar                              |Towns and Towers              |t_and_t                       |1.12.1              |COMMON_SET|Manifest: NOSIGNATURE         YungsBetterMineshafts-1.20.4-Forge-4.4.2.jar      |YUNG's Better Mineshafts      |bettermineshafts              |1.20.4-Forge-4.4.2  |COMMON_SET|Manifest: NOSIGNATURE         cristellib-1.2.2-forge.jar                        |Cristel Lib                   |cristellib                    |1.2.2               |COMMON_SET|Manifest: NOSIGNATURE     Crash Report UUID: a8123eb1-7d66-4297-93b0-8b9baf89b22d     FML: 0.0     Forge: net.minecraftforge:49.0.50
    • In the perilous world of online trading, where promises of quick riches often lead to devastating losses, finding a trustworthy ally can feel like searching for a needle in a haystack. My journey began with high hopes, as I ventured into online trading with an external expert guiding my every move. Little did I know, I was stepping into a carefully orchestrated scam. After investing a substantial $380,000 deposit on an online trading platform, I found myself at the mercy of both the platform and the supposed expert leading my trades. Despite initially seeing profits, red flags began to appear when they demanded a hefty 20% fee, not from the generated profits, but from my pocket. Alarm bells rang loudly in my mind, signaling a potential scam. Thankfully, in the nick of time, I stumbled upon Wizard Web Recovery. With skepticism clouding my judgment, I cautiously reached out to them, hoping against hope for a glimmer of salvation. From the first interaction, their professionalism and expertise shone brightly, offering hope amidst the murky waters of deceit. Their approach was meticulous and methodical, as they diligently assessed my situation, leaving no stone unturned in their quest for justice. Despite the daunting odds stacked against me, Wizard Web Recovery embarked on a relentless pursuit to reclaim what was rightfully mine. Their transparency was a breath of fresh air in an industry plagued by deception. Every step of the way, they kept me informed, providing regular updates and guidance, instilling a sense of trust that had long eluded me. Their dedication to my cause was unwavering, as they navigated the complexities of online trading with finesse and precision. What truly sets Wizard Web Recovery apart is its unwavering commitment to its clients. Beyond mere restitution, they prioritize education and empowerment, equipping individuals with the knowledge and tools to navigate the treacherous waters of online trading safely. Through their expertise and tenacity, Wizard Web Recovery emerged victorious, securing the return of my hard-earned funds. But their impact extends far beyond mere financial restitution. They restored my faith in humanity, proving that amidst the darkness, there are still beacons of light shining brightly. To anyone who finds themselves ensnared in the tangled web of online trading scams, I wholeheartedly recommend Wizard Web Recovery. Their professionalism, expertise, and unwavering dedication are unmatched, offering a glimmer of hope in an otherwise bleak landscape. Trust in their abilities, for they are true wizards in the realm of recovery.
  • Topics

×
×
  • Create New...

Important Information

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