def formatBlockName(x): block = self.matchingBlocks[x] #&# #r = "{name}".format(name=block.name) r = u"{name}".format(name=mclangres.translate(block.name)) #&# if block.aka: #&# #r += " [{0}]".format(block.aka) r += u" [{0}]".format(mclangres.translate(block.aka)) #&# return r
def labelText(self): #&# Prototype for blocks/items names #labelText = self.blockInfo.name labelText = mclangres.translate(self.blockInfo.name) #&# if len(labelText) > 24: labelText = labelText[:23] + "..." return labelText
def text_entered(self): text = self.id.get_text() if self.former_id_text == text: return results = [] for k in map_items.keys(): k = mclangres.translate(k) if text.lower() in k.lower(): results.append(k) results.sort() self.matching_items = results self.selected_item_index = 0 self.tableview.rows.scroll_to_item(self.selected_item_index)
def __init__(self, inventory, data, *args, **kwargs): Dialog.__init__(self, *args, **kwargs) self.inventory = inventory slot, id, count, damage = data self.former_id_text = id self.slot = slot self.id = TextFieldWrapped(text=str(id), doNotTranslate=True, width=300) self.id.change_action = self.text_entered self.id.escape_action = self.cancel self.id.enter_action = self.ok self.count = IntField(text="%s" % count, min=0, max=64) self.damage = IntField(text="%s" % damage, min=0, max=os.sys.maxint) header = Label(_("Inventory Slot #%s") % slot, doNotTranslate=True) row = Row([ Label("id"), self.id, Label("Count"), self.count, Label("Damage"), self.damage, ]) self.matching_items = [ mclangres.translate(k) for k in map_items.keys() ] self.matching_items.sort() self.selected_item_index = None if id in self.matching_items: self.selected_item_index = self.matching_items.index(id) self.tableview = tableview = TableView( columns=[TableColumn("", 415, 'l')]) tableview.num_rows = lambda: len(self.matching_items) tableview.row_data = lambda x: (self.matching_items[x], ) tableview.row_is_selected = lambda x: x == self.selected_item_index tableview.click_row = self.select_tablerow buttons = Row([ Button("Save", action=self.dismiss), Button("Cancel", action=self.cancel) ]) col = Column([header, row, tableview, buttons], spacing=2) self.add(col) self.shrink_wrap() try: self.tableview.rows.scroll_to_item(self.selected_item_index) except Exception, e: print e pass
def text_entered(self): text = self.id.get_text() if self.former_id_text == text: return results = [] for k in map_items.keys(): k = mclangres.translate(k) if text.lower() in k.lower(): results.append(k) results.sort() self.menu.set_items([[a] for a in results]) self.menu.scrolling = True self.menu.set_scroll_items((self.root.local_to_global(self.parent.bottomleft)[1] - self.root.local_to_global(self.bottomleft)[1] - (self.menu.margin * 2)) / self.menu.font.get_linesize()) sel = self.menu.present(self.id, (0, self.id.bottom - self.margin)) if sel >= 0: self.former_id_text = self.menu.items[sel][0] self.id.change_text(self.menu.items[sel][0]) self.former_id_text = self.menu.items[sel][0]
def __init__(self, inventory, data, *args, **kwargs): Dialog.__init__(self, *args, **kwargs) self.inventory = inventory slot, id, count, damage = data self.former_id_text = id self.slot = slot self.id = TextFieldWrapped(text=id, doNotTranslate=True, width=300) self.id.change_action = self.text_entered self.id.escape_action = self.cancel self.id.enter_action = self.ok self.count = IntField(text="%s"%count, min=0, max=64) self.damage = IntField(text="%s"%damage, min=0, max=os.sys.maxint) header = Label(_("Inventory Slot #%s")%slot, doNotTranslate=True) row = Row([Label("id"), self.id, Label("Count"), self.count, Label("Damage"), self.damage, ]) self.matching_items = [mclangres.translate(k) for k in map_items.keys()] self.matching_items.sort() self.selected_item_index = None if id in self.matching_items: self.selected_item_index = self.matching_items.index(id) self.tableview = tableview = TableView(columns=[TableColumn("", 415, 'l')]) tableview.num_rows = lambda: len(self.matching_items) tableview.row_data = lambda x: (self.matching_items[x],) tableview.row_is_selected = lambda x: x == self.selected_item_index tableview.click_row = self.select_tablerow buttons = Row([Button("Save", action=self.dismiss), Button("Cancel", action=self.cancel)]) col = Column([header, row, tableview, buttons], spacing=2) self.add(col) self.shrink_wrap() try: self.tableview.rows.scroll_to_item(self.selected_item_index) except Exception, e: print e pass
def tooltipText(self): #&# Prototype for blocks/items names #return str(self.blockInfo.name) return mclangres.translate(self.blockInfo.name)
def build_inventory(self, items): if 'playerGameType' in self.tree.get_item_parent(self.displayed_item)[9].keys(): player = True else: player = False inventory = self.tree.get_item_parent(self.displayed_item)[9].get('Inventory', TAG_List()) rows = [] items = items[0] slots = [["%s"%i,"","0","0"] for i in range(36)] slots += [["%s"%i,"","0","0"] for i in range(100, 104)] slots_set = [] for item, i in zip(items, range(len(items))): #&# Prototype for blocks/items names item_dict = mcitems.items.get(item['id'].value, None) if item_dict == None: name = item['id'].value else: if type(item_dict['name']) == list: if int(item['Damage'].value) >= len(item_dict['name']): block_id = map_block.get(item['id'].value, None) name = alphaMaterials.get((int(block_id), int(item['Damage'].value))).name.rsplit('(', 1)[0].strip() else: name = item_dict['name'][int(item['Damage'].value)] else: name = item_dict['name'] s = i _s = 0 + i if player: s = int(item['Slot'].value) _s = 0 + s slots_set.append(s) if s >= 100: s = s - 100 + 36 slots[s] = _s, mclangres.translate(name), item['Count'].value, item['Damage'].value #slots[s] = item['Slot'].value, item['id'].value.split(':')[-1], item['Count'].value, item['Damage'].value #&# width = self.side_panel_width - self.margin * 5 c0w = max(15, self.font.size("000")[0]) + 4 c2w = max(15, self.font.size("00")[0]) + 4 c3w = max(15, self.font.size("000")[0]) + 4 c1w = width - c0w - c2w - c3w font_height = self.font.size("qd")[1] tableCols = [TableColumn("#", c0w), TableColumn("ID", c1w), TableColumn("C", c2w), TableColumn("D", c3w), ] height = self.displayRow.subwidgets[0].height table = TableView(height=height - (self.margin * 2), width=width, nrows=((height - (self.margin * 2) - font_height / 2) / font_height), columns=tableCols, row_height=font_height, header_height=font_height / 2) table.rows.tooltipText = "Double-click to edit" table.selected_row = None table.slots = slots def num_rows(): return len(slots) table.num_rows = num_rows def row_data(n): return slots[n] table.row_data = row_data def click_row(n, e): table.focus() table.selected_row = n if e.num_clicks > 1: SlotEditor(table, row_data(n)).present() table.click_row = click_row def row_is_selected(n): return n == table.selected_row table.row_is_selected = row_is_selected def change_value(data): s, i, c, d = data s = int(s) s_idx = 0 #&# Prototype for blocks/items names name, state = map_items.get(mclangres.untranslate(i), (i, '0')) if ':' not in name: name = 'minecraft:%s'%name #&# if s in slots_set: for slot in inventory: ok1 = False if player: ok1 = slot['Slot'].value == s else: ok1 = inventory.index(slot) == s if ok1: if not i or int(c) < 1: del inventory[s_idx] i = "" c = u'0' d = u'0' else: #&# Prototype for blocks/items names #slot['id'].value = 'minecraft:%s'%i slot['id'].value = name #&# slot['Count'].value = int(c) slot['Damage'].value = int(state) break s_idx += 1 else: new_slot = TAG_Compound() if player: new_slot['Slot'] = TAG_Byte(s) #&# Prototype for blocka/items names #new_slot['id'] = TAG_String('minecraft:%s'%i) new_slot['id'] = TAG_String(name) #&# new_slot['Count'] = TAG_Byte(int(c)) new_slot['Damage'] = TAG_Short(int(state)) idx = s for slot in inventory: ok2 = False if player: ok2 = slot['Slot'].value >= s else: ok2 = inventory.index(slot) >= s if ok2: idx = slot['Slot'].value break inventory.insert(s, new_slot) slots_set.append(s) #&# Prototype for blocks/items names # if i == name: # i = name #&# if s >= 100: n = s - 100 + 36 else: n = s table.slots[n] = slots[n] = s, i, c, state table.change_value = change_value def dispatch_key(name, evt): keyname = self.root.getKey(evt) if keyname == 'Return': SlotEditor(table, row_data(table.selected_row)).present() elif keyname == "Up" and table.selected_row > 0: table.selected_row -= 1 table.rows.scroll_to_item(table.selected_row) elif keyname == "Down" and table.selected_row < len(slots) - 1: table.selected_row += 1 table.rows.scroll_to_item(table.selected_row) elif keyname == 'Page down': table.selected_row = min(len(slots) - 1, table.selected_row + table.rows.num_rows()) elif keyname == 'Page up': table.selected_row = max(0, table.selected_row - table.rows.num_rows()) if table.rows.cell_to_item_no(0, 0) != None and (table.rows.cell_to_item_no(0, 0) + table.rows.num_rows() -1 > table.selected_row or table.rows.cell_to_item_no(0, 0) + table.rows.num_rows() -1 < table.selected_row): table.rows.scroll_to_item(table.selected_row) table.dispatch_key = dispatch_key rows.append(table) return rows
def __init__(self, blockInfo, materials, *a, **kw): self.root = get_root() self.allowWildcards = False Dialog.__init__(self, *a, **kw) panelWidth = 518 self.click_outside_response = 0 self.materials = materials self.anySubtype = blockInfo.wildcard self.matchingBlocks = materials.allBlocks #&# self.searchNames = [ mclangres.translate(a.name).lower() for a in self.matchingBlocks ] #&# try: self.selectedBlockIndex = self.matchingBlocks.index(blockInfo) except ValueError: self.selectedBlockIndex = 0 for i, b in enumerate(self.matchingBlocks): if blockInfo.ID == b.ID and blockInfo.blockData == b.blockData: self.selectedBlockIndex = i break lbl = Label("Search") # lbl.rect.topleft = (0,0) fld = TextFieldWrapped(300) # fld.rect.topleft = (100, 10) # fld.centery = lbl.centery # fld.left = lbl.right fld.change_action = self.textEntered fld.enter_action = self.ok fld.escape_action = self.cancel fld.attention_lost = fld.commit self.awesomeField = fld searchRow = Row((lbl, fld)) def formatBlockName(x): block = self.matchingBlocks[x] #&# #r = "{name}".format(name=block.name) r = u"{name}".format(name=mclangres.translate(block.name)) #&# if block.aka: #&# #r += " [{0}]".format(block.aka) r += u" [{0}]".format(mclangres.translate(block.aka)) #&# return r def formatBlockID(x): block = self.matchingBlocks[x] ident = "({id}:{data})".format(id=block.ID, data=block.blockData) return ident tableview = TableView(columns=[ TableColumn(" ", 24, "l", lambda x: ""), TableColumn("Name", 415, "l", formatBlockName), TableColumn("ID", 45, "l", formatBlockID) ]) tableicons = [ blockview.BlockView(materials) for i in xrange(tableview.rows.num_rows()) ] for t in tableicons: t.size = (16, 16) t.margin = 0 spacing = max(tableview.font.get_linesize() - 16, 2) icons = Column(tableicons, spacing=spacing) # tableview.margin = 5 tableview.num_rows = lambda: len(self.matchingBlocks) tableview.row_data = lambda x: (self.matchingBlocks[x], x, x) tableview.row_is_selected = lambda x: x == self.selectedBlockIndex tableview.click_row = self.selectTableRow draw_table_cell = tableview.draw_table_cell def draw_block_table_cell(surf, i, data, cell_rect, column): if isinstance(data, Block): tableicons[i - tableview.rows.scroll].blockInfo = data else: draw_table_cell(surf, i, data, cell_rect, column) tableview.draw_table_cell = draw_block_table_cell tableview.width = panelWidth tableview.anchor = "lrbt" # self.add(tableview) self.tableview = tableview tableWidget = Widget() tableWidget.add(tableview) tableWidget.shrink_wrap() def wdraw(*args): for t in tableicons: t.blockInfo = materials.Air tableWidget.draw = wdraw self.blockButton = blockView = thumbview.BlockThumbView( materials, self.blockInfo) blockView.centerx = self.centerx blockView.top = tableview.bottom # self.add(blockview) but = Button("OK") but.action = self.ok but.top = blockView.bottom but.centerx = self.centerx but.align = "c" but.height = 30 if self.allowWildcards: # self.add(but) anyRow = CheckBoxLabel( "Any Subtype", ref=AttrRef(self, 'anySubtype'), tooltipText= "Replace blocks with any data value. Only useful for Replace operations." ) col = Column((searchRow, tableWidget, anyRow, blockView, but)) else: col = Column((searchRow, tableWidget, blockView, but)) col.anchor = "wh" self.anchor = "wh" panel = GLBackground() panel.bg_color = [i / 255. for i in self.bg_color] panel.anchor = "tlbr" self.add(panel) self.add(col) self.add(icons) icons.left += tableview.margin + tableWidget.margin + col.margin icons.top = tableWidget.top + tableview.top + tableview.header_height + tableview.header_spacing + tableWidget.margin + tableview.margin + tableview.subwidgets[ 1].margin + (spacing / 2) self.shrink_wrap() panel.size = self.size try: self.tableview.rows.scroll_to_item(self.selectedBlockIndex) except: pass
def __init__(self, blockInfo, materials, *a, **kw): self.root = get_root() self.allowWildcards = False Dialog.__init__(self, *a, **kw) panelWidth = 518 self.click_outside_response = 0 self.materials = materials self.anySubtype = blockInfo.wildcard self.matchingBlocks = materials.allBlocks #&# self.searchNames = [mclangres.translate(a.name).lower() for a in self.matchingBlocks] #&# try: self.selectedBlockIndex = self.matchingBlocks.index(blockInfo) except ValueError: self.selectedBlockIndex = 0 for i, b in enumerate(self.matchingBlocks): if blockInfo.ID == b.ID and blockInfo.blockData == b.blockData: self.selectedBlockIndex = i break lbl = Label("Search") # lbl.rect.topleft = (0,0) fld = TextFieldWrapped(300) # fld.rect.topleft = (100, 10) # fld.centery = lbl.centery # fld.left = lbl.right fld.change_action = self.textEntered fld.enter_action = self.ok fld.escape_action = self.cancel self.awesomeField = fld searchRow = Row((lbl, fld)) def formatBlockName(x): block = self.matchingBlocks[x] #&# #r = "{name}".format(name=block.name) r = u"{name}".format(name=mclangres.translate(block.name)) #&# if block.aka: #&# #r += " [{0}]".format(block.aka) r += u" [{0}]".format(mclangres.translate(block.aka)) #&# return r def formatBlockID(x): block = self.matchingBlocks[x] ident = "({id}:{data})".format(id=block.ID, data=block.blockData) return ident tableview = TableView(columns=[TableColumn(" ", 24, "l", lambda x: ""), TableColumn("Name", 415, "l", formatBlockName), TableColumn("ID", 45, "l", formatBlockID) ]) tableicons = [blockview.BlockView(materials) for i in range(tableview.rows.num_rows())] for t in tableicons: t.size = (16, 16) t.margin = 0 spacing = max(tableview.font.get_linesize() - 16, 2) icons = Column(tableicons, spacing=spacing) # tableview.margin = 5 tableview.num_rows = lambda: len(self.matchingBlocks) tableview.row_data = lambda x: (self.matchingBlocks[x], x, x) tableview.row_is_selected = lambda x: x == self.selectedBlockIndex tableview.click_row = self.selectTableRow draw_table_cell = tableview.draw_table_cell def draw_block_table_cell(surf, i, data, cell_rect, column): if isinstance(data, Block): tableicons[i - tableview.rows.scroll].blockInfo = data else: draw_table_cell(surf, i, data, cell_rect, column) tableview.draw_table_cell = draw_block_table_cell tableview.width = panelWidth tableview.anchor = "lrbt" # self.add(tableview) self.tableview = tableview tableWidget = Widget() tableWidget.add(tableview) tableWidget.shrink_wrap() def wdraw(*args): for t in tableicons: t.blockInfo = materials.Air tableWidget.draw = wdraw self.blockButton = blockView = thumbview.BlockThumbView(materials, self.blockInfo) blockView.centerx = self.centerx blockView.top = tableview.bottom # self.add(blockview) but = Button("OK") but.action = self.ok but.top = blockView.bottom but.centerx = self.centerx but.align = "c" but.height = 30 if self.allowWildcards: # self.add(but) anyRow = CheckBoxLabel("Any Subtype", ref=AttrRef(self, 'anySubtype'), tooltipText="Replace blocks with any data value. Only useful for Replace operations.") col = Column((searchRow, tableWidget, anyRow, blockView, but)) else: col = Column((searchRow, tableWidget, blockView, but)) col.anchor = "wh" self.anchor = "wh" panel = GLBackground() panel.bg_color = [i / 255. for i in self.bg_color] panel.anchor = "tlbr" self.add(panel) self.add(col) self.add(icons) icons.left += tableview.margin + tableWidget.margin + col.margin icons.top = tableWidget.top + tableview.top + tableview.header_height + tableview.header_spacing + tableWidget.margin + tableview.margin + tableview.subwidgets[1].margin + (spacing / 2) self.shrink_wrap() panel.size = self.size try: self.tableview.rows.scroll_to_item(self.selectedBlockIndex) except: pass
def build_inventory(self, items): parent = self.tree.get_item_parent(self.displayed_item) if parent: parent = parent[9] else: parent = self.data if 'playerGameType' in parent.keys(): player = True else: player = False inventory = parent.get('Inventory', TAG_List()) rows = [] items = items[0] slots = [["%s" % i, "", "0", "0"] for i in range(36)] slots += [["%s" % i, "", "0", "0"] for i in range(100, 104)] slots_set = [] for item, i in zip(items, range(len(items))): # &# Prototype for blocks/items names item_dict = mcitems.items.get(item['id'].value, None) if item_dict is None: item_name = item['id'].value else: if type(item_dict['name']) == list: if int(item['Damage'].value) >= len(item_dict['name']): block_id = map_block.get(item['id'].value, None) item_name = alphaMaterials.get( (int(block_id), int(item['Damage'].value))).name.rsplit( '(', 1)[0].strip() else: item_name = item_dict['name'][int( item['Damage'].value)] else: item_name = item_dict['name'] s = i _s = 0 + i if player: s = int(item['Slot'].value) _s = 0 + s slots_set.append(s) if s >= 100: s = s - 100 + 36 if type(item_name) in (unicode, str): translated_item_name = mclangres.translate(item_name) else: translated_item_name = item_name slots[s] = _s, translated_item_name, item['Count'].value, item[ 'Damage'].value # slots[s] = item['Slot'].value, item['id'].value.split(':')[-1], item['Count'].value, item['Damage'].value # &# width = self.side_panel_width - self.margin * 5 c0w = max(15, self.font.size("000")[0]) + 4 c2w = max(15, self.font.size("00")[0]) + 4 c3w = max(15, self.font.size("000")[0]) + 4 c1w = width - c0w - c2w - c3w font_height = self.font.size("qd")[1] tableCols = [ TableColumn("#", c0w), TableColumn("ID", c1w), TableColumn("C", c2w), TableColumn("D", c3w), ] height = self.displayRow.subwidgets[0].height table = TableView(height=height - (self.margin * 2), width=width, nrows=((height - (self.margin * 2) - font_height / 2) / font_height), columns=tableCols, row_height=font_height, header_height=font_height / 2) table.rows.tooltipText = "Double-click to edit" table.selected_row = None table.slots = slots def num_rows(): return len(slots) table.num_rows = num_rows def row_data(n): return slots[n] table.row_data = row_data def click_row(n, e): table.focus() table.selected_row = n if e.num_clicks > 1: SlotEditor(table, row_data(n)).present() table.click_row = click_row def row_is_selected(n): return n == table.selected_row table.row_is_selected = row_is_selected def change_value(data): s, i, c, d = data s = int(s) s_idx = 0 # &# Prototype for blocks/items names name, state = map_items.get(mclangres.untranslate(i), (i, '0')) if ':' not in name: name = 'minecraft:%s' % name # &# if s in slots_set: for slot in inventory: ok1 = False if player: ok1 = slot['Slot'].value == s else: ok1 = inventory.index(slot) == s if ok1: if not i or int(c) < 1: del inventory[s_idx] i = "" c = u'0' d = u'0' else: # &# Prototype for blocks/items names # slot['id'].value = 'minecraft:%s'%i slot['id'].value = name # &# slot['Count'].value = int(c) slot['Damage'].value = int(state) break s_idx += 1 else: new_slot = TAG_Compound() if player: new_slot['Slot'] = TAG_Byte(s) # &# Prototype for blocka/items names # new_slot['id'] = TAG_String('minecraft:%s'%i) new_slot['id'] = TAG_String(name) # &# new_slot['Count'] = TAG_Byte(int(c)) new_slot['Damage'] = TAG_Short(int(state)) idx = s for slot in inventory: ok2 = False if player: ok2 = slot['Slot'].value >= s else: ok2 = inventory.index(slot) >= s if ok2: idx = slot['Slot'].value break inventory.insert(s, new_slot) slots_set.append(s) # &# Prototype for blocks/items names # if i == name: # i = name # &# if s >= 100: n = s - 100 + 36 else: n = s table.slots[n] = slots[n] = s, i, c, state table.change_value = change_value def dispatch_key(name, evt): keyname = self.root.getKey(evt) if keyname == 'Return': SlotEditor(table, row_data(table.selected_row)).present() elif keyname == "Up" and table.selected_row > 0: table.selected_row -= 1 table.rows.scroll_to_item(table.selected_row) elif keyname == "Down" and table.selected_row < len(slots) - 1: table.selected_row += 1 table.rows.scroll_to_item(table.selected_row) elif keyname == 'Page down': table.selected_row = min( len(slots) - 1, table.selected_row + table.rows.num_rows()) elif keyname == 'Page up': table.selected_row = max( 0, table.selected_row - table.rows.num_rows()) someRowBool = table.rows.cell_to_item_no( 0, 0) + table.rows.num_rows() - 1 != table.selected_row if table.rows.cell_to_item_no(0, 0) is not None and someRowBool: table.rows.scroll_to_item(table.selected_row) table.dispatch_key = dispatch_key rows.append(table) return rows
def build_inventory(self, items): inventory = self.data.get('Player', {}).get('Inventory', TAG_List()) or self.data.get('Inventory', TAG_List()) rows = [] items = items[0] slots = [["%s"%i,"","0","0"] for i in range(36)] slots += [["%s"%i,"","0","0"] for i in range(100, 104)] slots_set = [] for item in items: #&# Prototype for blocks/items names item_dict = mcitems.items.get(item['id'].value, None) if item_dict == None: name = item['id'].value else: if type(item_dict['name']) == list: if int(item['Damage'].value) >= len(item_dict['name']): block_id = map_block.get(item['id'].value, None) name = alphaMaterials.get((int(block_id), int(item['Damage'].value))).name.rsplit('(', 1)[0].strip() else: name = item_dict['name'][int(item['Damage'].value)] else: name = item_dict['name'] s = int(item['Slot'].value) slots_set.append(s) if s >= 100: s = s - 100 + 36 slots[s] = item['Slot'].value, mclangres.translate(name), item['Count'].value, item['Damage'].value #slots[s] = item['Slot'].value, item['id'].value.split(':')[-1], item['Count'].value, item['Damage'].value #&# width = self.side_panel_width - self.margin * 5 c0w = max(15, self.font.size("000")[0]) + 4 c2w = max(15, self.font.size("00")[0]) + 4 c3w = max(15, self.font.size("000")[0]) + 4 c1w = width - c0w - c2w - c3w font_height = self.font.size("qd")[1] tableCols = [TableColumn("#", c0w), TableColumn("ID", c1w), TableColumn("C", c2w), TableColumn("D", c3w), ] height = self.displayRow.subwidgets[0].height table = TableView(height=height - (self.margin * 2), width=width, nrows=((height - (self.margin * 2) - font_height / 2) / font_height), columns=tableCols, row_height=font_height, header_height=font_height / 2) table.rows.tooltipText = "Double-click to edit" table.selected_row = None table.slots = slots def num_rows(): return len(slots) table.num_rows = num_rows def row_data(n): return slots[n] table.row_data = row_data def click_row(n, e): table.selected_row = n if e.num_clicks > 1: SlotEditor(table, row_data(n)).present() table.click_row = click_row def row_is_selected(n): return n == table.selected_row table.row_is_selected = row_is_selected def change_value(data): s, i, c, d = data s = int(s) s_idx = 0 #&# Prototype for blocks/items names name, state = map_items.get(mclangres.untranslate(i), (i, '0')) if ':' not in name: name = 'minecraft:%s'%name #&# if s in slots_set: for slot in inventory: if slot['Slot'].value == s: if not i or int(c) < 1: del inventory[s_idx] i = "" c = u'0' d = u'0' else: #&# Prototype for blocks/items names #slot['id'].value = 'minecraft:%s'%i slot['id'].value = name #&# slot['Count'].value = int(c) slot['Damage'].value = int(state) break s_idx += 1 else: new_slot = TAG_Compound() new_slot['Slot'] = TAG_Byte(s) #&# Prototype for blocka/items names #new_slot['id'] = TAG_String('minecraft:%s'%i) new_slot['id'] = TAG_String(name) #&# new_slot['Count'] = TAG_Byte(int(c)) new_slot['Damage'] = TAG_Short(int(state)) idx = s for slot in inventory: if slot['Slot'].value >= s: idx = slot['Slot'].value break inventory.insert(s, new_slot) slots_set.append(s) #&# Prototype for blocks/items names # if i == name: # i = name #&# if s >= 100: n = s - 100 + 36 else: n = s table.slots[n] = slots[n] = s, i, c, state table.change_value = change_value rows.append(table) return rows
def build_inventory(self, items): inventory = self.data.get('Player', {}).get( 'Inventory', TAG_List()) or self.data.get('Inventory', TAG_List()) rows = [] items = items[0] slots = [["%s" % i, "", "0", "0"] for i in range(36)] slots += [["%s" % i, "", "0", "0"] for i in range(100, 104)] slots_set = [] for item in items: #&# Prototype for blocks/items names item_dict = mcitems.items.get(item['id'].value, None) if item_dict == None: name = item['id'].value else: if type(item_dict['name']) == list: if int(item['Damage'].value) >= len(item_dict['name']): block_id = map_block.get(item['id'].value, None) name = alphaMaterials.get( (int(block_id), int(item['Damage'].value))).name.rsplit( '(', 1)[0].strip() else: name = item_dict['name'][int(item['Damage'].value)] else: name = item_dict['name'] s = int(item['Slot'].value) slots_set.append(s) if s >= 100: s = s - 100 + 36 slots[s] = item['Slot'].value, mclangres.translate( name), item['Count'].value, item['Damage'].value #slots[s] = item['Slot'].value, item['id'].value.split(':')[-1], item['Count'].value, item['Damage'].value #&# width = self.side_panel_width - self.margin * 5 c0w = max(15, self.font.size("000")[0]) + 4 c2w = max(15, self.font.size("00")[0]) + 4 c3w = max(15, self.font.size("000")[0]) + 4 c1w = width - c0w - c2w - c3w font_height = self.font.size("qd")[1] tableCols = [ TableColumn("#", c0w), TableColumn("ID", c1w), TableColumn("C", c2w), TableColumn("D", c3w), ] height = self.displayRow.subwidgets[0].height table = TableView(height=height - (self.margin * 2), width=width, nrows=((height - (self.margin * 2) - font_height / 2) / font_height), columns=tableCols, row_height=font_height, header_height=font_height / 2) table.rows.tooltipText = "Double-click to edit" table.selected_row = None table.slots = slots def num_rows(): return len(slots) table.num_rows = num_rows def row_data(n): return slots[n] table.row_data = row_data def click_row(n, e): table.selected_row = n if e.num_clicks > 1: SlotEditor(table, row_data(n)).present() table.click_row = click_row def row_is_selected(n): return n == table.selected_row table.row_is_selected = row_is_selected def change_value(data): s, i, c, d = data s = int(s) s_idx = 0 #&# Prototype for blocks/items names name, state = map_items.get(mclangres.untranslate(i), (i, '0')) if ':' not in name: name = 'minecraft:%s' % name #&# if s in slots_set: for slot in inventory: if slot['Slot'].value == s: if not i or int(c) < 1: del inventory[s_idx] i = "" c = u'0' d = u'0' else: #&# Prototype for blocks/items names #slot['id'].value = 'minecraft:%s'%i slot['id'].value = name #&# slot['Count'].value = int(c) slot['Damage'].value = int(state) break s_idx += 1 else: new_slot = TAG_Compound() new_slot['Slot'] = TAG_Byte(s) #&# Prototype for blocka/items names #new_slot['id'] = TAG_String('minecraft:%s'%i) new_slot['id'] = TAG_String(name) #&# new_slot['Count'] = TAG_Byte(int(c)) new_slot['Damage'] = TAG_Short(int(state)) idx = s for slot in inventory: if slot['Slot'].value >= s: idx = slot['Slot'].value break inventory.insert(s, new_slot) slots_set.append(s) #&# Prototype for blocks/items names # if i == name: # i = name #&# if s >= 100: n = s - 100 + 36 else: n = s table.slots[n] = slots[n] = s, i, c, state table.change_value = change_value rows.append(table) return rows