Jump to content

[1.12.2] What's the best way to make a crafting recipe that just changes NBT?


SapphireSky

Recommended Posts

What I'm trying to do is have a recipe with an item and materials based on the main item's NBT, that results in the original item with additional/changed NBT.

 

For example, if Weapon(NO NBT) is in a recipe with MaterialOne, I want to add element tag Fire resulting in Weapon(Fire), or if Weapon(Fire) is in a recipe with MaterialTwo I want to remove the tag Fire resulting in Weapon(NO NBT).

Or, if Weapon(Fire, Level1) is in a recipe with MaterialThree, I want to increase its Level tag so it becomes Weapon(Fire, Level2), etc.

 

I've only figured out a way to do this WITHOUT NBT, but unfortunately that involves creating a new item and recipe for every possible combination of element and levels, which results in around 2000 model/recipe json files to be generated for each weapon, which is obviously a bad idea.

 

What's the best way to actually DO this?

 

This is all I've got so far, but I'm not sure if it's even right, much less where to go from here.

Spoiler

public class CraftingUpgrades
{
	@SubscribeEvent
	public void onCraft(ItemCraftedEvent event)
	{
		if (event.crafting != null)
		{
			ItemStack stack = event.crafting;
			if (stack.getItem() instanceof Weapon || stack.getItem() instanceof Shield)
			{
				ItemStack material = getUpgradeMaterial(event.craftMatrix);
				if (material != null)
				{
					// TODO Increase level based on material
				}
				else
				{
					material = getInfusionMaterial(event.craftMatrix);
					if (material != null)
					{
						// TODO Set infusion based on material
					}
				}
			}
		}
	}

	private ItemStack getUpgradeMaterial(IInventory matrix)
	{
		ItemStack stack;
		for (int i = 0; i < matrix.getSizeInventory(); i++)
		{
			if (matrix.getStackInSlot(i) != null)
			{
				stack = matrix.getStackInSlot(i);
				if (stack.getItem() instanceof UpgradeMaterial)
				{
					return stack;
				}
			}
		}
		return null;
	}

	private ItemStack getInfusionMaterial(IInventory matrix)
	{
		ItemStack stack;
		for (int i = 0; i < matrix.getSizeInventory(); i++)
		{
			if (matrix.getStackInSlot(i) != null)
			{
				stack = matrix.getStackInSlot(i);
				if (stack.getItem() instanceof InfusionGem)
				{
					return stack;
				}
			}
		}
		return null;
	}
}

 

 

Link to comment
Share on other sites

No you only have one item but depending on the parameters it can have different damage/effects/whateveryouwant

Sword(String name, int material, String infusion)

in your ModItem class:

 

FIRESWORD_LEVEL_TWO = new Sword(firesword_level_two,2, fire)

 

Link to comment
Share on other sites

1 minute ago, SaltStation said:

No you only have one item but depending on the parameters it can have different damage/effects/whateveryouwant

Sword(String name, int material, String infusion)

in your ModItem class:

 

FIRESWORD_LEVEL_TWO = new Sword(firesword_level_two,2, fire)

 

That's exactly my point....

 

Your way would require:

 

sword = new Sword(name, 0, none)

sword1 = new Sword(name, 1, none)

sword2 = new Sword(name, 2, none)

sword3 = new Sword(name, 3, none)

sword4 = new Sword(name, 4, none)

firesword = new Sword(name, 0, fire)

firesword1 = new Sword(name, 1, fire)

firesword2 = new Sword(name, 2, fire)

firesword3 = new Sword(name, 3, fire)

firesword4 = new Sword(name, 4, fire)

 

...and so on, for 10 levels each with 8 different elements for each level on over 200 weapons I'm adding.

That's 16,000 new items, which would then need about 100 recipes each to allow changing them to and from other variants.

 

I want to create ONE of each weapon, and just add the level and element using NBT to save literally thousands of file creations and dozens of megabytes in total file size...

Link to comment
Share on other sites

10 minutes ago, V0idWa1k3r said:

Loops exist.

But in your usecase sure, NBT may be preferrable.

You can make a custom IRecipe implementation that deals with the ingredients passed and determines the results.

Loops are exactly how I already did it, resulting in thousands of items that I wanted to avoid, therefore my wanting to use NBT instead.

But I forgot IRecipe was a thing.

 

I assume I could just use something similar to how RecipeFireworks does it?

And the proper way to register it is this something like this?

@SubscribeEvent
public static void registerRecipes(Register<IRecipe> event)
{
	event.getRegistry().register(new RecipeWeapon());
}

 

Link to comment
Share on other sites

The proper way is to make a _factories.json file where you would register a factory for your custom IRecipe implementation and register it though json. It may still be just one file, just registered via a json and not via a registry event.

The reason for that is once you are migrating to 1.13 and up all recipes must have a json file defining them(so they can be disabled by a datapack).

Link to comment
Share on other sites

34 minutes ago, V0idWa1k3r said:

The proper way is to make a _factories.json file where you would register a factory for your custom IRecipe implementation and register it though json. It may still be just one file, just registered via a json and not via a registry event.

The reason for that is once you are migrating to 1.13 and up all recipes must have a json file defining them(so they can be disabled by a datapack).

So... something like this?

{
    "recipes": {
        "weaponvariant": "avrye.soulsstuff.util.RecipeWeapon.Factory"
    }
}

 

How am I supposed to return an IRecipe in parse()? I can't find any implementations of IRecipeFactory in the code.

All examples I can find use either outdated code or helper classes that just make things way more complicated than what I need...

package avrye.soulsstuff.util;

public class RecipeWeapon extends Impl<IRecipe> implements IRecipe
{
	// ...

	public static class Factory implements IRecipeFactory
	{
		@Override
		public IRecipe parse(JsonContext context, JsonObject json)
		{
			//TODO ?
			return null;
		}
	}
}

 

Edited by SapphireSky
Link to comment
Share on other sites

19 minutes ago, V0idWa1k3r said:

If you are just using it to register your ONE particular recipe that handles all kind of cases then just return a new instance of your IRecipe implementation since you don't need to parse anything

That's easier than I expected then.

 

But now how exactly do I tell the IRecipe which items to be removed during crafting?

Looking at RecipeFireworks, matches() just checks to see if the needed items are available and creates the result item.

And getRemainingItems() seems relevant but doesn't check for any of the needed items, so I'm confused how that's done.

Link to comment
Share on other sites

19 hours ago, V0idWa1k3r said:

 

returns a list of itemstacks that are "left" after the craft is done.

I know but how do I tell it which items are actually used up during crafting?

I can't find anything that actually determines which items should be removed and removes them.

Link to comment
Share on other sites

I repeat myself yet again

20 hours ago, V0idWa1k3r said:
21 hours ago, SapphireSky said:

getRemainingItems()

returns a list of itemstacks that are "left" after the craft is done.

 

If you have a recipe of AB = C and you want A to be consumed then the list would return just B. Assuming A's max stack is 1.

It is a NonNullList though, so all empty slots are ItemStack.EMPTY.

 

1 hour ago, SapphireSky said:

I can't find anything that actually determines which items should be removed and removes them.

By default all items are consumed if their container item is empty, otherwise their container item is returned.

Link to comment
Share on other sites

4 minutes ago, V0idWa1k3r said:

I repeat myself yet again

 

If you have a recipe of AB = C and you want A to be consumed then the list would return just B. Assuming A's max stack is 1.

It is a NonNullList though, so all empty slots are ItemStack.EMPTY.

 

By default all items are consumed if their container item is empty, otherwise their container item is returned.

 

That still doesn't answer my question...

HOW does the list know what to return if you're not telling it what to return?

 

matches() is basically just roughly this:

public boolean matches(InventoryCrafting inv, World world)
{
    if(inv contains materialitem && inv contains mainitem)
    {
        ItemStack result = new ItemStack(mainitem);
        result.setNBTBasedOn(materialitem);
        return true;
    }
    return false;
}

 

while getRemainingItems() contains:

public NonNullList<ItemStack> getRemainingItems(InventoryCrafting inv)
{
	NonNullList<ItemStack> nonnulllist = NonNullList.<ItemStack>withSize(inv.getSizeInventory(), ItemStack.EMPTY);
	for (int i = 0; i < nonnulllist.size(); ++i)
	{
		ItemStack itemstack = inv.getStackInSlot(i);
		nonnulllist.set(i, ForgeHooks.getContainerItem(itemstack));
	}
	return nonnulllist;
}

 

I'm still failing to see how getRemainingItems() either gets the ingredients or consumes them.

Unless I'm supposed to add to and manually pick out the items from in getRemainingItems() ?

In which case, that's not exactly obvious since that method for Fireworks or Dyed Armour doesn't do that either.

Link to comment
Share on other sites

34 minutes ago, SapphireSky said:

I'm still failing to see how getRemainingItems() either gets the ingredients or consumes them.

 

I am sorry, I do not know how to be more obvious.

getRemainingItems is the list of INGREDIENTS that REMAIN in the slots AFTER the crafting is done.

It doesn't consume anything. It is what's LEFT in the slots.

The ingredients currently in the crafting table are passed to you in the parameter of the method.

The default implementation goes through all ingredients

37 minutes ago, SapphireSky said:

ItemStack itemstack = inv.getStackInSlot(i);

and does the following:

If the item has a container item(like a bucket of milk has an empty bucket as it's container item) then the container item is added, otherwise an ampty stack is.

 

You can see how the vanilla's crafting system handles it in SlotCrafting#onTake.

It iterates through all items in the crafting matrix, decreasing their stack size by 1.

Then if the stack in the slot is empty but the getRemainingItems has a non-empty stack at that position then that stack in the list is inserted into the slot.

If the stack in the slot isn't empty but is identical(NBT + meta) to the one returned by the getRemainingItems then the stack in the slot's count is incremented by the size of the stack in the list.

Otherwise the item in the list is either added to the player's inventory or dropped.

Link to comment
Share on other sites

48 minutes ago, V0idWa1k3r said:

You can see how the vanilla's crafting system handles it in SlotCrafting#onTake.

It iterates through all items in the crafting matrix, decreasing their stack size by 1.

.....

 

THIS is what I was asking.....

I did not know the creation and use of the recipe were handled separately.

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

    • C:\Users\Wil_Enp\Desktop\1>REM Forge requires a configured set of both JVM and program arguments. C:\Users\Wil_Enp\Desktop\1>REM Add custom JVM arguments to the user_jvm_args.txt C:\Users\Wil_Enp\Desktop\1>REM Add custom program arguments {such as nogui} to this file in the next line before the  or C:\Users\Wil_Enp\Desktop\1>REM  pass them to this script directly C:\Users\Wil_Enp\Desktop\1>java @user_jvm_args.txt @libraries/net/minecraftforge/forge/1.18.2-40.2.18/win_args.txt 2024-04-28 13:58:58,840 main WARN Advanced terminal features are not available in this environment [13:58:59] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher running: args [--launchTarget, forgeserver, --fml.forgeVersion, 40.2.18, --fml.mcVersion, 1.18.2, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20220404.173914] [13:58:59] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher 9.1.3+9.1.3+main.9b69c82a starting: java version 21.0.2 by BellSoft [13:58:59] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/Wil_Enp/Desktop/1/libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar%2314!/ Service=ModLauncher Env=SERVER [13:58:59] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file C:\Users\Wil_Enp\Desktop\1\libraries\net\minecraftforge\fmlcore\1.18.2-40.2.18\fmlcore-1.18.2-40.2.18.jar is missing mods.toml file [13:58:59] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file C:\Users\Wil_Enp\Desktop\1\libraries\net\minecraftforge\javafmllanguage\1.18.2-40.2.18\javafmllanguage-1.18.2-40.2.18.jar is missing mods.toml file [13:58:59] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file C:\Users\Wil_Enp\Desktop\1\libraries\net\minecraftforge\lowcodelanguage\1.18.2-40.2.18\lowcodelanguage-1.18.2-40.2.18.jar is missing mods.toml file [13:58:59] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file C:\Users\Wil_Enp\Desktop\1\libraries\net\minecraftforge\mclanguage\1.18.2-40.2.18\mclanguage-1.18.2-40.2.18.jar is missing mods.toml file [13:58:59] [main/INFO] [ne.mi.fm.lo.mo.JarInJarDependencyLocator/]: No dependencies to load found. Skipping! [13:59:00] [main/INFO] [cp.mo.mo.LaunchServiceHandler/MODLAUNCHER]: Launching target 'forgeserver' with arguments [] [13:59:09] [modloading-worker-0/INFO] [ne.mi.co.ForgeMod/FORGEMOD]: Forge mod loading, version 40.2.18, for MC 1.18.2 with MCP 20220404.173914 [13:59:09] [modloading-worker-0/INFO] [ne.mi.co.MinecraftForge/FORGE]: MinecraftForge v40.2.18 Initialized [13:59:11] [main/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Configuration file C:\Users\Wil_Enp\Desktop\1\config\forge-common.toml is not correct. Correcting [13:59:11] [main/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key general was corrected from null to its default, SimpleCommentedConfig:{}. [13:59:11] [main/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key general.defaultWorldType was corrected from null to its default, default. [13:59:12] [Forge Version Check/INFO] [ne.mi.fm.VersionChecker/]: [forge] Starting version check at https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json [13:59:14] [Forge Version Check/INFO] [ne.mi.fm.VersionChecker/]: [forge] Found status: AHEAD Current: 40.2.18 Target: null [13:59:15] [main/ERROR] [minecraft/Settings]: Failed to load properties from file: server.properties [13:59:15] [main/INFO] [mojang/YggdrasilAuthenticationService]: Environment: authHost='https://authserver.mojang.com', accountsHost='https://api.mojang.com', sessionHost='https://sessionserver.mojang.com', servicesHost='https://api.minecraftservices.com', name='PROD' [13:59:15] [main/WARN] [minecraft/VanillaPackResources]: Assets URL 'union:/C:/Users/Wil_Enp/Desktop/1/libraries/net/minecraft/server/1.18.2-20220404.173914/server-1.18.2-20220404.173914-srg.jar%2341!/assets/.mcassetsroot' uses unexpected schema [13:59:15] [main/WARN] [minecraft/VanillaPackResources]: Assets URL 'union:/C:/Users/Wil_Enp/Desktop/1/libraries/net/minecraft/server/1.18.2-20220404.173914/server-1.18.2-20220404.173914-srg.jar%2341!/data/.mcassetsroot' uses unexpected schema [13:59:20] [main/WARN] [minecraft/Commands]: Ambiguity between arguments [teleport, location] and [teleport, destination] with inputs: [0.1 -0.5 .9, 0 0 0] [13:59:20] [main/WARN] [minecraft/Commands]: Ambiguity between arguments [teleport, location] and [teleport, targets] with inputs: [0.1 -0.5 .9, 0 0 0] [13:59:20] [main/WARN] [minecraft/Commands]: Ambiguity between arguments [teleport, destination] and [teleport, targets] with inputs: [Player, 0123, @e, dd12be42-52a9-4a91-a8a1-11c01849e498] [13:59:20] [main/WARN] [minecraft/Commands]: Ambiguity between arguments [teleport, targets] and [teleport, destination] with inputs: [Player, 0123, dd12be42-52a9-4a91-a8a1-11c01849e498] [13:59:21] [main/WARN] [minecraft/Commands]: Ambiguity between arguments [teleport, targets, location] and [teleport, targets, destination] with inputs: [0.1 -0.5 .9, 0 0 0] [13:59:23] [Worker-Main-18/INFO] [minecraft/RecipeManager]: Loaded 7 recipes [13:59:26] [Worker-Main-18/INFO] [minecraft/AdvancementList]: Loaded 1141 advancements [13:59:27] [Server thread/INFO] [minecraft/DedicatedServer]: Starting minecraft server version 1.18.2 [13:59:27] [Server thread/INFO] [minecraft/DedicatedServer]: Loading properties [13:59:27] [Server thread/INFO] [minecraft/DedicatedServer]: Default game type: SURVIVAL [13:59:27] [Server thread/INFO] [minecraft/MinecraftServer]: Generating keypair [13:59:27] [Server thread/INFO] [minecraft/DedicatedServer]: Starting Minecraft server on *:25565 [13:59:27] [Server thread/INFO] [minecraft/ServerConnectionListener]: Using default channel type [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Configuration file .\world\serverconfig\forge-server.toml is not correct. Correcting [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server was corrected from null to its default, SimpleCommentedConfig:{}. [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server.removeErroringBlockEntities was corrected from null to its default, false. [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server.removeErroringEntities was corrected from null to its default, false. [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server.fullBoundingBoxLadders was corrected from null to its default, false. [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server.zombieBaseSummonChance was corrected from null to its default, 0.1. [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server.zombieBabyChance was corrected from null to its default, 0.05. [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server.treatEmptyTagsAsAir was corrected from null to its default, false. [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server.skipEmptyShapelessCheck was corrected from null to its default, true. [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server.fixAdvancementLoading was corrected from null to its default, true. [13:59:27] [Server thread/WARN] [ne.mi.co.ForgeConfigSpec/CORE]: Incorrect key server.permissionHandler was corrected from null to its default, forge:default_handler. [13:59:27] [Server thread/INFO] [minecraft/DedicatedServer]: Preparing level "world" [13:59:31] [Server thread/INFO] [minecraft/MinecraftServer]: Preparing start region for dimension minecraft:overworld [13:59:32] [Worker-Main-24/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 0% [13:59:32] [Worker-Main-22/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 0% [13:59:32] [Worker-Main-27/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 0% [13:59:33] [Worker-Main-28/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 1% [13:59:33] [Worker-Main-18/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 4% [13:59:34] [Worker-Main-29/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 6% [13:59:34] [Worker-Main-16/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 9% [13:59:35] [Worker-Main-29/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 12% [13:59:35] [Worker-Main-19/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 15% [13:59:36] [Worker-Main-26/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 19% [13:59:36] [Worker-Main-30/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 24% [13:59:37] [Worker-Main-19/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 30% [13:59:37] [Worker-Main-23/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 33% [13:59:38] [Worker-Main-20/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 39% [13:59:38] [Worker-Main-26/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 44% [13:59:39] [Worker-Main-18/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 49% [13:59:39] [Worker-Main-26/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 54% [13:59:40] [Worker-Main-30/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 58% [13:59:40] [Worker-Main-30/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 63% [13:59:41] [Worker-Main-23/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 68% [13:59:41] [Worker-Main-16/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 72% [13:59:42] [Worker-Main-29/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 77% [13:59:42] [Worker-Main-16/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 84% [13:59:43] [Worker-Main-19/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 88% [13:59:43] [Worker-Main-24/INFO] [minecraft/LoggerChunkProgressListener]: Preparing spawn area: 93% [13:59:44] [Server thread/INFO] [minecraft/LoggerChunkProgressListener]: Time elapsed: 12446 ms [13:59:44] [Server thread/INFO] [minecraft/DedicatedServer]: Done (16.942s)! For help, type "help" [13:59:44] [Server thread/INFO] [ne.mi.se.pe.PermissionAPI/]: Successfully initialized permission handler forge:default_handler stop [13:59:53] [Server thread/INFO] [minecraft/DedicatedServer]: Stopping the server [13:59:53] [Server thread/INFO] [minecraft/MinecraftServer]: Stopping server [13:59:53] [Server thread/INFO] [minecraft/MinecraftServer]: Saving players [13:59:53] [Server thread/INFO] [minecraft/MinecraftServer]: Saving worlds [13:59:53] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'ServerLevel[world]'/minecraft:overworld [13:59:54] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_end [13:59:54] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_nether [13:59:54] [Server thread/INFO] [minecraft/MinecraftServer]: ThreadedAnvilChunkStorage (world): All chunks are saved [13:59:54] [Server thread/INFO] [minecraft/MinecraftServer]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved [13:59:54] [Server thread/INFO] [minecraft/MinecraftServer]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved [13:59:54] [Server thread/INFO] [minecraft/MinecraftServer]: ThreadedAnvilChunkStorage: All dimensions are saved C:\Users\Wil_Enp\Desktop\1>pause Press any key to continue . . .     I've been trying to solve this for days, what is the error?
    • Add crash-reports with sites like https://paste.ee/ and paste the link to it here There is an issue with spectrelib - try other builds or remove this mod and the mods requiring it
    • Delete the logs-folder and test it again
    • C:\Minecraft Server>java -Xmx4096M -Xms1024M -jar server.jar nogui Starting net.minecraft.server.Main ERROR StatusConsoleListener Unable to delete file C:\Minecraft Server\logs\latest.log: java.nio.file.FileSystemException C:\Minecraft Server\logs\latest.log: The process cannot access the file because it is being used by another process ^CTerminate batch job (Y/N)?
  • Topics

×
×
  • Create New...

Important Information

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