diff --git a/amulet_map_editor/amulet_ui.py b/amulet_map_editor/amulet_ui.py index 7192ec4e..ec6558d7 100644 --- a/amulet_map_editor/amulet_ui.py +++ b/amulet_map_editor/amulet_ui.py @@ -5,10 +5,10 @@ import webbrowser from amulet.api.errors import LoaderNoneMatched from amulet_map_editor.amulet_wx.world_select import WorldSelectWindow -from amulet_map_editor import lang, config, version, log, IMG_DIR -from amulet_map_editor.plugins.programs import WorldManagerUI +from amulet_map_editor import lang, version, log, IMG_DIR +from amulet_map_editor.programs import WorldManagerUI from amulet_map_editor.amulet_wx import simple -from amulet_map_editor.plugins.programs import BaseWorldUI +from amulet_map_editor.programs import BaseWorldUI class AmuletMainWindow(wx.Frame): diff --git a/amulet_map_editor/plugins/programs/__init__.py b/amulet_map_editor/programs/__init__.py similarity index 99% rename from amulet_map_editor/plugins/programs/__init__.py rename to amulet_map_editor/programs/__init__.py index f0d6a251..787dc8c9 100644 --- a/amulet_map_editor/plugins/programs/__init__.py +++ b/amulet_map_editor/programs/__init__.py @@ -39,7 +39,7 @@ def load_extensions(): _extensions.extend(_fixed_extensions) for _, name, _ in pkgutil.iter_modules([os.path.join(os.path.dirname(__file__))]): # load module and confirm that all required attributes are defined - module = importlib.import_module(f'amulet_map_editor.plugins.programs.{name}') + module = importlib.import_module(f'amulet_map_editor.programs.{name}') if hasattr(module, 'export'): export = getattr(module, 'export') diff --git a/amulet_map_editor/plugins/programs/convert/__init__.py b/amulet_map_editor/programs/convert/__init__.py similarity index 100% rename from amulet_map_editor/plugins/programs/convert/__init__.py rename to amulet_map_editor/programs/convert/__init__.py diff --git a/amulet_map_editor/plugins/programs/convert/convert.py b/amulet_map_editor/programs/convert/convert.py similarity index 98% rename from amulet_map_editor/plugins/programs/convert/convert.py rename to amulet_map_editor/programs/convert/convert.py index e952bb24..3f976328 100644 --- a/amulet_map_editor/plugins/programs/convert/convert.py +++ b/amulet_map_editor/programs/convert/convert.py @@ -9,7 +9,7 @@ from amulet.world_interface.formats import Format from amulet_map_editor import lang, log from amulet_map_editor.amulet_wx.simple import SimplePanel from amulet_map_editor.amulet_wx.world_select import WorldSelectWindow, WorldUI -from amulet_map_editor.plugins.programs import BaseWorldProgram, MenuData +from amulet_map_editor.programs import BaseWorldProgram, MenuData thread_pool_executor = ThreadPoolExecutor(max_workers=1) diff --git a/amulet_map_editor/plugins/programs/convert/readme.md b/amulet_map_editor/programs/convert/readme.md similarity index 88% rename from amulet_map_editor/plugins/programs/convert/readme.md rename to amulet_map_editor/programs/convert/readme.md index e1037cae..07512dfb 100644 --- a/amulet_map_editor/plugins/programs/convert/readme.md +++ b/amulet_map_editor/programs/convert/readme.md @@ -7,13 +7,13 @@ This means that any chunks that exist in the source world will be overwritten in If there is a chunk in the destination world and there is no chunk in the source world at that location then the chunk will be left as it was. -![edit](../../../../resource/img/convert.jpg) +![edit](../../../resource/img/convert.jpg) ## How to use - Make sure that any world you wish to open is not open in game or another program. - Backup both the world you want to convert from and the world you want to convert to in case there are any corruptions. -- [Open your source world](../../../readme.md#open-world). This should bring up a screen which looks similar to the image above with "convert" on the left. +- [Open your source world](../../readme.md#open-world). This should bring up a screen which looks similar to the image above with "convert" on the left. - Click on the convert tab on the left if it is not enabled. This should make the screen look the same as the image above with the world imformation populated with your source world information. - Click the select output world button and select the destination world in a similar way to how you selected the source world. - Check that the worlds shown are the world you want to convert from and the world that you want to convert into. diff --git a/amulet_map_editor/plugins/programs/edit/__init__.py b/amulet_map_editor/programs/edit/__init__.py similarity index 100% rename from amulet_map_editor/plugins/programs/edit/__init__.py rename to amulet_map_editor/programs/edit/__init__.py diff --git a/amulet_map_editor/plugins/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection.png b/amulet_map_editor/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection.png similarity index 100% rename from amulet_map_editor/plugins/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection.png rename to amulet_map_editor/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection.png diff --git a/amulet_map_editor/plugins/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection_blue.png b/amulet_map_editor/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection_blue.png similarity index 100% rename from amulet_map_editor/plugins/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection_blue.png rename to amulet_map_editor/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection_blue.png diff --git a/amulet_map_editor/plugins/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection_green.png b/amulet_map_editor/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection_green.png similarity index 100% rename from amulet_map_editor/plugins/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection_green.png rename to amulet_map_editor/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/selection_green.png diff --git a/amulet_map_editor/plugins/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/translucent_white.png b/amulet_map_editor/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/translucent_white.png similarity index 100% rename from amulet_map_editor/plugins/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/translucent_white.png rename to amulet_map_editor/programs/edit/amulet_resource_pack/assets/amulet/textures/ui/translucent_white.png diff --git a/amulet_map_editor/plugins/programs/edit/amulet_resource_pack/pack.mcmeta b/amulet_map_editor/programs/edit/amulet_resource_pack/pack.mcmeta similarity index 100% rename from amulet_map_editor/plugins/programs/edit/amulet_resource_pack/pack.mcmeta rename to amulet_map_editor/programs/edit/amulet_resource_pack/pack.mcmeta diff --git a/amulet_map_editor/plugins/programs/edit/amulet_resource_pack/pack.png b/amulet_map_editor/programs/edit/amulet_resource_pack/pack.png similarity index 100% rename from amulet_map_editor/plugins/programs/edit/amulet_resource_pack/pack.png rename to amulet_map_editor/programs/edit/amulet_resource_pack/pack.png diff --git a/amulet_map_editor/plugins/programs/edit/canvas/__init__.py b/amulet_map_editor/programs/edit/canvas/__init__.py similarity index 100% rename from amulet_map_editor/plugins/programs/edit/canvas/__init__.py rename to amulet_map_editor/programs/edit/canvas/__init__.py diff --git a/amulet_map_editor/plugins/programs/edit/canvas/canvas.py b/amulet_map_editor/programs/edit/canvas/canvas.py similarity index 99% rename from amulet_map_editor/plugins/programs/edit/canvas/canvas.py rename to amulet_map_editor/programs/edit/canvas/canvas.py index 323415bc..921f1ebc 100644 --- a/amulet_map_editor/plugins/programs/edit/canvas/canvas.py +++ b/amulet_map_editor/programs/edit/canvas/canvas.py @@ -12,7 +12,7 @@ from amulet.api.chunk import Chunk from amulet.api.structure import Structure from amulet.api.errors import ChunkLoadError -from amulet_map_editor.opengl.mesh.world_renderer.world import RenderWorld, sin, cos, asin, acos, tan, atan +from amulet_map_editor.opengl.mesh.world_renderer.world import RenderWorld, sin, cos, tan, atan from amulet_map_editor.opengl.mesh.selection import RenderSelection from amulet_map_editor.opengl.mesh.structure import RenderStructure from amulet_map_editor.opengl import textureatlas @@ -20,7 +20,7 @@ from amulet_map_editor import log if TYPE_CHECKING: from amulet.api.world import World - from amulet_map_editor.plugins.programs.edit.edit import EditExtension + from amulet_map_editor.programs.edit.edit import EditExtension class EditCanvas(glcanvas.GLCanvas): diff --git a/amulet_map_editor/plugins/programs/edit/canvas/controllable_canvas.py b/amulet_map_editor/programs/edit/canvas/controllable_canvas.py similarity index 97% rename from amulet_map_editor/plugins/programs/edit/canvas/controllable_canvas.py rename to amulet_map_editor/programs/edit/canvas/controllable_canvas.py index d8e55cc4..59a7551d 100644 --- a/amulet_map_editor/plugins/programs/edit/canvas/controllable_canvas.py +++ b/amulet_map_editor/programs/edit/canvas/controllable_canvas.py @@ -1,9 +1,8 @@ -from typing import TYPE_CHECKING, Optional, Tuple, Union +from typing import TYPE_CHECKING, Tuple, Union import wx from .canvas import EditCanvas from amulet_map_editor.opengl.mesh.world_renderer.world import sin, cos -from amulet_map_editor.amulet_wx.simple import SimpleDialog from ..events import ( CameraMoveEvent, BoxGreenCornerChangeEvent, @@ -13,7 +12,7 @@ from ..events import ( if TYPE_CHECKING: from amulet.api.world import World - from amulet_map_editor.plugins.programs.edit.edit import EditExtension + from amulet_map_editor.programs.edit.edit import EditExtension key_map = { diff --git a/amulet_map_editor/plugins/programs/edit/edit.py b/amulet_map_editor/programs/edit/edit.py similarity index 97% rename from amulet_map_editor/plugins/programs/edit/edit.py rename to amulet_map_editor/programs/edit/edit.py index 480249ed..da37bd6f 100644 --- a/amulet_map_editor/plugins/programs/edit/edit.py +++ b/amulet_map_editor/programs/edit/edit.py @@ -11,21 +11,19 @@ from amulet.api.data_types import OperationType, OperationReturnType from amulet.operations.paste import paste from amulet.operations.fill import fill -from amulet_map_editor.plugins.programs import BaseWorldProgram, MenuData +from amulet_map_editor.programs import BaseWorldProgram, MenuData from amulet_map_editor.plugins import operations from .canvas.controllable_canvas import ControllableEditCanvas from .ui.file import FilePanel -from amulet_map_editor.plugins.programs.edit.ui.tool_options.operation import OperationUI -from amulet_map_editor.plugins.programs.edit.ui.tool_options.select import SelectOptions -from amulet_map_editor.plugins.programs.edit.ui.tool import ToolSelect +from amulet_map_editor.programs.edit.ui.tool_options.operation import OperationUI +from amulet_map_editor.programs.edit.ui.tool_options.select import SelectOptions +from amulet_map_editor.programs.edit.ui.tool import ToolSelect from .events import ( EVT_CAMERA_MOVE, EVT_SELECT_TOOL_ENABLED, - EVT_OPERATION_TOOL_ENABLED, - EVT_IMPORT_TOOL_ENABLED, - EVT_EXPORT_TOOL_ENABLED + EVT_OPERATION_TOOL_ENABLED ) if TYPE_CHECKING: diff --git a/amulet_map_editor/plugins/programs/edit/events.py b/amulet_map_editor/programs/edit/events.py similarity index 100% rename from amulet_map_editor/plugins/programs/edit/events.py rename to amulet_map_editor/programs/edit/events.py diff --git a/amulet_map_editor/plugins/programs/edit/readme.md b/amulet_map_editor/programs/edit/readme.md similarity index 98% rename from amulet_map_editor/plugins/programs/edit/readme.md rename to amulet_map_editor/programs/edit/readme.md index e6ba099f..9bd077ab 100644 --- a/amulet_map_editor/plugins/programs/edit/readme.md +++ b/amulet_map_editor/programs/edit/readme.md @@ -4,7 +4,7 @@ The edit program is a 3D world editor with similarities to MCEdit Unified. The user can select an area and run various operations on that area. -![edit](../../../../resource/img/edit.jpg) +![edit](../../../resource/img/edit.jpg) ## Controls diff --git a/amulet_map_editor/plugins/programs/edit/ui/__init__.py b/amulet_map_editor/programs/edit/ui/__init__.py similarity index 100% rename from amulet_map_editor/plugins/programs/edit/ui/__init__.py rename to amulet_map_editor/programs/edit/ui/__init__.py diff --git a/amulet_map_editor/plugins/programs/edit/ui/file.py b/amulet_map_editor/programs/edit/ui/file.py similarity index 96% rename from amulet_map_editor/plugins/programs/edit/ui/file.py rename to amulet_map_editor/programs/edit/ui/file.py index b9a9936b..61d1134b 100644 --- a/amulet_map_editor/plugins/programs/edit/ui/file.py +++ b/amulet_map_editor/programs/edit/ui/file.py @@ -6,7 +6,7 @@ from .goto import show_goto from amulet_map_editor.amulet_wx.simple import SimpleChoiceAny if TYPE_CHECKING: - from amulet_map_editor.plugins.programs.edit.canvas.controllable_canvas import ControllableEditCanvas + from amulet_map_editor.programs.edit.canvas.controllable_canvas import ControllableEditCanvas class FilePanel(wx.Panel): diff --git a/amulet_map_editor/plugins/programs/edit/ui/goto.py b/amulet_map_editor/programs/edit/ui/goto.py similarity index 100% rename from amulet_map_editor/plugins/programs/edit/ui/goto.py rename to amulet_map_editor/programs/edit/ui/goto.py diff --git a/amulet_map_editor/plugins/programs/edit/ui/tool.py b/amulet_map_editor/programs/edit/ui/tool.py similarity index 95% rename from amulet_map_editor/plugins/programs/edit/ui/tool.py rename to amulet_map_editor/programs/edit/ui/tool.py index 0ad09e93..938f9fc1 100644 --- a/amulet_map_editor/plugins/programs/edit/ui/tool.py +++ b/amulet_map_editor/programs/edit/ui/tool.py @@ -1,6 +1,6 @@ import wx -from amulet_map_editor.plugins.programs.edit.events import ( +from amulet_map_editor.programs.edit.events import ( SelectToolEnabledEvent, OperationToolEnabledEvent, ImportToolEnabledEvent, diff --git a/amulet_map_editor/plugins/programs/edit/ui/tool_options/__init__.py b/amulet_map_editor/programs/edit/ui/tool_options/__init__.py similarity index 100% rename from amulet_map_editor/plugins/programs/edit/ui/tool_options/__init__.py rename to amulet_map_editor/programs/edit/ui/tool_options/__init__.py diff --git a/amulet_map_editor/programs/edit/ui/tool_options/export_tool.py b/amulet_map_editor/programs/edit/ui/tool_options/export_tool.py new file mode 100644 index 00000000..e69de29b diff --git a/amulet_map_editor/programs/edit/ui/tool_options/import_export.py b/amulet_map_editor/programs/edit/ui/tool_options/import_export.py new file mode 100644 index 00000000..c128ed13 --- /dev/null +++ b/amulet_map_editor/programs/edit/ui/tool_options/import_export.py @@ -0,0 +1,90 @@ +from typing import TYPE_CHECKING, Type, Any +import wx +import weakref + +from amulet_map_editor.programs.edit.events import ( + EVT_BOX_GREEN_CORNER_CHANGE, + EVT_BOX_BLUE_CORNER_CHANGE, + EVT_BOX_COORDS_ENABLE +) + +if TYPE_CHECKING: + from amulet_map_editor.programs.edit.canvas.controllable_canvas import ControllableEditCanvas + + +class SelectOptions(wx.Panel): + def __init__(self, canvas: 'ControllableEditCanvas'): + wx.Panel.__init__(self, canvas) + self._canvas = weakref.ref(canvas) + self._sizer = wx.BoxSizer(wx.VERTICAL) + self.SetSizer(self._sizer) + + self._x1: wx.SpinCtrl = self._add_row('x1', wx.SpinCtrl, min=-30000000, max=30000000) + self._y1: wx.SpinCtrl = self._add_row('y1', wx.SpinCtrl, min=-30000000, max=30000000) + self._z1: wx.SpinCtrl = self._add_row('z1', wx.SpinCtrl, min=-30000000, max=30000000) + self._x1.Bind(wx.EVT_SPINCTRL, self._green_corner_input_change) + self._y1.Bind(wx.EVT_SPINCTRL, self._green_corner_input_change) + self._z1.Bind(wx.EVT_SPINCTRL, self._green_corner_input_change) + + self._x2: wx.SpinCtrl = self._add_row('x2', wx.SpinCtrl, min=-30000000, max=30000000) + self._y2: wx.SpinCtrl = self._add_row('y2', wx.SpinCtrl, min=-30000000, max=30000000) + self._z2: wx.SpinCtrl = self._add_row('z2', wx.SpinCtrl, min=-30000000, max=30000000) + self._x2.Bind(wx.EVT_SPINCTRL, self._blue_corner_input_change) + self._y2.Bind(wx.EVT_SPINCTRL, self._blue_corner_input_change) + self._z2.Bind(wx.EVT_SPINCTRL, self._blue_corner_input_change) + + self._x1.Disable() + self._y1.Disable() + self._z1.Disable() + self._x2.Disable() + self._y2.Disable() + self._z2.Disable() + + self._x1.SetBackgroundColour((160, 215, 145)) + self._y1.SetBackgroundColour((160, 215, 145)) + self._z1.SetBackgroundColour((160, 215, 145)) + + self._x2.SetBackgroundColour((150, 150, 215)) + self._y2.SetBackgroundColour((150, 150, 215)) + self._z2.SetBackgroundColour((150, 150, 215)) + + self._canvas().Bind(EVT_BOX_GREEN_CORNER_CHANGE, self._green_corner_renderer_change) + self._canvas().Bind(EVT_BOX_BLUE_CORNER_CHANGE, self._blue_corner_renderer_change) + self._canvas().Bind(EVT_BOX_COORDS_ENABLE, self._enable_scrolls) + + def enable(self): + self._canvas().select_mode = 0 + self.Show() + + def _add_row(self, label: str, wx_object: Type[wx.Object], **kwargs) -> Any: + sizer = wx.BoxSizer(wx.HORIZONTAL) + self._sizer.Add(sizer, 0, 0) + name_text = wx.StaticText(self, label=label) + sizer.Add(name_text, flag=wx.CENTER | wx.ALL | wx.EXPAND, border=5) + obj = wx_object(self, **kwargs) + sizer.Add(obj, flag=wx.CENTER | wx.ALL, border=5) + return obj + + def _green_corner_input_change(self, _): + self._canvas().selection_box.point1 = [self._x1.GetValue(), self._y1.GetValue(), self._z1.GetValue()] + + def _blue_corner_input_change(self, _): + self._canvas().selection_box.point2 = [self._x2.GetValue(), self._y2.GetValue(), self._z2.GetValue()] + + def _green_corner_renderer_change(self, evt): + self._x1.SetValue(evt.x) + self._y1.SetValue(evt.y) + self._z1.SetValue(evt.z) + + def _blue_corner_renderer_change(self, evt): + self._x2.SetValue(evt.x) + self._y2.SetValue(evt.y) + self._z2.SetValue(evt.z) + + def _enable_scrolls(self, evt): + self._x1.Enable(evt.enabled) + self._y1.Enable(evt.enabled) + self._z1.Enable(evt.enabled) + self._x2.Enable(evt.enabled) + self._y2.Enable(evt.enabled) + self._z2.Enable(evt.enabled) diff --git a/amulet_map_editor/plugins/programs/edit/ui/tool_options/operation/__init__.py b/amulet_map_editor/programs/edit/ui/tool_options/operation/__init__.py similarity index 100% rename from amulet_map_editor/plugins/programs/edit/ui/tool_options/operation/__init__.py rename to amulet_map_editor/programs/edit/ui/tool_options/operation/__init__.py diff --git a/amulet_map_editor/plugins/programs/edit/ui/tool_options/operation/select_destination.py b/amulet_map_editor/programs/edit/ui/tool_options/operation/select_destination.py similarity index 100% rename from amulet_map_editor/plugins/programs/edit/ui/tool_options/operation/select_destination.py rename to amulet_map_editor/programs/edit/ui/tool_options/operation/select_destination.py diff --git a/amulet_map_editor/plugins/programs/edit/ui/tool_options/operation/select_operation.py b/amulet_map_editor/programs/edit/ui/tool_options/operation/select_operation.py similarity index 100% rename from amulet_map_editor/plugins/programs/edit/ui/tool_options/operation/select_operation.py rename to amulet_map_editor/programs/edit/ui/tool_options/operation/select_operation.py diff --git a/amulet_map_editor/plugins/programs/edit/ui/tool_options/select.py b/amulet_map_editor/programs/edit/ui/tool_options/select.py similarity index 95% rename from amulet_map_editor/plugins/programs/edit/ui/tool_options/select.py rename to amulet_map_editor/programs/edit/ui/tool_options/select.py index c875f7b5..c128ed13 100644 --- a/amulet_map_editor/plugins/programs/edit/ui/tool_options/select.py +++ b/amulet_map_editor/programs/edit/ui/tool_options/select.py @@ -2,14 +2,14 @@ from typing import TYPE_CHECKING, Type, Any import wx import weakref -from amulet_map_editor.plugins.programs.edit.events import ( +from amulet_map_editor.programs.edit.events import ( EVT_BOX_GREEN_CORNER_CHANGE, EVT_BOX_BLUE_CORNER_CHANGE, EVT_BOX_COORDS_ENABLE ) if TYPE_CHECKING: - from amulet_map_editor.plugins.programs.edit.canvas.controllable_canvas import ControllableEditCanvas + from amulet_map_editor.programs.edit.canvas.controllable_canvas import ControllableEditCanvas class SelectOptions(wx.Panel): diff --git a/amulet_map_editor/readme.md b/amulet_map_editor/readme.md index 40e400b7..95ed5491 100644 --- a/amulet_map_editor/readme.md +++ b/amulet_map_editor/readme.md @@ -34,7 +34,7 @@ On the top are the worlds that you currently have open in Amulet to make it easy On the left are the different sub-programs contained within Amulet. The documentation for which can be found below. -[Convert Program Documentation](plugins/programs/convert/readme.md) +[Convert Program Documentation](programs/convert/readme.md) -[Edit Program Documentation](plugins/programs/edit/readme.md) +[Edit Program Documentation](programs/edit/readme.md)