mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 18:34:56 -04:00
fix some bugs, inventory enhancements
This commit is contained in:
parent
3a1ece26e8
commit
a85ec4c68e
@ -70,7 +70,7 @@ abstract class Entity(
|
|||||||
var rotation: EntityRotation,
|
var rotation: EntityRotation,
|
||||||
) : PhysicsEntity {
|
) : PhysicsEntity {
|
||||||
protected val random = Random
|
protected val random = Random
|
||||||
val equipment: MutableMap<EquipmentSlots, ItemStack> = mutableMapOf()
|
open val equipment: MutableMap<EquipmentSlots, ItemStack> = mutableMapOf()
|
||||||
val activeStatusEffects: MutableMap<StatusEffect, StatusEffectInstance> = synchronizedMapOf()
|
val activeStatusEffects: MutableMap<StatusEffect, StatusEffectInstance> = synchronizedMapOf()
|
||||||
val attributes: MutableMap<ResourceLocation, MutableMap<UUID, StatusEffectAttributeInstance>> = synchronizedMapOf()
|
val attributes: MutableMap<ResourceLocation, MutableMap<UUID, StatusEffectAttributeInstance>> = synchronizedMapOf()
|
||||||
|
|
||||||
|
@ -32,6 +32,9 @@ class InventorySlots {
|
|||||||
companion object : ValuesEnum<EquipmentSlots> {
|
companion object : ValuesEnum<EquipmentSlots> {
|
||||||
override val VALUES = values()
|
override val VALUES = values()
|
||||||
override val NAME_MAP: Map<String, EquipmentSlots> = KUtil.getEnumValues(VALUES)
|
override val NAME_MAP: Map<String, EquipmentSlots> = KUtil.getEnumValues(VALUES)
|
||||||
|
|
||||||
|
|
||||||
|
val ARMOR_SLOTS = arrayOf(FEET, LEGS, CHEST, HEAD)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ import de.bixilon.minosoft.data.entities.EntityRotation
|
|||||||
import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity
|
import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity
|
||||||
import de.bixilon.minosoft.data.entities.entities.player.RemotePlayerEntity
|
import de.bixilon.minosoft.data.entities.entities.player.RemotePlayerEntity
|
||||||
import de.bixilon.minosoft.data.inventory.InventorySlots
|
import de.bixilon.minosoft.data.inventory.InventorySlots
|
||||||
|
import de.bixilon.minosoft.data.inventory.ItemStack
|
||||||
import de.bixilon.minosoft.data.physics.PhysicsConstants
|
import de.bixilon.minosoft.data.physics.PhysicsConstants
|
||||||
import de.bixilon.minosoft.data.registries.AABB
|
import de.bixilon.minosoft.data.registries.AABB
|
||||||
import de.bixilon.minosoft.data.registries.blocks.DefaultBlocks
|
import de.bixilon.minosoft.data.registries.blocks.DefaultBlocks
|
||||||
@ -201,6 +202,9 @@ class LocalPlayerEntity(
|
|||||||
val reachDistance: Double
|
val reachDistance: Double
|
||||||
get() = (gamemode == Gamemodes.CREATIVE).decide(5.0, 4.5)
|
get() = (gamemode == Gamemodes.CREATIVE).decide(5.0, 4.5)
|
||||||
|
|
||||||
|
override val equipment: MutableMap<InventorySlots.EquipmentSlots, ItemStack>
|
||||||
|
get() = inventory.equipment
|
||||||
|
|
||||||
private fun sendMovementPackets() {
|
private fun sendMovementPackets() {
|
||||||
if (Minosoft.config.config.game.camera.disableMovementSending) {
|
if (Minosoft.config.config.game.camera.disableMovementSending) {
|
||||||
return
|
return
|
||||||
|
@ -20,6 +20,7 @@ import de.bixilon.minosoft.data.registries.blocks.BlockState
|
|||||||
import de.bixilon.minosoft.data.registries.blocks.BlockUsages
|
import de.bixilon.minosoft.data.registries.blocks.BlockUsages
|
||||||
import de.bixilon.minosoft.data.registries.inventory.CreativeModeTab
|
import de.bixilon.minosoft.data.registries.inventory.CreativeModeTab
|
||||||
import de.bixilon.minosoft.data.registries.items.armor.ArmorItem
|
import de.bixilon.minosoft.data.registries.items.armor.ArmorItem
|
||||||
|
import de.bixilon.minosoft.data.registries.items.armor.DyeableArmorItem
|
||||||
import de.bixilon.minosoft.data.registries.items.armor.HorseArmorItem
|
import de.bixilon.minosoft.data.registries.items.armor.HorseArmorItem
|
||||||
import de.bixilon.minosoft.data.registries.items.tools.*
|
import de.bixilon.minosoft.data.registries.items.tools.*
|
||||||
import de.bixilon.minosoft.data.registries.registries.Registries
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
@ -76,6 +77,7 @@ open class Item(
|
|||||||
"ShovelItem" -> ShovelItem(resourceLocation, registries, data)
|
"ShovelItem" -> ShovelItem(resourceLocation, registries, data)
|
||||||
"PickaxeItem" -> PickaxeItem(resourceLocation, registries, data)
|
"PickaxeItem" -> PickaxeItem(resourceLocation, registries, data)
|
||||||
"HoeItem" -> HoeItem(resourceLocation, registries, data)
|
"HoeItem" -> HoeItem(resourceLocation, registries, data)
|
||||||
|
"DyeableArmorItem" -> DyeableArmorItem(resourceLocation, registries, data)
|
||||||
// "Item" -> Item(resourceLocation, data)
|
// "Item" -> Item(resourceLocation, data)
|
||||||
// else -> TODO("Can not find item class: ${data["class"].asString}")
|
// else -> TODO("Can not find item class: ${data["class"].asString}")
|
||||||
else -> Item(resourceLocation, registries, data)
|
else -> Item(resourceLocation, registries, data)
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* 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.registries.items.armor
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||||
|
import de.bixilon.minosoft.data.registries.registries.Registries
|
||||||
|
|
||||||
|
open class DyeableArmorItem(
|
||||||
|
resourceLocation: ResourceLocation,
|
||||||
|
registries: Registries,
|
||||||
|
data: Map<String, Any>,
|
||||||
|
) : ArmorItem(resourceLocation, registries, data) {
|
||||||
|
// ToDo
|
||||||
|
}
|
@ -34,4 +34,8 @@ open class Container(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operator fun get(slotId: Int): ItemStack? {
|
||||||
|
return slots[slotId]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,10 +13,12 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.data.registries.other.containers
|
package de.bixilon.minosoft.data.registries.other.containers
|
||||||
|
|
||||||
|
import de.bixilon.minosoft.data.inventory.InventorySlots
|
||||||
import de.bixilon.minosoft.data.inventory.ItemStack
|
import de.bixilon.minosoft.data.inventory.ItemStack
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||||
|
|
||||||
|
// https://c4k3.github.io/wiki.vg/images/1/13/Inventory-slots.png
|
||||||
class PlayerInventory(connection: PlayConnection) : Container(
|
class PlayerInventory(connection: PlayConnection) : Container(
|
||||||
connection = connection,
|
connection = connection,
|
||||||
ContainerType(
|
ContainerType(
|
||||||
@ -24,7 +26,31 @@ class PlayerInventory(connection: PlayConnection) : Container(
|
|||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
val equipment: MutableMap<InventorySlots.EquipmentSlots, ItemStack>
|
||||||
|
get() {
|
||||||
|
val equipment: MutableMap<InventorySlots.EquipmentSlots, ItemStack> = mutableMapOf()
|
||||||
|
|
||||||
|
for (slot in InventorySlots.EquipmentSlots.ARMOR_SLOTS) {
|
||||||
|
equipment[slot] = this[slot] ?: continue
|
||||||
|
}
|
||||||
|
|
||||||
|
return equipment
|
||||||
|
}
|
||||||
|
|
||||||
fun getHotbarSlot(hotbarSlot: Int = connection.player.selectedHotbarSlot): ItemStack? {
|
fun getHotbarSlot(hotbarSlot: Int = connection.player.selectedHotbarSlot): ItemStack? {
|
||||||
|
check(hotbarSlot in 0..9) { "Hotbar slot out of bounds!" }
|
||||||
return slots[hotbarSlot + 36] // ToDo
|
return slots[hotbarSlot + 36] // ToDo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operator fun get(slot: InventorySlots.EquipmentSlots): ItemStack? {
|
||||||
|
return this[when (slot) {
|
||||||
|
InventorySlots.EquipmentSlots.HEAD -> 5
|
||||||
|
InventorySlots.EquipmentSlots.CHEST -> 6
|
||||||
|
InventorySlots.EquipmentSlots.LEGS -> 7
|
||||||
|
InventorySlots.EquipmentSlots.FEET -> 8
|
||||||
|
|
||||||
|
InventorySlots.EquipmentSlots.MAIN_HAND -> connection.player.selectedHotbarSlot + 36
|
||||||
|
InventorySlots.EquipmentSlots.OFF_HAND -> 45
|
||||||
|
}]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ class HotbarElement(hudRenderer: HUDRenderer) : Element(hudRenderer) {
|
|||||||
private val hunger = HotbarHungerElement(hudRenderer)
|
private val hunger = HotbarHungerElement(hudRenderer)
|
||||||
private val protection = HotbarProtectionElement(hudRenderer)
|
private val protection = HotbarProtectionElement(hudRenderer)
|
||||||
|
|
||||||
private val topLeft = RowLayout(hudRenderer, HorizontalAlignments.LEFT, 1) // contains health, armor, etc
|
private val topLeft = RowLayout(hudRenderer, HorizontalAlignments.LEFT, 1) // contains health, protection, etc
|
||||||
private val topRight = RowLayout(hudRenderer, HorizontalAlignments.RIGHT, 1) // contains hunger, air
|
private val topRight = RowLayout(hudRenderer, HorizontalAlignments.RIGHT, 1) // contains hunger, air
|
||||||
|
|
||||||
private var renderElements = setOf(
|
private var renderElements = setOf(
|
||||||
|
@ -86,6 +86,10 @@ class HotbarExperienceBarElement(hudRenderer: HUDRenderer) : Element(hudRenderer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onParentChange() {
|
||||||
|
silentApply()
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val SIZE = Vec2i(182, 5)
|
private val SIZE = Vec2i(182, 5)
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,8 @@ class HotbarProtectionElement(hudRenderer: HUDRenderer) : Element(hudRenderer) {
|
|||||||
|
|
||||||
for (i in 0 until 10) {
|
for (i in 0 until 10) {
|
||||||
val atlasElement = when {
|
val atlasElement = when {
|
||||||
protectionLeft <= 0.0f -> emptyProtection
|
protectionLeft < 1.0f -> emptyProtection
|
||||||
protectionLeft < 1.0f -> halfProtection
|
protectionLeft < 2.0f -> halfProtection
|
||||||
else -> fullProtection
|
else -> fullProtection
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,12 +49,16 @@ class HotbarProtectionElement(hudRenderer: HUDRenderer) : Element(hudRenderer) {
|
|||||||
|
|
||||||
image.render(offset + Vec2i(i * ARMOR_SIZE.x, 0), z, consumer)
|
image.render(offset + Vec2i(i * ARMOR_SIZE.x, 0), z, consumer)
|
||||||
|
|
||||||
protectionLeft -= 1.0f
|
protectionLeft -= 2.0f
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onParentChange() {
|
||||||
|
silentApply()
|
||||||
|
}
|
||||||
|
|
||||||
override fun silentApply() {
|
override fun silentApply() {
|
||||||
val protection = hudRenderer.connection.player.protectionLevel // ToDo: Check for equipment change
|
val protection = hudRenderer.connection.player.protectionLevel // ToDo: Check for equipment change
|
||||||
|
|
||||||
@ -67,6 +71,7 @@ class HotbarProtectionElement(hudRenderer: HUDRenderer) : Element(hudRenderer) {
|
|||||||
} else {
|
} else {
|
||||||
SIZE
|
SIZE
|
||||||
}
|
}
|
||||||
|
this.protection = protection
|
||||||
cacheUpToDate = false
|
cacheUpToDate = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user