mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
custom craft linear cost config values
This commit is contained in:
parent
0baa1b8b28
commit
ec4351e70d
5 changed files with 57 additions and 31 deletions
|
|
@ -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());
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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,16 +52,20 @@ 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),
|
||||||
|
|
||||||
|
|
@ -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 !")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue