change color configs & add do consume to lore removal

This commit is contained in:
alexcrea 2025-03-17 17:20:29 +01:00
parent 4cbfb6eab0
commit 51dbbccc1c
No known key found for this signature in database
GPG key ID: 43FD265DB0DBF91F
6 changed files with 199 additions and 202 deletions

View file

@ -352,22 +352,27 @@ class AnvilResultListener : Listener {
val lore = ArrayList<String>(meta.lore!!)
if (lore.isEmpty()) return false
// Uncolor the page
AnvilLoreEditUtil.uncolorLines(player, lore, LoreEditType.REMOVE_BOOK)
val rightCopy : ItemStack?
if (LoreEditType.APPEND_PAPER.doConsume) {
rightCopy = null
} else {
// Uncolor the page
AnvilLoreEditUtil.uncolorLines(player, lore, LoreEditType.REMOVE_BOOK)
val bookPage = StringBuilder()
lore.forEach {
if (bookPage.isNotEmpty()) bookPage.append('\n')
bookPage.append(it)
val bookPage = StringBuilder()
lore.forEach {
if (bookPage.isNotEmpty()) bookPage.append('\n')
bookPage.append(it)
}
val resultPage = bookPage.toString()
//TODO maybe check page size ? bc it may be too big ???
rightCopy = rightItem.clone()
bookMeta.setPages(resultPage)
rightCopy.itemMeta = bookMeta
}
val resultPage = bookPage.toString()
//TODO maybe check page size ? bc it may be too big ???
val rightCopy = rightItem.clone()
bookMeta.setPages(resultPage)
rightCopy.itemMeta = bookMeta
return extractAnvilResult(
event, player, inventory,
null, 0,
@ -428,23 +433,28 @@ class AnvilResultListener : Listener {
val lore = leftMeta.lore!!
if (lore.isEmpty()) return false
val removeEnd = LoreEditConfigUtil.paperLoreOrderIsEnd
var line = if (removeEnd) lore[lore.size - 1]
else lore[0]
// Overkill but uncolor the line
val tempList = ArrayList<String>(1)
tempList.add(line)
AnvilLoreEditUtil.uncolorLines(player, tempList, LoreEditType.REMOVE_PAPER)
line = tempList[0]
// Create result item
val rightClone = rightItem.clone()
rightClone.amount = 1
val rightClone: ItemStack?
if(LoreEditType.REMOVE_PAPER.doConsume){
rightClone = null
}else{
val removeEnd = LoreEditConfigUtil.paperLoreOrderIsEnd
var line = if (removeEnd) lore[lore.size - 1]
else lore[0]
val resultMeta = rightClone.itemMeta ?: return false
resultMeta.setDisplayName(line)
rightClone.itemMeta = resultMeta
// Overkill but uncolor the line
val tempList = ArrayList<String>(1)
tempList.add(line)
AnvilLoreEditUtil.uncolorLines(player, tempList, LoreEditType.REMOVE_PAPER)
line = tempList[0]
rightClone = rightItem.clone()
rightClone.amount = 1
val resultMeta = rightClone.itemMeta ?: return false
resultMeta.setDisplayName(line)
rightClone.itemMeta = resultMeta
}
return if (rightItem.amount > 1) {
extractAnvilResult(

View file

@ -227,21 +227,10 @@ object AnvilLoreEditUtil {
return xpCost
}
private fun colorLines(player: Permissible, lines: ArrayList<String>, useType: LoreEditType): Int {
val canUseHex: Boolean
val canUseColorCode: Boolean
val colorCost: Int
// If is book
if (useType == LoreEditType.REMOVE_BOOK || useType == LoreEditType.APPEND_BOOK) {
canUseHex = LoreEditConfigUtil.bookAllowHexColor
canUseColorCode = LoreEditConfigUtil.bookAllowColorCode
colorCost = LoreEditConfigUtil.bookUseColorCost
} // Else if is paper
else {
canUseHex = LoreEditConfigUtil.paperAllowHexColor
canUseColorCode = LoreEditConfigUtil.paperAllowColorCode
colorCost = LoreEditConfigUtil.paperUseColorCost
}
private fun colorLines(player: Permissible, lines: ArrayList<String>, editType: LoreEditType): Int {
val canUseHex = editType.allowHexColor
val canUseColorCode = editType.allowColorCode
val colorCost = editType.useColorCost
// Now handle color of each lines
var hasUsedColor = false
@ -268,21 +257,8 @@ object AnvilLoreEditUtil {
}
}
fun uncolorLines(player: Permissible, lines: ArrayList<String>, useType: LoreEditType): Int {
val canUseHex: Boolean
val canUseColorCode: Boolean
val colorCost: Int
// If is book
if (useType == LoreEditType.REMOVE_BOOK || useType == LoreEditType.APPEND_BOOK) {
canUseHex = LoreEditConfigUtil.bookAllowHexColor
canUseColorCode = LoreEditConfigUtil.bookAllowColorCode
colorCost = LoreEditConfigUtil.bookUseColorCost
} // Else if is paper
else {
canUseHex = LoreEditConfigUtil.paperAllowHexColor
canUseColorCode = LoreEditConfigUtil.paperAllowColorCode
colorCost = LoreEditConfigUtil.paperUseColorCost
}
fun uncolorLines(player: Permissible, lines: ArrayList<String>, editType: LoreEditType): Int {
if(!editType.shouldRemoveColorOnLoreRemoval) return 0
// Now handle color of each lines
var hasUndidColor = false
@ -292,7 +268,7 @@ object AnvilLoreEditUtil {
val lineUndidColor = AnvilColorUtil.revertColor(
uncoloredLine,
player,
false, canUseColorCode, canUseHex,
false, true, true,
AnvilColorUtil.ColorUseType.LORE_EDIT
)
@ -303,7 +279,7 @@ object AnvilLoreEditUtil {
}
return if (hasUndidColor) {
colorCost
editType.removeColorCost
} else {
0
}

View file

@ -15,13 +15,12 @@ object LoreEditConfigUtil {
const val PAPER_PERMISSION_NEEDED = "lore_edit.paper.use_permission"
// Color configs path
const val COLOR_BOOK_COLOR_CODE = "lore_edit.book_and_quil.color.allow_color_code"
const val COLOR_BOOK_HEX = "lore_edit.book_and_quil.color.allow_hexadecimal_color"
const val COLOR_BOOK_COST = "lore_edit.book_and_quil.color.use_cost"
const val ALLOW_COLOR_CODE = "allow_color_code"
const val ALLOW_HEX_COLOR = "allow_hexadecimal_color"
const val USE_COLOR_COST = "use_cost"
const val COLOR_PAPER_COLOR_CODE = "lore_edit.paper.color.allow_color_code"
const val COLOR_PAPER_HEX = "lore_edit.paper.color.allow_hexadecimal_color"
const val COLOR_PAPER_COST = "lore_edit.paper.color.use_cost"
const val REMOVE_COLOR_ON_LORE_REMOVE = "remove_color_on_remove"
const val REMOVE_COLOR_COST = "remove_color_cost"
// Lore order config path
const val PAPER_EDIT_ORDER = "lore_edit.paper.order"
@ -41,13 +40,12 @@ object LoreEditConfigUtil {
const val DEFAULT_PAPER_PERMISSION_NEEDED = true
// Color configs defaults
const val DEFAULT_COLOR_BOOK_COLOR_CODE = true
const val DEFAULT_COLOR_BOOK_HEX = true
const val DEFAULT_COLOR_BOOK_COST = 0
const val DEFAULT_ALLOW_COLOR_CODE = true
const val DEFAULT_ALLOW_HEX_COLOR = true
const val DEFAULT_USE_COLOR_COST = 0
const val DEFAULT_COLOR_PAPER_COLOR_CODE = true
const val DEFAULT_COLOR_PAPER_HEX = true
const val DEFAULT_COLOR_PAPER_COST = 0
const val DEFAULT_REMOVE_COLOR_ON_LORE_REMOVE = false
const val DEFAULT_REMOVE_COLOR_COST = 0
// Lore order config default
const val DEFAULT_PAPER_EDIT_ORDER = "end"
@ -59,8 +57,8 @@ object LoreEditConfigUtil {
val FIXED_COST_RANGE = 0..1000
val PER_LINE_COST_RANGE = 0..1000
private val COLOR_BOOK_COST_RANGE = 0..1000
private val COLOR_PAPER_COST_RANGE = 0..1000
val USE_COLOR_COST_RANGE = 0..1000
val REMOVE_COLOR_COST_RANGE = 0..1000
// -------------------
// Generic Get methods
@ -102,72 +100,4 @@ object LoreEditConfigUtil {
// Color Get methods
// -----------------
// book edit functions
/**
* Allow usage of color code on book lore edit
*/
val bookAllowColorCode: Boolean
get() {
return CONFIG
.config
.getBoolean(COLOR_BOOK_COLOR_CODE, DEFAULT_COLOR_BOOK_COLOR_CODE)
}
/**
* Allow usage of hexadecimal color on book lore edit
*/
val bookAllowHexColor: Boolean
get() {
return CONFIG
.config
.getBoolean(COLOR_BOOK_HEX, DEFAULT_COLOR_BOOK_HEX)
}
/**
* Cost when using either color code and hex color on book edit
*/
val bookUseColorCost: Int
get() {
return CONFIG
.config
.getInt(COLOR_BOOK_COST, DEFAULT_COLOR_BOOK_COST)
.takeIf { it in COLOR_BOOK_COST_RANGE }
?: DEFAULT_COLOR_BOOK_COST
}
// paper edit functions
/**
* Allow usage of color code on paper lore edit
*/
val paperAllowColorCode: Boolean
get() {
return CONFIG
.config
.getBoolean(COLOR_PAPER_COLOR_CODE, DEFAULT_COLOR_PAPER_COLOR_CODE)
}
/**
* Allow usage of hexadecimal color on paper lore edit
*/
val paperAllowHexColor: Boolean
get() {
return CONFIG
.config
.getBoolean(COLOR_PAPER_HEX, DEFAULT_COLOR_PAPER_HEX)
}
/**
* Cost when using either color code and hex color on paper edit
*/
val paperUseColorCost: Int
get() {
return CONFIG
.config
.getInt(COLOR_PAPER_COST, DEFAULT_COLOR_PAPER_COST)
.takeIf { it in COLOR_PAPER_COST_RANGE }
?: DEFAULT_COLOR_PAPER_COST
}
}

View file

@ -1,6 +1,18 @@
package xyz.alexcrea.cuanvil.util.config
import xyz.alexcrea.cuanvil.util.AnvilUseType
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.ALLOW_COLOR_CODE
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.ALLOW_HEX_COLOR
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.DEFAULT_ALLOW_COLOR_CODE
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.DEFAULT_ALLOW_HEX_COLOR
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.DEFAULT_REMOVE_COLOR_COST
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.DEFAULT_REMOVE_COLOR_ON_LORE_REMOVE
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.DEFAULT_USE_COLOR_COST
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.REMOVE_COLOR_COST
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.REMOVE_COLOR_COST_RANGE
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.REMOVE_COLOR_ON_LORE_REMOVE
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.USE_COLOR_COST
import xyz.alexcrea.cuanvil.util.config.LoreEditConfigUtil.USE_COLOR_COST_RANGE
import xyz.alexcrea.cuanvil.config.ConfigHolder.DEFAULT_CONFIG as CONFIG
enum class LoreEditType(
@ -10,9 +22,9 @@ enum class LoreEditType(
val isMultiLine: Boolean,
) {
APPEND_BOOK("lore_edit.book_and_quil.append", AnvilUseType.LORE_EDIT_BOOK_APPEND, true, true),
REMOVE_BOOK("lore_edit.book_and_quil.remove", AnvilUseType.LORE_EDIT_BOOK_REMOVE,false, true),
APPEND_PAPER("lore_edit.paper.append_line", AnvilUseType.LORE_EDIT_PAPER_APPEND,true, false),
REMOVE_PAPER("lore_edit.paper.remove_line", AnvilUseType.LORE_EDIT_PAPER_REMOVE,false, false),
REMOVE_BOOK("lore_edit.book_and_quil.remove", AnvilUseType.LORE_EDIT_BOOK_REMOVE, false, true),
APPEND_PAPER("lore_edit.paper.append_line", AnvilUseType.LORE_EDIT_PAPER_APPEND, true, false),
REMOVE_PAPER("lore_edit.paper.remove_line", AnvilUseType.LORE_EDIT_PAPER_REMOVE, false, false),
;
/**
@ -55,10 +67,70 @@ enum class LoreEditType(
*/
val doConsume: Boolean
get() {
if (!isAppend) throw IllegalStateException("Lore edit Consume test should not happen on append")
return CONFIG
.config
.getBoolean("${rootPath}.${LoreEditConfigUtil.DO_CONSUME}", LoreEditConfigUtil.DEFAULT_DO_CONSUME)
}
/**
* Allow usage of color code on lore add
*/
val allowColorCode: Boolean
get() {
if (!isAppend) throw IllegalStateException("Can only call with an append edit type")
return CONFIG
.config
.getBoolean("$rootPath.$ALLOW_COLOR_CODE", DEFAULT_ALLOW_COLOR_CODE)
}
/**
* Allow usage of hexadecimal color on lore add
*/
val allowHexColor: Boolean
get() {
if (!isAppend) throw IllegalStateException("Can only call with an append edit type")
return CONFIG
.config
.getBoolean("${rootPath}.$ALLOW_HEX_COLOR", DEFAULT_ALLOW_HEX_COLOR)
}
/**
* Cost when using either color code and hex color on lore add
*/
val useColorCost: Int
get() {
if (!isAppend) throw IllegalStateException("Can only call with an append edit type")
return CONFIG
.config
.getInt("${rootPath}.$USE_COLOR_COST", DEFAULT_USE_COLOR_COST)
.takeIf { it in USE_COLOR_COST_RANGE }
?: DEFAULT_USE_COLOR_COST
}
/**
* Should the color code & hex color should get removed on lore remove
*/
val shouldRemoveColorOnLoreRemoval: Boolean
get() {
if (isAppend) throw IllegalStateException("Can only call with a remove edit type")
return CONFIG
.config
.getBoolean("${rootPath}.$REMOVE_COLOR_ON_LORE_REMOVE", DEFAULT_REMOVE_COLOR_ON_LORE_REMOVE)
}
/**
* Cost when using either color code and hex color on lore remove
*/
val removeColorCost: Int
get() {
if (isAppend) throw IllegalStateException("Can only call with a remove edit type")
return CONFIG
.config
.getInt("${rootPath}.$REMOVE_COLOR_COST", DEFAULT_REMOVE_COLOR_COST)
.takeIf { it in REMOVE_COLOR_COST_RANGE }
?: DEFAULT_REMOVE_COLOR_COST
}
}