diff --git a/src/mcedit2/editortools/edit_chunk.py b/src/mcedit2/editortools/edit_chunk.py
index 3ce577d..3d63664 100644
--- a/src/mcedit2/editortools/edit_chunk.py
+++ b/src/mcedit2/editortools/edit_chunk.py
@@ -5,7 +5,9 @@ from __future__ import absolute_import, division, print_function, unicode_litera
import logging
from PySide.QtCore import Qt
from mcedit2.editortools import EditorTool
+from mcedit2.editortools.select import SelectionBoxNode
from mcedit2.nbt_treemodel import NBTTreeModel, NBTFilterProxyModel
+from mcedit2.rendering import scenegraph
from mcedit2.util.load_ui import load_ui
log = logging.getLogger(__name__)
@@ -22,20 +24,100 @@ class ChunkTool(EditorTool):
super(ChunkTool, self).__init__(editorSession, *args, **kwargs)
self.toolWidget = load_ui("editortools/edit_chunk.ui")
+ self.toolWidget.tabWidget.currentChanged.connect(self.tabDidChange)
+
+ self.toolWidget.terrainPopulatedInput.toggled.connect(self.terrainPopulatedDidChange)
+ self.toolWidget.lightPopulatedInput.toggled.connect(self.lightPopulatedDidChange)
+ self.toolWidget.inhabitedTimeInput.valueChanged.connect(self.inhabitedTimeDidChange)
+ self.toolWidget.updateTimeInput.valueChanged.connect(self.updateTimeDidChange)
+
+ self.toolWidget.cxSpinBox.valueChanged.connect(self.chunkPositionDidChange)
+ self.toolWidget.czSpinBox.valueChanged.connect(self.chunkPositionDidChange)
+
self.currentChunk = None
+ self.selectionNode = None
+ self.overlayNode = scenegraph.Node()
+ self.updateChunkWidget()
+
+ def toolInactive(self):
+ self.overlayNode.removeChild(self.selectionNode)
+ self.selectionNode = None
+ self.currentChunk = None
+ self.updateChunkWidget()
+
+
+ def updateChunkWidget(self):
+ if self.currentChunk:
+ chunk = self.currentChunk
+
+ self.toolWidget.terrainPopulatedInput.setEnabled(True)
+ self.toolWidget.terrainPopulatedInput.setChecked(chunk.TerrainPopulated)
+
+ levelTag = chunk.rootTag["Level"]
+ if "LightPopulated" in levelTag:
+ self.toolWidget.lightPopulatedInput.setEnabled(True)
+ self.toolWidget.lightPopulatedInput.setChecked(levelTag["LightPopulated"].value)
+ else:
+ self.toolWidget.lightPopulatedInput.setEnabled(False)
+
+ if "InhabitedTime" in levelTag:
+ self.toolWidget.inhabitedTimeInput.setEnabled(True)
+ self.toolWidget.inhabitedTimeInput.setValue(levelTag["InhabitedTime"].value)
+ else:
+ self.toolWidget.inhabitedTimeInput.setEnabled(False)
+
+ if "LastUpdate" in levelTag:
+ self.toolWidget.updateTimeInput.setEnabled(True)
+ self.toolWidget.updateTimeInput.setValue(levelTag["LastUpdate"].value)
+ else:
+ self.toolWidget.updateTimeInput.setEnabled(False)
+ else:
+ self.toolWidget.terrainPopulatedInput.setEnabled(False)
+ self.toolWidget.lightPopulatedInput.setEnabled(False)
+ self.toolWidget.inhabitedTimeInput.setEnabled(False)
+ self.toolWidget.updateTimeInput.setEnabled(False)
+
+
+ def terrainPopulatedDidChange(self, value):
+ self.currentChunk.TerrainPopulated = value
+
+ def lightPopulatedDidChange(self, value):
+ self.currentChunk.rootTag["Level"]["LightPopulated"].value = value
+
+ def inhabitedTimeDidChange(self, value):
+ self.currentChunk.rootTag["Level"]["InhabitedTime"].value = value
+
+ def updateTimeDidChange(self, value):
+ self.currentChunk.rootTag["Level"]["LastUpdate"].value = value
+
+ def tabDidChange(self, index):
+ if index == 0: # Chunk tab
+ self.updateChunkWidget()
+ else: # NBT tab
+ pass
def mousePress(self, event):
x, y, z = event.blockPosition
cx = x >> 4
cz = z >> 4
+ self.selectChunk(cx, cz)
+
+ def selectChunk(self, cx, cz):
dim = self.editorSession.currentDimension
if dim.containsChunk(cx, cz):
chunk = dim.getChunk(cx, cz)
self.setSelectedChunk(chunk)
def setSelectedChunk(self, chunk):
- self.currentChunk = chunk
+ if self.selectionNode is None:
+ self.selectionNode = SelectionBoxNode()
+ self.selectionNode.filled = False
+ self.selectionNode.color = (0.3, 0.3, 1)
+ self.overlayNode.addChild(self.selectionNode)
+ self.selectionNode.selectionBox = chunk.bounds
+ self.currentChunk = chunk
+ self.updateChunkWidget()
model = NBTTreeModel(chunk.rootTag)
self.toolWidget.nbtTreeView.setModel(model)
@@ -43,3 +125,7 @@ class ChunkTool(EditorTool):
self.toolWidget.cxSpinBox.setValue(chunk.cx)
self.toolWidget.czSpinBox.setValue(chunk.cz)
+ def chunkPositionDidChange(self):
+ cx = self.toolWidget.cxSpinBox.value()
+ cz = self.toolWidget.czSpinBox.value()
+ self.selectChunk(cx, cz)
diff --git a/src/mcedit2/panels/player.py b/src/mcedit2/panels/player.py
index 986ecac..70294b0 100644
--- a/src/mcedit2/panels/player.py
+++ b/src/mcedit2/panels/player.py
@@ -15,9 +15,6 @@ log = logging.getLogger(__name__)
class PlayerPanel(QtGui.QWidget):
- name = "Edit Player"
- iconName = "edit_player"
-
def __init__(self, editorSession, *args, **kwargs):
"""
diff --git a/src/mcedit2/ui/editortools/edit_chunk.ui b/src/mcedit2/ui/editortools/edit_chunk.ui
index 0d0114d..816328a 100644
--- a/src/mcedit2/ui/editortools/edit_chunk.ui
+++ b/src/mcedit2/ui/editortools/edit_chunk.ui
@@ -32,7 +32,10 @@
QAbstractSpinBox::UpDownArrows
- -9000000
+ -900000000
+
+
+ 900000000
0
@@ -49,10 +52,10 @@
-
- -9000000
+ -90000000
- 9000000
+ 90000000
@@ -67,6 +70,122 @@
Chunk
+
+
+
+ 14
+ 20
+ 162
+ 98
+
+
+
+ -
+
+
+ Marks this chunk to have trees, lakes, ores, and other terrain features regenerated in Minecraft.
+
+
+ Qt::RightToLeft
+
+
+ Terrain Populated
+
+
+
+ -
+
+
+ Currently does nothing. Minecraft sets it after generating a chunk but never reads it again.
+
+
+ Qt::RightToLeft
+
+
+ Light Populated
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Time in ticks when this chunk was last updated. Recently played chunks will reflect the current in-game time, older chunks will have smaller values.
+
+
+ Update Time
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Time in ticks when this chunk was last updated. Recently played chunks will reflect the current in-game time, older chunks will have smaller values.
+
+
+ 0
+
+
+ 2000000000
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ Number of ticks the player has spent in this chunk.
+
+
+ Inhabited Time
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ Number of ticks the player has spent in this chunk.
+
+
+ 0
+
+
+ 2000000000
+
+
+
+
+
+
+
diff --git a/src/mceditlib/anvil/adapter.py b/src/mceditlib/anvil/adapter.py
index 1efe84c..28cb247 100644
--- a/src/mceditlib/anvil/adapter.py
+++ b/src/mceditlib/anvil/adapter.py
@@ -316,7 +316,6 @@ class AnvilChunkData(object):
# z, x order in save file
return self.rootTag["Level"]["HeightMap"].value.reshape((16, 16))
-
@property
def TerrainPopulated(self):
return self.rootTag["Level"]["TerrainPopulated"].value