diff --git a/assets/hbm/models/assembler.obj b/assets/hbm/models/assembler.obj new file mode 100644 index 000000000..958d78356 --- /dev/null +++ b/assets/hbm/models/assembler.obj @@ -0,0 +1,1129 @@ +# Blender v2.76 (sub 0) OBJ File: 'assembler.blend' +# www.blender.org +o Cylinder +v 0.000000 1.162500 -0.750000 +v 0.000000 1.537500 -0.750000 +v 0.194114 1.162500 -0.724444 +v 0.194114 1.537500 -0.724444 +v 0.375000 1.162500 -0.649519 +v 0.375000 1.537500 -0.649519 +v 0.530330 1.162500 -0.530330 +v 0.530330 1.537500 -0.530330 +v 0.649519 1.162500 -0.375000 +v 0.649519 1.537500 -0.375000 +v 0.724444 1.162500 -0.194114 +v 0.724444 1.537500 -0.194114 +v 0.750000 1.162500 -0.000000 +v 0.750000 1.537500 -0.000000 +v 0.724444 1.162500 0.194114 +v 0.724444 1.537500 0.194114 +v 0.649519 1.162500 0.375000 +v 0.649519 1.537500 0.375000 +v 0.530330 1.162500 0.530330 +v 0.530330 1.537500 0.530330 +v 0.375000 1.162500 0.649519 +v 0.375000 1.537500 0.649519 +v 0.194115 1.162500 0.724444 +v 0.194115 1.537500 0.724444 +v 0.000000 1.162500 0.750000 +v 0.000000 1.537500 0.750000 +v -0.194114 1.162500 0.724444 +v -0.194114 1.537500 0.724444 +v -0.375000 1.162500 0.649519 +v -0.375000 1.537500 0.649519 +v -0.530330 1.162500 0.530330 +v -0.530330 1.537500 0.530330 +v -0.649519 1.162500 0.375000 +v -0.649519 1.537500 0.375000 +v -0.724444 1.162500 0.194115 +v -0.724444 1.537500 0.194115 +v -0.750000 1.162500 0.000000 +v -0.750000 1.537500 0.000000 +v -0.724444 1.162500 -0.194114 +v -0.724444 1.537500 -0.194114 +v -0.649519 1.162500 -0.375000 +v -0.649519 1.537500 -0.375000 +v -0.530330 1.162500 -0.530330 +v -0.530330 1.537500 -0.530330 +v -0.375000 1.162500 -0.649519 +v -0.375000 1.537500 -0.649519 +v -0.194115 1.162500 -0.724444 +v -0.194115 1.537500 -0.724444 +v 0.000000 1.162500 -0.562500 +v 0.000000 1.537500 -0.562500 +v 0.145586 1.162500 -0.543333 +v 0.145586 1.537500 -0.543333 +v 0.281250 1.162500 -0.487139 +v 0.281250 1.537500 -0.487139 +v 0.397748 1.162500 -0.397748 +v 0.397748 1.537500 -0.397748 +v 0.487139 1.162500 -0.281250 +v 0.487139 1.537500 -0.281250 +v 0.543333 1.162500 -0.145586 +v 0.543333 1.537500 -0.145586 +v 0.562500 1.162500 -0.000000 +v 0.562500 1.537500 -0.000000 +v 0.543333 1.162500 0.145586 +v 0.543333 1.537500 0.145586 +v 0.487139 1.162500 0.281250 +v 0.487139 1.537500 0.281250 +v 0.397748 1.162500 0.397747 +v 0.397748 1.537500 0.397747 +v 0.281250 1.162500 0.487139 +v 0.281250 1.537500 0.487139 +v 0.145586 1.162500 0.543333 +v 0.145586 1.537500 0.543333 +v 0.000000 1.162500 0.562500 +v 0.000000 1.537500 0.562500 +v -0.145585 1.162500 0.543333 +v -0.145585 1.537500 0.543333 +v -0.281250 1.162500 0.487139 +v -0.281250 1.537500 0.487139 +v -0.397747 1.162500 0.397748 +v -0.397747 1.537500 0.397748 +v -0.487139 1.162500 0.281250 +v -0.487139 1.537500 0.281250 +v -0.543333 1.162500 0.145586 +v -0.543333 1.537500 0.145586 +v -0.562500 1.162500 0.000000 +v -0.562500 1.537500 0.000000 +v -0.543333 1.162500 -0.145585 +v -0.543333 1.537500 -0.145585 +v -0.487139 1.162500 -0.281250 +v -0.487139 1.537500 -0.281250 +v -0.397748 1.162500 -0.397747 +v -0.397748 1.537500 -0.397747 +v -0.281250 1.162500 -0.487139 +v -0.281250 1.537500 -0.487139 +v -0.145586 1.162500 -0.543333 +v -0.145586 1.537500 -0.543333 +v 0.000000 1.537500 -0.281250 +v 0.072793 1.537500 -0.271667 +v 0.140625 1.537500 -0.243570 +v 0.198874 1.537500 -0.198874 +v 0.243570 1.537500 -0.140625 +v 0.271667 1.537500 -0.072793 +v 0.281250 1.537500 0.000000 +v 0.271667 1.537500 0.072793 +v 0.243570 1.537500 0.140625 +v 0.198874 1.537500 0.198874 +v 0.140625 1.537500 0.243570 +v 0.072793 1.537500 0.271667 +v 0.000000 1.537500 0.281250 +v -0.072793 1.537500 0.271667 +v -0.140625 1.537500 0.243570 +v -0.198874 1.537500 0.198874 +v -0.243570 1.537500 0.140625 +v -0.271667 1.537500 0.072793 +v -0.281250 1.537500 0.000000 +v -0.271667 1.537500 -0.072793 +v -0.243570 1.537500 -0.140625 +v -0.198874 1.537500 -0.198874 +v -0.140625 1.537500 -0.243569 +v -0.072793 1.537500 -0.271667 +v 0.000000 1.287500 0.281250 +v 0.072793 1.287500 0.271667 +v 0.140625 1.287500 0.243570 +v 0.198874 1.287500 0.198874 +v 0.243570 1.287500 0.140625 +v 0.271667 1.287500 0.072793 +v 0.281250 1.287500 0.000000 +v 0.271667 1.287500 -0.072793 +v 0.243570 1.287500 -0.140625 +v 0.198874 1.287500 -0.198874 +v 0.140625 1.287500 -0.243570 +v 0.072793 1.287500 -0.271667 +v 0.000000 1.287500 -0.281250 +v -0.072793 1.287500 0.271667 +v -0.140625 1.287500 0.243570 +v -0.198874 1.287500 0.198874 +v -0.243570 1.287500 0.140625 +v -0.271667 1.287500 0.072793 +v -0.281250 1.287500 0.000000 +v -0.271667 1.287500 -0.072793 +v -0.243570 1.287500 -0.140625 +v -0.198874 1.287500 -0.198874 +v -0.140625 1.287500 -0.243569 +v -0.072793 1.287500 -0.271667 +vn 0.258800 0.000000 0.965900 +vn 0.382700 0.000000 -0.923900 +vn -0.000000 0.000000 -1.000000 +vn 0.793400 0.000000 -0.608800 +vn -0.258800 0.000000 0.965900 +vn 0.991400 0.000000 -0.130500 +vn 0.500000 0.000000 -0.866000 +vn 0.923900 0.000000 0.382700 +vn -0.707100 0.000000 0.707100 +vn 0.608800 0.000000 0.793400 +vn 0.866000 0.000000 -0.500000 +vn 0.130500 0.000000 0.991400 +vn -0.965900 0.000000 0.258800 +vn -0.382700 0.000000 0.923900 +vn 1.000000 0.000000 -0.000000 +vn -0.793400 0.000000 0.608800 +vn -0.965900 0.000000 -0.258800 +vn -0.991400 0.000000 0.130500 +vn 0.866000 0.000000 0.500000 +vn -0.923900 0.000000 -0.382700 +vn -0.707100 0.000000 -0.707100 +vn -0.608800 0.000000 -0.793400 +vn 0.000000 1.000000 -0.000000 +vn -0.130500 0.000000 -0.991400 +vn 0.500000 0.000000 0.866000 +vn 0.130500 0.000000 -0.991400 +vn -0.258800 0.000000 -0.965900 +vn 0.608800 0.000000 -0.793400 +vn 0.000000 0.000000 1.000000 +vn 0.923900 0.000000 -0.382700 +vn 0.258800 0.000000 -0.965900 +vn 0.991400 0.000000 0.130500 +vn -0.500000 0.000000 0.866000 +vn 0.793400 0.000000 0.608800 +vn 0.707100 0.000000 -0.707100 +vn 0.382700 0.000000 0.923900 +vn -0.866000 0.000000 0.500000 +vn -0.130500 0.000000 0.991400 +vn -0.500000 0.000000 -0.866000 +vn -0.608800 0.000000 0.793400 +vn 0.965900 0.000000 -0.258800 +vn -0.923900 0.000000 0.382700 +vn -1.000000 0.000000 0.000000 +vn -0.991400 0.000000 -0.130500 +vn 0.965900 0.000000 0.258800 +vn -0.793400 0.000000 -0.608800 +vn -0.866000 0.000000 -0.500000 +vn 0.707100 0.000000 0.707100 +vn -0.382700 0.000000 -0.923900 +s off +f 83//1 84//1 36//1 +f 4//2 6//2 5//2 +f 38//3 86//3 85//3 +f 8//4 10//4 9//4 +f 87//5 88//5 40//5 +f 12//6 14//6 13//6 +f 42//7 90//7 89//7 +f 16//8 18//8 17//8 +f 91//9 92//9 44//9 +f 20//10 22//10 21//10 +f 46//11 94//11 93//11 +f 24//12 26//12 25//12 +f 95//13 96//13 48//13 +f 28//14 30//14 29//14 +f 50//15 49//15 1//15 +f 32//16 34//16 33//16 +f 51//17 52//17 4//17 +f 36//18 38//18 37//18 +f 6//19 54//19 53//19 +f 40//20 42//20 41//20 +f 55//21 56//21 8//21 +f 44//22 46//22 45//22 +f 80//23 82//23 34//23 +f 48//24 2//24 1//24 +f 9//25 10//25 58//25 +f 36//23 84//23 86//23 +f 50//26 52//26 51//26 +f 60//27 12//27 11//27 +f 54//28 56//28 55//28 +f 13//29 14//29 62//29 +f 58//30 60//30 59//30 +f 64//31 16//31 15//31 +f 62//32 64//32 63//32 +f 18//33 66//33 65//33 +f 66//34 68//34 67//34 +f 67//35 68//35 20//35 +f 70//36 72//36 71//36 +f 22//37 70//37 69//37 +f 74//38 76//38 75//38 +f 34//39 82//39 81//39 +f 78//40 80//40 79//40 +f 71//41 72//41 24//41 +f 82//42 84//42 83//42 +f 26//43 74//43 73//43 +f 86//44 88//44 87//44 +f 75//45 76//45 28//45 +f 90//46 92//46 91//46 +f 30//47 78//47 77//47 +f 79//48 80//48 32//48 +f 94//49 96//49 95//49 +f 107//23 70//23 68//23 +f 76//23 78//23 30//23 +f 72//23 74//23 26//23 +f 20//23 68//23 70//23 +f 66//23 18//23 16//23 +f 60//23 62//23 14//23 +f 58//23 10//23 8//23 +f 52//23 54//23 6//23 +f 96//23 50//23 2//23 +f 44//23 92//23 94//23 +f 88//23 90//23 42//23 +f 108//23 72//23 70//23 +f 116//8 140//8 141//8 +f 105//46 125//46 124//46 +f 109//26 121//26 134//26 +f 100//16 130//16 129//16 +f 117//34 141//34 142//34 +f 110//2 134//2 135//2 +f 106//22 124//22 123//22 +f 118//10 142//10 143//10 +f 101//42 129//42 128//42 +f 111//28 135//28 136//28 +f 119//36 143//36 144//36 +f 107//49 123//49 122//49 +f 112//4 136//4 137//4 +f 102//18 128//18 127//18 +f 120//12 144//12 133//12 +f 97//38 133//38 132//38 +f 113//30 137//30 138//30 +f 108//24 122//24 121//24 +f 103//44 127//44 126//44 +f 114//6 138//6 139//6 +f 98//14 132//14 131//14 +f 115//32 139//32 140//32 +f 104//20 126//20 125//20 +f 99//40 131//40 130//40 +f 105//23 106//23 68//23 +f 64//23 104//23 105//23 +f 103//23 104//23 64//23 +f 102//23 103//23 62//23 +f 101//23 102//23 60//23 +f 100//23 101//23 58//23 +f 99//23 100//23 56//23 +f 52//23 98//23 99//23 +f 97//23 98//23 52//23 +f 120//23 97//23 50//23 +f 119//23 120//23 96//23 +f 118//23 119//23 94//23 +f 117//23 118//23 92//23 +f 116//23 117//23 90//23 +f 115//23 116//23 88//23 +f 84//23 114//23 115//23 +f 82//23 113//23 114//23 +f 112//23 113//23 82//23 +f 78//23 111//23 112//23 +f 110//23 111//23 78//23 +f 74//23 109//23 110//23 +f 108//23 109//23 74//23 +f 35//1 83//1 36//1 +f 3//2 4//2 5//2 +f 37//3 38//3 85//3 +f 7//4 8//4 9//4 +f 39//5 87//5 40//5 +f 11//6 12//6 13//6 +f 41//7 42//7 89//7 +f 15//8 16//8 17//8 +f 43//9 91//9 44//9 +f 19//10 20//10 21//10 +f 45//11 46//11 93//11 +f 23//12 24//12 25//12 +f 47//13 95//13 48//13 +f 27//14 28//14 29//14 +f 2//15 50//15 1//15 +f 31//16 32//16 33//16 +f 3//17 51//17 4//17 +f 35//18 36//18 37//18 +f 5//19 6//19 53//19 +f 39//20 40//20 41//20 +f 7//21 55//21 8//21 +f 43//22 44//22 45//22 +f 32//23 80//23 34//23 +f 47//24 48//24 1//24 +f 57//25 9//25 58//25 +f 38//23 36//23 86//23 +f 49//26 50//26 51//26 +f 59//27 60//27 11//27 +f 53//28 54//28 55//28 +f 61//29 13//29 62//29 +f 57//30 58//30 59//30 +f 63//31 64//31 15//31 +f 61//32 62//32 63//32 +f 17//33 18//33 65//33 +f 65//34 66//34 67//34 +f 19//35 67//35 20//35 +f 69//36 70//36 71//36 +f 21//37 22//37 69//37 +f 73//38 74//38 75//38 +f 33//39 34//39 81//39 +f 77//40 78//40 79//40 +f 23//41 71//41 24//41 +f 81//42 82//42 83//42 +f 25//43 26//43 73//43 +f 85//44 86//44 87//44 +f 27//45 75//45 28//45 +f 89//46 90//46 91//46 +f 29//47 30//47 77//47 +f 31//48 79//48 32//48 +f 93//49 94//49 95//49 +f 106//23 107//23 68//23 +f 28//23 76//23 30//23 +f 24//23 72//23 26//23 +f 22//23 20//23 70//23 +f 64//23 66//23 16//23 +f 12//23 60//23 14//23 +f 56//23 58//23 8//23 +f 4//23 52//23 6//23 +f 48//23 96//23 2//23 +f 46//23 44//23 94//23 +f 40//23 88//23 42//23 +f 107//23 108//23 70//23 +f 117//8 116//8 141//8 +f 106//46 105//46 124//46 +f 110//26 109//26 134//26 +f 101//16 100//16 129//16 +f 118//34 117//34 142//34 +f 111//2 110//2 135//2 +f 107//22 106//22 123//22 +f 119//10 118//10 143//10 +f 102//42 101//42 128//42 +f 112//28 111//28 136//28 +f 120//36 119//36 144//36 +f 108//49 107//49 122//49 +f 113//4 112//4 137//4 +f 103//18 102//18 127//18 +f 97//12 120//12 133//12 +f 98//38 97//38 132//38 +f 114//30 113//30 138//30 +f 109//24 108//24 121//24 +f 104//44 103//44 126//44 +f 115//6 114//6 139//6 +f 99//14 98//14 131//14 +f 116//32 115//32 140//32 +f 105//20 104//20 125//20 +f 100//40 99//40 130//40 +f 66//23 105//23 68//23 +f 66//23 64//23 105//23 +f 62//23 103//23 64//23 +f 60//23 102//23 62//23 +f 58//23 101//23 60//23 +f 56//23 100//23 58//23 +f 54//23 99//23 56//23 +f 54//23 52//23 99//23 +f 50//23 97//23 52//23 +f 96//23 120//23 50//23 +f 94//23 119//23 96//23 +f 92//23 118//23 94//23 +f 90//23 117//23 92//23 +f 88//23 116//23 90//23 +f 86//23 115//23 88//23 +f 86//23 84//23 115//23 +f 84//23 82//23 114//23 +f 80//23 112//23 82//23 +f 80//23 78//23 112//23 +f 76//23 110//23 78//23 +f 76//23 74//23 110//23 +f 72//23 108//23 74//23 +o Cube_Cube.001 +v -1.500000 0.000000 1.500000 +v -1.500000 0.250000 1.500000 +v -1.500000 0.000000 -1.500000 +v -1.500000 0.250000 -1.500000 +v 1.500000 0.000000 1.500000 +v 1.500000 0.250000 1.500000 +v 1.500000 0.000000 -1.500000 +v 1.500000 0.250000 -1.500000 +v -1.250000 0.500000 1.250000 +v -1.250000 0.500000 -1.250000 +v 1.250000 0.500000 -1.250000 +v 1.250000 0.500000 1.250000 +v 1.250000 1.000000 -1.250000 +v -1.250000 1.000000 -1.250000 +v -1.250000 1.000000 1.250000 +v 1.250000 1.000000 1.250000 +v 1.062500 1.500000 -1.062500 +v 1.062500 1.500000 1.062500 +v 1.000000 0.250000 -0.250000 +v 1.000000 0.750000 -0.250000 +v 1.000000 0.250000 -0.750000 +v 1.000000 0.750000 -0.750000 +v 2.000000 0.000000 0.000000 +v 2.000000 1.000000 0.000000 +v 2.000000 0.000000 -1.000000 +v 2.000000 1.000000 -1.000000 +v 1.500000 1.000000 -1.000000 +v 1.500000 0.000000 -1.000000 +v 1.500000 1.000000 0.000000 +v 1.500000 0.000000 0.000000 +v 2.000000 0.875000 -0.875000 +v 2.000000 0.125000 -0.875000 +v 2.000000 0.875000 -0.125000 +v 2.000000 0.125000 -0.125000 +v 1.500000 0.687500 -0.687500 +v 1.500000 0.312500 -0.687500 +v 1.500000 0.687500 -0.312500 +v 1.500000 0.312500 -0.312500 +v -1.000000 0.250000 0.750000 +v -1.000000 0.750000 0.750000 +v -1.000000 0.250000 0.250000 +v -1.000000 0.750000 0.250000 +v -2.000000 0.000000 1.000000 +v -2.000000 1.000000 1.000000 +v -2.000000 0.000000 0.000000 +v -2.000000 1.000000 0.000000 +v -1.500000 1.000000 0.000000 +v -1.500000 0.000000 0.000000 +v -1.500000 1.000000 1.000000 +v -1.500000 0.000000 1.000000 +v -2.000000 0.875000 0.125000 +v -2.000000 0.125000 0.125000 +v -2.000000 0.875000 0.875000 +v -2.000000 0.125000 0.875000 +v -1.500000 0.687500 0.312500 +v -1.500000 0.312500 0.312500 +v -1.500000 0.687500 0.687500 +v -1.500000 0.312500 0.687500 +v 0.656250 0.343750 -2.000000 +v 0.656250 0.656250 -2.000000 +v 0.343750 0.343750 -1.150000 +v 0.343750 0.656250 -1.150000 +v 0.343750 0.343750 -2.000000 +v 0.343750 0.656250 -2.000000 +v 0.656250 0.343750 -1.150000 +v 0.656250 0.656250 -1.150000 +v 0.328125 0.671875 -1.150000 +v 0.328125 0.328125 -1.150000 +v 0.671875 0.671875 -1.150000 +v 0.671875 0.328125 -1.150000 +v 0.328125 0.671875 -1.000000 +v 0.328125 0.328125 -1.000000 +v 0.671875 0.671875 -1.000000 +v 0.671875 0.328125 -1.000000 +v -0.343750 0.343750 -2.000000 +v -0.343750 0.656250 -2.000000 +v -0.656250 0.343750 -1.150000 +v -0.656250 0.656250 -1.150000 +v -0.656250 0.343750 -2.000000 +v -0.656250 0.656250 -2.000000 +v -0.343750 0.343750 -1.150000 +v -0.343750 0.656250 -1.150000 +v -0.671875 0.671875 -1.150000 +v -0.671875 0.328125 -1.150000 +v -0.328125 0.671875 -1.150000 +v -0.328125 0.328125 -1.150000 +v -0.671875 0.671875 -1.000000 +v -0.671875 0.328125 -1.000000 +v -0.328125 0.671875 -1.000000 +v -0.328125 0.328125 -1.000000 +v -0.343750 0.343750 2.000000 +v -0.343750 0.656250 2.000000 +v -0.656250 0.343750 1.150000 +v -0.656250 0.656250 1.150000 +v -0.656250 0.343750 2.000000 +v -0.656250 0.656250 2.000000 +v -0.343750 0.343750 1.150000 +v -0.343750 0.656250 1.150000 +v -0.671875 0.671875 1.150000 +v -0.671875 0.328125 1.150000 +v -0.328125 0.671875 1.150000 +v -0.328125 0.328125 1.150000 +v -0.671875 0.671875 1.000000 +v -0.671875 0.328125 1.000000 +v -0.328125 0.671875 1.000000 +v -0.328125 0.328125 1.000000 +v 0.656250 0.343750 2.000000 +v 0.656250 0.656250 2.000000 +v 0.343750 0.343750 1.150000 +v 0.343750 0.656250 1.150000 +v 0.343750 0.343750 2.000000 +v 0.343750 0.656250 2.000000 +v 0.656250 0.343750 1.150000 +v 0.656250 0.656250 1.150000 +v 0.328125 0.671875 1.150000 +v 0.328125 0.328125 1.150000 +v 0.671875 0.671875 1.150000 +v 0.671875 0.328125 1.150000 +v 0.328125 0.671875 1.000000 +v 0.328125 0.328125 1.000000 +v 0.671875 0.671875 1.000000 +v 0.671875 0.328125 1.000000 +v -1.062500 1.500000 -1.062500 +v -1.062500 1.500000 1.062500 +v 0.903125 1.500000 0.903125 +v 0.903125 1.500000 -0.903125 +v -0.903125 1.500000 -0.903125 +v -0.903125 1.500000 0.903125 +v 0.903125 1.350000 0.903125 +v 0.903125 1.350000 -0.903125 +v -0.903125 1.350000 -0.903125 +v -0.903125 1.350000 0.903125 +v 0.817113 1.500000 0.903125 +v 0.731101 1.500000 0.903125 +v 0.645089 1.500000 0.903125 +v 0.559078 1.500000 0.903125 +v 0.473066 1.500000 0.903125 +v 0.387054 1.500000 0.903125 +v 0.301042 1.500000 0.903125 +v 0.215030 1.500000 0.903125 +v 0.129018 1.500000 0.903125 +v 0.043006 1.500000 0.903125 +v -0.043006 1.500000 0.903125 +v -0.129018 1.500000 0.903125 +v -0.215030 1.500000 0.903125 +v -0.301042 1.500000 0.903125 +v -0.387054 1.500000 0.903125 +v -0.473065 1.500000 0.903125 +v -0.559077 1.500000 0.903125 +v -0.645089 1.500000 0.903125 +v -0.731101 1.500000 0.903125 +v -0.817113 1.500000 0.903125 +v 0.817113 1.750000 0.903125 +v 0.731101 1.750000 0.903125 +v 0.645089 1.750000 0.903125 +v 0.559078 1.750000 0.903125 +v 0.473066 1.750000 0.903125 +v 0.387054 1.750000 0.903125 +v 0.301042 1.750000 0.903125 +v 0.215030 1.750000 0.903125 +v 0.129018 1.750000 0.903125 +v 0.043006 1.750000 0.903125 +v -0.043006 1.750000 0.903125 +v -0.129018 1.750000 0.903125 +v -0.215030 1.750000 0.903125 +v -0.301042 1.750000 0.903125 +v -0.387054 1.750000 0.903125 +v -0.473065 1.750000 0.903125 +v -0.559077 1.750000 0.903125 +v -0.645089 1.750000 0.903125 +v -0.731101 1.750000 0.903125 +v -0.817113 1.750000 0.903125 +v 0.817113 2.000000 0.653125 +v 0.731101 2.000000 0.653125 +v 0.645089 2.000000 0.653125 +v 0.559078 2.000000 0.653125 +v 0.473066 2.000000 0.653125 +v 0.387054 2.000000 0.653125 +v 0.301042 2.000000 0.653125 +v 0.215030 2.000000 0.653125 +v 0.129018 2.000000 0.653125 +v 0.043006 2.000000 0.653125 +v -0.043006 2.000000 0.653125 +v -0.129018 2.000000 0.653125 +v -0.215030 2.000000 0.653125 +v -0.301042 2.000000 0.653125 +v -0.387054 2.000000 0.653125 +v -0.473065 2.000000 0.653125 +v -0.559077 2.000000 0.653125 +v -0.645089 2.000000 0.653125 +v -0.731101 2.000000 0.653125 +v -0.817113 2.000000 0.653125 +v -0.817113 1.500000 -0.903125 +v -0.731101 1.500000 -0.903125 +v -0.645089 1.500000 -0.903125 +v -0.559078 1.500000 -0.903125 +v -0.473066 1.500000 -0.903125 +v -0.387054 1.500000 -0.903125 +v -0.301042 1.500000 -0.903125 +v -0.215030 1.500000 -0.903125 +v -0.129018 1.500000 -0.903125 +v -0.043006 1.500000 -0.903125 +v 0.043006 1.500000 -0.903125 +v 0.129018 1.500000 -0.903125 +v 0.215030 1.500000 -0.903125 +v 0.301042 1.500000 -0.903125 +v 0.387054 1.500000 -0.903125 +v 0.473065 1.500000 -0.903125 +v 0.559077 1.500000 -0.903125 +v 0.645089 1.500000 -0.903125 +v 0.731101 1.500000 -0.903125 +v 0.817113 1.500000 -0.903125 +v -0.817113 1.750000 -0.903125 +v -0.731101 1.750000 -0.903125 +v -0.645089 1.750000 -0.903125 +v -0.559078 1.750000 -0.903125 +v -0.473066 1.750000 -0.903125 +v -0.387054 1.750000 -0.903125 +v -0.301042 1.750000 -0.903125 +v -0.215030 1.750000 -0.903125 +v -0.129018 1.750000 -0.903125 +v -0.043006 1.750000 -0.903125 +v 0.043006 1.750000 -0.903125 +v 0.129018 1.750000 -0.903125 +v 0.215030 1.750000 -0.903125 +v 0.301042 1.750000 -0.903125 +v 0.387054 1.750000 -0.903125 +v 0.473065 1.750000 -0.903125 +v 0.559077 1.750000 -0.903125 +v 0.645089 1.750000 -0.903125 +v 0.731101 1.750000 -0.903125 +v 0.817113 1.750000 -0.903125 +v -0.817113 2.000000 -0.653125 +v -0.731101 2.000000 -0.653125 +v -0.645089 2.000000 -0.653125 +v -0.559078 2.000000 -0.653125 +v -0.473066 2.000000 -0.653125 +v -0.387054 2.000000 -0.653125 +v -0.301042 2.000000 -0.653125 +v -0.215030 2.000000 -0.653125 +v -0.129018 2.000000 -0.653125 +v -0.043006 2.000000 -0.653125 +v 0.043006 2.000000 -0.653125 +v 0.129018 2.000000 -0.653125 +v 0.215030 2.000000 -0.653125 +v 0.301042 2.000000 -0.653125 +v 0.387054 2.000000 -0.653125 +v 0.473065 2.000000 -0.653125 +v 0.559077 2.000000 -0.653125 +v 0.645089 2.000000 -0.653125 +v 0.731101 2.000000 -0.653125 +v 0.817113 2.000000 -0.653125 +v 1.916667 0.250000 -1.100000 +v 1.916667 0.750000 -1.100000 +v 1.666667 0.500000 -1.100000 +v 1.916667 0.250000 0.100000 +v 1.916667 0.750000 0.100000 +v 1.666667 0.500000 0.100000 +v -1.583333 0.250000 -0.100000 +v -1.583333 0.750000 -0.100000 +v -1.833333 0.500000 -0.100000 +v -1.583333 0.250000 1.100000 +v -1.583333 0.750000 1.100000 +v -1.833333 0.500000 1.100000 +vn -1.000000 0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 1.000000 0.000000 0.000000 +vn 0.000000 0.000000 1.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.707100 0.707100 0.000000 +vn -0.707100 0.707100 0.000000 +vn 0.000000 0.707100 -0.707100 +vn 0.000000 0.707100 0.707100 +vn -0.447200 0.000000 0.894400 +vn -0.447200 0.894400 0.000000 +vn 0.000000 1.000000 0.000000 +vn -0.447200 -0.894400 0.000000 +vn -0.447200 0.000000 -0.894400 +vn 0.351100 0.000000 -0.936300 +vn 0.351100 0.000000 0.936300 +vn 0.351100 0.936300 0.000000 +vn 0.351100 -0.936300 0.000000 +vn 0.447200 0.000000 0.894400 +vn 0.447200 0.894400 0.000000 +vn 0.447200 -0.894400 0.000000 +vn 0.447200 0.000000 -0.894400 +vn -0.351100 0.000000 -0.936300 +vn -0.351100 0.000000 0.936300 +vn -0.351100 0.936300 0.000000 +vn -0.351100 -0.936300 0.000000 +vn 0.000000 0.351100 0.936300 +vn 0.000000 0.351100 -0.936300 +vn -0.936300 0.351100 0.000000 +vn 0.936300 0.351100 0.000000 +s off +f 148//50 147//50 145//50 +f 152//51 151//51 147//51 +f 150//52 149//52 151//52 +f 146//53 145//53 149//53 +f 147//54 151//54 149//54 +f 156//55 150//55 152//55 +f 148//56 146//56 153//56 +f 152//57 148//57 154//57 +f 150//58 156//58 153//58 +f 154//51 158//51 157//51 +f 166//50 165//50 163//50 +f 170//51 169//51 172//51 +f 169//52 176//52 178//52 +f 164//59 163//59 174//59 +f 172//54 169//54 167//54 +f 171//60 166//60 164//60 +f 170//61 171//61 173//61 +f 165//62 172//62 174//62 +f 173//53 174//53 167//53 +f 171//63 172//63 165//63 +f 178//64 182//64 181//64 +f 168//52 177//52 175//52 +f 170//52 175//52 176//52 +f 167//52 178//52 177//52 +f 181//52 182//52 180//52 +f 175//65 179//65 180//65 +f 176//66 180//66 182//66 +f 177//67 181//67 179//67 +f 183//52 185//52 186//52 +f 192//51 189//51 190//51 +f 198//50 196//50 189//50 +f 194//68 183//68 184//68 +f 187//54 189//54 192//54 +f 184//69 186//69 191//69 +f 193//61 191//61 190//61 +f 194//70 192//70 185//70 +f 187//53 194//53 193//53 +f 185//71 192//71 191//71 +f 201//72 202//72 198//72 +f 195//50 197//50 188//50 +f 196//50 195//50 190//50 +f 197//50 198//50 187//50 +f 200//50 202//50 201//50 +f 200//73 199//73 195//73 +f 202//74 200//74 196//74 +f 199//75 201//75 197//75 +f 209//52 203//52 204//52 +f 209//51 214//51 212//51 +f 206//50 208//50 207//50 +f 210//61 204//61 208//61 +f 205//54 207//54 203//54 +f 204//51 203//51 207//51 +f 214//54 218//54 216//54 +f 206//51 211//51 213//51 +f 205//51 212//51 211//51 +f 210//51 213//51 214//51 +f 216//53 218//53 217//53 +f 211//61 215//61 217//61 +f 213//52 217//52 218//52 +f 212//50 216//50 215//50 +f 225//52 219//52 220//52 +f 225//51 230//51 228//51 +f 222//50 224//50 223//50 +f 226//61 220//61 224//61 +f 221//54 223//54 219//54 +f 220//51 219//51 223//51 +f 230//54 234//54 232//54 +f 222//51 227//51 229//51 +f 221//51 228//51 227//51 +f 226//51 229//51 230//51 +f 232//53 234//53 233//53 +f 227//61 231//61 233//61 +f 229//52 233//52 234//52 +f 228//50 232//50 231//50 +f 236//52 235//52 241//52 +f 244//53 246//53 241//53 +f 239//50 240//50 238//50 +f 240//61 236//61 242//61 +f 235//54 239//54 237//54 +f 239//53 235//53 236//53 +f 248//54 250//54 246//54 +f 245//53 243//53 238//53 +f 243//53 244//53 237//53 +f 246//53 245//53 242//53 +f 249//51 250//51 248//51 +f 249//61 247//61 243//61 +f 250//52 249//52 245//52 +f 247//50 248//50 244//50 +f 252//52 251//52 257//52 +f 260//53 262//53 257//53 +f 255//50 256//50 254//50 +f 256//61 252//61 258//61 +f 251//54 255//54 253//54 +f 255//53 251//53 252//53 +f 264//54 266//54 262//54 +f 261//53 259//53 254//53 +f 259//53 260//53 253//53 +f 262//53 261//53 258//53 +f 265//51 266//51 264//51 +f 265//61 263//61 259//61 +f 266//52 265//52 261//52 +f 263//50 264//50 260//50 +f 160//76 162//76 268//76 +f 156//53 160//53 159//53 +f 155//52 157//52 160//52 +f 153//50 159//50 158//50 +f 162//61 287//61 268//61 +f 158//77 267//77 161//77 +f 159//78 268//78 267//78 +f 157//79 161//79 162//79 +f 272//52 276//52 275//52 +f 267//61 347//61 161//61 +f 268//61 272//61 271//61 +f 161//61 270//61 269//61 +f 274//61 275//61 276//61 +f 270//50 274//50 273//50 +f 286//51 273//51 276//51 +f 346//53 275//53 274//53 +f 337//51 357//51 358//51 +f 339//51 359//51 360//51 +f 341//51 361//51 362//51 +f 343//51 363//51 364//51 +f 345//51 365//51 366//51 +f 347//51 367//51 368//51 +f 349//51 369//51 370//51 +f 351//51 371//51 372//51 +f 353//51 373//51 374//51 +f 355//51 375//51 376//51 +f 375//57 395//57 396//57 +f 373//57 393//57 394//57 +f 371//57 391//57 392//57 +f 369//57 389//57 390//57 +f 367//57 387//57 388//57 +f 365//57 385//57 386//57 +f 363//57 383//57 384//57 +f 361//57 381//57 382//57 +f 359//57 379//57 380//57 +f 357//57 377//57 378//57 +f 315//58 335//58 336//58 +f 313//58 333//58 334//58 +f 291//53 311//53 312//53 +f 293//53 313//53 314//53 +f 295//53 315//53 316//53 +f 289//53 309//53 310//53 +f 287//53 307//53 308//53 +f 285//53 305//53 306//53 +f 283//53 303//53 304//53 +f 281//53 301//53 302//53 +f 279//53 299//53 300//53 +f 277//53 297//53 298//53 +f 297//58 317//58 318//58 +f 299//58 319//58 320//58 +f 301//58 321//58 322//58 +f 303//58 323//58 324//58 +f 305//58 325//58 326//58 +f 307//58 327//58 328//58 +f 309//58 329//58 330//58 +f 311//58 331//58 332//58 +f 396//61 395//61 318//61 +f 394//61 393//61 320//61 +f 392//61 391//61 322//61 +f 390//61 389//61 324//61 +f 388//61 387//61 326//61 +f 386//61 385//61 328//61 +f 378//61 377//61 336//61 +f 380//61 379//61 334//61 +f 382//61 381//61 332//61 +f 384//61 383//61 330//61 +f 398//51 397//51 399//51 +f 401//53 402//53 400//53 +f 404//51 403//51 405//51 +f 407//53 408//53 406//53 +f 146//50 148//50 145//50 +f 148//51 152//51 147//51 +f 152//52 150//52 151//52 +f 150//53 146//53 149//53 +f 145//54 147//54 149//54 +f 155//55 156//55 152//55 +f 154//56 148//56 153//56 +f 155//57 152//57 154//57 +f 146//58 150//58 153//58 +f 155//51 154//51 157//51 +f 164//50 166//50 163//50 +f 171//51 170//51 172//51 +f 167//52 169//52 178//52 +f 173//59 164//59 174//59 +f 174//54 172//54 167//54 +f 173//60 171//60 164//60 +f 168//61 170//61 173//61 +f 163//62 165//62 174//62 +f 168//53 173//53 167//53 +f 166//63 171//63 165//63 +f 177//64 178//64 181//64 +f 170//52 168//52 175//52 +f 169//52 170//52 176//52 +f 168//52 167//52 177//52 +f 179//52 181//52 180//52 +f 176//65 175//65 180//65 +f 178//66 176//66 182//66 +f 175//67 177//67 179//67 +f 184//52 183//52 186//52 +f 191//51 192//51 190//51 +f 187//50 198//50 189//50 +f 193//68 194//68 184//68 +f 194//54 187//54 192//54 +f 193//69 184//69 191//69 +f 188//61 193//61 190//61 +f 183//70 194//70 185//70 +f 188//53 187//53 193//53 +f 186//71 185//71 191//71 +f 197//72 201//72 198//72 +f 190//50 195//50 188//50 +f 189//50 196//50 190//50 +f 188//50 197//50 187//50 +f 199//50 200//50 201//50 +f 196//73 200//73 195//73 +f 198//74 202//74 196//74 +f 195//75 199//75 197//75 +f 210//52 209//52 204//52 +f 205//51 209//51 212//51 +f 205//50 206//50 207//50 +f 206//61 210//61 208//61 +f 209//54 205//54 203//54 +f 208//51 204//51 207//51 +f 212//54 214//54 216//54 +f 210//51 206//51 213//51 +f 206//51 205//51 211//51 +f 209//51 210//51 214//51 +f 215//53 216//53 217//53 +f 213//61 211//61 217//61 +f 214//52 213//52 218//52 +f 211//50 212//50 215//50 +f 226//52 225//52 220//52 +f 221//51 225//51 228//51 +f 221//50 222//50 223//50 +f 222//61 226//61 224//61 +f 225//54 221//54 219//54 +f 224//51 220//51 223//51 +f 228//54 230//54 232//54 +f 226//51 222//51 229//51 +f 222//51 221//51 227//51 +f 225//51 226//51 230//51 +f 231//53 232//53 233//53 +f 229//61 227//61 233//61 +f 230//52 229//52 234//52 +f 227//50 228//50 231//50 +f 242//52 236//52 241//52 +f 237//53 244//53 241//53 +f 237//50 239//50 238//50 +f 238//61 240//61 242//61 +f 241//54 235//54 237//54 +f 240//53 239//53 236//53 +f 244//54 248//54 246//54 +f 242//53 245//53 238//53 +f 238//53 243//53 237//53 +f 241//53 246//53 242//53 +f 247//51 249//51 248//51 +f 245//61 249//61 243//61 +f 246//52 250//52 245//52 +f 243//50 247//50 244//50 +f 258//52 252//52 257//52 +f 253//53 260//53 257//53 +f 253//50 255//50 254//50 +f 254//61 256//61 258//61 +f 257//54 251//54 253//54 +f 256//53 255//53 252//53 +f 260//54 264//54 262//54 +f 258//53 261//53 254//53 +f 254//53 259//53 253//53 +f 257//53 262//53 258//53 +f 263//51 265//51 264//51 +f 261//61 265//61 259//61 +f 262//52 266//52 261//52 +f 259//50 263//50 260//50 +f 159//76 160//76 268//76 +f 153//53 156//53 159//53 +f 156//52 155//52 160//52 +f 154//50 153//50 158//50 +f 272//61 268//61 296//61 +f 162//61 269//61 277//61 +f 277//61 278//61 162//61 +f 279//61 280//61 162//61 +f 281//61 282//61 162//61 +f 283//61 284//61 162//61 +f 285//61 286//61 162//61 +f 287//61 288//61 268//61 +f 289//61 290//61 268//61 +f 291//61 292//61 268//61 +f 293//61 294//61 268//61 +f 295//61 296//61 268//61 +f 162//61 278//61 279//61 +f 295//61 268//61 294//61 +f 292//61 293//61 268//61 +f 288//61 289//61 268//61 +f 284//61 285//61 162//61 +f 280//61 281//61 162//61 +f 291//61 268//61 290//61 +f 162//61 282//61 283//61 +f 286//61 287//61 162//61 +f 157//77 158//77 161//77 +f 158//78 159//78 267//78 +f 160//79 157//79 162//79 +f 271//52 272//52 275//52 +f 270//61 161//61 356//61 +f 267//61 271//61 337//61 +f 337//61 338//61 267//61 +f 339//61 340//61 267//61 +f 341//61 342//61 267//61 +f 343//61 344//61 267//61 +f 345//61 346//61 267//61 +f 347//61 348//61 161//61 +f 349//61 350//61 161//61 +f 351//61 352//61 161//61 +f 353//61 354//61 161//61 +f 355//61 356//61 161//61 +f 267//61 338//61 339//61 +f 355//61 161//61 354//61 +f 352//61 353//61 161//61 +f 348//61 349//61 161//61 +f 344//61 345//61 267//61 +f 340//61 341//61 267//61 +f 351//61 161//61 350//61 +f 267//61 342//61 343//61 +f 346//61 347//61 267//61 +f 267//61 268//61 271//61 +f 162//61 161//61 269//61 +f 273//61 274//61 276//61 +f 269//50 270//50 273//50 +f 276//51 272//51 296//51 +f 296//51 295//51 276//51 +f 294//51 293//51 276//51 +f 292//51 291//51 276//51 +f 290//51 289//51 276//51 +f 288//51 287//51 276//51 +f 286//51 285//51 273//51 +f 284//51 283//51 273//51 +f 282//51 281//51 273//51 +f 280//51 279//51 273//51 +f 278//51 277//51 273//51 +f 269//51 273//51 277//51 +f 276//51 295//51 294//51 +f 293//51 292//51 276//51 +f 289//51 288//51 276//51 +f 285//51 284//51 273//51 +f 281//51 280//51 273//51 +f 278//51 273//51 279//51 +f 276//51 291//51 290//51 +f 287//51 286//51 276//51 +f 282//51 273//51 283//51 +f 274//53 270//53 356//53 +f 356//53 355//53 274//53 +f 354//53 353//53 274//53 +f 352//53 351//53 274//53 +f 350//53 349//53 274//53 +f 348//53 347//53 274//53 +f 346//53 345//53 275//53 +f 344//53 343//53 275//53 +f 342//53 341//53 275//53 +f 340//53 339//53 275//53 +f 338//53 337//53 275//53 +f 271//53 275//53 337//53 +f 274//53 355//53 354//53 +f 353//53 352//53 274//53 +f 349//53 348//53 274//53 +f 345//53 344//53 275//53 +f 341//53 340//53 275//53 +f 338//53 275//53 339//53 +f 274//53 351//53 350//53 +f 347//53 346//53 274//53 +f 342//53 275//53 343//53 +f 338//51 337//51 358//51 +f 340//51 339//51 360//51 +f 342//51 341//51 362//51 +f 344//51 343//51 364//51 +f 346//51 345//51 366//51 +f 348//51 347//51 368//51 +f 350//51 349//51 370//51 +f 352//51 351//51 372//51 +f 354//51 353//51 374//51 +f 356//51 355//51 376//51 +f 376//57 375//57 396//57 +f 374//57 373//57 394//57 +f 372//57 371//57 392//57 +f 370//57 369//57 390//57 +f 368//57 367//57 388//57 +f 366//57 365//57 386//57 +f 364//57 363//57 384//57 +f 362//57 361//57 382//57 +f 360//57 359//57 380//57 +f 358//57 357//57 378//57 +f 316//58 315//58 336//58 +f 314//58 313//58 334//58 +f 292//53 291//53 312//53 +f 294//53 293//53 314//53 +f 296//53 295//53 316//53 +f 290//53 289//53 310//53 +f 288//53 287//53 308//53 +f 286//53 285//53 306//53 +f 284//53 283//53 304//53 +f 282//53 281//53 302//53 +f 280//53 279//53 300//53 +f 278//53 277//53 298//53 +f 298//58 297//58 318//58 +f 300//58 299//58 320//58 +f 302//58 301//58 322//58 +f 304//58 303//58 324//58 +f 306//58 305//58 326//58 +f 308//58 307//58 328//58 +f 310//58 309//58 330//58 +f 312//58 311//58 332//58 +f 317//61 396//61 318//61 +f 319//61 394//61 320//61 +f 321//61 392//61 322//61 +f 323//61 390//61 324//61 +f 325//61 388//61 326//61 +f 327//61 386//61 328//61 +f 335//61 378//61 336//61 +f 333//61 380//61 334//61 +f 331//61 382//61 332//61 +f 329//61 384//61 330//61 diff --git a/assets/hbm/textures/gui/gui_assembler.png b/assets/hbm/textures/gui/gui_assembler.png new file mode 100644 index 000000000..9d3cf92b3 Binary files /dev/null and b/assets/hbm/textures/gui/gui_assembler.png differ diff --git a/assets/hbm/textures/items/assembly_template.png b/assets/hbm/textures/items/assembly_template.png new file mode 100644 index 000000000..2537c2fc2 Binary files /dev/null and b/assets/hbm/textures/items/assembly_template.png differ diff --git a/com/hbm/blocks/ModBlocks.java b/com/hbm/blocks/ModBlocks.java index c6b476233..a4877141d 100644 --- a/com/hbm/blocks/ModBlocks.java +++ b/com/hbm/blocks/ModBlocks.java @@ -352,6 +352,9 @@ public class ModBlocks { public static Block drill_pipe; public static final int guiID_machine_drill = 45; + public static Block machine_assembler; + public static final int guiID_machine_assembler = 48; + public static Block launch_pad; public static Block launch_pad_generic; public static Block launch_pad_incendiary; @@ -411,6 +414,8 @@ public class ModBlocks { public static Block dummy_port_flare; public static Block dummy_block_drill; public static Block dummy_port_drill; + public static Block dummy_block_assembler; + public static Block dummy_port_assembler; private static void initializeBlock() { @@ -694,6 +699,7 @@ public class ModBlocks { machine_refinery = new MachineRefinery(Material.iron).setBlockName("machine_refinery").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.tabBlock).setBlockTextureName(RefStrings.MODID + ":machine_refinery_side"); machine_drill = new MachineMiningDrill(Material.iron).setBlockName("machine_drill").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.tabBlock).setBlockTextureName(RefStrings.MODID + ":machine_drill"); drill_pipe = new BlockNoDrop(Material.iron).setBlockName("drill_pipe").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":drill_pipe"); + machine_assembler = new MachineAssembler(Material.iron).setBlockName("machine_assembler").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.tabBlock).setBlockTextureName(RefStrings.MODID + ":machine_assembler"); machine_schrabidium_transmutator = new MachineSchrabidiumTransmutator(Material.iron).setBlockName("machine_schrabidium_transmutator").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.tabBlock); @@ -733,6 +739,8 @@ public class ModBlocks { dummy_port_flare = new DummyBlockFlare(Material.iron).setBlockName("dummy_port_flare").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); dummy_block_drill = new DummyBlockDrill(Material.iron).setBlockName("dummy_block_drill").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); dummy_port_drill = new DummyBlockDrill(Material.iron).setBlockName("dummy_port_drill").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); + dummy_block_assembler = new DummyBlockAssembler(Material.iron).setBlockName("dummy_block_assembler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); + dummy_port_assembler = new DummyBlockAssembler(Material.iron).setBlockName("dummy_port_assembler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel"); } private static void registerBlock() { @@ -929,6 +937,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_converter_rf_he, machine_converter_rf_he.getUnlocalizedName()); GameRegistry.registerBlock(machine_electric_furnace_off, machine_electric_furnace_off.getUnlocalizedName()); GameRegistry.registerBlock(machine_electric_furnace_on, machine_electric_furnace_on.getUnlocalizedName()); + GameRegistry.registerBlock(machine_assembler, machine_assembler.getUnlocalizedName()); GameRegistry.registerBlock(machine_shredder, machine_shredder.getUnlocalizedName()); GameRegistry.registerBlock(machine_deuterium, machine_deuterium.getUnlocalizedName()); GameRegistry.registerBlock(machine_well, machine_well.getUnlocalizedName()); @@ -1040,6 +1049,8 @@ public class ModBlocks { GameRegistry.registerBlock(dummy_port_flare, dummy_port_flare.getUnlocalizedName()); GameRegistry.registerBlock(dummy_block_drill, dummy_block_drill.getUnlocalizedName()); GameRegistry.registerBlock(dummy_port_drill, dummy_port_drill.getUnlocalizedName()); + GameRegistry.registerBlock(dummy_block_assembler, dummy_block_assembler.getUnlocalizedName()); + GameRegistry.registerBlock(dummy_port_assembler, dummy_port_assembler.getUnlocalizedName()); //Other Technical Blocks GameRegistry.registerBlock(oil_pipe, oil_pipe.getUnlocalizedName()); diff --git a/com/hbm/blocks/machine/DummyBlockAssembler.java b/com/hbm/blocks/machine/DummyBlockAssembler.java new file mode 100644 index 000000000..c64c16688 --- /dev/null +++ b/com/hbm/blocks/machine/DummyBlockAssembler.java @@ -0,0 +1,109 @@ +package com.hbm.blocks.machine; + +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IDummy; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityDummy; +import com.hbm.tileentity.TileEntityMachineAssembler; +import com.hbm.tileentity.TileEntityMachineIGenerator; +import com.hbm.tileentity.TileEntityMachineCentrifuge; +import com.hbm.tileentity.TileEntityMachineElectricFurnace; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class DummyBlockAssembler extends BlockContainer implements IDummy { + + public static boolean safeBreak = false; + + public DummyBlockAssembler(Material p_i45386_1_) { + super(p_i45386_1_); + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return new TileEntityDummy(); + } + + public void breakBlock(World world, int x, int y, int z, Block block, int i) + { + if(!safeBreak) { + TileEntity te = world.getTileEntity(x, y, z); + if(te != null && te instanceof TileEntityDummy) { + int a = ((TileEntityDummy)te).targetX; + int b = ((TileEntityDummy)te).targetY; + int c = ((TileEntityDummy)te).targetZ; + + //world.getBlock(a, b, c).breakBlock(world, a, b, c, block, i); + if(!world.isRemote) + world.func_147480_a(a, b, c, true); + } + } + world.removeTileEntity(x, y, z); + } + + @Override + public int getRenderType() { + return -1; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) + { + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public Item getItem(World world, int x, int y, int z) + { + return Item.getItemFromBlock(ModBlocks.machine_assembler); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if(world.isRemote) + { + return true; + } else if(!player.isSneaking()) + { + TileEntity te = world.getTileEntity(x, y, z); + if(te != null && te instanceof TileEntityDummy) { + int a = ((TileEntityDummy)te).targetX; + int b = ((TileEntityDummy)te).targetY; + int c = ((TileEntityDummy)te).targetZ; + + TileEntityMachineAssembler entity = (TileEntityMachineAssembler) world.getTileEntity(a, b, c); + if(entity != null) + { + FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_machine_assembler, world, a, b, c); + } + } + return true; + } else { + return false; + } + } + +} diff --git a/com/hbm/blocks/machine/MachineAssembler.java b/com/hbm/blocks/machine/MachineAssembler.java new file mode 100644 index 000000000..d6fd4ccba --- /dev/null +++ b/com/hbm/blocks/machine/MachineAssembler.java @@ -0,0 +1,176 @@ +package com.hbm.blocks.machine; + +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.handler.MultiblockHandler; +import com.hbm.interfaces.IMultiblock; +import com.hbm.tileentity.TileEntityDummy; +import com.hbm.tileentity.TileEntityMachineAssembler; +import com.hbm.tileentity.TileEntityMachineIGenerator; +import com.hbm.tileentity.TileEntityNukeGadget; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class MachineAssembler extends BlockContainer implements IMultiblock { + + public MachineAssembler(Material p_i45386_1_) { + super(p_i45386_1_); + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return new TileEntityMachineAssembler(); + + } + + @Override + public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { + return Item.getItemFromBlock(ModBlocks.machine_assembler); + } + + @Override + public int getRenderType() { + return -1; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + + if (i == 0) { + world.setBlockMetadataWithNotify(x, y, z, 5, 2); + if(MultiblockHandler.checkSpace(world, x, y, z, MultiblockHandler.assemblerDimensionEast)) { + MultiblockHandler.fillUp(world, x, y, z, MultiblockHandler.assemblerDimensionEast, ModBlocks.dummy_block_assembler); + + // + /*DummyBlockIGenerator.safeBreak = true; + world.setBlock(x + 2, y, z, ModBlocks.dummy_port_igenerator); + TileEntity te = world.getTileEntity(x + 2, y, z); + if(te instanceof TileEntityDummy) { + TileEntityDummy dummy = (TileEntityDummy)te; + dummy.targetX = x; + dummy.targetY = y; + dummy.targetZ = z; + } + world.setBlock(x - 3, y, z, ModBlocks.dummy_port_igenerator); + TileEntity te2 = world.getTileEntity(x - 3, y, z); + if(te instanceof TileEntityDummy) { + TileEntityDummy dummy = (TileEntityDummy)te2; + dummy.targetX = x; + dummy.targetY = y; + dummy.targetZ = z; + } + DummyBlockIGenerator.safeBreak = false;*/ + // + + } else + world.func_147480_a(x, y, z, true); + } + if (i == 1) { + world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(MultiblockHandler.checkSpace(world, x, y, z, MultiblockHandler.assemblerDimensionSouth)) { + MultiblockHandler.fillUp(world, x, y, z, MultiblockHandler.assemblerDimensionSouth, ModBlocks.dummy_block_assembler); + + // + /*DummyBlockIGenerator.safeBreak = true; + world.setBlock(x, y, z + 2, ModBlocks.dummy_port_igenerator); + TileEntity te = world.getTileEntity(x, y, z + 2); + if(te instanceof TileEntityDummy) { + TileEntityDummy dummy = (TileEntityDummy)te; + dummy.targetX = x; + dummy.targetY = y; + dummy.targetZ = z; + } + world.setBlock(x, y, z - 3, ModBlocks.dummy_port_igenerator); + TileEntity te2 = world.getTileEntity(x, y, z - 3); + if(te instanceof TileEntityDummy) { + TileEntityDummy dummy = (TileEntityDummy)te2; + dummy.targetX = x; + dummy.targetY = y; + dummy.targetZ = z; + } + DummyBlockIGenerator.safeBreak = false;*/ + // + + } else + world.func_147480_a(x, y, z, true); + } + if (i == 2) { + world.setBlockMetadataWithNotify(x, y, z, 4, 2); + if(MultiblockHandler.checkSpace(world, x, y, z, MultiblockHandler.assemblerDimensionWest)) { + MultiblockHandler.fillUp(world, x, y, z, MultiblockHandler.assemblerDimensionWest, ModBlocks.dummy_block_assembler); + + // + /*DummyBlockIGenerator.safeBreak = true; + world.setBlock(x + 3, y, z, ModBlocks.dummy_port_igenerator); + TileEntity te = world.getTileEntity(x + 3, y, z); + if(te instanceof TileEntityDummy) { + TileEntityDummy dummy = (TileEntityDummy)te; + dummy.targetX = x; + dummy.targetY = y; + dummy.targetZ = z; + } + world.setBlock(x - 2, y, z, ModBlocks.dummy_port_igenerator); + TileEntity te2 = world.getTileEntity(x - 2, y, z); + if(te instanceof TileEntityDummy) { + TileEntityDummy dummy = (TileEntityDummy)te2; + dummy.targetX = x; + dummy.targetY = y; + dummy.targetZ = z; + } + DummyBlockIGenerator.safeBreak = false;*/ + // + + } else + world.func_147480_a(x, y, z, true); + } + if (i == 3) { + world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(MultiblockHandler.checkSpace(world, x, y, z, MultiblockHandler.assemblerDimensionNorth)) { + MultiblockHandler.fillUp(world, x, y, z, MultiblockHandler.assemblerDimensionNorth, ModBlocks.dummy_block_assembler); + + // + /*DummyBlockIGenerator.safeBreak = true; + world.setBlock(x, y, z + 3, ModBlocks.dummy_port_igenerator); + TileEntity te = world.getTileEntity(x, y, z + 3); + if(te instanceof TileEntityDummy) { + TileEntityDummy dummy = (TileEntityDummy)te; + dummy.targetX = x; + dummy.targetY = y; + dummy.targetZ = z; + } + world.setBlock(x, y, z - 2, ModBlocks.dummy_port_igenerator); + TileEntity te2 = world.getTileEntity(x, y, z - 2); + if(te instanceof TileEntityDummy) { + TileEntityDummy dummy = (TileEntityDummy)te2; + dummy.targetX = x; + dummy.targetY = y; + dummy.targetZ = z; + } + DummyBlockIGenerator.safeBreak = false;*/ + // + + } else + world.func_147480_a(x, y, z, true); + } + } +} diff --git a/com/hbm/handler/GUIHandler.java b/com/hbm/handler/GUIHandler.java index 4d405ac95..b9721904a 100644 --- a/com/hbm/handler/GUIHandler.java +++ b/com/hbm/handler/GUIHandler.java @@ -14,6 +14,7 @@ import com.hbm.inventory.container.ContainerFusionMultiblock; import com.hbm.inventory.container.ContainerGenerator; import com.hbm.inventory.container.ContainerIGenerator; import com.hbm.inventory.container.ContainerLaunchPadTier1; +import com.hbm.inventory.container.ContainerMachineAssembler; import com.hbm.inventory.container.ContainerMachineBattery; import com.hbm.inventory.container.ContainerMachineCMBFactory; import com.hbm.inventory.container.ContainerMachineCoal; @@ -54,6 +55,7 @@ import com.hbm.inventory.gui.GUIFWatzCore; import com.hbm.inventory.gui.GUIFusionMultiblock; import com.hbm.inventory.gui.GUIIGenerator; import com.hbm.inventory.gui.GUILaunchPadTier1; +import com.hbm.inventory.gui.GUIMachineAssembler; import com.hbm.inventory.gui.GUIMachineBattery; import com.hbm.inventory.gui.GUIMachineCMBFactory; import com.hbm.inventory.gui.GUIMachineCentrifuge; @@ -101,6 +103,7 @@ import com.hbm.tileentity.TileEntityMachineIGenerator; import com.hbm.tileentity.TileEntityMachineMiningDrill; import com.hbm.tileentity.TileEntityMachineOilWell; import com.hbm.tileentity.TileEntityLaunchPad; +import com.hbm.tileentity.TileEntityMachineAssembler; import com.hbm.tileentity.TileEntityMachineBattery; import com.hbm.tileentity.TileEntityMachineCMBFactory; import com.hbm.tileentity.TileEntityMachineCentrifuge; @@ -499,6 +502,14 @@ public class GUIHandler implements IGuiHandler { return new ContainerMachineMiningDrill(player.inventory, (TileEntityMachineMiningDrill) entity); } } + + case ModBlocks.guiID_machine_assembler: + { + if(entity instanceof TileEntityMachineAssembler) + { + return new ContainerMachineAssembler(player.inventory, (TileEntityMachineAssembler) entity); + } + } } return null; } @@ -863,6 +874,14 @@ public class GUIHandler implements IGuiHandler { return new GUIMachineMiningDrill(player.inventory, (TileEntityMachineMiningDrill) entity); } } + + case ModBlocks.guiID_machine_assembler: + { + if(entity instanceof TileEntityMachineAssembler) + { + return new GUIMachineAssembler(player.inventory, (TileEntityMachineAssembler) entity); + } + } } } return null; diff --git a/com/hbm/handler/MultiblockHandler.java b/com/hbm/handler/MultiblockHandler.java index 98e6da33a..4ef8f9063 100644 --- a/com/hbm/handler/MultiblockHandler.java +++ b/com/hbm/handler/MultiblockHandler.java @@ -49,6 +49,10 @@ public class MultiblockHandler { public static final int[] wellDimension = new int[] { 1, 1, 5, 0, 1, 1 }; public static final int[] flareDimension = new int[] { 1, 1, 9, 0, 1, 1 }; public static final int[] drillDimension = new int[] { 1, 1, 3, 0, 1, 1 }; + public static final int[] assemblerDimensionNorth = new int[] { 2, 1, 1, 0, 1, 2 }; + public static final int[] assemblerDimensionEast = new int[] { 2, 1, 1, 0, 2, 1 }; + public static final int[] assemblerDimensionSouth = new int[] { 1, 2, 1, 0, 2, 1 }; + public static final int[] assemblerDimensionWest = new int[] { 1, 2, 1, 0, 1, 2 }; //Approved! public static boolean checkSpace(World world, int x, int y, int z, int[] i) { diff --git a/com/hbm/inventory/MachineRecipes.java b/com/hbm/inventory/MachineRecipes.java index 09dde17b4..bd31cf0a1 100644 --- a/com/hbm/inventory/MachineRecipes.java +++ b/com/hbm/inventory/MachineRecipes.java @@ -9,6 +9,8 @@ import java.util.Set; import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; +import com.hbm.items.tool.ItemAssemblyTemplate; +import com.hbm.items.tool.ItemAssemblyTemplate.EnumAssemblyTemplate; import com.hbm.main.MainRegistry; import cpw.mods.fml.common.registry.GameData; @@ -1489,4 +1491,41 @@ public class MachineRecipes { return false; } + + public static List getRecipeFromTempate(ItemStack stack) { + + if(stack == null || !(stack.getItem() instanceof ItemAssemblyTemplate)) + return null; + + List list = new ArrayList(); + + switch(ItemAssemblyTemplate.EnumAssemblyTemplate.getEnum(stack.getItemDamage())) { + case TEST: + list.add(new ItemStack(Items.iron_ingot, 4)); + list.add(new ItemStack(Items.gold_ingot, 2)); + list.add(new ItemStack(Items.coal, 8)); + break; + } + + if(list.isEmpty()) + return null; + else + return list; + } + + public static ItemStack getOutputFromTempate(ItemStack stack) { + + if(stack == null || !(stack.getItem() instanceof ItemAssemblyTemplate)) + return null; + + ItemStack output = null; + + switch(ItemAssemblyTemplate.EnumAssemblyTemplate.getEnum(stack.getItemDamage())) { + case TEST: + output = new ItemStack(ModItems.rotor_steel, 2); + break; + } + + return output; + } } diff --git a/com/hbm/inventory/container/ContainerMachineAssembler.java b/com/hbm/inventory/container/ContainerMachineAssembler.java new file mode 100644 index 000000000..68a481521 --- /dev/null +++ b/com/hbm/inventory/container/ContainerMachineAssembler.java @@ -0,0 +1,148 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotMachineOutput; +import com.hbm.tileentity.TileEntityMachineAssembler; +import com.hbm.tileentity.TileEntityMachineMiningDrill; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineAssembler extends Container { + +private TileEntityMachineAssembler nukeBoy; + + private int power; + private int progress; + private int maxProgress; + + public ContainerMachineAssembler(InventoryPlayer invPlayer, TileEntityMachineAssembler tedf) { + + nukeBoy = tedf; + + //Battery + this.addSlotToContainer(new Slot(tedf, 0, 80, 18)); + //Upgrades + this.addSlotToContainer(new Slot(tedf, 1, 152, 18)); + this.addSlotToContainer(new Slot(tedf, 2, 152, 36)); + this.addSlotToContainer(new Slot(tedf, 3, 152, 54)); + //Schematic + this.addSlotToContainer(new Slot(tedf, 4, 80, 54)); + //Output + this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 5, 134, 90)); + //Input + this.addSlotToContainer(new Slot(tedf, 6, 8, 18)); + this.addSlotToContainer(new Slot(tedf, 7, 26, 18)); + this.addSlotToContainer(new Slot(tedf, 8, 8, 36)); + this.addSlotToContainer(new Slot(tedf, 9, 26, 36)); + this.addSlotToContainer(new Slot(tedf, 10, 8, 54)); + this.addSlotToContainer(new Slot(tedf, 11, 26, 54)); + this.addSlotToContainer(new Slot(tedf, 12, 8, 72)); + this.addSlotToContainer(new Slot(tedf, 13, 26, 72)); + this.addSlotToContainer(new Slot(tedf, 14, 8, 90)); + this.addSlotToContainer(new Slot(tedf, 15, 26, 90)); + this.addSlotToContainer(new Slot(tedf, 16, 8, 108)); + this.addSlotToContainer(new Slot(tedf, 17, 26, 108)); + + for(int i = 0; i < 3; i++) + { + for(int j = 0; j < 9; j++) + { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18 + 56)); + } + } + + for(int i = 0; i < 9; i++) + { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142 + 56)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) + { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if (var4 != null && var4.getHasStack()) + { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if (par2 <= 12) { + if (!this.mergeItemStack(var5, 13, this.inventorySlots.size(), true)) + { + return null; + } + } + else if (!this.mergeItemStack(var5, 0, 13, false)) + { + return null; + } + + if (var5.stackSize == 0) + { + var4.putStack((ItemStack) null); + } + else + { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return nukeBoy.isUseableByPlayer(player); + } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + + for(int i = 0; i < this.crafters.size(); i++) + { + ICrafting par1 = (ICrafting)this.crafters.get(i); + + if(this.power != this.nukeBoy.power) + { + par1.sendProgressBarUpdate(this, 0, this.nukeBoy.power); + } + + if(this.progress != this.nukeBoy.progress) + { + par1.sendProgressBarUpdate(this, 1, this.nukeBoy.progress); + } + + if(this.maxProgress != this.nukeBoy.maxProgress) + { + par1.sendProgressBarUpdate(this, 2, this.nukeBoy.maxProgress); + } + } + + this.power = this.nukeBoy.power; + this.progress= this.nukeBoy.progress; + this.maxProgress= this.nukeBoy.maxProgress; + } + + @Override + public void updateProgressBar(int i, int j) { + if(i == 0) + { + nukeBoy.power = j; + } + if(i == 1) + { + nukeBoy.progress = j; + } + if(i == 2) + { + nukeBoy.maxProgress = j; + } + } +} diff --git a/com/hbm/inventory/gui/GUIMachineAssembler.java b/com/hbm/inventory/gui/GUIMachineAssembler.java new file mode 100644 index 000000000..032a478e4 --- /dev/null +++ b/com/hbm/inventory/gui/GUIMachineAssembler.java @@ -0,0 +1,50 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineAssembler; +import com.hbm.inventory.container.ContainerMachineOilWell; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.TileEntityMachineAssembler; +import com.hbm.tileentity.TileEntityMachineOilWell; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineAssembler extends GuiContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_assembler.png"); + private TileEntityMachineAssembler assembler; + + public GUIMachineAssembler(InventoryPlayer invPlayer, TileEntityMachineAssembler tedf) { + super(new ContainerMachineAssembler(invPlayer, tedf)); + assembler = tedf; + + this.xSize = 176; + this.ySize = 222; + } + + @Override + protected void drawGuiContainerForegroundLayer( int i, int j) { + String name = this.assembler.hasCustomInventoryName() ? this.assembler.getInventoryName() : I18n.format(this.assembler.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int i = assembler.getPowerScaled(52); + drawTexturedModalRect(guiLeft + 116, guiTop + 70 - i, 176, 52 - i, 16, i); + + int j = assembler.getProgressScaled(83); + drawTexturedModalRect(guiLeft + 45, guiTop + 82, 2, 222, j, 32); + } +} diff --git a/com/hbm/items/ModItems.java b/com/hbm/items/ModItems.java index fc765abd0..387a1ae5a 100644 --- a/com/hbm/items/ModItems.java +++ b/com/hbm/items/ModItems.java @@ -505,6 +505,8 @@ public class ModItems { public static Item designator_range; public static Item linker; public static Item oil_detector; + + public static Item assembly_template; public static Item missile_generic; public static Item missile_anti_ballistic; @@ -1659,6 +1661,8 @@ public class ModItems { chopper = new ItemChopper().setUnlocalizedName("chopper").setMaxStackSize(1).setCreativeTab(MainRegistry.tabNuke).setTextureName(RefStrings.MODID + ":chopper"); linker = new ItemTeleLink().setUnlocalizedName("linker").setMaxStackSize(1).setCreativeTab(MainRegistry.tabNuke).setTextureName(RefStrings.MODID + ":linker"); oil_detector = new ItemOilDetector().setUnlocalizedName("oil_detector").setMaxStackSize(1).setCreativeTab(MainRegistry.tabNuke).setTextureName(RefStrings.MODID + ":oil_detector"); + + assembly_template = new ItemAssemblyTemplate().setUnlocalizedName("assembly_template").setMaxStackSize(1).setCreativeTab(MainRegistry.tabNuke).setTextureName(RefStrings.MODID + ":assembly_template"); euphemium_helmet = new ArmorEuphemium(MainRegistry.enumArmorMaterialEuphemium, 6, 0).setUnlocalizedName("astatine_helmet").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_helmet"); euphemium_plate = new ArmorEuphemium(MainRegistry.enumArmorMaterialEuphemium, 6, 1).setUnlocalizedName("astatine_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_plate"); @@ -2257,6 +2261,9 @@ public class ModItems { GameRegistry.registerItem(factory_core_titanium, factory_core_titanium.getUnlocalizedName()); GameRegistry.registerItem(factory_core_advanced, factory_core_advanced.getUnlocalizedName()); + //Machine Templates + GameRegistry.registerItem(assembly_template, assembly_template.getUnlocalizedName()); + //Machine Upgrades GameRegistry.registerItem(upgrade_template, upgrade_template.getUnlocalizedName()); GameRegistry.registerItem(upgrade_speed_1, upgrade_speed_1.getUnlocalizedName()); diff --git a/com/hbm/items/tool/ItemAssemblyTemplate.java b/com/hbm/items/tool/ItemAssemblyTemplate.java new file mode 100644 index 000000000..ce443315c --- /dev/null +++ b/com/hbm/items/tool/ItemAssemblyTemplate.java @@ -0,0 +1,118 @@ +package com.hbm.items.tool; + +import java.util.List; + +import com.hbm.inventory.MachineRecipes; +import com.hbm.items.ModItems; + +import cpw.mods.fml.common.eventhandler.Event.Result; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockColored; +import net.minecraft.block.BlockLog; +import net.minecraft.block.IGrowable; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.resources.I18n; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntitySheep; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.FakePlayerFactory; +import net.minecraftforge.event.entity.player.BonemealEvent; + +public class ItemAssemblyTemplate extends Item { + + public enum EnumAssemblyTemplate { + + TEST(0); + + private final int value; + private EnumAssemblyTemplate(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + + public static EnumAssemblyTemplate getEnum(int i) { + return EnumAssemblyTemplate.values()[i]; + } + + public String getName() { + return this.toString(); + } + } + + public ItemAssemblyTemplate() + { + this.setHasSubtypes(true); + this.setMaxDamage(0); + } + + public String getUnlocalizedName(ItemStack stack) + { + int i = stack.getItemDamage(); + return super.getUnlocalizedName() + "." + EnumAssemblyTemplate.getEnum(i).getName(); + } + + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tabs, List list) + { + for (int i = 0; i < EnumAssemblyTemplate.values().length; ++i) + { + list.add(new ItemStack(item, 1, i)); + } + } + + public static int getProcessTime(ItemStack stack) { + + if(!(stack.getItem() instanceof ItemAssemblyTemplate)) + return 100; + + int i = stack.getItemDamage(); + EnumAssemblyTemplate enum1 = EnumAssemblyTemplate.getEnum(i); + + switch (enum1) { + case TEST: + return 200; + default: + return 100; + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) + { + + if(!(stack.getItem() instanceof ItemAssemblyTemplate)) + return; + + List stacks = MachineRecipes.getRecipeFromTempate(stack); + ItemStack out = MachineRecipes.getOutputFromTempate(stack); + + try { + list.add("Output:"); + list.add(out.stackSize + "x " + out.getDisplayName()); + list.add("Inputs:"); + + for(int i = 0; i < stacks.size(); i++) { + if(stacks.get(i) != null) + list.add(stacks.get(i).stackSize + "x " + stacks.get(i).getDisplayName()); + } + } catch(Exception e) { + list.add("###INVALID###"); + } + } + +} diff --git a/com/hbm/main/ClientProxy.java b/com/hbm/main/ClientProxy.java index deed6d3c2..786be5a7e 100644 --- a/com/hbm/main/ClientProxy.java +++ b/com/hbm/main/ClientProxy.java @@ -164,6 +164,7 @@ import com.hbm.render.item.ItemRenderTestContainer; import com.hbm.render.item.ItemRenderUboinik; import com.hbm.render.item.ItemRenderXVL1456; import com.hbm.render.item.ItemRenderZOMG; +import com.hbm.render.tileentity.RenderAssembler; import com.hbm.render.tileentity.RenderBombMulti; import com.hbm.render.tileentity.RenderCable; import com.hbm.render.tileentity.RenderCentrifuge; @@ -219,6 +220,7 @@ import com.hbm.tileentity.TileEntityMachineIGenerator; import com.hbm.tileentity.TileEntityMachineMiningDrill; import com.hbm.tileentity.TileEntityMachineOilWell; import com.hbm.tileentity.TileEntityLaunchPad; +import com.hbm.tileentity.TileEntityMachineAssembler; import com.hbm.tileentity.TileEntityMachineCentrifuge; import com.hbm.tileentity.TileEntityMachineCyclotron; import com.hbm.tileentity.TileEntityMachineGasFlare; @@ -279,6 +281,7 @@ public class ClientProxy extends ServerProxy ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineOilWell.class, new RenderDerrick()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineGasFlare.class, new RenderGasFlare()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineMiningDrill.class, new RenderMiningDrill()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssembler.class, new RenderAssembler()); //RenderingRegistry.registerEntityRenderingHandler(EntityRocket.class, new RenderRocket()); RenderingRegistry.registerEntityRenderingHandler(EntityRocket.class, new RenderSnowball(ModItems.man_core)); diff --git a/com/hbm/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index dcf5a0360..61fa78413 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -142,6 +142,7 @@ import com.hbm.tileentity.TileEntityMachineIGenerator; import com.hbm.tileentity.TileEntityMachineMiningDrill; import com.hbm.tileentity.TileEntityMachineOilWell; import com.hbm.tileentity.TileEntityLaunchPad; +import com.hbm.tileentity.TileEntityMachineAssembler; import com.hbm.tileentity.TileEntityMachineBattery; import com.hbm.tileentity.TileEntityMachineCMBFactory; import com.hbm.tileentity.TileEntityMachineCentrifuge; @@ -455,6 +456,7 @@ public class MainRegistry GameRegistry.registerTileEntity(TileEntityPylonRedWire.class, "tileentity_pylon_redwire"); GameRegistry.registerTileEntity(TileEntityStructureMarker.class, "tileentity_structure_marker"); GameRegistry.registerTileEntity(TileEntityMachineMiningDrill.class, "tileentity_mining_drill"); + GameRegistry.registerTileEntity(TileEntityMachineAssembler.class, "tileentity_assembly_machine"); EntityRegistry.registerModEntity(EntityRocket.class, "entity_rocket", 0, this, 250, 1, true); EntityRegistry.registerModEntity(EntityNukeExplosion.class, "entity_nuke_explosion", 1, this, 250, 1, true); diff --git a/com/hbm/render/tileentity/RenderAssembler.java b/com/hbm/render/tileentity/RenderAssembler.java new file mode 100644 index 000000000..7ff182ebd --- /dev/null +++ b/com/hbm/render/tileentity/RenderAssembler.java @@ -0,0 +1,58 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.TileEntityMachineIGenerator; +import com.hbm.tileentity.TileEntityMachineMiningDrill; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; + +public class RenderAssembler extends TileEntitySpecialRenderer { + + private static final ResourceLocation body = new ResourceLocation(/*"/assets/" + */RefStrings.MODID, "models/assembler.obj"); + + private IModelCustom bodyModel; + private ResourceLocation bodyTexture; + + public RenderAssembler() + { + bodyModel = AdvancedModelLoader.loadModel(body); + bodyTexture = new ResourceLocation(RefStrings.MODID, "textures/models/TheGadget3_.png"); + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) + { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glRotatef(180, 0F, 1F, 0F); + switch(tileEntity.getBlockMetadata()) + { + case 2: + GL11.glRotatef(180, 0F, 1F, 0F); + GL11.glTranslated(0.5D, 0.0D, -0.5D); break; + case 4: + GL11.glRotatef(270, 0F, 1F, 0F); + GL11.glTranslated(0.5D, 0.0D, -0.5D); break; + case 3: + GL11.glRotatef(0, 0F, 1F, 0F); + GL11.glTranslated(0.5D, 0.0D, -0.5D); break; + case 5: + GL11.glRotatef(90, 0F, 1F, 0F); + GL11.glTranslated(0.5D, 0.0D, -0.5D); break; + } + + bindTexture(bodyTexture); + + bodyModel.renderAll(); + + GL11.glPopMatrix(); + } +} diff --git a/com/hbm/tileentity/TileEntityMachineAssembler.java b/com/hbm/tileentity/TileEntityMachineAssembler.java new file mode 100644 index 000000000..cbd414202 --- /dev/null +++ b/com/hbm/tileentity/TileEntityMachineAssembler.java @@ -0,0 +1,457 @@ +package com.hbm.tileentity; + +import java.util.List; +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.interfaces.IConsumer; +import com.hbm.inventory.MachineRecipes; +import com.hbm.items.ModItems; +import com.hbm.items.special.ItemBattery; +import com.hbm.items.tool.ItemAssemblyTemplate; +import com.hbm.lib.Library; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.TEDrillPacket; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.tileentity.TileEntityHopper; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.oredict.OreDictionary; + +public class TileEntityMachineAssembler extends TileEntity implements ISidedInventory, IConsumer { + + private ItemStack slots[]; + + public int power; + public static final int maxPower = 100000; + public int progress; + public int maxProgress = 100; + int age = 0; + + Random rand = new Random(); + + private String customName; + + public TileEntityMachineAssembler() { + slots = new ItemStack[18]; + } + + @Override + public int getSizeInventory() { + return slots.length; + } + + @Override + public ItemStack getStackInSlot(int i) { + return slots[i]; + } + + @Override + public ItemStack getStackInSlotOnClosing(int i) { + if(slots[i] != null) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } else { + return null; + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemStack) { + slots[i] = itemStack; + if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) + { + itemStack.stackSize = getInventoryStackLimit(); + } + } + + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.customName : "container.assembler"; + } + + @Override + public boolean hasCustomInventoryName() { + return this.customName != null && this.customName.length() > 0; + } + + public void setCustomName(String name) { + this.customName = name; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) + { + return false; + }else{ + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=128; + } + } + + //You scrubs aren't needed for anything (right now) + @Override + public void openInventory() {} + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + if(i == 0) + if(itemStack.getItem() instanceof ItemBattery) + return true; + + if(i == 1) + return true; + + return false; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + if(slots[i] != null) + { + if(slots[i].stackSize <= j) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } + ItemStack itemStack1 = slots[i].splitStack(j); + if (slots[i].stackSize == 0) + { + slots[i] = null; + } + + return itemStack1; + } else { + return null; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + NBTTagList list = nbt.getTagList("items", 10); + + this.power = nbt.getInteger("powerTime"); + slots = new ItemStack[getSizeInventory()]; + + for(int i = 0; i < list.tagCount(); i++) + { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if(b0 >= 0 && b0 < slots.length) + { + slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("powerTime", power); + NBTTagList list = new NBTTagList(); + + for(int i = 0; i < slots.length; i++) + { + if(slots[i] != null) + { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte)i); + slots[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) + { + return new int[] { 0 }; + } + + @Override + public boolean canInsertItem(int i, ItemStack itemStack, int j) { + return this.isItemValidForSlot(i, itemStack); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return false; + } + + public int getPowerScaled(int i) { + return (power * i) / maxPower; + } + + public int getProgressScaled(int i) { + return (progress * i) / maxProgress; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + power = Library.chargeTEFromItems(slots, 0, power, maxPower); + + if(MachineRecipes.getOutputFromTempate(slots[4]) != null && MachineRecipes.getRecipeFromTempate(slots[4]) != null) { + this.maxProgress = ItemAssemblyTemplate.getProcessTime(slots[4]); + + if(power >= 100 && removeItems(MachineRecipes.getRecipeFromTempate(slots[4]), cloneItemStackProper(slots))) { + + if(slots[5] == null || (slots[5] != null && slots[5].getItem() == MachineRecipes.getOutputFromTempate(slots[4]).copy().getItem()) && slots[5].stackSize + MachineRecipes.getOutputFromTempate(slots[4]).copy().stackSize <= slots[5].getMaxStackSize()) { + progress++; + + if(progress >= maxProgress) { + progress = 0; + if(slots[5] == null) { + slots[5] = MachineRecipes.getOutputFromTempate(slots[4]).copy(); + } else { + slots[5].stackSize += MachineRecipes.getOutputFromTempate(slots[4]).copy().stackSize; + } + + removeItems(MachineRecipes.getRecipeFromTempate(slots[4]), slots); + } + + power -= 100; + } + } + } + + } + + } + + //I can't believe that worked. + public ItemStack[] cloneItemStackProper(ItemStack[] array) { + ItemStack[] stack = new ItemStack[array.length]; + + for(int i = 0; i < array.length; i++) + if(array[i] != null) + stack[i] = array[i].copy(); + else + stack[i] = null; + + return stack; + } + + public boolean tryFillContainer(IInventory inventory, int slot) { + + int size = inventory.getSizeInventory(); + + for(int i = 0; i < size; i++) { + if(inventory.getStackInSlot(i) != null) { + + if(slots[slot] == null) + return false; + + ItemStack sta1 = inventory.getStackInSlot(i).copy(); + ItemStack sta2 = slots[slot].copy(); + if(sta1 != null && sta2 != null) { + sta1.stackSize = 1; + sta2.stackSize = 1; + + if(ItemStack.areItemStacksEqual(sta1, sta2) && ItemStack.areItemStackTagsEqual(sta1, sta2) && inventory.getStackInSlot(i).stackSize < inventory.getStackInSlot(i).getMaxStackSize()) { + slots[slot].stackSize--; + + if(slots[slot].stackSize <= 0) + slots[slot] = null; + + ItemStack sta3 = inventory.getStackInSlot(i).copy(); + sta3.stackSize++; + inventory.setInventorySlotContents(i, sta3); + + return true; + } + } + } + } + for(int i = 0; i < size; i++) { + + if(slots[slot] == null) + return false; + + ItemStack sta2 = slots[slot].copy(); + if(inventory.getStackInSlot(i) == null && sta2 != null) { + sta2.stackSize = 1; + slots[slot].stackSize--; + + if(slots[slot].stackSize <= 0) + slots[slot] = null; + + inventory.setInventorySlotContents(i, sta2); + + return true; + } + } + + return false; + } + + public boolean hasSpace(ItemStack stack) { + + ItemStack st = stack.copy(); + + if(st == null) + return true; + + for(int i = 1; i < 10; i++) { + if(slots[i] == null) + return true; + } + + int size = st.stackSize; + st.stackSize = 1; + + ItemStack[] fakeArray = slots.clone(); + boolean flag = true; + for(int i = 0; i < stack.stackSize; i++) { + if(!canAddItemToArray(st, fakeArray)) + flag = false; + } + + return flag; + } + + public void addItemToInventory(ItemStack stack) { + + ItemStack st = stack.copy(); + + if(st == null) + return; + + int size = st.stackSize; + st.stackSize = 1; + + for(int i = 0; i < size; i++) + canAddItemToArray(st, this.slots); + + } + + public boolean canAddItemToArray(ItemStack stack, ItemStack[] array) { + + ItemStack st = stack.copy(); + + if(st == null) + return true; + + for(int i = 1; i < 10; i++) { + + if(array[i] != null) { + ItemStack sta = array[i].copy(); + + if(sta != null && sta.getItem() == st.getItem() && sta.stackSize < st.getMaxStackSize()) { + array[i].stackSize++; + return true; + } + } + } + + for(int i = 1; i < 10; i++) { + if(array[i] == null) { + array[i] = stack.copy(); + return true; + } + } + + return false; + } + + //boolean true: remove items, boolean false: simulation mode + public boolean removeItems(List stack, ItemStack[] array) { + + if(stack == null) + return false; + + for(int i = 0; i < stack.size(); i++) { + for(int j = 0; j < stack.get(i).stackSize; j++) { + ItemStack sta = stack.get(i).copy(); + sta.stackSize = 1; + + if(!canRemoveItemFromArray(sta, array)) + return false; + } + } + + return true; + + } + + public boolean canRemoveItemFromArray(ItemStack stack, ItemStack[] array) { + + ItemStack st = stack.copy(); + + if(st == null) + return true; + + for(int i = 6; i < 18; i++) { + + if(array[i] != null) { + ItemStack sta = array[i].copy(); + sta.stackSize = 1; + + if(sta != null && sta.isItemEqual(st) && array[i].stackSize > 0) { + array[i].stackSize--; + + if(array[i].stackSize <= 0) + array[i] = null; + + return true; + } + } + } + + return false; + } + + @Override + public void setPower(int i) { + power = i; + + } + + @Override + public int getPower() { + return power; + + } + + @Override + public int getMaxPower() { + return maxPower; + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return TileEntity.INFINITE_EXTENT_AABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 65536.0D; + } +} diff --git a/com/hbm/tileentity/TileEntityMachineMiningDrill.java b/com/hbm/tileentity/TileEntityMachineMiningDrill.java index 282e8f9d7..f3ea27c3c 100644 --- a/com/hbm/tileentity/TileEntityMachineMiningDrill.java +++ b/com/hbm/tileentity/TileEntityMachineMiningDrill.java @@ -576,7 +576,9 @@ public class TileEntityMachineMiningDrill extends TileEntity implements ISidedIn if(!tryDrill(x - 1, y, z - 1)) if(!tryDrill(x, y, z - 1)) if(!tryDrill(x + 1, y, z - 1)) - return false; + + if(!tryDrill(x, y - 1, z)) + return false; return true; } @@ -607,7 +609,9 @@ public class TileEntityMachineMiningDrill extends TileEntity implements ISidedIn if(!tryDrill(x, y, z - 2)) if(!tryDrill(x + 1, y, z - 2)) if(!tryDrill(x + 2, y, z - 1)) - return false; + + if(!tryDrill(x, y - 1, z)) + return false; return true; } @@ -655,7 +659,9 @@ public class TileEntityMachineMiningDrill extends TileEntity implements ISidedIn if(!tryDrill(x + 1, y, z - 3)) if(!tryDrill(x + 2, y, z - 2)) if(!tryDrill(x + 3, y, z - 1)) - return false; + + if(!tryDrill(x, y - 1, z)) + return false; return true; } @@ -736,7 +742,9 @@ public class TileEntityMachineMiningDrill extends TileEntity implements ISidedIn if(!tryDrill(x + 3, y, z - 2)) if(!tryDrill(x + 4, y, z - 2)) if(!tryDrill(x + 4, y, z - 1)) - return false; + + if(!tryDrill(x, y - 1, z)) + return false; return true; }