custom craft linear cost config values

This commit is contained in:
alexcrea 2025-07-04 15:24:35 +02:00
parent 0baa1b8b28
commit ec4351e70d
Signed by: alexcrea
GPG key ID: E346CD16413450E3
5 changed files with 57 additions and 31 deletions

View file

@ -63,7 +63,7 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui<AnvilCustomRec
meta.setLore(Arrays.asList( meta.setLore(Arrays.asList(
"§7Should work: §" + (shouldWork ? "aYes" : "cNo"), "§7Should work: §" + (shouldWork ? "aYes" : "cNo"),
"§7Exact count: §" + (recipe.getExactCount() ? "aYes" : "cNo"), "§7Exact count: §" + (recipe.getExactCount() ? "aYes" : "cNo"),
"§7Recipe Xp Cost: §e" + recipe.getXpCostPerCraft() "§7Recipe Xp Cost: §e" + recipe.levelCostPerCraft()
)); ));
@ -87,7 +87,7 @@ public class CustomRecipeConfigGui extends MappedGuiListConfigGui<AnvilCustomRec
AnvilCustomRecipe recipe = new AnvilCustomRecipe( AnvilCustomRecipe recipe = new AnvilCustomRecipe(
name, name,
AnvilCustomRecipe.DEFAULT_EXACT_COUNT_CONFIG, AnvilCustomRecipe.DEFAULT_EXACT_COUNT_CONFIG,
AnvilCustomRecipe.DEFAULT_XP_COST_CONFIG, AnvilCustomRecipe.DEFAULT_XP_LEVEL_COST_CONFIG,
AnvilCustomRecipe.Companion.getDEFAULT_LEFT_ITEM_CONFIG(), AnvilCustomRecipe.Companion.getDEFAULT_LEFT_ITEM_CONFIG(),
AnvilCustomRecipe.Companion.getDEFAULT_RIGHT_ITEM_CONFIG(), AnvilCustomRecipe.Companion.getDEFAULT_RIGHT_ITEM_CONFIG(),
AnvilCustomRecipe.Companion.getDEFAULT_RESULT_ITEM_CONFIG()); AnvilCustomRecipe.Companion.getDEFAULT_RESULT_ITEM_CONFIG());

View file

@ -81,10 +81,10 @@ public class CustomRecipeSubSettingGui extends MappedToListSubSettingGui {
this.anvilRecipe + "." + AnvilCustomRecipe.EXACT_COUNT_CONFIG, AnvilCustomRecipe.DEFAULT_EXACT_COUNT_CONFIG); this.anvilRecipe + "." + AnvilCustomRecipe.EXACT_COUNT_CONFIG, AnvilCustomRecipe.DEFAULT_EXACT_COUNT_CONFIG);
this.xpCostFactory = new IntSettingsGui.IntSettingFactory("§8Recipe Xp Cost", this, this.xpCostFactory = new IntSettingsGui.IntSettingFactory("§8Recipe Xp Cost", this,
this.anvilRecipe +"."+AnvilCustomRecipe.XP_COST_CONFIG, this.anvilRecipe +"."+AnvilCustomRecipe.XP_LEVEL_COST_CONFIG,
ConfigHolder.CUSTOM_RECIPE_HOLDER, ConfigHolder.CUSTOM_RECIPE_HOLDER,
null, null,
costRange.getFirst(), costRange.getLast(), AnvilCustomRecipe.DEFAULT_XP_COST_CONFIG, 1, 5, 10); costRange.getFirst(), costRange.getLast(), AnvilCustomRecipe.DEFAULT_XP_LEVEL_COST_CONFIG, 1, 5, 10);
this.leftItemFactory = new ItemSettingGui.ItemSettingFactory("§eRecipe Left §8Item", this, this.leftItemFactory = new ItemSettingGui.ItemSettingFactory("§eRecipe Left §8Item", this,

View file

@ -130,7 +130,7 @@ class AnvilResultListener : Listener {
if (recipe.leftItem == null) return // in case it changed if (recipe.leftItem == null) return // in case it changed
val amount = CustomRecipeUtil.getCustomRecipeAmount(recipe, leftItem, rightItem) val amount = CustomRecipeUtil.getCustomRecipeAmount(recipe, leftItem, rightItem)
val xpCost = amount * recipe.xpCostPerCraft val xpCost = amount * recipe.levelCostPerCraft
CustomAnvil.log("gamemode: ${player.gameMode != GameMode.CREATIVE}, cost: $xpCost, level: ${player.level}, result: ${player.level < xpCost}") CustomAnvil.log("gamemode: ${player.gameMode != GameMode.CREATIVE}, cost: $xpCost, level: ${player.level}, result: ${player.level < xpCost}")
if ((player.gameMode != GameMode.CREATIVE) && (player.level < xpCost)) return if ((player.gameMode != GameMode.CREATIVE) && (player.level < xpCost)) return

View file

@ -137,7 +137,7 @@ class PrepareAnvilListener : Listener {
if (DependencyManager.tryTreatAnvilResult(event, resultItem)) return true if (DependencyManager.tryTreatAnvilResult(event, resultItem)) return true
// Maybe add an option on custom craft to ignore/not ignore penalty ?? // Maybe add an option on custom craft to ignore/not ignore penalty ??
var xpCost = recipe.xpCostPerCraft * amount var xpCost = recipe.levelCostPerCraft * amount
xpCost += AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.CUSTOM_CRAFT) xpCost += AnvilXpUtil.calculatePenalty(first, null, resultItem, AnvilUseType.CUSTOM_CRAFT)
AnvilXpUtil.setAnvilInvXp(inventory, event.view, player, xpCost, true) AnvilXpUtil.setAnvilInvXp(inventory, event.view, player, xpCost, true)

View file

@ -12,7 +12,10 @@ class AnvilCustomRecipe(
//var exactLeft: Boolean, //var exactLeft: Boolean,
//var exactRight: Boolean, //var exactRight: Boolean,
var xpCostPerCraft: Int, var levelCostPerCraft: Int,
var XpCostPerCraft: Int,
var removeExactXp: Boolean,
var leftItem: ItemStack?, var leftItem: ItemStack?,
var rightItem: ItemStack?, var rightItem: ItemStack?,
@ -25,7 +28,9 @@ class AnvilCustomRecipe(
//const val EXACT_LEFT_CONFIG = "exact_left" //const val EXACT_LEFT_CONFIG = "exact_left"
//const val EXACT_RIGHT_CONFIG = "exact_right" //const val EXACT_RIGHT_CONFIG = "exact_right"
const val XP_COST_CONFIG = "xp_cost" const val XP_LEVEL_COST_CONFIG = "xp_cost"
const val LINEAR_XP_COST_CONFIG = "linear_xp_cost"
const val REMOVE_EXACT_XP_CONFIG = "remove_exact_linear_xp"
const val LEFT_ITEM_CONFIG = "left_item" const val LEFT_ITEM_CONFIG = "left_item"
const val RIGHT_ITEM_CONFIG = "right_item" const val RIGHT_ITEM_CONFIG = "right_item"
@ -36,7 +41,9 @@ class AnvilCustomRecipe(
//val DEFAULT_EXACT_LEFT_CONFIG = true //val DEFAULT_EXACT_LEFT_CONFIG = true
//val DEFAULT_EXACT_RIGHT_CONFIG = true //val DEFAULT_EXACT_RIGHT_CONFIG = true
const val DEFAULT_XP_COST_CONFIG = 1 const val DEFAULT_XP_LEVEL_COST_CONFIG = 1
const val DEFAULT_LINEAR_XP_COST_CONFIG = 0
const val DEFAULT_REMOVE_EXACT_XP_CONFIG = false
val DEFAULT_LEFT_ITEM_CONFIG: ItemStack? = null val DEFAULT_LEFT_ITEM_CONFIG: ItemStack? = null
val DEFAULT_RIGHT_ITEM_CONFIG: ItemStack? = null val DEFAULT_RIGHT_ITEM_CONFIG: ItemStack? = null
@ -45,20 +52,24 @@ class AnvilCustomRecipe(
val XP_COST_CONFIG_RANGE = 0..255 val XP_COST_CONFIG_RANGE = 0..255
fun getFromConfig(name: String, configSection: ConfigurationSection?): AnvilCustomRecipe? { fun getFromConfig(name: String, configSection: ConfigurationSection?): AnvilCustomRecipe? {
if(configSection == null) return null if (configSection == null) return null
return AnvilCustomRecipe( return AnvilCustomRecipe(
name, name,
configSection.getBoolean(EXACT_COUNT_CONFIG, DEFAULT_EXACT_COUNT_CONFIG), configSection.getBoolean(EXACT_COUNT_CONFIG, DEFAULT_EXACT_COUNT_CONFIG),
//configSection.getBoolean(EXACT_LEFT_CONFIG, true), //configSection.getBoolean(EXACT_LEFT_CONFIG, true),
//configSection.getBoolean(EXACT_RIGHT_CONFIG, true), //configSection.getBoolean(EXACT_RIGHT_CONFIG, true),
configSection.getInt(XP_COST_CONFIG, DEFAULT_XP_COST_CONFIG), configSection.getInt(XP_LEVEL_COST_CONFIG, DEFAULT_XP_LEVEL_COST_CONFIG),
configSection.getInt(LINEAR_XP_COST_CONFIG, DEFAULT_LINEAR_XP_COST_CONFIG),
configSection.getBoolean(REMOVE_EXACT_XP_CONFIG, DEFAULT_REMOVE_EXACT_XP_CONFIG),
configSection.getItemStack(LEFT_ITEM_CONFIG, DEFAULT_LEFT_ITEM_CONFIG), configSection.getItemStack(LEFT_ITEM_CONFIG, DEFAULT_LEFT_ITEM_CONFIG),
configSection.getItemStack(RIGHT_ITEM_CONFIG, DEFAULT_RIGHT_ITEM_CONFIG), configSection.getItemStack(RIGHT_ITEM_CONFIG, DEFAULT_RIGHT_ITEM_CONFIG),
configSection.getItemStack(RESULT_ITEM_CONFIG, DEFAULT_RESULT_ITEM_CONFIG), configSection.getItemStack(RESULT_ITEM_CONFIG, DEFAULT_RESULT_ITEM_CONFIG),
) )
} }
fun getFromConfig(name: String): AnvilCustomRecipe? { fun getFromConfig(name: String): AnvilCustomRecipe? {
@ -74,14 +85,16 @@ class AnvilCustomRecipe(
} }
fun saveToFile(writeFile: Boolean, doBackup: Boolean){ fun saveToFile(writeFile: Boolean, doBackup: Boolean) {
val fileConfig = ConfigHolder.CUSTOM_RECIPE_HOLDER.config val fileConfig = ConfigHolder.CUSTOM_RECIPE_HOLDER.config
fileConfig["$name.$EXACT_COUNT_CONFIG"] = exactCount fileConfig["$name.$EXACT_COUNT_CONFIG"] = exactCount
//fileConfig.set("$name.$EXACT_LEFT_CONFIG", exactLeft) //fileConfig.set("$name.$EXACT_LEFT_CONFIG", exactLeft)
//fileConfig.set("$name.$EXACT_RIGHT_CONFIG", exactRight) //fileConfig.set("$name.$EXACT_RIGHT_CONFIG", exactRight)
fileConfig["$name.$XP_COST_CONFIG"] = xpCostPerCraft fileConfig["$name.$XP_LEVEL_COST_CONFIG"] = levelCostPerCraft
fileConfig["$name.$LINEAR_XP_COST_CONFIG"] = XpCostPerCraft
fileConfig["$name.$REMOVE_EXACT_XP_CONFIG"] = removeExactXp
fileConfig["$name.$LEFT_ITEM_CONFIG"] = leftItem fileConfig["$name.$LEFT_ITEM_CONFIG"] = leftItem
fileConfig["$name.$RIGHT_ITEM_CONFIG"] = rightItem fileConfig["$name.$RIGHT_ITEM_CONFIG"] = rightItem
@ -94,19 +107,32 @@ class AnvilCustomRecipe(
} }
@Deprecated("Should use saveToFile(Boolean, Boolean) instead") //TODO determine when an where to save/do backup and remove use of variable like TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE @Deprecated("Should use saveToFile(Boolean, Boolean) instead") //TODO determine when an where to save/do backup and remove use of variable like TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE
fun saveToFile(){ fun saveToFile() {
saveToFile(GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE, GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE) saveToFile(
GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE,
GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE
)
} }
fun updateFromFile(){ fun updateFromFile() {
this.exactCount = ConfigHolder.CUSTOM_RECIPE_HOLDER.config.getBoolean( this.exactCount = ConfigHolder.CUSTOM_RECIPE_HOLDER.config.getBoolean(
"$name.$EXACT_COUNT_CONFIG", "$name.$EXACT_COUNT_CONFIG",
DEFAULT_EXACT_COUNT_CONFIG DEFAULT_EXACT_COUNT_CONFIG
) )
this.xpCostPerCraft = ConfigHolder.CUSTOM_RECIPE_HOLDER.config.getInt( this.levelCostPerCraft = ConfigHolder.CUSTOM_RECIPE_HOLDER.config.getInt(
"$name.$XP_COST_CONFIG", "$name.$XP_LEVEL_COST_CONFIG",
DEFAULT_XP_COST_CONFIG DEFAULT_XP_LEVEL_COST_CONFIG
)
this.XpCostPerCraft = ConfigHolder.CUSTOM_RECIPE_HOLDER.config.getInt(
"$name.$LINEAR_XP_COST_CONFIG",
DEFAULT_LINEAR_XP_COST_CONFIG
)
this.removeExactXp = ConfigHolder.CUSTOM_RECIPE_HOLDER.config.getBoolean(
"$name.$REMOVE_EXACT_XP_CONFIG",
DEFAULT_REMOVE_EXACT_XP_CONFIG
) )
// Update items // Update items
@ -135,30 +161,30 @@ class AnvilCustomRecipe(
// We assume this function can be call only if leftItem != null // We assume this function can be call only if leftItem != null
// Test is valid // Test is valid
if(!validate()) return false if (!validate()) return false
val leftSimilar = leftItem!!.isSimilar(item1) val leftSimilar = leftItem!!.isSimilar(item1)
CustomAnvil.verboseLog("Validated test !") CustomAnvil.verboseLog("Validated test !")
// test of left item // test of left item
if(!leftSimilar) return false // Test similar if (!leftSimilar) return false // Test similar
if(exactCount){ if (exactCount) {
if((leftItem!!.amount != item1.amount)) return false // test exact amount if ((leftItem!!.amount != item1.amount)) return false // test exact amount
}else if(item1.amount < leftItem!!.amount) return false // test if it has at least the amount we ask } else if (item1.amount < leftItem!!.amount) return false // test if it has at least the amount we ask
CustomAnvil.verboseLog("Left item passed !") CustomAnvil.verboseLog("Left item passed !")
// we don't know if right item can be // we don't know if right item can be
if(rightItem == null){ // null test if (rightItem == null) { // null test
if(item2 != null) return false if (item2 != null) return false
}else { } else {
val rightSimilar = rightItem!!.isSimilar(item2) val rightSimilar = rightItem!!.isSimilar(item2)
CustomAnvil.verboseLog("Right similar: $rightSimilar") CustomAnvil.verboseLog("Right similar: $rightSimilar")
if(!rightSimilar) return false // test if similar when not null if (!rightSimilar) return false // test if similar when not null
if(exactCount) { if (exactCount) {
if (rightItem!!.amount != item2!!.amount) return false // test exact amount if (rightItem!!.amount != item2!!.amount) return false // test exact amount
}else if(item2!!.amount < rightItem!!.amount) return false // test if it has at least the amount we ask } else if (item2!!.amount < rightItem!!.amount) return false // test if it has at least the amount we ask
} }
CustomAnvil.verboseLog("Right item passed !") CustomAnvil.verboseLog("Right item passed !")