-
Notifications
You must be signed in to change notification settings - Fork 0
/
structure.py
97 lines (78 loc) · 4.21 KB
/
structure.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Written by: @R.Ma Copyright 2023
# MGAIA course 2023, LIACS, Leiden University
import logging
from random import randint
import numpy as np
from termcolor import colored
from gdpc import Block, Editor
from gdpc import geometry as geo
from gdpc import minecraft_tools as mt
from gdpc import editor_tools as et
from materials import material_selection
logging.basicConfig(format=colored("%(name)s - %(levelname)s - %(message)s", color="yellow"))
ED = Editor(buffering=True)
building_area = ED.getBuildArea() # BUILDAREA
world_slice = ED.loadWorldSlice(building_area.toRect(), cache=True)
starting_x, starting_y, starting_z = building_area.begin
ending_x, ending_y, ending_z = building_area.last
build_height = abs(starting_y - ending_y)
build_width = abs(starting_z - ending_z)
build_length = abs(starting_x - ending_x)
buildRect = building_area.toRect()
heightmap = world_slice.heightmaps["MOTION_BLOCKING_NO_LEAVES"]
averageHeight = int(np.mean(heightmap))
def buildFoundation(house_x, house_y, house_z, house_height, house_width, house_length):
print("building foundation...")
material = material_selection("foundation")
for i in range(0, house_length):
for j in range(0, house_width):
for k in range(1):
ED.placeBlock((house_x + i, house_y + k, house_z + j), Block(material))
print("foundation built with {}".format(material))
# build the walls of the house with the interior space
print("building walls...")
material = material_selection("wall")
for x in range(0, house_length):
for z in range(0, house_width):
for y in range(1, house_height):
if x == 0 or x == house_length - 1 or z == 0 or z == house_width - 1:
ED.placeBlock((house_x + x, house_y + y, house_z + z), Block(material))
else:
ED.placeBlock((house_x + x, house_y + y, house_z + z), Block("minecraft:air"))
print("walls built with {}".format(material))
def buildRoof(house_x, house_y, house_z, house_height, house_width, house_length):
print("building roof...")
material = material_selection("roof")
for x in range(0, house_length):
for z in range(0, house_width):
for y in range(1):
if x == 0 or x == house_length - 1 or z == 0 or z == house_width - 1:
ED.placeBlock((house_x + x, house_y + house_height + y, house_z + z), Block(material))
else:
ED.placeBlock((house_x + x, house_y + house_height + y, house_z + z), Block("minecraft:air"))
for x in range(0, house_length):
for z in range(0, house_width):
for y in range(1):
if x == 1 or x == house_length - 2 or z == 1 or z == house_width - 2:
ED.placeBlock((house_x + x, house_y + house_height + y + 1, house_z + z), Block(material))
else:
ED.placeBlock((house_x + x, house_y + house_height + y + 1, house_z + z), Block("minecraft:air"))
for x in range(0, house_length):
for z in range(0, house_width):
for y in range(1):
if x == 2 or x == house_length - 3 or z == 2 or z == house_width - 3:
ED.placeBlock((house_x + x, house_y + house_height + y + 2, house_z + z), Block(material))
else:
ED.placeBlock((house_x + x, house_y + house_height + y + 2, house_z + z), Block("minecraft:air"))
for x in range(0, house_length):
for z in range(0, house_width):
for y in range(1):
if x == 3 or x == house_length - 4 or z == 3 or z == house_width - 4:
ED.placeBlock((house_x + x, house_y + house_height + y + 3, house_z + z), Block(material))
else:
ED.placeBlock((house_x + x, house_y + house_height + y + 3, house_z + z), Block("minecraft:air"))
for x in range(4, house_length - 4):
for z in range(4, house_width - 4):
for y in range(1):
ED.placeBlock((house_x + x, house_y + house_height + y + 3, house_z + z), Block("minecraft:glass"))
print("roof built with {}".format(material))