mirror of
https://github.com/Steffo99/lihzahrd.git
synced 2024-11-21 15:44:24 +00:00
Added pylon, plate + hat/weapon rack parsing.
Combined Mannequin and Hat Tack into ClothingDisplay class. Plate and weapon rack into single item display. Perhaps they'd be better as tile entities?
This commit is contained in:
parent
a1bf13b801
commit
dfaf41df91
6 changed files with 79 additions and 9 deletions
|
@ -1,6 +1,7 @@
|
|||
from .itemtype import ItemType
|
||||
from .itemstack import ItemStack
|
||||
from .chest import Chest
|
||||
from .mannequin import Mannequin
|
||||
from .clothingdisplay import ClothingDisplay
|
||||
from .singleitemdisplay import SingleItemDisplay
|
||||
|
||||
__all__ = ["ItemType", "ItemStack", "Chest", "Mannequin"]
|
||||
__all__ = ["ItemType", "ItemStack", "Chest", "ClothingDisplay", "SingleItemDisplay"]
|
||||
|
|
|
@ -1,16 +1,20 @@
|
|||
import typing
|
||||
from .itemstack import ItemStack
|
||||
|
||||
class Mannequin:
|
||||
"""Data pertaining to a Logic Sensor (https://terraria.gamepedia.com/Mannequin)."""
|
||||
class ClothingDisplay:
|
||||
"""Data pertaining to an item to display clothing.
|
||||
Currently this is a Womannequin/Mannequin (https://terraria.gamepedia.com/Womannequin)
|
||||
and hat rack (https://terraria.gamepedia.com/Hat_Rack).
|
||||
"""
|
||||
|
||||
__slots__ = "item_flags", "dye_flags", "wearing_items", "wearing_dyes"
|
||||
__slots__ = "item_flags", "dye_flags", "wearing_items", "wearing_dyes", "display_type"
|
||||
|
||||
def __init__(self,
|
||||
item_flags: typing.List[bool],
|
||||
dye_flags: typing.List[bool],
|
||||
wearing_items: typing.List[ItemStack],
|
||||
wearing_dyes: typing.List[ItemStack],):
|
||||
wearing_dyes: typing.List[ItemStack],
|
||||
display_type: str,):
|
||||
|
||||
self.item_flags: typing.List[bool] = item_flags
|
||||
"""Which slots have items in them."""
|
||||
|
@ -20,7 +24,9 @@ class Mannequin:
|
|||
"""What items is the mannequin wearing."""
|
||||
self.wearing_dyes: typing.List[ItemStack] = wearing_dyes
|
||||
"""What dyes is the mannequin wearing."""
|
||||
self.display_type: str = display_type
|
||||
"""What type of display is this?"""
|
||||
|
||||
|
||||
def __repr__(self):
|
||||
return f"Mannequin()"
|
||||
return f"ClothingDisplay(type={self.display_type}, dyes={len(self.wearing_dyes)}, )"
|
23
lihzahrd/chests/singleitemdisplay.py
Executable file
23
lihzahrd/chests/singleitemdisplay.py
Executable file
|
@ -0,0 +1,23 @@
|
|||
import typing
|
||||
from .itemstack import ItemStack
|
||||
|
||||
class SingleItemDisplay:
|
||||
"""Data pertaining to a single display item.
|
||||
Currently weapon rack (https://terraria.gamepedia.com/Weapon_Rack)
|
||||
and food plate (https://terraria.gamepedia.com/Plate).
|
||||
"""
|
||||
|
||||
__slots__ = "display_item", "display_type"
|
||||
|
||||
def __init__(self,
|
||||
display_item: typing.List[ItemStack],
|
||||
display_type: str):
|
||||
|
||||
self.display_item: typing.List[ItemStack] = display_item
|
||||
"""What item is on display."""
|
||||
|
||||
self.display_type: str = display_type
|
||||
"""What type of single item display this is."""
|
||||
|
||||
def __repr__(self):
|
||||
return f"SingleItemDisplay(display_type={self.display_type}, display_item={self.display_item})"
|
|
@ -2,5 +2,6 @@ from .tileentity import TileEntity
|
|||
from .itemframe import ItemFrame
|
||||
from .logicsensor import LogicSensor
|
||||
from .targetdummy import TargetDummy
|
||||
from .pylon import Pylon
|
||||
|
||||
__all__ = ["TileEntity", "ItemFrame", "LogicSensor", "TargetDummy"]
|
||||
__all__ = ["TileEntity", "ItemFrame", "LogicSensor", "TargetDummy", "Pylon"]
|
||||
|
|
8
lihzahrd/tileentities/pylon.py
Executable file
8
lihzahrd/tileentities/pylon.py
Executable file
|
@ -0,0 +1,8 @@
|
|||
class Pylon:
|
||||
"""Data pertaining to a Pylon (https://terraria.gamepedia.com/Pylons)"""
|
||||
|
||||
def __init__(self, pylon: bool = True):
|
||||
self.pylon: bool = pylon
|
||||
|
||||
def __repr__(self):
|
||||
return f"pylon={self.pylon}"
|
|
@ -757,7 +757,38 @@ class World:
|
|||
slot_item_modifier = f.int1()
|
||||
slot_item_stack = f.int2()
|
||||
mannequin_dyes[slot] = ItemStack(slot_item_id, slot_item_modifier, slot_item_stack)
|
||||
te_extra = Mannequin(item_flags, dye_flags, mannequin_items, mannequin_dyes)
|
||||
te_extra = ClothingDisplay(item_flags, dye_flags, mannequin_items, mannequin_dyes, "mannequin")
|
||||
# Weapon Rack
|
||||
elif te_type == 4:
|
||||
rack_item = ItemStack(ItemType(f.int2()), f.int1(), f.int2())
|
||||
te_extra = SingleItemDisplay(rack_item, "weapon_rack")
|
||||
# Hat Rack
|
||||
elif te_type == 5:
|
||||
# This isn't 100% tested, but the first two flags should be items, and the second two should be dyes.
|
||||
item_flags = f.bits()
|
||||
# Maximum of two items slots and two dye slots.
|
||||
rack_items = [None for _ in range(2)]
|
||||
rack_dyes = [None for _ in range(2)]
|
||||
for slot in range(2):
|
||||
if item_flags[slot]:
|
||||
slot_item_id = ItemType(f.int2())
|
||||
slot_item_modifier = f.int1()
|
||||
slot_item_stack = f.int2()
|
||||
rack_items[slot] = ItemStack(slot_item_id, slot_item_modifier, slot_item_stack)
|
||||
for slot in range(2):
|
||||
if item_flags[slot + 2]:
|
||||
slot_item_id = ItemType(f.int2())
|
||||
slot_item_modifier = f.int1()
|
||||
slot_item_stack = f.int2()
|
||||
rack_dyes[slot] = ItemStack(slot_item_id, slot_item_modifier, slot_item_stack)
|
||||
te_extra = ClothingDisplay(item_flags, dye_flags, mannequin_items, mannequin_dyes, "hat_rack")
|
||||
# Food Plate
|
||||
elif te_type == 6:
|
||||
plate_item = ItemStack(ItemType(f.int2()), f.int1(), f.int2())
|
||||
te_extra = SingleItemDisplay(plate_item, "food_plate")
|
||||
# Teleport Pylon
|
||||
elif te_type == 7:
|
||||
te_extra = Pylon()
|
||||
else:
|
||||
print(f"te_type:", te_type)
|
||||
te_extra = None
|
||||
|
|
Loading…
Reference in a new issue