Skip to content

Commit

Permalink
Merge branch 'main' into world-format
Browse files Browse the repository at this point in the history
  • Loading branch information
NichtStudioCode committed Nov 25, 2023
2 parents ec5deaa + eeb2d60 commit ef283d5
Show file tree
Hide file tree
Showing 10 changed files with 148 additions and 70 deletions.
8 changes: 5 additions & 3 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,16 @@ body:
required: true
- type: textarea
attributes:
label: Full server log
description: Please provide the complete server log. Just drag & drop the .log file into this text area to upload it to GitHub. Alternatively, you can also upload your log to sites such as [pastebin](https://pastebin.com) or [mclo.gs](https://mclo.gs). __Please always upload your server log, even if you can't see any errors.__
label: Server log
description: Upload the complete server log here. Alternatively, you can also upload your log to sites such as [pastebin](https://pastebin.com) or [mclo.gs](https://mclo.gs) and link to it here. __Please always upload your server log, even if you can't see any errors.__
placeholder: Drag & drop latest.log here
validations:
required: true
- type: textarea
attributes:
label: Errors
description: If any errors or stacktraces appeared in the console, paste them here.
description: If any errors or stacktraces appeared in the console, post them here.
placeholder: Paste error here
render: log
validations:
required: false
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
version = 0.15-alpha.5
version = 0.15-alpha.8
kotlin.daemon.jvmargs=-Xmx2g
org.gradle.jvmargs=-Xmx2g
4 changes: 2 additions & 2 deletions nova-loader/src/main/resources/paper-plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ dependencies:
required: false
PlotSquared:
required: false
GriefDefender:
required: false
ProtectionStones:
required: false
Towny:
Expand All @@ -39,6 +37,8 @@ dependencies:
required: false
WorldEdit:
required: false
LuckPerms:
required: false

permissions:
nova.command.*:
Expand Down
2 changes: 1 addition & 1 deletion nova/src/main/kotlin/xyz/xenondevs/nova/item/NovaItem.kt
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ class NovaItem internal constructor(
* Checks whether this [NovaItem] has an [ItemBehavior] of the specified class [behavior], or a subclass of it.
*/
fun <T : Any> hasBehavior(type: KClass<T>): Boolean =
behaviors.any { it::class == type }
behaviors.any { type.isSuperclassOf(it::class) }

/**
* Gets the first [ItemBehavior] that is an instance of [T], or null if there is none.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package xyz.xenondevs.nova.item.behavior
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.ListTag
import net.minecraft.nbt.StringTag
import net.minecraft.world.item.Items
import org.bukkit.inventory.meta.EnchantmentStorageMeta
import xyz.xenondevs.commons.collections.isNotNullOrEmpty
import xyz.xenondevs.commons.provider.Provider
Expand Down Expand Up @@ -90,6 +91,9 @@ interface Enchantable {
fun isEnchanted(itemStack: BukkitStack): Boolean =
isEnchanted(itemStack.nmsCopy)

fun isEnchantedBook(itemStack: BukkitStack): Boolean =
isEnchantedBook(itemStack.nmsCopy)

fun hasStoredEnchantments(itemStack: BukkitStack): Boolean =
hasStoredEnchantments(itemStack.nmsCopy)

Expand All @@ -99,6 +103,9 @@ interface Enchantable {
fun getStoredEnchantments(itemStack: BukkitStack): Map<Enchantment, Int> =
getStoredEnchantments(itemStack.nmsCopy)

fun getEnchantmentsOrStoredEnchantments(itemStack: BukkitStack): Map<Enchantment, Int> =
getEnchantmentsOrStoredEnchantments(itemStack.nmsCopy)

fun setEnchantments(itemStack: BukkitStack, enchantments: Map<Enchantment, Int>) {
// clear vanilla enchants
for ((enchantment, _) in itemStack.enchantments)
Expand All @@ -116,6 +123,14 @@ interface Enchantable {
setEnchantments(STORED_ENCHANTMENTS_CBF, { ench, lvl -> meta.addStoredEnchant(ench, lvl, true) }, itemStack, enchantments)
}

fun setEnchantmentsOrStoredEnchantments(itemStack: BukkitStack, enchantments: Map<Enchantment, Int>) {
if (isEnchantedBook(itemStack)) {
setStoredEnchantments(itemStack, enchantments)
} else {
setEnchantments(itemStack, enchantments)
}
}

private fun setEnchantments(cbfName: String, addVanillaEnchantment: (BukkitEnchantment, Int) -> Unit, itemStack: BukkitStack, enchantments: Map<Enchantment, Int>) {
val novaEnchantmentsMap = HashMap<Enchantment, Int>()
for ((enchantment, level) in enchantments) {
Expand All @@ -141,6 +156,14 @@ interface Enchantable {
addEnchantment(STORED_ENCHANTMENTS_CBF, { ench, lvl -> meta.addStoredEnchant(ench, lvl, true) }, itemStack, enchantment, level)
}

fun addEnchantmentOrStoredEnchantment(itemStack: BukkitStack, enchantment: Enchantment, level: Int) {
if (isEnchantedBook(itemStack)) {
addStoredEnchantment(itemStack, enchantment, level)
} else {
addEnchantment(itemStack, enchantment, level)
}
}

private fun addEnchantment(cbfName: String, addVanillaEnchantment: (BukkitEnchantment, Int) -> Unit, itemStack: BukkitStack, enchantment: Enchantment, level: Int) {
if (enchantment is VanillaEnchantment) {
addVanillaEnchantment(Enchantment.asBukkitEnchantment(enchantment), level)
Expand All @@ -157,6 +180,14 @@ interface Enchantable {
removeEnchantment(STORED_ENCHANTMENTS_CBF, meta::removeStoredEnchant, itemStack, enchantment)
}

fun removeEnchantmentOrStoredEnchantment(itemStack: BukkitStack, enchantment: Enchantment) {
if (isEnchantedBook(itemStack)) {
removeStoredEnchantment(itemStack, enchantment)
} else {
removeEnchantment(itemStack, enchantment)
}
}

private fun removeEnchantment(cbfName: String, removeVanillaEnchantment: (BukkitEnchantment) -> Unit, itemStack: BukkitStack, enchantment: Enchantment) {
if (enchantment is VanillaEnchantment) {
removeVanillaEnchantment(Enchantment.asBukkitEnchantment(enchantment))
Expand All @@ -178,6 +209,14 @@ interface Enchantable {
itemStack.novaCompoundOrNull?.remove("nova", STORED_ENCHANTMENTS_CBF)
}

fun removeAllEnchantmentsOrStoredEnchantments(itemStack: BukkitStack) {
if (isEnchantedBook(itemStack)) {
removeAllStoredEnchantments(itemStack)
} else {
removeAllEnchantments(itemStack)
}
}

// -- Mojang ItemStack --

@JvmStatic
Expand All @@ -191,6 +230,9 @@ interface Enchantable {
fun isEnchanted(itemStack: MojangStack): Boolean =
isEnchanted(ENCHANTMENTS_CBF, ENCHANTMENTS_NBT, itemStack)

fun isEnchantedBook(itemStack: MojangStack): Boolean =
itemStack.novaItem == null && itemStack.item == Items.ENCHANTED_BOOK

fun hasStoredEnchantments(itemStack: MojangStack): Boolean =
isEnchanted(STORED_ENCHANTMENTS_CBF, STORED_ENCHANTMENTS_NBT, itemStack)

Expand All @@ -206,6 +248,12 @@ interface Enchantable {
fun getStoredEnchantments(itemStack: MojangStack): Map<Enchantment, Int> =
getEnchantments(STORED_ENCHANTMENTS_CBF, STORED_ENCHANTMENTS_NBT, itemStack)

fun getEnchantmentsOrStoredEnchantments(itemStack: MojangStack): Map<Enchantment, Int> {
if (isEnchantedBook(itemStack))
return getStoredEnchantments(itemStack)
return getEnchantments(itemStack)
}

private fun getEnchantments(cbfName: String, nbtName: String, itemStack: MojangStack): Map<Enchantment, Int> {
val enchantments = HashMap<Enchantment, Int>()
itemStack.tag?.getOrNull<ListTag>(nbtName)?.asSequence()
Expand All @@ -226,6 +274,14 @@ interface Enchantable {
fun setStoredEnchantments(itemStack: MojangStack, enchantments: Map<Enchantment, Int>) =
setEnchantments(STORED_ENCHANTMENTS_CBF, STORED_ENCHANTMENTS_NBT, itemStack, enchantments)

fun setEnchantmentsOrStoredEnchantments(itemStack: MojangStack, enchantments: Map<Enchantment, Int>) {
if (isEnchantedBook(itemStack)) {
setStoredEnchantments(itemStack, enchantments)
} else {
setEnchantments(itemStack, enchantments)
}
}

private fun setEnchantments(cbfName: String, nbtName: String, itemStack: MojangStack, enchantments: Map<Enchantment, Int>) {
val vanillaEnchantmentsTag = ListTag()
val novaEnchantmentsMap = HashMap<Enchantment, Int>()
Expand Down Expand Up @@ -261,6 +317,14 @@ interface Enchantable {
fun addStoredEnchantment(itemStack: MojangStack, enchantment: Enchantment, level: Int) =
addEnchantment(STORED_ENCHANTMENTS_CBF, STORED_ENCHANTMENTS_NBT, itemStack, enchantment, level)

fun addEnchantmentOrStoredEnchantment(itemStack: MojangStack, enchantment: Enchantment, level: Int) {
if (isEnchantedBook(itemStack)) {
addStoredEnchantment(itemStack, enchantment, level)
} else {
addEnchantment(itemStack, enchantment, level)
}
}

private fun addEnchantment(cbfName: String, nbtName: String, itemStack: MojangStack, enchantment: Enchantment, level: Int) {
if (enchantment is VanillaEnchantment) {
val id = enchantment.id.toString()
Expand All @@ -281,6 +345,14 @@ interface Enchantable {
fun removeStoredEnchantment(itemStack: MojangStack, enchantment: Enchantment) =
removeEnchantment(STORED_ENCHANTMENTS_CBF, STORED_ENCHANTMENTS_NBT, itemStack, enchantment)

fun removeEnchantmentOrStoredEnchantment(itemStack: MojangStack, enchantment: Enchantment) {
if (isEnchantedBook(itemStack)) {
removeStoredEnchantment(itemStack, enchantment)
} else {
removeEnchantment(itemStack, enchantment)
}
}

private fun removeEnchantment(cbfName: String, nbtName: String, itemStack: MojangStack, enchantment: Enchantment) {
if (enchantment is VanillaEnchantment) {
val id = enchantment.id.toString()
Expand All @@ -297,6 +369,14 @@ interface Enchantable {
fun removeAllStoredEnchantments(itemStack: MojangStack) =
removeAllEnchantments(STORED_ENCHANTMENTS_CBF, STORED_ENCHANTMENTS_NBT, itemStack)

fun removeAllEnchantmentsOrStoredEnchantments(itemStack: MojangStack) {
if (isEnchantedBook(itemStack)) {
removeAllStoredEnchantments(itemStack)
} else {
removeAllEnchantments(itemStack)
}
}

private fun removeAllEnchantments(cbfName: String, nbtName: String, itemStack: MojangStack) {
itemStack.tag?.remove(nbtName)
itemStack.novaCompoundOrNull?.remove("nova", cbfName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,15 +106,17 @@ sealed interface Enchantment {

return object : BukkitEnchantment(key) {

override fun translationKey() = enchantment.localizedName
override fun getName() = key.toString()
override fun translationKey(): String = enchantment.localizedName
override fun getName(): String = key.toString()
override fun getMaxLevel(): Int = enchantment.maxLevel
override fun getStartLevel(): Int = enchantment.minLevel
override fun getItemTarget(): EnchantmentTarget = EnchantmentTarget.ALL
override fun isTreasure(): Boolean = enchantment.isTreasure
override fun isCursed(): Boolean = enchantment.isCurse
override fun isTradeable() = enchantment.isTradeable
override fun isTradeable(): Boolean = enchantment.isTradeable
override fun isDiscoverable() = enchantment.isTableDiscoverable
override fun getMinModifiedCost(level: Int): Int = enchantment.getTableLevelRequirement(level).first
override fun getMaxModifiedCost(level: Int): Int = enchantment.getTableLevelRequirement(level).last
override fun getRarity(): EnchantmentRarity = EnchantmentRarity.COMMON // TODO: find closest match
override fun getDamageIncrease(level: Int, entityCategory: EntityCategory): Float = 0f
override fun getActiveSlots(): Set<EquipmentSlot> = emptySet() // TODO
Expand Down
Loading

0 comments on commit ef283d5

Please sign in to comment.