MCEdit Filter: Как создать сундук в коде?

В программировании фильтра MCEdit, как вы создаете сундук с нуля? Не являются сундуками и обрабатываются иначе, чем блок, для которого вы можете использовать setBlockAt.

Может кто-нибудь показать пример кода для создания нового пустого сундука в фильтре? Предпочтительно внутри поля выбора, сделанного пользователем.

1 ответ

После поиска исходного кода для MCE, а также источника для некоторых фильтров SethBling мне удалось набрать немного кода.

Следующие функции предполагают глобальный объект с именем levelOBJ, который установлен в качестве объекта уровня в вашей функции execute (). Таким образом, вам не нужно продолжать проходить уровень или коробку.

# Just so I don't have to keep doing the math        
def getChunkAt(x, z):
    chunk = levelObj.getChunk(x / 16, z / 16)
    return chunk

# Creates a TAG_Compound Item (for use with the CreateChestAt function)
def CreateChestItem(itemid, damage=0, count=1, slot=0):
    item = TAG_Compound()
    item["id"] = TAG_Short(itemid)
    item["Damage"] = TAG_Short(damage)
    item["Count"] = TAG_Byte(count)
    item["Slot"] = TAG_Byte(slot)
    return item

# Creates a chest at the specified coords containing the items passed    
def CreateChestAt(x, y, z, Items=None, Direction=2, CustomName=""):
    levelObj.setBlockAt(x, y, z, 54) # Chest Block (single = 27 slots 0-26), 54 == chest, 146 == Trapped Chest
    levelObj.setBlockDataAt(x, y, z, Direction) # 2==N, 3==S, 4==W, 5==E anything else == N

    # Now Create Entity Block and add it to the chunk
    chunk = getChunkAt(x, z)
    chest = TileEntity.Create("Chest")
    TileEntity.setpos(chest, (x, y, z))
    if Items <> None:
        chest["Items"] = Items
    if CustomName <> "":
        chest["CustomName"] = CustomName
    chunk.TileEntities.append(chest)

Затем вы можете использовать мои функции в своем фильтре, вызывая их, как описано в примерах ниже. Ниже, x,y,z предполагается, что они заполнены правильными координатами, в которые вы хотите поместить сундук.

Кроме того, двойные сундуки - это просто два сундука рядом. Вызовите CreateChestAt дважды (две координаты 1 друг от друга EW или NS), чтобы создать двойной сундук. Вы можете создать 3 в ряд, но Minecraft лишит законной силы 3-й сундук, делая его недоступным в игре, поэтому обратите внимание на то, как вы их разместите.

Чтобы создать пустой сундук:

CreateChestAt(x, y, z)

Чтобы создать сундук с предметами:

# Build item list (4 Jungle Planks and 11 chests
ChestItems = TAG_List()
ChestItems.append( CreateChestItem(5, 3, 4, 0) )
ChestItems.append( CreateChestItem(54, 0, 11, 1) )

# Make a chest with the items.
CreateChestAt(x, y, z, ChestItems)

Необязательные параметры Direction и CustomName также могут быть указаны...

Создает пустой сундук лицом к западу под названием "Мой сундук"

CreateChestAt(x, y, z, None, 4, "My Chest")
Другие вопросы по тегам