Project-RT / RandomTweaker

Provides many more mods support and great features for CraftTweaker.
https://www.curseforge.com/minecraft/mc-mods/randomtweaker
MIT License
21 stars 8 forks source link

[request] thaumic addition support #58

Closed Biviho closed 2 years ago

Biviho commented 2 years ago

hi, sorry to bother you, you are one of the few that is still adding compatibility to crafttweaker, so i wanted to ask if you would like to add some compatibility with thaumic addition to customize some of the feature that does not have any way to be changed:

-Flux concentrator: a way to add recipe for block conversion. this should be possible looking at the code

-vis salt: a way to add/change potion effects to vis salt. basically, every mod that add essentia is not handled by thaumic addition, so those are basically usless. this i don't know if it's possible to do

let me know if you like this ideas and the possibility of implementing at least the first

ikexing-cn commented 2 years ago

hi, that's an interesting idea, but the problem is that we don't know much about thaumic additions, so it may take some time to learn it.

Also, if it were you, what definition method would you like to use in ZenScript, I am not a native English speaker, so I would waste a lot of time dealing with method names, and often the words don't make sense.

Finally, I noticed that there is a Reconstructed version of thaumic additions that is for the contents of this mod, I need to confirm which mod your idea in order to avoid any oops.

Biviho commented 2 years ago

yeah, i know how it is ahah, take your time, and i will do all the help i can, i'm not a native english speaker either, but i have no problem in understanding it :) About the mod, the right one is: Thaumic Addition Reconstucted, wich is the one for the latest version of thaumcraft (it's also the only one there is for what i know)

-----------------------------------Flux Concentrator some more description: the flux concentrator is a machine that transform blocks in an area around itself in other blocks by default it transform shrooms into visshrooms and pumpkin into a flux version of pumpkins. looking in the code there is an example on how the recipe is applied in ThaumicAddition/src/main/ java/com/zeitheron/thaumicadditions/init/RecipeTAR.java at line 75

also for what i can see there is no easy way to remove an already registered recipe, since the map where recipes are stored is private (i've never made a mod, so i don't know if there is some trick to do that)

----------examples: for the flux concentrator an example should be something like: concentrator.Add( , );

so, for example:

import mods.randomtweaker.thaumaddition.concentrator;
concentrator.Add(<minecraft:wool>,<minecraft:stone>);

if it's possible to remove an already registered recipe, something like this would be ok: concentrator.Remove(); since one input correspond to one output

import mods.randomtweaker.thaumaddition.concentrator;
concentrator.Remove(<minecraft:pumpkin>);

--------------------------------vis salt vis salt is a mechanic in thaumic additon that give you the ability to create crushed vis crystal that, when eaten, applied on the cake or dispersed/fired with the gun, will apply an effect on the eater/target. an exapmple on how it is applied can be found in ThaumicAddition/src/main/ java/com/zeitheron/thaumicadditions/api/EdibleAspect.java at line 45. those are registered statically in the class, but the function addEatCall is public and also the two maps where the effect is registered are public public, so it might be possible to remove already registered recipes.

vis salt are used by 4 different items: -salt essence, the vis salt, wich contains the essence used in arcane cake and aura disperser to set the effect -aura cake that can recive effects from vis salts -arcane dispenser that apply effects to entity based on the salt inside it -arcane pistol wich shoot essentia effect form liquid essentia

it should be also applicable to foods, but i didn't tested it

-----------examples by looking at the code ti uses a function to register the effect that take the entity and a "count" wich i tiìhink is the amount of salt used, configurable in some machines. i don't know if it's possible to apply a crafttweaker function to the use of a vis salt, but a potion effect should be enough, since the majority of those are actually potion effects. looking at the code there is a lot to handle:

to handle the formula it could be done with an input string to imitate the formula he already uses, something like: "fixed" for an integer "quadratic" for an integer that will be summed to count count "sqrt" for an integer summed to sqrt(count) "proportional" for an integer that will be placed in a formula: countint/MAX_ESSENTIA (file EdibleAspect.java line 58)

an example could be: (i don't know how aspect could be defined) ediblesalt.AddPotion(ASPECT, , "string formula type", int time, "string formula type", int amplifier);

so something like: (example based on the already defined aspect ENERGY on EdibleAspect.java line 51) (i don't know how aspect would be defined)

import mods.randomtweaker.thaumaddition.ediblesalt;
ediblesalt.AddPotion(ENERGY,<potion:minecraft:strength>, "quadratic", 20, "sqrt", 0);

if it's possible to remove them, then something like

ediblesalt.Remove(ASPECT)

there are also other things in thaumic addition that could be enhanced, for example the Shadow Enchantment, if you are interested in also adding that, you can find an example on how enchantment are registered in ThaumicAddition/src/main/java/com/zeitheron/thaumicadditions/TAReconstructed.java on line 188

also, there are the seal effects, wich are effects applied in an area based on seal combinations...but for how it's implemented i'm afraid it can't be customized... you can find the recipe registration at: ThaumicAddition/src/main/java/com/zeitheron/thaumicadditions/init/SealsTAR.java line 29

i hope i've been of some help, let me know if you need something!

ikexing-cn commented 2 years ago

thank you for your help, but I need some time to deal with the reality of things, so it will drag on some, and I'll try to make sure this content comes to fruition within this month. :(

Biviho commented 2 years ago

Yeah! Don't worry, no need to rush things! c:

ikexing-cn commented 2 years ago

hmm, I need some help. for the flux concentrator I don't understand how to use it. and I try to spawn a flux rift, but the block don't work. By the way, I try to remove and add recipes is working for Jei, add recipe is okay, but remove don't show, just I don't know it's really working.

Biviho commented 2 years ago

there is no need to spawn a flux rift, the concentrator work with vitium essentia

the flux concentrator work by creating an enclosed chamber with the concentrator facing the inside and feeding it with vitium essentia, you will notice that the valve will start to spin and air block inside the camber will spawn taint parcticles. if mushrooms are placed inside , thei will transform into visshroom after a bit and creature inside should get the flux flue potion effect

the flux concentrator might be a bit bugged cause for what i tested pumpkin will not transform

by the way, here is a setup for the concentrator

2022-02-24_13 27 46

you can see it working when you notice the purple taint parcticles inside the chamber

2022-02-24_13 29 01

at this point, placing mushrooms inside will transform them into vishroom

2022-02-24_13 32 01

i have noticed that each concentrator will tranform blocks only in an area 3x3x2 in front of them, that's why i placed more around the chamber

2022-02-24_13 47 45

Biviho commented 2 years ago

hi, it looks like Thaumic Addition: Reconstructed got an update that fixed pumpkins conversion, you might want to take a look into that the new version

ikexing-cn commented 2 years ago

hi, i'm back and I will test further thanks.

ikexing-cn commented 2 years ago

hi, I think I'm done for concentrator support, in my test everything is okay but I can't guarantee any omission. so if you have free time,I hope you can test for me, thanks!

the crafttweaker support on this

click download

Biviho commented 2 years ago

oh, cool, will test it in a couple hour!

Biviho commented 2 years ago

tested it a bit, it looks like yup, addRecipes work while removeRecipes does not, but i personally think it's ok, thematically the default recipes are ok, so i guess they can stay. thank you so much!

ikexing-cn commented 2 years ago

can you give me your srcipt for me look? in my test removeRecipe was okay..

btw, removeRecipe should remove for output not input...

Biviho commented 2 years ago

oh, i might have misread in the api, i used removeRecipes by input, not output, i will do a new test to see if it works and edit this message

Edit: tested it again, it looks like vishroom are removed, while all the other reicpes are not. here the code i used for the test:

import mods.randomtweaker.thaumadditions.IFluxConcentrator;

IFluxConcentrator.removeRecipes(<thaumcraft:vishroom>);
IFluxConcentrator.removeRecipes(<thaumcraft:taint_log>);
IFluxConcentrator.removeRecipes(<thaumadditions:taintkin>);
IFluxConcentrator.removeRecipes(<thaumadditions:taintkin_lit>);
ikexing-cn commented 2 years ago

okay, it's my bad, I moidify method but missing other method.

ikexing-cn commented 2 years ago

because there is more than one block state except vishroom, I don't know how to ensure that all states are deleted correctly. so……maybe you should using IFluxConcentrator.removeRecipes(IBlockstate output) to remove all state, but it's so complicated. maybe I can control IFluxConcentrator.removeRecipes(IItemStack output) to remove all state for block? It depends on what you think.

Biviho commented 2 years ago

well, i guess that if a packev want to remove a recipe, it want to remove all the recipe about a specific item, so if it's possible to remove all the possible states it would be good

ikexing-cn commented 2 years ago

I think maybe I done the needs. in my test everything is okay again, but I still need your help with testing to make sure I don't make some low-level mistakes.

the crafttweaker support on this

click download

Biviho commented 2 years ago

just tested and it's working all fine!

ikexing-cn commented 2 years ago

about vis salt, here are my current thoughts. edited: I don't know why it became Chinese in first


// CTAspect is the responsibility of modtwoaker. I don't want to do create a new again.

IEdibleAspect.addEatCall(CTAspect, (count) -> {
return IPotionEffect;
});
IEdibleAspect.addEatCall(CTAspect, (player, count) { 
// do something
return true | false;
});

what do you think about this?

Biviho commented 2 years ago

you mean for the crafttweaker method or the actual java implementation?

cause for the crafttweaker method i don't think you need to add the player and for the java implementation should be possible to just call the function provided by thaumicAddition, right?

(i might be wrong / misinterpreting your question / not skilled enough in java and functional programming to understand what you mean)

ikexing-cn commented 2 years ago

I mean for the crafttweaker method. maybe the following example will be a little more intuitive to understand.

IEdibleAspect.addEatCall(<aspect:ignis>.internal, function(count) {
    return <potion:minecraft:strength>.makePotionEffect(10 * count, count * count);
});

IEdibleAspect.addEatCall(<aspect:ignis>.internal, function(entityLiving, count) {
    if (entityLiving instanceof IPlayer) {
         var player as IPlayer = entityLiving;
        player.currentItem.mutable().shrink();
        <potion:minecraft:strength>.makePotionEffect(10 * count, count * count);
        return true;
    }
    return false;
});

to handle the formula it could be done with an input string to imitate the formula he already uses, something like: "fixed" for an integer "quadratic" for an integer that will be summed to count count "sqrt" for an integer summed to sqrt(count) "proportional" for an integer that will be placed in a formula: countint/MAX_ESSENTIA (file EdibleAspect.java line 58)

I find it difficult to express more advanced content by relying on these fixed formulas. so I want packev to design its own content.

ikexing-cn commented 2 years ago

okay, I've finished the vis salt support, the above plus IEdibleAspect.removeEatCall(CTAspect aspect) is all there is to it about the following two, I'm afraid I can not give the corresponding support, so I can only stop, thanks for the help, another rt latest version because an pull request did not merge, so temporarily will not be released. the issue will not be closed until I have released a new version. but I can't guarantee that there are no mistaken, so if you have time you can help to test it again.

oh, about the import, using mods.randomtweaker.thaumadditions.IEdibleAspect

click download

Biviho commented 2 years ago

oh yeah! i see it now! a way better implementation than my proposal (i was going for the simplest, dumbest one to implement, your is pretty refined), will test it now

Biviho commented 2 years ago

first thing i noticed: loading a world without doing anything ( i haven't added a script yet ) it says: Error:system:EatFunction is already defined in that package, is this intended?

also, it looks like for both function it require an entityLiving:

IEdibleAspect.addEatCall(<aspect:potentia>.internal, 
function(count) as EatFunction 
{
    return <potion:potioncraft:lightning>.makePotionEffect(10 * count, count * count);
}
);

gives me a [ERROR] ThaumicAddition.zs:14 > Expected 2 arguments, received 1 arguments

lookng into the api, both functions require entityLiving, is this an error or i'm making something wrong? (i based this function on the first example you provided)

    @ZenMethod
    public static void addEatCall(CTAspect aspect, EatFunction function) {
        EdibleAspect.addEatCall(aspect.getInternal(), (entityLiving, count) -> {
            function.apply(count);
            return true;
        });
    }

    @ZenMethod
    public static void addEatCall(CTAspect aspect, EatFunctionWithPlayer function) {
        EdibleAspect.addEatCall(aspect.getInternal(), (entityLiving, count) -> function.apply(CraftTweakerMC.getIEntityLivingBase(entityLiving), count));
    }

Edit: also, i might have found the reason for my first problem: both function definitions are defined as EatFunction on @ZenClass (i guess at least):

@RTRegister
    @ModTotal({"thaumadditions", "modtweaker"})
    @ZenClass("mods.randomtweaker.thaumadditions.EatFunction")
    @FunctionalInterface
    public interface EatFunction {

        IPotionPerformEffect apply(int count);

    }

    @RTRegister
    @ModTotal({"thaumadditions", "modtweaker"})
    @ZenClass("mods.randomtweaker.thaumadditions.EatFunction")
    @FunctionalInterface
    public interface EatFunctionWithPlayer {

        boolean apply(IEntityLivingBase entityLiving, int count);

    }
ikexing-cn commented 2 years ago

some low-level mistake, I'm so overconfident not to do really test... it will be fixed at night .

ikexing-cn commented 2 years ago

hi, the aspect is now IAspect, which no longer depends on modtweaker, but provides compatibility with it. If you use a CTAspect instance you can use as IAspect to convert to RT's aspect. also, you can use IAspect.of(name as string) to get an instance object of IAspect, or null if not found. new is the IAspect.getAllAspects() method, the details of which are in IAspect.

on the other hand, I found that I would lose the number of instances if I didn't return an AspectList instance, so I built an intermediate class of IAspectList support is also provided for modtweaker, and specific information is available from ExpandIAspectList and IAspectList to get them.

the api specifically about IEdibleAspect hasn't changed much, but I added applyToFoodStack and getSalt methods, the details can be found in IEdibleAspect to get them.

If you have any problems, please give me feedback and I will go fix it as soon as possible.

RandomTweaker-1.2.10.zip

Biviho commented 2 years ago

Hi! Great! Will check it later today (around 3-4 h) and let you know

Biviho commented 2 years ago

EatFunction still require me to give 2 inputs, is this intended? even adding 2 inputs i'm still getting an error wich i don't understand:

[INITIALIZATION][CLIENT][ERROR] [crafttweaker]: Error executing {[0:crafttweaker]: ThaumicAddition.zs}: JVMVRFY012 forma stack non coerente; classe=CrafttweakerThaumicAddition4, metodo=apply(Lcrafttweaker/api/entity/IEntityLivingBase;I)Z, pc=17
Exception Details:
  Location:
    CrafttweakerThaumicAddition4.apply(Lcrafttweaker/api/entity/IEntityLivingBase;I)Z @17: JBireturn
  Reason:
    Expected return type 'V' in the function.
  Stackmap Table:
java.lang.VerifyError: JVMVRFY012 forma stack non coerente; classe=CrafttweakerThaumicAddition4, metodo=apply(Lcrafttweaker/api/entity/IEntityLivingBase;I)Z, pc=17
Exception Details:
  Location:
    CrafttweakerThaumicAddition4.apply(Lcrafttweaker/api/entity/IEntityLivingBase;I)Z @17: JBireturn
  Reason:
    Expected return type 'V' in the function.
  Stackmap Table:
    at ThaumicAddition.__script__(ThaumicAddition.zs:17)
    at __ZenMain__.run(ThaumicAddition)
    at crafttweaker.runtime.CrTTweaker.loadScript(CrTTweaker.java:240)
    at crafttweaker.runtime.CrTTweaker.loadScript(CrTTweaker.java:105)
    at youyihj.zenutils.impl.delegate.ZenUtilsTweaker.loadScript(ZenUtilsTweaker.java:47)
    at crafttweaker.mc1120.events.CommonEventHandler.registerRecipes(CommonEventHandler.java:71)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_2074_CommonEventHandler_registerRecipes_Register.invoke(.dynamic)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
    at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:144)
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
    at net.minecraftforge.registries.GameData.fireRegistryEvents(GameData.java:857)
    at net.minecraftforge.common.crafting.CraftingHelper.loadRecipes(CraftingHelper.java:636)
    at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:747)
    at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:336)
    at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:535)
    at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:3931)
    at net.minecraft.client.main.Main.main(SourceFile:123)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:210)
    at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:245)
    at org.multimc.EntryPoint.listen(EntryPoint.java:143)
    at org.multimc.EntryPoint.main(EntryPoint.java:34)

this is the script i'm using, am i doing something wrong? could you give me an exampe of a script that can work to see how it should be wrote?

IEdibleAspect.addEatCall(IAspect.of("potentia"), 
function(entity,count) as EatFunction
{
    return <potion:potioncraft:lightning>.makePotionEffect(10 * count, count * count);
}
);
ikexing-cn commented 2 years ago

EatFunction just one parameter. u dont should get entity for it.

if u need using entity parameter, you should using EatFunctionWithEntity.

example:


IEdibleAspect.addEatCall(IAspect.of("potentia"), 
function(count) as EatFunction
{
    return <potion:potioncraft:lightning>.makePotionEffect(10 * count, count * count);
}
);

IEdibleAspect.addEatCall(IAspect.of("potentia"), 
function(entity,count) as EatFunctionWithEntity
{
    return true;
}
);
Biviho commented 2 years ago

tested both functions: the first one told me that 2 inputs are expected

IEdibleAspect.addEatCall(IAspect.of("potentia"), 
function(count) as EatFunction
{
    return <potion:potioncraft:lightning>.makePotionEffect(10 * count, count * count);
}
);

[INITIALIZATION][CLIENT][ERROR] ThaumicAddition.zs:19 > Expected 2 arguments, received 1 arguments

the second one gave me the same error as before

IEdibleAspect.addEatCall(IAspect.of("potentia"), 
function(entity,count) as EatFunctionWithEntity
{
    return <potion:potioncraft:lightning>.makePotionEffect(10 * count, count * count);
}
);
[INITIALIZATION][CLIENT][ERROR] [crafttweaker]: Error executing {[0:crafttweaker]: ThaumicAddition.zs}: JVMVRFY012 forma stack non coerente; classe=CrafttweakerThaumicAddition4, metodo=apply(Lcrafttweaker/api/entity/IEntityLivingBase;I)Z, pc=17
Exception Details:
  Location:
    CrafttweakerThaumicAddition4.apply(Lcrafttweaker/api/entity/IEntityLivingBase;I)Z @17: JBireturn
  Reason:
    Expected return type 'V' in the function.
  Stackmap Table:
java.lang.VerifyError: JVMVRFY012 forma stack non coerente; classe=CrafttweakerThaumicAddition4, metodo=apply(Lcrafttweaker/api/entity/IEntityLivingBase;I)Z, pc=17
Exception Details:
  Location:
    CrafttweakerThaumicAddition4.apply(Lcrafttweaker/api/entity/IEntityLivingBase;I)Z @17: JBireturn
  Reason:
    Expected return type 'V' in the function.
  Stackmap Table:
    at ThaumicAddition.__script__(ThaumicAddition.zs:18)
    at __ZenMain__.run(ThaumicAddition)
    at crafttweaker.runtime.CrTTweaker.loadScript(CrTTweaker.java:240)
    at crafttweaker.runtime.CrTTweaker.loadScript(CrTTweaker.java:105)
    at youyihj.zenutils.impl.delegate.ZenUtilsTweaker.loadScript(ZenUtilsTweaker.java:47)
    at crafttweaker.mc1120.events.CommonEventHandler.registerRecipes(CommonEventHandler.java:71)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_2074_CommonEventHandler_registerRecipes_Register.invoke(.dynamic)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
    at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:144)
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
    at net.minecraftforge.registries.GameData.fireRegistryEvents(GameData.java:857)
    at net.minecraftforge.common.crafting.CraftingHelper.loadRecipes(CraftingHelper.java:636)
    at net.minecraftforge.fml.common.Loader.initializeMods(Loader.java:747)
    at net.minecraftforge.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:336)
    at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:535)
    at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:3931)
    at net.minecraft.client.main.Main.main(SourceFile:123)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:210)
    at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:245)
    at org.multimc.EntryPoint.listen(EntryPoint.java:143)
    at org.multimc.EntryPoint.main(EntryPoint.java:34)
ikexing-cn commented 2 years ago

okay, zenscript for functional programming is not consistent with java, resulting in the same method parameters, they do not handle internal methods in a form parameter very well, so I modified the class to change the name of the method containing entity to addAdvancedEatCall, which ensures that zenscript can handle parameters better.

Example:

IEdibleAspect.removeEatCall(IAspect.of("aqua"));
IEdibleAspect.removeEatCall(IAspect.of("ignis"));

IEdibleAspect.addEatCall(IAspect.of("ignis"), function(count) {
    return <potion:minecraft:strength>.makePotionEffect(10 * count, count * count);
});

IEdibleAspect.addAdvancedEatCall(IAspect.of("ignis"), function(entity, count) {
    if (entity instanceof IPlayer) {
        var player as IPlayer = entityLiving;
        player.currentItem.mutable().shrink();
        player.addPotionEffect(<potion:minecraft:strength>.makePotionEffect(10 * count, count * count));
        return true;
    }
    return false;
});

some tips, if you need to override an instance of IEdibleAspect, make sure your remove code is on top of the add code in your script.

RandomTweaker-1.2.10.zip

Biviho commented 2 years ago

ok, i've tested a bit and it looks like it's working correctly now! no more errors and i was able to apply potions with all the methods provided by thaumic addition (aura dispenser, pistol, eating food with essentia)

ive had the time to test only the EatFunction, but i will test more advanced uses in the future and let you know if i find something odd

ikexing-cn commented 2 years ago

hi, the new version has been released on https://www.curseforge.com/minecraft/mc-mods/randomtweaker/files/3677505 thanks for the recent help