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")