From 7b928c69dad091999271a8d594d1090d78088bbf Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 9 Apr 2021 21:10:41 +0200 Subject: [PATCH] rendering: fix bug in fluid renderer, data: save entity object ids in json --- .../data/entities/EntityObjectType.kt | 31 +++++++ .../minosoft/data/entities/EntityObjects.kt | 90 ------------------- .../data/mappings/DefaultRegistries.kt | 6 ++ .../minosoft/data/mappings/blocks/Block.kt | 2 +- .../data/mappings/blocks/BlockState.kt | 4 +- .../data/mappings/registry/Registry.kt | 1 + .../clientbound/play/PacketSpawnObject.java | 5 +- .../minosoft/mapping/default_registries.json | 82 +++++++++++++++++ 8 files changed, 126 insertions(+), 95 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/data/entities/EntityObjectType.kt delete mode 100644 src/main/java/de/bixilon/minosoft/data/entities/EntityObjects.kt diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityObjectType.kt b/src/main/java/de/bixilon/minosoft/data/entities/EntityObjectType.kt new file mode 100644 index 000000000..6ca4d3432 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityObjectType.kt @@ -0,0 +1,31 @@ +/* + * 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.entities + +import com.google.gson.JsonObject +import de.bixilon.minosoft.data.mappings.ResourceLocation +import de.bixilon.minosoft.data.mappings.registry.RegistryItem +import de.bixilon.minosoft.data.mappings.registry.ResourceLocationDeserializer +import de.bixilon.minosoft.data.mappings.versions.VersionMapping + +class EntityObjectType( + override val resourceLocation: ResourceLocation, +) : RegistryItem { + + companion object : ResourceLocationDeserializer { + override fun deserialize(mappings: VersionMapping?, resourceLocation: ResourceLocation, data: JsonObject): EntityObjectType { + return EntityObjectType(resourceLocation) + } + } +} diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityObjects.kt b/src/main/java/de/bixilon/minosoft/data/entities/EntityObjects.kt deleted file mode 100644 index a3559d74e..000000000 --- a/src/main/java/de/bixilon/minosoft/data/entities/EntityObjects.kt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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.entities - -import com.google.common.collect.HashBiMap -import de.bixilon.minosoft.data.DefaultEntityFactories -import de.bixilon.minosoft.data.entities.entities.AreaEffectCloud -import de.bixilon.minosoft.data.entities.entities.Entity -import de.bixilon.minosoft.data.entities.entities.boss.enderdragon.EndCrystal -import de.bixilon.minosoft.data.entities.entities.decoration.ArmorStand -import de.bixilon.minosoft.data.entities.entities.decoration.ItemFrame -import de.bixilon.minosoft.data.entities.entities.decoration.LeashFenceKnotEntity -import de.bixilon.minosoft.data.entities.entities.item.FallingBlock -import de.bixilon.minosoft.data.entities.entities.item.ItemEntity -import de.bixilon.minosoft.data.entities.entities.item.PrimedTNT -import de.bixilon.minosoft.data.entities.entities.projectile.* -import de.bixilon.minosoft.data.entities.entities.vehicle.Boat -import de.bixilon.minosoft.data.entities.entities.vehicle.Minecart -import de.bixilon.minosoft.data.entities.meta.EntityMetaData -import de.bixilon.minosoft.data.mappings.entities.EntityFactory -import de.bixilon.minosoft.protocol.network.connection.PlayConnection -import glm_.vec3.Vec3 - -@Deprecated(message = "We will use json for this soon") -enum class EntityObjects( - val id: Int, - val factory: EntityFactory, -) { - BOAT(1, Boat), - ITEM_STACK(2, ItemEntity), - AREA_EFFECT_CLOUD(3, AreaEffectCloud), - MINECART(10, Minecart), - PRIMED_TNT(50, PrimedTNT), - ENDER_CRYSTAL(51, EndCrystal), - ARROW(60, Arrow), // ToDo: Tipped Arrows - SNOWBALL(61, ThrownSnowball), - EGG(62, ThrownEgg), - FIREBALL(63, LargeFireball), - FIRE_CHARGE(64, SmallFireball), - ENDER_PEARL(65, ThrownEnderPearl), - WITHER_SKULL(66, WitherSkull), - SHULKER_BULLET(67, ShulkerBullet), - LLAMA_SPIT(67, LlamaSpit), - FALLING_BLOCK(70, FallingBlock), - ITEM_FRAME(71, ItemFrame), - EYE_OF_ENDER(72, ThrownEyeOfEnder), - THROWN_POTION(73, ThrownPotion), - - // FALLING_DRAGON_EGG(74, FallingDragonEgg.class), - THROWN_EXP_BOTTLE(75, ThrownExperienceBottle), - FIREWORK(76, FireworkRocketEntity), - LEASH_KNOT(77, LeashFenceKnotEntity), - ARMOR_STAND(78, ArmorStand), - EVOKER_FANGS(78, EvokerFangs), - FISHING_HOOK(90, FishingHook), - SPECTRAL_ARROW(91, SpectralArrow), - DRAGON_FIREBALL(93, DragonFireball), - TRIDENT(94, ThrownTrident); - - - fun build(connection: PlayConnection, position: Vec3, rotation: EntityRotation, entityMetaData: EntityMetaData?, versionId: Int): Entity? { - return DefaultEntityFactories.buildEntity(factory, connection, position, rotation, entityMetaData, versionId) - } - - companion object { - private val ID_OBJECT_MAP = HashBiMap.create() - - @JvmStatic - fun byId(id: Int): EntityObjects? { - return ID_OBJECT_MAP[id] - } - - init { - for (value in values()) { - ID_OBJECT_MAP[value.id] = value - } - } - } - -} diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/DefaultRegistries.kt b/src/main/java/de/bixilon/minosoft/data/mappings/DefaultRegistries.kt index e91225f9c..a4e139e09 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/DefaultRegistries.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/DefaultRegistries.kt @@ -14,10 +14,12 @@ package de.bixilon.minosoft.data.mappings import de.bixilon.minosoft.Minosoft +import de.bixilon.minosoft.data.entities.EntityObjectType import de.bixilon.minosoft.data.entities.meta.EntityMetaData import de.bixilon.minosoft.data.inventory.InventorySlots import de.bixilon.minosoft.data.mappings.registry.PerEnumVersionRegistry import de.bixilon.minosoft.data.mappings.registry.PerVersionRegistry +import de.bixilon.minosoft.data.mappings.registry.Registry import de.bixilon.minosoft.protocol.packets.clientbound.play.title.TitleClientboundPacketFactory import de.bixilon.minosoft.util.json.ResourceLocationJsonMap.toResourceLocationMap @@ -35,6 +37,8 @@ object DefaultRegistries { val TITLE_ACTIONS_REGISTRY = PerEnumVersionRegistry(TitleClientboundPacketFactory.TitleActions) + val ENTITY_OBJECT_REGISTRY: Registry = Registry() + val DEFAULT_PLUGIN_CHANNELS_REGISTRY = PerVersionRegistry() @@ -57,6 +61,8 @@ object DefaultRegistries { DEFAULT_PLUGIN_CHANNELS_REGISTRY.initialize(registriesJson[ResourceLocation("default_plugin_channels")]!!, PluginChannel) + ENTITY_OBJECT_REGISTRY.initialize(registriesJson[ResourceLocation("entity_objects")]!!, null, EntityObjectType) + initialized = true } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Block.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Block.kt index 9c19a7fc9..383b9f4ef 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Block.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Block.kt @@ -55,7 +55,7 @@ open class Block( val block = when (data["class"].asString) { "FluidBlock" -> { val stillFluid = mappings.fluidRegistry.get(data["still_fluid"].asInt) - val flowingFluid = mappings.fluidRegistry.get(data["flowing_fluid"].asInt) + val flowingFluid = mappings.fluidRegistry.get(data["flow_fluid"].asInt) renderOverride = mutableListOf() diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/BlockState.kt b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/BlockState.kt index a0ca69d2c..53b25906e 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/BlockState.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/BlockState.kt @@ -166,8 +166,8 @@ data class BlockState( } owner.renderOverride?.let { - - + renderers.clear() + renderers.addAll(it) } return BlockState( diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/registry/Registry.kt b/src/main/java/de/bixilon/minosoft/data/mappings/registry/Registry.kt index b775e3b30..58c76bd52 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/registry/Registry.kt +++ b/src/main/java/de/bixilon/minosoft/data/mappings/registry/Registry.kt @@ -40,6 +40,7 @@ open class Registry( return valueIdMap[value] ?: parentRegistry?.getId(value)!! } + override fun setParent(parent: Registry?) { this.parentRegistry = parent } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java index abc7df520..8ba2b398e 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketSpawnObject.java @@ -13,10 +13,10 @@ package de.bixilon.minosoft.protocol.packets.clientbound.play; -import de.bixilon.minosoft.data.entities.EntityObjects; import de.bixilon.minosoft.data.entities.EntityRotation; import de.bixilon.minosoft.data.entities.Velocity; import de.bixilon.minosoft.data.entities.entities.Entity; +import de.bixilon.minosoft.data.mappings.DefaultRegistries; import de.bixilon.minosoft.modding.event.events.EntitySpawnEvent; import de.bixilon.minosoft.protocol.network.connection.PlayConnection; import de.bixilon.minosoft.protocol.packets.clientbound.PlayClientboundPacket; @@ -65,7 +65,8 @@ public class PacketSpawnObject extends PlayClientboundPacket { } if (buffer.getVersionId() < V_19W05A) { - this.entity = EntityObjects.byId(type).build(buffer.getConnection(), position, rotation, null, buffer.getVersionId()); // ToDo: Entity meta data tweaking + var entityResourceLocation = DefaultRegistries.INSTANCE.getENTITY_OBJECT_REGISTRY().get(type).getResourceLocation(); + this.entity = buffer.getConnection().getMapping().getEntityRegistry().get(entityResourceLocation).build(buffer.getConnection(), position, rotation, null, buffer.getVersionId()); // ToDo: Entity meta data tweaking } else { this.entity = buffer.getConnection().getMapping().getEntityRegistry().get(type).build(buffer.getConnection(), position, rotation, null, buffer.getVersionId()); } diff --git a/src/main/resources/assets/minosoft/mapping/default_registries.json b/src/main/resources/assets/minosoft/mapping/default_registries.json index 900514b37..1dadb68d3 100644 --- a/src/main/resources/assets/minosoft/mapping/default_registries.json +++ b/src/main/resources/assets/minosoft/mapping/default_registries.json @@ -25,5 +25,87 @@ "name": "minecraft:unregister" } } + }, + "minecraft:entity_objects": { + "0": { + "minecraft:boat": { + "id": 1 + }, + "minecraft:item": { + "id": 2 + }, + "minecraft:area_effect_cloud": { + "id": 3 + }, + "minecraft:minecart": { + "id": 10 + }, + "minecraft:tnt": { + "id": 50 + }, + "minecraft:end_crystal": { + "id": 51 + }, + "minecraft:arrow": { + "id": 60 + }, + "minecraft:snowball": { + "id": 61 + }, + "minecraft:egg": { + "id": 62 + }, + "minecraft:fireball": { + "id": 63 + }, + "minecraft:small_fireball": { + "id": 64 + }, + "minecraft:ender_pearl": { + "id": 65 + }, + "minecraft:wither_skull": { + "id": 66 + }, + "minecraft:llama_spit": { + "id": 67 + }, + "minecraft:falling_block": { + "id": 70 + }, + "minecraft:item_frame": { + "id": 71 + }, + "minecraft:eye_of_ender": { + "id": 72 + }, + "minecraft:potion": { + "id": 73 + }, + "minecraft:experience_bottle": { + "id": 75 + }, + "minecraft:firework_rocket": { + "id": 76 + }, + "minecraft:leash_knot": { + "id": 77 + }, + "minecraft:evoker_fangs": { + "id": 78 + }, + "minecraft:fishing_bobber": { + "id": 90 + }, + "minecraft:spectral_arrow": { + "id": 91 + }, + "minecraft:dragon_fireball": { + "id": 93 + }, + "minecraft:trident": { + "id": 94 + } + } } }