Skip to content

Commit 7538000

Browse files
0.29_02 (0.29)
1 parent 63717e1 commit 7538000

25 files changed

+185
-69
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ install:
1212
CYTHONIZE=1 pip install .
1313

1414
install-from-source: dist
15-
pip install dist/minecraft-python-0.28.tar.gz
15+
pip install dist/minecraft-python-0.29.tar.gz
1616

1717
clean:
1818
$(RM) -r build dist src/*.egg-info

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
_**Minecraft: Python Edition**_ is a project that strives to recreate each and every old Minecraft version in Python 3 using the **Pyglet** multimedia library and **Cython** for performance.
66

7-
This project is currently recreating the **Late Classic** versions of Minecraft. The latest version is **Classic 0.28_01** as released on _**October 27, 2009**_.
7+
This project is currently recreating the **Late Classic** versions of Minecraft. The latest version is **Classic 0.29_02** as released on _**October 30, 2009**_.
88

9-
Learn more about this version [here](https://minecraft.fandom.com/wiki/Java_Edition_Classic_0.28_01).
9+
Learn more about this version [here](https://minecraft.fandom.com/wiki/Java_Edition_Classic_0.29_02).
1010

1111
Or the server version [here](https://minecraft.fandom.com/wiki/Java_Edition_Classic_server_1.8.3).
1212

@@ -22,7 +22,7 @@ you can play it just by specifying the Minecraft version you want to play in the
2222
For audio to work you will either need *PyOgg* which is recommended, or FFmpeg which is installed on the system.
2323
GStreamer is also supported on Linux through the *gst-python* library. PyOgg requires that your system have one of the *Opus*, *FLAC*, or *Vorbis* codecs. OpenAL is required.
2424

25-
To easily install this version of *Minecraft: Python Edition*, just run `python -m pip install minecraft-python==0.28`.
25+
To easily install this version of *Minecraft: Python Edition*, just run `python -m pip install minecraft-python==0.29`.
2626

2727
Alternatively, for a manual Cython build, run `python setup.py build_ext --inplace`.
2828

mc/net/minecraft/Entity.pxd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ cdef class Entity:
4545
public float footSize
4646
public bint noPhysics
4747
public float pushthrough
48+
public bint hovered
4849

4950
cpdef tick(self)
5051
cpdef bint isFree(self, float xa, float ya, float za)

mc/net/minecraft/Entity.pyx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,3 +423,6 @@ cdef class Entity:
423423

424424
def isCreativeModeAllowed(self):
425425
return False
426+
427+
def renderHover(self, textures, a):
428+
pass

mc/net/minecraft/Minecraft.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
GL_DEBUG = False
6565

6666
class Minecraft(window.Window):
67-
VERSION_STRING = '0.28_01'
67+
VERSION_STRING = '0.29_02'
6868
level = None
6969
levelRenderer = None
7070
player = None
@@ -256,9 +256,11 @@ def on_key_press(self, symbol, modifiers):
256256

257257
if symbol == window.key.ESCAPE:
258258
self.pauseScreen()
259-
elif symbol == window.key.F5 and not self.networkClient:
259+
elif symbol == window.key.F5:
260260
self.raining = not self.raining
261-
elif symbol == window.key.TAB and not self.networkClient and self.player.arrows > 0:
261+
elif symbol == window.key.TAB and \
262+
isinstance(self.gamemode, SurvivalGameMode) and \
263+
self.player.arrows > 0:
262264
self.level.addEntity(Arrow(self.level, self.player, self.player.x,
263265
self.player.y, self.player.z,
264266
self.player.yRot, self.player.xRot, 1.2))
@@ -785,27 +787,29 @@ def __pick(self, alpha):
785787
d = self.gamemode.getPickRange()
786788
vec2 = rotVec.add(xy * d, x2 * d, y1 * d)
787789
self.hitResult = self.level.clip(rotVec, vec2)
790+
if self.hitResult:
791+
d = self.hitResult.vec.distanceTo(rotVec)
788792

789793
vec = self.gameRenderer.getPlayerRotVec(alpha)
790-
if self.hitResult:
791-
d = self.hitResult.vec.distanceTo(vec)
794+
if isinstance(self.gamemode, CreativeGameMode):
795+
d = 32.0
792796

797+
vec2 = vec.add(xy * d, x2 * d, y1 * d)
793798
entities = self.level.blockMap.getEntitiesWithinAABBExcludingEntity(self.player, self.player.bb.expand(xy * d, x2 * d, y1 * d))
799+
d = 0.0
794800
for entity in entities:
795801
if not entity.isPickable():
796802
continue
797803

798-
axisAlignedBB = entity.bb.grow(0.1, 0.1, 0.1)
799-
di = 0.0
800-
while di < d:
801-
if not axisAlignedBB.contains(vec.add(xy * di, x2 * di, y1 * di)):
802-
di += 0.05
803-
continue
804+
hit = entity.bb.grow(0.1, 0.1, 0.1).clip(vec, vec2)
805+
if hit:
806+
di = vec.distanceTo(hit.vec)
807+
if di < d or d == 0.0:
808+
self.gameRenderer.entity = entity
809+
d = di
804810

805-
d = di
806-
self.hitResult = HitResult(entity)
807-
di += 0.05
808-
break
811+
if self.gameRenderer.entity and not isinstance(self.gamemode, CreativeGameMode):
812+
self.hitResult = HitResult(self.gameRenderer.entity)
809813

810814
def __render(self, alpha):
811815
for i in range(2):
@@ -888,7 +892,7 @@ def __render(self, alpha):
888892
self.gameRenderer.toggleLight(False)
889893
self.gameRenderer.setupFog()
890894
self.particleEngine.render(self.player, alpha)
891-
gl.glBindTexture(gl.GL_TEXTURE_2D, self.levelRenderer.textures.loadTexture('rock.png'))
895+
gl.glBindTexture(gl.GL_TEXTURE_2D, self.textures.loadTexture('rock.png'))
892896
gl.glEnable(gl.GL_TEXTURE_2D)
893897
gl.glCallList(self.levelRenderer.surroundLists)
894898
self.gameRenderer.setupFog()
@@ -919,7 +923,7 @@ def __render(self, alpha):
919923
self.gameRenderer.setupFog()
920924
gl.glEnable(gl.GL_BLEND)
921925
gl.glEnable(gl.GL_TEXTURE_2D)
922-
gl.glBindTexture(gl.GL_TEXTURE_2D, self.levelRenderer.textures.loadTexture('water.png'))
926+
gl.glBindTexture(gl.GL_TEXTURE_2D, self.textures.loadTexture('water.png'))
923927
gl.glCallList(self.levelRenderer.surroundLists + 1)
924928
gl.glDisable(gl.GL_BLEND)
925929
gl.glEnable(gl.GL_BLEND)
@@ -933,7 +937,7 @@ def __render(self, alpha):
933937
gl.glColorMask(True, False, False, False)
934938

935939
if remaining > 0:
936-
gl.glBindTexture(gl.GL_TEXTURE_2D, self.levelRenderer.textures.loadTexture('terrain.png'))
940+
gl.glBindTexture(gl.GL_TEXTURE_2D, self.textures.loadTexture('terrain.png'))
937941
gl.glCallLists(self.levelRenderer.ib.capacity(), gl.GL_INT, self.levelRenderer.ib)
938942

939943
gl.glDepthMask(True)
@@ -942,6 +946,9 @@ def __render(self, alpha):
942946
if self.raining:
943947
self.gameRenderer.renderRain(alpha)
944948

949+
if self.gameRenderer.entity:
950+
self.gameRenderer.entity.renderHover(self.textures, alpha)
951+
945952
gl.glClear(gl.GL_DEPTH_BUFFER_BIT)
946953
gl.glLoadIdentity()
947954
if self.options.anaglyph3d:
@@ -1023,7 +1030,14 @@ def loadLevel(self, level):
10231030
self.gamemode.initLevel(level)
10241031
level.font = self.font
10251032
level.rendererContext = self
1026-
self.player = level.findSubclassOf(Player)
1033+
if self.isOnlineClient():
1034+
self.player = level.findSubclassOf(Player)
1035+
elif self.player:
1036+
self.player.resetPos()
1037+
self.gamemode.initPlayer(self.player)
1038+
if level:
1039+
level.player = self.player
1040+
level.addEntity(self.player)
10271041

10281042
if not self.player:
10291043
self.player = Player(level)

mc/net/minecraft/comm/SocketConnection.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,11 @@ def processData(self):
116116
b9 = data[6]
117117
if b15 not in self.client.players:
118118
if b15 >= 0:
119+
b8 += 128
120+
s21 -= 22
119121
networkPlayer = NetworkPlayer(self.client.minecraft, b15,
120122
string19, s18, s21, s24,
121-
(-b8 * 360) / 256.0,
123+
(b8 * 360) / 256.0,
122124
(b9 * 360) / 256.0)
123125
self.client.players[b15] = networkPlayer
124126
self.client.minecraft.level.addEntity(networkPlayer)
@@ -142,7 +144,9 @@ def processData(self):
142144
float(b25 * 360) / 256.0,
143145
float(b8 * 360) / 256.0)
144146
elif networkPlayer:
145-
networkPlayer.teleport(s17, s18, s21, float(-b25 * 360) / 256.0,
147+
b25 += 128
148+
s18 -= 22
149+
networkPlayer.teleport(s17, s18, s21, float(b25 * 360) / 256.0,
146150
float(b8 * 360) / 256.0)
147151
elif packet == Packets.PLAYER_MOVE_AND_ROTATE:
148152
b15 = data[0]
@@ -153,15 +157,17 @@ def processData(self):
153157
b8 = data[5]
154158
networkPlayer = self.client.players.get(b15)
155159
if b15 >= 0 and networkPlayer:
156-
networkPlayer.queue1(b23, b22, b6, float(-b25 * 360) / 256.0,
160+
b25 += 128
161+
networkPlayer.queue1(b23, b22, b6, float(b25 * 360) / 256.0,
157162
float(b8 * 360) / 256.0)
158163
elif packet == Packets.PLAYER_ROTATE:
159164
b15 = data[0]
160165
b23 = data[1]
161166
b22 = data[2]
162167
networkPlayer = self.client.players.get(b15)
163168
if b15 >= 0 and networkPlayer:
164-
networkPlayer.queue2(float(-b23 * 360) / 256.0,
169+
b23 += 128
170+
networkPlayer.queue2(float(b23 * 360) / 256.0,
165171
float(b22 * 360) / 256.0)
166172
elif packet == Packets.PLAYER_MOVE:
167173
b15 = data[0]

mc/net/minecraft/gamemode/CreativeGameMode.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def initLevel(self, level):
1515
super().initLevel(level)
1616
level.removeAllNonCreativeModeEntities()
1717
level.creativeMode = True
18+
level.growTrees = False
1819

1920
def adjustPlayer(self, player):
2021
for i in range(9):

mc/net/minecraft/gamemode/GameMode.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ def __init__(self, minecraft):
88

99
def initLevel(self, level):
1010
level.creativeMode = False
11+
level.growTrees = True
1112

1213
def handleOpenInventory(self):
1314
pass

mc/net/minecraft/gui/Font.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ def draw(self, string, x, y, color, darken=False):
7272

7373
color = r << 16 | g << 8 | b
7474
i += 2
75+
if i >= len(string):
76+
break
77+
7578
if darken:
7679
color = (color & 0xFCFCFC) >> 2
7780

mc/net/minecraft/level/Level.pxd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ cdef class Level:
4848
public object particleEngine
4949
public object font
5050

51+
public bint growTrees
52+
5153
public int width
5254
public int depth
5355
public int height

0 commit comments

Comments
 (0)