Compare commits

...

698 Commits

Author SHA1 Message Date
Boblet
6bb6b5426c the ground trembles with my every step 2026-01-23 14:53:39 +01:00
Boblet
492703ab23 amogus 2026-01-23 14:50:29 +01:00
Bob
b4d0122cfc monty python's horrible world of gravity 2026-01-22 21:48:48 +01:00
Boblet
f809843745 calliou is impaled on an asbestos stalagmite and dies 2026-01-22 15:38:17 +01:00
Boblet
6401ffde19 now kiss 2026-01-21 16:27:35 +01:00
Boblet
1aba934d36 e 2026-01-21 13:12:32 +01:00
Boblet
69c1ed01fa the glunch lunch 2026-01-21 13:11:28 +01:00
Boblet
e776b4c8d9 the gloach 2026-01-20 16:56:00 +01:00
HbmMods
6fa00c5771
Merge pull request #2643 from Bufka2011/master
Enhance CI workflow with version update logic
2026-01-20 11:06:19 +01:00
HbmMods
69c1f49f55
Merge pull request #2661 from Voxelstice/oc-comp-fix
OC connection with multiblocks bug fix
2026-01-20 10:33:15 +01:00
HbmMods
ade48e4ac7
Merge pull request #2656 from RayzerHan/master
Update ru_RU lang again
2026-01-20 10:32:18 +01:00
Bob
6c1fd10a50 plushby 2026-01-19 21:23:57 +01:00
Raaaaaaaaaay
a2fd0ea108
ok 2026-01-19 13:50:22 +02:00
Raaaaaaaaaay
33a4b983e5
Компонзит 2026-01-19 13:42:34 +02:00
Raaaaaaaaaay
0d431e387b
ммм 2026-01-19 13:37:10 +02:00
Raaaaaaaaaay
f0a1eaaaff
фикс 2026-01-19 13:36:01 +02:00
Raaaaaaaaaay
165fd062f4
ням 2026-01-18 20:07:30 +02:00
Voxelstice
7b18634b34 here's hoping this doesnt break anything else
OC connection with multiblocks bug fix
2026-01-17 10:42:19 +03:00
Raaaaaaaaaay
99ca4628dc
Kyiv 2026-01-15 21:29:53 +02:00
Raaaaaaaaaay
b892f0cc37
Merge branch 'HbmMods:master' into master 2026-01-15 17:58:02 +02:00
Boblet
7664cacd2f double barrel shaboing hot dog
(frot dog)
2026-01-14 15:54:59 +01:00
Raaaaaaaaaay
e96e821146
next door two 2026-01-14 09:18:38 +02:00
Raaaaaaaaaay
e02e4f6aae
next door 2026-01-14 09:15:59 +02:00
Raaaaaaaaaay
c1464f2881
Update 2026-01-14 02:01:10 +02:00
Raaaaaaaaaay
91dd4cc218
Sometimes I think the wind blows well, but the robot is a slut 2026-01-13 18:56:03 +02:00
Raaaaaaaaaay
6cadca0d89
People are idiots, and that's a fact. 2026-01-13 18:53:52 +02:00
HbmMods
5c9d71c626
Merge pull request #2649 from RayzerHan/master
Update RU_ru lang
2026-01-13 15:14:17 +01:00
Raaaaaaaaaay
bd03028170
фак 2026-01-13 16:06:08 +02:00
HbmMods
67aee6a2e0
Merge pull request #2648 from Vaern/muzzle-flashes
Visible third-person muzzle flashes from other players +self, skeleguns
2026-01-13 15:04:52 +01:00
Vaern
223fe240c1 remove redundant TODO 2026-01-12 23:55:29 -08:00
Vaern
5cb013d545 extended timeout duration
the highest duration for muzzle flashes is 150?, not under 100, so let's be safe
2026-01-12 23:39:50 -08:00
Vaern
82293e46cd copypaste hell
fixed tick issues in eventHandler, added packets to orchestra + third person rendering for every gun with built-in muzzle/laser flashes, and softened playAnimation so skeleguns use orchestra/muzzle flashes. akimbos show both firing, probably won't be changed
2026-01-12 23:33:05 -08:00
Raaaaaaaaaay
2e7af7058c
Merge branch 'HbmMods:master' into master 2026-01-12 19:58:03 +02:00
Raaaaaaaaaay
cc816b40e0
Очень познавательно, милая пони 2026-01-12 19:55:17 +02:00
Boblet
64fc72e18a margret thatcher is dead 2026-01-12 16:45:09 +01:00
Boblet
76c6222f45 post merge cleanup 2026-01-12 10:30:50 +01:00
HbmMods
2f8b0dde49
Merge pull request #2607 from WolfEclipses/METADATA
Rad Absorbers Metadata (Done now)
2026-01-12 10:19:08 +01:00
Vaern
712ae952df we ain't even done wit this we #KillingOurselves
superficial dedicated + integrated server testing worked. ran into a weird race condition on the former, though, but i doubt that's from anythng here
2026-01-11 18:17:36 -08:00
Bob
b2df165b4b the spingus 2026-01-11 22:24:04 +01:00
Wolf
90e148e022 I think I finally fixed this shit 2026-01-11 16:18:37 -05:00
WolfEclipses
52440fca2f
Merge branch 'HbmMods:master' into METADATA 2026-01-11 15:58:45 -05:00
Wolf
292b989e09 Testing??? 2026-01-11 15:56:24 -05:00
Raaaaaaaaaay
b0e0b54def
бля 2026-01-11 22:28:00 +02:00
HbmMods
51b758e103
Merge pull request #2645 from RayzerHan/master
update RU_ru lang
2026-01-11 21:00:24 +01:00
Raaaaaaaaaay
d25cef888d
Merge branch 'HbmMods:master' into master 2026-01-11 21:51:52 +02:00
Raaaaaaaaaay
62ce75f458
battery 2026-01-11 21:45:35 +02:00
Bufka2011
c146829bf4
Merge branch 'HbmMods:master' into master 2026-01-11 12:24:43 -07:00
Bufka2011
b60cf07e98
Enhance CI workflow with version update logic
Added steps to calculate days since 10/10/10 and update version files accordingly.
2026-01-11 12:24:11 -07:00
HbmMods
0e30985963
Merge pull request #2639 from ranch21/calc
calculator history
2026-01-11 20:23:09 +01:00
HbmMods
a491b16dfe
Merge pull request #2641 from sunryze-git/improved-pneumatics
improved pneumatics throughput
2026-01-11 20:22:26 +01:00
Bob
026c0d074e mirror fix 2026-01-11 20:21:02 +01:00
sunryze-git
6cc60c0234 pneumatic throughput now doesnt suck cuz we dont give up instantly 2026-01-11 14:17:00 -05:00
WolfEclipses
1f17af27f7
Merge branch 'master' into METADATA 2026-01-11 13:32:05 -05:00
HbmMods
8aa9ff2895
Merge pull request #2630 from Voxelstice/oc-bat-rework
OC compat for new batteries
2026-01-11 19:20:28 +01:00
HbmMods
5c0ff2b603
Merge branch 'master' into oc-bat-rework 2026-01-11 19:20:18 +01:00
HbmMods
3c461313bc
Merge pull request #2636 from RayzerHan/master
update RU_ru lang
2026-01-11 19:18:39 +01:00
Bob
71fb9a814d he rotates 2026-01-11 19:14:08 +01:00
ranch
27e4cd32aa gui design is my passion 2026-01-10 17:38:05 -06:00
Bob
8bdce3a4b3 been thinking about that yaoi 2026-01-10 21:31:09 +01:00
Bob
4bfce2ba92 Auto stash before merge of "master" and "origin/master" 2026-01-10 14:39:59 +01:00
WolfEclipses
5ec68643f8
Merge branch 'master' into METADATA 2026-01-09 20:52:29 -05:00
Voxelstice
65ea177ac0 consider not forgetting. thanks.
priority is outputted correctly now
2026-01-09 23:05:21 +03:00
Voxelstice
be93b9cc8c waiter! waiter! more lead acid batteries please!
adds OC compat to new battery blocks
2026-01-09 23:01:38 +03:00
Raaaaaaaaaay
439d5e52b8
электромассивы 2026-01-09 16:43:32 +02:00
Raaaaaaaaaay
72500ed749
термоядерный термоядерный 2026-01-09 16:28:44 +02:00
Boblet
f17556a0d6 fentanyl 2026-01-09 14:55:58 +01:00
HbmMods
6a732fadde
Merge pull request #2624 from ranch21/better-bars
Better electric FSB hud bars
2026-01-09 10:07:07 +01:00
HbmMods
bcb2f1a198
Merge pull request #2625 from MellowArpeggiation/msu-ui
in world UI for mass storage units
2026-01-09 10:06:37 +01:00
Boblet
79351bbd0a do you come from a vegetmite sandwich? 2026-01-09 10:05:56 +01:00
George Paton
a6087b4bef vanilla slimes also leak state who'da'fucken'thunk it 2026-01-09 14:48:52 +11:00
George Paton
9f26d04f7a buzzer beater functionality: render 3D items with fancy graphics enabled! 2026-01-09 14:08:07 +11:00
Boblet
84326bedb4 bals 2026-01-08 17:43:07 +01:00
George Paton
a0a7e000d4 drop correct meta on breaking 2026-01-08 22:26:26 +11:00
George Paton
b5b4a537c5 what the fuck is this baby doing mixed in with my bathwater 2026-01-08 22:17:25 +11:00
George Paton
7757e3cb53 add a fill progress bar 2026-01-08 22:07:21 +11:00
George Paton
b77633b152 draw the rest of the owl 2026-01-08 21:01:57 +11:00
Boblet
9ef7668702 FUCK 2026-01-08 08:52:22 +01:00
ranch
4998cd13c2 we do a little cleanup 2026-01-08 01:19:32 -06:00
ranch
1aaf568338 better electric FSB hud 2026-01-08 01:01:27 -06:00
George Paton
18a4d7a25a basic rendering of items inside MSUs (on the north face only atm) complete 2026-01-08 15:32:12 +11:00
Boblet
2b9d43891a dance the safety dance 2026-01-07 16:44:15 +01:00
HbmMods
0197ee79a7
Merge pull request #2617 from RayzerHan/master
update RU_ru lang
2026-01-07 10:52:59 +01:00
HbmMods
6297bbd6a8
Merge pull request #2618 from NarekoMichigami810/master
zh_CN update
2026-01-07 10:51:45 +01:00
道神 馴子
ad9130079e
Rape my brain 2026-01-07 17:41:15 +08:00
道神 馴子
7a39fd778f
i cum on my face 2026-01-07 17:28:48 +08:00
道神 馴子
ee0149c133
姗姗来迟 2026-01-07 16:34:31 +08:00
Raaaaaaaaaay
ee643f4407
Merge branch 'HbmMods:master' into master 2026-01-06 22:26:01 +02:00
Raaaaaaaaaay
218ad3e59e
кумавы 2026-01-06 22:24:38 +02:00
Bob
4032cc277a he thicc 2026-01-06 21:21:06 +01:00
Raaaaaaaaaay
4b4868e102
kimi 2026-01-06 22:17:28 +02:00
Raaaaaaaaaay
83d4505021
и танцевала рыбка с раком 2026-01-06 21:00:40 +02:00
Raaaaaaaaaay
0e063bbd72
up up up 2026-01-06 20:50:33 +02:00
Raaaaaaaaaay
29960cdc0a
Merge branch 'HbmMods:master' into master 2026-01-06 20:42:21 +02:00
HbmMods
d718b58269
Merge pull request #2605 from Toshayo/master
Fluid valve with counter for simpler automation
2026-01-06 19:38:13 +01:00
HbmMods
6141d1d24e
Merge branch 'master' into master 2026-01-06 19:38:02 +01:00
Bob
8619c8e67d he big 2026-01-06 19:35:39 +01:00
Raaaaaaaaaay
9c89902e56
aoh 2026-01-04 21:12:53 +02:00
Bob
b20d5f46b2 more caching because sure 2026-01-03 12:22:56 +01:00
WolfEclipses
52ae974f51
Merge branch 'master' into METADATA 2026-01-02 20:13:04 -05:00
Bob
a7afacfaf2 flavor town 2026-01-02 11:20:15 +01:00
Wolf
f089578ba7 Got rid of functionality for legacy rad absorber 2026-01-01 19:55:49 -05:00
Wolf
1e4346a54b Fixed redundant functions (there were more than I thought) xd 2026-01-01 19:40:37 -05:00
WolfEclipses
a1b83b4a67
Merge branch 'master' into METADATA 2026-01-01 18:38:27 -05:00
Raaaaaaaaaay
4e7bbda689
ня 2026-01-01 17:59:35 +02:00
HbmMods
539225cf78
Merge pull request #2608 from WolfEclipses/WATER
Infinite Water tank Recipe
2026-01-01 14:56:07 +01:00
HbmMods
195cf193c7
Merge pull request #2613 from WolfEclipses/OilQMAW
QMAW Page for crude oil
2026-01-01 14:55:47 +01:00
HbmMods
fd348a40e7
Merge pull request #2614 from PewPewCricket/master
Update PWR OpenComputers Compat
2026-01-01 14:54:26 +01:00
HbmMods
6964b4ec9d
Merge pull request #2606 from Goaty1208/master
mhmhmgmg pizza
2026-01-01 14:52:39 +01:00
PewPewCricket
1418a9be87
Merge branch 'HbmMods:master' into master 2025-12-31 19:30:45 -06:00
Bob
f87b37d7e3 well, too bad 2025-12-31 15:38:24 +01:00
PewPewCricket
871de4ae47 fix PWRangler crashing with PWRs using heat sinks 2025-12-30 18:40:08 -06:00
PewPewCricket
89b1cb1de0 allow reading core heat capacity using OC with PWRs. 2025-12-30 17:50:38 -06:00
Wolf
5dc1ee440b Forgot to account for all processing methods, need to expand in their own pages 2025-12-29 19:33:08 -05:00
Wolf
e52f70b340 QMAW Page for crude oil 2025-12-29 19:09:44 -05:00
Goaty1208
e629802bcb Cruciblelicious 2025-12-28 11:42:38 +01:00
Wolf
59bccc9be3 Why am I being asked for this so often 2025-12-27 18:46:01 -05:00
Wolf
838bcb8faa Had them swapped up somehow xd 2025-12-27 18:18:48 -05:00
Goaty1208
5100384e18 mhmhmgmg pizza
Fixed translations
2025-12-27 23:40:46 +01:00
Wolf
a8b046f46b Bringing up to date because yeah 2025-12-27 17:19:45 -05:00
WolfEclipses
6b87447ca1
Merge branch 'master' into METADATA 2025-12-27 14:01:57 -05:00
Toshayo
e601e79ad3
Updated changelog 2025-12-26 15:05:47 +01:00
Toshayo
a944c28dd4
Added fluid valve with counter 2025-12-26 14:14:20 +01:00
Bob
de2a11389c i like eating lead-sulfur batteries 2025-12-23 20:51:55 +01:00
Raaaaaaaaaay
b88d6f6cd3
aoh 2025-12-20 15:48:05 +02:00
Boblet
ef2b20d357 succumb 2025-12-17 14:55:50 +01:00
Boblet
f82a606b66 shit yourself 2025-12-16 16:16:19 +01:00
Boblet
c639be1429 67 mango mustard kendrick still water dubai labubu chocolate tralalero
please someone euthanize me
2025-12-16 15:22:51 +01:00
HbmMods
76e6e7852b
Merge pull request #2588 from RayzerHan/master
Update Ru_lang
2025-12-15 15:33:21 +01:00
Boblet
82f175105c bap 2025-12-15 15:33:10 +01:00
Boblet
fa12cfeec1 ow 2025-12-15 11:03:05 +01:00
Raaaaaaaaaay
7ee52ac56c
Merge branch 'HbmMods:master' into master 2025-12-14 22:37:42 +02:00
Bob
0fe125251b nobody saw a thing 2025-12-14 21:34:33 +01:00
Bob
5bcfd368fc yeag 2025-12-14 21:17:34 +01:00
Raaaaaaaaaay
154503a95d
руда 2025-12-13 00:04:57 +02:00
Raaaaaaaaaay
54cbb495cc
рыбка 2025-12-13 00:04:23 +02:00
Boblet
1f5fc1926c spoingus 2025-12-12 13:34:32 +01:00
Boblet
1e3e5f38d4 all our food keeps blowing up 2025-12-11 16:34:57 +01:00
Boblet
ec0613b9cf spingus 2025-12-10 16:32:34 +01:00
HbmMods
7204b3662c
Merge pull request #2581 from NarekoMichigami810/master
zh_CN update
2025-12-10 08:06:42 +01:00
Boblet
d5ac6fe239 death 2025-12-09 16:29:37 +01:00
Boblet
c916ad73e1 let the carnage begin 2025-12-09 15:27:24 +01:00
WolfEclipses
bce98561d3 Added back old ones, changed lang to OLD for them 2025-12-09 08:31:52 -05:00
道神 馴子
7129d5ee7c
沉迷勒布朗 2025-12-09 21:24:17 +08:00
WolfEclipses
003afa4071 Forgot to remove this from making the name work xd 2025-12-09 07:46:27 -05:00
WolfEclipses
7f963bdb6f I FORGOT TO ACCOUNT FOR OTHER LANGUAGES T_T 2025-12-08 22:44:49 -05:00
WolfEclipses
96298a5c31 I think this works :P we will find out that Im an
idiot in like 30seconds
2025-12-08 22:20:07 -05:00
Raaaaaaaaaay
540900d0f5
up amogus 2025-12-08 22:58:56 +02:00
Raaaaaaaaaay
10585527ae
Merge branch 'HbmMods:master' into master 2025-12-08 22:55:35 +02:00
Bob
d02b328c27 pain 2025-12-08 18:14:16 +01:00
Raaaaaaaaaay
510923d14a
beton 2025-12-08 17:31:43 +02:00
Raaaaaaaaaay
8b5cf6f321
Merge branch 'HbmMods:master' into master 2025-12-08 17:31:04 +02:00
Bob
39aa0de008 load of crap that doesn't work 2025-12-07 22:01:33 +01:00
Raaaaaaaaaay
bd17238c1c
fix recipe 2025-12-06 20:22:24 +02:00
Raaaaaaaaaay
63146394ac
Merge branch 'HbmMods:master' into master 2025-12-06 16:06:08 +02:00
Raaaaaaaaaay
7867d6c6bd
fix 2025-12-06 12:12:23 +02:00
Boblet
55b4fec00b it wasn't for a lack of trying 2025-12-05 14:38:13 +01:00
Boblet
2430fec8c6 ough 2025-12-04 15:55:00 +01:00
Raaaaaaaaaay
6cf88c673f
ой 2025-12-04 11:05:32 +02:00
Boblet
308e559229 spungus 2025-12-03 15:34:29 +01:00
Boblet
1fcfa136be perpetual agony mechanism 2025-12-01 16:54:04 +01:00
HbmMods
03e7db5d92
Merge pull request #2563 from MellowArpeggiation/structure-port
Structure Block!
2025-12-01 10:09:11 +01:00
Raaaaaaaaaay
a94005fc1f
Merge branch 'HbmMods:master' into master 2025-12-01 10:34:49 +02:00
Raaaaaaaaaay
548ede7f89
рыбки 2025-12-01 10:34:42 +02:00
Boblet
0e4ef1c45c the nightmare engine 2025-12-01 09:29:47 +01:00
George Paton
42ab196b06 structure block! 2025-12-01 13:36:31 +11:00
George Paton
a32b04ed14 all new NBTStructureLib features up to structure block (coming next) 2025-12-01 12:05:56 +11:00
HbmMods
2f841940b8
Merge pull request #2560 from RayzerHan/master
Update RU_ru lang/Qmaw
2025-11-30 22:48:16 +01:00
Bob
4141b424a9 flixes 2025-11-30 22:46:20 +01:00
Raaaaaaaaaay
afb44cd3fd
пятак гони на стол 2025-11-30 17:52:50 +02:00
Raaaaaaaaaay
096f77f3ab
танцуем с форелью 2025-11-30 17:37:55 +02:00
Raaaaaaaaaay
e2bb1e00c9
Витя станцую брейкданс на раскалённом пару 2025-11-30 17:32:28 +02:00
Raaaaaaaaaay
b43577c6cd
fix 2025-11-30 13:53:30 +02:00
Raaaaaaaaaay
818f39c1c5
fix 2025-11-29 23:46:08 +02:00
Raaaaaaaaaay
d71fee617c
ох мда 2025-11-29 23:40:32 +02:00
Raaaaaaaaaay
aa7aff5150
update QMAW, ох этот урановый концентрат 2025-11-29 23:35:32 +02:00
Raaaaaaaaaay
f6a3e44271
fix 2025-11-29 23:25:09 +02:00
Raaaaaaaaaay
6ad72b293d
update 2025-11-28 17:50:44 +02:00
Raaaaaaaaaay
bce94d0957
Merge branch 'HbmMods:master' into master 2025-11-28 17:40:11 +02:00
Boblet
3101c9b3b9 compost 2025-11-28 14:10:17 +01:00
Raaaaaaaaaay
99b19cd022
Merge branch 'HbmMods:master' into master 2025-11-28 13:08:58 +02:00
Bob
f50e0ee67c sound fix 2025-11-27 19:34:55 +01:00
HbmMods
a8c6ee4ba4
Merge pull request #2553 from Voxelstice/oc-fusion-pa
OC compat for new fusion reactor and particle accelerator
2025-11-27 16:46:18 +01:00
Voxelstice
9ab73e382f here it goes again
adds OC compat to the new fusion reactor and the particle accelerator
2025-11-27 18:17:51 +03:00
Boblet
3bdd7b4c94 evil mechanism 2025-11-27 10:51:48 +01:00
Boblet
4322892abb fugorg contraption 2025-11-26 15:50:45 +01:00
Boblet
a4a08aa9cd oughe, 2025-11-26 11:09:29 +01:00
Raaaaaaaaaay
cbff57375c
Merge branch 'HbmMods:master' into master 2025-11-26 11:00:14 +02:00
Boblet
879d9d1f8a que? 2025-11-26 08:11:55 +01:00
Raaaaaaaaaay
b9271cc81d
Merge branch 'HbmMods:master' into master 2025-11-25 16:02:14 +02:00
Boblet
fc967e8878 they took my arms 2025-11-25 13:42:02 +01:00
Boblet
7afd9901d3 no more rainbows. we homophobic now. 2025-11-25 12:49:03 +01:00
HbmMods
f91718111d
Merge pull request #2546 from NarekoMichigami810/master
zh_CN update
2025-11-25 08:29:47 +01:00
Raaaaaaaaaay
c7f5a14e42
Merge branch 'HbmMods:master' into master 2025-11-24 14:46:34 +02:00
道神 馴子
dacddfb3a1
cookie 2025-11-24 20:27:44 +08:00
Bob
4fe5128547 fusion rework in a week 2025-11-23 21:19:35 +01:00
Raaaaaaaaaay
e1cb8d00a7
Merge branch 'HbmMods:master' into master 2025-11-23 14:03:30 +02:00
Bob
2b056a8ae2 fusion breeder port fix 2025-11-23 12:47:51 +01:00
Raaaaaaaaaay
14490f9392
Merge branch 'HbmMods:master' into master 2025-11-23 11:56:39 +02:00
Bob
9aa3ac9978 plasma sparkle 2025-11-22 22:16:16 +01:00
Raaaaaaaaaay
4233a36348 fix qmaw and new ru 2025-11-21 17:47:46 +00:00
Boblet
170f155bc7 more plasmas because sure 2025-11-21 13:49:20 +01:00
Boblet
6818121b9a fusion QMAW 2025-11-21 11:24:45 +01:00
Bob
e5b93da9e4 old man yaoi 2025-11-20 21:43:57 +01:00
Boblet
71b40de7a7 the smooth taste of NEO, wake up and taste the PAIN 2025-11-20 15:59:34 +01:00
Bob
4a3db6adba magneto-plasma-sludge physics 2025-11-19 23:41:21 +01:00
Boblet
56a17c8856 NAEDOCYTE BREEDA 2025-11-19 16:57:04 +01:00
Boblet
2b5d23fbc1 blibble futuristics' greatest invention: the fugorg mechanism 2025-11-18 15:20:28 +01:00
Bob
c33d717631 the lads 2025-11-17 22:19:49 +01:00
Boblet
2e00964514 ignition 2025-11-17 16:10:19 +01:00
HbmMods
f28ebbea5c
Merge pull request #2537 from Lazzzycatwastaken/master
Fix for floating superflat structures
2025-11-17 08:24:55 +01:00
HbmMods
1d559fbfe0
Merge pull request #2538 from RayzerHan/master
ru_RU.lang and RU QMAW update
2025-11-17 08:24:21 +01:00
Bob
732f6552b6 just fucking nodespace everything at this point 2025-11-16 22:58:50 +01:00
Raaaaaaaaaay
e16a60d713
oh 2025-11-16 18:33:39 +02:00
Raaaaaaaaaay
6c4b58a192 fix 2 2025-11-16 16:30:54 +00:00
Lazzzycat
938f99318f azure latch time 2025-11-16 17:11:59 +01:00
Raaaaaaaaaay
c4c873767f
Fix 2025-11-16 18:03:58 +02:00
Raaaaaaaaaay
4b15267d4f
up 2025-11-16 17:55:05 +02:00
Raaaaaaaaaay
51380e49a7
wow 2025-11-16 17:53:10 +02:00
Raaaaaaaaaay
94db51bb37
Add files via upload
Ohh
2025-11-16 17:52:10 +02:00
Lazzzycat
84f1434131 i FUCKING HATE intellishit fuck this stupidslopware program and fuck jetbrains they can give me some brain 2025-11-16 16:26:29 +01:00
Bob
1cb8ca18cf yeah that thing too 2025-11-15 23:01:32 +01:00
Bob
de40ff388a see, you just gotta put your whole pussy into it 2025-11-15 17:19:34 +01:00
HbmMods
8ffbb512c1
Merge pull request #2536 from MellowArpeggiation/master
I CAN GO FASTER I CAN GO FASTER I CAN GO FASTER HRRRRRRRAAAAAAAAAAAA
2025-11-15 11:29:55 +01:00
George Paton
9a2a79c4c2 I CAN GO FASTER I CAN GO FASTER I CAN GO FASTER HRRRRRRRAAAAAAAAAAAA 2025-11-15 15:41:12 +11:00
Boblet
13cf418c16 mhdt 2025-11-14 15:18:07 +01:00
Bob
bb693a729d him 2025-11-13 22:19:02 +01:00
Boblet
c6a7d2aba4 my bals 2025-11-13 16:43:41 +01:00
Boblet
0c0a3c952b big chungus for playstation 3 2025-11-12 16:10:53 +01:00
HbmMods
b5fb8ae5be
Merge pull request #2530 from MellowArpeggiation/master
slag ingot slag ingot
2025-11-12 07:59:33 +01:00
George Paton
0a60e10827 remove unused imports 2025-11-12 10:05:50 +11:00
George Paton
85a0373675 fuck my chungus wife 2025-11-12 10:03:34 +11:00
HbmMods
6b30ba7d76
Merge pull request #2528 from NarekoMichigami810/master
zh_CN update
2025-11-11 19:05:21 +01:00
Boblet
f1cfe03bf3 when all of a sudden - italians 2025-11-11 16:44:06 +01:00
道神 馴子
ded4c9c53a
boy next door 2025-11-11 21:40:44 +08:00
HbmMods
0194c0d2a9
Merge pull request #2527 from sodlier/master
Fix README.md links
2025-11-11 08:04:09 +01:00
sodlier
97349a1df5
Merge pull request #1 from sodlier/readme-fix
Fix links in README.md
2025-11-10 20:14:04 -03:00
sodlier
991e3ffa1d
Fix links in README.md
Updated CurseForge link and Adoptium JDK8 download link in README.md file.

anything to put my name in the contributors tab
2025-11-10 20:09:21 -03:00
Bob
58c76bdd55 eeeeeeeeeeeeeeeeeeeeee 2025-11-10 22:07:16 +01:00
HbmMods
ab48d52265
Merge pull request #2525 from BallOfEnergy1/master
Tiny changes
2025-11-10 16:07:16 +01:00
HbmMods
eaf0cfa24a
Merge pull request #2521 from mikkerlo/push-tumznvpzvzqq
Stop mining laser if redstone is supplied.
2025-11-10 16:06:52 +01:00
Boblet
f7d2038f7e some AStack crap, fusion torus struct block 2025-11-10 15:37:35 +01:00
BallOfEnergy
ada5ccbf77
github what made you think i wanted to commit only the additions??? 2025-11-09 22:51:21 -06:00
BallOfEnergy
252659bdf0
My life is a living hell, and this will make it significantly less horrible. 2025-11-09 22:45:00 -06:00
Boblet
bc1073f734 donuts 2025-11-07 14:44:52 +01:00
Bob
9386e9d186 ough part 23 2025-11-06 22:16:08 +01:00
Boblet
a8c24cf76a glontch 2025-11-06 15:39:45 +01:00
Mikhail Semenov
6e7be25614 Stop mining laser if redstone is supplied. 2025-11-06 07:07:13 +01:00
Boblet
8b88d0f439 demoman TF2 2025-11-05 16:54:03 +01:00
Boblet
82185aa9ca what if you wanted to go to heaven, but god said "ough," 2025-11-04 16:18:12 +01:00
Boblet
b2d52e8cfa you can now cut off big man johnson's johnson 2025-11-03 16:34:31 +01:00
Bob
b278d27b9b malicious gigglefish from the silly dimension 2025-11-02 18:43:12 +01:00
Boblet
036c220317 RoR can have QMAW as a treat 2025-10-31 14:52:28 +01:00
HbmMods
a3fbb711f0
Merge pull request #2513 from MellowArpeggiation/master
fix crash in Highlands mod due to it using a deprecated biome hook
2025-10-31 09:07:59 +01:00
George Paton
09dd5e37b5 nodespace foundry channels! (also fix arc furnace only accepting one stack from IO port if it triggers it to close) 2025-10-31 14:33:09 +11:00
George Paton
176a2e58ee fix crash in highlands mod due to it using a deprecated biome hook 2025-10-31 13:00:40 +11:00
Boblet
18dabf7e8c go go gadget ovarial torsion 2025-10-30 16:40:58 +01:00
HbmMods
113a800270
Merge pull request #2509 from t3435ryt/master
Rail block harvest tools and levels
2025-10-30 10:15:56 +01:00
t3435ryt
311a9d1a31
Merge branch 'HbmMods:master' into master 2025-10-29 13:07:49 -04:00
t3435ryt
b6c60f5997 For a number of years now, work has been proceeding in order to bring perfection to the crudely conceived idea of a transmission that would not only supply inverse reactive current for use in unilateral phase detractors, but would also be capable of automatically synchronizing cardinal grammeters. Such an instrument is the turbo encabulator.
Now basically the only new principle involved is that instead of power being generated by the relative motion of conductors and fluxes, it is produced by the modial interaction of magneto-reluctance and capacitive diractance.

The original machine had a base plate of pre-famulated amulite surmounted by a malleable logarithmic casing in such a way that the two spurving bearings were in a direct line with the panametric fan. The latter consisted simply of six hydrocoptic marzlevanes, so fitted to the ambifacient lunar waneshaft that side fumbling was effectively prevented.

The main winding was of the normal lotus-o-delta type placed in panendermic semi-boloid slots of the stator, every seventh conductor being connected by a non-reversible tremie pipe to the differential girdle spring on the “up” end of the grammeters.

The turbo-encabulator has now reached a high level of development, and it’s being successfully used in the operation of novertrunnions. Moreover, whenever a forescent skor motion is required, it may also be employed in conjunction with a drawn reciprocation dingle arm, to reduce sinusoidal repleneration.
2025-10-29 13:06:38 -04:00
Bob
76d4a4a453 you can have like half a UV 2025-10-28 22:18:20 +01:00
HbmMods
0a6bddc83d
Merge pull request #2507 from mikkerlo/push-zkltxruskxvq
Change Builders Jetpack shift space behavior
2025-10-28 14:19:56 +01:00
Mikhail Semenov
efc5a88928 Change Builders Jetpack shift space behavior
Currently, pressing Shift+Space causes the jetpack to ascend, which I believe is unintentional.
This change makes that key combination do nothing.
2025-10-28 00:05:36 +01:00
Boblet
02ee44e1ce boner 2025-10-27 16:58:21 +01:00
HbmMods
9e5c4e4a8e
Merge pull request #2505 from MellowArpeggiation/boxcable
I've lost count of the number of times I've done this
2025-10-27 09:44:27 +01:00
George Paton
14d79d426c FUCK 2025-10-27 19:36:25 +11:00
HbmMods
03f8b2d80a
Merge pull request #2504 from MellowArpeggiation/boxcable
Boxcables!
2025-10-27 08:25:32 +01:00
George Paton
7161a1ef73 improve junction connections and add better textures 2025-10-27 16:35:36 +11:00
George Paton
2833d58e84 adjust cable hitboxes and make them look more like red copper 2025-10-27 14:09:04 +11:00
George Paton
6eeefc23b4 add OC support to PA dipoles 2025-10-27 13:51:26 +11:00
t3435ryt
9ce0c0ec39 For a number of years now, work has been proceeding in order to bring perfection to the crudely conceived idea of a transmission that would not only supply inverse reactive current for use in unilateral phase detractors, but would also be capable of automatically synchronizing cardinal grammeters. Such an instrument is the turbo encabulator.
Now basically the only new principle involved is that instead of power being generated by the relative motion of conductors and fluxes, it is produced by the modial interaction of magneto-reluctance and capacitive diractance.

The original machine had a base plate of pre-famulated amulite surmounted by a malleable logarithmic casing in such a way that the two spurving bearings were in a direct line with the panametric fan. The latter consisted simply of six hydrocoptic marzlevanes, so fitted to the ambifacient lunar waneshaft that side fumbling was effectively prevented.

The main winding was of the normal lotus-o-delta type placed in panendermic semi-boloid slots of the stator, every seventh conductor being connected by a non-reversible tremie pipe to the differential girdle spring on the “up” end of the grammeters.

The turbo-encabulator has now reached a high level of development, and it’s being successfully used in the operation of novertrunnions. Moreover, whenever a forescent skor motion is required, it may also be employed in conjunction with a drawn reciprocation dingle arm, to reduce sinusoidal repleneration.
2025-10-26 22:05:46 -04:00
George Paton
f9baf87289 fix PA dipole max speed penalty applying to particles that aren't turning 2025-10-27 12:42:13 +11:00
George Paton
bff3e15fb3 boxcable recipe (uses ingots for now) 2025-10-27 12:41:24 +11:00
George Paton
f297d4f856 what the fuc kis a boxcable 2025-10-27 12:30:17 +11:00
Bob
3b55d26e17 he sings 2025-10-24 22:05:04 +02:00
Boblet
dfd1aafb89 compressor QMAW 2025-10-24 11:13:49 +02:00
Boblet
75adc232f7 particle accelerator QMAW 2025-10-23 15:12:10 +02:00
HbmMods
d6f957f975
Merge pull request #2491 from mikkerlo/master
Add NEI overlay functionality so recipe on anvil can be selected via NEI.
2025-10-23 12:03:42 +02:00
Boblet
f9baf88f3c cleanup 2025-10-23 12:02:55 +02:00
HbmMods
b3aa9ab637
Merge pull request #2483 from DangerousMilk/Meteorite-Tweaks
Meteor Improvements
2025-10-23 11:55:37 +02:00
DangerousMilk
c8a0b7f89a Fixed stopping the meteor flying sound without ever initializing it. Fixed meteors destroying bedrock. Added a hardness limit to which blocks that can be replaced. 2025-10-22 21:19:22 +02:00
DangerousMilk
193f011619 Remove vlc-log 2025-10-22 20:36:38 +02:00
DangerousMilk
f2e733679c Simplified block clearing and decoration. 2025-10-22 20:36:38 +02:00
DangerousMilk
2f7c013423 Cleanup. 2025-10-22 20:36:38 +02:00
DangerousMilk
5a987621a5 Added impact crater decorations. Meteors now go into the ground on impact. Refactored some functions. 2025-10-22 20:36:37 +02:00
DangerousMilk
e7b3dff934 Fixed flySound NullPointerException. 2025-10-22 20:36:37 +02:00
DangerousMilk
51b1f3e46d Fixed the short 'blip' of the fly sound being player at the start. 2025-10-22 20:36:37 +02:00
DangerousMilk
c3c0be94e3 Made the destruction of weak blocks safe. More sound tweaks 2025-10-22 20:36:37 +02:00
DangerousMilk
f87a23d494 Deleted vlc-log.txt. 2025-10-22 20:36:37 +02:00
DangerousMilk
59ace7eaf5 Added meteorite falling sound. 2025-10-22 20:36:37 +02:00
DangerousMilk
bd8ed4920d Meteorites now break leaves and logs before landing. Made explosions fit the meteor size more. 2025-10-22 20:36:37 +02:00
Boblet
72957ef167 speedrun 2025-10-22 15:41:26 +02:00
HbmMods
b3b05d9208
Merge pull request #2492 from NarekoMichigami810/master
zh_CN update
2025-10-22 14:43:53 +02:00
道神 馴子
2d593dbeb3
Masturbate 2025-10-22 19:27:15 +08:00
Bob
cde2d39631 i'm creekflow (crashes into a mcdonalds drive thru) 2025-10-21 23:09:30 +02:00
HbmMods
38cd74536d
Merge pull request #2478 from Fyrstikkeske/master
Retain unused progress for the next craft on the blast furnace
2025-10-21 22:06:15 +02:00
Mikhail Semenov
e16be434f5 Add NEI overlay functionality so recipe on anvil can be selected via NEI.
This will allow to click plus-sign in NEI and NEI will select recipe on Anvil automatically.
2025-10-21 21:56:48 +02:00
Bob
3bf9ab1570 pneumonia 2025-10-21 21:55:14 +02:00
Boblet
bbe41c02a7 i forgor 2025-10-21 16:27:50 +02:00
Boblet
10cf45b452 "release today" and other jokes to tell yourself, volume IV 2025-10-20 16:59:54 +02:00
Boblet
907d389b43 ey jimmy, gimme a weapon mod with NOTHIN'
nuttin'??
2025-10-17 15:18:11 +02:00
Bob
ec076fb97a now with sound 2025-10-16 23:51:35 +02:00
Boblet
12e8da8750 eggplant emoji, droplets emoji, weary face emoji 2025-10-16 15:47:40 +02:00
Boblet
4d6a92e015 i think i may have creeked my flow 2025-10-15 15:13:59 +02:00
Boblet
5fd64f5d8f the thing, device 2025-10-14 16:50:39 +02:00
Boblet
fe38e61ba4 drilldo 2025-10-13 16:47:39 +02:00
Bob
db9b0501d5 conveyor stuff, yet more drill crap 2025-10-12 21:42:18 +02:00
Boblet
40a14fb440 automatic prostate exam device 2025-10-10 14:56:28 +02:00
Fyrstikkeske
6f7a23d8cc Retain unused progress for the next craft
fixes some alignment issues when minmaxxing the blast furnace.
2025-10-10 00:35:13 +02:00
Boblet
db3f58b4cd just throw a continental breakfast at my face 2025-10-09 16:57:31 +02:00
Bob
a0670eb700 anchor deez nuts ha gotem 2025-10-08 22:59:28 +02:00
Boblet
6304df71dd more plumbing, get your free toilet now 2025-10-08 16:58:39 +02:00
HbmMods
d1c5355362
Merge pull request #2475 from MellowArpeggiation/bubble-butt
Remove all remaining non-structure worldgen cascades
2025-10-08 10:28:38 +02:00
Boblet
801fdc146c scrungus 2025-10-07 16:30:21 +02:00
George Paton
7d6fea7646 fix semi-flipped oily spot gaussian distribution 2025-10-07 17:52:25 +11:00
George Paton
39603e2edb bedrock oil spots 2025-10-07 15:33:40 +11:00
George Paton
edbc062da0 reimplement oil (regular + sand) bubbles as MapGenBase 2025-10-07 12:56:14 +11:00
Boblet
054aa07318 my bals 2025-10-06 16:42:34 +02:00
George Paton
264ee49212 replace sellafield craters (already had the crater code so why not) 2025-10-06 18:38:01 +11:00
HbmMods
32c0491ca4
Merge pull request #2436 from Bufka2011/master
ru_RU.lang and RU QMAW update
2025-10-06 07:59:48 +02:00
HbmMods
3ca0e1ad4c
Merge pull request #2456 from NarekoMichigami810/master
zh_CN update
2025-10-06 07:56:36 +02:00
HbmMods
59afb41c22
Merge pull request #2449 from kelllllen/master
Some more RBMK OC compat
2025-10-06 07:56:14 +02:00
HbmMods
ab7c852d61
Merge pull request #2473 from MellowArpeggiation/master
common worldgen cascade fixes (improved worldgen performance)
2025-10-06 07:52:22 +02:00
George Paton
15d7edacb5 bonus: fix chargers never filling the last 1HE on certain armors 2025-10-06 13:34:36 +11:00
George Paton
278a7b5dfb fixing two common worldgen cascades in meteorites and flowers 2025-10-06 12:21:24 +11:00
Bob
4ef2442770 drill crap 2025-10-05 23:48:03 +02:00
Bufka2011
bbf3d29d80
Update ru_RU.lang 2025-10-04 11:50:21 -06:00
Bufka2011
8cc94738ad
Update ru_RU.lang 2025-10-04 11:48:37 -06:00
Bufka2011
ee79c8d9dc
Update ru_RU.lang 2025-10-04 11:37:29 -06:00
Bufka2011
97cb4cb6a1
Update ru_RU.lang 2025-10-04 11:26:49 -06:00
Bufka2011
9a42d65e26
Update ru_RU.lang 2025-10-04 11:21:18 -06:00
Bufka2011
f3e315297a
Update ru_RU.lang 2025-10-04 11:13:11 -06:00
Bufka2011
b1d4e99ea9
Update ru_RU.lang 2025-10-04 11:08:22 -06:00
Bufka2011
40dc8c8679
Update ru_RU.lang 2025-10-04 11:01:14 -06:00
Bufka2011
63fbbeb5c7
Update ru_RU.lang 2025-10-04 10:58:26 -06:00
Bufka2011
669c2b9b50
Update ru_RU.lang 2025-10-04 10:53:58 -06:00
Bufka2011
62366d5adb
Update ru_RU.lang 2025-10-04 10:53:06 -06:00
Bufka2011
8b6af76fa0
Update ru_RU.lang 2025-10-04 10:43:29 -06:00
Bufka2011
abe22b7f97
Update ru_RU.lang 2025-10-04 10:42:28 -06:00
Bufka2011
111f0d1114
Update ru_RU.lang 2025-10-04 10:40:56 -06:00
Bufka2011
0f5b5837b8
Update ru_RU.lang 2025-10-04 10:27:29 -06:00
Bufka2011
2796bcb892
Update ru_RU.lang 2025-10-04 10:24:32 -06:00
Bufka2011
540cf425e9
Update ru_RU.lang 2025-10-04 10:22:17 -06:00
Bufka2011
31a9000a82
Merge branch 'HbmMods:master' into master 2025-10-02 13:28:46 -06:00
Bufka2011
4710fcfc34
Update ru_RU.lang 2025-09-30 18:13:58 -06:00
Bob
9ba40044ed nothing 2025-09-28 14:35:04 +02:00
道神 馴子
bb056af18d
Merge branch 'HbmMods:master' into master 2025-09-28 14:14:28 +08:00
Bob
b710b88ed5 eh 2025-09-27 19:24:27 +02:00
Bufka2011
995f987e66
Update hss.json 2025-09-27 11:09:40 -06:00
Bufka2011
a709db58bb
Merge branch 'HbmMods:master' into master 2025-09-27 11:01:38 -06:00
Bufka2011
4f97af940c
Update ru_RU.lang 2025-09-27 11:01:25 -06:00
Boblet
a08c410a9c alt recipes galore 2025-09-26 14:12:16 +02:00
道神 馴子
a030397f71
Add files via upload 2025-09-26 20:06:36 +08:00
Boblet
a0184b1751 military green paint(?) 2025-09-25 16:45:10 +02:00
KellenHurrey
640397fdda
Merge branch 'HbmMods:master' into master 2025-09-22 15:26:50 -07:00
Kellen Hurrey
6f314c3996
Added more info to getColumnData, added control rod targets 2025-09-22 16:25:34 -06:00
Boblet
f389a25dec just fucking 3D everything i don't care anymore 2025-09-22 16:49:43 +02:00
HbmMods
bc7e00c71c
Merge pull request #2441 from Lazzzycatwastaken/crane
Crane Structure
2025-09-22 11:34:15 +02:00
HbmMods
2d64453317
Merge branch 'master' into crane 2025-09-22 11:34:08 +02:00
Boblet
c9155b55ba maybe i should push before something breaks completely 2025-09-22 11:32:20 +02:00
HbmMods
dfa1d7718b
Merge pull request #2442 from Lazzzycatwastaken/tower
Broadcaster tower
2025-09-22 11:31:39 +02:00
HbmMods
6a7acb337e
Merge pull request #2448 from MellowArpeggiation/master
Show current tool area ability next to crosshair
2025-09-22 11:28:42 +02:00
George Paton
f082094740
big dumbass momento 2025-09-22 19:16:15 +10:00
George Paton
c8fe3cc095 add client config to adjust tool hud indicator position 2025-09-22 17:33:35 +10:00
George Paton
dd3746a3d4
Merge branch 'HbmMods:master' into master 2025-09-22 17:15:02 +10:00
George Paton
dd0a604aa6 show current tool area ability next to crosshair, to prevent accidentally breaking yo shit 2025-09-22 17:14:28 +10:00
HbmMods
7285867856
Merge pull request #2443 from KellenHurrey/master
Some RBMK OC integration
2025-09-21 21:04:09 +02:00
HbmMods
b57acc2cb2
Merge pull request #2446 from BallOfEnergy1/master
Fix for TE crashes when using neutron nodespace.
2025-09-21 21:01:58 +02:00
Bob
d67b3778c3 this is the part where the T-45 fucking dies 2025-09-21 20:58:56 +02:00
BallOfEnergy
4440550a37 Small fix for erroneous crashes. 2025-09-21 10:20:23 -05:00
Bufka2011
644e188a94
Update ru_RU.lang 2025-09-20 15:24:58 -06:00
Bufka2011
72026cb772
Update ru_RU.lang 2025-09-20 15:19:17 -06:00
Bufka2011
072f226181
Merge branch 'HbmMods:master' into master 2025-09-20 10:15:44 -06:00
Kellen Hurrey
9f849e8c2d
Removed unused import 2025-09-19 11:28:19 -06:00
Kellen Hurrey
cf5bf4be8c
Added crafting data to getData and getColumnData, and made the OC pressAZ5 function play the cool sound 2025-09-19 11:25:11 -06:00
Kellen Hurrey
890eb49747
Merge remote-tracking branch 'origin/master' 2025-09-19 10:52:15 -06:00
Kellen Hurrey
ebd7ffc827
Make RBMK slotted elements have OC accessible inventories, and added a OC outgasser function that allows seeing the item that is being processed. 2025-09-19 10:51:32 -06:00
Lazzzycatwastaken
eddd75a626 When I get pantsd in class but I lowkey got a humiliation kink so I get bricked up and everyone realizes im lowkey slanging and hypes me up so I start helicoptering it on some nonchalant shi 2025-09-19 17:53:33 +02:00
Boblet
b3405d085b the skeleton's coming out, AAAAAAAAAAAAA 2025-09-19 13:02:50 +02:00
Lazzzycat
003721d4f7
creed embled unemployed drone 2025-09-19 11:50:48 +02:00
Lazzzycat
f3345f7778
Merge branch 'HbmMods:master' into crane 2025-09-19 09:31:59 +02:00
HbmMods
94e3df1751
Merge pull request #2440 from MellowArpeggiation/drilldo
This was an animated terra drill PR but the drill is getting axed so this is now just a bugfix and cleanup PR yay
2025-09-19 08:09:56 +02:00
HbmMods
d01016034f
Merge pull request #2438 from Lazzzycatwastaken/ttttt
Structure configs
2025-09-19 07:59:26 +02:00
George Paton
f7ffc694bf retract drill upon hitting depth rock 2025-09-19 12:27:10 +10:00
George Paton
7113838d68 add compact compressor to NEI handler 2025-09-19 12:08:00 +10:00
Bufka2011
96e5ea531c
Fix ru_RU.lang 2025-09-18 13:33:12 -06:00
Bufka2011
c25adf5014
Merge branch 'HbmMods:master' into master 2025-09-18 13:31:33 -06:00
Lazzzycatwastaken
f499e6cf00 setro OWNS me... (we've lost the plot) 2025-09-18 21:25:40 +02:00
Lazzzycatwastaken
daae6e9694 peak meter 100% 2025-09-18 20:17:32 +02:00
HbmMods
0916aa9b17
Merge pull request #2437 from Lazzzycatwastaken/factory
Factory rework
2025-09-18 16:51:43 +02:00
Lazzzycatwastaken
d6a10bf49a removed the parasite (title screen) 2025-09-18 16:27:03 +02:00
Lazzzycat
1f09f64176
Merge branch 'HbmMods:master' into factory 2025-09-18 16:13:38 +02:00
Lazzzycatwastaken
3dc97e8133 mr. penis (real) 2025-09-18 16:13:10 +02:00
Boblet
aaa046e4eb mischief 2025-09-18 16:08:27 +02:00
George Paton
2ffe3d0072 fix entity registration, complete with functioning spawn eggs 2025-09-18 13:12:42 +10:00
Boblet
715ecda0dd ough 2025-09-17 16:11:28 +02:00
Bufka2011
c61d7f4f89
Small ru_RU.lang fix 2025-09-15 21:16:29 -06:00
George Paton
2efce806a9 aim IAnimatedItem like a bow 2025-09-16 09:52:52 +10:00
Boblet
b9fabc3af4 ow 2025-09-15 16:27:29 +02:00
George Paton
dbd63e706f Merge branch 'master' into drilldo 2025-09-15 11:00:14 +10:00
George Paton
a79125b94d generic animation enum selection, still item specific but now a lot easier to refactor to non-item animations 2025-09-15 10:57:05 +10:00
Bob
afb559d604 sparks! 2025-09-14 22:51:27 +02:00
Boblet
c0cb28c2ad every step we take that's synchronized 2025-09-12 11:03:27 +02:00
George Paton
ada1b5245d might as well fix two issues while here:
* electrolyser metal outputs not clearing on client
* unused chunk allocation wasting RAM
2025-09-12 17:12:06 +10:00
George Paton
8c752488ee improve IAnimatedItem and move existing item animations out of the ClientProxy monolith 2025-09-12 14:39:38 +10:00
Bob
4a4606e6ed the sludge 2025-09-11 22:57:20 +02:00
HbmMods
7916d76aca
Merge pull request #2424 from R0STUS/master
PWRangler garbage improvements
2025-09-11 16:29:34 +02:00
HbmMods
463d020dad
Merge pull request #2426 from KellenHurrey/master
Add a oc function to set the custom map of redstone over radio torches
2025-09-11 16:28:07 +02:00
Boblet
4805dd800c the slow dance (it's actually rather fast) 2025-09-10 16:30:13 +02:00
Boblet
4320071a41 sesbian lex 2025-09-09 16:58:17 +02:00
Boblet
07a2e4eea3 tragic yuri 2025-09-08 16:54:05 +02:00
rost
d7f859ecab Final commit (max level added) 2025-09-08 16:03:40 +02:00
Kellen Hurrey
f6c74ce98e
Add radio method 2025-09-07 19:16:42 -06:00
Bob
966206dbf5 getting there 2025-09-07 20:53:12 +02:00
rost
675cde7321 fixes; MAX LEVEL REQUIRED 2025-09-07 14:51:23 +02:00
rost
98cf0b002b hot coolant ESTOP; MAX LEVEL REQUIRED 2025-09-07 11:14:30 +02:00
rost
3ff201bf4d fixes 2025-09-06 22:40:47 +02:00
rost
81c5bb84d3 upd 2025-09-06 22:35:29 +02:00
rost
1025f626b7 PWRangler garbage impoovments 2025-09-06 22:21:41 +02:00
HbmMods
13df9566a2
Merge pull request #2422 from Creeper-banner/bob
Update Simplified Chinese Localization for new QMAW pages
2025-09-06 16:54:28 +02:00
Bob
99aa9da490 flixes 2025-09-06 16:54:12 +02:00
CrpBnrz
465b521f19 QMAW Fix 2025-09-06 22:37:02 +08:00
CrpBnrz
0cea7393a6 More QMAW 2025-09-06 21:12:50 +08:00
CrpBnrz
7096062847 Merge branch 'bob' of https://github.com/Creeper-banner/NTMC.git into bob 2025-09-06 13:07:52 +08:00
CrpBnrz
2b612e82e9 Oil QMAW 2025-09-06 13:04:29 +08:00
Boblet
e03ad3edfb the docs 2025-09-05 15:17:05 +02:00
HbmMods
a35cb1cbd5
Merge pull request #2417 from Creeper-banner/bob
Update Simplified Chinese Localization
2025-09-04 16:56:47 +02:00
Boblet
2ed4d906c3 QMAW! 2025-09-04 16:35:34 +02:00
Creeper-banner
d4844073ae
Update zh_CN.lang 2025-09-04 22:26:01 +08:00
CrpBnrz
fba1d2a97b Update zh_CN.lang 2025-09-04 21:50:42 +08:00
CrpBnrz
45af851032 QMAW localization for free (but not for me) 2025-09-04 21:44:49 +08:00
Boblet
94accf6ed6 more QMAW for free 2025-09-03 16:25:29 +02:00
Boblet
539ecb8130 deplorable gollompus 2025-09-02 16:18:58 +02:00
Boblet
3f38c9b7d2 chlog 2025-09-01 16:43:37 +02:00
HbmMods
8f67cb6ba3
Merge pull request #2409 from MellowArpeggiation/master
fuck
2025-09-01 09:44:09 +02:00
George Paton
9a6cebe0fa stop staring at me with them big ol' eyes.
*SHHHHOOONK*
2025-09-01 17:39:27 +10:00
Boblet
ff75e7662e and then i went to the store to buy some gloop 2025-09-01 09:35:41 +02:00
Bob
7e01544c19 fresh from the juice, fresh from the juice! don't get it on your shoese 2025-08-31 15:35:43 +02:00
Bob
4e0171159e minor merge fuckup 2025-08-31 13:15:34 +02:00
HbmMods
f005680cc1
Merge pull request #2404 from Lazzzycatwastaken/forestchem
Forest chemical station
2025-08-31 13:12:07 +02:00
HbmMods
eb0dd854f0
Merge branch 'master' into forestchem 2025-08-31 13:11:54 +02:00
HbmMods
2f12549464
Merge pull request #2400 from Lazzzycatwastaken/Forwetst
Planes (useless edition)
2025-08-31 13:10:51 +02:00
HbmMods
174ce22da3
Merge branch 'master' into Forwetst 2025-08-31 13:10:45 +02:00
HbmMods
5604fa5e4a
Merge pull request #2403 from Lazzzycatwastaken/fixfordesert
Explosive suprise
2025-08-31 13:10:12 +02:00
HbmMods
bb453ce45b
Merge branch 'master' into fixfordesert 2025-08-31 13:09:19 +02:00
HbmMods
b6e9d36301
Merge branch 'master' into forestchem 2025-08-31 13:07:57 +02:00
HbmMods
a0ff23a4d1
Merge pull request #2406 from Lazzzycatwastaken/labolatory
new labolarotyyu
2025-08-31 13:07:11 +02:00
HbmMods
b456275016
Merge branch 'master' into labolatory 2025-08-31 13:07:02 +02:00
HbmMods
4d5f88896a
Merge pull request #2405 from Lazzzycatwastaken/forestpost
Forest post
2025-08-31 13:05:22 +02:00
HbmMods
6215b32f4d
Merge branch 'master' into forestpost 2025-08-31 13:00:15 +02:00
HbmMods
be78cf3a43
Merge pull request #2399 from Lazzzycatwastaken/NTMRUINS1
Sludgening is beginning
2025-08-31 12:58:38 +02:00
HbmMods
97866f1fb9
Merge branch 'master' into NTMRUINS1 2025-08-31 12:58:28 +02:00
HbmMods
1be5127582
Merge pull request #2402 from Lazzzycatwastaken/Radio-house
Radio rework (shocker)
2025-08-31 12:57:42 +02:00
HbmMods
53a63a28aa
Merge pull request #2407 from MellowArpeggiation/inventory-pronter
PWR printing tool
2025-08-31 12:49:36 +02:00
HbmMods
37926a6b8f
Merge branch 'master' into inventory-pronter 2025-08-31 12:49:30 +02:00
Bob
53d1323604 i lied, get fucked 2025-08-31 12:08:19 +02:00
Boblet
4fba0fc42a i forgor 2025-08-29 15:18:26 +02:00
George Paton
45aab4617a
Merge branch 'master' into inventory-pronter 2025-08-28 22:23:10 +10:00
George Paton
a636440d13 rotate to always show controller at bottom right 2025-08-28 15:47:22 +10:00
George Paton
c978fa8955 PWR printing device, exports a built PWR as a series of slices to be edited together for posting 2025-08-28 15:01:39 +10:00
Lazzzycatwastaken
66971b3310 SIX @SEVEN 2025-08-27 17:36:40 +02:00
Lazzzycatwastaken
92d4232472 Merge branch 'ttttt' into NTMRUINS1
# Conflicts:
#	src/main/java/com/hbm/util/LootGenerator.java
#	src/main/java/com/hbm/world/gen/NTMWorldGenerator.java
2025-08-27 17:31:40 +02:00
Lazzzycatwastaken
ee9c69cfca resolve hopefully i hope 2025-08-27 17:30:05 +02:00
Lazzzycatwastaken
5bde7c9a0d Merge branch 'ttttt' into Forwetst
# Conflicts:
#	src/main/java/com/hbm/world/gen/NTMWorldGenerator.java
2025-08-27 17:29:13 +02:00
Lazzzycatwastaken
848ac39463 resolve hopefully i hope 2025-08-27 17:24:58 +02:00
Lazzzycatwastaken
b9418dcb2e Merge branch 'ttttt' into Radio-house
# Conflicts:
#	src/main/java/com/hbm/world/gen/NTMWorldGenerator.java
2025-08-27 17:23:49 +02:00
Lazzzycatwastaken
245dbf421c Merge remote-tracking branch 'origin/forestchem' into forestchem 2025-08-27 17:21:19 +02:00
Lazzzycatwastaken
0b28311374 resolve hopefully i hope 2025-08-27 17:20:51 +02:00
Lazzzycatwastaken
c20a90e45c Merge branch 'ttttt' into forestchem
# Conflicts:
#	src/main/java/com/hbm/world/gen/NTMWorldGenerator.java
2025-08-27 17:18:42 +02:00
Lazzzycatwastaken
9a7f991092 resolve hopefully i hope 2025-08-27 17:16:07 +02:00
Lazzzycatwastaken
a24bed5337 Merge branch 'ttttt' into labolatory
# Conflicts:
#	src/main/java/com/hbm/world/gen/NTMWorldGenerator.java
2025-08-27 17:15:15 +02:00
Lazzzycatwastaken
bf3e795a66 BOIIIIIIIIIIIIIIIIII TS (type soul) getting a 20 hog code ( setro and minors? like in minecraft? I know nothing of association with setro and minors.) 2025-08-27 16:36:25 +02:00
Lazzzycatwastaken
76b51ebca9 BOIIIIIIIIIIIIIIIIII TS (type soul) getting a 20 hog code ( setro and minors? like in minecraft? I know nothing of association with setro and minors.) 2025-08-27 16:04:30 +02:00
Lazzzycatwastaken
c8bf809e9f labubu funk 2025-08-27 15:28:38 +02:00
Lazzzycatwastaken
7084dc919a Merge remote-tracking branch 'origin/NTMRUINS1' into NTMRUINS1 2025-08-27 15:13:07 +02:00
Lazzzycatwastaken
b98c8c3f98 sdsa 2025-08-27 15:12:47 +02:00
HbmMods
3f6e758cd4
Merge pull request #2397 from Bufka2011/master
ru_RU.lang update, ru_RU QMAW update and many I18n implementations (again)
2025-08-27 08:23:21 +02:00
George Paton
a000347877 yeah I was overcomplicating that, this is much better 2025-08-27 13:38:43 +10:00
George Paton
e5b29e3352 fix transparent pixel issue in wiki icon screenshitter 2025-08-27 13:12:01 +10:00
Bufka2011
5605a9c3b8 Minor changes 2025-08-26 16:25:11 -06:00
Bufka2011
708879c276 Minor ru_RU.lang changes 2025-08-26 16:21:33 -06:00
Bufka2011
95e1c97781 https://imgur.com/a/IBLwDde 2025-08-26 14:18:07 -06:00
Bufka2011
cac17dea98 Merge branch 'master' of https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT 2025-08-26 10:15:07 -06:00
Boblet
03d195fd91 ough 2025-08-26 15:49:27 +02:00
Bufka2011
2eecf17100 DODD 2025-08-25 15:52:58 -06:00
Bufka2011
48b4124c14 Manual update 2025-08-25 15:52:45 -06:00
Bufka2011
23669e6337 YES, MY QMAW (used python for this) 2025-08-25 15:14:30 -06:00
Bufka2011
6ed83ab7ec Updated swords translations 2025-08-25 14:13:45 -06:00
Bufka2011
2b3f98a850 Merge branch 'master' of https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT
# Conflicts:
#	src/main/resources/assets/hbm/manual/material/alloy.json
#	src/main/resources/assets/hbm/manual/material/aluminium.json
#	src/main/resources/assets/hbm/manual/material/arsenic.json
#	src/main/resources/assets/hbm/manual/material/arsenic_bronze.json
#	src/main/resources/assets/hbm/manual/material/bakelite.json
#	src/main/resources/assets/hbm/manual/material/bismuth.json
#	src/main/resources/assets/hbm/manual/material/bismuth_bronze.json
#	src/main/resources/assets/hbm/manual/material/bscco.json
#	src/main/resources/assets/hbm/manual/material/cadmium.json
#	src/main/resources/assets/hbm/manual/material/cadmium_steel.json
#	src/main/resources/assets/hbm/manual/material/cinnabar.json
#	src/main/resources/assets/hbm/manual/material/coke.json
#	src/main/resources/assets/hbm/manual/material/copper.json
#	src/main/resources/assets/hbm/manual/material/desh.json
#	src/main/resources/assets/hbm/manual/material/ferrouranium.json
#	src/main/resources/assets/hbm/manual/material/graphite.json
#	src/main/resources/assets/hbm/manual/material/gunmetal.json
#	src/main/resources/assets/hbm/manual/material/hss.json
#	src/main/resources/assets/hbm/manual/material/latex.json
#	src/main/resources/assets/hbm/manual/material/lead.json
#	src/main/resources/assets/hbm/manual/material/mingrade.json
#	src/main/resources/assets/hbm/manual/material/neptunium.json
#	src/main/resources/assets/hbm/manual/material/plutonium-238.json
#	src/main/resources/assets/hbm/manual/material/plutonium-239.json
#	src/main/resources/assets/hbm/manual/material/plutonium-240.json
#	src/main/resources/assets/hbm/manual/material/plutonium-241.json
#	src/main/resources/assets/hbm/manual/material/plutonium-rg.json
#	src/main/resources/assets/hbm/manual/material/plutonium.json
#	src/main/resources/assets/hbm/manual/material/polonium.json
#	src/main/resources/assets/hbm/manual/material/polymer.json
#	src/main/resources/assets/hbm/manual/material/radium.json
#	src/main/resources/assets/hbm/manual/material/rubber.json
#	src/main/resources/assets/hbm/manual/material/silicon.json
#	src/main/resources/assets/hbm/manual/material/sodium.json
#	src/main/resources/assets/hbm/manual/material/steel.json
#	src/main/resources/assets/hbm/manual/material/sulfur.json
#	src/main/resources/assets/hbm/manual/material/tantalium.json
#	src/main/resources/assets/hbm/manual/material/technetium.json
#	src/main/resources/assets/hbm/manual/material/technetium_steel.json
#	src/main/resources/assets/hbm/manual/material/thorium.json
#	src/main/resources/assets/hbm/manual/material/uranium-233.json
#	src/main/resources/assets/hbm/manual/material/uranium-235.json
#	src/main/resources/assets/hbm/manual/material/uranium-238.json
#	src/main/resources/assets/hbm/manual/material/uranium.json
#	src/main/resources/assets/hbm/manual/material/weaponsteel.json
2025-08-25 13:56:07 -06:00
Bufka2011
fcabf659af To be translated 2025-08-25 13:42:17 -06:00
Bufka2011
742595c83f I18n implementation for Meteorite Swords and Dusted Steel 2025-08-25 13:35:25 -06:00
Bufka2011
e062b4d2c3 More manual fixes 2025-08-25 13:34:06 -06:00
Bufka2011
a2a91d929a QMAW again 2025-08-25 12:47:43 -06:00
Bufka2011
7e87efcc48 QMAW 2025-08-25 12:44:22 -06:00
Bufka2011
61e10fe48f I'm tired of fixing 2025-08-25 12:25:05 -06:00
Bufka2011
518871bf2b Polonium fix 2025-08-25 12:24:33 -06:00
Bufka2011
b75e14d9fc Reader fixed 2025-08-25 12:11:43 -06:00
Bufka2011
12d2d6b8dd Fixed QMAW again 2025-08-25 12:10:30 -06:00
Bufka2011
37279845be Fixes 2025-08-25 12:02:16 -06:00
Bufka2011
d6b095c568 Fix 2025-08-25 11:36:31 -06:00
Bufka2011
f7cf05d944 QMAW desh fix 2025-08-25 11:35:20 -06:00
Bufka2011
3cbc342af5 Red copper 2025-08-25 11:23:12 -06:00
Bufka2011
ee41e9a7ed QMAW fixes 2025-08-25 11:22:43 -06:00
Bufka2011
79074e19c2 Ferrouranium 2025-08-25 11:12:51 -06:00
Bufka2011
ad9cb55b98 More QMAW fixes 2025-08-25 11:10:35 -06:00
Bufka2011
d71057bbab QMAW fixes 2025-08-25 11:08:54 -06:00
Bufka2011
8033fde2b9 Aluminium manual fix 2025-08-25 10:52:30 -06:00
Bufka2011
b209795f60 Rangefinder 2025-08-25 10:49:22 -06:00
Bufka2011
f73d81310a Minor changes 2025-08-25 10:31:57 -06:00
HbmMods
6555d6316a
Merge pull request #2368 from RealSilverMoon/rbmki18n
i18n for RBMK DODD
2025-08-25 16:32:26 +02:00
Boblet
bf0aa7d285 changelog 2025-08-25 16:30:35 +02:00
HbmMods
fbc5177918
Merge pull request #2391 from Creeper-banner/bob
Update Simplified Chinese Localization
2025-08-25 16:30:00 +02:00
CrpBnrz
4aafbdaeac Merge remote-tracking branch 'origin/temp' into bob
# Conflicts:
#	src/main/resources/assets/hbm/manual/material/alloy.json
#	src/main/resources/assets/hbm/manual/material/aluminium.json
#	src/main/resources/assets/hbm/manual/material/arsenic.json
#	src/main/resources/assets/hbm/manual/material/arsenic_bronze.json
#	src/main/resources/assets/hbm/manual/material/bakelite.json
#	src/main/resources/assets/hbm/manual/material/bismuth.json
#	src/main/resources/assets/hbm/manual/material/bismuth_bronze.json
#	src/main/resources/assets/hbm/manual/material/bscco.json
#	src/main/resources/assets/hbm/manual/material/cadmium.json
#	src/main/resources/assets/hbm/manual/material/cadmium_steel.json
#	src/main/resources/assets/hbm/manual/material/cinnabar.json
#	src/main/resources/assets/hbm/manual/material/coke.json
#	src/main/resources/assets/hbm/manual/material/copper.json
#	src/main/resources/assets/hbm/manual/material/desh.json
#	src/main/resources/assets/hbm/manual/material/ferrouranium.json
#	src/main/resources/assets/hbm/manual/material/graphite.json
#	src/main/resources/assets/hbm/manual/material/gunmetal.json
#	src/main/resources/assets/hbm/manual/material/hss.json
#	src/main/resources/assets/hbm/manual/material/latex.json
#	src/main/resources/assets/hbm/manual/material/lead.json
#	src/main/resources/assets/hbm/manual/material/mingrade.json
#	src/main/resources/assets/hbm/manual/material/neptunium.json
#	src/main/resources/assets/hbm/manual/material/plutonium-238.json
#	src/main/resources/assets/hbm/manual/material/plutonium-239.json
#	src/main/resources/assets/hbm/manual/material/plutonium-240.json
#	src/main/resources/assets/hbm/manual/material/plutonium-241.json
#	src/main/resources/assets/hbm/manual/material/plutonium-rg.json
#	src/main/resources/assets/hbm/manual/material/plutonium.json
#	src/main/resources/assets/hbm/manual/material/polonium.json
#	src/main/resources/assets/hbm/manual/material/polymer.json
#	src/main/resources/assets/hbm/manual/material/radium.json
#	src/main/resources/assets/hbm/manual/material/rubber.json
#	src/main/resources/assets/hbm/manual/material/silicon.json
#	src/main/resources/assets/hbm/manual/material/sodium.json
#	src/main/resources/assets/hbm/manual/material/steel.json
#	src/main/resources/assets/hbm/manual/material/sulfur.json
#	src/main/resources/assets/hbm/manual/material/tantalium.json
#	src/main/resources/assets/hbm/manual/material/technetium.json
#	src/main/resources/assets/hbm/manual/material/technetium_steel.json
#	src/main/resources/assets/hbm/manual/material/thorium.json
#	src/main/resources/assets/hbm/manual/material/uranium-233.json
#	src/main/resources/assets/hbm/manual/material/uranium-235.json
#	src/main/resources/assets/hbm/manual/material/uranium-238.json
#	src/main/resources/assets/hbm/manual/material/uranium.json
#	src/main/resources/assets/hbm/manual/material/weaponsteel.json
2025-08-25 22:06:36 +08:00
RealSilverMoon
4e30ac8084 A little distinction 2025-08-25 21:02:01 +08:00
HbmMods
63d5d41d48
Merge pull request #2389 from R-Kaenbyou/new-branch-1
ME Storage bus compat for Arc Furnace
2025-08-25 10:04:54 +02:00
HbmMods
fdf73a4f06
Merge pull request #2386 from abel1502/abel-better-wings
Better murky wings
2025-08-25 09:17:18 +02:00
HbmMods
dafe4a535e
Merge pull request #2374 from arantirnecrolord/master
update uk_UA
2025-08-25 09:14:03 +02:00
HbmMods
96793ec599
Merge pull request #2371 from FOlkvangrField/Multilingual-Function-Repair
Fixed the multilingual feature failure error of the "QMAW" system
2025-08-25 09:13:41 +02:00
Boblet
951c00d79d some fixes, RBMK control rod copyable 2025-08-25 09:12:09 +02:00
Bufka2011
d5e923c263 Uhuh 2025-08-24 14:28:38 -06:00
Bufka2011
9d67211ddd Fixed a joke that has been a bad joke for centuries. 2025-08-24 14:27:48 -06:00
Bufka2011
4b28ee2227 I18n implementation for cloth 2025-08-24 12:51:25 -06:00
Bufka2011
78ea52cbab I18n implementation for ItemLemon.java 2025-08-24 12:37:14 -06:00
Bufka2011
7793f9fa24 More sorting 2025-08-24 11:09:03 -06:00
Bufka2011
1d18d832e7 Sorting 2025-08-24 11:02:13 -06:00
R-Kaenbyou
14f7668a9a
Update TileEntityMachineArcFurnaceLarge.java 2025-08-23 21:09:37 -07:00
R-Kaenbyou
f0bd84fa47
Update TileEntityMachineArcFurnaceLarge.java 2025-08-23 21:02:52 -07:00
R-Kaenbyou
13b3988829
Update ContainerMachineArcFurnaceLarge.java 2025-08-23 20:42:15 -07:00
R-Kaenbyou
0a99397f30
Add files via upload 2025-08-23 20:34:07 -07:00
R-Kaenbyou
52149b098e
Update AE2CompatHandler.java 2025-08-23 20:31:37 -07:00
R-Kaenbyou
4903b2e189
Update TileEntityMachineArcFurnaceLarge.java 2025-08-23 20:18:37 -07:00
Bufka2011
54a5769dee Minor changes 2025-08-23 20:10:04 -06:00
Bufka2011
f9369f5e02 Minor changes 2025-08-23 19:14:29 -06:00
Bufka2011
90522b98db Destroyed? 2025-08-23 18:52:10 -06:00
Bufka2011
9e83f24179 Blueprint Booklet 2025-08-23 18:49:57 -06:00
Bufka2011
9a0cadaf9d I18n implementation for guns 2025-08-23 18:10:46 -06:00
Bufka2011
3f641a843b I18n implementation for bomb parts 2025-08-23 17:51:47 -06:00
Bufka2011
60b9e1fb18 I18n implementation for missiles and sattelites 2025-08-23 17:51:01 -06:00
Bufka2011
fa6b4faeee I18n for machines implementation 2025-08-23 17:09:19 -06:00
Bufka2011
fb4bca3544
Add files via upload 2025-08-23 11:13:02 -06:00
abel1502
9e99a21969
Remove unused import 2025-08-23 19:36:45 +03:00
abel1502
0ac72afa97
Make murky wings support shift+space for hovering 2025-08-23 19:36:19 +03:00
abel1502
bdd56b6062
Remove murky wings forced slowfall 2025-08-23 19:36:16 +03:00
abel1502
16824452b0
Better fine control
Shift already introduces a slowdown, no need to account for that
2025-08-23 19:33:08 +03:00
abel1502
ee1ffc98ba
Make murky wings more controllable 2025-08-23 19:31:40 +03:00
CrpBnrz
4b52afd0e1 Merge remote-tracking branch 'origin/bob' into bob 2025-08-23 15:52:39 +08:00
CrpBnrz
aa045050a1 QMAW localization created by me 2025-08-23 15:42:04 +08:00
Creeper-banner
b7dc3fb600
Merge branch 'HbmMods:master' into bob 2025-08-23 15:40:25 +08:00
Boblet
8ea7cf4080 can't wait for people to complain about this one 2025-08-22 13:06:47 +02:00
arantirnecrolord
7505b72f7a
pipirupirupirupipi 2025-08-21 13:07:19 +03:00
arantirnecrolord
763a702ed7
xd 2025-08-20 23:55:03 +03:00
arantirnecrolord
a4e1cc139f
fuck yea 2025-08-20 23:40:27 +03:00
arantirnecrolord
ecc8151919
i am alive! 2025-08-20 23:39:07 +03:00
FOlkvangrField
b4b471e5c3 Fix 2025-08-20 21:46:59 +08:00
CrpBnrz
525169743c QMAW localization from Tokiko 2025-08-20 21:28:56 +08:00
RealSilverMoon
e1d66c93a1 i18n for RBMK DODD 2025-08-19 16:23:56 +08:00
CrpBnrz
037af08963 Fix formatted strings 2025-08-19 08:15:49 +08:00
CrpBnrz
1a13e68c67 Merge remote-tracking branch 'origin/bob' into bob 2025-08-19 08:06:42 +08:00
Boblet
a0451b46a5 the glunch 2025-08-18 16:35:50 +02:00
CrpBnrz
c86aa101ba Update zh_CN.lang 2025-08-18 22:07:50 +08:00
Bob
be03467f65 slunkus the great, lord of death 2025-08-17 23:09:50 +02:00
HbmMods
b01b88cb03
Merge pull request #2361 from Bufka2011/master
QMAW russian translation and ru_RU.lang update
2025-08-17 17:58:17 +02:00
HbmMods
b7da4e7bd1
Merge pull request #2363 from abel1502/abel-buzzsaw-fix
Fix buzzsaw not replanting wheat occasionally
2025-08-17 17:57:11 +02:00
Bob
bee95f9065 scrungus 2025-08-17 17:55:28 +02:00
abel1502
d669c4372e
Fix buzzsaw not replanting wheat occasionally 2025-08-17 12:03:45 +03:00
Bufka2011
2db923173a
Update uranium.json 2025-08-15 13:11:05 -06:00
Bufka2011
9e2f116a32
Update uranium-235.json 2025-08-15 13:10:48 -06:00
Bufka2011
eaadc36618
Update steel.json 2025-08-15 13:10:29 -06:00
Bufka2011
8ef85c4d04
Update latex.json 2025-08-15 13:10:12 -06:00
Bufka2011
ffd83ebef3
Update graphite.json 2025-08-15 13:09:55 -06:00
Bufka2011
85895f7ce8
Update coke.json 2025-08-15 13:09:37 -06:00
Bufka2011
792dff062e
Update cadmium.json 2025-08-15 13:09:10 -06:00
Bufka2011
ed67caa19c
Update arsenic.json 2025-08-15 13:08:48 -06:00
Bufka2011
74bd23d76e
Update uranium-233.json 2025-08-15 13:07:16 -06:00
Bufka2011
9a47ec30f4
Update sulfur.json 2025-08-15 13:03:46 -06:00
Bufka2011
9b7332a047
Update radium.json 2025-08-15 13:00:32 -06:00
Bufka2011
098ecd3791
Update plutonium-rg.json 2025-08-15 12:59:44 -06:00
Bufka2011
de4a359002
Update plutonium-241.json 2025-08-15 12:59:18 -06:00
Bufka2011
997ed75b79
Update plutonium-239.json 2025-08-15 12:58:42 -06:00
Bufka2011
2ad1c2121d
Update neptunium.json 2025-08-15 12:58:10 -06:00
Bufka2011
9da95bbff3
Update mingrade.json 2025-08-15 12:57:05 -06:00
Bufka2011
c99f647e15
Update desh.json 2025-08-15 12:55:42 -06:00
Bufka2011
9ff54c2495
Update coke.json 2025-08-15 12:49:51 -06:00
Bufka2011
9b412c726d
Update cinnabar.json 2025-08-15 12:48:35 -06:00
Bufka2011
470f950b1a
Update aluminium.json 2025-08-15 12:46:08 -06:00
Bufka2011
4750b0eba2
Update aluminium.json 2025-08-15 12:45:41 -06:00
Bufka2011
458ee0a90e
Update weaponsteel.json 2025-08-15 12:42:02 -06:00
Bufka2011
563defd5f1
Update uranium.json 2025-08-15 12:41:27 -06:00
Bufka2011
2546cf79b7
Update uranium-238.json 2025-08-15 12:40:41 -06:00
Bufka2011
b8fa2a67d7
Update uranium-235.json 2025-08-15 12:40:04 -06:00
Bufka2011
4c162e9f37
Update uranium-233.json 2025-08-15 12:39:07 -06:00
Bufka2011
a4b49633c6
Update thorium.json 2025-08-15 12:38:13 -06:00
Bufka2011
00980d937a
Update technetium_steel.json 2025-08-15 12:37:24 -06:00
Bufka2011
c39854dbb4
Update technetium.json 2025-08-15 12:36:49 -06:00
Bufka2011
aa5c85ade5
Update tantalium.json 2025-08-15 12:36:10 -06:00
Bufka2011
cdda91f2d8
Update sulfur.json 2025-08-15 12:35:44 -06:00
Bufka2011
84c69e7803
Update steel.json 2025-08-15 12:35:04 -06:00
Bufka2011
1709848209
Update sodium.json 2025-08-15 12:34:22 -06:00
Bufka2011
f6ce5b5ae7
Update silicon.json 2025-08-15 12:33:30 -06:00
Bufka2011
bbe87c34c3
Update rubber.json 2025-08-15 12:31:34 -06:00
Bufka2011
37cee61269
Update radium.json 2025-08-15 12:30:23 -06:00
Bufka2011
81f9915e54
Update polymer.json 2025-08-15 12:28:38 -06:00
Bufka2011
8c696a6f64
Update polonium.json 2025-08-15 12:28:11 -06:00
Bufka2011
61ab6dda7b
Update plutonium.json 2025-08-15 12:27:31 -06:00
Bufka2011
96976e9fb4
Update plutonium-rg.json 2025-08-15 12:26:51 -06:00
Bufka2011
2bd11fdd71
Update plutonium-241.json 2025-08-15 12:25:58 -06:00
Bufka2011
07a6b144c8
Update plutonium-240.json 2025-08-15 12:25:18 -06:00
Bufka2011
d8a6272597
Update plutonium-239.json 2025-08-15 12:24:51 -06:00
Bufka2011
0911ddc423
Update plutonium-238.json 2025-08-15 12:24:01 -06:00
Bufka2011
8e102c3fc8
Update neptunium.json 2025-08-15 12:21:07 -06:00
Bufka2011
aaff825539
Update mingrade.json 2025-08-15 12:20:22 -06:00
Bufka2011
0748abae07
Update lead.json 2025-08-15 12:18:39 -06:00
Bufka2011
1051342526
Update latex.json 2025-08-15 12:18:22 -06:00
Bufka2011
adc57e79b4
Update hss.json 2025-08-15 12:17:24 -06:00
Bufka2011
7741330fec
Update gunmetal.json 2025-08-15 12:16:48 -06:00
Bufka2011
74b0e4e929
Update graphite.json 2025-08-15 12:16:14 -06:00
Bufka2011
a88b7ef5df
Update ferrouranium.json 2025-08-15 12:15:33 -06:00
Bufka2011
f003235381
Update desh.json 2025-08-15 12:14:15 -06:00
Bufka2011
0920358df4
Update copper.json 2025-08-15 12:12:16 -06:00
Bufka2011
75dd1ea555
Update coke.json 2025-08-15 12:10:00 -06:00
Bufka2011
6def4eaac9
Update cinnabar.json 2025-08-15 11:56:58 -06:00
Bufka2011
c841002f70
Update cadmium_steel.json 2025-08-15 11:55:30 -06:00
Bufka2011
3ddad84863
Update cadmium.json 2025-08-15 11:51:11 -06:00
Bufka2011
907d97e1ba
Update bismuth_bronze.json 2025-08-15 11:50:01 -06:00
Bufka2011
af9780f57d
Update bismuth.json 2025-08-15 11:49:28 -06:00
Bufka2011
e6901d8134
Update bakelite.json 2025-08-15 11:47:36 -06:00
Bufka2011
5f041cde7d
Update arsenic_bronze.json 2025-08-15 11:46:50 -06:00
Bufka2011
4c67d4d0c3
Update bscco.json 2025-08-15 11:45:47 -06:00
Bufka2011
bdba1fc503
Update alloy.json 2025-08-15 11:44:20 -06:00
Bufka2011
ad6c7c06a5
Update aluminium.json 2025-08-15 11:40:54 -06:00
Bufka2011
8ddc169c31
Update arsenic.json 2025-08-15 11:38:35 -06:00
Bufka2011
9b316af586
Update alloy.json 2025-08-15 11:14:49 -06:00
Bufka2011
419b207eff
Merge branch 'HbmMods:master' into master 2025-08-15 11:11:19 -06:00
Bob
ba24ed64aa pink one detected 2025-08-15 17:59:39 +02:00
Boblet
9cfdc17115 multidimensional time crystal 2025-08-14 16:20:39 +02:00
Boblet
938c28f293 work, whore 2025-08-11 11:59:28 +02:00
Boblet
b374f4088b agony 2025-08-11 11:52:48 +02:00
Boblet
5444f57cad the glunch 2025-08-11 11:14:06 +02:00
Bufka2011
0ec1e5735a
rebar 2025-08-10 18:32:07 -06:00
Bob
219db7acdf blup 2025-08-10 22:02:23 +02:00
HbmMods
afab6c7750
Merge pull request #2348 from MellowArpeggiation/master
NBTStructureLib features & /ntmlocate command
2025-08-10 20:13:56 +02:00
HbmMods
8117f9b888
Merge pull request #2343 from legendarydoge30/oc-capacitor
opencomputer capacitor
2025-08-10 20:10:24 +02:00
HbmMods
b5363ef039
Merge pull request #2341 from PewPewCricket/master
add waste barrel and vitrified waste barrel recipes to assembly machine.
2025-08-10 20:09:36 +02:00
HbmMods
6f97e04dda
Merge pull request #2338 from Bufka2011/master
ru_RU update
2025-08-10 20:09:02 +02:00
HbmMods
f523b958d6
Merge pull request #2329 from NarekoMichigami810/master
zh_CN update
2025-08-10 20:08:35 +02:00
HbmMods
a9f2762a97
Merge pull request #2326 from 70000hp/the-gog-block
Update BlockWandLogic.java
2025-08-10 20:08:15 +02:00
Bob
242c4f5b03 drowned in the slop, forgotten in the slurry 2025-08-10 20:07:53 +02:00
George Paton
3f72a93d28 tandems! checking if all the affected chunks have generated yet has NOT yet been implemented tho 2025-08-08 18:44:29 +10:00
George Paton
7213b9b84d move jiggy map 2025-08-08 16:53:13 +10:00
道神 馴子
0c5c7a4150
bee 2025-08-08 14:37:24 +08:00
道神 馴子
10e21a2676
Merge branch 'HbmMods:master' into master 2025-08-08 14:29:51 +08:00
George Paton
3877a666a6
Merge branch 'master' into master 2025-08-08 14:55:30 +10:00
George Paton
84601f685f NBTStructureLib features brought back to NTM, including:
* `/locate` command
* custom spawning rules (eg. make something always spawn at 0,0)
* code structure reorg
* extra logging for misconfigured structures
2025-08-08 14:51:45 +10:00
Bob
a7c1a42244 scat 2025-08-07 20:23:28 +02:00
Bob
e8b7504fff and that's QMAW 2025-08-07 17:45:16 +02:00
道神 馴子
e450bbc49d
only thing i love 2025-08-07 17:17:27 +08:00
道神 馴子
26f1b38df9
Merge branch 'HbmMods:master' into master 2025-08-07 15:26:57 +08:00
Bob
d70464b3d1 QMAW the second (third?) 2025-08-06 20:13:44 +02:00
LegendaryDoge30
7bfb6ac7c6 open computer
open computers capacitor
2025-08-06 02:13:36 +02:00
PewPewCricket
96f02c6a16 add yellow waste barrel and vitrified waste barrel recipes to assembly machine. 2025-08-05 14:40:46 -05:00
Bufka2011
852e89b21d
typo fix 2025-08-05 12:30:32 -06:00
道神 馴子
b7ced0b946
Merge branch 'HbmMods:master' into master 2025-08-05 11:16:59 +08:00
Bufka2011
05630028a0
Merge branch 'HbmMods:master' into master 2025-08-04 20:11:22 -06:00
Bufka2011
30a20e34e0
Update ru_RU.lang 2025-08-04 20:11:12 -06:00
Bob
a5bdfa87d9 it just works 2025-08-04 20:16:50 +02:00
Bufka2011
889cc46486
Merge branch 'HbmMods:master' into master 2025-08-01 15:59:32 -06:00
道神 馴子
bafa8d6dba
Beyond the time 2025-08-01 13:46:45 +08:00
70000hp
5f999100d1 Update BlockWandLogic.java 2025-07-31 16:10:23 -04:00
Bufka2011
8d63e86a98
Merge branch 'HbmMods:master' into master 2025-07-31 09:24:12 -06:00
Bufka2011
ddc6e42f55
Update ru_RU.lang 2025-07-31 09:24:06 -06:00
Bufka2011
423cbbcf79
Update ru_RU.lang 2025-07-30 15:06:04 -06:00
Bufka2011
ef3397ddb1
Update ru_RU.lang 2025-07-30 14:55:18 -06:00
Bufka2011
5b22da19c4
Update ru_RU.lang 2025-07-30 13:49:47 -06:00
Bufka2011
e6c059041e
Update ru_RU.lang 2025-07-30 13:45:48 -06:00
Bufka2011
b9332f2e81
Update ru_RU.lang 2025-07-30 13:42:46 -06:00
Bufka2011
4d25b5dc8b
Update ru_RU.lang 2025-07-30 13:42:13 -06:00
Bufka2011
55bfe1b8d2
Update ru_RU.lang 2025-07-30 13:40:16 -06:00
Bufka2011
82b02c29ea
Update ru_RU.lang 2025-07-29 13:18:25 -06:00
Bufka2011
e85ae838c6
Update ru_RU.lang 2025-07-29 12:31:33 -06:00
Bufka2011
77df7e6cde
Update ru_RU.lang 2025-07-29 12:28:14 -06:00
Bufka2011
c82e371ec8
Update ru_RU.lang 2025-07-29 11:45:26 -06:00
Bufka2011
b656e1d22e
Update ru_RU.lang 2025-07-29 11:44:03 -06:00
Bufka2011
18855018c4
Update ru_RU.lang 2025-07-29 11:41:09 -06:00
Lazzzycatwastaken
43f38d8679 sdsa 2025-06-30 17:38:36 +02:00
Lazzzycat
a70410f5dd
Merge branch 'HbmMods:master' into Forwetst 2025-06-28 18:24:36 +02:00
Lazzzycat
f3ee962e8e
Merge branch 'HbmMods:master' into NTMRUINS1 2025-06-28 18:24:28 +02:00
Lazzzycat
bfe043b81d
Merge branch 'HbmMods:master' into Radio-house 2025-06-28 18:24:15 +02:00
Lazzzycat
f5db461bfd
Merge branch 'HbmMods:master' into forestchem 2025-06-28 18:23:45 +02:00
Lazzzycat
36080e183a
Merge branch 'HbmMods:master' into forestpost 2025-06-28 18:23:36 +02:00
Lazzzycat
e21b14b979
Merge branch 'HbmMods:master' into Radio-house 2025-05-11 19:46:30 +02:00
Lazzzycat
149e51288f
Merge branch 'HbmMods:master' into NTMRUINS1 2025-05-11 19:46:17 +02:00
Lazzzycat
14746a76b3
Merge branch 'HbmMods:master' into Forwetst 2025-05-11 19:46:00 +02:00
Lazzzycat
b95e9b6e80
Merge branch 'HbmMods:master' into forestchem 2025-05-11 19:45:39 +02:00
Lazzzycat
59df04d608
Merge branch 'HbmMods:master' into forestpost 2025-05-11 19:45:31 +02:00
Lazzzycatwastaken
f69a1d8876 AAAAAAAAAAAAAAAAAAAAAA 2025-05-11 16:49:47 +02:00
Lazzzycatwastaken
b485558e13 ☢☢☢☢☢☢☢☢☢☢☢ 2025-05-11 16:17:29 +02:00
Lazzzycatwastaken
791b4c7687 Top 5 easiest people to scam:
1. You
2. You
3. You
4. You
5. You
2025-05-11 15:36:52 +02:00
Lazzzycatwastaken
1eecfbca85 whos getting the best head:
A. Alvin
B. Theodore
C. Simon
(Secret option) Me
2025-05-09 19:38:11 +02:00
Lazzzycatwastaken
22aefff48d get to work on the mob spawners bugboy 2025-05-06 23:18:28 +02:00
1146 changed files with 110263 additions and 47692 deletions

View File

@ -7,27 +7,46 @@
# Yes this is a mostly untouched Github actions template
name: Java CI with Gradle
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 8
uses: actions/setup-java@v4
with:
java-version: '8'
distribution: 'temurin' # Temurin because it's default :P
# Calculate days since 10/10/10
- name: Calculate days since 10/10/10
id: calculate_days
run: |
start_date="2010-10-10"
current_date=$(date +%Y-%m-%d)
days_since=$(( ($(date -d "$current_date" +%s) - $(date -d "$start_date" +%s)) / 86400 ))
echo "days=$days_since" >> $GITHUB_OUTPUT
# Update version files with proper sed syntax
- name: Update version files
run: |
days=${{ steps.calculate_days.outputs.days }}
# Use proper sed syntax for Linux runners
sed -i "s/public static final String VERSION = \".*\";/public static final String VERSION = \"1.0.27 BETA ($days)\";/" src/main/java/com/hbm/lib/RefStrings.java
sed -i "s/mod_build_number=.*/mod_build_number=$days/" gradle.properties
# Configure Gradle for optimal use in GitHub Actions, including caching of downloaded dependencies.
# See: https://github.com/gradle/actions/blob/main/setup-gradle/README.md
- name: Setup Gradle
@ -41,5 +60,3 @@ jobs:
with:
# A file, directory or wildcard pattern that describes what to upload
path: ./build/libs

View File

@ -2,7 +2,7 @@
[NTM on Modrinth](https://modrinth.com/mod/ntm)
[NTM on CurseForge](https://minecraft.curseforge.com/projects/hbms-nuclear-tech-mod?gameCategorySlug=mc-mods&projectID=235439)
[NTM on CurseForge](https://www.curseforge.com/minecraft/mc-mods/hbms-nuclear-tech-mod)
[Official NTM Wiki](https://nucleartech.wiki/wiki/Main_Page)
@ -10,9 +10,9 @@
**This is for 1.7.10!** For 1.12, check out these projects:
* NTM Reloaded: https://github.com/TheOriginalGolem/Hbm-s-Nuclear-Tech-GIT/releases
* NTM Extended Edition (Alcater): https://github.com/Alcatergit/Hbm-s-Nuclear-Tech-GIT/releases
* NTM Community Edition (WarFactory): https://github.com/MisterNorwood/Hbm-s-Nuclear-Tech-CE
* NTM Extended Edition (Alcater): https://github.com/Alcatergit/Hbm-s-Nuclear-Tech-GIT/releases
* NTM Reloaded: https://github.com/TheOriginalGolem/Hbm-s-Nuclear-Tech-GIT/releases
For 1.18, try Martin's remake: https://codeberg.org/MartinTheDragon/Nuclear-Tech-Mod-Remake/releases
@ -25,7 +25,7 @@ Simply navigate to "Releases" on the right side of the page, download links for
Tired of waiting until the next version comes out? Here is a tutorial on how to compile the very newest version yourself:
Please note that these installation instructions are assuming you're running Microsoft Windows operating system. Linux users should know what to do by looking at the same guide.
1. Make sure you have JDK8 installed. If not, download it from [adoptium.net](https://adoptium.net/?variant=openjdk8&jvmVariant=hotspot)
1. Make sure you have JDK8 installed. If not, download it from [adoptium.net](https://adoptium.net/temurin/releases?version=8)
2. If you don't have git installed, download&install it from [here](https://git-scm.com/downloads).
3. Open up "Git Bash":
* Press Windows Button, type "Git Bash" and press ENTER

View File

@ -6,6 +6,7 @@ import java.nio.file.StandardCopyOption
buildscript {
repositories {
maven { url = 'https://maven.ntmr.dev/proxy/' }
maven { url = 'https://maven.minecraftforge.net/' }
maven { url = 'https://plugins.gradle.org/m2' }
mavenCentral()
@ -67,6 +68,10 @@ eclipse.classpath.file.whenMerged { cp ->
}
repositories {
maven {
name = 'Blerg'
url = 'https://maven.ntmr.dev/proxy/'
}
maven {
name = 'ModMaven'
url = 'https://modmaven.dev'

View File

@ -1,53 +1,27 @@
## Added
* Blueprint booklets
* Can be found in worldgen
* Using it will create one random blueprint of the same type as the booklet
* Liquid concrete
* It's conk but liquid
* Rebar
* When hooked up to liquid concrete using pipes, will fill to create reinforced concrete
* Fills bottom to top, so connect the pipes to the top
* The rendering on this is still experimental, so don't overdo it with how large of an area you're casting
* Rebar placer
* Can be configured with different types of concrete, reinforced or not, or even colored
* Rebar created with the rebar placer will remember its type and assume it when being filled with liquid concrete
* PUREX
* Chemplant-like nuclear fuel reprocessing machine
* Handles all the nuclear fuel reprocessing that was previously done by the standard centrifuge
* All reprocessing recipes now require both kerosene and nitric acid
* Also handles the vitrification recipes and the thorium salt reprocessing from the chemical plant
* Comes with new schrabidium extraction recipes from MEP/MEN fuels using schrabidic acid (yield is twice the schrabidium cost for acid used)
## Changed
* The alternate recipes for nitric acid and xenon gas in the chemical plant now require blueprints
* The chemical plant now has a recipe for making cobblestone from 25mB of lava (which can be liquefacted into even more lava, useful for cobblestone generation)
* Removed the old arc furnace
* Mining lasers now build up barricades in all directions and not just horizontal ones, preventing potential deadlocks due to liquid flowing in from above
* One of the new secret parts for making a certain weapon is now obtainable again via red rooms
* Biogas can now be cracked into aromatics and petroleum gas
* Custom missile part recipes have been added to the new assembler
* Mini nukes are now made from weapon steel instead of regular steel
* Meteorite ingots are now made from meteorite powder, not blocks
* Starmetal now requires meteorite ingots instead of blocks
* Added auto switch groups
* The new standardized processing machines (assembler, chemplant, purex) can now have recipes that are grouped
* Recipes in groups will accept non-recipe items, if the item is used in another recipe from that same group
* When this happens, the recipe switches automatically, if possible
* This means that many PUREX recycling recipes and the ingot to plate recipes don't need dedicated machines for every single recipe, rather only one for that auto switch group
* The tooltip of the chosen recipe on the recipe selector now renders in the bottom left corner instead of following the mouse, preventing an issue where the tooltip is cut off on larger GUI scales
* Expensive mode has been changed
* Instead of using heavy components for most things, there's now "expensive" items that are used by many assembler recipes
* "Expensive" items replace some of the microcrafting that's part of the recipe, meaning that expensive mode recipes are generally simpler (but require way more materials)
* All heavy components have been annihilated and any recipes that may still use them (e.g. from old configs) default to using cast plates instead
* Removed the assembly factory's recipe, as it still uses the deprecated recipe set
* A new assembly factory will be added soon
* All recently deprecated machines have been removed from the creative tabs
* Updated russian localization
* Rad absorbers now use metadata, existing blocks will be converted automatically
* Fissure bombs that go off in crater biomes now create fissures with metadata 1 which creates radioactive volcanic lava
* If a crater biome is created on top of an existing fissure, it will keep producing normal volcanic lava
* Simplified the battery socket's client packets, reducing CPU load
* Muzzle flashes on guns now work in third person mode, including on other players and on NPCs, making it more apparent when you're being fired at
* This includes non-standard special effects like the .44 gap flash and the .35-800 ejector plume
* Removed the old unused satelite deco blocks, freeing up 6 block IDs
* Crucibles that smelt metal with no template set will no place the metal in the recipe stack instead of the waste stack, this should make it easier to get a recipe to work in the many, many cases where people add the template after smelting the material
* Battery sockets and the FENSU now support the copy tool
* Removed unused displaylist support from the model loader
* DLs have been long phased out in favor of VBOs anyway
* Rebranded canned horse slime
* Now with extra bone marrow
* Updated the deuterium tower's model
* Increased the energy requirement for welding osmiridium
## Fixed
* Fixed a few assembler recipes using the old crafting numbers which sometimes exceed the stack limit
* As an extra safeguard, the recipe loader now throws an exception if that happens
* Fixed dupe caused by the breeding reactor
* Fixed a potential crash caused by a change done to tile entity proxies in relation to EnergyControl
* Fixed the assembler achievement still using the old one
* Fixed the RBMK auto control rod's function not syncing to the client properly
* Fixed crash caused by new standardized machine recipes with chance-based output when they output nothing
# Fixed
* Potentially fixed yet another issue regarding crates
* Fixed battery socket `fillpercent` RoR function always assuming a max power of 1
* Fixed issue where multiblock ports would generate many OpenComputers component entries
* Fixed RBMK automatic control rods having incorrect settings when using the copy tool
* Fixed battery sockets producing junk debug data in the logs
* Fixed an issue where the charging station would crash when trying to charge certain items
* Fixed the DFC's core component not dropping its contents when mined
* Fixed audio problems with guns

View File

@ -1,15 +1,15 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=5412
mod_build_number=5572
credits=HbMinecraft,\
\ rodolphito (explosion algorithms),\
\ grangerave (explosion algorithms),\
\ Hoboy (textures, models),\
\ Drillgon200 (effects, models, porting),\
\ Drillgon200 (effects, models),\
\ MartinTheDragon (calculator, chunk-based fallout, bendable cranes, pipe improvements, PWR sounds),\
\ Alcater (GUI textures, porting),\
\ MellowArpeggiation (new animation system, turbine sounds, sound fixes, industrial lights, conveyor wand, NBT structures),\
\ Alcater (GUI textures),\
\ MellowArpeggiation (new animation system, turbine sounds, sound fixes, industrial lights, conveyor wand, NBT structures, MSU displays),\
\ Pheo (textures, various machines, models, weapons),\
\ Vær (gas centrifuges, better worldgen, ZIRNOX, CP-1 parts, starter guide, new cyclotron, weapon animations),\
\ UFFR (RTG pellets, guns, casings, euphemium capacitor, nucleartech.wiki),\
@ -22,6 +22,7 @@ credits=HbMinecraft,\
\ Doctor17 (russian localization)),\
\ Pashtet (russian localization),\
\ 7H40 (russian localization),\
\ RayzerHan (russian localization),\
\ Bismarck (chinese localization),\
\ Creeper-banner (chinese localization),\
\ 5467864 (chinese localization),\
@ -34,8 +35,10 @@ credits=HbMinecraft,\
\ Herobrine 457985 (chinese localization),\
\ xxwinhere (chinese localization),\
\ Nycticoraxnightheron (chinese localization),\
\ NarekoMichigami810 (chinese localization),\
\ Maksymisio (polish localization)\
\ el3ctro4ndre (italian localization),\
\ Goaty1208 (italian localization),\
\ Pu-238 (Tom impact effects),\
\ Frooz (gun models),\
\ VT-6/24 (models, textures),\
@ -55,18 +58,22 @@ credits=HbMinecraft,\
\ Silly541 (config for safe ME drives),\
\ Voxelstice (OpenComputers integration, turbine spinup),\
\ BallOfEnergy1 (OpenComputers integration, RBMK and packet optimization, crate backpacks),\
\ PewPewCricket (OpenComputers integration),\
\ kelllllen (OpenComputers integration),\
\ sdddddf80 (recipe configs, chinese localization, custom machine holograms),\
\ Abel1502 (abilities GUI, optimization, crate upgrade recipes, strand caster improvements, varous tweaks),\
\ Darek505 (armor rendering compatibility fix),\
\ ranch21 (improved HUD gauges),\
\ SuperCraftAlex (tooltips)\
\ Ice-Arrow (research reactor tweaks),\
\ 245tt (anvil GUI improvements),\
\ KoblizekXD (doors),\
\ FOlkvangrField (custom machine parts),\
\ RosaTryp (centrifuge config),\
\ Toshayo (satellite loot system, project settings, gradle curse task, OpenComputers integration),\
\ Toshayo (satellite loot system, project settings, gradle curse task, OpenComputers integration, fluid counter valve),\
\ Dash (PA particle serialization fix),\
\ archiecarrot123 (armor rendering compatibility fix),\
\ mikkerlo (mining laser & builder's jetpack improvements),\
\ icomet (refactoring),\
\ martemen (project settings),\
\ OvermindDL1 (project settings),\

View File

@ -3,6 +3,7 @@ package api.hbm.block;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
@Deprecated
public interface IDrillInteraction {
/**

View File

@ -1,5 +1,6 @@
package api.hbm.block;
@Deprecated
public interface IMiningDrill {
/**

View File

@ -11,8 +11,8 @@ public interface IBatteryItem {
public void dischargeBattery(ItemStack stack, long i);
public long getCharge(ItemStack stack);
public long getMaxCharge(ItemStack stack);
public long getChargeRate();
public long getDischargeRate();
public long getChargeRate(ItemStack stack);
public long getDischargeRate(ItemStack stack);
/** Returns a string for the NBT tag name of the long storing power */
public default String getChargeTagName() {

View File

@ -2,7 +2,6 @@ package api.hbm.energymk2;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.util.Compat;
import api.hbm.energymk2.Nodespace.PowerNode;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
@ -25,7 +24,7 @@ public interface IEnergyProviderMK2 extends IEnergyHandlerMK2 {
public default void tryProvide(World world, int x, int y, int z, ForgeDirection dir) {
TileEntity te = Compat.getTileStandard(world, x, y, z);
TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z);
boolean red = false;
if(te instanceof IEnergyConductorMK2) {
@ -43,7 +42,7 @@ public interface IEnergyProviderMK2 extends IEnergyHandlerMK2 {
if(te instanceof IEnergyReceiverMK2 && te != this) {
IEnergyReceiverMK2 rec = (IEnergyReceiverMK2) te;
if(rec.canConnect(dir.getOpposite())) {
if(rec.canConnect(dir.getOpposite()) && rec.allowDirectProvision()) {
long provides = Math.min(this.getPower(), this.getProviderSpeed());
long receives = Math.min(rec.getMaxPower() - rec.getPower(), rec.getReceiverSpeed());
long toTransfer = Math.min(provides, receives);

View File

@ -3,7 +3,6 @@ package api.hbm.energymk2;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.interfaces.NotableComments;
import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.util.Compat;
import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.energymk2.Nodespace.PowerNode;
@ -31,12 +30,15 @@ public interface IEnergyReceiverMK2 extends IEnergyHandlerMK2 {
public default long getReceiverSpeed() {
return this.getMaxPower();
}
/** Whether a provider can provide power by touching the block (i.e. via proxies), bypassing the need for a network entirely */
public default boolean allowDirectProvision() { return true; }
public default void trySubscribe(World world, DirPos pos) { trySubscribe(world, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); }
public default void trySubscribe(World world, int x, int y, int z, ForgeDirection dir) {
TileEntity te = Compat.getTileStandard(world, x, y, z);
TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z);
boolean red = false;
if(te instanceof IEnergyConductorMK2) {

View File

@ -16,6 +16,7 @@ import net.minecraft.world.World;
*
* @author hbm
*/
@NotableComments
public class Nodespace {
public static final PowerNetProvider THE_POWER_PROVIDER = new PowerNetProvider();

View File

@ -78,7 +78,7 @@ public class PowerNetMK2 extends NodeNet<IEnergyReceiverMK2, IEnergyProviderMK2,
for(Pair<IEnergyReceiverMK2, Long> entry : list) {
double weight = (double) entry.getValue() / (double) (priorityDemand);
long toSend = (long) Math.max(toTransfer * weight, 0D);
long toSend = (long) Math.min(Math.max(toTransfer * weight, 0D), entry.getValue());
energyUsed += (toSend - entry.getKey().transferPower(toSend)); //leftovers are subtracted from the intended amount to use up
}

View File

@ -5,7 +5,6 @@ import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.uninos.GenNode;
import com.hbm.uninos.UniNodespace;
import com.hbm.util.Compat;
import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority;
@ -28,7 +27,7 @@ public interface IFluidReceiverMK2 extends IFluidUserMK2 {
public default void trySubscribe(FluidType type, World world, int x, int y, int z, ForgeDirection dir) {
TileEntity te = Compat.getTileStandard(world, x, y, z);
TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z);
boolean red = false;
if(te instanceof IFluidConnectorMK2) {

View File

@ -6,7 +6,6 @@ import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.uninos.GenNode;
import com.hbm.uninos.UniNodespace;
import com.hbm.util.Compat;
import com.hbm.util.fauxpointtwelve.DirPos;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
@ -30,7 +29,7 @@ public interface IFluidStandardSenderMK2 extends IFluidProviderMK2 {
public default void tryProvide(FluidType type, int pressure, World world, int x, int y, int z, ForgeDirection dir) {
TileEntity te = Compat.getTileStandard(world, x, y, z);
TileEntity te = TileAccessCache.getTileOrCache(world, x, y, z);
boolean red = false;
if(te instanceof IFluidConnectorMK2) {

View File

@ -1,7 +1,55 @@
package api.hbm.tile;
import java.util.HashMap;
import java.util.Map;
import com.hbm.util.Compat;
import com.hbm.util.Tuple.Quartet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
/** For anything that should be removed off networks when considered unloaded, only affects providers and receivers, not links. Must not necessarily be a tile. */
public interface ILoadedTile {
public boolean isLoaded();
// should we gunk this into the API? no, but i don't care
public static class TileAccessCache {
public static Map<Quartet, TileAccessCache> cache = new HashMap();
public static int NULL_CACHE = 20;
public static int NONNULL_CACHE = 60;
public TileEntity tile;
public long expiresOn;
public TileAccessCache(TileEntity tile, long expiresOn) {
this.tile = tile;
this.expiresOn = expiresOn;
}
public boolean hasExpired(long worldTime) {
if(tile != null && tile.isInvalid()) return true;
if(worldTime >= expiresOn) return true;
if(tile instanceof ILoadedTile && !((ILoadedTile) tile).isLoaded()) return true;
return false;
}
public static Quartet publicCumRag = new Quartet(0, 0, 0, 0);
public static TileEntity getTileOrCache(World world, int x, int y, int z) {
publicCumRag.mangle(x, y, z, world.provider.dimensionId);
TileAccessCache cache = TileAccessCache.cache.get(publicCumRag);
if(cache == null || cache.hasExpired(world.getTotalWorldTime())) {
TileEntity tile = Compat.getTileStandard(world, x, y, z);
cache = new TileAccessCache(tile, world.getTotalWorldTime() + (tile == null ? NULL_CACHE : NONNULL_CACHE));
TileAccessCache.cache.put(publicCumRag.clone(), cache);
return tile;
} else {
return cache.tile;
}
}
}
}

View File

@ -5,7 +5,7 @@ import com.hbm.handler.ThreeInts;
import com.hbm.interfaces.ICopiable;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.IPersistentNBT;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
@ -37,7 +37,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight, ICopiable, INBTTransformable {
public abstract class BlockDummyable extends BlockContainer implements ICustomBlockHighlight, ICopiable, INBTBlockTransformable {
public BlockDummyable(Material mat) {
super(mat);
@ -565,6 +565,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl
@Override
public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) {
int[] pos = findCore(world, x, y, z);
if(pos == null) return;
TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]);
if (tile instanceof ICopiable)
((ICopiable) tile).pasteSettings(nbt, index, world, player, pos[0], pos[1], pos[2]);
@ -590,7 +591,7 @@ public abstract class BlockDummyable extends BlockContainer implements ICustomBl
meta -= extra;
}
meta = INBTTransformable.transformMetaDeco(meta, coordBaseMode);
meta = INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
if(isOffset) {
meta += offset;

View File

@ -80,4 +80,5 @@ public class BlockEnums {
FLUORESCENT,
HALOGEN
}
}

View File

@ -8,6 +8,14 @@ import com.hbm.blocks.generic.*;
import com.hbm.blocks.generic.BlockHazard.ExtDisplayEffect;
import com.hbm.blocks.machine.*;
import com.hbm.blocks.machine.albion.*;
import com.hbm.blocks.machine.fusion.MachineFusionBoiler;
import com.hbm.blocks.machine.fusion.MachineFusionBreeder;
import com.hbm.blocks.machine.fusion.MachineFusionCollector;
import com.hbm.blocks.machine.fusion.MachineFusionCoupler;
import com.hbm.blocks.machine.fusion.MachineFusionKlystron;
import com.hbm.blocks.machine.fusion.MachineFusionKlystronCreative;
import com.hbm.blocks.machine.fusion.MachineFusionMHDT;
import com.hbm.blocks.machine.fusion.MachineFusionTorus;
import com.hbm.blocks.machine.pile.*;
import com.hbm.blocks.machine.rbmk.*;
import com.hbm.blocks.network.*;
@ -22,6 +30,8 @@ import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.DoorDecl;
import com.hbm.tileentity.machine.storage.TileEntityFileCabinet;
import com.hbm.util.Compat;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFalling;
@ -147,8 +157,6 @@ public class ModBlocks {
public static Block ore_bedrock_oil;
public static Block ore_lignite;
public static Block ore_asbestos;
@Deprecated public static Block ore_coal_oil;
@Deprecated public static Block ore_coal_oil_burning;
public static Block ore_tikite;
@ -245,11 +253,6 @@ public class ModBlocks {
public static Block block_slag;
public static Block block_australium;
public static Block block_weidanium;
public static Block block_reiium;
public static Block block_unobtainium;
public static Block block_daffergon;
public static Block block_verticium;
public static Block block_cap;
@ -341,6 +344,7 @@ public class ModBlocks {
public static Block brick_fire;
public static Block lightstone;
public static Block brick_forgotten;
public static Block concrete_slab;
public static Block concrete_double_slab;
@ -427,30 +431,30 @@ public class ModBlocks {
public static Block steel_grate;
public static Block steel_grate_wide;
public static Block deco_pipe;
public static Block deco_pipe_rusted;
public static Block deco_pipe_green;
public static Block deco_pipe_green_rusted;
public static Block deco_pipe_red;
public static Block deco_pipe_marked;
public static Block deco_pipe_rim;
public static Block deco_pipe_rim_rusted;
public static Block deco_pipe_rim_green;
public static Block deco_pipe_rim_green_rusted;
public static Block deco_pipe_rim_red;
public static Block deco_pipe_rim_marked;
public static Block deco_pipe_framed;
public static Block deco_pipe_framed_rusted;
public static Block deco_pipe_framed_green;
public static Block deco_pipe_framed_green_rusted;
public static Block deco_pipe_framed_red;
public static Block deco_pipe_framed_marked;
public static Block deco_pipe_quad;
public static Block deco_pipe_quad_rusted;
public static Block deco_pipe_quad_green;
public static Block deco_pipe_quad_green_rusted;
public static Block deco_pipe_quad_red;
public static Block deco_pipe_quad_marked;
@Deprecated public static Block deco_pipe;
@Deprecated public static Block deco_pipe_rusted;
@Deprecated public static Block deco_pipe_green;
@Deprecated public static Block deco_pipe_green_rusted;
@Deprecated public static Block deco_pipe_red;
@Deprecated public static Block deco_pipe_marked;
@Deprecated public static Block deco_pipe_rim;
@Deprecated public static Block deco_pipe_rim_rusted;
@Deprecated public static Block deco_pipe_rim_green;
@Deprecated public static Block deco_pipe_rim_green_rusted;
@Deprecated public static Block deco_pipe_rim_red;
@Deprecated public static Block deco_pipe_rim_marked;
@Deprecated public static Block deco_pipe_framed;
@Deprecated public static Block deco_pipe_framed_rusted;
@Deprecated public static Block deco_pipe_framed_green;
@Deprecated public static Block deco_pipe_framed_green_rusted;
@Deprecated public static Block deco_pipe_framed_red;
@Deprecated public static Block deco_pipe_framed_marked;
@Deprecated public static Block deco_pipe_quad;
@Deprecated public static Block deco_pipe_quad_rusted;
@Deprecated public static Block deco_pipe_quad_green;
@Deprecated public static Block deco_pipe_quad_green_rusted;
@Deprecated public static Block deco_pipe_quad_red;
@Deprecated public static Block deco_pipe_quad_marked;
public static Block broadcaster_pc;
public static Block geiger;
@ -458,11 +462,7 @@ public class ModBlocks {
public static Block fence_metal;
public static Block sand_boron;
public static Block sand_lead;
public static Block sand_uranium;
public static Block sand_polonium;
public static Block sand_quartz;
public static Block sand_mix;
public static Block ash_digamma;
public static Block glass_boron;
public static Block glass_lead;
@ -617,15 +617,7 @@ public class ModBlocks {
public static Block tesla;
public static Block sat_mapper;
public static Block sat_scanner;
public static Block sat_radar;
public static Block sat_laser;
public static Block sat_foeq;
public static Block sat_resonator;
public static Block sat_dock;
public static Block soyuz_capsule;
public static Block crate_supply;
@ -728,10 +720,6 @@ public class ModBlocks {
public static Block hadron_coil_chlorophyte;
public static Block hadron_coil_mese;
public static Block hadron_power;
public static Block hadron_power_10m;
public static Block hadron_power_100m;
public static Block hadron_power_1g;
public static Block hadron_power_10g;
public static Block hadron_diode;
public static Block hadron_analysis;
public static Block hadron_analysis_glass;
@ -747,25 +735,24 @@ public class ModBlocks {
public static Block machine_electric_furnace_off;
public static Block machine_electric_furnace_on;
public static Block machine_microwave;
//public static Block machine_deuterium;
public static Block machine_battery_socket;
public static Block machine_battery_redd;
@Deprecated public static Block machine_battery_potato;
@Deprecated public static Block machine_battery;
@Deprecated public static Block machine_lithium_battery;
@Deprecated public static Block machine_schrabidium_battery;
@Deprecated public static Block machine_dineutronium_battery;
@Deprecated public static Block machine_fensu;
public static Block machine_battery_potato;
public static Block machine_battery;
public static Block machine_lithium_battery;
public static Block machine_schrabidium_battery;
public static Block machine_dineutronium_battery;
public static Block machine_fensu;
public static final int guiID_machine_fensu = 99;
public static Block capacitor_bus;
public static Block capacitor_copper;
public static Block capacitor_gold;
public static Block capacitor_niobium;
public static Block capacitor_tantalium;
public static Block capacitor_schrabidate;
@Deprecated public static Block capacitor_bus;
public static Block capacitor_copper; // neat for structures
@Deprecated public static Block capacitor_gold;
@Deprecated public static Block capacitor_niobium;
@Deprecated public static Block capacitor_tantalium;
@Deprecated public static Block capacitor_schrabidate;
public static Block machine_wood_burner;
@ -774,6 +761,7 @@ public class ModBlocks {
public static Block red_cable_classic;
public static Block red_cable_paintable;
public static Block red_cable_gauge;
public static Block red_cable_box;
public static Block red_connector;
public static Block red_pylon;
public static Block red_pylon_medium_wood;
@ -792,8 +780,10 @@ public class ModBlocks {
public static Block fluid_duct_gauge;
public static Block fluid_duct_exhaust;
public static Block fluid_duct_paintable_block_exhaust;
public static Block pipe_anchor;
public static Block fluid_valve;
public static Block fluid_switch;
public static Block fluid_counter_valve;
public static Block fluid_pump;
public static Block machine_drain;
public static Block radio_torch_sender;
@ -807,7 +797,6 @@ public class ModBlocks {
public static Block conveyor;
public static Block conveyor_express;
//public static Block conveyor_classic;
public static Block conveyor_double;
public static Block conveyor_triple;
public static Block conveyor_chute;
@ -832,7 +821,6 @@ public class ModBlocks {
public static Block pneumatic_tube_paintable;
public static Block fan;
public static Block piston_inserter;
public static Block chain;
@ -851,8 +839,8 @@ public class ModBlocks {
public static Block trapdoor_steel;
public static Block barrel_plastic;
public static Block barrel_corroded;
public static Block barrel_iron;
@Deprecated public static Block barrel_corroded;
@Deprecated public static Block barrel_iron;
public static Block barrel_steel;
public static Block barrel_tcalloy;
public static Block barrel_antimatter;
@ -868,8 +856,7 @@ public class ModBlocks {
public static Block struct_launcher_core;
public static Block struct_launcher_core_large;
public static Block struct_soyuz_core;
public static Block struct_iter_core;
public static Block struct_plasma_core;
public static Block struct_torus_core;
public static Block struct_watz_core;
public static Block struct_icf_core;
@ -899,15 +886,22 @@ public class ModBlocks {
public static Block pwr_controller;
public static Block pwr_block;
public static Block fusion_conductor;
public static Block fusion_center;
public static Block fusion_motor;
public static Block fusion_heater;
public static Block fusion_hatch;
public static Block plasma;
@Deprecated public static Block fusion_heater;
@Deprecated public static Block fusion_hatch;
@Deprecated public static Block plasma; // only actually used by the old plasma grenade, will die with the grenade rework
public static Block iter;
public static Block plasma_heater;
@Deprecated public static Block iter;
@Deprecated public static Block plasma_heater;
public static Block fusion_component;
public static Block fusion_torus;
public static Block fusion_klystron;
public static Block fusion_klystron_creative;
public static Block fusion_breeder;
public static Block fusion_collector;
public static Block fusion_boiler;
public static Block fusion_mhdt;
public static Block fusion_coupler;
public static Block machine_icf_press;
public static Block icf_component;
@ -936,8 +930,6 @@ public class ModBlocks {
public static Block machine_converter_he_rf;
public static Block machine_converter_rf_he;
public static Block machine_schrabidium_transmutator;
public static Block machine_diesel;
public static Block machine_combustion_engine;
@ -948,8 +940,6 @@ public class ModBlocks {
public static Block field_disturber;
public static Block machine_rtg_grey;
public static Block machine_amgen;
public static Block machine_geo;
public static Block machine_minirtg;
public static Block machine_powerrtg;
public static Block machine_radiolysis;
@ -999,6 +989,7 @@ public class ModBlocks {
public static Block machine_excavator;
public static Block machine_ore_slopper;
public static Block machine_annihilator;
public static Block machine_autosaw;
public static Block machine_mining_laser;
@ -1007,6 +998,8 @@ public class ModBlocks {
@Deprecated public static Block machine_assembler;
public static Block machine_assembly_machine;
@Deprecated public static Block machine_assemfac;
public static Block machine_assembly_factory;
public static Block machine_precass;
public static Block machine_arc_welder;
public static Block machine_soldering_station;
public static Block machine_arc_furnace;
@ -1063,9 +1056,6 @@ public class ModBlocks {
public static Block machine_controller;
public static Block machine_spp_bottom;
public static Block machine_spp_top;
public static Block radiobox;
public static Block radiorec;
@ -1176,10 +1166,11 @@ public class ModBlocks {
public static Block gas_explosive;
public static Block vacuum;
public static Block absorber;
public static Block absorber_red;
public static Block absorber_green;
public static Block absorber_pink;
@Deprecated public static Block absorber;
@Deprecated public static Block absorber_red;
@Deprecated public static Block absorber_green;
@Deprecated public static Block absorber_pink;
public static Block rad_absorber;
public static Block decon;
public static Block mud_block;
@ -1248,6 +1239,8 @@ public class ModBlocks {
public static Block wand_loot;
public static Block wand_jigsaw;
public static Block wand_logic;
public static Block wand_tandem;
public static Block wand_structure;
public static Block logic_block;
@ -1277,8 +1270,6 @@ public class ModBlocks {
ore_beryllium = new BlockGeneric(Material.rock).setBlockName("ore_beryllium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_beryllium");
ore_lignite = new BlockOre(Material.rock).setBlockName("ore_lignite").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_lignite");
ore_asbestos = new BlockOutgas(Material.rock, true, 5, true).setBlockName("ore_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_asbestos");
ore_coal_oil = new BlockCoalOil(Material.rock).setBlockName("ore_coal_oil").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_coal_oil");
ore_coal_oil_burning = new BlockCoalBurning(Material.rock).setBlockName("ore_coal_oil_burning").setCreativeTab(MainRegistry.blockTab).setLightLevel(10F/15F).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":ore_coal_oil_burning");
cluster_iron = new BlockCluster(Material.rock).setBlockName("cluster_iron").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":cluster_iron");
cluster_titanium = new BlockCluster(Material.rock).setBlockName("cluster_titanium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":cluster_titanium");
@ -1457,11 +1448,6 @@ public class ModBlocks {
block_slag = new BlockSlag(Material.rock).setBlockName("block_slag").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeStone).setHardness(2.0F).setBlockTextureName(RefStrings.MODID + ":block_slag");
block_australium = new BlockBeaconable(Material.iron).setBlockName("block_australium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_australium");
block_weidanium = new BlockBeaconable(Material.iron).setBlockName("block_weidanium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated");
block_reiium = new BlockBeaconable(Material.iron).setBlockName("block_reiium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated");
block_unobtainium = new BlockBeaconable(Material.iron).setBlockName("block_unobtainium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated");
block_daffergon = new BlockBeaconable(Material.iron).setBlockName("block_daffergon").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated");
block_verticium = new BlockBeaconable(Material.iron).setBlockName("block_verticium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_deprecated");
block_cap = new BlockCap().setBlockName("block_cap").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F);
@ -1555,6 +1541,7 @@ public class ModBlocks {
reinforced_ducrete = new BlockGeneric(Material.rock).setBlockName("reinforced_ducrete").setCreativeTab(MainRegistry.blockTab).setHardness(20.0F).setResistance(1000.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_ducrete");
lightstone = new BlockLightstone(Material.rock, LightstoneType.class, true, true).setBlockName("lightstone").setCreativeTab(MainRegistry.blockTab).setHardness(2F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":lightstone");
brick_forgotten = new BlockPillar(Material.rock, RefStrings.MODID + ":brick_forgotten_top").setBlockName("brick_forgotten").setBlockUnbreakable().setResistance(666_666F).setBlockTextureName(RefStrings.MODID + ":brick_forgotten");
concrete_slab = new BlockMultiSlab(null, Material.rock, concrete_smooth, concrete, concrete_asbestos, ducrete_smooth, ducrete, asphalt).setBlockName("concrete_slab").setCreativeTab(MainRegistry.blockTab);
concrete_double_slab = new BlockMultiSlab(concrete_slab, Material.rock, concrete_smooth, concrete, concrete_asbestos, ducrete_smooth, ducrete, asphalt).setBlockName("concrete_double_slab").setCreativeTab(MainRegistry.blockTab);
@ -1636,6 +1623,7 @@ public class ModBlocks {
steel_grate = new BlockGrate(Material.iron).setBlockName("steel_grate").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F);
steel_grate_wide = new BlockGrate(Material.iron).setBlockName("steel_grate_wide").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F);
//TODO: dear god
deco_pipe = new BlockPipe(Material.iron, RefStrings.MODID + ":pipe_side", 0).setBlockName("deco_pipe").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":pipe_top");
deco_pipe_rusted = new BlockPipe(Material.iron, RefStrings.MODID + ":pipe_side_rusty", 0).setBlockName("deco_pipe_rusted").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":pipe_top_rusty");
deco_pipe_green = new BlockPipe(Material.iron, RefStrings.MODID + ":pipe_side_green", 0).setBlockName("deco_pipe_green").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":pipe_top_green");
@ -1668,11 +1656,7 @@ public class ModBlocks {
fence_metal = new BlockMetalFence(Material.iron).setBlockName("fence_metal").setCreativeTab(MainRegistry.machineTab).setHardness(15.0F).setResistance(0.25F).setBlockTextureName(RefStrings.MODID + ":fence_metal");
ash_digamma = new BlockAshes(Material.sand).setBlockName("ash_digamma").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setResistance(150.0F).setBlockTextureName(RefStrings.MODID + ":ash_digamma");
sand_boron = new BlockFalling(Material.sand).setBlockName("sand_boron").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_boron");
sand_lead = new BlockFalling(Material.sand).setBlockName("sand_lead").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_lead");
sand_uranium = new BlockFalling(Material.sand).setBlockName("sand_uranium").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_uranium");
sand_polonium = new BlockFalling(Material.sand).setBlockName("sand_polonium").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_polonium");
sand_quartz = new BlockFalling(Material.sand).setBlockName("sand_quartz").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_quartz");
sand_mix = new BlockNTMSand(Material.sand).setBlockName("sand_mix").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F);
glass_boron = new BlockNTMGlassCT(0, RefStrings.MODID + ":glass_boron", Material.glass).setBlockName("glass_boron").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.machineTab).setHardness(0.3F);
glass_lead = new BlockNTMGlassCT(0, RefStrings.MODID + ":glass_lead", Material.glass).setBlockName("glass_lead").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.machineTab).setHardness(0.3F);
glass_uranium = new BlockNTMGlassCT(1, RefStrings.MODID + ":glass_uranium", Material.glass).setBlockName("glass_uranium").setLightLevel(5F/15F).setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.machineTab).setHardness(0.3F);
@ -1824,9 +1808,8 @@ public class ModBlocks {
machine_rotary_furnace = new MachineRotaryFurnace(Material.iron).setBlockName("machine_rotary_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire");
machine_crystallizer = new MachineCrystallizer(Material.iron).setBlockName("machine_crystallizer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_crystallizer");
machine_uf6_tank = new MachineUF6Tank(Material.iron).setBlockName("machine_uf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_puf6_tank = new MachinePuF6Tank(Material.iron).setBlockName("machine_puf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_uf6_tank = new MachineUF6Tank(Material.iron).setBlockName("machine_uf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
machine_puf6_tank = new MachinePuF6Tank(Material.iron).setBlockName("machine_puf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
machine_reactor_breeding = new MachineReactorBreeding(Material.iron).setBlockName("machine_reactor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_reactor");
@ -1840,13 +1823,13 @@ public class ModBlocks {
machine_exposure_chamber = new MachineExposureChamber(Material.iron).setBlockName("machine_exposure_chamber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_aluminium");
machine_radgen = new MachineRadGen(Material.iron).setBlockName("machine_radgen").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_radgen");
hadron_plating = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating");
hadron_plating_blue = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_blue").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_blue");
hadron_plating_black = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_black").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_black");
hadron_plating_yellow = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_yellow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_yellow");
hadron_plating_striped = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_striped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_striped");
hadron_plating_voltz = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_voltz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_voltz");
hadron_plating_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_plating_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_plating_glass");
hadron_plating = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating");
hadron_plating_blue = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_blue").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_blue");
hadron_plating_black = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_black").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_black");
hadron_plating_yellow = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_yellow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_yellow");
hadron_plating_striped = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_striped").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_striped");
hadron_plating_voltz = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_voltz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_voltz");
hadron_plating_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_plating_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_plating_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_plating_glass");
hadron_coil_alloy = new BlockHadronCoil(Material.iron, 10).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_alloy").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_alloy");
hadron_coil_gold = new BlockHadronCoil(Material.iron, 25).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_gold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_gold");
hadron_coil_neodymium = new BlockHadronCoil(Material.iron, 50).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_neodymium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_neodymium");
@ -1856,16 +1839,12 @@ public class ModBlocks {
hadron_coil_starmetal = new BlockHadronCoil(Material.iron, 1000).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_starmetal").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_starmetal");
hadron_coil_chlorophyte = new BlockHadronCoil(Material.iron, 2500).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_chlorophyte").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_chlorophyte");
hadron_coil_mese = new BlockHadronCoil(Material.iron, 10000).setStepSound(Block.soundTypeMetal).setBlockName("hadron_coil_mese").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_coil_mese");
hadron_power = new BlockHadronPower(Material.iron, 1000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_10m = new BlockHadronPower(Material.iron, 10000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_100m = new BlockHadronPower(Material.iron, 100000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_100m").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_1g = new BlockHadronPower(Material.iron, 1000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_1g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_power_10g = new BlockHadronPower(Material.iron, 10000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power_10g").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_diode = new BlockHadronDiode(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_diode").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
hadron_analysis = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_analysis");
hadron_analysis_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_analysis_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_analysis_glass");
hadron_access = new BlockHadronAccess(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_access").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_access");
hadron_core = new BlockHadronCore(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":hadron_core");
hadron_power = new BlockHadronPower(Material.iron, 10000000000L).setStepSound(Block.soundTypeMetal).setBlockName("hadron_power").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_power");
hadron_diode = new BlockHadronDiode(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_diode").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
hadron_analysis = new BlockHadronPlating(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_analysis");
hadron_analysis_glass = new BlockNTMGlass(0, RefStrings.MODID + ":hadron_analysis_glass", Material.iron, true).setStepSound(Block.soundTypeMetal).setBlockName("hadron_analysis_glass").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_analysis_glass");
hadron_access = new BlockHadronAccess(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_access").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_access");
hadron_core = new BlockHadronCore(Material.iron).setStepSound(Block.soundTypeMetal).setBlockName("hadron_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":hadron_core");
pa_source = new BlockPASource().setStepSound(Block.soundTypeMetal).setBlockName("pa_source").setHardness(5.0F).setResistance(10.0F);
pa_beamline = new BlockPABeamline().setStepSound(Block.soundTypeMetal).setBlockName("pa_beamline").setHardness(5.0F).setResistance(10.0F);
@ -1879,19 +1858,22 @@ public class ModBlocks {
machine_arc_furnace = new MachineArcFurnaceLarge().setBlockName("machine_arc_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_microwave = new MachineMicrowave(Material.iron).setBlockName("machine_microwave").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_microwave");
machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_battery = new MachineBattery(Material.iron, 1_000_000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_lithium_battery = new MachineBattery(Material.iron, 50_000_000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_schrabidium_battery = new MachineBattery(Material.iron, 25_000_000_000L).setBlockName("machine_schrabidium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_dineutronium_battery = new MachineBattery(Material.iron, 1_000_000_000_000L).setBlockName("machine_dineutronium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
machine_fensu = new MachineFENSU(Material.iron).setBlockName("machine_fensu").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_fensu");
machine_battery_socket = new MachineBatterySocket().setBlockName("machine_battery_socket").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_battery_redd = new MachineBatteryREDD().setBlockName("machine_battery_redd").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_battery_potato = new MachineBattery(Material.iron, 10_000).setBlockName("machine_battery_potato").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
machine_battery = new MachineBattery(Material.iron, 1_000_000).setBlockName("machine_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
machine_lithium_battery = new MachineBattery(Material.iron, 50_000_000).setBlockName("machine_lithium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
machine_schrabidium_battery = new MachineBattery(Material.iron, 25_000_000_000L).setBlockName("machine_schrabidium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
machine_dineutronium_battery = new MachineBattery(Material.iron, 1_000_000_000_000L).setBlockName("machine_dineutronium_battery").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
machine_fensu = new MachineFENSU(Material.iron).setBlockName("machine_fensu").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":machine_fensu");
capacitor_bus = new MachineCapacitorBus(Material.iron).setBlockName("capacitor_bus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
capacitor_bus = new MachineCapacitorBus(Material.iron).setBlockName("capacitor_bus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null);
capacitor_copper = new MachineCapacitor(Material.iron, 1_000_000L, "copper").setBlockName("capacitor_copper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper");
capacitor_gold = new MachineCapacitor(Material.iron, 5_000_000L, "gold").setBlockName("capacitor_gold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName("gold_block");
capacitor_niobium = new MachineCapacitor(Material.iron, 25_000_000L, "niobium").setBlockName("capacitor_niobium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_niobium");
capacitor_tantalium = new MachineCapacitor(Material.iron, 150_000_000L, "tantalium").setBlockName("capacitor_tantalium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_tantalium");
capacitor_schrabidate = new MachineCapacitor(Material.iron, 50_000_000_000L, "schrabidate").setBlockName("capacitor_schrabidate").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_schrabidate");
capacitor_gold = new MachineCapacitor(Material.iron, 5_000_000L, "gold").setBlockName("capacitor_gold").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName("gold_block");
capacitor_niobium = new MachineCapacitor(Material.iron, 25_000_000L, "niobium").setBlockName("capacitor_niobium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_niobium");
capacitor_tantalium = new MachineCapacitor(Material.iron, 150_000_000L, "tantalium").setBlockName("capacitor_tantalium").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_tantalium");
capacitor_schrabidate = new MachineCapacitor(Material.iron, 50_000_000_000L, "schrabidate").setBlockName("capacitor_schrabidate").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_schrabidate");
machine_wood_burner = new MachineWoodBurner(Material.iron).setBlockName("machine_wood_burner").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_diesel = new MachineDiesel().setBlockName("machine_diesel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -1904,8 +1886,6 @@ public class ModBlocks {
field_disturber = new MachineFieldDisturber().setBlockName("field_disturber").setHardness(5.0F).setResistance(200.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":field_disturber");
machine_rtg_grey = new MachineRTG(Material.iron).setBlockName("machine_rtg_grey").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg");
machine_amgen = new MachineAmgen(Material.iron).setBlockName("machine_amgen").setHardness(5.0F).setResistance(10.0F);
machine_geo = new MachineAmgen(Material.iron).setBlockName("machine_geo").setHardness(5.0F).setResistance(10.0F);
machine_minirtg = new MachineMiniRTG(Material.iron).setBlockName("machine_minirtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg_cell");
machine_powerrtg = new MachineMiniRTG(Material.iron).setBlockName("machine_powerrtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg_polonium");
machine_radiolysis = new MachineRadiolysis(Material.iron).setBlockName("machine_radiolysis").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine");
@ -1916,6 +1896,7 @@ public class ModBlocks {
red_cable_classic = new BlockCable(Material.iron).setBlockName("red_cable_classic").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_cable_classic");
red_cable_paintable = new BlockCablePaintable().setBlockName("red_cable_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
red_cable_gauge = new BlockCableGauge().setBlockName("red_cable_gauge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
red_cable_box = new PowerCableBox(Material.iron).setBlockName("red_cable_box").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fluid_duct_box");
red_connector = new ConnectorRedWire(Material.iron).setBlockName("red_connector").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_connector");
red_pylon = new PylonRedWire(Material.iron).setBlockName("red_pylon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon");
red_pylon_medium_wood = new PylonMedium(Material.wood).setBlockName("red_pylon_medium_wood").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":red_pylon");
@ -1932,10 +1913,12 @@ public class ModBlocks {
fluid_duct_box = new FluidDuctBox(Material.iron).setBlockName("fluid_duct_box").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fluid_duct_box");
fluid_duct_exhaust = new FluidDuctBoxExhaust(Material.iron).setBlockName("fluid_duct_exhaust").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fluid_duct_box");
fluid_duct_paintable_block_exhaust = new FluidDuctPaintableBlockExhaust().setBlockName("fluid_duct_paintable_block_exhaust").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
pipe_anchor = new FluidPipeAnchor().setBlockName("pipe_anchor").setStepSound(ModSoundTypes.pipe).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fluid_duct_paintable = new FluidDuctPaintable().setBlockName("fluid_duct_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
fluid_duct_gauge = new FluidDuctGauge().setBlockName("fluid_duct_gauge").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
fluid_valve = new FluidValve(Material.iron).setBlockName("fluid_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
fluid_switch = new FluidSwitch(Material.iron).setBlockName("fluid_switch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
fluid_counter_valve = new FluidCounterValve(Material.iron).setBlockName("fluid_counter_valve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
fluid_pump = new FluidPump(Material.iron).setBlockName("fluid_pump").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_drain = new MachineDrain(Material.iron).setBlockName("machine_drain").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":concrete");
radio_torch_sender = new RadioTorchSender().setBlockName("radio_torch_sender").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
@ -1989,8 +1972,8 @@ public class ModBlocks {
trapdoor_steel = new BlockNTMTrapdoor(Material.iron).setBlockName("trapdoor_steel").setHardness(3F).setResistance(8.0F).setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":trapdoor_steel");
barrel_plastic = new BlockFluidBarrel(Material.iron, 12000).setBlockName("barrel_plastic").setStepSound(Block.soundTypeStone).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_plastic");
barrel_corroded = new BlockFluidBarrel(Material.iron, 6000).setBlockName("barrel_corroded").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_corroded");
barrel_iron = new BlockFluidBarrel(Material.iron, 8000).setBlockName("barrel_iron").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_iron");
barrel_corroded = new BlockFluidBarrel(Material.iron, 6000).setBlockName("barrel_corroded").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":barrel_corroded");
barrel_iron = new BlockFluidBarrel(Material.iron, 8000).setBlockName("barrel_iron").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":barrel_iron");
barrel_steel = new BlockFluidBarrel(Material.iron, 16000).setBlockName("barrel_steel").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_steel");
barrel_tcalloy = new BlockFluidBarrel(Material.iron, 24000).setBlockName("barrel_tcalloy").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_tcalloy");
barrel_antimatter = new BlockFluidBarrel(Material.iron, 16000).setBlockName("barrel_antimatter").setStepSound(Block.soundTypeMetal).setHardness(2.0F).setResistance(5.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":barrel_antimatter");
@ -2011,8 +1994,7 @@ public class ModBlocks {
struct_launcher_core = new BlockStruct(Material.iron).setBlockName("struct_launcher_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":struct_launcher_core");
struct_launcher_core_large = new BlockStruct(Material.iron).setBlockName("struct_launcher_core_large").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":struct_launcher_core_large");
struct_soyuz_core = new BlockSoyuzStruct(Material.iron).setBlockName("struct_soyuz_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":struct_soyuz_core");
struct_iter_core = new BlockITERStruct(Material.iron).setBlockName("struct_iter_core").setLightLevel(1F).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":struct_iter_core");
struct_plasma_core = new BlockPlasmaStruct(Material.iron).setBlockName("struct_plasma_core").setLightLevel(1F).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":struct_plasma_core");
struct_torus_core = new BlockFusionTorusStruct(Material.iron).setBlockName("struct_torus_core").setLightLevel(1F).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":struct_torus_core");
struct_watz_core = new BlockWatzStruct(Material.iron).setBlockName("struct_watz_core").setLightLevel(1F).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":struct_watz_core");
struct_icf_core = new BlockICFStruct(Material.iron).setBlockName("struct_icf_core").setLightLevel(1F).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":struct_icf_core");
@ -2042,14 +2024,21 @@ public class ModBlocks {
pwr_controller = new MachinePWRController(Material.iron).setBlockName("pwr_controller").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_casing_blank");
pwr_block = new BlockPWR(Material.iron).setBlockName("pwr_block").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pwr_block");
fusion_conductor = new BlockToolConversionPillar(Material.iron).addVariant("_welded").setBlockName("fusion_conductor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fusion_conductor");
fusion_center = new BlockPillar(Material.iron, RefStrings.MODID + ":fusion_center_top_alt").setBlockName("fusion_center").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fusion_center_side_alt");
fusion_motor = new BlockPillar(Material.iron, RefStrings.MODID + ":fusion_motor_top_alt").setBlockName("fusion_motor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fusion_motor_side_alt");
fusion_heater = new BlockPillar(Material.iron, RefStrings.MODID + ":fusion_heater_top").setBlockName("fusion_heater").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fusion_heater_side");
fusion_hatch = new FusionHatch(Material.iron).setBlockName("fusion_hatch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fusion_hatch");
plasma = new BlockPlasma(Material.iron).setBlockName("plasma").setHardness(5.0F).setResistance(6000.0F).setLightLevel(1.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":plasma");
iter = new MachineITER().setBlockName("iter").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":iter");
plasma_heater = new MachinePlasmaHeater().setBlockName("plasma_heater").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":plasma_heater");
fusion_heater = new BlockPillar(Material.iron, RefStrings.MODID + ":fusion_heater_top").setBlockName("fusion_heater").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_heater_side");
fusion_hatch = new FusionHatch(Material.iron).setBlockName("fusion_hatch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":fusion_hatch");
plasma = new BlockPlasma(Material.iron).setBlockName("plasma").setHardness(5.0F).setResistance(6000.0F).setLightLevel(1.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":plasma");
iter = new MachineITER().setBlockName("iter").setHardness(5.0F).setResistance(60.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":iter");
plasma_heater = new MachinePlasmaHeater().setBlockName("plasma_heater").setHardness(5.0F).setResistance(60.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":plasma_heater");
fusion_component = new BlockFusionComponent().setBlockName("fusion_component").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fusion_component");
fusion_torus = new MachineFusionTorus().setBlockName("fusion_torus").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_klystron = new MachineFusionKlystron().setBlockName("fusion_klystron").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_klystron_creative = new MachineFusionKlystronCreative().setBlockName("fusion_klystron_creative").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_breeder = new MachineFusionBreeder().setBlockName("fusion_breeder").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_collector = new MachineFusionCollector().setBlockName("fusion_collector").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_boiler = new MachineFusionBoiler().setBlockName("fusion_boiler").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_mhdt = new MachineFusionMHDT().setBlockName("fusion_mhdt").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
fusion_coupler = new MachineFusionCoupler().setBlockName("fusion_coupler").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_icf_press = new MachineICFPress().setBlockName("machine_icf_press").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
icf = new MachineICF().setBlockName("icf").setHardness(5.0F).setResistance(60.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -2127,13 +2116,6 @@ public class ModBlocks {
launch_table = new LaunchTable(Material.iron).setBlockName("launch_table").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":launch_table");
soyuz_launcher = new SoyuzLauncher(Material.iron).setBlockName("soyuz_launcher").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":soyuz_launcher");
sat_mapper = new DecoBlock(Material.iron).setBlockName("sat_mapper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":sat_mapper");
sat_radar = new DecoBlock(Material.iron).setBlockName("sat_radar").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":sat_radar");
sat_scanner = new DecoBlock(Material.iron).setBlockName("sat_scanner").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":sat_scanner");
sat_laser = new DecoBlock(Material.iron).setBlockName("sat_laser").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":sat_laser");
sat_foeq = new DecoBlock(Material.iron).setBlockName("sat_foeq").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":sat_foeq");
sat_resonator = new DecoBlock(Material.iron).setBlockName("sat_resonator").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":sat_resonator");
sat_dock = new MachineSatDock(Material.iron).setBlockName("sat_dock").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":sat_dock");
soyuz_capsule = new SoyuzCapsule(Material.iron).setBlockName("soyuz_capsule").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":soyuz_capsule");
crate_supply = new BlockSupplyCrate(Material.wood).setBlockName("crate_supply").setStepSound(Block.soundTypeWood).setHardness(1.0F).setResistance(2.5F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":crate_can");
@ -2181,10 +2163,10 @@ public class ModBlocks {
book_guide = new Guide(Material.iron).setBlockName("book_guide").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.nukeTab);
rail_wood = new RailGeneric().setMaxSpeed(0.2F).setBlockName("rail_wood").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_wood");
rail_narrow = new RailGeneric().setBlockName("rail_narrow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_narrow");
rail_highspeed = new RailGeneric().setMaxSpeed(1F).setFlexible(false).setBlockName("rail_highspeed").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_highspeed");
rail_booster = new RailBooster().setBlockName("rail_booster").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_booster");
rail_wood = new RailGeneric("axe", 0).setMaxSpeed(0.2F).setBlockName("rail_wood").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_wood");
rail_narrow = new RailGeneric("pickaxe", 0).setBlockName("rail_narrow").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_narrow");
rail_highspeed = new RailGeneric("pickaxe", 0).setMaxSpeed(1F).setFlexible(false).setBlockName("rail_highspeed").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_highspeed");
rail_booster = new RailBooster("pickaxe", 0).setBlockName("rail_booster").setHardness(5.0F).setResistance(10.0F).setCreativeTab(CreativeTabs.tabTransport).setBlockTextureName(RefStrings.MODID + ":rail_booster");
rail_narrow_straight = new RailNarrowStraight().setBlockName("rail_narrow_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_narrow_curve = new RailNarrowCurve().setBlockName("rail_narrow_curve").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_narrow_neo");
rail_large_straight = new RailStandardStraight().setBlockName("rail_large_straight").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rail_standard_straight");
@ -2235,11 +2217,14 @@ public class ModBlocks {
machine_autosaw = new MachineAutosaw().setBlockName("machine_autosaw").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_excavator = new MachineExcavator().setBlockName("machine_excavator").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_ore_slopper = new MachineOreSlopper().setBlockName("machine_ore_slopper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_annihilator = new MachineAnnihilator().setBlockName("machine_annihilator").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_mining_laser = new MachineMiningLaser(Material.iron).setBlockName("machine_mining_laser").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_mining_laser");
barricade = new BlockNoDrop(Material.sand).setBlockName("barricade").setHardness(1.0F).setResistance(2.5F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":barricade");
machine_assembler = new MachineAssembler(Material.iron).setBlockName("machine_assembler").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":machine_assembler");
machine_assembly_machine = new MachineAssemblyMachine(Material.iron).setBlockName("machine_assembly_machine").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_assemfac = new MachineAssemfac(Material.iron).setBlockName("machine_assemfac").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_assembly_factory = new MachineAssemblyFactory(Material.iron).setBlockName("machine_assembly_factory").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_precass = new MachinePrecAss(Material.iron).setBlockName("machine_precass").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null /* the world isn't ready for your beauty yet */).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_arc_welder = new MachineArcWelder(Material.iron).setBlockName("machine_arc_welder").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_soldering_station = new MachineSolderingStation(Material.iron).setBlockName("machine_soldering_station").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_chemplant = new MachineChemplant(Material.iron).setBlockName("machine_chemplant").setHardness(5.0F).setResistance(30.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -2305,13 +2290,8 @@ public class ModBlocks {
machine_waste_drum = new WasteDrum(Material.iron).setBlockName("machine_waste_drum").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":waste_drum");
machine_storage_drum = new StorageDrum(Material.iron).setBlockName("machine_storage_drum").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_storage_drum");
machine_schrabidium_transmutator = new MachineSchrabidiumTransmutator(Material.iron).setBlockName("machine_schrabidium_transmutator").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab);
machine_siren = new MachineSiren(Material.iron).setBlockName("machine_siren").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_siren");
machine_spp_bottom = new SPPBottom(Material.iron).setBlockName("machine_spp_bottom").setHardness(5.0F).setResistance(10.0F);
machine_spp_top = new SPPTop(Material.iron).setBlockName("machine_spp_top").setHardness(5.0F).setResistance(10.0F);
radiobox = new Radiobox(Material.iron).setBlockName("radiobox").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":radiobox");
radiorec = new RadioRec(Material.iron).setBlockName("radiorec").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":radiorec");
@ -2341,13 +2321,15 @@ public class ModBlocks {
gas_explosive = new BlockGasExplosive().setBlockName("gas_explosive").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":gas_explosive");
vacuum = new BlockVacuum().setBlockName("vacuum").setResistance(1000000F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":vacuum");
absorber = new BlockAbsorber(Material.iron, 2.5F).setBlockName("absorber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":absorber");
absorber_red = new BlockAbsorber(Material.iron, 10F).setBlockName("absorber_red").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":absorber_red");
absorber_green = new BlockAbsorber(Material.iron, 100F).setBlockName("absorber_green").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":absorber_green");
absorber_pink = new BlockAbsorber(Material.iron, 10000F).setBlockName("absorber_pink").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":absorber_pink");
absorber = new BlockGeneric(Material.iron).setBlockName("absorber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_deprecated");
absorber_red = new BlockGeneric(Material.iron).setBlockName("absorber_red").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_deprecated");
absorber_green = new BlockGeneric(Material.iron).setBlockName("absorber_green").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_deprecated");
absorber_pink = new BlockGeneric(Material.iron).setBlockName("absorber_pink").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":block_deprecated");
rad_absorber = new BlockAbsorber(Material.iron).setBlockName("rad_absorber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
decon = new BlockDecon(Material.iron).setBlockName("decon").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":decon_side");
if (Loader.isModLoaded("OpenComputers")) {
if(Loader.isModLoaded("OpenComputers")) {
oc_cable_paintable = new BlockOpenComputersCablePaintable().setBlockName("oc_cable_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
}
@ -2411,6 +2393,8 @@ public class ModBlocks {
wand_loot = new BlockWandLoot().setBlockName("wand_loot").setBlockTextureName(RefStrings.MODID + ":wand_loot");
wand_jigsaw = new BlockWandJigsaw().setBlockName("wand_jigsaw").setBlockTextureName(RefStrings.MODID + ":wand_jigsaw");
wand_logic = new BlockWandLogic().setBlockName("wand_logic").setBlockTextureName(RefStrings.MODID + ":wand_logic");
wand_tandem = new BlockWandTandem().setBlockName("wand_tandem").setBlockTextureName(RefStrings.MODID + ":wand_tandem");
wand_structure = new BlockWandStructure().setBlockName("wand_structure");
logic_block = new LogicBlock().setBlockName("logic_block").setBlockTextureName(RefStrings.MODID + ":logic_block");
@ -2460,10 +2444,6 @@ public class ModBlocks {
//Bedrock ores
GameRegistry.registerBlock(ore_bedrock_oil, ore_bedrock_oil.getUnlocalizedName());
//Nice Meme
GameRegistry.registerBlock(ore_coal_oil, ore_coal_oil.getUnlocalizedName());
GameRegistry.registerBlock(ore_coal_oil_burning, ore_coal_oil_burning.getUnlocalizedName());
//Nether Ores
GameRegistry.registerBlock(ore_nether_coal, ore_nether_coal.getUnlocalizedName());
GameRegistry.registerBlock(ore_nether_smoldering, ore_nether_smoldering.getUnlocalizedName());
@ -2628,11 +2608,6 @@ public class ModBlocks {
GameRegistry.registerBlock(block_bakelite, block_bakelite.getUnlocalizedName());
GameRegistry.registerBlock(block_rubber, block_rubber.getUnlocalizedName());
GameRegistry.registerBlock(block_australium, ItemOreBlock.class, block_australium.getUnlocalizedName());
GameRegistry.registerBlock(block_weidanium, ItemOreBlock.class, block_weidanium.getUnlocalizedName());
GameRegistry.registerBlock(block_reiium, ItemOreBlock.class, block_reiium.getUnlocalizedName());
GameRegistry.registerBlock(block_unobtainium, ItemOreBlock.class, block_unobtainium.getUnlocalizedName());
GameRegistry.registerBlock(block_daffergon, ItemOreBlock.class, block_daffergon.getUnlocalizedName());
GameRegistry.registerBlock(block_verticium, ItemOreBlock.class, block_verticium.getUnlocalizedName());
register(block_cap);
GameRegistry.registerBlock(block_lanthanium, block_lanthanium.getUnlocalizedName());
GameRegistry.registerBlock(block_ra226, block_ra226.getUnlocalizedName());
@ -2737,6 +2712,8 @@ public class ModBlocks {
register(stones_slab, ItemModSlab.class);
register(stones_double_slab, ItemModSlab.class);
register(brick_forgotten);
GameRegistry.registerBlock(concrete_slab, ItemModSlab.class, concrete_slab.getUnlocalizedName());
GameRegistry.registerBlock(concrete_double_slab, ItemModSlab.class, concrete_double_slab.getUnlocalizedName());
GameRegistry.registerBlock(concrete_brick_slab, ItemModSlab.class, concrete_brick_slab.getUnlocalizedName());
@ -2829,6 +2806,13 @@ public class ModBlocks {
GameRegistry.registerBlock(steel_grate, steel_grate.getUnlocalizedName());
register(steel_grate_wide);
//register(scaffold_dynamic);
/*
* operation: pipe annihilation
* each pipe has three rotations, and there's four shapes, so in theory, we only need 12 metas
* which leaves color, but that's the least bad thing to break due to tile syncing issues, so we
* can handle that using tile entities. it's unlikely that we add new shapes or invent new spacial
* axis to align them to, so it's also the easiest to extend
*/
GameRegistry.registerBlock(deco_pipe, ItemBlockBase.class, deco_pipe.getUnlocalizedName());
GameRegistry.registerBlock(deco_pipe_rusted, ItemBlockBase.class, deco_pipe_rusted.getUnlocalizedName());
GameRegistry.registerBlock(deco_pipe_green, ItemBlockBase.class, deco_pipe_green.getUnlocalizedName());
@ -2994,11 +2978,7 @@ public class ModBlocks {
//Sands, Glass
GameRegistry.registerBlock(ash_digamma, ash_digamma.getUnlocalizedName());
GameRegistry.registerBlock(sand_boron, sand_boron.getUnlocalizedName());
GameRegistry.registerBlock(sand_lead, sand_lead.getUnlocalizedName());
GameRegistry.registerBlock(sand_uranium, sand_uranium.getUnlocalizedName());
GameRegistry.registerBlock(sand_polonium, sand_polonium.getUnlocalizedName());
GameRegistry.registerBlock(sand_quartz, sand_quartz.getUnlocalizedName());
register(sand_mix);
GameRegistry.registerBlock(glass_boron, glass_boron.getUnlocalizedName());
GameRegistry.registerBlock(glass_lead, glass_lead.getUnlocalizedName());
GameRegistry.registerBlock(glass_uranium, glass_uranium.getUnlocalizedName());
@ -3126,14 +3106,10 @@ public class ModBlocks {
GameRegistry.registerBlock(machine_cyclotron, machine_cyclotron.getUnlocalizedName());
GameRegistry.registerBlock(machine_exposure_chamber, machine_exposure_chamber.getUnlocalizedName());
GameRegistry.registerBlock(machine_rtg_grey, machine_rtg_grey.getUnlocalizedName());
GameRegistry.registerBlock(machine_geo, machine_geo.getUnlocalizedName());
GameRegistry.registerBlock(machine_amgen, machine_amgen.getUnlocalizedName());
GameRegistry.registerBlock(machine_minirtg, machine_minirtg.getUnlocalizedName());
GameRegistry.registerBlock(machine_powerrtg, machine_powerrtg.getUnlocalizedName());
GameRegistry.registerBlock(machine_radiolysis, machine_radiolysis.getUnlocalizedName());
GameRegistry.registerBlock(machine_hephaestus, machine_hephaestus.getUnlocalizedName());
GameRegistry.registerBlock(machine_spp_bottom, machine_spp_bottom.getUnlocalizedName());
GameRegistry.registerBlock(machine_spp_top, machine_spp_top.getUnlocalizedName());
GameRegistry.registerBlock(hadron_plating, hadron_plating.getUnlocalizedName());
GameRegistry.registerBlock(hadron_plating_blue, hadron_plating_blue.getUnlocalizedName());
@ -3152,10 +3128,6 @@ public class ModBlocks {
GameRegistry.registerBlock(hadron_coil_chlorophyte, ItemBlockBase.class, hadron_coil_chlorophyte.getUnlocalizedName());
GameRegistry.registerBlock(hadron_coil_mese, ItemBlockBase.class, hadron_coil_mese.getUnlocalizedName());
GameRegistry.registerBlock(hadron_power, hadron_power.getUnlocalizedName());
GameRegistry.registerBlock(hadron_power_10m, hadron_power_10m.getUnlocalizedName());
GameRegistry.registerBlock(hadron_power_100m, hadron_power_100m.getUnlocalizedName());
GameRegistry.registerBlock(hadron_power_1g, hadron_power_1g.getUnlocalizedName());
GameRegistry.registerBlock(hadron_power_10g, hadron_power_10g.getUnlocalizedName());
GameRegistry.registerBlock(hadron_diode, hadron_diode.getUnlocalizedName());
GameRegistry.registerBlock(hadron_analysis, hadron_analysis.getUnlocalizedName());
GameRegistry.registerBlock(hadron_analysis_glass, hadron_analysis_glass.getUnlocalizedName());
@ -3200,6 +3172,7 @@ public class ModBlocks {
GameRegistry.registerBlock(red_cable_classic, red_cable_classic.getUnlocalizedName());
GameRegistry.registerBlock(red_cable_paintable, red_cable_paintable.getUnlocalizedName());
register(red_cable_gauge);
register(red_cable_box);
GameRegistry.registerBlock(red_wire_coated, red_wire_coated.getUnlocalizedName());
GameRegistry.registerBlock(red_connector, ItemBlockBase.class, red_connector.getUnlocalizedName());
GameRegistry.registerBlock(red_pylon, ItemBlockBase.class, red_pylon.getUnlocalizedName());
@ -3213,13 +3186,16 @@ public class ModBlocks {
GameRegistry.registerBlock(cable_detector, cable_detector.getUnlocalizedName());
GameRegistry.registerBlock(cable_diode, ItemBlockBase.class, cable_diode.getUnlocalizedName());
GameRegistry.registerBlock(machine_detector, machine_detector.getUnlocalizedName());
register(fluid_duct_neo);
register(fluid_duct_box);
register(fluid_duct_exhaust);
register(fluid_duct_paintable_block_exhaust);
register(fluid_duct_paintable);
register(pipe_anchor);
register(fluid_duct_gauge);
register(fluid_valve);
register(fluid_counter_valve);
register(fluid_switch);
register(fluid_pump);
register(machine_drain);
@ -3275,6 +3251,8 @@ public class ModBlocks {
register(barrel_steel);
register(barrel_tcalloy);
register(barrel_antimatter);
register(machine_battery_socket);
register(machine_battery_redd);
register(machine_battery_potato);
register(machine_battery);
register(machine_lithium_battery);
@ -3297,6 +3275,8 @@ public class ModBlocks {
GameRegistry.registerBlock(machine_assembler, machine_assembler.getUnlocalizedName());
register(machine_assembly_machine);
GameRegistry.registerBlock(machine_assemfac, machine_assemfac.getUnlocalizedName());
register(machine_assembly_factory);
register(machine_precass);
GameRegistry.registerBlock(machine_chemplant, machine_chemplant.getUnlocalizedName());
register(machine_chemical_plant);
register(machine_chemfac);
@ -3347,12 +3327,12 @@ public class ModBlocks {
register(machine_autosaw);
register(machine_excavator);
register(machine_ore_slopper);
register(machine_annihilator);
register(machine_mining_laser);
register(barricade);
register(machine_turbofan);
register(machine_turbinegas);
register(machine_lpw2);
GameRegistry.registerBlock(machine_schrabidium_transmutator, machine_schrabidium_transmutator.getUnlocalizedName());
GameRegistry.registerBlock(machine_teleporter, machine_teleporter.getUnlocalizedName());
GameRegistry.registerBlock(teleanchor, teleanchor.getUnlocalizedName());
GameRegistry.registerBlock(field_disturber, field_disturber.getUnlocalizedName());
@ -3370,8 +3350,7 @@ public class ModBlocks {
GameRegistry.registerBlock(struct_launcher_core, struct_launcher_core.getUnlocalizedName());
GameRegistry.registerBlock(struct_launcher_core_large, struct_launcher_core_large.getUnlocalizedName());
GameRegistry.registerBlock(struct_soyuz_core, struct_soyuz_core.getUnlocalizedName());
GameRegistry.registerBlock(struct_iter_core, struct_iter_core.getUnlocalizedName());
GameRegistry.registerBlock(struct_plasma_core, struct_plasma_core.getUnlocalizedName());
register(struct_torus_core);
GameRegistry.registerBlock(struct_watz_core, struct_watz_core.getUnlocalizedName());
GameRegistry.registerBlock(struct_icf_core, struct_icf_core.getUnlocalizedName());
@ -3380,6 +3359,7 @@ public class ModBlocks {
GameRegistry.registerBlock(absorber_red, absorber_red.getUnlocalizedName());
GameRegistry.registerBlock(absorber_green, absorber_green.getUnlocalizedName());
GameRegistry.registerBlock(absorber_pink, absorber_pink.getUnlocalizedName());
GameRegistry.registerBlock(rad_absorber, ItemBlockBase.class, rad_absorber.getUnlocalizedName());
GameRegistry.registerBlock(decon, decon.getUnlocalizedName());
//Solar Tower Blocks
@ -3416,15 +3396,22 @@ public class ModBlocks {
register(pwr_block);
//Multiblock Generators
register(fusion_conductor);
GameRegistry.registerBlock(fusion_center, fusion_center.getUnlocalizedName());
GameRegistry.registerBlock(fusion_motor, fusion_motor.getUnlocalizedName());
GameRegistry.registerBlock(fusion_heater, fusion_heater.getUnlocalizedName());
GameRegistry.registerBlock(fusion_hatch, fusion_hatch.getUnlocalizedName());
GameRegistry.registerBlock(plasma, ItemBlockLore.class, plasma.getUnlocalizedName());
GameRegistry.registerBlock(iter, iter.getUnlocalizedName());
GameRegistry.registerBlock(plasma_heater, plasma_heater.getUnlocalizedName());
register(fusion_component);
register(fusion_torus);
register(fusion_klystron);
register(fusion_klystron_creative);
register(fusion_breeder);
register(fusion_collector);
register(fusion_boiler);
register(fusion_mhdt);
register(fusion_coupler);
register(watz_element);
register(watz_cooler);
register(watz_end);
@ -3470,14 +3457,6 @@ public class ModBlocks {
//Guide
GameRegistry.registerBlock(book_guide, book_guide.getUnlocalizedName());
//Sat Blocks
GameRegistry.registerBlock(sat_mapper, sat_mapper.getUnlocalizedName());
GameRegistry.registerBlock(sat_scanner, sat_scanner.getUnlocalizedName());
GameRegistry.registerBlock(sat_radar, sat_radar.getUnlocalizedName());
GameRegistry.registerBlock(sat_laser, sat_laser.getUnlocalizedName());
GameRegistry.registerBlock(sat_foeq, sat_foeq.getUnlocalizedName());
GameRegistry.registerBlock(sat_resonator, sat_resonator.getUnlocalizedName());
//Rails
GameRegistry.registerBlock(rail_wood, ItemBlockBase.class, rail_wood.getUnlocalizedName());
GameRegistry.registerBlock(rail_narrow, ItemBlockBase.class, rail_narrow.getUnlocalizedName());
@ -3547,7 +3526,7 @@ public class ModBlocks {
GameRegistry.registerBlock(vacuum, vacuum.getUnlocalizedName());
// OC Compat Items
if (Loader.isModLoaded("OpenComputers")) {
if(Loader.isModLoaded(Compat.MOD_OC)) {
register(oc_cable_paintable);
}
@ -3569,6 +3548,8 @@ public class ModBlocks {
register(wand_loot);
register(wand_jigsaw);
register(wand_logic);
register(wand_tandem);
register(wand_structure);
register(logic_block);
}
@ -3601,4 +3582,24 @@ public class ModBlocks {
return ret;
}
public static Block getBlockFromStack(ItemStack stack) {
if(stack == null) return null;
if(!(stack.getItem() instanceof ItemBlock)) return null;
return ((ItemBlock) stack.getItem()).field_150939_a;
}
// Is this block a special structure handling block, so we can ignore it for blacklist selection, etc.
public static boolean isStructureBlock(Block block, boolean includeAir) {
if(block == null) return false;
if(block == wand_air) return includeAir;
if(block == wand_structure) return true;
if(block == wand_jigsaw) return true;
if(block == wand_logic) return true;
if(block == wand_tandem) return true;
if(block == wand_loot) return true;
return false;
}
}

View File

@ -3,6 +3,7 @@ package com.hbm.blocks.bomb;
import com.hbm.blocks.ModBlocks;
import com.hbm.entity.item.EntityTNTPrimedBase;
import com.hbm.explosion.ExplosionNukeSmall;
import com.hbm.world.biome.BiomeGenCraterBase;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
@ -16,6 +17,8 @@ public class BlockFissureBomb extends BlockTNTBase {
int range = 5;
boolean crater = world.getBiomeGenForCoords((int) Math.floor(x), (int) Math.floor(z)) instanceof BiomeGenCraterBase;
for(int i = -range; i <= range; i++) {
for(int j = -range; j <= range; j++) {
for(int k = -range; k <= range; k++) {
@ -27,7 +30,7 @@ public class BlockFissureBomb extends BlockTNTBase {
Block block = world.getBlock(a, b, c);
if(block == ModBlocks.ore_bedrock) {
world.setBlock(a, b, c, ModBlocks.ore_volcano);
world.setBlock(a, b, c, ModBlocks.ore_volcano, crater ? 1 : 0, 3);
} else if(block == ModBlocks.ore_bedrock_oil) {
world.setBlock(a, b, c, Blocks.bedrock);
}

View File

@ -3,16 +3,17 @@ package com.hbm.blocks.bomb;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.BombConfig;
import com.hbm.entity.effect.EntityCloudFleija;
import com.hbm.entity.effect.EntityCloudFleijaRainbow;
import com.hbm.entity.effect.EntityNukeTorex;
import com.hbm.entity.grenade.EntityGrenadeZOMG;
import com.hbm.entity.logic.EntityBalefire;
import com.hbm.entity.logic.EntityNukeExplosionMK3;
import com.hbm.entity.logic.EntityNukeExplosionMK5;
import com.hbm.entity.projectile.EntityFallingNuke;
import com.hbm.explosion.ExplosionChaos;
import com.hbm.explosion.ExplosionLarge;
import com.hbm.interfaces.IBomb;
import com.hbm.interfaces.NotableComments;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.bomb.TileEntityNukeCustom;
@ -30,10 +31,10 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
// this entire class sucks ass
@NotableComments
public class NukeCustom extends BlockContainer implements IBomb {
public TileEntityNukeCustom tetn = new TileEntityNukeCustom();
private static boolean keepInventory = false;
private final static Random field_149933_a = new Random();
@ -134,6 +135,7 @@ public class NukeCustom extends BlockContainer implements IBomb {
public static final int maxAmat = 350;
public static final int maxSchrab = 250;
// genuinely some of the worst fucking code i've ever written
public static void explodeCustom(World worldObj, double xCoord, double yCoord, double zCoord, float tnt, float nuke, float hydro, float amat, float dirty, float schrab, float euph) {
dirty = Math.min(dirty, 100);
@ -141,8 +143,23 @@ public class NukeCustom extends BlockContainer implements IBomb {
/// EUPHEMIUM ///
if(euph > 0) {
EntityGrenadeZOMG zomg = new EntityGrenadeZOMG(worldObj, xCoord, yCoord, zCoord);
ExplosionChaos.zomgMeSinPi(worldObj, xCoord, yCoord, zCoord, 1000, null, zomg);
EntityNukeExplosionMK3 ex = new EntityNukeExplosionMK3(worldObj);
ex.posX = xCoord;
ex.posY = yCoord;
ex.posZ = zCoord;
ex.destructionRange = 150;
ex.speed = BombConfig.blastSpeed;
ex.coefficient = 1.0F;
ex.waste = false;
worldObj.spawnEntityInWorld(ex);
worldObj.playSoundEffect(xCoord, yCoord, zCoord, "random.explode", 100000.0F, 1.0F);
EntityCloudFleijaRainbow cloud = new EntityCloudFleijaRainbow(worldObj, 50);
cloud.posX = xCoord;
cloud.posY = yCoord;
cloud.posZ = zCoord;
worldObj.spawnEntityInWorld(cloud);
// SCHRABIDIUM ///
} else if(schrab > 0) {

View File

@ -59,8 +59,15 @@ public class CoriumFinite extends GenericFiniteFluid {
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
super.updateTick(world, x, y, z, rand);
// COFH core apparently replaces the water block class with an incompatible type which breaks
// the finite fluid implementation. can't recreate the issue, but according to the provided log
// it seems like this shitty band aid might work
try {
super.updateTick(world, x, y, z, rand);
} catch(ClassCastException ex) {
if(!world.isRemote) world.setBlockToAir(x, y, z);
}
if(!world.isRemote && rand.nextInt(10) == 0 && world.getBlock(x, y - 1, z) != this) {

View File

@ -2,38 +2,79 @@ package com.hbm.blocks.generic;
import java.util.Random;
import com.hbm.blocks.BlockEnumMulti;
import com.hbm.blocks.IBlockMulti;
import com.hbm.handler.radiation.ChunkRadiationManager;
import com.hbm.lib.RefStrings;
import net.minecraft.block.Block;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.material.Material;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class BlockAbsorber extends Block {
public class BlockAbsorber extends BlockEnumMulti implements IBlockMulti {
float absorb = 0;
// Enum for tiers they are in order of meta data, 0, 1, 2, 3 for Base, Red, Green, Pink
public static enum EnumAbsorberTier {
public BlockAbsorber(Material mat, float ab) {
super(mat);
BASE(2.5F, "absorber"), RED(10F, "absorber_red"), GREEN(100F, "absorber_green"), PINK(10000F, "absorber_pink");
public final float absorbAmount;
public final String textureName;
private EnumAbsorberTier(float absorb, String texture) {
this.absorbAmount = absorb;
this.textureName = texture;
}
}
public BlockAbsorber(Material mat) {
super(mat, EnumAbsorberTier.class, true, true);
this.setTickRandomly(true);
absorb = ab;
this.setBlockName("rad_absorber");
}
public EnumAbsorberTier getTier(int meta) {
return EnumAbsorberTier.values()[rectify(meta)];
}
@Override
public int tickRate(World world) {
public String getUnlocalizedName(ItemStack stack) {
EnumAbsorberTier tier = getTier(stack.getItemDamage());
String tierName = net.minecraft.util.StatCollector.translateToLocal("tile.rad_absorber." + tier.name().toLowerCase());
return tierName;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(net.minecraft.client.renderer.texture.IIconRegister reg) {
icons = new IIcon[EnumAbsorberTier.values().length];
for(int i = 0; i < icons.length; i++) {
icons[i] = reg.registerIcon(RefStrings.MODID + ":" + EnumAbsorberTier.values()[i].textureName);
}
}
// All that rad math shit that was on there already, did not touch this
// -Wolf
@Override
public int tickRate(World world) {
return 10;
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
ChunkRadiationManager.proxy.decrementRad(world, x, y, z, absorb);
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
EnumAbsorberTier tier = getTier(world.getBlockMetadata(x, y, z));
ChunkRadiationManager.proxy.decrementRad(world, x, y, z, tier.absorbAmount);
world.scheduleBlockUpdate(x, y, z, this, tickRate(world));
}
@Override
public void onBlockAdded(World world, int x, int y, int z) {
super.onBlockAdded(world, x, y, z);
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
world.scheduleBlockUpdate(x, y, z, this, tickRate(world));
}
}

View File

@ -4,8 +4,8 @@ import com.hbm.inventory.gui.GUIScreenBobble;
import com.hbm.items.special.ItemPlasticScrap.ScrapType;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.world.gen.INBTTileEntityTransformable;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTTileEntityTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
@ -34,7 +34,7 @@ import net.minecraft.world.World;
import java.util.List;
import java.util.Random;
public class BlockBobble extends BlockContainer implements IGUIProvider, INBTTransformable {
public class BlockBobble extends BlockContainer implements IGUIProvider, INBTBlockTransformable {
public BlockBobble() {
super(Material.iron);

View File

@ -7,6 +7,7 @@ import static net.minecraftforge.common.util.ForgeDirection.WEST;
import com.hbm.lib.RefStrings;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -20,23 +21,23 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockChain extends Block {
public class BlockChain extends Block implements INBTBlockTransformable {
@SideOnly(Side.CLIENT)
private IIcon iconEnd;
public BlockChain(Material mat) {
super(mat);
}
public boolean isOpaqueCube() {
return false;
}
public boolean renderAsNormalBlock() {
return false;
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
public int getRenderType() {
@ -47,7 +48,7 @@ public class BlockChain extends Block {
public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
return true;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
@ -60,14 +61,14 @@ public class BlockChain extends Block {
if(world.isSideSolid(x, y - 1, z, ForgeDirection.UP, false) || (world.getBlock(x, y - 1, z) == this && world.getBlockMetadata(x, y, z) == world.getBlockMetadata(x, y - 1, z)))
return this.blockIcon;
return this.iconEnd;
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
return null;
}
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
func_149797_b(world.getBlockMetadata(x, y, z));
@ -76,11 +77,11 @@ public class BlockChain extends Block {
}
public void func_149797_b(int meta) {
float f = 0.125F;
if(meta == 0) {
this.minX = 3 * f;
this.minY = 0;
this.minZ = 3 * f;
@ -109,24 +110,24 @@ public class BlockChain extends Block {
this.setBlockBounds(0.0F, 0.0F, 3 * f, f, 1.0F, 5 * f);
}
}
@SideOnly(Side.CLIENT)
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) {
this.setBlockBoundsBasedOnState(world, x, y, z);
return super.getSelectedBoundingBoxFromPool(world, x, y, z);
}
public boolean canPlaceBlockAt(World world, int x, int y, int z) {
if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN) || world.getBlock(x, y + 1, z) == this)
return true;
return world.isSideSolid(x - 1, y, z, EAST ) ||
world.isSideSolid(x + 1, y, z, WEST ) ||
world.isSideSolid(x, y, z - 1, SOUTH) ||
world.isSideSolid(x, y, z + 1, NORTH);
}
public int onBlockPlaced(World world, int x, int y, int z, int side, float p_149660_6_, float p_149660_7_, float p_149660_8_, int meta)
{
int j1 = meta;
@ -142,12 +143,12 @@ public class BlockChain extends Block {
if(side == 5 && world.isSideSolid(x - 1, y, z, EAST))
j1 = 5;
if(j1 == 0) {
if(world.getBlock(x, y + 1, z) == this)
return world.getBlockMetadata(x, y + 1, z);
if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN))
return 0;
}
@ -155,30 +156,30 @@ public class BlockChain extends Block {
if(j1 == 0) {
if(world.isSideSolid(x, y, z + 1, NORTH))
j1 = 2;
if(world.isSideSolid(x, y, z - 1, SOUTH))
j1 = 3;
if(world.isSideSolid(x + 1, y, z, WEST))
j1 = 4;
if(world.isSideSolid(x - 1, y, z, EAST))
j1 = 5;
}
return j1;
}
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
int l = world.getBlockMetadata(x, y, z);
boolean flag = false;
if(world.getBlock(x, y + 1, z) == this && world.getBlockMetadata(x, y, z) == world.getBlockMetadata(x, y + 1, z)) {
super.onNeighborBlockChange(world, x, y, z, block);
return;
}
if(world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN) && world.getBlockMetadata(x, y, z) == 0) {
super.onNeighborBlockChange(world, x, y, z, block);
return;
@ -201,4 +202,12 @@ public class BlockChain extends Block {
super.onNeighborBlockChange(world, x, y, z, block);
}
@Override
public int transformMeta(int meta, int coordBaseMode) {
if (coordBaseMode == 0) return meta;
if (meta == 0) return meta;
if (meta == 1) return meta;
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
}

View File

@ -1,26 +1,15 @@
package com.hbm.blocks.generic;
import java.util.List;
import java.util.Random;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks;
import com.hbm.items.ModItems;
import com.hbm.util.i18n.I18nUtil;
import api.hbm.block.IDrillInteraction;
import api.hbm.block.IMiningDrill;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;
public class BlockCluster extends Block implements IDrillInteraction, ITooltipProvider {
public class BlockCluster extends Block {
public BlockCluster(Material mat) {
super(mat);
@ -28,32 +17,7 @@ public class BlockCluster extends Block implements IDrillInteraction, ITooltipPr
@Override
public Item getItemDropped(int i, Random rand, int j) {
return null;
}
@Override
public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) {
if(player instanceof FakePlayer || player == null) {
return;
}
if(!world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops") && !world.restoringBlockSnapshots) {
Item drop = getDrop();
if(drop == null)
return;
float f = 0.7F;
double mX = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
double mY = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
double mZ = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
EntityItem entityitem = new EntityItem(world, (double) x + mX, (double) y + mY, (double) z + mZ, new ItemStack(drop));
entityitem.delayBeforeCanPickup = 10;
world.spawnEntityInWorld(entityitem);
}
return getDrop();
}
private Item getDrop() {
@ -65,24 +29,4 @@ public class BlockCluster extends Block implements IDrillInteraction, ITooltipPr
return null;
}
@Override
public boolean canBreak(World world, int x, int y, int z, int meta, IMiningDrill drill) {
return drill.getDrillRating() > 70 || world.rand.nextFloat() < 0.05;
}
@Override
public ItemStack extractResource(World world, int x, int y, int z, int meta, IMiningDrill drill) {
return drill.getDrillRating() <= 70 ? new ItemStack(getDrop()) : null;
}
@Override
public float getRelativeHardness(World world, int x, int y, int z, int meta, IMiningDrill drill) {
return this.getBlockHardness(world, x, y, z);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.tile.cluster"));
}
}

View File

@ -1,78 +0,0 @@
package com.hbm.blocks.generic;
import java.util.Random;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class BlockCoalBurning extends BlockOutgas {
public BlockCoalBurning(Material mat) {
super(mat, false, 1, false);
this.setTickRandomly(true);
}
@Override
@SideOnly(Side.CLIENT)
public void randomDisplayTick(World world, int x, int y, int z, Random rand) {
super.randomDisplayTick(world, x, y, z, rand);
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
if(dir == ForgeDirection.DOWN)
continue;
if(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ).getMaterial() == Material.air) {
double ix = x + 0.5F + dir.offsetX + rand.nextDouble() - 0.5D;
double iy = y + 0.5F + dir.offsetY + rand.nextDouble() - 0.5D;
double iz = z + 0.5F + dir.offsetZ + rand.nextDouble() - 0.5D;
if(dir.offsetX != 0)
ix = x + 0.5F + dir.offsetX * 0.5 + rand.nextDouble() * 0.125 * dir.offsetX;
if(dir.offsetY != 0)
iy = y + 0.5F + dir.offsetY * 0.5 + rand.nextDouble() * 0.125 * dir.offsetY;
if(dir.offsetZ != 0)
iz = z + 0.5F + dir.offsetZ * 0.5 + rand.nextDouble() * 0.125 * dir.offsetZ;
world.spawnParticle("flame", ix, iy, iz, 0.0, 0.0, 0.0);
world.spawnParticle("smoke", ix, iy, iz, 0.0, 0.0, 0.0);
world.spawnParticle("smoke", ix, iy, iz, 0.0, 0.1, 0.0);
}
}
}
@Override
public Item getItemDropped(int i, Random rand, int j) {
return null;
}
public void breakBlock(World world, int x, int y, int z, Block block, int i) {
super.breakBlock(world, x, y, z, block, i);
world.setBlock(x, y, z, Blocks.fire);
for(int ix = -2; ix <= 2; ix++) {
for(int iy = -2; iy <= 2; iy++) {
for(int iz = -2; iz <= 2; iz++) {
if(Math.abs(ix + iy + iz) < 5 && world.getBlock(x + ix, y + iy, z + iz) == Blocks.air) {
world.setBlock(x + ix, y + iy, z + iz, this.getGas());
}
}
}
}
}
@Override
public void onEntityWalking(World world, int x, int y, int z, Entity entity) {
entity.setFire(3);
}
}

View File

@ -1,33 +0,0 @@
package com.hbm.blocks.generic;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.world.World;
public class BlockCoalOil extends Block {
public BlockCoalOil(Material mat) {
super(mat);
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
world.setBlock(x, y, z, ModBlocks.ore_coal_oil_burning);
}
@Override
public Item getItemDropped(int i, Random rand, int j) {
return Items.coal;
}
@Override
public int quantityDropped(Random rand) {
return 2 + rand.nextInt(2);
}
}

View File

@ -5,8 +5,10 @@ import java.util.List;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.interfaces.Spaghetti;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemBatteryPack.EnumBatteryPack;
import net.minecraft.block.BlockFalling;
import net.minecraft.block.material.Material;
@ -16,6 +18,7 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
@Spaghetti("this is implemented in the most braindead fucking way imaginable") // TODO: rework this unholy abomination using configurable loot pools
public class BlockCrate extends BlockFalling {
List<ItemStack> crateList;
@ -69,22 +72,16 @@ public class BlockCrate extends BlockFalling {
// Lead Crate
BlockCrate.addToListWithWeight(leadList, ModItems.ingot_uranium, 10);
// BlockCrate.addToListWithWeight(leadList, ModItems.ingot_u235, 5);
BlockCrate.addToListWithWeight(leadList, ModItems.ingot_u238, 8);
BlockCrate.addToListWithWeight(leadList, ModItems.ingot_plutonium, 7);
// BlockCrate.addToListWithWeight(leadList, ModItems.ingot_pu238, 5);
// BlockCrate.addToListWithWeight(leadList, ModItems.ingot_pu239, 4);
BlockCrate.addToListWithWeight(leadList, ModItems.ingot_pu240, 6);
BlockCrate.addToListWithWeight(leadList, ModItems.ingot_neptunium, 7);
BlockCrate.addToListWithWeight(leadList, ModItems.ingot_uranium_fuel, 8);
BlockCrate.addToListWithWeight(leadList, ModItems.ingot_plutonium_fuel, 7);
BlockCrate.addToListWithWeight(leadList, ModItems.ingot_mox_fuel, 6);
BlockCrate.addToListWithWeight(leadList, ModItems.nugget_uranium, 10);
// BlockCrate.addToListWithWeight(leadList, ModItems.nugget_u235, 5);
BlockCrate.addToListWithWeight(leadList, ModItems.nugget_u238, 8);
BlockCrate.addToListWithWeight(leadList, ModItems.nugget_plutonium, 7);
// BlockCrate.addToListWithWeight(leadList, ModItems.nugget_pu238, 5);
// BlockCrate.addToListWithWeight(leadList, ModItems.nugget_pu239, 4);
BlockCrate.addToListWithWeight(leadList, ModItems.nugget_pu240, 6);
BlockCrate.addToListWithWeight(leadList, ModItems.nugget_neptunium, 7);
BlockCrate.addToListWithWeight(leadList, ModItems.nugget_uranium_fuel, 8);
@ -96,7 +93,6 @@ public class BlockCrate extends BlockFalling {
BlockCrate.addToListWithWeight(leadList, ModItems.cell_puf6, 8);
BlockCrate.addToListWithWeight(leadList, ModItems.pellet_rtg, 6);
BlockCrate.addToListWithWeight(leadList, ModItems.pellet_rtg_weak, 7);
BlockCrate.addToListWithWeight(leadList, ModItems.tritium_deuterium_cake, 5);
BlockCrate.addToListWithWeight(leadList, ModItems.powder_yellowcake, 10);
// Metal Crate
@ -107,17 +103,15 @@ public class BlockCrate extends BlockFalling {
BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_diesel), 8);
BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_rtg_grey), 4);
BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.red_pylon), 9);
BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_battery), 8);
BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_lithium_battery), 5);
BlockCrate.addToListWithWeight(metalList, new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()), 10);
BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_electric_furnace_off), 8);
BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_assembler), 10);
BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_assembly_machine), 10);
BlockCrate.addToListWithWeight(metalList, Item.getItemFromBlock(ModBlocks.machine_fluidtank), 7);
BlockCrate.addToListWithWeight(metalList, ModItems.centrifuge_element, 6);
BlockCrate.addToListWithWeight(metalList, ModItems.motor, 8);
BlockCrate.addToListWithWeight(metalList, ModItems.coil_tungsten, 7);
BlockCrate.addToListWithWeight(metalList, ModItems.photo_panel, 3);
BlockCrate.addToListWithWeight(metalList, ModItems.coil_copper, 10);
BlockCrate.addToListWithWeight(metalList, ModItems.tank_steel, 9);
BlockCrate.addToListWithWeight(metalList, ModItems.blade_titanium, 3);
BlockCrate.addToListWithWeight(metalList, ModItems.piston_selenium, 6);

View File

@ -2,7 +2,7 @@ package com.hbm.blocks.generic;
import com.hbm.blocks.BlockMulti;
import com.hbm.lib.RefStrings;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
@ -15,7 +15,7 @@ import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class BlockDecoCRT extends BlockMulti implements INBTTransformable {
public class BlockDecoCRT extends BlockMulti implements INBTBlockTransformable {
protected String[] variants = new String[] {"crt_clean", "crt_broken", "crt_blinking", "crt_bsod"};
@SideOnly(Side.CLIENT) protected IIcon[] icons;
@ -77,7 +77,7 @@ public class BlockDecoCRT extends BlockMulti implements INBTTransformable {
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTTransformable.transformMetaDecoModel(meta, coordBaseMode);
return INBTBlockTransformable.transformMetaDecoModel(meta, coordBaseMode);
}
}

View File

@ -1,7 +1,7 @@
package com.hbm.blocks.generic;
import com.hbm.blocks.BlockEnumMulti;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.block.material.Material;
@ -12,7 +12,7 @@ import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockDecoModel extends BlockEnumMulti implements INBTTransformable {
public class BlockDecoModel extends BlockEnumMulti implements INBTBlockTransformable {
public BlockDecoModel(Material mat, Class<? extends Enum> theEnum, boolean multiName, boolean multiTexture) {
super(mat, theEnum, multiName, multiTexture);

View File

@ -2,7 +2,7 @@ package com.hbm.blocks.generic;
import com.hbm.blocks.BlockMulti;
import com.hbm.lib.RefStrings;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
@ -17,7 +17,7 @@ import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockDecoToaster extends BlockMulti implements INBTTransformable {
public class BlockDecoToaster extends BlockMulti implements INBTBlockTransformable {
protected String[] variants = new String[] {"toaster_iron", "toaster_steel", "toaster_wood"};
@SideOnly(Side.CLIENT) protected IIcon[] icons;
@ -94,7 +94,7 @@ public class BlockDecoToaster extends BlockMulti implements INBTTransformable {
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTTransformable.transformMetaDecoModel(meta, coordBaseMode);
return INBTBlockTransformable.transformMetaDecoModel(meta, coordBaseMode);
}
}

View File

@ -55,7 +55,8 @@ public class BlockFissure extends BlockContainer implements IBlockMultiPass {
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
if(world.getBlock(x, y + 1, z).isReplaceable(world, x, y + 1, z)) world.setBlock(x, y + 1, z, ModBlocks.volcanic_lava_block);
boolean crater = world.getBlockMetadata(x, y, z) != 0;
if(world.getBlock(x, y + 1, z).isReplaceable(world, x, y + 1, z)) world.setBlock(x, y + 1, z, crater ? ModBlocks.rad_lava_block : ModBlocks.volcanic_lava_block);
}
@Override

View File

@ -4,7 +4,7 @@ import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.items.ModItems;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -21,7 +21,7 @@ import net.minecraft.util.Vec3;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockModDoor extends Block implements INBTTransformable {
public class BlockModDoor extends Block implements INBTBlockTransformable {
@SideOnly(Side.CLIENT)
private IIcon[] field_150017_a;
@SideOnly(Side.CLIENT)
@ -400,6 +400,6 @@ public class BlockModDoor extends Block implements INBTTransformable {
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTTransformable.transformMetaDoor(meta, coordBaseMode);
return INBTBlockTransformable.transformMetaDoor(meta, coordBaseMode);
}
}

View File

@ -0,0 +1,79 @@
package com.hbm.blocks.generic;
import java.util.Locale;
import java.util.Random;
import com.hbm.blocks.BlockEnumMulti;
import com.hbm.lib.RefStrings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockFalling;
import net.minecraft.block.material.Material;
import net.minecraft.entity.item.EntityFallingBlock;
import net.minecraft.world.World;
public class BlockNTMSand extends BlockEnumMulti {
public BlockNTMSand(Material mat) {
super(mat, EnumSandType.class, true, true);
}
@Override
public void onBlockAdded(World world, int x, int y, int z) {
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
}
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block b) {
world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world));
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand) {
if(!world.isRemote) {
this.fall(world, x, y, z);
}
}
private void fall(World world, int x, int y, int z) {
if(BlockFalling.func_149831_e(world, x, y - 1, z) && y >= 0) {
byte b0 = 32;
if(!BlockFalling.fallInstantly && world.checkChunksExist(x - b0, y - b0, z - b0, x + b0, y + b0, z + b0)) {
if(!world.isRemote) {
EntityFallingBlock entityfallingblock = new EntityFallingBlock(world, x + 0.5, y + 0.5, z + 0.5, this, world.getBlockMetadata(x, y, z));
world.spawnEntityInWorld(entityfallingblock);
}
} else {
world.setBlockToAir(x, y, z);
while(BlockFalling.func_149831_e(world, x, y - 1, z) && y > 0) {
--y;
}
if(y > 0) {
world.setBlock(x, y, z, this);
}
}
}
}
@Override
public int tickRate(World p_149738_1_) {
return 2;
}
@Override
public String getTextureMultiName(Enum num) {
return RefStrings.MODID + ":sand_" + num.name().toLowerCase(Locale.US);
}
@Override
public String getUnlocalizedMultiName(Enum num) {
return "tile.sand_" + num.name().toLowerCase(Locale.US);
}
public static enum EnumSandType {
BORON, LEAD, URANIUM, POLONIUM, QUARTZ
}
}

View File

@ -50,7 +50,7 @@ public class BlockOutgas extends BlockOre {
if(this == ModBlocks.ancient_scrap)
return ModBlocks.gas_radon_tomb;
if(this == ModBlocks.ore_coal_oil_burning || this == ModBlocks.ore_nether_coal) {
if(this == ModBlocks.ore_nether_coal) {
return ModBlocks.gas_monoxide;
}

View File

@ -4,7 +4,7 @@ import java.util.List;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.lib.RefStrings;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
@ -17,7 +17,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class BlockPipe extends Block implements ITooltipProvider, INBTTransformable {
public class BlockPipe extends Block implements ITooltipProvider, INBTBlockTransformable {
@SideOnly(Side.CLIENT)
private IIcon sideIcon;
@ -96,7 +96,7 @@ public class BlockPipe extends Block implements ITooltipProvider, INBTTransforma
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTTransformable.transformMetaPillar(meta, coordBaseMode);
return INBTBlockTransformable.transformMetaPillar(meta, coordBaseMode);
}
}

View File

@ -10,49 +10,33 @@ import net.minecraft.item.Item;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
@Deprecated
public class BlockPlasma extends Block {
public BlockPlasma(Material p_i45394_1_) {
super(p_i45394_1_);
this.setTickRandomly(true);
this.setTickRandomly(true);
}
@Override
public void updateTick(World world, int x, int y, int z, Random rand)
{
if (world.getGameRules().getGameRuleBooleanValue("doFireTick"))
world.setBlock(x, y, z, Blocks.air);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_)
{
return null;
}
@Override
public void onEntityCollidedWithBlock(World p_149670_1_, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity p_149670_5_)
{
p_149670_5_.setFire(10);
p_149670_5_.setInWeb();
}
@Override
public boolean isOpaqueCube()
{
return false;
}
@Override
public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_)
{
public void updateTick(World world, int x, int y, int z, Random rand) {
if(world.getGameRules().getGameRuleBooleanValue("doFireTick"))
world.setBlock(x, y, z, Blocks.air);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) {
return null;
}
@Override
public boolean renderAsNormalBlock()
{
return false;
}
}
@Override
public void onEntityCollidedWithBlock(World p_149670_1_, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity p_149670_5_) {
p_149670_5_.setFire(10);
p_149670_5_.setInWeb();
}
@Override public boolean isOpaqueCube() { return false; }
@Override public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { return null; }
@Override public boolean renderAsNormalBlock() { return false; }
}

View File

@ -5,8 +5,8 @@ import java.util.Random;
import com.hbm.blocks.IBlockMulti;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.world.gen.INBTTileEntityTransformable;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTTileEntityTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -29,7 +29,7 @@ import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
public class BlockPlushie extends BlockContainer implements IBlockMulti, ITooltipProvider, INBTTransformable {
public class BlockPlushie extends BlockContainer implements IBlockMulti, ITooltipProvider, INBTBlockTransformable {
public BlockPlushie() {
super(Material.cloth);
@ -96,12 +96,16 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z);
if(world.isRemote) {
TileEntityPlushie plushie = (TileEntityPlushie) world.getTileEntity(x, y, z);
plushie.squishTimer = 11;
return true;
} else {
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.squeakyToy", 0.25F, 1F);
if(plushie.type == PlushieType.HUNDUN) {
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.hunduns_magnificent_howl", 100F, 1F);
} else {
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:block.squeakyToy", 0.25F, 1F);
}
return true;
}
}
@ -155,7 +159,8 @@ public class BlockPlushie extends BlockContainer implements IBlockMulti, IToolti
NONE( "NONE", null),
YOMI( "Yomi", "Hi! Can I be your rabbit friend?"),
NUMBERNINE( "Number Nine", "None of y'all deserve coal."),
POOH( "Winnie the Pooh", "Beloved children's character with no malicious intent.");
HUNDUN( "Hundun", "混沌"),
DERG( "Dragon", "Squeeze him.");
public String label;
public String inscription;

View File

@ -372,6 +372,7 @@ public class BlockRebar extends BlockContainer implements ISBRHUniversal {
if(!(o instanceof TileEntityRebar)) continue;
TileEntityRebar rebar = (TileEntityRebar) o;
if(rebar.progress > 0) rebars.add(rebar);
if(rebars.size() >= ClientConfig.RENDER_REBAR_LIMIT.get()) break;
}
Minecraft mc = Minecraft.getMinecraft();

View File

@ -152,7 +152,7 @@ public class BlockToolConversion extends BlockMulti implements IToolable, ILookO
public static void registerRecipes() {
conversions.put(new Pair(ToolType.BOLT, new MetaBlock(ModBlocks.watz_end, 0)), new Pair(new AStack[] {new OreDictStack(OreDictManager.DURA.bolt(), 4)}, new MetaBlock(ModBlocks.watz_end, 1)));
conversions.put(new Pair(ToolType.TORCH, new MetaBlock(ModBlocks.fusion_conductor, 0)), new Pair(new AStack[] {new OreDictStack(OreDictManager.STEEL.plateCast())}, new MetaBlock(ModBlocks.fusion_conductor, 1)));
conversions.put(new Pair(ToolType.TORCH, new MetaBlock(ModBlocks.fusion_component, 0)), new Pair(new AStack[] {new OreDictStack(OreDictManager.STEEL.plateCast())}, new MetaBlock(ModBlocks.fusion_component, 1)));
conversions.put(new Pair(ToolType.TORCH, new MetaBlock(ModBlocks.icf_component, 1)), new Pair(new AStack[] {new OreDictStack(OreDictManager.ANY_BISMOIDBRONZE.plateCast())}, new MetaBlock(ModBlocks.icf_component, 2)));
conversions.put(new Pair(ToolType.BOLT, new MetaBlock(ModBlocks.icf_component, 3)), new Pair(new AStack[] {new OreDictStack(OreDictManager.STEEL.plateCast()), new OreDictStack(OreDictManager.DURA.bolt(), 4)}, new MetaBlock(ModBlocks.icf_component, 4)));
}

View File

@ -18,7 +18,7 @@ import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.util.BufferUtil;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.common.registry.GameRegistry;
@ -37,7 +37,6 @@ import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@ -47,7 +46,7 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotation, INBTTransformable, IGUIProvider, ILookOverlay {
public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotation, INBTBlockTransformable, IGUIProvider, ILookOverlay {
private IIcon iconTop;
private IIcon iconSide;
@ -123,7 +122,7 @@ public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotatio
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTTransformable.transformMetaDeco(meta, coordBaseMode);
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
@Override
@ -135,10 +134,10 @@ public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotatio
TileEntityWandJigsaw jigsaw = (TileEntityWandJigsaw) te;
if(!player.isSneaking()) {
Block block = getBlock(world, player.getHeldItem());
Block block = ModBlocks.getBlockFromStack(player.getHeldItem());
if(block == ModBlocks.wand_air) block = Blocks.air;
if(block != null && block != ModBlocks.wand_jigsaw && block != ModBlocks.wand_loot) {
if(block != null && !ModBlocks.isStructureBlock(block, false)) {
jigsaw.replaceBlock = block;
jigsaw.replaceMeta = player.getHeldItem().getItemDamage();
@ -155,13 +154,6 @@ public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotatio
return false;
}
private Block getBlock(World world, ItemStack stack) {
if(stack == null) return null;
if(!(stack.getItem() instanceof ItemBlock)) return null;
return ((ItemBlock) stack.getItem()).field_150939_a;
}
@Override
@SideOnly(Side.CLIENT)
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {

View File

@ -13,8 +13,8 @@ import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.util.BufferUtil;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.world.gen.nbt.INBTTileEntityTransformable;
import com.hbm.world.gen.util.LogicBlockActions;
import com.hbm.world.gen.INBTTileEntityTransformable;
import com.hbm.world.gen.util.LogicBlockConditions;
import com.hbm.world.gen.util.LogicBlockInteractions;
import cpw.mods.fml.common.registry.GameRegistry;
@ -273,7 +273,8 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo
super.writeToNBT(nbt);
nbt.setString("actionID", actionID);
nbt.setString("conditionID", conditionID);
nbt.setString("interactionID", interactionID);
if(interactionID != null)
nbt.setString("interactionID", interactionID);
nbt.setInteger("rotation", placedRotation);
if(disguise != null){
nbt.setString("disguise", GameRegistry.findUniqueIdentifierFor(disguise).toString());
@ -286,7 +287,8 @@ public class BlockWandLogic extends BlockContainer implements ILookOverlay, IToo
super.readFromNBT(nbt);
actionID = nbt.getString("actionID");
conditionID = nbt.getString("conditionID");
interactionID = nbt.getString("interactionID");
if(nbt.hasKey("interactionID"))
interactionID = nbt.getString("interactionID");
placedRotation = nbt.getInteger("rotation");
if(nbt.hasKey("disguise")){
disguise = Block.getBlockFromName(nbt.getString("disguise"));

View File

@ -17,7 +17,7 @@ import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.util.BufferUtil;
import com.hbm.util.LootGenerator;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.world.gen.INBTTileEntityTransformable;
import com.hbm.world.gen.nbt.INBTTileEntityTransformable;
import com.mojang.authlib.GameProfile;
import api.hbm.block.IToolable;
@ -33,7 +33,6 @@ import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
@ -82,7 +81,7 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool
@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;
int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 3, 2);
if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 2, 2);
@ -153,17 +152,14 @@ public class BlockWandLoot extends BlockContainer implements ILookOverlay, ITool
}
private Block getLootableBlock(World world, ItemStack stack) {
if(stack == null) return null;
Block block = ModBlocks.getBlockFromStack(stack);
if(block == null) return null;
if(stack.getItem() instanceof ItemBlock) {
Block block = ((ItemBlock) stack.getItem()).field_150939_a;
if(block == ModBlocks.deco_loot) return block;
if(block == ModBlocks.deco_loot) return block;
if(block instanceof ITileEntityProvider) {
TileEntity te = ((ITileEntityProvider) block).createNewTileEntity(world, 12);
if(te instanceof IInventory) return block;
}
if(block instanceof ITileEntityProvider) {
TileEntity te = ((ITileEntityProvider) block).createNewTileEntity(world, 12);
if(te instanceof IInventory) return block;
}
return null;

View File

@ -0,0 +1,573 @@
package com.hbm.blocks.generic;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.lwjgl.input.Keyboard;
import com.hbm.blocks.IBlockMulti;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.StructureConfig;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.gui.element.GuiFileList;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.NBTControlPacket;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.util.BufferUtil;
import com.hbm.util.Tuple.Pair;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.world.gen.nbt.NBTStructure;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.event.ClickEvent;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
public class BlockWandStructure extends BlockContainer implements IBlockMulti, IGUIProvider, ILookOverlay {
private IIcon saveIcon;
private IIcon loadIcon;
public BlockWandStructure() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World worldIn, int meta) {
return new TileEntityWandStructure();
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
saveIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_structure_save");
loadIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_structure_load");
}
@Override
public IIcon getIcon(int side, int meta) {
if(meta == 1) return loadIcon;
return saveIcon;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
TileEntity te = world.getTileEntity(x, y, z);
if(!(te instanceof TileEntityWandStructure)) return false;
TileEntityWandStructure structure = (TileEntityWandStructure) te;
if(!player.isSneaking()) {
Block block = ModBlocks.getBlockFromStack(player.getHeldItem());
if(block != null && !ModBlocks.isStructureBlock(block, true)) {
Pair<Block, Integer> bm = new Pair<Block, Integer>(block, player.getHeldItem().getItemDamage());
if(structure.blacklist.contains(bm)) {
structure.blacklist.remove(bm);
} else {
structure.blacklist.add(bm);
}
return true;
}
if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
return true;
}
return false;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@SideOnly(Side.CLIENT)
public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) {
list.add(new ItemStack(itemIn, 1, 0));
list.add(new ItemStack(itemIn, 1, 1));
}
@Override
public int getSubCount() {
return 2;
}
@Override
public String getUnlocalizedName(ItemStack stack) {
int meta = stack.getItemDamage();
if(meta == 1) return getUnlocalizedName() + ".load";
return getUnlocalizedName() + ".save";
}
@Override
public int damageDropped(int meta) {
return meta;
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return null;
}
@Override
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
int meta = world.getBlockMetadata(x, y, z);
TileEntityWandStructure structure = (TileEntityWandStructure) world.getTileEntity(x, y, z);
if(meta == 1) return new GuiStructureLoad(structure);
return new GuiStructureSave(structure);
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
if(world.getBlockMetadata(x, y, z) != 0) return;
TileEntity te = world.getTileEntity(x, y, z);
if(!(te instanceof TileEntityWandStructure)) return;
TileEntityWandStructure structure = (TileEntityWandStructure) te;
List<String> text = new ArrayList<String>();
text.add(EnumChatFormatting.GRAY + "Name: " + EnumChatFormatting.RESET + structure.name);
text.add(EnumChatFormatting.GRAY + "Blacklist:");
for (Pair<Block, Integer> bm : structure.blacklist) {
text.add(EnumChatFormatting.RED + "- " + bm.getKey().getUnlocalizedName() + " : " + bm.getValue());
}
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".save.name"), 0xffff00, 0x404000, text);
}
public static class TileEntityWandStructure extends TileEntityLoadedBase implements IControlReceiver {
public String name = "";
public int sizeX = 1;
public int sizeY = 1;
public int sizeZ = 1;
public Set<Pair<Block, Integer>> blacklist = new HashSet<>();
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
networkPackNT(256);
}
}
public void saveStructure(EntityPlayer player) {
if(name.isEmpty()) {
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Could not save: invalid name"));
return;
}
if(sizeX <= 0 || sizeY <= 0 || sizeZ <= 0) {
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Could not save: invalid dimensions"));
return;
}
Pair<Block, Integer> air = new Pair<Block, Integer>(Blocks.air, 0);
blacklist.add(air);
File file = NBTStructure.quickSaveArea(name + ".nbt", worldObj, xCoord, yCoord + 1, zCoord, xCoord + sizeX - 1, yCoord + sizeY, zCoord + sizeZ - 1, blacklist);
blacklist.remove(air);
if(file == null) {
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Failed to save structure"));
return;
}
ChatComponentText fileText = new ChatComponentText(file.getName());
fileText.getChatStyle().setChatClickEvent(new ClickEvent(ClickEvent.Action.OPEN_FILE, file.getParentFile().getAbsolutePath()));
fileText.getChatStyle().setUnderlined(true);
player.addChatMessage(new ChatComponentText("Saved structure as ").appendSibling(fileText));
}
public void loadStructure(EntityPlayer player) {
if(name.isEmpty()) {
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Could not load: no filename specified"));
return;
}
File structureDirectory = new File(Minecraft.getMinecraft().mcDataDir, "structures");
structureDirectory.mkdir();
File structureFile = new File(structureDirectory, name + ".nbt");
boolean previousDebug = StructureConfig.debugStructures;
StructureConfig.debugStructures = true;
try {
NBTStructure structure = new NBTStructure(structureFile);
sizeX = structure.getSizeX();
sizeY = structure.getSizeY();
sizeZ = structure.getSizeZ();
structure.build(worldObj, xCoord, yCoord + 1, zCoord, 0, false, true);
worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, 0, 3);
player.addChatMessage(new ChatComponentText("Structure loaded"));
} catch (FileNotFoundException ex) {
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Could not load: file not found"));
} finally {
StructureConfig.debugStructures = previousDebug;
}
}
@Override
public void serialize(ByteBuf buf) {
BufferUtil.writeString(buf, name);
buf.writeInt(sizeX);
buf.writeInt(sizeY);
buf.writeInt(sizeZ);
buf.writeInt(blacklist.size());
for(Pair<Block, Integer> bm : blacklist) {
buf.writeInt(Block.getIdFromBlock(bm.getKey()));
buf.writeInt(bm.getValue());
}
}
@Override
public void deserialize(ByteBuf buf) {
name = BufferUtil.readString(buf);
sizeX = buf.readInt();
sizeY = buf.readInt();
sizeZ = buf.readInt();
int count = buf.readInt();
blacklist = new HashSet<>();
for(int i = 0; i < count; i++) {
Block block = Block.getBlockById(buf.readInt());
int meta = buf.readInt();
blacklist.add(new Pair<Block, Integer>(block, meta));
}
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
name = nbt.getString("name");
sizeX = nbt.getInteger("sizeX");
sizeY = nbt.getInteger("sizeY");
sizeZ = nbt.getInteger("sizeZ");
int[] blocks = nbt.getIntArray("blocks");
int[] metas = nbt.getIntArray("metas");
blacklist = new HashSet<>();
for (int i = 0; i < blocks.length; i++) {
blacklist.add(new Pair<Block, Integer>(Block.getBlockById(blocks[i]), metas[i]));
}
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setString("name", name);
nbt.setInteger("sizeX", sizeX);
nbt.setInteger("sizeY", sizeY);
nbt.setInteger("sizeZ", sizeZ);
nbt.setIntArray("blocks", blacklist.stream().mapToInt(b -> Block.getIdFromBlock(b.getKey())).toArray());
nbt.setIntArray("metas", blacklist.stream().mapToInt(b -> b.getValue()).toArray());
}
@Override
public boolean hasPermission(EntityPlayer player) {
return true;
}
public void receiveControl(NBTTagCompound data) {}
@Override
public void receiveControl(EntityPlayer player, NBTTagCompound nbt) {
readFromNBT(nbt);
markDirty();
if(nbt.getBoolean("save")) {
saveStructure(player);
}
if(nbt.getBoolean("load")) {
loadStructure(player);
}
}
@Override
@SideOnly(Side.CLIENT)
public AxisAlignedBB getRenderBoundingBox() {
return INFINITE_EXTENT_AABB;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
}
@SideOnly(Side.CLIENT)
public static class GuiStructureSave extends GuiScreen {
private final TileEntityWandStructure tile;
private GuiTextField textName;
private GuiTextField textSizeX;
private GuiTextField textSizeY;
private GuiTextField textSizeZ;
private GuiButton performAction;
private boolean saveOnClose = false;
public GuiStructureSave(TileEntityWandStructure tile) {
this.tile = tile;
}
@Override
public void initGui() {
Keyboard.enableRepeatEvents(true);
textName = new GuiTextField(fontRendererObj, width / 2 - 150, 50, 300, 20);
textName.setText(tile.name);
textSizeX = new GuiTextField(fontRendererObj, width / 2 - 150, 100, 50, 20);
textSizeX.setText("" + tile.sizeX);
textSizeY = new GuiTextField(fontRendererObj, width / 2 - 100, 100, 50, 20);
textSizeY.setText("" + tile.sizeY);
textSizeZ = new GuiTextField(fontRendererObj, width / 2 - 50, 100, 50, 20);
textSizeZ.setText("" + tile.sizeZ);
performAction = new GuiButton(0, width / 2 - 150, 150, 300, 20, "SAVE");
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
drawDefaultBackground();
textName.drawTextBox();
textSizeX.drawTextBox();
textSizeY.drawTextBox();
textSizeZ.drawTextBox();
performAction.drawButton(mc, mouseX, mouseY);
super.drawScreen(mouseX, mouseY, partialTicks);
}
@Override
public void onGuiClosed() {
Keyboard.enableRepeatEvents(false);
NBTTagCompound data = new NBTTagCompound();
tile.writeToNBT(data);
data.setString("name", textName.getText());
try { data.setInteger("sizeX", Integer.parseInt(textSizeX.getText())); } catch (Exception ex) {}
try { data.setInteger("sizeY", Integer.parseInt(textSizeY.getText())); } catch (Exception ex) {}
try { data.setInteger("sizeZ", Integer.parseInt(textSizeZ.getText())); } catch (Exception ex) {}
if(saveOnClose) data.setBoolean("save", true);
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, tile.xCoord, tile.yCoord, tile.zCoord));
}
@Override
protected void keyTyped(char typedChar, int keyCode) {
super.keyTyped(typedChar, keyCode);
textName.textboxKeyTyped(typedChar, keyCode);
textSizeX.textboxKeyTyped(typedChar, keyCode);
textSizeY.textboxKeyTyped(typedChar, keyCode);
textSizeZ.textboxKeyTyped(typedChar, keyCode);
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
super.mouseClicked(mouseX, mouseY, mouseButton);
textName.mouseClicked(mouseX, mouseY, mouseButton);
textSizeX.mouseClicked(mouseX, mouseY, mouseButton);
textSizeY.mouseClicked(mouseX, mouseY, mouseButton);
textSizeZ.mouseClicked(mouseX, mouseY, mouseButton);
if(performAction.mousePressed(mc, mouseX, mouseY)) {
saveOnClose = true;
mc.displayGuiScreen(null);
mc.setIngameFocus();
}
}
@Override
public boolean doesGuiPauseGame() {
return false;
}
}
@SideOnly(Side.CLIENT)
public static class GuiStructureLoad extends GuiScreen {
private final TileEntityWandStructure tile;
private GuiTextField textName;
private GuiFileList fileList;
private GuiButton performAction;
private boolean loadOnClose = false;
private static File structureDirectory = new File(Minecraft.getMinecraft().mcDataDir, "structures");
private static String nameFilter = "";
private static final FileFilter structureFilter = new FileFilter() {
public boolean accept(File file) {
if(!file.isFile() || !file.getName().endsWith(".nbt")) return false;
return nameFilter.isEmpty() || file.getName().contains(nameFilter);
}
};
public GuiStructureLoad(TileEntityWandStructure tile) {
this.tile = tile;
}
@Override
public void initGui() {
Keyboard.enableRepeatEvents(true);
textName = new GuiTextField(fontRendererObj, width / 2 - 150, 50, 300, 20);
textName.setText(tile.name);
nameFilter = tile.name;
structureDirectory.mkdir();
fileList = new GuiFileList(mc, structureDirectory.listFiles(structureFilter), this::selectFile, nameFilter, width, height, 70, height - 90, 16);
performAction = new GuiButton(0, width / 2 - 150, height - 70, 300, 20, "LOAD");
}
public void selectFile(File file) {
String fileName = file.getName();
textName.setText(fileName.substring(0, fileName.length() - 4));
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
fileList.drawScreen(mouseX, mouseY, partialTicks);
textName.drawTextBox();
performAction.drawButton(mc, mouseX, mouseY);
super.drawScreen(mouseX, mouseY, partialTicks);
}
@Override
public void onGuiClosed() {
Keyboard.enableRepeatEvents(false);
NBTTagCompound data = new NBTTagCompound();
tile.writeToNBT(data);
data.setString("name", textName.getText());
if(loadOnClose) data.setBoolean("load", true);
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, tile.xCoord, tile.yCoord, tile.zCoord));
}
@Override
protected void keyTyped(char typedChar, int keyCode) {
super.keyTyped(typedChar, keyCode);
textName.textboxKeyTyped(typedChar, keyCode);
if(!nameFilter.equals(textName.getText())) {
nameFilter = textName.getText();
fileList = new GuiFileList(mc, structureDirectory.listFiles(structureFilter), this::selectFile, nameFilter, width, height, 70, height - 90, 16);
}
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
super.mouseClicked(mouseX, mouseY, mouseButton);
textName.mouseClicked(mouseX, mouseY, mouseButton);
fileList.func_148179_a(mouseX, mouseY, mouseButton);
fileList.select(textName.getText());
if(performAction.mousePressed(mc, mouseX, mouseY)) {
loadOnClose = true;
mc.displayGuiScreen(null);
mc.setIngameFocus();
}
}
@Override
protected void mouseMovedOrUp(int mouseX, int mouseY, int state) {
super.mouseMovedOrUp(mouseX, mouseY, state);
fileList.func_148181_b(mouseX, mouseY, state);
}
@Override
public boolean doesGuiPauseGame() {
return false;
}
}
}

View File

@ -0,0 +1,430 @@
package com.hbm.blocks.generic;
import java.util.ArrayList;
import java.util.List;
import org.lwjgl.input.Keyboard;
import com.hbm.blocks.IBlockSideRotation;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ModBlocks;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.items.ModItems;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toserver.NBTControlPacket;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.util.BufferUtil;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import com.hbm.world.gen.nbt.NBTStructure;
import com.hbm.world.gen.nbt.NBTStructure.JigsawConnection;
import com.hbm.world.gen.nbt.SpawnCondition;
import com.hbm.world.gen.nbt.JigsawPiece;
import com.hbm.world.gen.nbt.JigsawPool;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.material.Material;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
/**
* You're familiar with Billy Mitchell, World Video Game Champion? He could probably do it.
* So I gotta find a way to harness his power. And I think I've found a way.
*
* THAT'S RIGHT, WE'RE GONNA CHEAT.
*
* NBTStructures have the inherent flaws of the vanilla structure system: Structures are composed
* before terrain gen even kicks in, placement order of components are arbitrary and certain
* connected parts will fall apart due to unexpected variance in the terrain. Not good.
* The solution: Simply delay generation of parts using a tile entity that checks if the chunks
* in front of it are loaded, and then places a random part from the chosen pool. When this happens,
* the player is usually still far far away so they'll be none the wiser. Chunk load checks help
* prevent forced chunk loading and all the lag that comes with that.
*
* The system is named after tandem shaped charges: Make a hole with the first charge, then deliver
* the actual payload.
*
* @author hbm, Mellow
*/
public class BlockWandTandem extends BlockContainer implements IBlockSideRotation, INBTBlockTransformable, IGUIProvider, ILookOverlay {
private IIcon iconTop;
private IIcon iconSide;
private IIcon iconBack;
public BlockWandTandem() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityWandTandem();
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {
int l = BlockPistonBase.determineOrientation(world, x, y, z, player);
world.setBlockMetadataWithNotify(x, y, z, l, 2);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":wand_tandem");
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":wand_tandem_top");
this.iconSide = iconRegister.registerIcon(RefStrings.MODID + ":wand_tandem_side");
this.iconBack = iconRegister.registerIcon(RefStrings.MODID + ":wand_tandem_back");
}
@Override
public IIcon getIcon(int side, int meta) {
if(side == meta) return blockIcon;
if(IBlockSideRotation.isOpposite(side, meta)) return iconBack;
if(side <= 1) return iconTop;
if(side > 3 && meta <= 1) return iconTop;
return iconSide;
}
@Override
public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) {
if(side == 0) return IBlockSideRotation.topToBottom(getRotationFromSide(world, x, y, z, 1));
int meta = world.getBlockMetadata(x, y, z);
if(side == meta || IBlockSideRotation.isOpposite(side, meta)) return 0;
// downwards facing has no changes, upwards flips anything not handled already
if(meta == 0) return 0;
if(meta == 1) return 3;
// top (and bottom) is rotated fairly normally
if(side == 1) {
switch(meta) {
case 2: return 3;
case 3: return 0;
case 4: return 1;
case 5: return 2;
}
}
// you know what I aint explaining further, it's a fucking mess here
if(meta == 2) return side == 4 ? 2 : 1;
if(meta == 3) return side == 4 ? 1 : 2;
if(meta == 4) return side == 2 ? 1 : 2;
if(meta == 5) return side == 2 ? 2 : 1;
return 0;
}
@Override
public int getRenderType() {
return IBlockSideRotation.getRenderType();
}
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
TileEntity te = world.getTileEntity(x, y, z);
if(!(te instanceof TileEntityWandTandem)) return false;
TileEntityWandTandem jigsaw = (TileEntityWandTandem) te;
if(player.getHeldItem() != null && player.getHeldItem().getItem() == Items.paper) {
TileEntityWandTandem.copyMode = true;
if(!player.getHeldItem().hasTagCompound()) {
player.getHeldItem().stackTagCompound = new NBTTagCompound();
jigsaw.writeToNBT(player.getHeldItem().stackTagCompound);
} else {
jigsaw.readFromNBT(player.getHeldItem().stackTagCompound);
jigsaw.markDirty();
}
TileEntityWandTandem.copyMode = false;
return true;
}
if(!player.isSneaking()) {
Block block = ModBlocks.getBlockFromStack(player.getHeldItem());
if(block == ModBlocks.wand_air) block = Blocks.air;
if(block != null && !ModBlocks.isStructureBlock(block, false)) {
jigsaw.replaceBlock = block;
jigsaw.replaceMeta = player.getHeldItem().getItemDamage();
jigsaw.markDirty();
return true;
}
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.wand_s) return false;
if(world.isRemote) FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
return true;
}
return false;
}
@Override
@SideOnly(Side.CLIENT)
public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GuiWandTandem((TileEntityWandTandem) world.getTileEntity(x, y, z));
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return null;
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
TileEntity te = world.getTileEntity(x, y, z);
if(!(te instanceof TileEntityWandTandem)) return;
TileEntityWandTandem jigsaw = (TileEntityWandTandem) te;
List<String> text = new ArrayList<String>();
text.add(EnumChatFormatting.GRAY + "Target pool: " + EnumChatFormatting.RESET + jigsaw.pool);
text.add(EnumChatFormatting.GRAY + "Target name: " + EnumChatFormatting.RESET + jigsaw.target);
text.add(EnumChatFormatting.GRAY + "Turns into: " + EnumChatFormatting.RESET + GameRegistry.findUniqueIdentifierFor(jigsaw.replaceBlock).toString());
text.add(EnumChatFormatting.GRAY + " with meta: " + EnumChatFormatting.RESET + jigsaw.replaceMeta);
text.add(EnumChatFormatting.GRAY + "Joint type: " + EnumChatFormatting.RESET + (jigsaw.isRollable ? "Rollable" : "Aligned"));
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
public static class TileEntityWandTandem extends TileEntityLoadedBase implements IControlReceiver {
public static boolean copyMode = false;
private String pool = "default";
private String target = "default";
private Block replaceBlock = Blocks.air;
private int replaceMeta = 0;
private boolean isRollable = true; // sets joint type, rollable joints can be placed in any orientation for vertical jigsaw connections
private boolean isArmed = false;
private SpawnCondition structure;
@Override
public void updateEntity() {
if(!worldObj.isRemote) {
tryGenerate();
networkPackNT(15);
}
}
private void tryGenerate() {
if(!this.isArmed || target == null || target.isEmpty() || pool == null || pool.isEmpty()) return;
JigsawPool pool = structure.getPool(this.pool);
if(pool == null) return;
JigsawPiece nextPiece = pool.get(worldObj.rand);
if(nextPiece == null) return;
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata());
List<JigsawConnection> connectionPool = nextPiece.structure.getConnectionPool(dir, target);
if(connectionPool == null) return;
JigsawConnection toConnection = connectionPool.get(worldObj.rand.nextInt(connectionPool.size()));
int nextCoordBase = directionOffsetToCoordBase(dir.getOpposite(), toConnection.dir);
BlockPos pos = new BlockPos(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
// offset the starting point to the connecting point
int ox = nextPiece.structure.rotateX(toConnection.pos.x, toConnection.pos.z, nextCoordBase);
int oy = toConnection.pos.y;
int oz = nextPiece.structure.rotateZ(toConnection.pos.x, toConnection.pos.z, nextCoordBase);
nextPiece.structure.build(worldObj, nextPiece, pos.getX() - ox, pos.getY() - oy, pos.getZ() - oz, nextCoordBase, structure.name);
worldObj.setBlock(xCoord, yCoord, zCoord, replaceBlock, replaceMeta, 2);
}
private int directionOffsetToCoordBase(ForgeDirection from, ForgeDirection to) {
for(int i = 0; i < 4; i++) {
if(from == to) return i % 4;
from = from.getRotation(ForgeDirection.DOWN);
}
return 0;
}
@Override
public void serialize(ByteBuf buf) {
BufferUtil.writeString(buf, pool);
BufferUtil.writeString(buf, target);
buf.writeInt(Block.getIdFromBlock(replaceBlock));
buf.writeInt(replaceMeta);
buf.writeBoolean(isRollable);
}
@Override
public void deserialize(ByteBuf buf) {
pool = BufferUtil.readString(buf);
target = BufferUtil.readString(buf);
replaceBlock = Block.getBlockById(buf.readInt());
replaceMeta = buf.readInt();
isRollable = buf.readBoolean();
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
if(!copyMode) {
super.writeToNBT(nbt);
nbt.setInteger("direction", this.getBlockMetadata());
if(isArmed) {
nbt.setBoolean("isArmed", isArmed);
nbt.setString("structure", structure.name);
}
}
nbt.setString("pool", pool);
nbt.setString("target", target);
nbt.setString("block", GameRegistry.findUniqueIdentifierFor(replaceBlock).toString());
nbt.setInteger("meta", replaceMeta);
nbt.setBoolean("roll", isRollable);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
if(!copyMode) {
super.readFromNBT(nbt);
isArmed = nbt.getBoolean("isArmed");
structure = NBTStructure.getStructure(nbt.getString("structure"));
}
pool = nbt.getString("pool");
target = nbt.getString("target");
replaceBlock = Block.getBlockFromName(nbt.getString("block"));
replaceMeta = nbt.getInteger("meta");
isRollable = nbt.getBoolean("roll");
}
@Override
public boolean hasPermission(EntityPlayer player) {
return true;
}
@Override
public void receiveControl(NBTTagCompound nbt) {
readFromNBT(nbt);
markDirty();
}
public void arm(SpawnCondition structure) {
isArmed = true;
this.structure = structure;
}
}
public static class GuiWandTandem extends GuiScreen {
private final TileEntityWandTandem jigsaw;
private GuiTextField textPool;
private GuiTextField textTarget;
private GuiButton jointToggle;
public GuiWandTandem(TileEntityWandTandem jigsaw) {
this.jigsaw = jigsaw;
}
@Override
public void initGui() {
Keyboard.enableRepeatEvents(true);
textPool = new GuiTextField(fontRendererObj, this.width / 2 - 150, 50, 300, 20);
textPool.setText(jigsaw.pool);
textTarget = new GuiTextField(fontRendererObj, this.width / 2 + 10, 100, 140, 20);
textTarget.setText(jigsaw.target);
jointToggle = new GuiButton(0, this.width / 2 + 60, 150, 90, 20, jigsaw.isRollable ? "Rollable" : "Aligned");
}
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
drawDefaultBackground();
drawString(fontRendererObj, "Target pool:", this.width / 2 - 150, 37, 0xA0A0A0);
textPool.drawTextBox();
drawString(fontRendererObj, "Target name:", this.width / 2 + 10, 87, 0xA0A0A0);
textTarget.drawTextBox();
drawString(fontRendererObj, "Joint type:", this.width / 2 + 60, 137, 0xA0A0A0);
jointToggle.drawButton(mc, mouseX, mouseY);
super.drawScreen(mouseX, mouseY, partialTicks);
}
@Override
public void onGuiClosed() {
Keyboard.enableRepeatEvents(false);
NBTTagCompound data = new NBTTagCompound();
jigsaw.writeToNBT(data);
data.setString("pool", textPool.getText());
data.setString("target", textTarget.getText());
data.setBoolean("roll", jointToggle.displayString == "Rollable");
PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, jigsaw.xCoord, jigsaw.yCoord, jigsaw.zCoord));
}
@Override
protected void keyTyped(char typedChar, int keyCode) {
super.keyTyped(typedChar, keyCode);
textPool.textboxKeyTyped(typedChar, keyCode);
textTarget.textboxKeyTyped(typedChar, keyCode);
}
@Override
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
super.mouseClicked(mouseX, mouseY, mouseButton);
textPool.mouseClicked(mouseX, mouseY, mouseButton);
textTarget.mouseClicked(mouseX, mouseY, mouseButton);
if(jointToggle.mousePressed(mc, mouseX, mouseY)) {
jointToggle.displayString = jointToggle.displayString == "Rollable" ? "Aligned" : "Rollable";
}
}
@Override public boolean doesGuiPauseGame() { return false; }
}
}

View File

@ -6,7 +6,7 @@ import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.tileentity.deco.TileEntityDecoBlock;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import api.hbm.block.IToolable;
import cpw.mods.fml.client.registry.RenderingRegistry;
@ -25,7 +25,7 @@ import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class DecoBlock extends BlockContainer implements IToolable, INBTTransformable {
public class DecoBlock extends BlockContainer implements IToolable, INBTBlockTransformable {
Random rand = new Random();
@ -185,6 +185,6 @@ public class DecoBlock extends BlockContainer implements IToolable, INBTTransfor
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTTransformable.transformMetaDeco(meta, coordBaseMode);
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
}

View File

@ -1,7 +1,7 @@
package com.hbm.blocks.generic;
import com.hbm.tileentity.deco.TileEntityDecoPoleSatelliteReceiver;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
@ -11,7 +11,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class DecoPoleSatelliteReceiver extends BlockContainer implements INBTTransformable {
public class DecoPoleSatelliteReceiver extends BlockContainer implements INBTBlockTransformable {
public DecoPoleSatelliteReceiver(Material p_i45386_1_) {
super(p_i45386_1_);
@ -61,7 +61,7 @@ public class DecoPoleSatelliteReceiver extends BlockContainer implements INBTTra
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTTransformable.transformMetaDeco(meta, coordBaseMode);
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
}

View File

@ -1,6 +1,6 @@
package com.hbm.blocks.generic;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.client.registry.RenderingRegistry;
import net.minecraft.block.BlockContainer;
@ -11,7 +11,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class DecoTapeRecorder extends BlockContainer implements INBTTransformable {
public class DecoTapeRecorder extends BlockContainer implements INBTBlockTransformable {
public DecoTapeRecorder(Material p_i45386_1_) {
super(p_i45386_1_);
@ -63,7 +63,7 @@ public class DecoTapeRecorder extends BlockContainer implements INBTTransformabl
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTTransformable.transformMetaDeco(meta, coordBaseMode);
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
}

View File

@ -79,7 +79,7 @@ public class TritiumLamp extends Block implements ISpotlight {
private void updateBeam(World world, int x, int y, int z) {
if(!isOn) return;
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) Spotlight.propagateBeam(world, x, y, z, dir, getBeamLength());
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) Spotlight.propagateBeam(world, x, y, z, dir, getBeamLength(), getMeta());
}
@Override
@ -98,6 +98,12 @@ public class TritiumLamp extends Block implements ISpotlight {
return new ItemStack(getOff());
}
protected int getMeta() {
if(this == ModBlocks.lamp_tritium_green_off || this == ModBlocks.lamp_tritium_green_on) return Spotlight.META_GREEN;
if(this == ModBlocks.lamp_tritium_blue_off || this == ModBlocks.lamp_tritium_blue_on) return Spotlight.META_BLUE;
return Spotlight.META_YELLOW;
}
protected Block getOff() {
if(this == ModBlocks.lamp_tritium_green_on) return ModBlocks.lamp_tritium_green_off;
if(this == ModBlocks.lamp_tritium_blue_on) return ModBlocks.lamp_tritium_blue_off;

View File

@ -0,0 +1,13 @@
package com.hbm.blocks.machine;
import com.hbm.blocks.generic.BlockToolConversion;
import net.minecraft.block.material.Material;
public class BlockFusionComponent extends BlockToolConversion {
public BlockFusionComponent() {
super(Material.iron);
this.addVariant(".bscco_welded", ".blanket", ".motor");
}
}

View File

@ -0,0 +1,16 @@
package com.hbm.blocks.machine;
import com.hbm.tileentity.machine.TileEntityFusionTorusStruct;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockFusionTorusStruct extends BlockContainer {
public BlockFusionTorusStruct(Material mat) { super(mat); }
@Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityFusionTorusStruct(); }
@Override public boolean isOpaqueCube() { return false; }
}

View File

@ -1,25 +0,0 @@
package com.hbm.blocks.machine;
import com.hbm.tileentity.machine.TileEntityITERStruct;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockITERStruct extends BlockContainer {
public BlockITERStruct(Material mat) {
super(mat);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityITERStruct();
}
@Override
public boolean isOpaqueCube() {
return false;
}
}

View File

@ -1,7 +1,7 @@
package com.hbm.blocks.machine;
import com.hbm.main.MainRegistry;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.block.Block;
@ -17,7 +17,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public abstract class BlockMachineBase extends BlockContainer implements INBTTransformable {
public abstract class BlockMachineBase extends BlockContainer implements INBTBlockTransformable {
int guiID = -1;
protected boolean rotatable = false;
@ -115,6 +115,6 @@ public abstract class BlockMachineBase extends BlockContainer implements INBTTra
@Override
public int transformMeta(int meta, int coordBaseMode) {
if(!rotatable) return meta;
return INBTTransformable.transformMetaDeco(meta, coordBaseMode);
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
}

View File

@ -33,6 +33,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
@ -40,7 +41,8 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
@SideOnly(Side.CLIENT) private IIcon[] iconTop;
@SideOnly(Side.CLIENT) private IIcon[] iconSide;
@SideOnly(Side.CLIENT) private IIcon[] iconFront;
public BlockMassStorage() {
super(Material.iron);
}
@ -50,15 +52,23 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
public void registerBlockIcons(IIconRegister iconRegister) {
this.iconTop = new IIcon[4];
this.iconSide = new IIcon[4];
this.iconFront = new IIcon[4];
this.iconTop[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_iron");
this.iconSide[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_iron");
this.iconFront[0] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_front_iron");
this.iconTop[1] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_desh");
this.iconSide[1] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_desh");
this.iconFront[1] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_front_desh");
this.iconTop[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top");
this.iconSide[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side");
this.iconFront[2] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_front");
this.iconTop[3] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_top_wood");
this.iconSide[3] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_side_wood");
this.iconFront[3] = iconRegister.registerIcon(RefStrings.MODID + ":mass_storage_front_wood");
}
@Override
@ -74,20 +84,24 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int metadata) {
int meta = this.rectify(metadata);
return side == 1 ? this.iconTop[meta] : (side == 0 ? this.iconTop[meta] : this.iconSide[meta]);
int dir = (metadata / getSubCount()) + 2;
if(side == 0 || side == 1) return iconTop[meta];
if(side == dir) return iconFront[meta];
return iconSide[meta];
}
@Override
public int damageDropped(int meta) {
return meta;
return rectify(meta);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityMassStorage(getCapacity(meta));
}
public int getCapacity(int meta) {
meta = rectify(meta);
return meta == 3 ? 100 : meta == 0 ? 10_000 : meta == 1 ? 100_000 : meta == 2 ? 1_000_000 : 0;
}
@ -108,121 +122,129 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
return false;
}
}
private static boolean dropInv = true;
@Override
public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) {
if(!player.capabilities.isCreativeMode && !world.isRemote && willHarvest) {
ItemStack drop = new ItemStack(this, 1, world.getBlockMetadata(x, y, z));
ItemStack drop = new ItemStack(this, 1, rectify(world.getBlockMetadata(x, y, z)));
ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z);
NBTTagCompound nbt = new NBTTagCompound();
if(inv != null) {
for(int i = 0; i < inv.getSizeInventory(); i++) {
ItemStack stack = inv.getStackInSlot(i);
if(stack == null)
continue;
NBTTagCompound slot = new NBTTagCompound();
stack.writeToNBT(slot);
nbt.setTag("slot" + i, slot);
}
}
if(inv instanceof TileEntityLockableBase) {
TileEntityLockableBase lockable = (TileEntityLockableBase) inv;
if(lockable.isLocked()) {
nbt.setInteger("lock", lockable.getPins());
nbt.setDouble("lockMod", lockable.getMod());
}
}
if(inv instanceof TileEntityMassStorage && nbt.func_150296_c().size() > 0) {
TileEntityMassStorage storage = (TileEntityMassStorage) inv;
nbt.setInteger("stack", storage.getStockpile());
}
if(!nbt.hasNoTags()) {
drop.stackTagCompound = nbt;
}
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop));
}
dropInv = false;
boolean flag = world.setBlockToAir(x, y, z);
dropInv = true;
return flag;
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {
ISidedInventory inv = (ISidedInventory)world.getTileEntity(x, y, z);
if(inv != null && stack.hasTagCompound()) {
for(int i = 0; i < inv.getSizeInventory(); i++) {
inv.setInventorySlotContents(i, ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot" + i)));
}
if(inv instanceof TileEntityMassStorage) {
TileEntityMassStorage storage = (TileEntityMassStorage) inv;
if(stack.stackTagCompound.hasKey("lock")) {
storage.setPins(stack.stackTagCompound.getInteger("lock"));
storage.setMod(stack.stackTagCompound.getDouble("lockMod"));
storage.lock();
}
storage.setStockpile(stack.stackTagCompound.getInteger("stack"));
}
}
super.onBlockPlacedBy(world, x, y, z, player, stack);
int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
int meta = stack.getItemDamage();
if(i == 0) world.setBlockMetadataWithNotify(x, y, z, meta, 2);
if(i == 1) world.setBlockMetadataWithNotify(x, y, z, meta + 3 * getSubCount(), 2);
if(i == 2) world.setBlockMetadataWithNotify(x, y, z, meta + 1 * getSubCount(), 2);
if(i == 3) world.setBlockMetadataWithNotify(x, y, z, meta + 2 * getSubCount(), 2);
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
if(dropInv) {
ISidedInventory sided = (ISidedInventory) world.getTileEntity(x, y, z);
Random rand = world.rand;
if(sided != null) {
for(int i1 = 0; i1 < sided.getSizeInventory(); ++i1) {
if(i1 == 1) continue; //do NOT drop the filter item
ItemStack itemstack = sided.getStackInSlot(i1);
if(itemstack != null) {
float f = rand.nextFloat() * 0.8F + 0.1F;
float f1 = rand.nextFloat() * 0.8F + 0.1F;
float f2 = rand.nextFloat() * 0.8F + 0.1F;
while(itemstack.stackSize > 0) {
int j1 = rand.nextInt(21) + 10;
if(j1 > itemstack.stackSize) {
j1 = itemstack.stackSize;
}
itemstack.stackSize -= j1;
EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
if(itemstack.hasTagCompound()) {
entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
}
float f3 = 0.05F;
entityitem.motionX = (float) rand.nextGaussian() * f3;
entityitem.motionY = (float) rand.nextGaussian() * f3 + 0.2F;
@ -231,7 +253,7 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
}
}
}
world.func_147453_f(x, y, z, block);
}
}
@ -251,51 +273,51 @@ public class BlockMassStorage extends BlockContainer implements IBlockMulti, ILo
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
TileEntity te = world.getTileEntity(x, y, z);
if(!(te instanceof TileEntityMassStorage))
return;
TileEntityMassStorage storage = (TileEntityMassStorage) te;
List<String> text = new ArrayList();
String title = "Empty";
boolean full = storage.type != null;
if(full) {
title = storage.type.getDisplayName();
text.add(String.format(Locale.US, "%,d", storage.getStockpile()) + " / " + String.format(Locale.US, "%,d", storage.getCapacity()));
double percent = (double) storage.getStockpile() / (double) storage.getCapacity();
int charge = (int) Math.floor(percent * 10_000D);
int color = ((int) (0xFF - 0xFF * percent)) << 16 | ((int)(0xFF * percent) << 8);
text.add("&[" + color + "&]" + (charge / 100D) + "%");
}
ILookOverlay.printGeneric(event, title, full ? 0xffff00 : 0x00ffff, full ? 0x404000 : 0x004040, text);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
if(!stack.hasTagCompound()) return;
ItemStack type = ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("slot1"));
if(type != null) {
list.add(EnumChatFormatting.GOLD + type.getDisplayName());
list.add(String.format(Locale.US, "%,d", stack.stackTagCompound.getInteger("stack")) + " / " + String.format(Locale.US, "%,d", getCapacity(stack.getItemDamage())));
}
}
@Override
public boolean hasComparatorInputOverride() {
return true;
}
@Override
public int getComparatorInputOverride(World world, int x, int y, int z, int side) {
return ((TileEntityMassStorage) world.getTileEntity(x, y, z)).redstone;

View File

@ -1,52 +0,0 @@
package com.hbm.blocks.machine;
import com.hbm.tileentity.machine.TileEntityPlasmaStruct;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class BlockPlasmaStruct extends BlockContainer {
public BlockPlasmaStruct(Material mat) {
super(mat);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityPlasmaStruct();
}
public boolean isOpaqueCube() {
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, 2, 2);
}
if(i == 1)
{
world.setBlockMetadataWithNotify(x, y, z, 5, 2);
}
if(i == 2)
{
world.setBlockMetadataWithNotify(x, y, z, 3, 2);
}
if(i == 3)
{
world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
}
}

View File

@ -1,6 +1,7 @@
package com.hbm.blocks.machine;
import com.hbm.tileentity.machine.TileEntityCharger;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
@ -12,8 +13,8 @@ import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class Charger extends BlockContainer {
public class Charger extends BlockContainer implements INBTBlockTransformable {
public Charger(Material mat) {
super(mat);
}
@ -22,17 +23,17 @@ public class Charger extends BlockContainer {
public TileEntity createNewTileEntity(World world, int meta) {
return new TileEntityCharger();
}
@Override
public int getRenderType(){
return -1;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
@ -40,9 +41,9 @@ public class Charger extends BlockContainer {
@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, 2, 2);
}
@ -60,13 +61,13 @@ public class Charger extends BlockContainer {
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
float f = 0.0625F;
switch(world.getBlockMetadata(x, y, z)) {
case 2: this.setBlockBounds(5 * f, 0.25F, 12 * f, 11 * f, 0.75F, 1F); break;
case 3: this.setBlockBounds(5 * f, 0.25F, 0F, 11 * f, 0.75F, 4 * f); break;
case 4: this.setBlockBounds(12 * f, 0.25F, 5 * f, 1F, 0.75F, 11 * f); break;
case 5: this.setBlockBounds(0F, 0.25F, 5 * f, 4 * f, 0.75F, 11 * f); break;
default: this.setBlockBounds(5 * f, 0.25F, 5 * f, 11 * f, 0.75F, 11 * f); break;
case 2: this.setBlockBounds(5 * f, 0.25F, 12 * f, 11 * f, 0.75F, 1F); break;
case 3: this.setBlockBounds(5 * f, 0.25F, 0F, 11 * f, 0.75F, 4 * f); break;
case 4: this.setBlockBounds(12 * f, 0.25F, 5 * f, 1F, 0.75F, 11 * f); break;
case 5: this.setBlockBounds(0F, 0.25F, 5 * f, 4 * f, 0.75F, 11 * f); break;
default: this.setBlockBounds(5 * f, 0.25F, 5 * f, 11 * f, 0.75F, 11 * f); break;
}
}
@ -75,4 +76,9 @@ public class Charger extends BlockContainer {
this.setBlockBoundsBasedOnState(world, x, y, z);
return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ);
}
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
}

View File

@ -1,12 +1,18 @@
package com.hbm.blocks.machine;
import java.util.Random;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityCore;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@ -50,5 +56,43 @@ public class CoreCore extends BlockContainer {
return false;
}
}
private Random rand = new Random();
// shitty copy pasted crap for the 50th time because i hate this block
@Override
public void breakBlock(World world, int x, int y, int z, Block b, int m) {
TileEntityCore core = (TileEntityCore) world.getTileEntity(x, y, z);
if(core != null) {
for(int i1 = 0; i1 < core.getSizeInventory(); ++i1) {
ItemStack itemstack = core.getStackInSlot(i1);
if(itemstack != null) {
float f = this.rand.nextFloat() * 0.8F + 0.1F;
float f1 = this.rand.nextFloat() * 0.8F + 0.1F;
float f2 = this.rand.nextFloat() * 0.8F + 0.1F;
while(itemstack.stackSize > 0) {
int j1 = this.rand.nextInt(21) + 10;
if(j1 > itemstack.stackSize) j1 = itemstack.stackSize;
itemstack.stackSize -= j1;
EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
if(itemstack.hasTagCompound()) entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
float f3 = 0.05F;
entityitem.motionX = (float) this.rand.nextGaussian() * f3;
entityitem.motionY = (float) this.rand.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float) this.rand.nextGaussian() * f3;
world.spawnEntityInWorld(entityitem);
}
}
}
world.func_147453_f(x, y, z, b);
}
super.breakBlock(world, x, y, z, b, m);
}
}

View File

@ -4,10 +4,10 @@ import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.machine.FloodlightBeam.TileEntityFloodlightBeam;
import com.hbm.util.Compat;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import api.hbm.block.IToolable;
import api.hbm.energymk2.IEnergyReceiverMK2;
import com.hbm.world.gen.INBTTransformable;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
@ -28,7 +28,7 @@ import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class Floodlight extends BlockContainer implements IToolable, INBTTransformable {
public class Floodlight extends BlockContainer implements IToolable, INBTBlockTransformable {
public Floodlight(Material mat) {
super(mat);

View File

@ -4,11 +4,17 @@ import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.material.NTMMaterial;
import com.hbm.inventory.material.Mats.MaterialStack;
import com.hbm.items.machine.ItemScraps;
import com.hbm.lib.Library;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityFoundryChannel;
import com.hbm.uninos.GenNode;
import com.hbm.uninos.INetworkProvider;
import com.hbm.uninos.networkproviders.FoundryNetwork;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.block.ICrucibleAcceptor;
import cpw.mods.fml.client.registry.RenderingRegistry;
@ -41,7 +47,7 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor
public FoundryChannel() {
super(Material.rock);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
@ -65,16 +71,16 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor
@Override
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB entityBounding, List list, Entity entity) {
List<AxisAlignedBB> bbs = new ArrayList();
bbs.add(AxisAlignedBB.getBoundingBox(x + 0.3125D, y, z + 0.3125D, x + 0.6875D, y + 0.5D, z + 0.6875D));
if(canConnectTo(world, x, y, z, Library.POS_X)) bbs.add(AxisAlignedBB.getBoundingBox(x + 0.6875D, y, z + 0.3125D, x + 1D, y + 0.5D, z + 0.6875D));
if(canConnectTo(world, x, y, z, Library.NEG_X)) bbs.add(AxisAlignedBB.getBoundingBox(x, y, z + 0.3125D, x + 0.3125D, y + 0.5D, z + 0.6875D));
if(canConnectTo(world, x, y, z, Library.POS_Z)) bbs.add(AxisAlignedBB.getBoundingBox(x + 0.3125D, y, z + 0.6875D, x + 0.6875D, y + 0.5D, z + 1D));
if(canConnectTo(world, x, y, z, Library.NEG_Z)) bbs.add(AxisAlignedBB.getBoundingBox(x + 0.3125D, y, z, x + 0.6875D, y + 0.5D, z + 0.3125D));
for(AxisAlignedBB bb : bbs) {
if(entityBounding.intersectsWith(bb)) {
list.add(bb);
@ -120,23 +126,23 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor
public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) {
return ((ICrucibleAcceptor) world.getTileEntity(x, y, z)).canAcceptPartialFlow(world, x, y, z, side, stack);
}
@Override
public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) {
return ((ICrucibleAcceptor) world.getTileEntity(x, y, z)).flow(world, x, y, z, side, stack);
}
public boolean canConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir) {
if(dir == ForgeDirection.UP || dir == ForgeDirection.DOWN || dir == ForgeDirection.UNKNOWN)
return false;
Block b = world.getBlock(x + dir.offsetX, y, z + dir.offsetZ);
int meta = world.getBlockMetadata(x + dir.offsetX, y, z + dir.offsetZ);
if((b == ModBlocks.foundry_outlet || b == ModBlocks.foundry_slagtap) && meta == dir.ordinal())
return true;
return b == ModBlocks.foundry_channel || b == ModBlocks.foundry_mold;
}
@ -146,25 +152,25 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor
public int getRenderType() {
return renderID;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@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;
}
TileEntityFoundryChannel cast = (TileEntityFoundryChannel) world.getTileEntity(x, y, z);
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool && ((ItemTool) player.getHeldItem().getItem()).getToolClasses(player.getHeldItem()).contains("shovel")) {
if(cast.amount > 0) {
ItemStack scrap = ItemScraps.create(new MaterialStack(cast.type, cast.amount));
@ -176,19 +182,18 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor
}
cast.amount = 0;
cast.type = null;
cast.propagateMaterial(null);
cast.markDirty();
world.markBlockForUpdate(x, y, z);
}
return true;
}
return false;
}
@Override
public void breakBlock(World world, int x, int y, int z, Block b, int i) {
TileEntityFoundryChannel channel = (TileEntityFoundryChannel) world.getTileEntity(x, y, z);
if(channel.amount > 0) {
ItemStack scrap = ItemScraps.create(new MaterialStack(channel.type, channel.amount));
@ -196,7 +201,24 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor
world.spawnEntityInWorld(item);
channel.amount = 0;
}
super.breakBlock(world, x, y, z, b, i);
}
public static class FoundryNode extends GenNode<FoundryNetwork> {
public NTMMaterial type;
public FoundryNode(INetworkProvider<FoundryNetwork> provider, BlockPos... positions) {
super(provider, positions);
}
@Override
public FoundryNode setConnections(DirPos... connections) {
super.setConnections(connections);
return this;
}
}
}

View File

@ -1,34 +0,0 @@
package com.hbm.blocks.machine;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachineAmgen;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public class MachineAmgen extends BlockContainer {
@SideOnly(Side.CLIENT)
private IIcon iconTop;
public MachineAmgen(Material p_i45386_1_) {
super(p_i45386_1_);
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityMachineAmgen();
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_deprecated");
}
}

View File

@ -0,0 +1,55 @@
package com.hbm.blocks.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityMachineAnnihilator;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineAnnihilator extends BlockDummyable {
public MachineAnnihilator() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityMachineAnnihilator();
if(meta >= 6) return new TileEntityProxyCombo().inventory().fluid();
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return standardOpenBehavior(world, x, y, z, player, side);
}
@Override public int[] getDimensions() { return new int[] {2, 0, 4, 4, 1, 1}; }
@Override public int getOffset() { return 4; }
@Override
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return super.checkRequirement(world, x, y, z, dir, o) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * (o - 3), y, z + dir.offsetZ * (o - 3), new int[] {8, -2, 1, 1, 1, 1}, x, y, z, dir);
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * (o - 3), y, z + dir.offsetZ * (o - 3), new int[] {8, -2, 1, 1, 1, 1}, this, dir);
x += dir.offsetX * o;
z += dir.offsetZ * o;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
this.makeExtra(world, x + dir.offsetX * 3 + rot.offsetX, y, z + dir.offsetZ * 3 + rot.offsetZ);
this.makeExtra(world, x + dir.offsetX * 3 - rot.offsetX, y, z + dir.offsetZ * 3 - rot.offsetZ);
this.makeExtra(world, x + dir.offsetX * 4, y, z + dir.offsetZ * 4);
}
}

View File

@ -11,6 +11,7 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Deprecated
public class MachineAssembler extends BlockDummyable {
public MachineAssembler(Material p_i45386_1_) {

View File

@ -0,0 +1,88 @@
package com.hbm.blocks.machine;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.tileentity.TileEntityProxyDyn;
import com.hbm.tileentity.machine.TileEntityMachineAssemblyFactory;
import com.hbm.util.fauxpointtwelve.DirPos;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineAssemblyFactory extends BlockDummyable implements ITooltipProvider, ILookOverlay {
public MachineAssemblyFactory(Material mat) {
super(mat);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityMachineAssemblyFactory();
if(meta >= 6) return new TileEntityProxyDyn().inventory().power().fluid();
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override public int[] getDimensions() { return new int[] {2, 0, 2, 2, 2, 2}; }
@Override public int getOffset() { return 2; }
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
x -= dir.offsetX * 2;
z -= dir.offsetZ * 2;
for(int i = -2; i <= 2; i++) for(int j = -2; j <= 2; j++) {
if(Math.abs(i) == 2 || Math.abs(j) == 2) this.makeExtra(world, x + i, y, z + j);
}
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
for(int i = -2; i <= 2; i++) {
this.makeExtra(world, x + dir.offsetX * i + rot.offsetX * 2, y + 2, z + dir.offsetZ * i + rot.offsetZ * 2);
this.makeExtra(world, x + dir.offsetX * i - rot.offsetX * 2, y + 2, z + dir.offsetZ * i - rot.offsetZ * 2);
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
int[] pos = this.findCore(world, x, y, z);
if(pos == null) return;
TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]);
if(!(te instanceof TileEntityMachineAssemblyFactory)) return;
TileEntityMachineAssemblyFactory assemfac = (TileEntityMachineAssemblyFactory) te;
DirPos[] cool = assemfac.getCoolPos();
for(DirPos dirPos : cool) if(dirPos.compare(x + dirPos.getDir().offsetX, y, z + dirPos.getDir().offsetZ)) {
List<String> text = new ArrayList();
text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + assemfac.water.getTankType().getLocalizedName());
text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + assemfac.lps.getTankType().getLocalizedName());
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
break;
}
}
}

View File

@ -10,6 +10,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Deprecated
public class MachineAssemfac extends BlockDummyable {
public MachineAssemfac(Material mat) {

View File

@ -3,6 +3,12 @@ package com.hbm.blocks.machine;
import java.util.ArrayList;
import java.util.List;
import com.hbm.handler.CompatHandler;
import cpw.mods.fml.common.Optional;
import li.cil.oc.api.machine.Arguments;
import li.cil.oc.api.machine.Callback;
import li.cil.oc.api.machine.Context;
import li.cil.oc.api.network.SimpleComponent;
import org.lwjgl.input.Keyboard;
import com.hbm.blocks.ILookOverlay;
@ -149,13 +155,15 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1);
player.addExhaustion(0.025F);
}
public static class TileEntityCapacitor extends TileEntityLoadedBase implements IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT, IRORValueProvider {
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
public static class TileEntityCapacitor extends TileEntityLoadedBase implements IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT, IRORValueProvider, SimpleComponent, CompatHandler.OCComponent {
public long power;
protected long maxPower;
public long powerReceived;
public long powerSent;
public long lastPowerReceived;
public long lastPowerSent;
public TileEntityCapacitor() { }
@ -198,6 +206,8 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
networkPackNT(15);
this.lastPowerSent = powerSent;
this.lastPowerReceived = powerReceived;
this.powerSent = 0;
this.powerReceived = 0;
}
@ -315,5 +325,69 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
if((PREFIX_VALUE + "fillpercent").equals(name)) return "" + this.power * 100 / this.maxPower;
return null;
}
// opencomputer
@Override
@Optional.Method(modid = "OpenComputers")
public String getComponentName() {
return "capacitor";
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergy(Context context, Arguments args) {
return new Object[] {power};
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getMaxEnergy(Context context, Arguments args) {
return new Object[] {maxPower};
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergySent(Context context, Arguments args) {
return new Object[] {lastPowerReceived};
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getEnergyReceived(Context context, Arguments args) { return new Object[] {lastPowerSent}; }
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getInfo(Context context, Arguments args) {
return new Object[] {power, maxPower, lastPowerReceived, lastPowerSent};
}
@Override
@Optional.Method(modid = "OpenComputers")
public String[] methods() {
return new String[] {
"getEnergy",
"getMaxEnergy",
"getEnergySent",
"getEnergyReceived",
"getInfo"
};
}
@Override
@Optional.Method(modid = "OpenComputers")
public Object[] invoke(String method, Context context, Arguments args) throws Exception {
switch(method) {
case ("getEnergy"):
return getEnergy(context, args);
case ("getMaxEnergy"):
return getMaxEnergy(context, args);
case ("getEnergySent"):
return getEnergySent(context, args);
case ("getEnergyReceived"):
return getEnergyReceived(context, args);
case ("getInfo"):
return getEnergyReceived(context, args);
}
throw new NoSuchMethodException();
}
}
}

View File

@ -5,6 +5,7 @@ import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ICustomBlockHighlight;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.inventory.material.Mats.MaterialStack;
import com.hbm.items.machine.ItemScraps;
import com.hbm.main.MainRegistry;
@ -27,7 +28,7 @@ import net.minecraft.world.World;
import net.minecraftforge.client.event.DrawBlockHighlightEvent;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineCrucible extends BlockDummyable implements ICrucibleAcceptor {
public class MachineCrucible extends BlockDummyable implements ICrucibleAcceptor, ITooltipProvider {
public MachineCrucible() {
super(Material.rock);
@ -181,4 +182,9 @@ public class MachineCrucible extends BlockDummyable implements ICrucibleAcceptor
@Override public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return false; }
@Override public MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, MaterialStack stack) { return null; }
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
}

View File

@ -6,13 +6,12 @@ import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.IPersistentInfoProvider;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.IPersistentNBT;
import com.hbm.tileentity.machine.storage.TileEntityMachineBattery;
import com.hbm.tileentity.machine.storage.TileEntityMachineFENSU;
import com.hbm.util.BobMathUtil;
import com.hbm.util.i18n.I18nUtil;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@ -30,43 +29,21 @@ public class MachineFENSU extends BlockDummyable implements ILookOverlay, IPersi
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12)
return new TileEntityMachineFENSU();
if(meta >= 12) return new TileEntityMachineFENSU();
return null;
}
@Override
public int[] getDimensions() {
return new int[] {4, 0, 1, 1, 2, 2};
}
@Override
public int getOffset() {
return 1;
}
@Override public int[] getDimensions() { return new int[] {4, 0, 1, 1, 2, 2}; }
@Override public int getOffset() { return 1; }
@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())
{
int[] pos = this.findCore(world, x, y, z);
if(pos == null)
return false;
TileEntityMachineFENSU entity = (TileEntityMachineFENSU) world.getTileEntity(pos[0], pos[1], pos[2]);
if(entity != null)
{
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]);
}
return true;
} else {
return false;
}
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
return IPersistentNBT.getDrops(world, x, y, z, this);
}
@Override

View File

@ -1,21 +1,14 @@
package com.hbm.blocks.machine;
import java.util.Random;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.material.Mats;
import com.hbm.items.ModItems;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityITER;
import com.hbm.tileentity.machine.TileEntityITERStruct;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@ -25,6 +18,7 @@ import net.minecraft.util.Vec3;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Deprecated
public class MachineITER extends BlockDummyable {
public MachineITER() {
@ -43,11 +37,6 @@ public class MachineITER extends BlockDummyable {
return null;
}
@Override
public Item getItemDropped(int i, Random rand, int j) {
return null;
}
@Override
public int[] getDimensions() {
//because we'll implement our own gnarly behavior here
@ -238,28 +227,5 @@ public class MachineITER extends BlockDummyable {
public int getOffset() {
return 7;
}
public static boolean drop = true;
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int i) {
if(i >= 12 && drop) {
for(int l = 0; l < 4; l++) {
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.fusion_conductor, 64)));
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.plate_cast, 64, Mats.MAT_STEEL.id)));
}
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.fusion_conductor, 36)));
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.plate_cast, 36, Mats.MAT_STEEL.id)));
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.fusion_center, 64)));
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.fusion_motor, 4)));
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.reinforced_glass, 8)));
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_iter_core, 1)));
}
super.breakBlock(world, x, y, z, block, i);
}
}

View File

@ -4,6 +4,7 @@ import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.machine.BlockPWR.TileEntityBlockPWR;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.items.ModItems;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.packet.toclient.AuxParticlePacketNT;
@ -80,6 +81,7 @@ public class MachinePWRController extends BlockContainer implements ITooltipProv
if(!controller.assembled) {
assemble(world, x, y, z, player);
} else {
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.pwr_printer) return false;
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
}

View File

@ -1,26 +1,19 @@
package com.hbm.blocks.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityMachinePlasmaHeater;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.Random;
public class MachinePlasmaHeater extends BlockDummyable {
public MachinePlasmaHeater() {
@ -39,11 +32,6 @@ public class MachinePlasmaHeater extends BlockDummyable {
return null;
}
@Override
public Item getItemDropped(int i, Random rand, int j) {
return null;
}
@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)
@ -133,19 +121,4 @@ public class MachinePlasmaHeater extends BlockDummyable {
public int getOffset() {
return 1;
}
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int i) {
if(i >= 12) {
for(int l = 0; l < 2; l++)
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.fusion_heater, 64)));
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.fusion_heater, 7)));
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_plasma_core, 1)));
}
super.breakBlock(world, x, y, z, block, i);
}
}

View File

@ -0,0 +1,20 @@
package com.hbm.blocks.machine;
import com.hbm.tileentity.machine.TileEntityMachinePrecAss;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class MachinePrecAss extends MachineAssemblyMachine {
public MachinePrecAss(Material mat) {
super(mat);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityMachinePrecAss();
return super.createNewTileEntity(world, meta);
}
}

View File

@ -24,7 +24,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.stats.StatList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.EnumChatFormatting;
@ -87,27 +86,11 @@ public class MachineRefinery extends BlockDummyable implements IPersistentInfoPr
public int getOffset() {
return 1;
}
@Override
public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) {
if(!player.capabilities.isCreativeMode) {
harvesters.set(player);
this.dropBlockAsItem(world, x, y, z, meta, 0);
harvesters.set(null);
}
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
return IPersistentNBT.getDrops(world, x, y, z, this);
}
@Override
public void harvestBlock(World world, EntityPlayer player, int x, int y, int z, int meta) {
player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1);
player.addExhaustion(0.025F);
}
@Override
public void addInformation(ItemStack stack, NBTTagCompound persistentTag, EntityPlayer player, List list, boolean ext) {

View File

@ -1,133 +0,0 @@
package com.hbm.blocks.machine;
import com.hbm.blocks.ModBlocks;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.TileEntityMachineSchrabidiumTransmutator;
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.client.renderer.texture.IIconRegister;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import java.util.Random;
public class MachineSchrabidiumTransmutator extends BlockContainer {
private final Random field_149933_a = new Random();
private static boolean keepInventory;
@SideOnly(Side.CLIENT)
//private IIcon iconFront;
private IIcon iconTop;
private IIcon iconBottom;
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + (":transmutator_top"));
this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + (":transmutator_bottom"));
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":transmutator_side");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int metadata) {
return side == 1 ? this.iconTop : (side == 0 ? this.iconBottom : this.blockIcon);
}
public MachineSchrabidiumTransmutator(Material p_i45386_1_) {
super(p_i45386_1_);
}
@Override
public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_)
{
return Item.getItemFromBlock(ModBlocks.machine_schrabidium_transmutator);
}
@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())
{
TileEntityMachineSchrabidiumTransmutator entity = (TileEntityMachineSchrabidiumTransmutator) world.getTileEntity(x, y, z);
if(entity != null)
{
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z);
}
return true;
} else {
return false;
}
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityMachineSchrabidiumTransmutator();
}
@Override
public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_)
{
if (!keepInventory)
{
TileEntityMachineSchrabidiumTransmutator tileentityfurnace = (TileEntityMachineSchrabidiumTransmutator)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_);
if (tileentityfurnace != null)
{
for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1)
{
ItemStack itemstack = tileentityfurnace.getStackInSlot(i1);
if (itemstack != null)
{
float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
while (itemstack.stackSize > 0)
{
int j1 = this.field_149933_a.nextInt(21) + 10;
if (j1 > itemstack.stackSize)
{
j1 = itemstack.stackSize;
}
itemstack.stackSize -= j1;
EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
if (itemstack.hasTagCompound())
{
entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
}
float f3 = 0.05F;
entityitem.motionX = (float)this.field_149933_a.nextGaussian() * f3;
entityitem.motionY = (float)this.field_149933_a.nextGaussian() * f3 + 0.2F;
entityitem.motionZ = (float)this.field_149933_a.nextGaussian() * f3;
p_149749_1_.spawnEntityInWorld(entityitem);
}
}
}
p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_);
}
}
super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_);
}
}

View File

@ -26,12 +26,8 @@ public class MachineSolarBoiler extends BlockDummyable implements ILookOverlay {
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12)
return new TileEntitySolarBoiler();
if(meta >= extra)
return new TileEntityProxyCombo(false, false, true);
if(meta >= 12) return new TileEntitySolarBoiler();
if(meta >= extra) return new TileEntityProxyCombo(false, false, true);
return null;
}

View File

@ -1,7 +1,6 @@
package com.hbm.blocks.machine;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemBattery;
import com.hbm.tileentity.machine.TileEntityRadiobox;
import net.minecraft.block.Block;
@ -47,31 +46,17 @@ public class Radiobox extends BlockContainer {
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, 2, 2);
}
if(i == 1)
{
world.setBlockMetadataWithNotify(x, y, z, 5, 2);
}
if(i == 2)
{
world.setBlockMetadataWithNotify(x, y, z, 3, 2);
}
if(i == 3)
{
world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2);
if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2);
if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2);
if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2);
}
@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)
{
if(world.isRemote) {
return true;
} else if(!player.isSneaking())
{
} else if(!player.isSneaking()) {
TileEntityRadiobox box = (TileEntityRadiobox)world.getTileEntity(x, y, z);
if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.battery_spark && !box.infinite) {
@ -93,78 +78,53 @@ public class Radiobox extends BlockContainer {
return true;
} else {
//FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_radiobox, world, x, y, z);
//return true;
return false;
}
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_)
{
public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) {
int te = p_149719_1_.getBlockMetadata(p_149719_2_, p_149719_3_, p_149719_4_);
float f = 0.0625F;
this.setBlockBounds(0.0F, 0.0F, 2*f, 1.0F, 1.0F, 14*f);
switch(te)
{
float f = 0.0625F;
this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f);
switch(te) {
case 4:
case 8:
this.setBlockBounds(11*f, 1*f, 4*f, 16*f, 15*f, 12*f);
break;
case 8: this.setBlockBounds(11 * f, 1 * f, 4 * f, 16 * f, 15 * f, 12 * f); break;
case 2:
case 6:
this.setBlockBounds(4*f, 1*f, 11*f, 12*f, 15*f, 16*f);
break;
case 6: this.setBlockBounds(4 * f, 1 * f, 11 * f, 12 * f, 15 * f, 16 * f); break;
case 5:
case 9:
this.setBlockBounds(0*f, 1*f, 4*f, 5*f, 15*f, 12*f);
break;
case 9: this.setBlockBounds(0 * f, 1 * f, 4 * f, 5 * f, 15 * f, 12 * f); break;
case 3:
case 7:
this.setBlockBounds(4*f, 1*f, 0*f, 12*f, 15*f, 5*f);
break;
case 7: this.setBlockBounds(4 * f, 1 * f, 0 * f, 12 * f, 15 * f, 5 * f); break;
}
}
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
int te = world.getBlockMetadata(x, y, z);
float f = 0.0625F;
this.setBlockBounds(0.0F, 0.0F, 2*f, 1.0F, 1.0F, 14*f);
switch(te)
{
float f = 0.0625F;
this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f);
switch(te) {
case 4:
case 8:
this.setBlockBounds(11*f, 1*f, 4*f, 16*f, 15*f, 12*f);
break;
case 8: this.setBlockBounds(11 * f, 1 * f, 4 * f, 16 * f, 15 * f, 12 * f); break;
case 2:
case 6:
this.setBlockBounds(4*f, 1*f, 11*f, 12*f, 15*f, 16*f);
break;
case 6: this.setBlockBounds(4 * f, 1 * f, 11 * f, 12 * f, 15 * f, 16 * f); break;
case 5:
case 9:
this.setBlockBounds(0*f, 1*f, 4*f, 5*f, 15*f, 12*f);
break;
case 9: this.setBlockBounds(0 * f, 1 * f, 4 * f, 5 * f, 15 * f, 12 * f); break;
case 3:
case 7:
this.setBlockBounds(4*f, 1*f, 0*f, 12*f, 15*f, 5*f);
break;
case 7: this.setBlockBounds(4 * f, 1 * f, 0 * f, 12 * f, 15 * f, 5 * f); break;
}
return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ);
}
public void breakBlock(World world, int x, int y, int z, Block b, int m) {
public void breakBlock(World world, int x, int y, int z, Block b, int m) {
TileEntityRadiobox box = (TileEntityRadiobox)world.getTileEntity(x, y, z);
if(box.infinite) world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.battery_spark)));
if(box.infinite) {
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, ItemBattery.getEmptyBattery(ModItems.battery_spark)));
}
super.breakBlock(world, x, y, z, b, m);
}
super.breakBlock(world, x, y, z, b, m);
}
}

View File

@ -4,9 +4,9 @@ import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.world.World;
public class RailBooster extends RailGeneric {
public RailBooster() {
super();
public RailBooster(String tool, int harvestLevel) {
super(tool, harvestLevel);
this.setMaxSpeed(1.0F);
this.setFlexible(false);
}

View File

@ -17,19 +17,20 @@ import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class RailGeneric extends BlockRailBase implements ITooltipProvider {
@SideOnly(Side.CLIENT)
protected IIcon turnedIcon;
protected static final float baseSpeed = 0.4F;
protected float maxSpeed = 0.4F;
protected boolean slopable = true;
protected boolean flexible = true;
public RailGeneric() {
public RailGeneric(String tool, int harvestLevel) {
super(false);
setHarvestLevel(tool, harvestLevel);
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
@ -40,16 +41,16 @@ public class RailGeneric extends BlockRailBase implements ITooltipProvider {
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister reg) {
super.registerBlockIcons(reg);
if(flexible)
this.turnedIcon = reg.registerIcon(this.getTextureName() + "_turned");
}
@Override
public float getRailMaxSpeed(World world, EntityMinecart cart, int y, int x, int z) {
return maxSpeed;
}
public RailGeneric setMaxSpeed(float speed) {
this.maxSpeed = speed;
return this;
@ -59,7 +60,7 @@ public class RailGeneric extends BlockRailBase implements ITooltipProvider {
public boolean isFlexibleRail(IBlockAccess world, int y, int x, int z) {
return !isPowered();
}
public RailGeneric setFlexible(boolean flexible) {
this.flexible = flexible;
return this;
@ -69,7 +70,7 @@ public class RailGeneric extends BlockRailBase implements ITooltipProvider {
public boolean canMakeSlopes(IBlockAccess world, int x, int y, int z) {
return true;
}
public RailGeneric setSlopable(boolean slopable) {
this.slopable = slopable;
return this;
@ -78,15 +79,15 @@ public class RailGeneric extends BlockRailBase implements ITooltipProvider {
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
float speed = this.maxSpeed / this.baseSpeed;
if(speed != 1F) {
list.add((speed > 1 ? EnumChatFormatting.BLUE : EnumChatFormatting.RED) + "Speed: " + ((int) (speed * 100)) + "%");
}
if(!flexible) {
list.add(EnumChatFormatting.RED + "Cannot be used for turns!");
}
if(!slopable) {
list.add(EnumChatFormatting.RED + "Cannot be used for slopes!");
}

View File

@ -9,15 +9,16 @@ public class RailHighspeed extends BlockRailBase {
/*@SideOnly(Side.CLIENT)
private IIcon icon;*/
public RailHighspeed() {
public RailHighspeed(String tool, Integer harvestLevel) {
super(true);
setHarvestLevel(tool, harvestLevel);
}
/*@Override
@SideOnly(Side.CLIENT) public IIcon getIcon(int p_149691_1_, int p_149691_2_) {
return p_149691_2_ >= 6 ? this.icon : this.blockIcon;
}
@Override
@SideOnly(Side.CLIENT)

View File

@ -1,31 +0,0 @@
package com.hbm.blocks.machine;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachineSPP;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class SPPBottom extends BlockContainer {
public SPPBottom(Material p_i45386_1_) {
super(p_i45386_1_);
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityMachineSPP();
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_deprecated");
}
}

View File

@ -1,22 +0,0 @@
package com.hbm.blocks.machine;
import com.hbm.lib.RefStrings;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
public class SPPTop extends Block {
public SPPTop(Material p_i45394_1_) {
super(p_i45394_1_);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":block_deprecated");
}
}

View File

@ -7,7 +7,7 @@ import java.util.Random;
import com.hbm.blocks.BlockEnums.LightType;
import com.hbm.blocks.ISpotlight;
import com.hbm.main.ResourceManager;
import com.hbm.world.gen.INBTTransformable;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
@ -26,7 +26,11 @@ import net.minecraft.world.World;
import net.minecraftforge.client.model.obj.WavefrontObject;
import net.minecraftforge.common.util.ForgeDirection;
public class Spotlight extends Block implements ISpotlight, INBTTransformable {
public class Spotlight extends Block implements ISpotlight, INBTBlockTransformable {
public static final int META_YELLOW = 0;
public static final int META_GREEN = 1;
public static final int META_BLUE = 2;
public static boolean disableOnGeneration = true;
@ -223,7 +227,7 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable {
if(!isOn) return;
ForgeDirection dir = getDirection(world, x, y, z);
propagateBeam(world, x, y, z, dir, beamLength);
propagateBeam(world, x, y, z, dir, beamLength, META_YELLOW);
}
public ForgeDirection getDirection(IBlockAccess world, int x, int y, int z) {
@ -281,7 +285,7 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable {
}
// Recursively add beam blocks, updating any that already exist with new incoming light directions
public static void propagateBeam(World world, int x, int y, int z, ForgeDirection dir, int distance) {
public static void propagateBeam(World world, int x, int y, int z, ForgeDirection dir, int distance, int meta) {
distance--;
if(distance <= 0)
return;
@ -295,7 +299,7 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable {
return;
if(!(block instanceof SpotlightBeam)) {
world.setBlock(x, y, z, ModBlocks.spotlight_beam);
world.setBlock(x, y, z, ModBlocks.spotlight_beam, meta, 3);
}
// If we encounter an existing beam, add a new INCOMING direction to the
@ -303,7 +307,7 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable {
if (SpotlightBeam.setDirection(world, x, y, z, dir, true) == 0)
return;
propagateBeam(world, x, y, z, dir, distance);
propagateBeam(world, x, y, z, dir, distance, meta);
}
// Recursively delete beam blocks, if they aren't still illuminated from a different direction
@ -326,7 +330,7 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable {
}
// Travels back through a beam to the source, and if found, repropagates the beam
public static void backPropagate(World world, int x, int y, int z, ForgeDirection dir) {
public static void backPropagate(World world, int x, int y, int z, ForgeDirection dir, int meta) {
x -= dir.offsetX;
y -= dir.offsetY;
z -= dir.offsetZ;
@ -334,12 +338,12 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable {
Block block = world.getBlock(x, y, z);
if(block instanceof ISpotlight) {
ISpotlight spot = (ISpotlight) block;
propagateBeam(world, x, y, z, dir, spot.getBeamLength());
propagateBeam(world, x, y, z, dir, spot.getBeamLength(), meta);
} else if(!(block instanceof SpotlightBeam)) {
return;
}
backPropagate(world, x, y, z, dir);
backPropagate(world, x, y, z, dir, meta);
}
protected Block getOff() {
@ -367,7 +371,7 @@ public class Spotlight extends Block implements ISpotlight, INBTTransformable {
public int transformMeta(int meta, int coordBaseMode) {
// +1 to set as broken, won't turn on until broken and replaced
int disabled = disableOnGeneration ? 1 : 0;
return (INBTTransformable.transformMetaDeco(meta >> 1, coordBaseMode) << 1) + disabled;
return (INBTBlockTransformable.transformMetaDeco(meta >> 1, coordBaseMode) << 1) + disabled;
}
@Override

View File

@ -29,8 +29,8 @@ public class SpotlightBeam extends BlockBeamBase {
if (world.isRemote) return;
if (neighborBlock instanceof SpotlightBeam) return;
for (ForgeDirection dir : getDirections(world, x, y, z)) {
Spotlight.backPropagate(world, x, y, z, dir);
for(ForgeDirection dir : getDirections(world, x, y, z)) {
Spotlight.backPropagate(world, x, y, z, dir, world.getBlockMetadata(x, y, z));
}
}

View File

@ -0,0 +1,93 @@
package com.hbm.blocks.machine.fusion;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.fusion.TileEntityFusionBoiler;
import com.hbm.util.BobMathUtil;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineFusionBoiler extends BlockDummyable implements ILookOverlay, ITooltipProvider {
public MachineFusionBoiler() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFusionBoiler();
if(meta >= 6) return new TileEntityProxyCombo().fluid();
return null;
}
@Override
public int[] getDimensions() {
return new int[] { 3, 0, 4, 4, 1, 1 };
}
@Override
public int getOffset() {
return 4;
}
@Override
public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return super.checkRequirement(world, x, y, z, dir, o);
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
x += dir.offsetX * o;
z += dir.offsetZ * o;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
//this.makeExtra(world, x + dir.offsetX * 4, y + 2, z + dir.offsetZ * 4);
this.makeExtra(world, x - dir.offsetX * 1 + rot.offsetX, y, z - dir.offsetZ * 1 + rot.offsetZ);
this.makeExtra(world, x - dir.offsetX * 1 - rot.offsetX, y, z - dir.offsetZ * 1 - rot.offsetZ);
this.makeExtra(world, x + dir.offsetX * 2 + rot.offsetX, y, z + dir.offsetZ * 2 + rot.offsetZ);
this.makeExtra(world, x + dir.offsetX * 2 - rot.offsetX, y, z + dir.offsetZ * 2 - rot.offsetZ);
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
int[] pos = this.findCore(world, x, y, z);
if(pos == null) return;
TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]);
if(!(te instanceof TileEntityFusionBoiler)) return;
TileEntityFusionBoiler boiler = (TileEntityFusionBoiler) te;
List<String> text = new ArrayList();
text.add(EnumChatFormatting.GREEN + "-> " + EnumChatFormatting.RESET + BobMathUtil.format(boiler.plasmaEnergy) + " TU");
for(int i = 0; i < boiler.getAllTanks().length; i++) {
FluidTank tank = boiler.getAllTanks()[i];
text.add((i == 0 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + tank.getTankType().getLocalizedName() + ": " + tank.getFill() + "/" + tank.getMaxFill() + "mB");
}
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -0,0 +1,70 @@
package com.hbm.blocks.machine.fusion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.fusion.TileEntityFusionBreeder;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineFusionBreeder extends BlockDummyable implements ITooltipProvider {
public MachineFusionBreeder() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFusionBreeder();
if(meta >= 6) return new TileEntityProxyCombo().inventory().fluid();
return null;
}
@Override
public int[] getDimensions() {
return new int[] { 3, 0, 2, 2, 1, 1 };
}
@Override
public int getOffset() {
return 2;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return super.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override
public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return super.checkRequirement(world, x, y, z, dir, o);
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
x += dir.offsetX * o;
z += dir.offsetZ * o;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
this.makeExtra(world, x + rot.offsetX, y, z + rot.offsetZ);
this.makeExtra(world, x - rot.offsetX, y, z - rot.offsetZ);
this.makeExtra(world, x + dir.offsetX + rot.offsetX, y, z + dir.offsetZ + rot.offsetZ);
this.makeExtra(world, x + dir.offsetX - rot.offsetX, y, z + dir.offsetZ - rot.offsetZ);
this.makeExtra(world, x + dir.offsetX * 2, y + 2, z + dir.offsetZ * 2);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -0,0 +1,52 @@
package com.hbm.blocks.machine.fusion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.tileentity.machine.fusion.TileEntityFusionCollector;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineFusionCollector extends BlockDummyable implements ITooltipProvider {
public MachineFusionCollector() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFusionCollector();
return null;
}
@Override
public int[] getDimensions() {
return new int[] { 3, 0, 2, 1, 2, 2 };
}
@Override
public int getOffset() {
return 1;
}
@Override
public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return super.checkRequirement(world, x, y, z, dir, o);
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -0,0 +1,41 @@
package com.hbm.blocks.machine.fusion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.tileentity.machine.fusion.TileEntityFusionCoupler;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class MachineFusionCoupler extends BlockDummyable implements ITooltipProvider {
public MachineFusionCoupler() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFusionCoupler();
return null;
}
@Override
public int[] getDimensions() {
return new int[] { 3, 0, 1, 1, 1, 1 };
}
@Override
public int getOffset() {
return 0;
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -0,0 +1,65 @@
package com.hbm.blocks.machine.fusion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.fusion.TileEntityFusionKlystron;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineFusionKlystron extends BlockDummyable implements ITooltipProvider {
public MachineFusionKlystron() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFusionKlystron();
if(meta >= 6) return new TileEntityProxyCombo().power().fluid();
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return super.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override public int[] getDimensions() { return new int[] { 3, 0, 4, 3, 2, 2 }; }
@Override public int getOffset() { return 3; }
@Override
public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return super.checkRequirement(world, x, y, z, dir, o) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, -3, 4, 3, 1, 1}, x, y, z, dir);
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y, z + dir.offsetZ * o, new int[] {4, -3, 4, 3, 1, 1}, this, dir);
x += dir.offsetX * o;
z += dir.offsetZ * o;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
this.makeExtra(world, x + dir.offsetX * 3, y + 2, z + dir.offsetZ * 3);
this.makeExtra(world, x + rot.offsetX * 2, y, z + rot.offsetZ * 2);
this.makeExtra(world, x - rot.offsetX * 2, y, z - rot.offsetZ * 2);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -0,0 +1,48 @@
package com.hbm.blocks.machine.fusion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.tileentity.machine.fusion.TileEntityFusionKlystronCreative;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineFusionKlystronCreative extends BlockDummyable implements ITooltipProvider {
public MachineFusionKlystronCreative() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFusionKlystronCreative();
return null;
}
@Override public int[] getDimensions() { return new int[] { 3, 0, 4, 3, 2, 2 }; }
@Override public int getOffset() { return 3; }
@Override
public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return super.checkRequirement(world, x, y, z, dir, o) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, -3, 4, 3, 1, 1}, x, y, z, dir);
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y, z + dir.offsetZ * o, new int[] {4, -3, 4, 3, 1, 1}, this, dir);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -0,0 +1,111 @@
package com.hbm.blocks.machine.fusion;
import java.util.ArrayList;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.fusion.TileEntityFusionMHDT;
import com.hbm.util.BobMathUtil;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineFusionMHDT extends BlockDummyable implements ILookOverlay, ITooltipProvider {
public MachineFusionMHDT() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFusionMHDT();
if(meta >= 6) return new TileEntityProxyCombo().power().fluid();
return null;
}
@Override
public int[] getDimensions() {
return new int[] { 2, 0, 6, 7, 2, 2 };
}
@Override
public int getOffset() {
return 7;
}
@Override
public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
return super.checkRequirement(world, x, y, z, dir, o) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {3, -2, 6, 2, 1, 1}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {3, -2, -6, 7, 1, 1}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {3, -2, -3, 5, 2, 2}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[] {4, -3, -3, 5, 1, 1}, x, y, z, dir) &&
MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * (o + 3), y, z + dir.offsetZ * (o + 3), new int[] {1, 0, 0, 1, 3, 3}, x, y, z, dir);
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y, z + dir.offsetZ * o, new int[] {3, -2, 6, 2, 1, 1}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y, z + dir.offsetZ * o, new int[] {3, -2, -6, 7, 1, 1}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y, z + dir.offsetZ * o, new int[] {3, -2, -3, 5, 2, 2}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y, z + dir.offsetZ * o, new int[] {4, -3, -3, 5, 1, 1}, this, dir);
MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * (o + 3), y, z + dir.offsetZ * (o + 3), new int[] {1, 0, 0, 1, 3, 3}, this, dir);
x += dir.offsetX * o;
z += dir.offsetZ * o;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
this.makeExtra(world, x + dir.offsetX * 4 + rot.offsetX * 3, y, z + dir.offsetZ * 4 + rot.offsetZ * 3);
this.makeExtra(world, x + dir.offsetX * 4 - rot.offsetX * 3, y, z + dir.offsetZ * 4 - rot.offsetZ * 3);
this.makeExtra(world, x + dir.offsetX * 7, y + 1, z + dir.offsetZ * 7);
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
int[] pos = this.findCore(world, x, y, z);
if(pos == null) return;
TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]);
if(!(te instanceof TileEntityFusionMHDT)) return;
TileEntityFusionMHDT turbine = (TileEntityFusionMHDT) te;
boolean hasPlasma = turbine.hasMinimumPlasma();
boolean isCool = turbine.isCool();
long power = (long) Math.floor(turbine.plasmaEnergy * turbine.PLASMA_EFFICIENCY);
if(!hasPlasma) power /= 2;
List<String> text = new ArrayList();
text.add(EnumChatFormatting.GREEN + "-> " + (hasPlasma ? EnumChatFormatting.RESET : EnumChatFormatting.GOLD) + BobMathUtil.getShortNumber(turbine.plasmaEnergy) + "TU/t / " + BobMathUtil.getShortNumber(turbine.MINIMUM_PLASMA) + "TU/t");
text.add(EnumChatFormatting.RED + "<- " + EnumChatFormatting.RESET + BobMathUtil.getShortNumber(!isCool ? 0 : power) + "HE/t");
for(int i = 0; i < turbine.getAllTanks().length; i++) {
FluidTank tank = turbine.getAllTanks()[i];
text.add((i == 0 ? (EnumChatFormatting.GREEN + "-> ") : (EnumChatFormatting.RED + "<- ")) + EnumChatFormatting.RESET + tank.getTankType().getLocalizedName() + ": " + tank.getFill() + "/" + tank.getMaxFill() + "mB");
}
if(turbine.plasmaEnergy > 0 && !hasPlasma) text.add("&[" + (BobMathUtil.getBlink() ? 0xff8000 : 0xffff00) + "&]! LOW POWER !");
if(!isCool) text.add("&[" + (BobMathUtil.getBlink() ? 0xff0000 : 0xffff00) + "&]! ! ! INSUFFICIENT COOLING ! ! !");
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -0,0 +1,205 @@
package com.hbm.blocks.machine.fusion;
import java.util.List;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.fusion.TileEntityFusionTorus;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineFusionTorus extends BlockDummyable implements ITooltipProvider {
public static final int[][][] layout = new int[][][] {
new int[][] {
new int[] {0,0,0,0,3,3,3,3,3,3,3,0,0,0,0},
new int[] {0,0,0,3,1,1,1,1,1,1,1,3,0,0,0},
new int[] {0,0,3,1,1,1,1,1,1,1,1,1,3,0,0},
new int[] {0,3,1,1,1,1,1,1,1,1,1,1,1,3,0},
new int[] {3,1,1,1,1,3,3,3,3,3,1,1,1,1,3},
new int[] {3,1,1,1,3,3,3,3,3,3,3,1,1,1,3},
new int[] {3,1,1,1,3,3,3,3,3,3,3,1,1,1,3},
new int[] {3,1,1,1,3,3,3,3,3,3,3,1,1,1,3},
new int[] {3,1,1,1,3,3,3,3,3,3,3,1,1,1,3},
new int[] {3,1,1,1,3,3,3,3,3,3,3,1,1,1,3},
new int[] {3,1,1,1,1,3,3,3,3,3,1,1,1,1,3},
new int[] {0,3,1,1,1,1,1,1,1,1,1,1,1,3,0},
new int[] {0,0,3,1,1,1,1,1,1,1,1,1,3,0,0},
new int[] {0,0,0,3,1,1,1,1,1,1,1,3,0,0,0},
new int[] {0,0,0,0,3,3,3,3,3,3,3,0,0,0,0},
},
new int[][] {
new int[] {0,0,0,0,1,1,3,3,3,1,1,0,0,0,0},
new int[] {0,0,0,1,1,1,1,1,1,1,1,1,0,0,0},
new int[] {0,0,1,1,2,2,2,2,2,2,2,1,1,0,0},
new int[] {0,1,1,2,1,1,1,1,1,1,1,2,1,1,0},
new int[] {1,1,2,1,1,1,1,1,1,1,1,1,2,1,1},
new int[] {1,1,2,1,1,3,3,3,3,3,1,1,2,1,1},
new int[] {3,1,2,1,1,3,3,3,3,3,1,1,2,1,3},
new int[] {3,1,2,1,1,3,3,3,3,3,1,1,2,1,3},
new int[] {3,1,2,1,1,3,3,3,3,3,1,1,2,1,3},
new int[] {1,1,2,1,1,3,3,3,3,3,1,1,2,1,1},
new int[] {1,1,2,1,1,1,1,1,1,1,1,1,2,1,1},
new int[] {0,1,1,2,1,1,1,1,1,1,1,2,1,1,0},
new int[] {0,0,1,1,2,2,2,2,2,2,2,1,1,0,0},
new int[] {0,0,0,1,1,1,1,1,1,1,1,1,0,0,0},
new int[] {0,0,0,0,1,1,3,3,3,1,1,0,0,0,0},
},
new int[][] {
new int[] {0,0,0,0,1,1,3,3,3,1,1,0,0,0,0},
new int[] {0,0,0,1,2,2,2,2,2,2,2,1,0,0,0},
new int[] {0,0,1,2,2,2,2,2,2,2,2,2,1,0,0},
new int[] {0,1,2,2,2,2,2,2,2,2,2,2,2,1,0},
new int[] {1,2,2,2,1,1,1,1,1,1,1,2,2,2,1},
new int[] {1,2,2,2,1,3,3,3,3,3,1,2,2,2,1},
new int[] {3,2,2,2,1,3,3,3,3,3,1,2,2,2,3},
new int[] {3,2,2,2,1,3,3,3,3,3,1,2,2,2,3},
new int[] {3,2,2,2,1,3,3,3,3,3,1,2,2,2,3},
new int[] {1,2,2,2,1,3,3,3,3,3,1,2,2,2,1},
new int[] {1,2,2,2,1,1,1,1,1,1,1,2,2,2,1},
new int[] {0,1,2,2,2,2,2,2,2,2,2,2,2,1,0},
new int[] {0,0,1,2,2,2,2,2,2,2,2,2,1,0,0},
new int[] {0,0,0,1,2,2,2,2,2,2,2,1,0,0,0},
new int[] {0,0,0,0,1,1,3,3,3,1,1,0,0,0,0},
}
};
public MachineFusionTorus() {
super(Material.iron);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityFusionTorus();
if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid();
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return super.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override
public int[] getDimensions() {
return new int[] { 4, 0, 7, 7, 7, 7 };
}
@Override
public int getOffset() {
return 7;
}
@Override
public boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
x = x + dir.offsetX * o;
z = z + dir.offsetZ * o;
for(int iy = 0; iy < 5; iy++) {
int l = iy > 2 ? 4 - iy : iy;
int[][] layer = layout[l];
for(int ix = 0; ix < layer.length; ix++) {
for(int iz = 0; iz < layer.length; iz++) {
int ex = ix - layer.length / 2;
int ez = iz - layer.length / 2;
if(layout[l][ix][iz] > 0 && !world.getBlock(x + ex, y + iy, z + ez).canPlaceBlockAt(world, x + ex, y + iy, z + ez)) {
return false;
}
}
}
}
return true;
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
x = x + dir.offsetX * o;
z = z + dir.offsetZ * o;
for(int iy = 0; iy < 5; iy++) {
int l = iy > 2 ? 4 - iy : iy;
int[][] layer = layout[l];
for(int ix = 0; ix < layer.length; ix++) {
for(int iz = 0; iz < layer[0].length; iz++) {
int ex = ix - layer.length / 2;
int ez = iz - layer.length / 2;
int meta = 0;
if(iy > 0) {
meta = ForgeDirection.UP.ordinal();
} else if(ex < 0) {
meta = ForgeDirection.WEST.ordinal();
} else if(ex > 0) {
meta = ForgeDirection.EAST.ordinal();
} else if(ez < 0) {
meta = ForgeDirection.NORTH.ordinal();
} else if(ez > 0) {
meta = ForgeDirection.SOUTH.ordinal();
} else {
continue;
}
if(layout[l][ix][iz] > 0)
world.setBlock(x + ex, y + iy, z + ez, this, meta, 3);
}
}
}
// is that enough ports?
this.makeExtra(world, x, y + 4, z);
this.makeExtra(world, x + 6, y, z);
this.makeExtra(world, x + 6, y + 4, z);
this.makeExtra(world, x + 6, y, z + 2);
this.makeExtra(world, x + 6, y + 4, z + 2);
this.makeExtra(world, x + 6, y, z - 2);
this.makeExtra(world, x + 6, y + 4, z - 2);
this.makeExtra(world, x - 6, y, z);
this.makeExtra(world, x - 6, y + 4, z);
this.makeExtra(world, x - 6, y, z + 2);
this.makeExtra(world, x - 6, y + 4, z + 2);
this.makeExtra(world, x - 6, y, z - 2);
this.makeExtra(world, x - 6, y + 4, z - 2);
this.makeExtra(world, x, y, z + 6);
this.makeExtra(world, x, y + 4, z + 6);
this.makeExtra(world, x + 2, y, z + 6);
this.makeExtra(world, x + 2, y + 4, z + 6);
this.makeExtra(world, x - 2, y, z + 6);
this.makeExtra(world, x - 2, y + 4, z + 6);
this.makeExtra(world, x, y, z - 6);
this.makeExtra(world, x, y + 4, z - 6);
this.makeExtra(world, x + 2, y, z - 6);
this.makeExtra(world, x + 2, y + 4, z - 6);
this.makeExtra(world, x - 2, y, z - 6);
this.makeExtra(world, x - 2, y + 4, z - 6);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
}

View File

@ -3,6 +3,7 @@ package com.hbm.blocks.machine.rbmk;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockNTMSand.EnumSandType;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.main.MainRegistry;
import com.hbm.packet.toclient.AuxParticlePacketNT;
@ -38,6 +39,7 @@ public class RBMKDebrisBurning extends RBMKDebris {
ForgeDirection dir = ForgeDirection.getOrientation(rand.nextInt(6));
Block block = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
int meta = world.getBlockMetadata(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
if(rand.nextInt(10) == 0 && block == Blocks.air) {
world.setBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, ModBlocks.gas_meltdown);
@ -45,7 +47,7 @@ public class RBMKDebrisBurning extends RBMKDebris {
//Foam helps stop the fire; Boron smothers it. 1.66% chance every 100-120 seconds for one side
int chance = block == ModBlocks.foam_layer || block == ModBlocks.block_foam ||
block == ModBlocks.sand_boron_layer || block == ModBlocks.sand_boron ? 10 : 100;
block == ModBlocks.sand_boron_layer || (block == ModBlocks.sand_mix && meta == EnumSandType.BORON.ordinal()) ? 10 : 100;
if(rand.nextInt(chance) == 0) {
world.setBlock(x, y, z, ModBlocks.pribris);

View File

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockNTMSand.EnumSandType;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.items.ModItems;
import com.hbm.packet.toclient.AuxParticlePacketNT;
@ -50,13 +51,14 @@ public class RBMKDebrisRadiating extends RBMKDebrisBurning {
ForgeDirection dir = ForgeDirection.getOrientation(rand.nextInt(6));
Block block = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
int m = world.getBlockMetadata(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
if(rand.nextInt(10) == 0 && block == Blocks.air) {
world.setBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, ModBlocks.gas_meltdown);
}
//Boron sand helps stop the fission reaction; 0.66% chance every 20-40 ticks for one side
int chance = block == ModBlocks.sand_boron_layer || block == ModBlocks.sand_boron ? 25 : 1000;
int chance = block == ModBlocks.sand_boron_layer || (block == ModBlocks.sand_mix && m == EnumSandType.BORON.ordinal()) ? 25 : 1000;
if(rand.nextInt(chance) == 0) {

View File

@ -1,9 +1,13 @@
package com.hbm.blocks.machine.rbmk;
import com.hbm.handler.BossSpawnHandler;
import com.hbm.items.machine.ItemRBMKLid;
import com.hbm.items.machine.ItemRBMKRod;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.TileEntityProxyInventory;
import com.hbm.tileentity.machine.rbmk.TileEntityRBMKRod;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
@ -32,7 +36,34 @@ public class RBMKRod extends RBMKBase {
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
BossSpawnHandler.markFBI(player);
return openInv(world, x, y, z, player);
if(world.isRemote) return true;
int[] pos = this.findCore(world, x, y, z);
if(pos == null) return false;
TileEntity te = world.getTileEntity(pos[0], pos[1], pos[2]);
if(!(te instanceof TileEntityRBMKRod)) return false;
TileEntityRBMKRod rbmk = (TileEntityRBMKRod) te;
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemRBMKLid) {
if(!rbmk.hasLid()) return false;
}
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemRBMKRod && rbmk.slots[0] == null) {
rbmk.slots[0] = player.getHeldItem().copy();
rbmk.slots[0].stackSize = 1;
player.getHeldItem().stackSize--;
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 1.0F);
return false;
}
if(!player.isSneaking()) {
FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]);
return true;
} else {
return true;
}
}
@Override

View File

@ -13,6 +13,7 @@ import com.hbm.tileentity.network.TileEntityCableBaseNT;
import com.hbm.util.BobMathUtil;
import com.hbm.util.i18n.I18nUtil;
import com.hbm.world.gen.nbt.INBTBlockTransformable;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -37,7 +38,7 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import java.util.ArrayList;
import java.util.List;
public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, ILookOverlay, ITooltipProvider {
public class BlockCableGauge extends BlockContainer implements IBlockMultiPass, INBTBlockTransformable, ILookOverlay, ITooltipProvider {
@SideOnly(Side.CLIENT) protected IIcon overlayGauge;
@ -84,6 +85,11 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass,
this.addStandardInfo(stack, player, list, ext);
}
@Override
public int transformMeta(int meta, int coordBaseMode) {
return INBTBlockTransformable.transformMetaDeco(meta, coordBaseMode);
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
@ -178,5 +184,6 @@ public class BlockCableGauge extends BlockContainer implements IBlockMultiPass,
if((PREFIX_VALUE + "deltasecond").equals(name)) return "" + deltaLastSecond;
return null;
}
}
}

View File

@ -13,6 +13,7 @@ import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@ -73,7 +74,7 @@ public class BlockCablePaintable extends BlockContainer implements IToolable, IB
ItemBlock ib = (ItemBlock) stack.getItem();
Block block = ib.field_150939_a;
if(block.renderAsNormalBlock() && block != this) {
if(allowedPaint(block, this)) {
TileEntity tile = world.getTileEntity(x, y, z);
@ -93,6 +94,11 @@ public class BlockCablePaintable extends BlockContainer implements IToolable, IB
return super.onBlockActivated(world, x, y, z, player, side, fX, fY, fZ);
}
public static boolean allowedPaint(Block paint, Block that) {
if(paint == Blocks.grass) return false;
return paint.renderAsNormalBlock() && paint != that;
}
@Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {

View File

@ -6,6 +6,7 @@ import api.hbm.conveyor.IEnterableBlock;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.network.TileEntityCraneBase;
import com.hbm.tileentity.network.TileEntityCraneBoxer;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
@ -84,9 +85,21 @@ public class CraneBoxer extends BlockCraneBase implements IEnterableBlock {
@Override
public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) {
return false;
return true;
}
@Override
public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { }
public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) {
TileEntityCraneBoxer unboxer = (TileEntityCraneBoxer) world.getTileEntity(x, y, z);
ForgeDirection accessedSide = getOutputSide(world, x, y, z).getOpposite();
for(ItemStack stack : entity.getItemStacks()) {
ItemStack remainder = CraneInserter.addToInventory(unboxer, unboxer.getAccessibleSlotsFromSide(accessedSide.ordinal()), stack, accessedSide.ordinal());
if(remainder != null && remainder.stackSize > 0) {
EntityItem drop = new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, remainder.copy());
world.spawnEntityInWorld(drop);
}
}
}
}

View File

@ -145,19 +145,51 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock {
return toAdd;
}
@Override
public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) {
return false;
}
@Override public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { return true; }
@Override
public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { }
public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) {
ForgeDirection outputDirection = getOutputSide(world, x, y, z);
TileEntity te = world.getTileEntity(x + outputDirection.offsetX, y + outputDirection.offsetY, z + outputDirection.offsetZ);
@Override
public boolean hasComparatorInputOverride() {
return true;
if(entity == null || entity.getItemStacks() == null || entity.getItemStacks().length == 0) {
return;
}
ItemStack[] toAdd = entity.getItemStacks();
if(!world.isBlockIndirectlyGettingPowered(x, y, z)) {
int[] access = null;
if(te instanceof ISidedInventory) {
ISidedInventory sided = (ISidedInventory) te;
access = InventoryUtil.masquerade(sided, outputDirection.getOpposite().ordinal());
}
if(te instanceof IInventory) {
IInventory inv = (IInventory) te;
for(ItemStack stack : toAdd) addToInventory(inv, access, stack, outputDirection.getOpposite().ordinal());
}
}
TileEntityCraneInserter inserter = null;
for(ItemStack stack : toAdd) {
if(stack.stackSize > 0) {
inserter = (TileEntityCraneInserter) world.getTileEntity(x, y, z);
addToInventory(inserter, null, stack, outputDirection.getOpposite().ordinal());
}
if(stack.stackSize > 0 && inserter != null && !inserter.destroyer) {
EntityItem drop = new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy());
world.spawnEntityInWorld(drop);
}
}
}
@Override public boolean hasComparatorInputOverride() { return true; }
@Override
public int getComparatorInputOverride(World world, int x, int y, int z, int side) {
return Container.calcRedstoneFromInventory((TileEntityCraneInserter)world.getTileEntity(x, y, z));

View File

@ -127,9 +127,9 @@ public class CranePartitioner extends BlockContainer implements IConveyorBelt, I
ItemStack stack = entity.getItemStack();
ItemStack remainder = null;
if(CrystallizerRecipes.getAmount(stack) > 0) {
remainder = InventoryUtil.tryAddItemToInventory(partitioner, 0, 8, stack);
remainder = InventoryUtil.tryAddItemToInventory(partitioner, 0, TileEntityCranePartitioner.SLOT_COUNT - 1, stack);
} else {
remainder = InventoryUtil.tryAddItemToInventory(partitioner, 9, 17, stack);
remainder = InventoryUtil.tryAddItemToInventory(partitioner, TileEntityCranePartitioner.SLOT_COUNT, TileEntityCranePartitioner.SLOT_COUNT * 2 - 1, stack);
}
if(remainder != null) {
EntityItem item = new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, remainder.copy());
@ -139,8 +139,10 @@ public class CranePartitioner extends BlockContainer implements IConveyorBelt, I
public static class TileEntityCranePartitioner extends TileEntityMachineBase {
public static final int SLOT_COUNT = 45;
public TileEntityCranePartitioner() {
super(18);
super(SLOT_COUNT * 2);
}
@Override public String getName() { return "container.partitioner"; }
@ -151,12 +153,14 @@ public class CranePartitioner extends BlockContainer implements IConveyorBelt, I
if(!worldObj.isRemote) {
List<ItemStack> stacks = new ArrayList();
for(int i = 0; i < 9; i++) if(slots[i] != null) stacks.add(slots[i]);
for(int i = 0; i < SLOT_COUNT; i++) if(slots[i] != null) stacks.add(slots[i]);
stacks.sort(stackSizeComparator);
boolean markDirty = false;
for(ItemStack stack : stacks) {
int amount = CrystallizerRecipes.getAmount(stack);
if(amount == 0) amount = stack.stackSize; // eject full stack if invalid type somehow ended up in the queue
while(stack.stackSize >= amount) {
ItemStack entityStack = stack.copy();
entityStack.stackSize = amount;
@ -168,7 +172,7 @@ public class CranePartitioner extends BlockContainer implements IConveyorBelt, I
}
}
for(int i = 0; i < 9; i++) if(slots[i] != null && slots[i].stackSize <= 0) slots[i] = null;
for(int i = 0; i < SLOT_COUNT; i++) if(slots[i] != null && slots[i].stackSize <= 0) slots[i] = null;
if(markDirty) this.markDirty();
}
}
@ -183,17 +187,25 @@ public class CranePartitioner extends BlockContainer implements IConveyorBelt, I
@Override
public boolean canExtractItem(int slot, ItemStack stack, int side) {
return slot >= 9;
return slot >= SLOT_COUNT; // declog
}
@Override
public boolean isItemValidForSlot(int i, ItemStack stack) {
return i <= 8 && CrystallizerRecipes.getAmount(stack) >= 1;
return i <= (SLOT_COUNT - 1) && CrystallizerRecipes.getAmount(stack) >= 1;
}
protected int[] access;
@Override
public int[] getAccessibleSlotsFromSide(int side) {
return new int[] { 0, 1, 2, 3, 4, 5, 6 ,7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 };
if(access == null) {
access = new int[SLOT_COUNT * 2]; // writing this by hand is for chumps
for(int i = 0; i < SLOT_COUNT * 2; i++) access[i] = i;
}
return access;
}
}

View File

@ -7,6 +7,7 @@ import api.hbm.conveyor.IEnterableBlock;
import com.hbm.blocks.IBlockMultiPass;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.entity.item.EntityMovingItem;
import com.hbm.entity.item.EntityMovingPackage;
import com.hbm.items.tool.ItemConveyorWand;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
@ -115,16 +116,100 @@ public class CraneRouter extends BlockContainer implements IBlockMultiPass, IEnt
return 7;
}
@Override
public boolean canItemEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) {
return true;
}
@Override public boolean canItemEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) { return true; }
@Override public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { return true; }
@Override
public void onItemEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) {
TileEntityCraneRouter router = (TileEntityCraneRouter) world.getTileEntity(x, y, z);
ItemStack stack = entity.getItemStack();
List<ItemStack>[] sort = this.sort(world, x, y, z, entity.getItemStack());
for(int i = 0; i < 7; i++) {
ForgeDirection d = ForgeDirection.getOrientation(i);
List<ItemStack> list = sort[i];
if(d == ForgeDirection.UNKNOWN) {
for(ItemStack stack : list) world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack));
} else {
for(ItemStack stack : list) sendOnRoute(world, x, y, z, stack, d);
}
}
}
protected void sendOnRoute(World world, int x, int y, int z, ItemStack item, ForgeDirection dir) {
IConveyorBelt belt = null;
Block block = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
if(block instanceof IConveyorBelt) {
belt = (IConveyorBelt) block;
}
if(belt != null) {
EntityMovingItem moving = new EntityMovingItem(world);
Vec3 pos = Vec3.createVectorHelper(x + 0.5 + dir.offsetX * 0.55, y + 0.5 + dir.offsetY * 0.55, z + 0.5 + dir.offsetZ * 0.55);
Vec3 snap = belt.getClosestSnappingPosition(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, pos);
moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord);
moving.setItemStack(item);
world.spawnEntityInWorld(moving);
} else {
world.spawnEntityInWorld(new EntityItem(world, x + 0.5 + dir.offsetX * 0.55, y + 0.5 + dir.offsetY * 0.55, z + 0.5 + dir.offsetZ * 0.55, item));
}
}
@Override
public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) {
List<ItemStack>[] sort = this.sort(world, x, y, z, entity.getItemStacks());
for(int i = 0; i < 7; i++) {
ForgeDirection d = ForgeDirection.getOrientation(i);
List<ItemStack> list = sort[i];
if(list.isEmpty()) continue;
if(d == ForgeDirection.UNKNOWN) {
for(ItemStack stack : list) world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack));
} else {
IConveyorBelt belt = null;
Block block = world.getBlock(x + d.offsetX, y + d.offsetY, z + d.offsetZ);
if(block instanceof IConveyorBelt) belt = (IConveyorBelt) block;
if(belt != null) {
EntityMovingPackage moving = new EntityMovingPackage(world);
Vec3 pos = Vec3.createVectorHelper(x + 0.5 + d.offsetX * 0.55, y + 0.5 + d.offsetY * 0.55, z + 0.5 + d.offsetZ * 0.55);
Vec3 snap = belt.getClosestSnappingPosition(world, x + d.offsetX, y + d.offsetY, z + d.offsetZ, pos);
moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord);
moving.setItemStacks(list.toArray(new ItemStack[0]));
world.spawnEntityInWorld(moving);
} else {
for(ItemStack stack : list) world.spawnEntityInWorld(new EntityItem(world, x + 0.5 + d.offsetX * 0.55, y + 0.5 + d.offsetY * 0.55, z + 0.5 + d.offsetZ * 0.55, stack));
}
}
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
/** Accepts an arbitrary amount of ItemStacks (either solo or from boxes) and returns an array corresponding with ForgeDirections,
* with each direction having a list of items being output in that direction. Index 6 is used for UNKNOWN, i.e. unsortable items.
* Returned lists are populated with COPIES of the original stacks. */
public static List<ItemStack>[] sort(World world, int x, int y, int z, ItemStack... stacks) {
TileEntityCraneRouter router = (TileEntityCraneRouter) world.getTileEntity(x, y, z);
List<ItemStack>[] output = new List[7];
for(int i = 0; i < 7; i++) output[i] = new ArrayList();
for(ItemStack stack : stacks) {
if(stack == null) continue;
ForgeDirection dir = getOutputDir(router, stack.copy());
output[dir.ordinal()].add(stack);
}
return output;
}
public static ForgeDirection getOutputDir(TileEntityCraneRouter router, ItemStack stack) {
List<ForgeDirection> validDirs = new ArrayList();
//check filters for all sides
@ -168,40 +253,10 @@ public class CraneRouter extends BlockContainer implements IBlockMultiPass, IEnt
}
if(validDirs.isEmpty()) {
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy()));
return;
return ForgeDirection.UNKNOWN;
}
int i = world.rand.nextInt(validDirs.size());
sendOnRoute(world, x, y, z, entity, validDirs.get(i));
}
protected void sendOnRoute(World world, int x, int y, int z, IConveyorItem item, ForgeDirection dir) {
IConveyorBelt belt = null;
Block block = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
if(block instanceof IConveyorBelt) {
belt = (IConveyorBelt) block;
}
if(belt != null) {
EntityMovingItem moving = new EntityMovingItem(world);
Vec3 pos = Vec3.createVectorHelper(x + 0.5 + dir.offsetX * 0.55, y + 0.5 + dir.offsetY * 0.55, z + 0.5 + dir.offsetZ * 0.55);
Vec3 snap = belt.getClosestSnappingPosition(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, pos);
moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord);
moving.setItemStack(item.getItemStack());
world.spawnEntityInWorld(moving);
} else {
world.spawnEntityInWorld(new EntityItem(world, x + 0.5 + dir.offsetX * 0.55, y + 0.5 + dir.offsetY * 0.55, z + 0.5 + dir.offsetZ * 0.55, item.getItemStack()));
}
}
@Override public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { return false; }
@Override public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { }
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
int i = router.getWorldObj().rand.nextInt(validDirs.size());
return validDirs.get(i);
}
}

View File

@ -0,0 +1,68 @@
package com.hbm.blocks.network;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.network.TileEntityFluidCounterValve;
import com.hbm.util.i18n.I18nUtil;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import java.util.ArrayList;
import java.util.List;
public class FluidCounterValve extends FluidDuctBase implements ILookOverlay, ITooltipProvider {
@SideOnly(Side.CLIENT)
private IIcon iconOn;
public FluidCounterValve(Material mat) {
super(mat);
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
this.iconOn = iconRegister.registerIcon(RefStrings.MODID + ":fluid_counter_valve_on");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":fluid_counter_valve_off");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int metadata) {
return metadata == 1 ? iconOn : blockIcon;
}
@Override
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityFluidCounterValve();
}
@Override
public void printHook(Pre event, World world, int x, int y, int z) {
TileEntity te = world.getTileEntity(x, y, z);
if(!(te instanceof TileEntityFluidCounterValve))
return;
TileEntityFluidCounterValve duct = (TileEntityFluidCounterValve) te;
List<String> text = new ArrayList<>();
text.add("&[" + duct.getType().getColor() + "&]" + duct.getType().getLocalizedName());
text.add("Counter: " + duct.getCounter());
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text);
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
}

Some files were not shown because too many files have changed in this diff Show More