Jump to content

How to set texture for dynamically registered blocks from already existing blocks [1.18.2]


X-Lomir

Recommended Posts

15 hours ago, diesieben07 said:

Override place and call it :)

But getSoundType is called in place deep nested in, so I would need to completely copy the code inside place and just change 1 line. Which I'm not a big fan of, but anyway I was already copying the whole code in updateCustomBlockEntityTag so I might as well do that. However I actually can't because in place there's a call to BlockItem#updateBlockStateFromTag which is private so I can't call it from my subclass. I would need to copy also that code in, but then I would also need to copy the code in BlockItem#updateState because it's private too, so it would make a bit of a mess in my code.

P.S. I don't know if it was only me, but I couldn't connect to the form yesterday, this is way I replied so late

Link to comment
Share on other sites

  • Replies 92
  • Created
  • Last Reply

Top Posters In This Topic

I'm glad to announce that I found a way to fix the stretched textures.

I finally had more time to go line by line debugging starting from the baking of the JSON model, and I found the class FaceBakery that's responsible for creating the vertices of a BakedQuad.

In particular in fillVertex there are two elements being set that involve the texture rendered and are set like so: 

arr[i + 4] = Float.floatToRawIntBits(sprite.getU((double)blockFaceUV.getU(i) * .999 + blockFaceUV.getU((i + 2) % 4) * .001));
arr[i + 4 + 1] = Float.floatToRawIntBits(sprite.getV((double)blockFaceUV.getV(i) * .999 + blockFaceUV.getV((i + 2) % 4) * .001));

and so I figured out that if I had access the my models blockFaceUVs when needed I could just update those specific vertices. Sadly, there is no way to do that.

But luckily I realized that I didn't need those blockFaceUVs at all because while it's true that they hold data on which part of the sprite to take, I actually need the double parameter they compute to.

So with a little bit of math to get the inverse formula I managed to retrieve the double parameter from the data in my original sprite, then I could update those specific vertices by applying the same formula as above but using the referring sprite and the double parameter I retrieved from my original sprite.

As always I'll leave here my most updated code.

Now I just need to understand why the breaking progress is not shown and fix it, then I think the rendering part will be finally done.

Link to comment
Share on other sites

I managed to solve also the breaking process not being shown.

But to be honest I'm not sure why it works 😆 I noticed that when I would start breaking the block and VerticalSlabBakedModel#getQuads would get called modelData was empty, thus making getQuads return an empty list.

I'm not sure why when breaking the block getQuads gets called with an empty modelData, however if in that case I return my jsonBakedModel.getQuads rather than an empty list it works just fine and renders the breaking process correctly, without changing the "background" sprite (to my surprise).

I'm wondering however if I need to cache also them and, in that case, how would I do that, since the modelData is empty and so the referringBlockState is null. Maybe cache them using the state passed to getQuads? But maybe since they are BakedQuads from the JSON model that has already been baked and it's static caching them is not necessary?

 

Link to comment
Share on other sites

Okay, now that rendering is done I'd need some help with craftings. Should I make a new thread? Let me know.

Anyway, how do I register a custom recipe? Do I also need a custom recipe serializer? Or can I just use one of the default ones?

Should I create 4 different custom recipe classes, one for each recipe, or should I create less grouping them together?

Should my recipe classes extend CraftingRecipe? Or is it better to extend ShapedRecipe/ShapelessRecipe?

I tried implementing the recipe that should allow to craft a normal slab into a vertical slab, but I don't know how to get the block used to craft the normal slab from the normal slab, block I need to get its blockstate and return the correct version of a vertical slab.

I also don't know what's the use of getResultItem and canCraftInDimensions.

I also have more questions but I'm trying not to flood here and to solve as many things I can by myself, so maybe I'll ask them another time.

 

EDIT: I actually think I got what canCraftInDimensions does

Edited by X-Lomir
Link to comment
Share on other sites

I changed to another recipe that seemed actually easier: from vertical slabs to referring block.

I created my class ReferringBlockRecipe implementing CraftingRecipe.

I know the matches logic is not correct, but it's good enough for some tests. First of all, is there a way to get the amount of empty slots or filled slots? If not I'd design the matches logic this way: loop through crafting rows, check all but last slots of each row testing whether there are two vertical slabs next to each other. Then if I found exactly 1 match, return true, otherwise return false. If there was a way to know how many empty slots there are, I would first check if there are 7 empty slots and if so search for the first (and only) match. Return true if found, return false if not.

Anyway, apart from these details, I'm wondering if my Serializer implementation is fine, I just return a new instance of ReferringBlockRecipe in fromJson and fromNetwork, while I do nothing in toNetwork. It seems to be working with the few tests I did, but maybe I'm missing something under the hood.

My code with recipes can be found here.

I have a couple more questions:

  • Once I have a BlockState of a block, and so its Item and ItemStack, how to I get its slab? Loop through all recipes that use that block as ingredient? If so, how?
  • Same as the previous one, but in the opposite sense: how do I get a block from its slab BlockState (or Item or ItemStack)?

About these two points, I've thought something:

I need on game startup to get a list of all the blocks in game that can be crafted into normal slabs, to use this list in fillItemCategory. While doing this I could just save in a static HashMap the blockstates of each block and its slab. This way I would have a list of blocks and slabs that can be used in my recipes and an easy and fast way to get from block to slab and vice versa while matching and assembling my recipes.

So with this I would only need to know how to go from block to slab (or from slab to block, since maybe it's easier to loop through all blocks with "slabs" tag rather than looping through all blocks and checking if each has a slab) and then when I'd need to go the opposite way I could just use the HashMap.

 

Edited by X-Lomir
Link to comment
Share on other sites

4 minutes ago, diesieben07 said:

Mostly fine except that your recipe class must not have internal state (in your case the firstIndex). Calling assemble must work without first calling matches, the two methods must operate independently of each other.

Oh I thought that assemble would be called only after matches and so it was safe to use data from matches in assemble. If no internal state should be used, can I safely save 1 instance of my recipe so that its serializer can return always the same rather than instantiating a new one?

9 minutes ago, diesieben07 said:

If you mean that you want to get a generic slab, then yes you'd have to hope that there exists a "standard" slab crafting recipe (and the slab doesn't require some modded machine). I don't quite understand why you need to do this though?

Here I'm supposing that normal slabs will always be crafted with 3 of their respective blocks in a row. I know it could not always be the case, but it's fine for most cases. I don't need to get from block to normal slab with every recipe, but I want to implement several recipes, in particular two that involve only normal slabs and vertical slabs. So, to get the BlockState I need for the vertical slab I'd need to go from normal slab to its block, vice versa when I need to craft a normal slab from a vertical slab.

17 minutes ago, diesieben07 said:

Are your recipes not made from the actual block (i.e. oak planks) instead of the slab? If so, you could make this Map, yes. But it would have to be immutable and thread safe (ImmutableMap is threadsafe), because in single player both server and client thread would use it.

As said above, they are made of both. So if the ImmutableMap is a good idea, I think I know how to implement the recipes I need.

Problem is: how and when do I create this ImmutableMap? For how I would loop through all slabs registered in the game, modded or not, but I'm not sure when it's best to do this and how to actually implement it 😅

Link to comment
Share on other sites

1 hour ago, diesieben07 said:

Recipes can come from data packs, so you have to do this after data packs are loaded. ServerAboutToStartEvent should be all you need.

I'm trying to do what we said, but a few points are unclear to me.

  • How do I get a list of all blocks/items that have the slabs tag? I saw that in previous Forge versions it was possible to do something like BlockTags.SLABS.getValues(), but it doesn't seem to be possible anymore.
  • Once I have a block/item that is a slab, how do I get the block/item it's made from?
  • Is it okay to have a reference to my ImmutableMap in my loader class, setting its value only in the ServerAboutToStartEvent handler, and then access it anywhere around my code? In particular I need to access it in my recipes and in my VerticalSlabBlockItem#fillItemCategory.

I pushed a (very simple) draft here.

Link to comment
Share on other sites

3 hours ago, diesieben07 said:

You again have to look into your map from slabs to blocks. There is no direct link.

But how do I set values in my map at first? Of course once I have the map I'll always use that, but at first I have to put values in that map. So I need a way to go from a slab block to its block. It's fine to assume that a slab will always have a crafting made of 3 blocks in a row, if this can help.

Link to comment
Share on other sites

Isn't there a way to do the opposite, that is knowing the result ItemStack and get its recipe? Because I think it's better to cycle through all items having the slabs tag rather than cycling through all items and checking if they can make a slab.

Link to comment
Share on other sites

I created my ImmutableMap in my event handler as follow:

@SubscribeEvent(priority = EventPriority.LOWEST)
  public void onServerAboutToStartEvent(ServerAboutToStartEvent event) {
    Map<Item, Item> slabMap = new HashMap<Item, Item>();
    ForgeRegistries.ITEMS.tags().getTag(ItemTags.SLABS).forEach(slab -> {
      event.getServer().getRecipeManager().getAllRecipesFor(RecipeType.CRAFTING).forEach(recipe -> {
        if (recipe.getResultItem().is(slab)) {
          recipe.getIngredients().stream().filter(ingredient -> !ingredient.test(slab.getDefaultInstance())).findFirst().ifPresent(ingredient -> {
            ItemStack block = ingredient.getItems()[0];
            if (!block.is(ItemTags.SLABS)) {
              slabMap.put(slab, block.getItem());
            }
          });
        }
      });
    });
    JustVerticalSlabsLoader.slabMap = ImmutableMap.copyOf(slabMap);
  }

This (very naive) logic works and if I print out the slabMap I get this:

{
	crimson_slab=crimson_planks,
	waxed_cut_copper_slab=waxed_cut_copper,
	birch_slab=birch_planks,
	mossy_stone_brick_slab=mossy_stone_bricks,
	cut_red_sandstone_slab=cut_red_sandstone,
	polished_andesite_slab=polished_andesite,
	smooth_sandstone_slab=smooth_sandstone,
	polished_blackstone_brick_slab=polished_blackstone_bricks,
	warped_slab=warped_planks,
	red_nether_brick_slab=red_nether_bricks,
	prismarine_slab=prismarine,
	smooth_quartz_slab=smooth_quartz,
	polished_deepslate_slab=polished_deepslate,
	waxed_oxidized_cut_copper_slab=waxed_oxidized_cut_copper,
	spruce_slab=spruce_planks,
	stone_slab=stone,
	cobblestone_slab=cobblestone,
	oxidized_cut_copper_slab=oxidized_cut_copper,
	polished_blackstone_slab=polished_blackstone,
	stone_brick_slab=stone_bricks,
	waxed_exposed_cut_copper_slab=waxed_exposed_cut_copper,
	dark_prismarine_slab=dark_prismarine,
	polished_granite_slab=polished_granite,
	andesite_slab=andesite,
	prismarine_brick_slab=prismarine_bricks,
	granite_slab=granite,
	cobbled_deepslate_slab=cobbled_deepslate,
	oak_slab=oak_planks,
	waxed_weathered_cut_copper_slab=waxed_weathered_cut_copper,
	deepslate_brick_slab=deepslate_bricks,
	quartz_slab=chiseled_quartz_block,
	end_stone_brick_slab=end_stone_bricks,
	deepslate_tile_slab=deepslate_tiles,
	cut_sandstone_slab=cut_sandstone,
	acacia_slab=acacia_planks,
	sandstone_slab=sandstone,
	purpur_slab=purpur_block,
	exposed_cut_copper_slab=exposed_cut_copper,
	polished_diorite_slab=polished_diorite,
	weathered_cut_copper_slab=weathered_cut_copper,
	smooth_stone_slab=smooth_stone,
	brick_slab=bricks,
	cut_copper_slab=cut_copper,
	blackstone_slab=blackstone,
	diorite_slab=diorite,
	red_sandstone_slab=red_sandstone,
	dark_oak_slab=dark_oak_planks,
	nether_brick_slab=nether_bricks,
	mossy_cobblestone_slab=mossy_cobblestone,
	smooth_red_sandstone_slab=smooth_red_sandstone,
	jungle_slab=jungle_planks
}

Now, this makes the game load fine and the print happens when I load a game.

However if I try to use the map in my VerticalSlabBlockItem#fillItemCategory I get a NullPointerException making the game crash on load.

How do I fix this? I pushed my code here.

Link to comment
Share on other sites

2 hours ago, diesieben07 said:

fillItemCategory might be called before the game has started a server, which means there are no recipes yet. You must deal with this fact.

Okay, I thought I was doing something wrong. In the end just a null check in fillItemCategory fixes it.

I have another problem now: I can't understand why only my ReferringBlockRecipe is working. I put some debug points in the other recipes matches and they never get called, but I made them the same exact way as my ReferringBlockRecipe, registering their serializers and all. I really don't get what's happening.

Most recent code here.

Link to comment
Share on other sites

Okay, I think I'm done with recipes for now. Later on I want to add waxing recipes and stone cutting recipes, but now that I have the slabMap I think it's not going to be difficult.

Anyway, I was trying to make my vertical slabs to have a proper hover name and, while I managed to do that, I found out that my vertical slabs can't be searched in the search tab. If no string is search, they will appear at the end of the tab, otherwise with any string they do not appear. I'm not sure how to fix this, I had hoped having a proper hover name would make the research work but it looks like it's not the case.

Code is here.

Link to comment
Share on other sites

So I did this:

public class RecipeUpdateEventHandler {
  @SubscribeEvent(priority = EventPriority.LOWEST)
  public void onRecipesUpdatedEvent(RecipesUpdatedEvent event) {
    Minecraft.getInstance().getSearchTree(SearchRegistry.CREATIVE_NAMES).refresh();
  }
}

and registered like so in my mod loader constructor:

public JustVerticalSlabsLoader() {
    MinecraftForge.EVENT_BUS.register(new ServerAboutToStartEventHandler());
    MinecraftForge.EVENT_BUS.register(new RecipeUpdateEventHandler());
    IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
    BLOCKS.register(bus);
    BLOCK_ENTITIES.register(bus);
    ITEMS.register(bus);
    RECIPES.register(bus);
    bus.register(new ModelRegistryEventHandler());
}

But it seems nothing changed. I get no errors but still my slabs do not appear in the search tab after searching.

However if I do the following (and I also unsubscribed the event):

public void fillItemCategory(CreativeModeTab creativeModeTab, NonNullList<ItemStack> itemStacks) {
  if (this.allowdedIn(creativeModeTab) && VerticalSlabUtils.slabMap != null) {
    MutableSearchTree<ItemStack> creativeSearchTree = Minecraft.getInstance().getSearchTree(SearchRegistry.CREATIVE_NAMES);
    for(BlockState referringBlockState : VerticalSlabUtils.slabMap.values().stream().map(item -> Block.byItem(item).defaultBlockState()).toList()) {
      ItemStack verticalSlab = VerticalSlabUtils.getItemStackWithState(this, referringBlockState);
      itemStacks.add(verticalSlab);
      creativeSearchTree.add(verticalSlab);
    }
    creativeSearchTree.refresh();
  }
}

It works without any error, but I guess it's not best practice (?)

Edited by X-Lomir
Updated a piece of code.
Link to comment
Share on other sites

1 hour ago, diesieben07 said:

Yeah, this means the search tree is refreshed very often, which is an expensive operation.

public void onServerAboutToStartEvent(ServerAboutToStartEvent event) {
    Map<Item, Item> slabMap = new LinkedHashMap<Item, Item>(), blockMap = new HashMap<Item, Item>();
    for (Item slab : ForgeRegistries.ITEMS.tags().getTag(ItemTags.SLABS)) {
      for (CraftingRecipe recipe : event.getServer().getRecipeManager().getAllRecipesFor(RecipeType.CRAFTING)) {
        NonNullList<Ingredient> ingredients = recipe.getIngredients();
        if (recipe.getResultItem().is(slab) && isRecipeWithBlocks(ingredients) && sameIngredients(ingredients)) {
          ingredients.stream().findFirst().ifPresent(ingredient -> {
            for (ItemStack itemStack : ingredient.getItems()) {
              if (!(itemStack.toString().contains("chiseled") || itemStack.toString().contains("pillar"))) {
                slabMap.put(slab, itemStack.getItem());
              }
              blockMap.put(itemStack.getItem(), slab);
            }
            if (!slabMap.containsKey(slab)) {
              slabMap.put(slab, ingredient.getItems()[0].getItem());
            }
          });
        }
      }
    }
    VerticalSlabUtils.slabMap = ImmutableMap.copyOf(slabMap);
    VerticalSlabUtils.blockMap = ImmutableMap.copyOf(blockMap);

    MutableSearchTree<ItemStack> creativeSearchTree = Minecraft.getInstance().getSearchTree(SearchRegistry.CREATIVE_NAMES);
    for(BlockState referringBlockState : VerticalSlabUtils.slabMap.values().stream().map(item -> Block.byItem(item).defaultBlockState()).toList()) {
      creativeSearchTree.add(VerticalSlabUtils.getVerticalSlabItem(referringBlockState));
    }
    creativeSearchTree.refresh();
  }

I moved the part of code adding vertical slabs to the search tree in the handler for ServerAboutToStartEvent, so it only gets called once. Still not the best in terms of efficiency as I have to loop through all the slabs after I have already done so. I would have liked to add each vertical slab to the search tree when I'm also putting the slab item in the map, however I can't do that because the hover name of a vertical slab depends on the static slabMap itself, which is null until I create it from the copy of the other one.

This should be better than refreshing the search tree every time in fillItemCategory, but I'm still not sure if it's the best possible.

Link to comment
Share on other sites

@SubscribeEvent(priority = EventPriority.LOWEST)
public void onRecipesUpdatedEvent(RecipesUpdatedEvent event) {
    MutableSearchTree<ItemStack> creativeSearchTree = Minecraft.getInstance().getSearchTree(SearchRegistry.CREATIVE_NAMES);
    for(BlockState referringBlockState : VerticalSlabUtils.slabMap.values().stream().map(item -> Block.byItem(item).defaultBlockState()).toList()) {
      creativeSearchTree.add(VerticalSlabUtils.getVerticalSlabItem(referringBlockState));
    }
    creativeSearchTree.refresh();
}

Like this it works too, but only if I add manually each vertical slab item, refreshing alone doesn't do.

P.S. I use the lowest priority to be the last one refreshing the tree, don't know if it's an actual good idea tho.

Link to comment
Share on other sites

19 minutes ago, diesieben07 said:

You don't even need to call refresh, adding is enough.

Actually I just tried removing that line and the slabs don't appear in the search tab after searching something anymore.

Link to comment
Share on other sites

I'm trying to add stone cutter recipes now and I have a couple of issues that I hope can be solved somehow.

  1. In the stone cutter GUI my recipes show up and they give the correct result, but the item displayed is always the vertical slab mimicking oak planks. This I know it's because getResultItem() is used to render the "clickable" item to select a recipe and because I set my resultItem to a default of a vertical slab mimicking oak planks, however I don't know how to fix.
  2. For blocks that can be stone cut into 2 different kind of slabs I don't know how to make 2 vertical slab recipes appear too. So far only 1 appears. I know that my code does nothing to make more than 1 appear, but the problem is that I don't know how to do that.

Most updated code is here.

Link to comment
Share on other sites

3 hours ago, diesieben07 said:

The easiest way to know this is that if it is created from your serializer's fromNetwork function, then it is on the client.

I did this:

@Override
public BlockToVerticalSlabStonecutterRecipe fromNetwork(ResourceLocation resourceLocation, FriendlyByteBuf friendlyByteBuf) {
	return new BlockToVerticalSlabStonecutterRecipe(true);
}

Where that true is the value for a private final boolean field of my BlockToVerticalSlabStonecutterRecipe, but it appears that the field is always false and my Serializer#fromNetwork is never getting called (I put some breakpoints and they never got activated). I'm probably missing out once again something obvious.

3 hours ago, diesieben07 said:

Just make two recipe JSONs?

Mmh... I will try to explain myself better: there are cases where a block can be stonecut into 2 different kind of slabs, so I need to have 2 different vertical slab recipes for that block too. However this, like the rest of this mod, must be dynamic, I can't go with a solution that will work when there are 2 slabs but not 3 or more, I'd need a way to dynamically add the stonecutting vertical slab recipes. For example let's take stone: it can be stonecut into stone slab and brick stone slab, so I need that also a vertical slab mimicking stone and a vertical slab mimicking stone bricks can be stonecut from stone. Let's suppose another mod adds a new stone variant, which we'll call stone tiles. Now the stonecutting recipes for stone have an extra slab, the stone tiles slab. Without any extra step also a vertical slab for stone tiles should be present in the stonecutting menu.

Link to comment
Share on other sites

2 hours ago, diesieben07 said:

You'll have to use the kludge that is EffectiveSide.get.

This works, thanks!

2 hours ago, diesieben07 said:

I don't think this is possible. There must always be a JSON file for every recipe that is being loaded. While you could use AddPackFindersEvent to create a dynamic datapack at runtime, it wouldn't allow you to inspect the already existing recipes - because recipes are loaded from datapacks, so while datapacks are being discovered there are no recipes yet.

I understand. Then I will just go making available only the main block recipe, for example stone into stone vertical slab, but no stone into stone brick vertical slab. Anyway it's just for stonecutting, so it's important to at least have the vertical slab of the block you're using. Then it's not that important to have also all the variants mostly because normal slab variants will be available and so you can just craft them into the desired vertical slab with a single extra step. I'll consider this a small price to pay for scalability.

I have now a few things left to do for this mod:

  • Add in-world recipes for waxing. I have already added crafting waxing recipes and they correctly depend on the waxing crafting recipes of normal slabs. I would like to do the same but with the in-world waxing recipe, that is right-clicking with an honeycomb to wax a vertical slab that mimics a block that has a slab that can be in-world waxed. I would go with listening to the right-click block event and do my logic there, but I saw on Forge docs that there is a way to reuse my recipe logic to create a in-world recipe. So if there's a way to do that I'd kindly ask some suggestions on how to do that, otherwise I will just subscribe to the event and that's it.
  • Integrate my recipes with Minecraft Vanilla recipes book. I don't know what to do for this to be honest.
  • Fix a problem I found out when placing a vertical slab that's supposed to emit light: when first placed the texture of the vertical slab looks like it's light up however the vertical slab is not emitting light at all, indeed the light level is 0 all around. When placing another block next to it the vertical slab starts to emit light correctly, same goes on with reloading the world. I saw that VerticalSlabBlock#getLightEmission is called several times when placing/updating the vertical slab, many times with 0 and many times with the correct light level. I don't know how to fix this. This can be tested changing the return value of VerticalSlabBlock#getLightEmission to 15 when referringBlockState != null.
  • Make so that jumpFactor and speedFactor come from the mimicked block. But this we said that can't be changed unless Forge adds hooks for them, however I was thinking that maybe there's a way to override Entity#getBlockJumpFactor and Entity#getBlockSpeedFactor so that if a vertical slab is involved they pass to my VerticalSlabBlock the level and position that allow to mimic the correct block?

P.S. would you like to be listed as co-author or in credits (your choice)? Because none of this would have been possible without you so I would like to give you the credit you deserve, of course only if you want ot.

Link to comment
Share on other sites

4 hours ago, diesieben07 said:

Look at HoneycombItem.getWaxed, it should let you wax arbitrary block states, if possible. To handle this on your block, use PlayerInteractEvent.RightClickBlock.

Perfect, done!

4 hours ago, diesieben07 said:

The light value really must depend on the BlockState, not the BlockEntity, otherwise you will have strange effects. So you probably need to make a property on your block that sets the light level.

I tried to do this and I failed...

I changed VerticalSlabBlock#getLightEmission to:

@Override
  public int getLightEmission(BlockState state, BlockGetter getter, BlockPos pos) {
    BlockState referringBlockState = VerticalSlabUtils.getReferringBlockState(getter, pos);
    if (referringBlockState != null) {
      int lightLevel = 15;
      // int lightLevel = referringBlockState.getLightEmission(getter, pos);
      state.setValue(LEVEL, Integer.valueOf(lightLevel));
      return lightLevel;
    }
    return super.getLightEmission(state, getter, pos);
  }

and I added the LEVEL property initialization like so:

public VerticalSlabBlock() {
    super(
      BlockBehaviour.Properties.of(Material.AIR)
      .isValidSpawn((state, getter, pos, entityType) -> false)
      .isRedstoneConductor((state, getter, pos) -> false)
      .isSuffocating((state, getter, pos) -> false)
      .lightLevel(LightBlock.LIGHT_EMISSION)
    );
    this.registerDefaultState(this.defaultBlockState().setValue(FACING, Direction.NORTH).setValue(SHAPE, StairsShape.STRAIGHT).setValue(WATERLOGGED, Boolean.valueOf(false)).setValue(LEVEL, Integer.valueOf(0)));
  }

and LEVEL is just BlockStateProperties#LEVEL.

However nothing changed, I have the same problem. Also I would like that the item too has the correct light emission, so that it works with shaders that add dynamic lighting.

5 hours ago, diesieben07 said:

This could be done fairly easily with a forge hook that allows you to access the position. Feel free to make a pull request :)

And I would really love to do that, if only I knew how 🤣 I will try to look up how other hooks are implemented to see if I can do it.

Do you have any insight about the recipe book?

I'm sorry for asking so many questions every time, but it's really my first mod this complex and I'm discovering many things as I go, and know I'm really grateful because I couldn't have done without your help. I added you in the mod credits and I can't wait to finally publish this mod!

Link to comment
Share on other sites

2 hours ago, diesieben07 said:

That's not what I meant. Do not override getLightEmission and especially do not modify the level in there. You are calling getReferringBlockState there, which will access your BlockEntity. Instead you need to set the correct level when the block is placed (from your BlockItem). Then when creating your BlockBehaviour.Properties use the BlockBehaviour.Properties#lightLevel to teach the game how to go from BlockState to light level.

Okay, I updated my code as follows and now it works! I also removed my override of getLightEmission.

@Override
public BlockState getStateForPlacement(BlockPlaceContext placeContext) {
  BlockPos pos = placeContext.getClickedPos();
  Level level = placeContext.getLevel();
  BlockState blockstate = this.defaultBlockState().setValue(FACING, placeContext.getHorizontalDirection()).setValue(WATERLOGGED, Boolean.valueOf(level.getFluidState(pos).getType() == Fluids.WATER));
  BlockState referringBlockState = VerticalSlabUtils.getReferringBlockState(placeContext.getItemInHand());
  if (referringBlockState != null) {
    blockstate = blockstate.setValue(LEVEL, Integer.valueOf(referringBlockState.getLightEmission(level, pos)));
  }
  return blockstate.setValue(SHAPE, getStairsShape(blockstate, level, pos));
}
Link to comment
Share on other sites

4 minutes ago, diesieben07 said:

Why the unnecessary boxing?

Honestly I have no idea, I saw around in Minecraft code that whenever BlockState#setValue was used to set some primitive property the value was always wrapped like that, so I assumed there was a reason for that.

9 minutes ago, diesieben07 said:

Also, this can crash the game, as you are calling methods on the referringBlockState with a position it is not actually placed at.

Then what should I do? Should I call the deprecated BlockStateBase#getLightEmission?

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

    • Crash log and latest.txt https://paste.ee/p/7t93I
    • I don't know what do about this I tried support. This happens when I go into a server and I don't own it. I have the exact same mods, same version, same everything. I have enough ram on Minecraft.   Logs: content://media/external/downloads/1000004919 
    • (here is the crash report) The game crashed whilst mouseclicked event handler Error: java.lang.NoSuchFieldError: EMPTY_ID (wen i try to create a world) https://paste.ee/p/hfoDP
    • 3 mods from a modpack i found on curseforge (for minecraft) are having an error when loading. I did not make this modpack my self but i have used it before and it was working just fine. The version of minecraft is 1.20.1 and the forge version is 47. 2.0 any help would be useful!   ---- Minecraft Crash Report ---- // Hi. I'm Minecraft, and I'm a crashaholic. Time: 2024-04-26 14:10:06 Description: Mod loading error has occurred java.lang.Exception: Mod Loading has failed     at net.minecraftforge.logging.CrashReportExtender.dumpModLoadingCrashReport(CrashReportExtender.java:60) ~[forge-1.20.1-47.2.0-universal.jar%23511!/:?] {re:classloading}     at net.minecraftforge.client.loading.ClientModLoader.completeModLoading(ClientModLoader.java:143) ~[forge-1.20.1-47.2.0-universal.jar%23511!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.lambda$new$4(Minecraft.java:571) ~[client-1.20.1-20230612.114412-srg.jar%23506!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.Util.m_137521_(Util.java:421) ~[client-1.20.1-20230612.114412-srg.jar%23506!/:?] {re:classloading,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B}     at net.minecraft.client.Minecraft.lambda$new$5(Minecraft.java:564) ~[client-1.20.1-20230612.114412-srg.jar%23506!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraftforge.client.loading.ForgeLoadingOverlay.m_88315_(ForgeLoadingOverlay.java:146) ~[forge-1.20.1-47.2.0-universal.jar%23511!/:?] {re:classloading}     at net.minecraft.client.renderer.GameRenderer.m_109093_(GameRenderer.java:954) ~[client-1.20.1-20230612.114412-srg.jar%23506!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91383_(Minecraft.java:1146) ~[client-1.20.1-20230612.114412-srg.jar%23506!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91374_(Minecraft.java:718) ~[client-1.20.1-20230612.114412-srg.jar%23506!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:218) ~[forge-47.2.0.jar:?] {re:mixin,pl:runtimedistcleaner:A,re:classloading,pl:mixin:APP:flywheel.mixins.json:ClientMainMixin,pl:mixin:A,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:111) ~[fmlloader-1.20.1-47.2.0.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:99) ~[fmlloader-1.20.1-47.2.0.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonClientLaunchHandler.lambda$makeService$0(CommonClientLaunchHandler.java:25) ~[fmlloader-1.20.1-47.2.0.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) ~[bootstraplauncher-1.1.2.jar:?] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace:     at com.electronwill.nightconfig.core.io.ParsingException.notEnoughData(ParsingException.java:22) ~[core-3.6.4.jar%2393!/:?] {} -- MOD terrablender -- Details:     Caused by 0: java.lang.ExceptionInInitializerError         at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] {}         at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] {}         at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] {}         at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] {}         at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] {}         at net.minecraftforge.fml.javafmlmod.FMLModContainer.constructMod(FMLModContainer.java:68) ~[javafmllanguage-1.20.1-47.2.0.jar%23508!/:?] {}         at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$10(ModContainer.java:123) ~[fmlcore-1.20.1-47.2.0.jar%23507!/:?] {}         at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] {}         at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?] {}         at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] {}         at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?] {}         at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] {}         at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] {}         at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] {}     Mod File: /C:/Users/HMSni/curseforge/minecraft/Instances/Minecolonies Medieval Magick/mods/TerraBlender-forge-1.20.1-3.0.1.4.jar     Failure message: TerraBlender (terrablender) has failed to load correctly         java.lang.ExceptionInInitializerError: null     Mod Version: 3.0.1.4     Mod Issue URL: https://github.com/Glitchfiend/TerraBlender/issues     Exception message: com.electronwill.nightconfig.core.io.ParsingException: Not enough data available Stacktrace:     at com.electronwill.nightconfig.core.io.ParsingException.notEnoughData(ParsingException.java:22) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.ReaderInput.directReadChar(ReaderInput.java:36) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.AbstractInput.readChar(AbstractInput.java:49) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.AbstractInput.readCharsUntil(AbstractInput.java:123) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.toml.TableParser.parseKey(TableParser.java:166) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.toml.TableParser.parseDottedKey(TableParser.java:145) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.toml.TableParser.parseNormal(TableParser.java:55) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:44) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:37) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:113) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:219) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:202) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.file.WriteSyncFileConfig.load(WriteSyncFileConfig.java:73) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.file.AutosaveCommentedFileConfig.load(AutosaveCommentedFileConfig.java:85) ~[core-3.6.4.jar%2393!/:?] {}     at terrablender.config.ConfigFile.<init>(ConfigFile.java:34) ~[TerraBlender-forge-1.20.1-3.0.1.4.jar%23485!/:3.0.1.4] {re:mixin,re:classloading}     at terrablender.config.TerraBlenderConfig.<init>(TerraBlenderConfig.java:31) ~[TerraBlender-forge-1.20.1-3.0.1.4.jar%23485!/:3.0.1.4] {re:mixin,re:classloading,pl:mixin:A}     at terrablender.core.TerraBlenderForge.<clinit>(TerraBlenderForge.java:30) ~[TerraBlender-forge-1.20.1-3.0.1.4.jar%23485!/:3.0.1.4] {re:classloading}     at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] {}     at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] {}     at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] {}     at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] {}     at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] {}     at net.minecraftforge.fml.javafmlmod.FMLModContainer.constructMod(FMLModContainer.java:68) ~[javafmllanguage-1.20.1-47.2.0.jar%23508!/:?] {}     at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$10(ModContainer.java:123) ~[fmlcore-1.20.1-47.2.0.jar%23507!/:?] {}     at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] {}     at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?] {}     at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] {}     at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?] {}     at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] {}     at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] {}     at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] {} -- MOD tlc -- Details:     Caused by 0: java.lang.reflect.InvocationTargetException         at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] {}         at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] {}         at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] {}         at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] {}         at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] {}         at net.minecraftforge.fml.javafmlmod.FMLModContainer.constructMod(FMLModContainer.java:68) ~[javafmllanguage-1.20.1-47.2.0.jar%23508!/:?] {}         at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$10(ModContainer.java:123) ~[fmlcore-1.20.1-47.2.0.jar%23507!/:?] {}         at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] {}         at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?] {}         at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] {}         at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?] {}         at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] {}         at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] {}         at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] {}     Mod File: /C:/Users/HMSni/curseforge/minecraft/Instances/Minecolonies Medieval Magick/mods/tlc_forge-1.0.3-R-1.20.X.jar     Failure message: The Lost Castle (tlc) has failed to load correctly         java.lang.reflect.InvocationTargetException: null     Mod Version: 1.0.2     Mod Issue URL: https://github.com/Team-Remastered/End-Remastered-Forge/issues     Exception message: com.electronwill.nightconfig.core.io.ParsingException: Not enough data available Stacktrace:     at com.electronwill.nightconfig.core.io.ParsingException.notEnoughData(ParsingException.java:22) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.ReaderInput.directReadChar(ReaderInput.java:36) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.AbstractInput.readChar(AbstractInput.java:49) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.AbstractInput.readCharsUntil(AbstractInput.java:123) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.toml.TableParser.parseKey(TableParser.java:166) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.toml.TableParser.parseDottedKey(TableParser.java:145) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.toml.TableParser.parseNormal(TableParser.java:55) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:44) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:37) ~[toml-3.6.4.jar%2394!/:?] {}     at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:113) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:219) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:202) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.file.WriteSyncFileConfig.load(WriteSyncFileConfig.java:73) ~[core-3.6.4.jar%2393!/:?] {}     at com.electronwill.nightconfig.core.file.AutosaveCommentedFileConfig.load(AutosaveCommentedFileConfig.java:85) ~[core-3.6.4.jar%2393!/:?] {}     at com.teamremastered.tlc.config.TLCConfig.load(TLCConfig.java:47) ~[tlc_forge-1.0.3-R-1.20.X.jar%23490!/:1.0.3-R-1.20.1] {re:mixin,re:classloading}     at com.teamremastered.tlc.TheLostCastle.<init>(TheLostCastle.java:33) ~[tlc_forge-1.0.3-R-1.20.X.jar%23490!/:1.0.3-R-1.20.1] {re:classloading}     at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] {}     at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] {}     at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] {}     at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] {}     at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] {}     at net.minecraftforge.fml.javafmlmod.FMLModContainer.constructMod(FMLModContainer.java:68) ~[javafmllanguage-1.20.1-47.2.0.jar%23508!/:?] {}     at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$10(ModContainer.java:123) ~[fmlcore-1.20.1-47.2.0.jar%23507!/:?] {}     at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] {}     at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?] {}     at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] {}     at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?] {}     at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] {}     at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] {}     at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] {} -- MOD transmog -- Details:     Caused by 0: java.lang.reflect.InvocationTargetException         at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] {}         at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] {}         at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] {}         at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] {}         at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] {}         at net.minecraftforge.fml.javafmlmod.FMLModContainer.constructMod(FMLModContainer.java:68) ~[javafmllanguage-1.20.1-47.2.0.jar%23508!/:?] {}         at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$10(ModContainer.java:123) ~[fmlcore-1.20.1-47.2.0.jar%23507!/:?] {}         at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] {}         at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?] {}         at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] {}         at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?] {}         at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] {}         at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] {}         at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] {}     Caused by 1: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $         at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:395) ~[gson-2.10.jar%23107!/:?] {}         at com.google.gson.Gson.fromJson(Gson.java:1214) ~[gson-2.10.jar%23107!/:?] {}         at com.google.gson.Gson.fromJson(Gson.java:1124) ~[gson-2.10.jar%23107!/:?] {}         at com.google.gson.Gson.fromJson(Gson.java:1034) ~[gson-2.10.jar%23107!/:?] {}         at com.google.gson.Gson.fromJson(Gson.java:969) ~[gson-2.10.jar%23107!/:?] {}         at com.hidoni.transmog.config.Config.loadConfigFromFile(Config.java:28) ~[transmog-forge-1.2.4+1.20.jar%23496!/:1.2.4+1.20] {re:mixin,re:classloading}         at com.hidoni.transmog.Transmog.loadConfig(Transmog.java:18) ~[transmog-forge-1.2.4+1.20.jar%23496!/:1.2.4+1.20] {re:classloading}         at com.hidoni.transmog.Transmog.init(Transmog.java:11) ~[transmog-forge-1.2.4+1.20.jar%23496!/:1.2.4+1.20] {re:classloading}         at com.hidoni.transmog.TransmogForge.<init>(TransmogForge.java:10) ~[transmog-forge-1.2.4+1.20.jar%23496!/:1.2.4+1.20] {re:classloading}         at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] {}         at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] {}         at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] {}         at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] {}         at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] {}         at net.minecraftforge.fml.javafmlmod.FMLModContainer.constructMod(FMLModContainer.java:68) ~[javafmllanguage-1.20.1-47.2.0.jar%23508!/:?] {}         at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$10(ModContainer.java:123) ~[fmlcore-1.20.1-47.2.0.jar%23507!/:?] {}         at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] {}         at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?] {}         at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] {}         at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?] {}         at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] {}         at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] {}         at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] {}     Mod File: /C:/Users/HMSni/curseforge/minecraft/Instances/Minecolonies Medieval Magick/mods/transmog-forge-1.2.4+1.20.jar     Failure message: Transmog (transmog) has failed to load correctly         java.lang.reflect.InvocationTargetException: null     Mod Version: 1.2.4+1.20     Mod Issue URL: NOT PROVIDED     Exception message: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $ Stacktrace:     at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:393) ~[gson-2.10.jar%23107!/:?] {}     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:384) ~[gson-2.10.jar%23107!/:?] {}     at com.google.gson.Gson.fromJson(Gson.java:1214) ~[gson-2.10.jar%23107!/:?] {}     at com.google.gson.Gson.fromJson(Gson.java:1124) ~[gson-2.10.jar%23107!/:?] {}     at com.google.gson.Gson.fromJson(Gson.java:1034) ~[gson-2.10.jar%23107!/:?] {}     at com.google.gson.Gson.fromJson(Gson.java:969) ~[gson-2.10.jar%23107!/:?] {}     at com.hidoni.transmog.config.Config.loadConfigFromFile(Config.java:28) ~[transmog-forge-1.2.4+1.20.jar%23496!/:1.2.4+1.20] {re:mixin,re:classloading}     at com.hidoni.transmog.Transmog.loadConfig(Transmog.java:18) ~[transmog-forge-1.2.4+1.20.jar%23496!/:1.2.4+1.20] {re:classloading}     at com.hidoni.transmog.Transmog.init(Transmog.java:11) ~[transmog-forge-1.2.4+1.20.jar%23496!/:1.2.4+1.20] {re:classloading}     at com.hidoni.transmog.TransmogForge.<init>(TransmogForge.java:10) ~[transmog-forge-1.2.4+1.20.jar%23496!/:1.2.4+1.20] {re:classloading}     at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?] {}     at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[?:?] {}     at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?] {}     at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[?:?] {}     at java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[?:?] {}     at net.minecraftforge.fml.javafmlmod.FMLModContainer.constructMod(FMLModContainer.java:68) ~[javafmllanguage-1.20.1-47.2.0.jar%23508!/:?] {}     at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$10(ModContainer.java:123) ~[fmlcore-1.20.1-47.2.0.jar%23507!/:?] {}     at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[?:?] {}     at java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796) ~[?:?] {}     at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] {}     at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?] {}     at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] {}     at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] {}     at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] {} -- System Details -- Details:     Minecraft Version: 1.20.1     Minecraft Version ID: 1.20.1     Operating System: Windows 11 (amd64) version 10.0     Java Version: 17.0.8, Microsoft     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Microsoft     Memory: 770444472 bytes (734 MiB) / 1577058304 bytes (1504 MiB) up to 21474836480 bytes (20480 MiB)     CPUs: 16     Processor Vendor: GenuineIntel     Processor Name: 13th Gen Intel(R) Core(TM) i5-13400F     Identifier: Intel64 Family 6 Model 191 Stepping 2     Microarchitecture: unknown     Frequency (GHz): 2.50     Number of physical packages: 1     Number of physical CPUs: 10     Number of logical CPUs: 16     Graphics card #0 name: NVIDIA GeForce RTX 4060     Graphics card #0 vendor: NVIDIA (0x10de)     Graphics card #0 VRAM (MB): 4095.00     Graphics card #0 deviceId: 0x2882     Graphics card #0 versionInfo: DriverVersion=31.0.15.4601     Memory slot #0 capacity (MB): 16384.00     Memory slot #0 clockSpeed (GHz): 4.80     Memory slot #0 type: Unknown     Memory slot #1 capacity (MB): 16384.00     Memory slot #1 clockSpeed (GHz): 4.80     Memory slot #1 type: Unknown     Virtual memory max (MB): 65369.07     Virtual memory used (MB): 14889.34     Swap memory total (MB): 32768.00     Swap memory used (MB): 0.00     JVM Flags: 9 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx20G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M     Loaded Shaderpack: (off)     ModLauncher: 10.0.9+10.0.9+main.dcd20f30     ModLauncher launch target: forgeclient     ModLauncher naming: srg     ModLauncher services:          mixin-0.8.5.jar mixin PLUGINSERVICE          eventbus-6.0.5.jar eventbus PLUGINSERVICE          fmlloader-1.20.1-47.2.0.jar slf4jfixer PLUGINSERVICE          fmlloader-1.20.1-47.2.0.jar object_holder_definalize PLUGINSERVICE          fmlloader-1.20.1-47.2.0.jar runtime_enum_extender PLUGINSERVICE          fmlloader-1.20.1-47.2.0.jar capability_token_subclass PLUGINSERVICE          accesstransformers-8.0.4.jar accesstransformer PLUGINSERVICE          fmlloader-1.20.1-47.2.0.jar runtimedistcleaner PLUGINSERVICE          modlauncher-10.0.9.jar mixin TRANSFORMATIONSERVICE          modlauncher-10.0.9.jar fml TRANSFORMATIONSERVICE      FML Language Providers:          [email protected]         lowcodefml@null         javafml@null     Mod List:          player-animation-lib-forge-1.0.2-rc1+1.20.jar     |Player Animator               |playeranimator                |1.0.2-rc1+1.20      |COMMON_SET|Manifest: NOSIGNATURE         hourglass-1.20-1.2.1.1.jar                        |Hourglass                     |hourglass                     |1.2.1.1             |COMMON_SET|Manifest: NOSIGNATURE         Neat-1.20-35-FORGE.jar                            |Neat                          |neat                          |1.20-35-FORGE       |COMMON_SET|Manifest: NOSIGNATURE         MaxHealthFix-Forge-1.20.1-12.0.2.jar              |MaxHealthFix                  |maxhealthfix                  |12.0.2              |COMMON_SET|Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         lootbeams-1.20.1-1.2.5.jar                        |LootBeams                     |lootbeams                     |1.20.1              |COMMON_SET|Manifest: NOSIGNATURE         clickadv-1.20.1-3.7.jar                           |clickadv mod                  |clickadv                      |1.20.1-3.7          |COMMON_SET|Manifest: NOSIGNATURE         balm-forge-1.20.1-7.2.2.jar                       |Balm                          |balm                          |7.2.2               |COMMON_SET|Manifest: NOSIGNATURE         dynview-1.20.1-3.9.jar                            |Dynamic view distance         |dynview                       |2.3                 |COMMON_SET|Manifest: NOSIGNATURE         immersive_armors-1.6.1+1.20.1-forge.jar           |Immersive Armors              |immersive_armors              |1.6.1+1.20.1        |COMMON_SET|Manifest: NOSIGNATURE         JustEnoughResources-1.20.1-1.4.0.247.jar          |Just Enough Resources         |jeresources                   |1.4.0.247           |COMMON_SET|Manifest: NOSIGNATURE         cloth-config-11.1.118-forge.jar                   |Cloth Config v10 API          |cloth_config                  |11.1.118            |COMMON_SET|Manifest: NOSIGNATURE         embeddium-0.3.12+mc1.20.1.jar                     |Embeddium                     |embeddium                     |0.3.12+mc1.20.1     |COMMON_SET|Manifest: NOSIGNATURE         stylecolonies-1.3.2.jar                           |stylecolonies mod             |stylecolonies                 |1.3.2               |COMMON_SET|Manifest: NOSIGNATURE         solapplepie-1.20.1-2.3.0.jar                      |Spice of Life: Apple Pie Editi|solapplepie                   |1.20.1-2.3.0        |COMMON_SET|Manifest: NOSIGNATURE         corpse-forge-1.20.1-1.0.12.jar                    |Corpse                        |corpse                        |1.20.1-1.0.12       |COMMON_SET|Manifest: NOSIGNATURE         repurposed_structures-7.1.13+1.20.1-forge.jar     |Repurposed Structures         |repurposed_structures         |7.1.13+1.20.1-forge |COMMON_SET|Manifest: NOSIGNATURE         BotanyTrees-Forge-1.20.1-9.0.11.jar               |BotanyTrees                   |botanytrees                   |9.0.11              |COMMON_SET|Manifest: NOSIGNATURE         supermartijn642corelib-1.1.17-forge-mc1.20.1.jar  |SuperMartijn642's Core Lib    |supermartijn642corelib        |1.1.17              |COMMON_SET|Manifest: NOSIGNATURE         resourcefulconfig-forge-1.20.1-2.1.2.jar          |Resourcefulconfig             |resourcefulconfig             |2.1.2               |COMMON_SET|Manifest: NOSIGNATURE         hostilevillages-1.20.1-5.3.jar                    |Example Mod                   |hostilevillages               |1.20.1-5.3          |COMMON_SET|Manifest: NOSIGNATURE         spark-1.10.53-forge.jar                           |spark                         |spark                         |1.10.53             |COMMON_SET|Manifest: NOSIGNATURE         portablemobs-1.2.0-forge-mc1.20.jar               |Portable Mobs                 |portablemobs                  |1.2.0               |COMMON_SET|Manifest: NOSIGNATURE         Philips-Ruins1.20.1-3.5.jar                       |Philips Ruins                 |philipsruins                  |3.4                 |COMMON_SET|Manifest: NOSIGNATURE         curios-forge-5.8.0-beta.2+1.20.1.jar              |Curios API                    |curios                        |5.8.0-beta.2+1.20.1 |COMMON_SET|Manifest: NOSIGNATURE         corail_woodcutter-1.20.1-3.0.4.jar                |Corail Woodcutter             |corail_woodcutter             |3.0.4               |COMMON_SET|Manifest: NOSIGNATURE         oculus-mc1.20.1-1.6.15a.jar                       |Oculus                        |oculus                        |1.6.15a             |COMMON_SET|Manifest: NOSIGNATURE         Searchables-forge-1.20.1-1.0.2.jar                |Searchables                   |searchables                   |1.0.2               |COMMON_SET|Manifest: NOSIGNATURE         bettervillage-forge-1.20.1-3.2.0.jar              |Better village                |bettervillage                 |3.1.0               |COMMON_SET|Manifest: NOSIGNATURE         NaturesAura-39.4.jar                              |NaturesAura                   |naturesaura                   |39.4                |COMMON_SET|Manifest: NOSIGNATURE         flib-1.20.1-0.0.11.jar                            |flib                          |flib                          |0.0.11              |COMMON_SET|Manifest: 1f:47:ac:b1:61:82:96:b8:47:19:16:d2:61:81:11:60:3a:06:4b:61:31:56:7d:44:31:1e:0c:6f:22:5b:4c:ed         JadeAddons-1.20.1-forge-5.2.2.jar                 |Jade Addons                   |jadeaddons                    |5.2.2               |COMMON_SET|Manifest: NOSIGNATURE         l2library-2.4.24.jar                              |L2 Library                    |l2library                     |2.4.24              |COMMON_SET|Manifest: NOSIGNATURE         toms_storage-1.20-1.6.6.jar                       |Tom's Simple Storage Mod      |toms_storage                  |1.6.6               |COMMON_SET|Manifest: NOSIGNATURE         crafting-on-a-stick-1.20.1-1.1.4.jar              |Crafting On A Stick           |crafting_on_a_stick           |1.1.4               |COMMON_SET|Manifest: NOSIGNATURE         SmartBrainLib-forge-1.20.1-1.13.jar               |SmartBrainLib                 |smartbrainlib                 |1.13                |COMMON_SET|Manifest: NOSIGNATURE         elytraslot-forge-6.3.0+1.20.1.jar                 |Elytra Slot                   |elytraslot                    |6.3.0+1.20.1        |COMMON_SET|Manifest: NOSIGNATURE         l2tabs-0.2.6.jar                                  |L2 Tabs                       |l2tabs                        |0.2.6               |COMMON_SET|Manifest: NOSIGNATURE         betterharvesting-1.20-forge-0.0.2.jar             |Better Harvesting             |betterharvesting              |0.0.2               |COMMON_SET|Manifest: NOSIGNATURE         jei-1.20.1-forge-15.3.0.4.jar                     |Just Enough Items             |jei                           |15.3.0.4            |COMMON_SET|Manifest: NOSIGNATURE         Nameless Trinkets-1.20.1-1.7.8.jar                |Nameless Trinkets             |nameless_trinkets             |1.20.1-1.7.8        |COMMON_SET|Manifest: NOSIGNATURE         AttributeFix-Forge-1.20.1-21.0.4.jar              |AttributeFix                  |attributefix                  |21.0.4              |COMMON_SET|Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         libraryferret-forge-1.20.1-4.0.0.jar              |Library ferret                |libraryferret                 |4.0.0               |COMMON_SET|Manifest: NOSIGNATURE         goblintraders-forge-1.20.1-1.9.3.jar              |Goblin Traders                |goblintraders                 |1.9.3               |COMMON_SET|Manifest: 0d:78:5f:44:c0:47:0c:8c:e2:63:a3:04:43:d4:12:7d:b0:7c:35:37:dc:40:b1:c1:98:ec:51:eb:3b:3c:45:99         epicsamurai-0.0.42-1.20.1-neo.jar                 |Epic Samurai                  |epicsamurai                   |0.0.42-1.20.1-neo   |COMMON_SET|Manifest: NOSIGNATURE         caelus-forge-3.1.0+1.20.jar                       |Caelus API                    |caelus                        |3.1.0+1.20          |COMMON_SET|Manifest: NOSIGNATURE         awesomedungeon-forge-1.20.1-3.2.0.jar             |Awesome dungeon               |awesomedungeon                |3.2.0               |COMMON_SET|Manifest: NOSIGNATURE         forgivingworld-1.20.1-4.3.jar                     |Forgiving world mod           |forgivingworld                |1.20.1-4.3          |COMMON_SET|Manifest: NOSIGNATURE         NaturesCompass-1.20.1-1.11.2-forge.jar            |Nature's Compass              |naturescompass                |1.20.1-1.11.2-forge |COMMON_SET|Manifest: NOSIGNATURE         EpheroLib-1.20.1-FORGE-1.2.0.jar                  |BOZOID                        |epherolib                     |0.1.2               |COMMON_SET|Manifest: NOSIGNATURE         badpackets-forge-0.4.3.jar                        |Bad Packets                   |badpackets                    |0.4.3               |COMMON_SET|Manifest: NOSIGNATURE         BotanyPots-Forge-1.20.1-13.0.26.jar               |BotanyPots                    |botanypots                    |13.0.26             |COMMON_SET|Manifest: NOSIGNATURE         l2screentracker-0.1.4.jar                         |L2 Screen Tracker             |l2screentracker               |0.1.4               |COMMON_SET|Manifest: NOSIGNATURE         forge-1.20.1-47.2.0-universal.jar                 |Forge                         |forge                         |47.2.0              |COMMON_SET|Manifest: 84:ce:76:e8:45:35:e4:0e:63:86:df:47:59:80:0f:67:6c:c1:5f:6e:5f:4d:b3:54:47:1a:9f:7f:ed:5e:f2:90         awesomedungeonocean-forge-1.20.1-3.3.0.jar        |Awesome dungeon edition ocean |awesomedungeonocean           |3.3.0               |COMMON_SET|Manifest: NOSIGNATURE         tectonic-forge-1.19.3-2.3.4.jar                   |Tectonic                      |tectonic                      |2.3.4               |COMMON_SET|Manifest: NOSIGNATURE         DistractingTrims-Forge-1.20.1-2.0.3.jar           |DistractingTrims              |distractingtrims              |2.0.3               |COMMON_SET|Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         client-1.20.1-20230612.114412-srg.jar             |Minecraft                     |minecraft                     |1.20.1              |COMMON_SET|Manifest: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f         smoothchunk-1.20.1-3.6.jar                        |Smoothchunk mod               |smoothchunk                   |1.20.1-3.6          |COMMON_SET|Manifest: NOSIGNATURE         logprot-1.20.1-3.3.jar                            |Logprot                       |logprot                       |1.4                 |COMMON_SET|Manifest: NOSIGNATURE         voicechat-forge-1.20.1-2.5.12.jar                 |Simple Voice Chat             |voicechat                     |1.20.1-2.5.12       |COMMON_SET|Manifest: NOSIGNATURE         sound-physics-remastered-forge-1.20.1-1.3.1.jar   |Sound Physics Remastered      |sound_physics_remastered      |1.20.1-1.3.1        |COMMON_SET|Manifest: NOSIGNATURE         TerraBlender-forge-1.20.1-3.0.1.4.jar             |TerraBlender                  |terrablender                  |3.0.1.4             |ERROR     |Manifest: NOSIGNATURE         BiomesOPlenty-1.20.1-18.0.0.598.jar               |Biomes O' Plenty              |biomesoplenty                 |18.0.0.598          |COMMON_SET|Manifest: NOSIGNATURE         MouseTweaks-forge-mc1.20-2.25.jar                 |Mouse Tweaks                  |mousetweaks                   |2.25                |COMMON_SET|Manifest: NOSIGNATURE         Companion-1.20.1-forge-5.0.1.jar                  |Companion                     |companion                     |5.0.1               |COMMON_SET|Manifest: NOSIGNATURE         awesomedungeonnether-forge-1.20.1-3.1.1.jar       |Awesome dungeon nether        |awesomedungeonnether          |3.1.1               |COMMON_SET|Manifest: NOSIGNATURE         commonality-1.20.1-7.0.0.jar                      |Commonality                   |commonality                   |7.0.0               |COMMON_SET|Manifest: NOSIGNATURE         pamhc2crops-1.20-1.0.3.jar                        |Pam's HarvestCraft 2 - Crops  |pamhc2crops                   |1.0.3               |COMMON_SET|Manifest: NOSIGNATURE         cleanswing-1.20-1.5.jar                           |Clean Swing Through Grass     |cleanswing                    |1.20-1.5            |COMMON_SET|Manifest: NOSIGNATURE         spectrelib-forge-0.13.15+1.20.1.jar               |SpectreLib                    |spectrelib                    |0.13.15+1.20.1      |COMMON_SET|Manifest: NOSIGNATURE         domum_ornamentum-1.20.1-1.0.184-BETA-universal.jar|Domum Ornamentum              |domum_ornamentum              |1.20.1-1.0.184-BETA |COMMON_SET|Manifest: NOSIGNATURE         betterfpsdist-1.20.1-4.3.jar                      |betterfpsdist mod             |betterfpsdist                 |1.20.1-4.3          |COMMON_SET|Manifest: NOSIGNATURE         flywheel-forge-1.20.1-0.6.10-7.jar                |Flywheel                      |flywheel                      |0.6.10-7            |COMMON_SET|Manifest: NOSIGNATURE         pamhc2foodcore-1.20.4-1.0.5.jar                   |Pam's HarvestCraft 2 - Food Co|pamhc2foodcore                |1.0.5               |COMMON_SET|Manifest: NOSIGNATURE         Croptopia-1.20.1-FORGE-3.0.4.jar                  |Croptopia                     |croptopia                     |3.0.4               |COMMON_SET|Manifest: NOSIGNATURE         polymorph-forge-0.49.3+1.20.1.jar                 |Polymorph                     |polymorph                     |0.49.3+1.20.1       |COMMON_SET|Manifest: NOSIGNATURE         Zeta-1.0-15.jar                                   |Zeta                          |zeta                          |1.0-15              |COMMON_SET|Manifest: NOSIGNATURE         extended_armor-1.20.1-1.8.jar                     |Extended Armor                |extended_armor                |1.20.1-1.8          |COMMON_SET|Manifest: NOSIGNATURE         structurize-1.20.1-1.0.718-BETA.jar               |Structurize                   |structurize                   |1.20.1-1.0.718-BETA |COMMON_SET|Manifest: NOSIGNATURE         tlc_forge-1.0.3-R-1.20.X.jar                      |The Lost Castle               |tlc                           |1.0.2               |ERROR     |Manifest: NOSIGNATURE         appleskin-forge-mc1.20.1-2.5.1.jar                |AppleSkin                     |appleskin                     |2.5.1+mc1.20.1      |COMMON_SET|Manifest: NOSIGNATURE         lootr-forge-1.20-0.7.33.83.jar                    |Lootr                         |lootr                         |0.7.33.82           |COMMON_SET|Manifest: NOSIGNATURE         occultism-1.20.1-1.124.3.jar                      |Occultism                     |occultism                     |1.124.3             |COMMON_SET|Manifest: NOSIGNATURE         biomemusic-1.20.1-2.3.jar                         |biomemusic mod                |biomemusic                    |1.20.1-2.3          |COMMON_SET|Manifest: NOSIGNATURE         FriendlyFire-Forge-1.20.1-18.0.6.jar              |FriendlyFire                  |friendlyfire                  |18.0.6              |COMMON_SET|Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         extremesoundmuffler-3.41-forge-1.20.jar           |Extreme Sound Muffler         |extremesoundmuffler           |3.41-forge-1.20     |COMMON_SET|Manifest: NOSIGNATURE         cosmeticarmorreworked-1.20.1-v1a.jar              |CosmeticArmorReworked         |cosmeticarmorreworked         |1.20.1-v1a          |COMMON_SET|Manifest: 5e:ed:25:99:e4:44:14:c0:dd:89:c1:a9:4c:10:b5:0d:e4:b1:52:50:45:82:13:d8:d0:32:89:67:56:57:01:53         chunksending-1.20.1-2.8.jar                       |chunksending mod              |chunksending                  |1.20.1-2.8          |COMMON_SET|Manifest: NOSIGNATURE         cristellib-1.1.5-forge.jar                        |Cristel Lib                   |cristellib                    |1.1.5               |COMMON_SET|Manifest: NOSIGNATURE         tetra-1.20.1-6.3.0.jar                            |tetra                         |tetra                         |6.3.0               |COMMON_SET|Manifest: NOSIGNATURE         CyclopsCore-1.20.1-1.19.0.jar                     |Cyclops Core                  |cyclopscore                   |1.19.0              |COMMON_SET|Manifest: NOSIGNATURE         TreeChop-1.20.1-forge-0.19.0.jar                  |HT's TreeChop                 |treechop                      |0.18.8              |COMMON_SET|Manifest: NOSIGNATURE         transmog-forge-1.2.4+1.20.jar                     |Transmog                      |transmog                      |1.2.4+1.20          |ERROR     |Manifest: NOSIGNATURE         geckolib-forge-1.20.1-4.4.4.jar                   |GeckoLib 4                    |geckolib                      |4.4.4               |COMMON_SET|Manifest: NOSIGNATURE         ars_nouveau-1.20.1-4.10.0-all.jar                 |Ars Nouveau                   |ars_nouveau                   |4.10.0              |COMMON_SET|Manifest: NOSIGNATURE         eidolon_repraised-1.20.1-0.3.8.9.jar              |Eidolon:Repraised             |eidolon                       |1.20.1-0.3.8.9      |COMMON_SET|Manifest: NOSIGNATURE         towntalk-1.20.1-1.0.1.jar                         |TownTalk                      |towntalk                      |1.0.1               |COMMON_SET|Manifest: NOSIGNATURE         connectivity-1.20.1-5.5.jar                       |Connectivity Mod              |connectivity                  |1.20.1-5.5          |COMMON_SET|Manifest: NOSIGNATURE         sophisticatedcore-1.20.1-0.6.18.597.jar           |Sophisticated Core            |sophisticatedcore             |0.6.18.597          |COMMON_SET|Manifest: NOSIGNATURE         structureessentials-1.20.1-3.3.jar                |Structure Essentials mod      |structureessentials           |1.20.1-3.3          |COMMON_SET|Manifest: NOSIGNATURE         cookingforblockheads-forge-1.20.1-16.0.3.jar      |CookingForBlockheads          |cookingforblockheads          |16.0.3              |COMMON_SET|Manifest: NOSIGNATURE         Controlling-forge-1.20.1-12.0.2.jar               |Controlling                   |controlling                   |12.0.2              |COMMON_SET|Manifest: NOSIGNATURE         citadel-2.5.4-1.20.1.jar                          |Citadel                       |citadel                       |2.5.4               |COMMON_SET|Manifest: NOSIGNATURE         lootintegrations-1.20.1-3.4.jar                   |Lootintegrations mod          |lootintegrations              |1.20.1-3.4          |COMMON_SET|Manifest: NOSIGNATURE         mc_style_paintings forge-1.20.1.jar               |minecraft style paintings     |minecraft_style_paintings     |1.0.0               |COMMON_SET|Manifest: NOSIGNATURE         mixinextras-forge-0.2.0-beta.8.jar                |MixinExtras                   |mixinextras                   |0.2.0-beta.8        |COMMON_SET|Manifest: NOSIGNATURE         Bookshelf-Forge-1.20.1-20.1.10.jar                |Bookshelf                     |bookshelf                     |20.1.10             |COMMON_SET|Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         sophisticatedbackpacks-1.20.1-3.20.5.1039.jar     |Sophisticated Backpacks       |sophisticatedbackpacks        |3.20.5.1039         |COMMON_SET|Manifest: NOSIGNATURE         BetterCopper 1.20.1 -1.2.jar                      |Better Copper                 |bettercopper                  |1.2                 |COMMON_SET|Manifest: NOSIGNATURE         Rex's-AdditionalStructures-1.20.x-(v.4.2.1).jar   |Additional Structures         |additionalstructures          |4.2.1               |COMMON_SET|Manifest: NOSIGNATURE         l2damagetracker-0.2.8.jar                         |L2 Damage Tracker             |l2damagetracker               |0.2.8               |COMMON_SET|Manifest: NOSIGNATURE         twilightforest-1.20.1-4.3.2145-universal.jar      |The Twilight Forest           |twilightforest                |4.3.2145            |COMMON_SET|Manifest: NOSIGNATURE         FarmersDelight-1.20.1-1.2.4.jar                   |Farmer's Delight              |farmersdelight                |1.20.1-1.2.4        |COMMON_SET|Manifest: NOSIGNATURE         curious_armor_stands-1.20-5.0.1.jar               |Curious Armor Stands          |curious_armor_stands          |1.20-5.0.1          |COMMON_SET|Manifest: NOSIGNATURE         AmbientSounds_FORGE_v5.3.9_mc1.20.1.jar           |AmbientSounds                 |ambientsounds                 |5.3.9               |COMMON_SET|Manifest: NOSIGNATURE         getittogetherdrops-forge-1.20-1.3.jar             |Get It Together, Drops!       |getittogetherdrops            |1.3                 |COMMON_SET|Manifest: NOSIGNATURE         endrem_forge-5.2.3-R-1.20.X.jar                   |End Remastered                |endrem                        |5.2.3-R-1.20.1      |COMMON_SET|Manifest: NOSIGNATURE         bfendcities-1.0.jar                               |Big F&$%ing End Cities        |bfendcities                   |1.0                 |COMMON_SET|Manifest: NOSIGNATURE         colorfulhearts-forge-1.20.1-4.0.4.jar             |Colorful Hearts               |colorfulhearts                |4.0.4               |COMMON_SET|Manifest: NOSIGNATURE         zmedievalmusic-1.20.1-2.1.jar                     |medievalmusic mod             |medievalmusic                 |1.20.1-2.1          |COMMON_SET|Manifest: NOSIGNATURE         pamhc2foodextended-1.20.4-1.0.1.jar               |Pam's HarvestCraft 2 - Food Ex|pamhc2foodextended            |0.0NONE             |COMMON_SET|Manifest: NOSIGNATURE         L_Enders_Cataclysm-1.90 -1.20.1.jar               |Cataclysm Mod                 |cataclysm                     |1.0                 |COMMON_SET|Manifest: NOSIGNATURE         Patchouli-1.20.1-84-FORGE.jar                     |Patchouli                     |patchouli                     |1.20.1-84-FORGE     |COMMON_SET|Manifest: NOSIGNATURE         ars_artifice-1.20.1-2.0.4.jar                     |Ars Artifice                  |ars_artifice                  |1.20.1-2.0.4        |COMMON_SET|Manifest: NOSIGNATURE         blockui-1.20.1-1.0.151-BETA.jar                   |UI Library Mod                |blockui                       |1.20.1-1.0.151-BETA |COMMON_SET|Manifest: NOSIGNATURE         storageracks-1.20.1-1.7.jar                       |Storage Racks                 |storageracks                  |1.20.1-1.7          |COMMON_SET|Manifest: NOSIGNATURE         multipiston-1.20-1.2.43-RELEASE.jar               |Multi-Piston                  |multipiston                   |1.20-1.2.43-RELEASE |COMMON_SET|Manifest: NOSIGNATURE         resourcefullib-forge-1.20.1-2.1.20.jar            |Resourceful Lib               |resourcefullib                |2.1.20              |COMMON_SET|Manifest: NOSIGNATURE         architectury-9.2.14-forge.jar                     |Architectury                  |architectury                  |9.2.14              |COMMON_SET|Manifest: NOSIGNATURE         cupboard-1.20.1-2.6.jar                           |Cupboard utilities            |cupboard                      |1.20.1-2.6          |COMMON_SET|Manifest: NOSIGNATURE         ars_ocultas-1.20.1-1.2.2-all.jar                  |Ars Ocultas                   |ars_ocultas                   |1.2.2               |COMMON_SET|Manifest: NOSIGNATURE         inventoryessentials-forge-1.20.1-8.2.3.jar        |Inventory Essentials          |inventoryessentials           |8.2.3               |COMMON_SET|Manifest: NOSIGNATURE         framework-forge-1.20.1-0.6.27.jar                 |Framework                     |framework                     |0.6.27              |COMMON_SET|Manifest: 0d:78:5f:44:c0:47:0c:8c:e2:63:a3:04:43:d4:12:7d:b0:7c:35:37:dc:40:b1:c1:98:ec:51:eb:3b:3c:45:99         Towns-and-Towers-1.12-Fabric+Forge.jar            |Towns and Towers              |t_and_t                       |0.0NONE             |COMMON_SET|Manifest: NOSIGNATURE         toomanyglyphs-1.20.1-2.3.2.12345.jar              |Too Many Glyphs               |toomanyglyphs                 |2.3.2.12345         |COMMON_SET|Manifest: NOSIGNATURE         quark_delight_1.0.0_forge_1.20.1.jar              |Quark Delight                 |quarkdelight                  |1.0.0               |COMMON_SET|Manifest: NOSIGNATURE         inventorysorter-1.20.1-23.0.1.jar                 |Simple Inventory Sorter       |inventorysorter               |23.0.1              |COMMON_SET|Manifest: NOSIGNATURE         Cucumber-1.20.1-7.0.8.jar                         |Cucumber Library              |cucumber                      |7.0.8               |COMMON_SET|Manifest: NOSIGNATURE         trashslot-forge-1.20-15.1.0.jar                   |TrashSlot                     |trashslot                     |15.1.0              |COMMON_SET|Manifest: NOSIGNATURE         treasuredistance-1.20-1.2.jar                     |Treasure Distance mod         |treasuredistance              |1.20-1.2            |COMMON_SET|Manifest: NOSIGNATURE         pamhc2trees-1.20-1.0.2.jar                        |Pam's HarvestCraft 2 - Trees  |pamhc2trees                   |1.0.2               |COMMON_SET|Manifest: NOSIGNATURE         awesomedungeonend-forge-1.20.1-3.1.1.jar          |Awesome dungeon the end       |awesomedungeonend             |3.1.1               |COMMON_SET|Manifest: NOSIGNATURE         sophisticatedstorage-1.20.1-0.10.20.778.jar       |Sophisticated Storage         |sophisticatedstorage          |0.10.20.778         |COMMON_SET|Manifest: NOSIGNATURE         limitedchunks-1.20.1-4.0.jar                      |Limited Chunkloading          |limitedchunks                 |1.8                 |COMMON_SET|Manifest: NOSIGNATURE         TinyCoal-forge-1.20.1-1.1.5.jar                   |Tiny Coal                     |tinycoal                      |1.1.5               |COMMON_SET|Manifest: NOSIGNATURE         create-1.20.1-0.5.1.f.jar                         |Create                        |create                        |0.5.1.f             |COMMON_SET|Manifest: NOSIGNATURE         waystones-forge-1.20-14.1.3.jar                   |Waystones                     |waystones                     |14.1.3              |COMMON_SET|Manifest: NOSIGNATURE         journeymap-1.20.1-5.9.20-forge.jar                |Journeymap                    |journeymap                    |5.9.20              |COMMON_SET|Manifest: NOSIGNATURE         comforts-forge-6.3.5+1.20.1.jar                   |Comforts                      |comforts                      |6.3.5+1.20.1        |COMMON_SET|Manifest: NOSIGNATURE         artifacts-forge-9.4.2.jar                         |Artifacts                     |artifacts                     |9.4.2               |COMMON_SET|Manifest: NOSIGNATURE         [1.20.1-forge]-Epic-Knights-9.7.jar               |Epic Knights Mod              |magistuarmory                 |9.7                 |COMMON_SET|Manifest: NOSIGNATURE         ExplorersCompass-1.20.1-1.3.3-forge.jar           |Explorer's Compass            |explorerscompass              |1.20.1-1.3.3-forge  |COMMON_SET|Manifest: NOSIGNATURE         farsight-1.20.1-3.6.jar                           |Farsight mod                  |farsight_view                 |1.20.1-3.6          |COMMON_SET|Manifest: NOSIGNATURE         azurelib-neo-1.20.1-2.0.20.jar                    |AzureLib                      |azurelib                      |2.0.20              |COMMON_SET|Manifest: NOSIGNATURE         bloodmagic-1.20.1-3.3.2-44.jar                    |Blood Magic                   |bloodmagic                    |3.3.2-44            |COMMON_SET|Manifest: NOSIGNATURE         tomeofblood-1.20.1-0.4.4-all.jar                  |Tome of Blood: Rebirth        |tomeofblood                   |0.4.4               |COMMON_SET|Manifest: NOSIGNATURE         MysticalAgriculture-1.20.1-7.0.11.jar             |Mystical Agriculture          |mysticalagriculture           |7.0.11              |COMMON_SET|Manifest: NOSIGNATURE         MysticalAgradditions-1.20.1-7.0.3.jar             |Mystical Agradditions         |mysticalagradditions          |7.0.3               |COMMON_SET|Manifest: NOSIGNATURE         craftingtweaks-forge-1.20.1-18.2.3.jar            |CraftingTweaks                |craftingtweaks                |18.2.3              |COMMON_SET|Manifest: NOSIGNATURE         tetrasdelight-1.20.1-1.jar                        |Tetra's Delight               |tetrasdelight                 |1.20.1-1            |COMMON_SET|Manifest: NOSIGNATURE         vanillaplustools-1.20-1.0.jar                     |Vanilla+ Tools                |vanillaplustools              |1.20-1.0            |COMMON_SET|Manifest: NOSIGNATURE         simplyswords-forge-1.54.0-1.20.1.jar              |Simply Swords                 |simplyswords                  |1.54.0-1.20.1       |COMMON_SET|Manifest: NOSIGNATURE         EnchantmentDescriptions-Forge-1.20.1-17.0.14.jar  |EnchantmentDescriptions       |enchdesc                      |17.0.14             |COMMON_SET|Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         titanium-1.20.1-3.8.27.jar                        |Titanium                      |titanium                      |3.8.27              |COMMON_SET|Manifest: NOSIGNATURE         Jade-1.20.1-forge-11.8.0.jar                      |Jade                          |jade                          |11.8.0              |COMMON_SET|Manifest: NOSIGNATURE         CreativeCore_FORGE_v2.11.25_mc1.20.1.jar          |CreativeCore                  |creativecore                  |2.11.25             |COMMON_SET|Manifest: NOSIGNATURE         modulargolems-2.4.30.jar                          |Modular Golems                |modulargolems                 |2.4.30              |COMMON_SET|Manifest: NOSIGNATURE         easy-villagers-forge-1.20.1-1.1.4.jar             |Easy Villagers                |easy_villagers                |1.20.1-1.1.4        |COMMON_SET|Manifest: NOSIGNATURE         anvilbalance-1.20-1.1.0-all.jar                   |anvilbalance mod              |anvilbalance                  |1.20-1.1.0          |COMMON_SET|Manifest: NOSIGNATURE         Quark-4.0-439.jar                                 |Quark                         |quark                         |4.0-439             |COMMON_SET|Manifest: NOSIGNATURE         mutil-1.20.1-6.1.1.jar                            |mutil                         |mutil                         |6.1.1               |COMMON_SET|Manifest: NOSIGNATURE         mes-1.3-1.20-forge.jar                            |Moog's End Structures         |mes                           |1.3-1.20-forge      |COMMON_SET|Manifest: NOSIGNATURE         ars_elemental-1.20.1-0.6.4.1.jar                  |Ars Elemental                 |ars_elemental                 |1.20.1-0.6.4.1      |COMMON_SET|Manifest: NOSIGNATURE         irons_spellbooks-1.20.1-3.1.3.jar                 |Iron's Spells 'n Spellbooks   |irons_spellbooks              |1.20.1-3.1.3        |COMMON_SET|Manifest: NOSIGNATURE         armourersworkshop-forge-1.20.1-2.1.2.jar          |Armourer's Workshop           |armourers_workshop            |2.1.2               |COMMON_SET|Manifest: 58:d0:3b:4b:a0:4b:43:fb:59:0f:27:f5:39:d5:65:de:9a:24:ee:2e:15:48:b1:4f:78:1a:e1:ef:cd:a4:d9:0a         modonomicon-1.20.1-forge-1.67.0.jar               |Modonomicon                   |modonomicon                   |1.67.0              |COMMON_SET|Manifest: NOSIGNATURE         minecolonies-1.20.1-1.1.550-BETA.jar              |MineColonies                  |minecolonies                  |1.20.1-1.1.550-BETA |COMMON_SET|Manifest: NOSIGNATURE         JadeColonies-1.20.1-1.4.2.jar                     |JadeColonies                  |jadecolonies                  |1.4.2               |COMMON_SET|Manifest: NOSIGNATURE         mvs-4.1.1-1.20-forge.jar                          |Moog's Voyager Structures     |mvs                           |4.1.1-1.20-forge    |COMMON_SET|Manifest: NOSIGNATURE         creeperoverhaul-3.0.2-forge.jar                   |Creeper Overhaul              |creeperoverhaul               |3.0.2               |COMMON_SET|Manifest: NOSIGNATURE         functionalstorage-1.20.1-1.2.10.jar               |Functional Storage            |functionalstorage             |1.20.1-1.2.10       |COMMON_SET|Manifest: NOSIGNATURE         apexcore-1.20.1-10.0.0.jar                        |ApexCore                      |apexcore                      |10.0.0              |COMMON_SET|Manifest: NOSIGNATURE         infusedfoods-1.20.1-10.0.0.jar                    |InfusedFoods                  |infusedfoods                  |10.0.0              |COMMON_SET|Manifest: NOSIGNATURE         moredragoneggs-4.0.jar                            |More Dragon Eggs              |moredragoneggs                |4.0                 |COMMON_SET|Manifest: NOSIGNATURE         charmofundying-forge-6.5.0+1.20.1.jar             |Charm of Undying              |charmofundying                |6.5.0+1.20.1        |COMMON_SET|Manifest: NOSIGNATURE         l2itemselector-0.1.8.jar                          |L2 Item Selector              |l2itemselector                |0.1.8               |COMMON_SET|Manifest: NOSIGNATURE         expandability-9.0.0.jar                           |ExpandAbility                 |expandability                 |9.0.0               |COMMON_SET|Manifest: NOSIGNATURE     Flywheel Backend: GL33 Instanced Arrays     Crash Report UUID: b50f67e4-a892-4098-a1f4-4fb465c66885     FML: 47.2     Forge: net.minecraftforge:47.2.0
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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