amulet-core 1.9.19__py3-none-any.whl → 1.9.20__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of amulet-core might be problematic. Click here for more details.
- amulet/__init__.py +27 -27
- amulet/__pyinstaller/__init__.py +2 -2
- amulet/__pyinstaller/hook-amulet.py +4 -4
- amulet/_version.py +21 -21
- amulet/api/__init__.py +2 -2
- amulet/api/abstract_base_entity.py +128 -128
- amulet/api/block.py +630 -630
- amulet/api/block_entity.py +71 -71
- amulet/api/cache.py +107 -107
- amulet/api/chunk/__init__.py +6 -6
- amulet/api/chunk/biomes.py +207 -207
- amulet/api/chunk/block_entity_dict.py +175 -175
- amulet/api/chunk/blocks.py +46 -46
- amulet/api/chunk/chunk.py +389 -389
- amulet/api/chunk/entity_list.py +75 -75
- amulet/api/chunk/status.py +167 -167
- amulet/api/data_types/__init__.py +4 -4
- amulet/api/data_types/generic_types.py +4 -4
- amulet/api/data_types/operation_types.py +16 -16
- amulet/api/data_types/world_types.py +49 -49
- amulet/api/data_types/wrapper_types.py +71 -71
- amulet/api/entity.py +74 -74
- amulet/api/errors.py +119 -119
- amulet/api/history/__init__.py +36 -36
- amulet/api/history/base/__init__.py +3 -3
- amulet/api/history/base/base_history.py +26 -26
- amulet/api/history/base/history_manager.py +63 -63
- amulet/api/history/base/revision_manager.py +73 -73
- amulet/api/history/changeable.py +15 -15
- amulet/api/history/data_types.py +7 -7
- amulet/api/history/history_manager/__init__.py +3 -3
- amulet/api/history/history_manager/container.py +102 -102
- amulet/api/history/history_manager/database.py +279 -279
- amulet/api/history/history_manager/meta.py +93 -93
- amulet/api/history/history_manager/object.py +116 -116
- amulet/api/history/revision_manager/__init__.py +2 -2
- amulet/api/history/revision_manager/disk.py +33 -33
- amulet/api/history/revision_manager/ram.py +12 -12
- amulet/api/item.py +75 -75
- amulet/api/level/__init__.py +4 -4
- amulet/api/level/base_level/__init__.py +1 -1
- amulet/api/level/base_level/base_level.py +1035 -1026
- amulet/api/level/base_level/chunk_manager.py +227 -227
- amulet/api/level/base_level/clone.py +389 -389
- amulet/api/level/base_level/player_manager.py +101 -101
- amulet/api/level/immutable_structure/__init__.py +1 -1
- amulet/api/level/immutable_structure/immutable_structure.py +94 -94
- amulet/api/level/immutable_structure/void_format_wrapper.py +117 -117
- amulet/api/level/structure.py +22 -22
- amulet/api/level/world.py +19 -19
- amulet/api/partial_3d_array/__init__.py +2 -2
- amulet/api/partial_3d_array/base_partial_3d_array.py +263 -263
- amulet/api/partial_3d_array/bounded_partial_3d_array.py +528 -528
- amulet/api/partial_3d_array/data_types.py +15 -15
- amulet/api/partial_3d_array/unbounded_partial_3d_array.py +229 -229
- amulet/api/partial_3d_array/util.py +152 -152
- amulet/api/player.py +65 -65
- amulet/api/registry/__init__.py +2 -2
- amulet/api/registry/base_registry.py +34 -34
- amulet/api/registry/biome_manager.py +153 -153
- amulet/api/registry/block_manager.py +156 -156
- amulet/api/selection/__init__.py +2 -2
- amulet/api/selection/abstract_selection.py +315 -315
- amulet/api/selection/box.py +805 -805
- amulet/api/selection/group.py +488 -488
- amulet/api/structure.py +37 -37
- amulet/api/wrapper/__init__.py +8 -8
- amulet/api/wrapper/chunk/interface.py +441 -441
- amulet/api/wrapper/chunk/translator.py +567 -567
- amulet/api/wrapper/format_wrapper.py +772 -772
- amulet/api/wrapper/structure_format_wrapper.py +116 -116
- amulet/api/wrapper/world_format_wrapper.py +63 -63
- amulet/level/__init__.py +1 -1
- amulet/level/formats/anvil_forge_world.py +40 -40
- amulet/level/formats/anvil_world/__init__.py +3 -3
- amulet/level/formats/anvil_world/_sector_manager.py +291 -384
- amulet/level/formats/anvil_world/data_pack/__init__.py +2 -2
- amulet/level/formats/anvil_world/data_pack/data_pack.py +224 -224
- amulet/level/formats/anvil_world/data_pack/data_pack_manager.py +77 -77
- amulet/level/formats/anvil_world/dimension.py +177 -177
- amulet/level/formats/anvil_world/format.py +769 -769
- amulet/level/formats/anvil_world/region.py +384 -384
- amulet/level/formats/construction/__init__.py +3 -3
- amulet/level/formats/construction/format_wrapper.py +515 -515
- amulet/level/formats/construction/interface.py +134 -134
- amulet/level/formats/construction/section.py +60 -60
- amulet/level/formats/construction/util.py +165 -165
- amulet/level/formats/leveldb_world/__init__.py +3 -3
- amulet/level/formats/leveldb_world/chunk.py +33 -33
- amulet/level/formats/leveldb_world/dimension.py +385 -419
- amulet/level/formats/leveldb_world/format.py +659 -641
- amulet/level/formats/leveldb_world/interface/chunk/__init__.py +36 -36
- amulet/level/formats/leveldb_world/interface/chunk/base_leveldb_interface.py +836 -836
- amulet/level/formats/leveldb_world/interface/chunk/generate_interface.py +31 -31
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_0.py +30 -30
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_1.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_10.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_11.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_12.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_13.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_14.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_15.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_16.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_17.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_18.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_19.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_2.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_20.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_21.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_22.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_23.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_24.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_25.py +24 -24
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_26.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_27.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_28.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_29.py +33 -33
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_3.py +57 -57
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_30.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_31.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_32.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_33.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_34.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_35.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_36.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_37.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_38.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_39.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_4.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_40.py +16 -16
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_5.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_6.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_7.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_8.py +180 -180
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_9.py +18 -18
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_chunk_versions.py +79 -79
- amulet/level/formats/mcstructure/__init__.py +3 -3
- amulet/level/formats/mcstructure/chunk.py +50 -50
- amulet/level/formats/mcstructure/format_wrapper.py +408 -408
- amulet/level/formats/mcstructure/interface.py +175 -175
- amulet/level/formats/schematic/__init__.py +3 -3
- amulet/level/formats/schematic/chunk.py +55 -55
- amulet/level/formats/schematic/data_types.py +4 -4
- amulet/level/formats/schematic/format_wrapper.py +373 -373
- amulet/level/formats/schematic/interface.py +142 -142
- amulet/level/formats/sponge_schem/__init__.py +4 -4
- amulet/level/formats/sponge_schem/chunk.py +62 -62
- amulet/level/formats/sponge_schem/format_wrapper.py +463 -463
- amulet/level/formats/sponge_schem/interface.py +118 -118
- amulet/level/formats/sponge_schem/varint/__init__.py +1 -1
- amulet/level/formats/sponge_schem/varint/varint.py +87 -87
- amulet/level/interfaces/chunk/anvil/anvil_0.py +72 -72
- amulet/level/interfaces/chunk/anvil/anvil_1444.py +336 -336
- amulet/level/interfaces/chunk/anvil/anvil_1466.py +94 -94
- amulet/level/interfaces/chunk/anvil/anvil_1467.py +37 -37
- amulet/level/interfaces/chunk/anvil/anvil_1484.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_1503.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_1519.py +34 -34
- amulet/level/interfaces/chunk/anvil/anvil_1901.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_1908.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_1912.py +21 -21
- amulet/level/interfaces/chunk/anvil/anvil_1934.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_2203.py +69 -69
- amulet/level/interfaces/chunk/anvil/anvil_2529.py +19 -19
- amulet/level/interfaces/chunk/anvil/anvil_2681.py +76 -76
- amulet/level/interfaces/chunk/anvil/anvil_2709.py +19 -19
- amulet/level/interfaces/chunk/anvil/anvil_2844.py +267 -267
- amulet/level/interfaces/chunk/anvil/anvil_3463.py +19 -19
- amulet/level/interfaces/chunk/anvil/anvil_na.py +607 -607
- amulet/level/interfaces/chunk/anvil/base_anvil_interface.py +326 -326
- amulet/level/load.py +59 -59
- amulet/level/loader.py +95 -95
- amulet/level/translators/chunk/bedrock/__init__.py +267 -267
- amulet/level/translators/chunk/bedrock/bedrock_nbt_blockstate_translator.py +46 -46
- amulet/level/translators/chunk/bedrock/bedrock_numerical_translator.py +39 -39
- amulet/level/translators/chunk/bedrock/bedrock_psudo_numerical_translator.py +37 -37
- amulet/level/translators/chunk/java/java_1_18_translator.py +40 -40
- amulet/level/translators/chunk/java/java_blockstate_translator.py +94 -94
- amulet/level/translators/chunk/java/java_numerical_translator.py +62 -62
- amulet/libs/leveldb/__init__.py +7 -7
- amulet/operations/__init__.py +5 -5
- amulet/operations/clone.py +18 -18
- amulet/operations/delete_chunk.py +32 -32
- amulet/operations/fill.py +30 -30
- amulet/operations/paste.py +65 -65
- amulet/operations/replace.py +58 -58
- amulet/utils/__init__.py +14 -14
- amulet/utils/format_utils.py +41 -41
- amulet/utils/generator.py +15 -15
- amulet/utils/matrix.py +243 -243
- amulet/utils/numpy_helpers.py +46 -46
- amulet/utils/world_utils.py +349 -349
- {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/METADATA +97 -97
- amulet_core-1.9.20.dist-info/RECORD +208 -0
- amulet_core-1.9.19.dist-info/RECORD +0 -208
- {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/WHEEL +0 -0
- {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/entry_points.txt +0 -0
- {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/top_level.txt +0 -0
amulet/__init__.py
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import logging
|
|
3
|
-
import platformdirs
|
|
4
|
-
|
|
5
|
-
from ._version import get_versions
|
|
6
|
-
|
|
7
|
-
__version__ = get_versions()["version"]
|
|
8
|
-
del get_versions
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
entity_support = False
|
|
12
|
-
|
|
13
|
-
IMG_DIRECTORY = os.path.join(os.path.dirname(__file__), "img")
|
|
14
|
-
|
|
15
|
-
# Initialise default paths. Applications should override these environment variables.
|
|
16
|
-
# os.environ.setdefault("DATA_DIR", platformdirs.user_data_dir("AmuletTeam", "AmuletTeam"))
|
|
17
|
-
# os.environ.setdefault("CONFIG_DIR", platformdirs.user_config_dir("AmuletTeam", "AmuletTeam"))
|
|
18
|
-
os.environ.setdefault(
|
|
19
|
-
"CACHE_DIR", platformdirs.user_cache_dir("AmuletTeam", "AmuletTeam")
|
|
20
|
-
)
|
|
21
|
-
os.environ.setdefault("LOG_DIR", platformdirs.user_log_dir("AmuletTeam", "AmuletTeam"))
|
|
22
|
-
|
|
23
|
-
from .api import *
|
|
24
|
-
from amulet.level.load import load_level, load_format
|
|
25
|
-
|
|
26
|
-
# init a default logger
|
|
27
|
-
logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
|
|
1
|
+
import os
|
|
2
|
+
import logging
|
|
3
|
+
import platformdirs
|
|
4
|
+
|
|
5
|
+
from ._version import get_versions
|
|
6
|
+
|
|
7
|
+
__version__ = get_versions()["version"]
|
|
8
|
+
del get_versions
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
entity_support = False
|
|
12
|
+
|
|
13
|
+
IMG_DIRECTORY = os.path.join(os.path.dirname(__file__), "img")
|
|
14
|
+
|
|
15
|
+
# Initialise default paths. Applications should override these environment variables.
|
|
16
|
+
# os.environ.setdefault("DATA_DIR", platformdirs.user_data_dir("AmuletTeam", "AmuletTeam"))
|
|
17
|
+
# os.environ.setdefault("CONFIG_DIR", platformdirs.user_config_dir("AmuletTeam", "AmuletTeam"))
|
|
18
|
+
os.environ.setdefault(
|
|
19
|
+
"CACHE_DIR", platformdirs.user_cache_dir("AmuletTeam", "AmuletTeam")
|
|
20
|
+
)
|
|
21
|
+
os.environ.setdefault("LOG_DIR", platformdirs.user_log_dir("AmuletTeam", "AmuletTeam"))
|
|
22
|
+
|
|
23
|
+
from .api import *
|
|
24
|
+
from amulet.level.load import load_level, load_format
|
|
25
|
+
|
|
26
|
+
# init a default logger
|
|
27
|
+
logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
|
amulet/__pyinstaller/__init__.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
def get_hook_dirs():
|
|
2
|
-
return __path__
|
|
1
|
+
def get_hook_dirs():
|
|
2
|
+
return __path__
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
|
|
2
|
-
|
|
3
|
-
hiddenimports = collect_submodules("amulet")
|
|
4
|
-
datas = collect_data_files("amulet")
|
|
1
|
+
from PyInstaller.utils.hooks import collect_data_files, collect_submodules
|
|
2
|
+
|
|
3
|
+
hiddenimports = collect_submodules("amulet")
|
|
4
|
+
datas = collect_data_files("amulet")
|
amulet/_version.py
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
# This file was generated by 'versioneer.py' (0.19) from
|
|
3
|
-
# revision-control system data, or from the parent directory name of an
|
|
4
|
-
# unpacked source archive. Distribution tarballs contain a pre-generated copy
|
|
5
|
-
# of this file.
|
|
6
|
-
|
|
7
|
-
import json
|
|
8
|
-
|
|
9
|
-
version_json = '''
|
|
10
|
-
{
|
|
11
|
-
"date": "2023-09-
|
|
12
|
-
"dirty": false,
|
|
13
|
-
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.9.
|
|
16
|
-
}
|
|
17
|
-
''' # END VERSION_JSON
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def get_versions():
|
|
21
|
-
return json.loads(version_json)
|
|
1
|
+
|
|
2
|
+
# This file was generated by 'versioneer.py' (0.19) from
|
|
3
|
+
# revision-control system data, or from the parent directory name of an
|
|
4
|
+
# unpacked source archive. Distribution tarballs contain a pre-generated copy
|
|
5
|
+
# of this file.
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
|
|
9
|
+
version_json = '''
|
|
10
|
+
{
|
|
11
|
+
"date": "2023-09-29T11:29:40+0100",
|
|
12
|
+
"dirty": false,
|
|
13
|
+
"error": null,
|
|
14
|
+
"full-revisionid": "b673f749bf1c348e31bf0594e71ffa30f6ea8519",
|
|
15
|
+
"version": "1.9.20"
|
|
16
|
+
}
|
|
17
|
+
''' # END VERSION_JSON
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def get_versions():
|
|
21
|
+
return json.loads(version_json)
|
amulet/api/__init__.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
from .block import *
|
|
2
|
-
from .selection import *
|
|
1
|
+
from .block import *
|
|
2
|
+
from .selection import *
|
|
@@ -1,128 +1,128 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from abc import ABC
|
|
4
|
-
from typing import Union, Optional
|
|
5
|
-
from amulet_nbt import NamedTag, CompoundTag
|
|
6
|
-
from amulet.api.data_types import BlockCoordinates, PointCoordinates
|
|
7
|
-
|
|
8
|
-
_Coord = Union[float, int]
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class AbstractBaseEntity(ABC):
|
|
12
|
-
obj_name: str = None
|
|
13
|
-
coord_types: Optional[tuple] = None
|
|
14
|
-
|
|
15
|
-
def __init__(
|
|
16
|
-
self,
|
|
17
|
-
namespace: str,
|
|
18
|
-
base_name: str,
|
|
19
|
-
x: _Coord,
|
|
20
|
-
y: _Coord,
|
|
21
|
-
z: _Coord,
|
|
22
|
-
nbt: NamedTag,
|
|
23
|
-
):
|
|
24
|
-
assert isinstance(self.obj_name, str)
|
|
25
|
-
assert self.coord_types is not None
|
|
26
|
-
assert isinstance(namespace, str), "namespace must be a string"
|
|
27
|
-
assert isinstance(base_name, str), "base_name must be a string"
|
|
28
|
-
self._namespace = namespace
|
|
29
|
-
self._base_name = base_name
|
|
30
|
-
self._namespaced_name = None
|
|
31
|
-
self._gen_namespaced_name()
|
|
32
|
-
assert all(
|
|
33
|
-
isinstance(c, self.coord_types) for c in (x, y, z)
|
|
34
|
-
), f"coordinates type must be in {self.coord_types}"
|
|
35
|
-
self._x = self.coord_types[0](x)
|
|
36
|
-
self._y = self.coord_types[0](y)
|
|
37
|
-
self._z = self.coord_types[0](z)
|
|
38
|
-
if isinstance(nbt, CompoundTag):
|
|
39
|
-
self._nbt = NamedTag(nbt)
|
|
40
|
-
elif isinstance(nbt, NamedTag):
|
|
41
|
-
self._nbt = nbt
|
|
42
|
-
else:
|
|
43
|
-
raise Exception(f"nbt must be an NamedTag. Got {nbt}")
|
|
44
|
-
|
|
45
|
-
def _gen_namespaced_name(self):
|
|
46
|
-
self._namespaced_name = f'{self.namespace or ""}:{self.base_name}'
|
|
47
|
-
|
|
48
|
-
def __repr__(self):
|
|
49
|
-
return f"{self.obj_name}[{self.namespaced_name}, {self.x}, {self.y}, {self.z}]{{{self.nbt}}}"
|
|
50
|
-
|
|
51
|
-
@property
|
|
52
|
-
def namespaced_name(self) -> str:
|
|
53
|
-
"""
|
|
54
|
-
The namespace:base_name of the entity represented by the object (eg: `minecraft:creeper`)
|
|
55
|
-
|
|
56
|
-
If the given namespace is an empty string it will just return the base name.
|
|
57
|
-
|
|
58
|
-
:return: The namespace:base_name of the block entity or just base_name if no namespace
|
|
59
|
-
"""
|
|
60
|
-
return self._namespaced_name
|
|
61
|
-
|
|
62
|
-
@namespaced_name.setter
|
|
63
|
-
def namespaced_name(self, value: str):
|
|
64
|
-
self._namespaced_name = value
|
|
65
|
-
*namespace, self._base_name = value.split(":", 1)
|
|
66
|
-
self._namespace = namespace[0] if namespace else ""
|
|
67
|
-
|
|
68
|
-
@property
|
|
69
|
-
def namespace(self) -> str:
|
|
70
|
-
"""
|
|
71
|
-
The namespace of the block entity represented by the BlockEntity object (eg: `minecraft`)
|
|
72
|
-
|
|
73
|
-
:return: The namespace of the block entity
|
|
74
|
-
"""
|
|
75
|
-
return self._namespace
|
|
76
|
-
|
|
77
|
-
@namespace.setter
|
|
78
|
-
def namespace(self, value: str):
|
|
79
|
-
self._namespace = value
|
|
80
|
-
self._gen_namespaced_name()
|
|
81
|
-
|
|
82
|
-
@property
|
|
83
|
-
def base_name(self) -> str:
|
|
84
|
-
"""
|
|
85
|
-
The base name of the block entity represented by the BlockEntity object (eg: `creeper`, `pig`)
|
|
86
|
-
|
|
87
|
-
:return: The base name of the block entity
|
|
88
|
-
"""
|
|
89
|
-
return self._base_name
|
|
90
|
-
|
|
91
|
-
@base_name.setter
|
|
92
|
-
def base_name(self, value: str):
|
|
93
|
-
self._base_name = value
|
|
94
|
-
self._gen_namespaced_name()
|
|
95
|
-
|
|
96
|
-
@property
|
|
97
|
-
def x(self) -> _Coord:
|
|
98
|
-
return self._x
|
|
99
|
-
|
|
100
|
-
@property
|
|
101
|
-
def y(self) -> _Coord:
|
|
102
|
-
return self._y
|
|
103
|
-
|
|
104
|
-
@property
|
|
105
|
-
def z(self) -> _Coord:
|
|
106
|
-
return self._z
|
|
107
|
-
|
|
108
|
-
@property
|
|
109
|
-
def location(self) -> Union[BlockCoordinates, PointCoordinates]:
|
|
110
|
-
return self._x, self._y, self._z
|
|
111
|
-
|
|
112
|
-
@property
|
|
113
|
-
def nbt(self) -> NamedTag:
|
|
114
|
-
"""
|
|
115
|
-
The NBT behind the object
|
|
116
|
-
|
|
117
|
-
:getter: Get the NBT data stored in the object
|
|
118
|
-
:setter: Set the NBT data stored in the object
|
|
119
|
-
|
|
120
|
-
:return: A NamedTag
|
|
121
|
-
"""
|
|
122
|
-
return self._nbt
|
|
123
|
-
|
|
124
|
-
@nbt.setter
|
|
125
|
-
def nbt(self, value: NamedTag):
|
|
126
|
-
if not isinstance(value, NamedTag):
|
|
127
|
-
raise TypeError
|
|
128
|
-
self._nbt = value
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC
|
|
4
|
+
from typing import Union, Optional
|
|
5
|
+
from amulet_nbt import NamedTag, CompoundTag
|
|
6
|
+
from amulet.api.data_types import BlockCoordinates, PointCoordinates
|
|
7
|
+
|
|
8
|
+
_Coord = Union[float, int]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class AbstractBaseEntity(ABC):
|
|
12
|
+
obj_name: str = None
|
|
13
|
+
coord_types: Optional[tuple] = None
|
|
14
|
+
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
namespace: str,
|
|
18
|
+
base_name: str,
|
|
19
|
+
x: _Coord,
|
|
20
|
+
y: _Coord,
|
|
21
|
+
z: _Coord,
|
|
22
|
+
nbt: NamedTag,
|
|
23
|
+
):
|
|
24
|
+
assert isinstance(self.obj_name, str)
|
|
25
|
+
assert self.coord_types is not None
|
|
26
|
+
assert isinstance(namespace, str), "namespace must be a string"
|
|
27
|
+
assert isinstance(base_name, str), "base_name must be a string"
|
|
28
|
+
self._namespace = namespace
|
|
29
|
+
self._base_name = base_name
|
|
30
|
+
self._namespaced_name = None
|
|
31
|
+
self._gen_namespaced_name()
|
|
32
|
+
assert all(
|
|
33
|
+
isinstance(c, self.coord_types) for c in (x, y, z)
|
|
34
|
+
), f"coordinates type must be in {self.coord_types}"
|
|
35
|
+
self._x = self.coord_types[0](x)
|
|
36
|
+
self._y = self.coord_types[0](y)
|
|
37
|
+
self._z = self.coord_types[0](z)
|
|
38
|
+
if isinstance(nbt, CompoundTag):
|
|
39
|
+
self._nbt = NamedTag(nbt)
|
|
40
|
+
elif isinstance(nbt, NamedTag):
|
|
41
|
+
self._nbt = nbt
|
|
42
|
+
else:
|
|
43
|
+
raise Exception(f"nbt must be an NamedTag. Got {nbt}")
|
|
44
|
+
|
|
45
|
+
def _gen_namespaced_name(self):
|
|
46
|
+
self._namespaced_name = f'{self.namespace or ""}:{self.base_name}'
|
|
47
|
+
|
|
48
|
+
def __repr__(self):
|
|
49
|
+
return f"{self.obj_name}[{self.namespaced_name}, {self.x}, {self.y}, {self.z}]{{{self.nbt}}}"
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def namespaced_name(self) -> str:
|
|
53
|
+
"""
|
|
54
|
+
The namespace:base_name of the entity represented by the object (eg: `minecraft:creeper`)
|
|
55
|
+
|
|
56
|
+
If the given namespace is an empty string it will just return the base name.
|
|
57
|
+
|
|
58
|
+
:return: The namespace:base_name of the block entity or just base_name if no namespace
|
|
59
|
+
"""
|
|
60
|
+
return self._namespaced_name
|
|
61
|
+
|
|
62
|
+
@namespaced_name.setter
|
|
63
|
+
def namespaced_name(self, value: str):
|
|
64
|
+
self._namespaced_name = value
|
|
65
|
+
*namespace, self._base_name = value.split(":", 1)
|
|
66
|
+
self._namespace = namespace[0] if namespace else ""
|
|
67
|
+
|
|
68
|
+
@property
|
|
69
|
+
def namespace(self) -> str:
|
|
70
|
+
"""
|
|
71
|
+
The namespace of the block entity represented by the BlockEntity object (eg: `minecraft`)
|
|
72
|
+
|
|
73
|
+
:return: The namespace of the block entity
|
|
74
|
+
"""
|
|
75
|
+
return self._namespace
|
|
76
|
+
|
|
77
|
+
@namespace.setter
|
|
78
|
+
def namespace(self, value: str):
|
|
79
|
+
self._namespace = value
|
|
80
|
+
self._gen_namespaced_name()
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def base_name(self) -> str:
|
|
84
|
+
"""
|
|
85
|
+
The base name of the block entity represented by the BlockEntity object (eg: `creeper`, `pig`)
|
|
86
|
+
|
|
87
|
+
:return: The base name of the block entity
|
|
88
|
+
"""
|
|
89
|
+
return self._base_name
|
|
90
|
+
|
|
91
|
+
@base_name.setter
|
|
92
|
+
def base_name(self, value: str):
|
|
93
|
+
self._base_name = value
|
|
94
|
+
self._gen_namespaced_name()
|
|
95
|
+
|
|
96
|
+
@property
|
|
97
|
+
def x(self) -> _Coord:
|
|
98
|
+
return self._x
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def y(self) -> _Coord:
|
|
102
|
+
return self._y
|
|
103
|
+
|
|
104
|
+
@property
|
|
105
|
+
def z(self) -> _Coord:
|
|
106
|
+
return self._z
|
|
107
|
+
|
|
108
|
+
@property
|
|
109
|
+
def location(self) -> Union[BlockCoordinates, PointCoordinates]:
|
|
110
|
+
return self._x, self._y, self._z
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def nbt(self) -> NamedTag:
|
|
114
|
+
"""
|
|
115
|
+
The NBT behind the object
|
|
116
|
+
|
|
117
|
+
:getter: Get the NBT data stored in the object
|
|
118
|
+
:setter: Set the NBT data stored in the object
|
|
119
|
+
|
|
120
|
+
:return: A NamedTag
|
|
121
|
+
"""
|
|
122
|
+
return self._nbt
|
|
123
|
+
|
|
124
|
+
@nbt.setter
|
|
125
|
+
def nbt(self, value: NamedTag):
|
|
126
|
+
if not isinstance(value, NamedTag):
|
|
127
|
+
raise TypeError
|
|
128
|
+
self._nbt = value
|