diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt index 26f8e4227..7a3f1d00c 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/Entity.kt @@ -20,6 +20,7 @@ import de.bixilon.minosoft.data.entities.meta.EntityMetaData import de.bixilon.minosoft.data.inventory.InventorySlots.EquipmentSlots import de.bixilon.minosoft.data.inventory.ItemStack import de.bixilon.minosoft.data.mappings.effects.StatusEffect +import de.bixilon.minosoft.data.mappings.effects.attributes.StatusEffectAttribute import de.bixilon.minosoft.data.mappings.entities.EntityType import de.bixilon.minosoft.data.physics.PhysicsEntity import de.bixilon.minosoft.data.text.ChatComponent @@ -45,6 +46,7 @@ abstract class Entity( protected val random = Random val equipment: MutableMap = mutableMapOf() val activeStatusEffects: MutableMap = synchronizedMapOf() + val modifiers: MutableMap = synchronizedMapOf() @JvmField protected val versionId: Int = connection.version.versionId @@ -73,6 +75,7 @@ abstract class Entity( fun addEffect(effect: StatusEffectInstance) { // effect already applied, maybe the duration or the amplifier changed? activeStatusEffects[effect.statusEffect] = effect + // ToDo: Add status effect modifiers } fun removeEffect(effect: StatusEffect) { diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffect.kt b/src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffect.kt index 7d1b694bb..9082c8728 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffect.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffect.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.mappings.effects import com.google.gson.JsonObject import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.effects.attributes.StatusEffectAttribute import de.bixilon.minosoft.data.mappings.registry.RegistryItem import de.bixilon.minosoft.data.mappings.registry.ResourceLocationDeserializer import de.bixilon.minosoft.data.mappings.registry.Translatable @@ -21,6 +22,7 @@ import de.bixilon.minosoft.data.mappings.versions.Registries import de.bixilon.minosoft.data.text.RGBColor import de.bixilon.minosoft.data.text.RGBColor.Companion.asRGBColor import de.bixilon.minosoft.datafixer.EntityAttributeFixer.fix +import java.util.* data class StatusEffect( override val resourceLocation: ResourceLocation, @@ -28,6 +30,7 @@ data class StatusEffect( override val translationKey: String?, val color: RGBColor, val attributes: Map, + val uuidAttributes: Map, ) : RegistryItem, Translatable { override fun toString(): String { @@ -37,10 +40,13 @@ data class StatusEffect( companion object : ResourceLocationDeserializer { override fun deserialize(mappings: Registries?, resourceLocation: ResourceLocation, data: JsonObject): StatusEffect { val attributes: MutableMap = mutableMapOf() + val uuidAttributes: MutableMap = mutableMapOf() data["attributes"]?.asJsonObject?.let { for ((key, value) in it.entrySet()) { - attributes[ResourceLocation.getResourceLocation(key).fix()] = StatusEffectAttribute.deserialize(value.asJsonObject) + val attribute = StatusEffectAttribute.deserialize(value.asJsonObject) + attributes[ResourceLocation.getResourceLocation(key).fix()] = attribute + uuidAttributes[attribute.uuid] = attribute } } @@ -49,7 +55,8 @@ data class StatusEffect( category = StatusEffectCategories.NAME_MAP[data["category"].asString]!!, translationKey = data["translation_key"]?.asString, color = data["color"].asInt.asRGBColor(), - attributes.toMap(), + attributes = attributes.toMap(), + uuidAttributes = uuidAttributes.toMap(), ) } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/attributes/DefaultEntityAttributes.kt b/src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/DefaultStatusEffectAttributeNames.kt similarity index 91% rename from src/main/java/de/bixilon/minosoft/data/entities/attributes/DefaultEntityAttributes.kt rename to src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/DefaultStatusEffectAttributeNames.kt index daae57b9d..716f3ddee 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/attributes/DefaultEntityAttributes.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/DefaultStatusEffectAttributeNames.kt @@ -11,13 +11,11 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.entities.attributes +package de.bixilon.minosoft.data.mappings.effects.attributes import de.bixilon.minosoft.util.KUtil.asResourceLocation -object DefaultEntityAttributes { - // ToDo: They all had different names before 1.13 - +object DefaultStatusEffectAttributeNames { val GENERIC_MAX_HEALTH = "minecraft:generic.max_health".asResourceLocation() val GENERIC_FOLLOW_RANGE = "minecraft:generic.follow_range".asResourceLocation() val GENERIC_KNOCKBACK_RESISTANCE = "minecraft:generic.knockback_resistance".asResourceLocation() diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/DefaultStatusEffectAttributes.kt b/src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/DefaultStatusEffectAttributes.kt new file mode 100644 index 000000000..1aed3f415 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/DefaultStatusEffectAttributes.kt @@ -0,0 +1,20 @@ +/* + * Minosoft + * Copyright (C) 2021 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.data.mappings.effects.attributes + +import de.bixilon.minosoft.util.KUtil.asUUID + +object DefaultStatusEffectAttributes { + val SPRINT_SPEED_BOOST = StatusEffectAttribute("Sprinting speed boost", "662A6B8D-DA3E-4C1C-8813-96EA6097278D".asUUID(), 0.30000001192092896f, StatusEffectOperations.MULTIPLY_TOTAL) +} diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffectAttribute.kt b/src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/StatusEffectAttribute.kt similarity index 96% rename from src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffectAttribute.kt rename to src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/StatusEffectAttribute.kt index 458b033b2..bcf4617db 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffectAttribute.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/StatusEffectAttribute.kt @@ -10,7 +10,7 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.mappings.effects +package de.bixilon.minosoft.data.mappings.effects.attributes import com.google.gson.JsonObject import de.bixilon.minosoft.util.Util diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffectOperations.kt b/src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/StatusEffectOperations.kt similarity index 95% rename from src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffectOperations.kt rename to src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/StatusEffectOperations.kt index 2bf634862..6c6ac480c 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/effects/StatusEffectOperations.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/effects/attributes/StatusEffectOperations.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.mappings.effects +package de.bixilon.minosoft.data.mappings.effects.attributes import de.bixilon.minosoft.util.KUtil import de.bixilon.minosoft.util.enum.ValuesEnum diff --git a/src/main/java/de/bixilon/minosoft/util/KUtil.kt b/src/main/java/de/bixilon/minosoft/util/KUtil.kt index ec56f1131..6f08708ae 100644 --- a/src/main/java/de/bixilon/minosoft/util/KUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/KUtil.kt @@ -138,4 +138,8 @@ object KUtil { `false` } } + + fun String.asUUID(): UUID { + return Util.getUUIDFromString(this) + } }