fix out of bounds in inventory

This commit is contained in:
olebeck 2023-03-31 15:54:25 +02:00
parent b7ad339a64
commit 4c0dd665f1
3 changed files with 38 additions and 5 deletions

View File

@ -43,6 +43,9 @@ func (w *worldsServer) processItemPacketsServer(pk packet.Packet) packet.Packet
case *packet.InventorySlot:
if pk.WindowID == 0x0 {
if w.serverState.playerInventory == nil {
w.serverState.playerInventory = make([]protocol.ItemInstance, 36)
}
w.serverState.playerInventory[pk.Slot] = pk.NewItem
} else {
// save content

View File

@ -550,8 +550,6 @@ func (w *worldsServer) SaveAndReset() {
f.Close()
}
time.Sleep(1 * time.Second)
// zip it
filename := folder + ".mcworld"
if err := utils.ZipFolder(filename, folder); err != nil {

View File

@ -62,12 +62,40 @@ func (bp *BehaviourPack) CheckAddLink(pack utils.Pack) {
logrus.Error(err)
return
}
if len(bp.blocks) > 0 {
hasBlocksJson := false
if bp.HasBlocks() {
_, err = z.Open("blocks.json")
if err != nil {
return
if err == nil {
hasBlocksJson = true
}
}
hasEntitiesFolder := false
if bp.HasEntities() {
for _, f := range z.File {
if f.Name == "entity" && f.FileInfo().IsDir() {
hasEntitiesFolder = true
break
}
}
}
hasItemsFolder := false
if bp.HasItems() {
for _, f := range z.File {
if f.Name == "items" && f.FileInfo().IsDir() {
hasItemsFolder = true
break
}
}
}
// has no assets needed
if !(hasBlocksJson || hasEntitiesFolder || hasItemsFolder) {
return
}
h := pack.Manifest().Header
bp.AddDependency(h.UUID, h.Version)
}
@ -80,6 +108,10 @@ func (bp *BehaviourPack) HasItems() bool {
return len(bp.items) > 0
}
func (bp *BehaviourPack) HasEntities() bool {
return len(bp.entities) > 0
}
func (bp *BehaviourPack) HasContent() bool {
return bp.HasBlocks() || bp.HasItems()
}