data: wip: Improve item storing

This commit is contained in:
Bixilon 2021-03-29 20:14:25 +02:00
parent 9780ac1d1a
commit 4e918d7c6f
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
10 changed files with 64 additions and 24 deletions

View File

@ -15,8 +15,8 @@ package de.bixilon.minosoft.data.entities.entities.animal.horse
import de.bixilon.minosoft.data.entities.EntityMetaDataFields
import de.bixilon.minosoft.data.entities.EntityRotation
import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction
import de.bixilon.minosoft.data.mappings.Item
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.mappings.items.Item
import de.bixilon.minosoft.protocol.network.Connection
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions
import glm_.vec3.Vec3

View File

@ -19,7 +19,7 @@ import de.bixilon.minosoft.data.entities.EntityMetaDataFields;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.entities.entities.EntityMetaDataFunction;
import de.bixilon.minosoft.data.entities.entities.LivingEntity;
import de.bixilon.minosoft.data.mappings.Item;
import de.bixilon.minosoft.data.mappings.items.Item;
import de.bixilon.minosoft.data.player.Hands;
import de.bixilon.minosoft.protocol.network.Connection;
import de.bixilon.minosoft.util.nbt.tag.CompoundTag;
@ -98,7 +98,7 @@ public class PlayerEntity extends LivingEntity {
}
public Gamemodes getGamemode() {
return gamemode;
return this.gamemode;
}
public void setGamemode(Gamemodes gamemode) {

View File

@ -122,10 +122,21 @@ public class InventorySlots {
}
return value;
}
public static EntityInventorySlots get(String name) {
return switch (name) {
case "mainhand" -> MAIN_HAND;
case "offhand" -> OFF_HAND;
case "feet" -> BOOTS;
case "legs" -> LEGGINGS;
case "chest" -> CHESTPLATE;
case "head" -> HELMET;
default -> throw new IllegalArgumentException("Invalid equipment slot " + name);
};
}
}
public interface InventoryInterface {
int getId(int versionId);
}
}

View File

@ -14,8 +14,8 @@
package de.bixilon.minosoft.data.inventory;
import de.bixilon.minosoft.data.mappings.Enchantment;
import de.bixilon.minosoft.data.mappings.Item;
import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.data.mappings.items.Item;
import de.bixilon.minosoft.data.mappings.versions.Version;
import de.bixilon.minosoft.data.mappings.versions.VersionMapping;
import de.bixilon.minosoft.data.text.ChatComponent;

View File

@ -13,10 +13,10 @@
package de.bixilon.minosoft.data.mappings.blocks
import com.google.gson.JsonObject
import de.bixilon.minosoft.data.mappings.Item
import de.bixilon.minosoft.data.mappings.RegistryItem
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.mappings.ResourceLocationDeserializer
import de.bixilon.minosoft.data.mappings.items.Item
import de.bixilon.minosoft.data.mappings.versions.VersionMapping
import de.bixilon.minosoft.data.text.RGBColor
import de.bixilon.minosoft.gui.rendering.TintColorCalculator

View File

@ -1,6 +1,6 @@
/*
* Minosoft
* Copyright (C) 2020 Moritz Zwerger
* 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.
*
@ -10,31 +10,34 @@
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.mappings
package de.bixilon.minosoft.data.mappings.items
import com.google.gson.JsonObject
import de.bixilon.minosoft.data.Rarities
import de.bixilon.minosoft.data.mappings.RegistryItem
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.mappings.ResourceLocationDeserializer
import de.bixilon.minosoft.data.mappings.items.armor.ArmorItem
import de.bixilon.minosoft.data.mappings.versions.VersionMapping
data class Item(
open class Item(
override val resourceLocation: ResourceLocation,
val rarity: Rarities = Rarities.COMMON,
val maxStackSize: Int = 64,
val maxDamage: Int = 0,
val isFireResistant: Boolean = false,
val descriptionId: String?,
data: JsonObject,
) : RegistryItem {
val rarity: Rarities = data["rarity"]?.asInt?.let { Rarities.VALUES[it] } ?: Rarities.COMMON
val maxStackSize: Int = data["max_stack_size"]?.asInt ?: 64
val maxDamage: Int = data["max_damage"]?.asInt ?: 64
val isFireResistant: Boolean = data["is_fire_resistant"]?.asBoolean ?: false
val translationKey: String? = data["description_id"]?.asString
companion object : ResourceLocationDeserializer<Item> {
override fun deserialize(mappings: VersionMapping, resourceLocation: ResourceLocation, data: JsonObject): Item {
return Item(
resourceLocation = resourceLocation,
rarity = data["rarity"]?.asInt?.let { Rarities.VALUES[it] } ?: Rarities.COMMON,
maxStackSize = data["max_stack_size"]?.asInt ?: 64,
maxDamage = data["max_damage"]?.asInt ?: 0,
isFireResistant = data["is_fire_resistant"]?.asBoolean ?: false,
descriptionId = data["description_id"]?.asString,
)
return when (data["class"].asString) {
"ArmorItem" -> ArmorItem(resourceLocation, data)
// "Item" -> Item(resourceLocation, data)
// else -> TODO("Can not find item class: ${data["class"].asString}")
else -> Item(resourceLocation, data)
}
}
}
}

View File

@ -14,7 +14,6 @@
package de.bixilon.minosoft.data.mappings.items
import com.google.gson.JsonObject
import de.bixilon.minosoft.data.mappings.Item
import de.bixilon.minosoft.data.mappings.Registry
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.mappings.ResourceLocationDeserializer

View File

@ -0,0 +1,26 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.data.mappings.items.armor
import com.google.gson.JsonObject
import de.bixilon.minosoft.data.inventory.InventorySlots
import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.mappings.items.Item
open class ArmorItem(resourceLocation: ResourceLocation, data: JsonObject) : Item(resourceLocation, data) {
val protection = data["defense"].asFloat
val toughness = data["toughness"].asFloat
val equipmentSlot = data["equipment_slot"].asString.let { InventorySlots.EntityInventorySlots.get(it) }
val knockbackResistance = data["knockback_resistance"]?.asFloat ?: 0.0f
}

View File

@ -25,6 +25,7 @@ import de.bixilon.minosoft.data.mappings.biomes.BiomeCategory
import de.bixilon.minosoft.data.mappings.biomes.BiomePrecipitation
import de.bixilon.minosoft.data.mappings.blocks.Block
import de.bixilon.minosoft.data.mappings.blocks.BlockState
import de.bixilon.minosoft.data.mappings.items.Item
import de.bixilon.minosoft.data.mappings.items.ItemRegistry
import de.bixilon.minosoft.data.mappings.materials.Material
import de.bixilon.minosoft.data.mappings.particle.Particle

View File

@ -18,7 +18,7 @@ import de.bixilon.minosoft.data.entities.EntityMetaData;
import de.bixilon.minosoft.data.entities.EntityRotation;
import de.bixilon.minosoft.data.entities.Velocity;
import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity;
import de.bixilon.minosoft.data.mappings.Item;
import de.bixilon.minosoft.data.mappings.items.Item;
import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent;
import de.bixilon.minosoft.protocol.network.Connection;
import de.bixilon.minosoft.protocol.packets.ClientboundPacket;