Skip to content

Commit

Permalink
Update to 1.20.4
Browse files Browse the repository at this point in the history
  • Loading branch information
NichtStudioCode committed Dec 17, 2023
1 parent 2a18576 commit c456080
Show file tree
Hide file tree
Showing 36 changed files with 150 additions and 216 deletions.
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.8
version = 0.16-alpha.1
kotlin.daemon.jvmargs=-Xmx2g
org.gradle.jvmargs=-Xmx2g
13 changes: 6 additions & 7 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ format.version = "1.1"
[versions]
cbf = "0.7"
configurate = "4.2.0-SNAPSHOT"
invui = "1.22"
kotlin = "1.9.10"
ktor = "2.3.1"
paper = "1.20.2-R0.1-SNAPSHOT"
invui = "1.24"
kotlin = "1.9.20"
ktor = "2.3.7"
paper = "1.20.4-R0.1-SNAPSHOT"
paperweight = "1.5.5"
stringremapper = "1.6"
xenondevs-commons = "1.7"
Expand All @@ -31,9 +31,8 @@ cosmic-binary-format = { group = "xyz.xenondevs.cbf", name = "cosmic-binary-form
cosmic-binary-format-netty-adapter = { group = "xyz.xenondevs.cbf", name = "cosmic-binary-format-netty-adapter", version.ref = "cbf" }
fuzzywuzzy = { group = "me.xdrop", name = "fuzzywuzzy", version = "1.4.0" }
gson = { group = "com.google.code.gson", name = "gson", version = "2.10.1" }
inventoryaccess = { group = "xyz.xenondevs.invui", name = "inventory-access-r17", version.ref = "invui" }
inventoryaccess = { group = "xyz.xenondevs.invui", name = "inventory-access-r18", version.ref = "invui" }
invui-kotlin = { group = "xyz.xenondevs.invui", name = "invui-kotlin", version.ref = "invui" }
invui-resourcepack = { group = "xyz.xenondevs.invui", name = "invui-resourcepack", version.ref = "invui" }
jimfs = { group = "com.google.jimfs", name = "jimfs", version = "1.2" }
junit-jupiter = { group = "org.junit.jupiter", name = "junit-jupiter", version = "5.9.0" }
kotlin-reflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin" }
Expand All @@ -50,7 +49,7 @@ maven-resolver-provider = { group = "org.apache.maven", name = "maven-resolver-p
maven-resolver-transport-http = { group = "org.apache.maven.resolver", name = "maven-resolver-transport-http", version = "1.8.2" }
minecraft-asset-downloader = { group = "xyz.xenondevs", name = "minecraft-asset-downloader", version = "1.3" }
minecraft-model-renderer = { group = "xyz.xenondevs", name = "minecraft-model-renderer", version = "1.3" }
nmsutilities = { group = "xyz.xenondevs", name = "nms-utilities", version = "0.15" }
nmsutilities = { group = "xyz.xenondevs", name = "nms-utilities", version = "0.16" }
paper-api = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" }
resource-pack-obfuscator = { group = "xyz.xenondevs", name = "resource-pack-obfuscator", version = "0.4.1" }
specialsource = { group = "net.md-5", name = "SpecialSource", version = "1.11.0" }
Expand Down
1 change: 0 additions & 1 deletion nova/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ dependencies {
compileOnly(project(":nova-api"))
novaLoader(libs.bundles.ktor)
novaLoader(libs.bundles.minecraft.assets)
novaLoader(libs.invui.resourcepack)
novaLoader(variantOf(libs.inventoryaccess) { classifier("remapped-mojang") })
novaLoader(libs.bstats)
novaLoader(libs.bytbase.runtime)
Expand Down
2 changes: 1 addition & 1 deletion nova/src/main/kotlin/xyz/xenondevs/nova/Nova.kt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import xyz.xenondevs.nova.api.material.NovaMaterialRegistry as INovaMaterialRegi
import xyz.xenondevs.nova.api.player.WailaManager as IWailaManager
import xyz.xenondevs.nova.api.tileentity.TileEntityManager as ITileEntityManager

private val REQUIRED_SERVER_VERSION = Version("1.20.2")..Version("1.20.2")
private val REQUIRED_SERVER_VERSION = Version("1.20.4")..Version("1.20.4")
internal val IS_DEV_SERVER: Boolean = System.getProperty("NovaDev") != null
internal lateinit var NOVA: Nova private set
internal lateinit var NOVA_PLUGIN: NovaJavaPlugin private set
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package xyz.xenondevs.nova.command
import com.mojang.brigadier.CommandDispatcher
import net.minecraft.commands.CommandSourceStack
import org.bukkit.Bukkit
import org.bukkit.craftbukkit.v1_20_R2.CraftServer
import org.bukkit.craftbukkit.v1_20_R2.command.VanillaCommandWrapper
import org.bukkit.craftbukkit.v1_20_R3.CraftServer
import org.bukkit.craftbukkit.v1_20_R3.command.VanillaCommandWrapper
import xyz.xenondevs.nova.command.impl.NovaCommand
import xyz.xenondevs.nova.command.impl.NovaRecipeCommand
import xyz.xenondevs.nova.command.impl.NovaUsageCommand
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import xyz.xenondevs.nova.initialize.InitFun
import xyz.xenondevs.nova.initialize.InternalInit
import xyz.xenondevs.nova.initialize.InternalInitStage
import xyz.xenondevs.nova.item.ItemCategories
import xyz.xenondevs.nova.player.PlayerFreezer
import xyz.xenondevs.nova.player.ability.AbilityManager
import xyz.xenondevs.nova.registry.NovaRegistries
import xyz.xenondevs.nova.tileentity.TileEntityManager
Expand Down Expand Up @@ -117,7 +116,6 @@ object Configs {
BossBarOverlayManager.reload()
ChunkReloadWatcher.reload()
UpdateReminder.reload()
PlayerFreezer.reload()
ItemCategories.reload()
WailaManager.reload()
Bukkit.getOnlinePlayers().forEach(Player::updateInventory)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import java.io.File
import java.lang.reflect.Type
import kotlin.reflect.KType
import kotlin.reflect.jvm.javaType
import kotlin.reflect.typeOf

internal object PermanentStorage {

Expand Down Expand Up @@ -82,6 +83,18 @@ internal object PermanentStorage {
return retrieveOrNull(type.javaType, key)
}

inline fun <reified T> retrieveOrStore(key: String, noinline alternativeProvider: () -> T): T {
return retrieveOrStore(typeOf<T>(), key, alternativeProvider)
}

fun <T> retrieveOrStore(type: KType, key: String, alternativeProvider: () -> T): T {
return retrieveOrStore(type.javaType, key, alternativeProvider)
}

fun <T> retrieveOrStore(type: Type, key: String, alternativeProvider: () -> T): T {
return retrieveOrNull(type, key) ?: alternativeProvider().also { store(key, it) }
}

private fun getFile(key: String) = File(dir, "$key.json")

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package xyz.xenondevs.nova.data.recipe

import net.minecraft.core.NonNullList
import net.minecraft.core.RegistryAccess
import net.minecraft.world.Container
import net.minecraft.world.inventory.CraftingContainer
Expand All @@ -10,6 +9,7 @@ import net.minecraft.world.item.crafting.CampfireCookingRecipe
import net.minecraft.world.item.crafting.Ingredient
import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.ShapedRecipe
import net.minecraft.world.item.crafting.ShapedRecipePattern
import net.minecraft.world.item.crafting.ShapelessRecipe
import net.minecraft.world.item.crafting.SmeltingRecipe
import net.minecraft.world.item.crafting.SmithingTransformRecipe
Expand All @@ -27,6 +27,7 @@ import xyz.xenondevs.nova.util.bukkitMirror
import xyz.xenondevs.nova.util.data.nmsCategory
import xyz.xenondevs.nova.util.data.toNmsIngredient
import xyz.xenondevs.nova.util.nmsCopy
import java.util.*
import org.bukkit.inventory.BlastingRecipe as BukkitBlastingRecipe
import org.bukkit.inventory.CampfireRecipe as BukkitCampfireRecipe
import org.bukkit.inventory.FurnaceRecipe as BukkitFurnaceRecipe
Expand Down Expand Up @@ -69,18 +70,15 @@ internal sealed interface ServersideRecipe<T : Recipe<*>> {

internal class NovaShapedRecipe private constructor(
private val bukkitRecipe: BukkitShapedRecipe,
width: Int,
height: Int,
choices: NonNullList<Ingredient>,
private val pattern: ShapedRecipePattern,
result: ItemStack,
val flatChoices: Array<RecipeChoice?>,
val requiredChoices: List<RecipeChoice>,
val choiceMatrix: Array<Array<RecipeChoice?>>
) : ShapedRecipe(
"",
bukkitRecipe.category.nmsCategory,
width, height,
choices, result
bukkitRecipe.category.nmsCategory,
pattern, result
), ServersideRecipe<ShapedRecipe> {

fun getChoice(x: Int, y: Int): RecipeChoice? =
Expand Down Expand Up @@ -119,8 +117,7 @@ internal class NovaShapedRecipe private constructor(

override fun clientsideCopy(): ShapedRecipe {
val result = getResultItem(REGISTRY_ACCESS).clientsideCopy()
val ingredients = NonNullList(ingredients.map(Ingredient::clientsideCopy))
return ShapedRecipe(group, category(), width, height, ingredients, result)
return ShapedRecipe(group, category(), pattern, result)
}

override fun toBukkitRecipe(id: NamespacedKey): BukkitShapedRecipe = bukkitRecipe
Expand All @@ -138,8 +135,11 @@ internal class NovaShapedRecipe private constructor(

return NovaShapedRecipe(
recipe,
width, height,
NonNullList(flatChoices.map(RecipeChoice?::toNmsIngredient)),
ShapedRecipePattern(
width, height,
NonNullList(flatChoices.map(RecipeChoice?::toNmsIngredient)),
Optional.empty()
),
recipe.result.nmsCopy,
flatChoices,
requiredChoices,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
package xyz.xenondevs.nova.data.resources.upload

import kotlinx.coroutines.runBlocking
import net.kyori.adventure.text.Component
import org.spongepowered.configurate.kotlin.extensions.contains
import xyz.xenondevs.commons.provider.immutable.map
import xyz.xenondevs.inventoryaccess.component.AdventureComponentWrapper
import xyz.xenondevs.invui.resourcepack.ForceResourcePack
import xyz.xenondevs.nova.LOGGER
import xyz.xenondevs.nova.data.config.MAIN_CONFIG
import xyz.xenondevs.nova.data.config.PermanentStorage
import xyz.xenondevs.nova.data.config.entry
import xyz.xenondevs.nova.data.resources.ResourceGeneration
import xyz.xenondevs.nova.data.resources.builder.ResourcePackBuilder
import xyz.xenondevs.nova.data.resources.upload.service.CustomMultiPart
Expand All @@ -25,11 +21,6 @@ import xyz.xenondevs.nova.util.data.http.ConnectionUtils
import java.io.File
import java.util.logging.Level

private val PROMPT_MESSAGE by MAIN_CONFIG.entry<Component>("resource_pack", "prompt", "message")
private val PROMPT_FORCE by MAIN_CONFIG.entry<Boolean>("resource_pack", "prompt", "force")
private val ENABLE_PROMPT_FORCE_BYPASS_PERMISSION by MAIN_CONFIG.entry<Boolean>("resource_pack", "prompt", "enableForceBypassPermission")
private val ENABLE_PROMPT_BYPASS_PERMISSION by MAIN_CONFIG.entry<Boolean>("resource_pack", "prompt", "enablePromptBypassPermission")

@InternalInit(
stage = InternalInitStage.POST_WORLD_ASYNC,
dependsOn = [HooksLoader::class, ResourceGeneration.PostWorld::class]
Expand Down Expand Up @@ -60,7 +51,6 @@ internal object AutoUploadManager {

@InitFun
private fun init() {
reloadForceResourcePackSettings()
enable(fromReload = false)

if (url != null)
Expand All @@ -72,7 +62,6 @@ internal object AutoUploadManager {

fun reload() {
disable()
reloadForceResourcePackSettings()
enable(fromReload = true)
}

Expand Down Expand Up @@ -148,15 +137,6 @@ internal object AutoUploadManager {
return url
}

private fun reloadForceResourcePackSettings() {
ForceResourcePack.getInstance().apply {
prompt = AdventureComponentWrapper(PROMPT_MESSAGE)
isForced = PROMPT_FORCE
forceBypassPermission = if (ENABLE_PROMPT_FORCE_BYPASS_PERMISSION) "nova.misc.resourcePack.bypass.force" else null
promptBypassPermission = if (ENABLE_PROMPT_BYPASS_PERMISSION) "nova.misc.resourcePack.bypass.prompt" else null
}
}

private fun forceResourcePack() {
if (selectedService == SelfHost)
SelfHost.startedLatch.await()
Expand All @@ -175,11 +155,8 @@ internal object AutoUploadManager {
this.url = null
return
}
try {
ForceResourcePack.getInstance().setResourcePack(url, true)
} catch (e: Exception) {
LOGGER.log(Level.SEVERE, "Failed to download the resource pack! Is the server down?", e)
}

ForceResourcePack.setResourcePack(url)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package xyz.xenondevs.nova.data.resources.upload

import net.kyori.adventure.text.Component
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent
import xyz.xenondevs.nova.data.config.MAIN_CONFIG
import xyz.xenondevs.nova.data.config.PermanentStorage
import xyz.xenondevs.nova.data.config.entry
import xyz.xenondevs.nova.data.resources.builder.ResourcePackBuilder
import xyz.xenondevs.nova.initialize.InitFun
import xyz.xenondevs.nova.initialize.InternalInit
import xyz.xenondevs.nova.initialize.InternalInitStage
import xyz.xenondevs.nova.util.data.HashUtils
import xyz.xenondevs.nova.util.registerEvents
import java.util.*

private val PROMPT_MESSAGE by MAIN_CONFIG.entry<Component>("resource_pack", "prompt", "message")
private val PROMPT_FORCE by MAIN_CONFIG.entry<Boolean>("resource_pack", "prompt", "force")
private val ENABLE_PROMPT_FORCE_BYPASS_PERMISSION by MAIN_CONFIG.entry<Boolean>("resource_pack", "prompt", "enableForceBypassPermission")
private val ENABLE_PROMPT_BYPASS_PERMISSION by MAIN_CONFIG.entry<Boolean>("resource_pack", "prompt", "enablePromptBypassPermission")

private const val PROMPT_BYPASS_PERMISSION = "nova.misc.resourcePack.bypass.prompt"
private const val FORCE_BYPASS_PERMISSION = "nova.misc.resourcePack.bypass.force"

@InternalInit(stage = InternalInitStage.POST_WORLD)
internal object ForceResourcePack : Listener {

private val packId: UUID = PermanentStorage.retrieveOrStore("force_resource_pack_uuid") { UUID.randomUUID() }

private var hash: ByteArray? = null
private var url: String? = null

@InitFun
private fun init() {
registerEvents()
}

@EventHandler
private fun handleJoin(event: PlayerJoinEvent) {
// TODO: replace with net.kyori.adventure.resource api once available

val url = url
val hash = hash
if (url == null || hash == null)
return

val player = event.player
if (ENABLE_PROMPT_BYPASS_PERMISSION && player.hasPermission(PROMPT_BYPASS_PERMISSION))
return

val force = PROMPT_FORCE && (!ENABLE_PROMPT_FORCE_BYPASS_PERMISSION || !player.hasPermission(FORCE_BYPASS_PERMISSION))
event.player.setResourcePack(packId, url, hash, PROMPT_MESSAGE, force)
}

fun setResourcePack(url: String?) {
if (url != null) {
this.url = url
this.hash = HashUtils.getFileHash(ResourcePackBuilder.RESOURCE_PACK_FILE, "SHA1")
} else {
this.url = null
this.hash = null
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper
import net.minecraft.world.item.enchantment.Enchantments
import org.bukkit.GameMode
import org.bukkit.Statistic
import org.bukkit.craftbukkit.v1_20_R2.event.CraftEventFactory
import org.bukkit.craftbukkit.v1_20_R2.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_20_R3.event.CraftEventFactory
import org.bukkit.craftbukkit.v1_20_R3.util.CraftMagicNumbers
import org.bukkit.enchantments.Enchantment
import org.bukkit.event.player.PlayerItemBreakEvent
import org.bukkit.event.player.PlayerItemDamageEvent
Expand All @@ -30,7 +30,6 @@ import xyz.xenondevs.nova.item.logic.PacketItemData
import xyz.xenondevs.nova.item.vanilla.VanillaMaterialProperty
import xyz.xenondevs.nova.util.bukkitMirror
import xyz.xenondevs.nova.util.callEvent
import xyz.xenondevs.nova.util.item.isEmpty
import xyz.xenondevs.nova.util.item.novaCompound
import xyz.xenondevs.nova.util.item.novaCompoundOrNull
import xyz.xenondevs.nova.util.item.novaItem
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package xyz.xenondevs.nova.item.behavior
import net.minecraft.world.item.Item
import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity
import org.bukkit.Material
import org.bukkit.craftbukkit.v1_20_R2.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_20_R3.util.CraftMagicNumbers
import xyz.xenondevs.commons.collections.enumMap
import xyz.xenondevs.commons.provider.Provider
import xyz.xenondevs.commons.provider.immutable.provider
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import net.kyori.adventure.text.Component
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.item.enchantment.Enchantment.Rarity
import org.bukkit.NamespacedKey
import org.bukkit.enchantments.EnchantmentTarget
import org.bukkit.entity.EntityCategory
import org.bukkit.inventory.EquipmentSlot
Expand Down Expand Up @@ -104,8 +105,9 @@ sealed interface Enchantment {
if (enchantment is VanillaEnchantment)
return BukkitEnchantment.getByKey(key)!!

return object : BukkitEnchantment(key) {
return object : BukkitEnchantment() {

override fun getKey(): NamespacedKey = key
override fun translationKey(): String = enchantment.localizedName
override fun getName(): String = key.toString()
override fun getMaxLevel(): Int = enchantment.maxLevel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper
import net.minecraft.world.item.trading.MerchantOffer
import net.minecraft.world.item.trading.MerchantOffers
import org.bukkit.Material
import org.bukkit.craftbukkit.v1_20_R2.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_20_R3.util.CraftMagicNumbers
import org.bukkit.entity.Player
import org.bukkit.event.Listener
import xyz.xenondevs.commons.collections.takeUnlessEmpty
Expand Down
Loading

0 comments on commit c456080

Please sign in to comment.