mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-02-08 19:34:59 +01:00
merge recent changes
This commit is contained in:
commit
59e377c7ef
28 changed files with 1254 additions and 82 deletions
|
@ -0,0 +1,724 @@
|
||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"backwards=false,power=0,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_off"
|
||||||
|
},
|
||||||
|
"backwards=true,power=0,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_off",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=1,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=1,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=2,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=2,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=3,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=3,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=4,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=4,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=5,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=5,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=6,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=6,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=7,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=7,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=8,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=8,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=9,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=9,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=10,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=10,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=11,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=11,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=12,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=12,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=13,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=13,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=14,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=14,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=15,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_on"
|
||||||
|
},
|
||||||
|
"backwards=true,power=15,shape=north_south": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_on",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=0,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_off",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=0,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_off",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=1,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=1,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=2,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=2,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=3,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=3,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=4,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=4,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=5,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=5,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=6,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=6,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=7,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=7,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=8,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=8,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=9,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=9,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=10,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=10,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=11,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=11,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=12,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=12,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=13,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=13,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=14,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=14,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=15,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_on",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=15,shape=east_west": {
|
||||||
|
"model": "create:block/controller_rail/block_north_south_on",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=0,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_off",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=0,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_off",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=1,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=1,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=2,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=2,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=3,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=3,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=4,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=4,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=5,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=5,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=6,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=6,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=7,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=7,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=8,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=8,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=9,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=9,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=10,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=10,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=11,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=11,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=12,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=12,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=13,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=13,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=14,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=14,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=15,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_on",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=true,power=15,shape=ascending_east": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_on",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=false,power=0,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_off",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=0,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_off",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=1,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=1,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=2,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=2,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=3,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=3,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=4,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=4,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=5,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=5,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=6,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=6,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=7,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=7,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=8,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=8,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=9,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=9,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=10,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=10,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=11,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=11,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=12,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=12,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=13,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=13,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=14,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=14,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=15,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_on",
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"backwards=true,power=15,shape=ascending_west": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_on",
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"backwards=false,power=0,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_off"
|
||||||
|
},
|
||||||
|
"backwards=true,power=0,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_off",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=1,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=1,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=2,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=2,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=3,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=3,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=4,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=4,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=5,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=5,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=6,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=6,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=7,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=7,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=8,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=8,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=9,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=9,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=10,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=10,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=11,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=11,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=12,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=12,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=13,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=13,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=14,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog"
|
||||||
|
},
|
||||||
|
"backwards=true,power=14,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=15,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_on"
|
||||||
|
},
|
||||||
|
"backwards=true,power=15,shape=ascending_north": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_on",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=false,power=0,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_off",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=0,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_off"
|
||||||
|
},
|
||||||
|
"backwards=false,power=1,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=1,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=2,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=2,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=3,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=3,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=4,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=4,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=5,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=5,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=6,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=6,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=7,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=7,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=8,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=8,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=9,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=9,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=10,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=10,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=11,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=11,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=12,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=12,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=13,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=13,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=14,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_analog",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=14,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_analog"
|
||||||
|
},
|
||||||
|
"backwards=false,power=15,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_north_on",
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"backwards=true,power=15,shape=ascending_south": {
|
||||||
|
"model": "create:block/controller_rail/block_ascending_south_on"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -50,6 +50,7 @@
|
||||||
"block.create.clutch": "\u0265\u0254\u0287n\u05DF\u0186",
|
"block.create.clutch": "\u0265\u0254\u0287n\u05DF\u0186",
|
||||||
"block.create.cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186",
|
"block.create.cogwheel": "\u05DF\u01DD\u01DD\u0265\u028Dbo\u0186",
|
||||||
"block.create.content_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287u\u01DD\u0287uo\u0186",
|
"block.create.content_observer": "\u0279\u01DD\u028C\u0279\u01DDsqO \u0287u\u01DD\u0287uo\u0186",
|
||||||
|
"block.create.controller_rail": "\u05DF\u0131\u0250\u1D1A \u0279\u01DD\u05DF\u05DFo\u0279\u0287uo\u0186",
|
||||||
"block.create.copper_block": "\u029E\u0254o\u05DF\u15FA \u0279\u01DDddo\u0186",
|
"block.create.copper_block": "\u029E\u0254o\u05DF\u15FA \u0279\u01DDddo\u0186",
|
||||||
"block.create.copper_casing": "bu\u0131s\u0250\u0186 \u0279\u01DDddo\u0186",
|
"block.create.copper_casing": "bu\u0131s\u0250\u0186 \u0279\u01DDddo\u0186",
|
||||||
"block.create.copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186",
|
"block.create.copper_ore": "\u01DD\u0279O \u0279\u01DDddo\u0186",
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
"block.create.clutch": "Clutch",
|
"block.create.clutch": "Clutch",
|
||||||
"block.create.cogwheel": "Cogwheel",
|
"block.create.cogwheel": "Cogwheel",
|
||||||
"block.create.content_observer": "Content Observer",
|
"block.create.content_observer": "Content Observer",
|
||||||
|
"block.create.controller_rail": "Controller Rail",
|
||||||
"block.create.copper_block": "Copper Block",
|
"block.create.copper_block": "Copper Block",
|
||||||
"block.create.copper_casing": "Copper Casing",
|
"block.create.copper_casing": "Copper Casing",
|
||||||
"block.create.copper_ore": "Copper Ore",
|
"block.create.copper_ore": "Copper Ore",
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "create:block/controller_rail_analog"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "create:controller_rail"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
"replace": false,
|
"replace": false,
|
||||||
"values": [
|
"values": [
|
||||||
"create:cart_assembler",
|
"create:cart_assembler",
|
||||||
"create:reinforced_rail"
|
"create:reinforced_rail",
|
||||||
|
"create:controller_rail"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -61,6 +61,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.pis
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonHeadBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonHeadBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonExtensionPoleBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonExtensionPoleBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock;
|
import com.simibubi.create.content.contraptions.components.structureMovement.pulley.PulleyBlock;
|
||||||
|
import com.simibubi.create.content.contraptions.components.tracks.ControllerRailBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock;
|
import com.simibubi.create.content.contraptions.components.tracks.ReinforcedRailBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.turntable.TurntableBlock;
|
import com.simibubi.create.content.contraptions.components.turntable.TurntableBlock;
|
||||||
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock;
|
import com.simibubi.create.content.contraptions.components.waterwheel.WaterWheelBlock;
|
||||||
|
@ -736,6 +737,16 @@ public class AllBlocks {
|
||||||
.build()
|
.build()
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
public static final BlockEntry<ControllerRailBlock> CONTROLLER_RAIL =
|
||||||
|
REGISTRATE.block("controller_rail", ControllerRailBlock::new)
|
||||||
|
.initialProperties(() -> Blocks.POWERED_RAIL)
|
||||||
|
.blockstate(BlockStateGen.controllerRail())
|
||||||
|
.addLayer(() -> RenderType::getCutoutMipped)
|
||||||
|
.tag(BlockTags.RAILS)
|
||||||
|
.item()
|
||||||
|
.model((c, p) -> p.generated(c, Create.asResource("block/controller_rail_analog")))
|
||||||
|
.build().register();
|
||||||
|
|
||||||
public static final BlockEntry<MinecartAnchorBlock> MINECART_ANCHOR =
|
public static final BlockEntry<MinecartAnchorBlock> MINECART_ANCHOR =
|
||||||
REGISTRATE.block("minecart_anchor", MinecartAnchorBlock::new)
|
REGISTRATE.block("minecart_anchor", MinecartAnchorBlock::new)
|
||||||
.initialProperties(SharedProperties::stone)
|
.initialProperties(SharedProperties::stone)
|
||||||
|
|
|
@ -43,6 +43,7 @@ import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.math.RayTraceResult;
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
import net.minecraft.util.math.vector.Vector3d;
|
import net.minecraft.util.math.vector.Vector3d;
|
||||||
|
import net.minecraft.util.math.RayTraceResult.Type;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.server.ServerWorld;
|
import net.minecraft.world.server.ServerWorld;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
@ -257,28 +258,40 @@ public class SuperGlueEntity extends Entity implements IEntityAdditionalSpawnDat
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
private void triggerPlaceBlock(PlayerEntity player, Hand hand) {
|
private void triggerPlaceBlock(PlayerEntity player, Hand hand) {
|
||||||
if (player instanceof ClientPlayerEntity && player.world instanceof ClientWorld) {
|
if (!(player instanceof ClientPlayerEntity))
|
||||||
|
return;
|
||||||
|
if (!(player.world instanceof ClientWorld))
|
||||||
|
return;
|
||||||
|
|
||||||
ClientPlayerEntity cPlayer = (ClientPlayerEntity) player;
|
ClientPlayerEntity cPlayer = (ClientPlayerEntity) player;
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
RayTraceResult ray =
|
RayTraceResult ray =
|
||||||
cPlayer.pick(mc.playerController.getBlockReachDistance(), mc.getRenderPartialTicks(), false);
|
cPlayer.pick(mc.playerController.getBlockReachDistance(), mc.getRenderPartialTicks(), false);
|
||||||
if (ray instanceof BlockRayTraceResult) {
|
|
||||||
|
if (!(ray instanceof BlockRayTraceResult))
|
||||||
|
return;
|
||||||
|
if (ray.getType() == Type.MISS)
|
||||||
|
return;
|
||||||
|
BlockRayTraceResult blockRay = (BlockRayTraceResult) ray;
|
||||||
|
if (!blockRay.getPos()
|
||||||
|
.offset(blockRay.getFace())
|
||||||
|
.equals(getHangingPosition()))
|
||||||
|
return;
|
||||||
|
|
||||||
for (Hand handIn : Hand.values()) {
|
for (Hand handIn : Hand.values()) {
|
||||||
ItemStack itemstack = cPlayer.getHeldItem(handIn);
|
ItemStack itemstack = cPlayer.getHeldItem(handIn);
|
||||||
int countBefore = itemstack.getCount();
|
int countBefore = itemstack.getCount();
|
||||||
ActionResultType actionResultType = mc.playerController.func_217292_a(cPlayer,
|
ActionResultType actionResultType =
|
||||||
(ClientWorld) cPlayer.world, handIn, (BlockRayTraceResult) ray);
|
mc.playerController.func_217292_a(cPlayer, (ClientWorld) cPlayer.world, handIn, blockRay);
|
||||||
if (actionResultType == ActionResultType.SUCCESS) {
|
if (actionResultType != ActionResultType.SUCCESS)
|
||||||
|
return;
|
||||||
|
|
||||||
cPlayer.swingArm(handIn);
|
cPlayer.swingArm(handIn);
|
||||||
if (!itemstack.isEmpty()
|
if (!itemstack.isEmpty() && (itemstack.getCount() != countBefore || mc.playerController.isInCreativeMode()))
|
||||||
&& (itemstack.getCount() != countBefore || mc.playerController.isInCreativeMode()))
|
|
||||||
mc.gameRenderer.itemRenderer.resetEquippedProgress(handIn);
|
mc.gameRenderer.itemRenderer.resetEquippedProgress(handIn);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeAdditional(CompoundNBT compound) {
|
public void writeAdditional(CompoundNBT compound) {
|
||||||
|
|
|
@ -11,8 +11,10 @@ import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.MoverType;
|
import net.minecraft.entity.MoverType;
|
||||||
import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
|
import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
|
||||||
import net.minecraft.state.properties.RailShape;
|
import net.minecraft.state.properties.RailShape;
|
||||||
|
import net.minecraft.tags.BlockTags;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.vector.Vector3d;
|
import net.minecraft.util.math.vector.Vector3d;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class CouplingPhysics {
|
public class CouplingPhysics {
|
||||||
|
@ -23,12 +25,18 @@ public class CouplingPhysics {
|
||||||
|
|
||||||
public static void tickCoupling(World world, Couple<MinecartController> c) {
|
public static void tickCoupling(World world, Couple<MinecartController> c) {
|
||||||
Couple<AbstractMinecartEntity> carts = c.map(MinecartController::cart);
|
Couple<AbstractMinecartEntity> carts = c.map(MinecartController::cart);
|
||||||
float couplingLength = c.getFirst().getCouplingLength(true);
|
float couplingLength = c.getFirst()
|
||||||
|
.getCouplingLength(true);
|
||||||
softCollisionStep(world, carts, couplingLength);
|
softCollisionStep(world, carts, couplingLength);
|
||||||
|
if (world.isRemote)
|
||||||
|
return;
|
||||||
hardCollisionStep(world, carts, couplingLength);
|
hardCollisionStep(world, carts, couplingLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void hardCollisionStep(World world, Couple<AbstractMinecartEntity> carts, double couplingLength) {
|
public static void hardCollisionStep(World world, Couple<AbstractMinecartEntity> carts, double couplingLength) {
|
||||||
|
if (!MinecartSim2020.canAddMotion(carts.get(false)) && MinecartSim2020.canAddMotion(carts.get(true)))
|
||||||
|
carts = carts.swap();
|
||||||
|
|
||||||
Couple<Vector3d> corrections = Couple.create(null, null);
|
Couple<Vector3d> corrections = Couple.create(null, null);
|
||||||
Couple<Float> maxSpeed = carts.map(AbstractMinecartEntity::getMaxCartSpeedOnRail);
|
Couple<Float> maxSpeed = carts.map(AbstractMinecartEntity::getMaxCartSpeedOnRail);
|
||||||
boolean firstLoop = true;
|
boolean firstLoop = true;
|
||||||
|
@ -39,6 +47,9 @@ public class CouplingPhysics {
|
||||||
float stress = (float) (couplingLength - cart.getPositionVec()
|
float stress = (float) (couplingLength - cart.getPositionVec()
|
||||||
.distanceTo(otherCart.getPositionVec()));
|
.distanceTo(otherCart.getPositionVec()));
|
||||||
|
|
||||||
|
if (Math.abs(stress) < 1 / 8f)
|
||||||
|
continue;
|
||||||
|
|
||||||
RailShape shape = null;
|
RailShape shape = null;
|
||||||
BlockPos railPosition = cart.getCurrentRailPosition();
|
BlockPos railPosition = cart.getCurrentRailPosition();
|
||||||
BlockState railState = world.getBlockState(railPosition.up());
|
BlockState railState = world.getBlockState(railPosition.up());
|
||||||
|
@ -53,7 +64,12 @@ public class CouplingPhysics {
|
||||||
Vector3d link = otherCart.getPositionVec()
|
Vector3d link = otherCart.getPositionVec()
|
||||||
.subtract(pos);
|
.subtract(pos);
|
||||||
float correctionMagnitude = firstLoop ? -stress / 2f : -stress;
|
float correctionMagnitude = firstLoop ? -stress / 2f : -stress;
|
||||||
correction = shape != null ? followLinkOnRail(link, pos, correctionMagnitude, shape).subtract(pos)
|
|
||||||
|
if (!MinecartSim2020.canAddMotion(cart))
|
||||||
|
correctionMagnitude /= 2;
|
||||||
|
|
||||||
|
correction = shape != null
|
||||||
|
? followLinkOnRail(link, pos, correctionMagnitude, MinecartSim2020.getRailVec(shape)).subtract(pos)
|
||||||
: link.normalize()
|
: link.normalize()
|
||||||
.scale(correctionMagnitude);
|
.scale(correctionMagnitude);
|
||||||
|
|
||||||
|
@ -75,27 +91,30 @@ public class CouplingPhysics {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void softCollisionStep(World world, Couple<AbstractMinecartEntity> carts, double couplingLength) {
|
public static void softCollisionStep(World world, Couple<AbstractMinecartEntity> carts, double couplingLength) {
|
||||||
|
|
||||||
Couple<Vector3d> positions = carts.map(Entity::getPositionVec);
|
|
||||||
Couple<Float> maxSpeed = carts.map(AbstractMinecartEntity::getMaxCartSpeedOnRail);
|
Couple<Float> maxSpeed = carts.map(AbstractMinecartEntity::getMaxCartSpeedOnRail);
|
||||||
Couple<Boolean> canAddmotion = carts.map(MinecartSim2020::canAddMotion);
|
Couple<Boolean> canAddmotion = carts.map(MinecartSim2020::canAddMotion);
|
||||||
|
Couple<Vector3d> motions = carts.map(Entity::getMotion);
|
||||||
|
Couple<Vector3d> nextPositions = carts.map(MinecartSim2020::predictNextPositionOf);
|
||||||
|
|
||||||
Couple<RailShape> shapes = carts.map(current -> {
|
Couple<RailShape> shapes = carts.mapWithContext((cart, current) -> {
|
||||||
BlockPos railPosition = current.getCurrentRailPosition();
|
AbstractMinecartEntity minecart = cart.getMinecart();
|
||||||
|
Vector3d vec = nextPositions.get(current);
|
||||||
|
int x = MathHelper.floor(vec.getX());
|
||||||
|
int y = MathHelper.floor(vec.getY());
|
||||||
|
int z = MathHelper.floor(vec.getZ());
|
||||||
|
BlockPos pos = new BlockPos(x, y - 1, z);
|
||||||
|
if (minecart.world.getBlockState(pos).isIn(BlockTags.RAILS)) pos = pos.down();
|
||||||
|
BlockPos railPosition = pos;
|
||||||
BlockState railState = world.getBlockState(railPosition.up());
|
BlockState railState = world.getBlockState(railPosition.up());
|
||||||
if (!(railState.getBlock() instanceof AbstractRailBlock))
|
if (!(railState.getBlock() instanceof AbstractRailBlock))
|
||||||
return null;
|
return null;
|
||||||
AbstractRailBlock block = (AbstractRailBlock) railState.getBlock();
|
AbstractRailBlock block = (AbstractRailBlock) railState.getBlock();
|
||||||
return block.getRailDirection(railState, world, railPosition, current);
|
return block.getRailDirection(railState, world, railPosition, cart);
|
||||||
});
|
});
|
||||||
|
|
||||||
Couple<Vector3d> motions = carts.map(MinecartSim2020::predictMotionOf);
|
|
||||||
Couple<Vector3d> nextPositions = positions.copy();
|
|
||||||
nextPositions.replaceWithParams(Vector3d::add, motions);
|
|
||||||
|
|
||||||
float futureStress = (float) (couplingLength - nextPositions.getFirst()
|
float futureStress = (float) (couplingLength - nextPositions.getFirst()
|
||||||
.distanceTo(nextPositions.getSecond()));
|
.distanceTo(nextPositions.getSecond()));
|
||||||
if (Math.abs(futureStress) < 1 / 128f)
|
if (MathHelper.epsilonEquals(futureStress, 0D))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (boolean current : Iterate.trueAndFalse) {
|
for (boolean current : Iterate.trueAndFalse) {
|
||||||
|
@ -107,12 +126,19 @@ public class CouplingPhysics {
|
||||||
|
|
||||||
if (canAddmotion.get(current) != canAddmotion.get(!current))
|
if (canAddmotion.get(current) != canAddmotion.get(!current))
|
||||||
correctionMagnitude = !canAddmotion.get(current) ? 0 : correctionMagnitude * 2;
|
correctionMagnitude = !canAddmotion.get(current) ? 0 : correctionMagnitude * 2;
|
||||||
|
if (!canAddmotion.get(current))
|
||||||
|
continue;
|
||||||
|
|
||||||
RailShape shape = shapes.get(current);
|
RailShape shape = shapes.get(current);
|
||||||
correction = shape != null ? followLinkOnRail(link, pos, correctionMagnitude, shape).subtract(pos)
|
if (shape != null) {
|
||||||
: link.normalize()
|
Vector3d railVec = MinecartSim2020.getRailVec(shape);
|
||||||
|
correction = followLinkOnRail(link, pos, correctionMagnitude, railVec).subtract(pos);
|
||||||
|
} else
|
||||||
|
correction = link.normalize()
|
||||||
.scale(correctionMagnitude);
|
.scale(correctionMagnitude);
|
||||||
|
|
||||||
correction = VecHelper.clamp(correction, maxSpeed.get(current));
|
correction = VecHelper.clamp(correction, maxSpeed.get(current));
|
||||||
|
|
||||||
motions.set(current, motions.get(current)
|
motions.set(current, motions.get(current)
|
||||||
.add(correction));
|
.add(correction));
|
||||||
}
|
}
|
||||||
|
@ -121,8 +147,7 @@ public class CouplingPhysics {
|
||||||
carts.forEachWithParams(Entity::setMotion, motions);
|
carts.forEachWithParams(Entity::setMotion, motions);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector3d followLinkOnRail(Vector3d link, Vector3d cart, float diffToReduce, RailShape shape) {
|
public static Vector3d followLinkOnRail(Vector3d link, Vector3d cart, float diffToReduce, Vector3d railAxis) {
|
||||||
Vector3d railAxis = MinecartSim2020.getRailVec(shape);
|
|
||||||
double dotProduct = railAxis.dotProduct(link);
|
double dotProduct = railAxis.dotProduct(link);
|
||||||
if (Double.isNaN(dotProduct) || dotProduct == 0 || diffToReduce == 0)
|
if (Double.isNaN(dotProduct) || dotProduct == 0 || diffToReduce == 0)
|
||||||
return cart;
|
return cart;
|
||||||
|
|
|
@ -45,33 +45,20 @@ public class MinecartSim2020 {
|
||||||
map.put(RailShape.NORTH_EAST, Pair.of(north, east));
|
map.put(RailShape.NORTH_EAST, Pair.of(north, east));
|
||||||
});
|
});
|
||||||
|
|
||||||
public static Vector3d predictMotionOf(AbstractMinecartEntity cart) {
|
public static Vector3d predictNextPositionOf(AbstractMinecartEntity cart) {
|
||||||
// if (cart instanceof FurnaceMinecartEntity) {
|
Vector3d position = cart.getPositionVec();
|
||||||
// return cart.getPositionVec()
|
Vector3d motion = cart.getMotion();
|
||||||
// .subtract(cart.lastTickPosX, cart.lastTickPosY, cart.lastTickPosZ);
|
return position.add(motion);
|
||||||
// }
|
|
||||||
return cart.getMotion().scale(1f);
|
|
||||||
// if (cart instanceof ContainerMinecartEntity) {
|
|
||||||
// ContainerMinecartEntity containerCart = (ContainerMinecartEntity) cart;
|
|
||||||
// float f = 0.98F;
|
|
||||||
// if (containerCart.isEmpty())
|
|
||||||
// return cart.getMotion()
|
|
||||||
// .mul(f, 0.0D, f);
|
|
||||||
// int i = 15 - Container.calcRedstoneFromInventory(containerCart);
|
|
||||||
// f += (float) i * 0.001F;
|
|
||||||
// return cart.getMotion()
|
|
||||||
// .mul(f, 0.0D, f);
|
|
||||||
// }
|
|
||||||
// return cart.getMotion()
|
|
||||||
// .scale(cart.isBeingRidden() ? 0.997D : 0.96D);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean canAddMotion(AbstractMinecartEntity c) {
|
public static boolean canAddMotion(AbstractMinecartEntity c) {
|
||||||
if (c instanceof FurnaceMinecartEntity)
|
if (c instanceof FurnaceMinecartEntity)
|
||||||
return MathHelper.epsilonEquals(((FurnaceMinecartEntity) c).pushX, 0)
|
return MathHelper.epsilonEquals(((FurnaceMinecartEntity) c).pushX, 0)
|
||||||
&& MathHelper.epsilonEquals(((FurnaceMinecartEntity) c).pushZ, 0);
|
&& MathHelper.epsilonEquals(((FurnaceMinecartEntity) c).pushZ, 0);
|
||||||
LazyOptional<MinecartController> capability = c.getCapability(CapabilityMinecartController.MINECART_CONTROLLER_CAPABILITY);
|
LazyOptional<MinecartController> capability =
|
||||||
if (capability.isPresent() && capability.orElse(null).isStalled())
|
c.getCapability(CapabilityMinecartController.MINECART_CONTROLLER_CAPABILITY);
|
||||||
|
if (capability.isPresent() && capability.orElse(null)
|
||||||
|
.isStalled())
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -195,21 +182,6 @@ public class MinecartSim2020 {
|
||||||
}
|
}
|
||||||
|
|
||||||
cart.setMotion(previousMotion);
|
cart.setMotion(previousMotion);
|
||||||
|
|
||||||
if (cart instanceof FurnaceMinecartEntity) {
|
|
||||||
// FurnaceMinecartEntity furnaceCart = (FurnaceMinecartEntity) cart;
|
|
||||||
// Vector3d Vector3d = cart.getMotion();
|
|
||||||
// double d2 = horizontalMag(Vector3d);
|
|
||||||
// double d3 = furnaceCart.pushX * furnaceCart.pushX + furnaceCart.pushZ * furnaceCart.pushZ;
|
|
||||||
// if (d3 > 1.0E-4D && d2 > 0.001D) {
|
|
||||||
// double d40 = (double) MathHelper.sqrt(d2);
|
|
||||||
// double d50 = (double) MathHelper.sqrt(d3);
|
|
||||||
// furnaceCart.pushX = Vector3d.x / d40 * d50;
|
|
||||||
// furnaceCart.pushZ = Vector3d.z / d40 * d50;
|
|
||||||
// furnaceCart.setMotion(Vector3d.mul(0.8D, 0.0D, 0.8D)
|
|
||||||
// .add(furnaceCart.pushX, 0.0D, furnaceCart.pushZ));
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector3d getRailVec(RailShape shape) {
|
public static Vector3d getRailVec(RailShape shape) {
|
||||||
|
|
|
@ -188,9 +188,9 @@ public class MinecartController implements INBTSerializable<CompoundNBT> {
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
mc.couplings = mc.couplings.swap();
|
mc.couplings = mc.couplings.swap();
|
||||||
|
mc.needsEntryRefresh = true;
|
||||||
if (mc == this)
|
if (mc == this)
|
||||||
continue;
|
continue;
|
||||||
mc.needsEntryRefresh = true;
|
|
||||||
mc.sendData();
|
mc.sendData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,292 @@
|
||||||
|
package com.simibubi.create.content.contraptions.components.tracks;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.wrench.IWrenchable;
|
||||||
|
import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
import mcp.MethodsReturnNonnullByDefault;
|
||||||
|
import net.minecraft.block.AbstractRailBlock;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
|
||||||
|
import net.minecraft.item.BlockItemUseContext;
|
||||||
|
import net.minecraft.item.ItemUseContext;
|
||||||
|
import net.minecraft.state.*;
|
||||||
|
import net.minecraft.state.properties.BlockStateProperties;
|
||||||
|
import net.minecraft.state.properties.RailShape;
|
||||||
|
import net.minecraft.util.ActionResultType;
|
||||||
|
import net.minecraft.util.Direction;
|
||||||
|
import net.minecraft.util.Mirror;
|
||||||
|
import net.minecraft.util.Rotation;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.util.math.Vec3i;
|
||||||
|
import net.minecraft.world.IBlockReader;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
|
||||||
|
import static net.minecraft.state.properties.RailShape.*;
|
||||||
|
|
||||||
|
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public class ControllerRailBlock extends AbstractRailBlock implements IWrenchable {
|
||||||
|
public static final EnumProperty<RailShape> SHAPE = BlockStateProperties.RAIL_SHAPE_STRAIGHT;
|
||||||
|
public static final IntegerProperty POWER = BlockStateProperties.POWER_0_15;
|
||||||
|
public static final BooleanProperty BACKWARDS = BooleanProperty.create("backwards");
|
||||||
|
|
||||||
|
public ControllerRailBlock(Properties p_i48444_2_) {
|
||||||
|
super(true, p_i48444_2_);
|
||||||
|
this.setDefaultState(this.stateContainer.getBaseState().with(POWER, 0).with(BACKWARDS, false).with(SHAPE, NORTH_SOUTH));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Vec3i getAccelerationVector(BlockState state) {
|
||||||
|
Direction pointingTo = getPointingTowards(state);
|
||||||
|
return (state.get(BACKWARDS) ? pointingTo.getOpposite() : pointingTo).getDirectionVec();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Direction getPointingTowards(BlockState state) {
|
||||||
|
switch (state.get(SHAPE)) {
|
||||||
|
case ASCENDING_WEST:
|
||||||
|
case EAST_WEST:
|
||||||
|
return Direction.WEST;
|
||||||
|
case ASCENDING_EAST:
|
||||||
|
return Direction.EAST;
|
||||||
|
case ASCENDING_SOUTH:
|
||||||
|
return Direction.SOUTH;
|
||||||
|
default:
|
||||||
|
return Direction.NORTH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void decelerateCart(BlockPos pos, AbstractMinecartEntity cart) {
|
||||||
|
Vec3d diff = VecHelper.getCenterOf(pos).subtract(cart.getPositionVec());
|
||||||
|
cart.setMotion(diff.x / 16f, 0, diff.z / 16f);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isStableWith(BlockState testState, IBlockReader world, BlockPos pos) {
|
||||||
|
return hasSolidSideOnTop(world, pos.down()) && (!testState.get(SHAPE).isAscending() || hasSolidSideOnTop(world, pos.offset(getPointingTowards(testState))));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState getStateForPlacement(BlockItemUseContext p_196258_1_) {
|
||||||
|
Direction direction = p_196258_1_.getPlacementHorizontalFacing();
|
||||||
|
BlockState base = super.getStateForPlacement(p_196258_1_);
|
||||||
|
return (base == null ? getDefaultState() : base).with(BACKWARDS, direction == Direction.SOUTH || direction == Direction.EAST);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IProperty<RailShape> getShapeProperty() {
|
||||||
|
return SHAPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> p_206840_1_) {
|
||||||
|
p_206840_1_.add(SHAPE, POWER, BACKWARDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMinecartPass(BlockState state, World world, BlockPos pos, AbstractMinecartEntity cart) {
|
||||||
|
if (world.isRemote)
|
||||||
|
return;
|
||||||
|
Vec3d accelerationVec = new Vec3d(getAccelerationVector(state));
|
||||||
|
double targetSpeed = cart.getMaxSpeedWithRail() * state.get(POWER) / 15.;
|
||||||
|
if ((cart.getMotion().dotProduct(accelerationVec) >= 0 || cart.getMotion().lengthSquared() < 0.0001) && targetSpeed > 0)
|
||||||
|
cart.setMotion(accelerationVec.scale(targetSpeed));
|
||||||
|
else
|
||||||
|
decelerateCart(pos, cart);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void updateState(BlockState state, World world, BlockPos pos, Block block) {
|
||||||
|
int newPower = calculatePower(world, pos);
|
||||||
|
if (state.get(POWER) != newPower)
|
||||||
|
placeAndNotify(state.with(POWER, newPower), pos, world);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int calculatePower(World world, BlockPos pos) {
|
||||||
|
int newPower = world.getRedstonePowerFromNeighbors(pos);
|
||||||
|
if (newPower != 0)
|
||||||
|
return newPower;
|
||||||
|
|
||||||
|
int forwardDistance = 0;
|
||||||
|
int backwardsDistance = 0;
|
||||||
|
BlockPos lastForwardRail = pos;
|
||||||
|
BlockPos lastBackwardsRail = pos;
|
||||||
|
int forwardPower = 0;
|
||||||
|
int backwardsPower = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < 15; i++) {
|
||||||
|
BlockPos testPos = findNextRail(lastForwardRail, world, false);
|
||||||
|
if (testPos == null)
|
||||||
|
break;
|
||||||
|
forwardDistance++;
|
||||||
|
lastForwardRail = testPos;
|
||||||
|
forwardPower = world.getRedstonePowerFromNeighbors(testPos);
|
||||||
|
if (forwardPower != 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 15; i++) {
|
||||||
|
BlockPos testPos = findNextRail(lastBackwardsRail, world, true);
|
||||||
|
if (testPos == null)
|
||||||
|
break;
|
||||||
|
backwardsDistance++;
|
||||||
|
lastBackwardsRail = testPos;
|
||||||
|
backwardsPower = world.getRedstonePowerFromNeighbors(testPos);
|
||||||
|
if (backwardsPower != 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (forwardDistance > 8 && backwardsDistance > 8)
|
||||||
|
return 0;
|
||||||
|
else if (backwardsPower == 0 && forwardDistance <= 8)
|
||||||
|
return forwardPower;
|
||||||
|
else if (forwardPower == 0 && backwardsDistance <= 8)
|
||||||
|
return backwardsPower;
|
||||||
|
else if (backwardsPower != 0 && forwardPower != 0)
|
||||||
|
return MathHelper.ceil((backwardsPower * forwardDistance + forwardPower * backwardsDistance) / (double) (forwardDistance + backwardsDistance));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState rotate(BlockState p_185499_1_, Rotation p_185499_2_) {
|
||||||
|
switch (p_185499_2_) {
|
||||||
|
case CLOCKWISE_180:
|
||||||
|
switch (p_185499_1_.get(SHAPE)) {
|
||||||
|
case ASCENDING_EAST:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_WEST);
|
||||||
|
case ASCENDING_WEST:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_EAST);
|
||||||
|
case ASCENDING_NORTH:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_SOUTH);
|
||||||
|
case ASCENDING_SOUTH:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_NORTH);
|
||||||
|
default:
|
||||||
|
return p_185499_1_.with(BACKWARDS, !p_185499_1_.get(BACKWARDS));
|
||||||
|
}
|
||||||
|
case COUNTERCLOCKWISE_90:
|
||||||
|
switch (p_185499_1_.get(SHAPE)) {
|
||||||
|
case ASCENDING_EAST:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_NORTH);
|
||||||
|
case ASCENDING_WEST:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_SOUTH);
|
||||||
|
case ASCENDING_NORTH:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_WEST);
|
||||||
|
case ASCENDING_SOUTH:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_EAST);
|
||||||
|
case NORTH_SOUTH:
|
||||||
|
return p_185499_1_.with(SHAPE, EAST_WEST);
|
||||||
|
case EAST_WEST:
|
||||||
|
return p_185499_1_.with(SHAPE, NORTH_SOUTH).with(BACKWARDS, !p_185499_1_.get(BACKWARDS));
|
||||||
|
}
|
||||||
|
case CLOCKWISE_90:
|
||||||
|
switch (p_185499_1_.get(SHAPE)) {
|
||||||
|
case ASCENDING_EAST:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_SOUTH);
|
||||||
|
case ASCENDING_WEST:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_NORTH);
|
||||||
|
case ASCENDING_NORTH:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_EAST);
|
||||||
|
case ASCENDING_SOUTH:
|
||||||
|
return p_185499_1_.with(SHAPE, ASCENDING_WEST);
|
||||||
|
case NORTH_SOUTH:
|
||||||
|
return p_185499_1_.with(SHAPE, EAST_WEST).with(BACKWARDS, !p_185499_1_.get(BACKWARDS));
|
||||||
|
case EAST_WEST:
|
||||||
|
return p_185499_1_.with(SHAPE, NORTH_SOUTH);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return p_185499_1_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState mirror(BlockState p_185471_1_, Mirror p_185471_2_) {
|
||||||
|
RailShape railshape = p_185471_1_.get(SHAPE);
|
||||||
|
switch (p_185471_2_) {
|
||||||
|
case LEFT_RIGHT:
|
||||||
|
switch (railshape) {
|
||||||
|
case ASCENDING_NORTH:
|
||||||
|
return p_185471_1_.with(SHAPE, RailShape.ASCENDING_SOUTH);
|
||||||
|
case ASCENDING_SOUTH:
|
||||||
|
return p_185471_1_.with(SHAPE, RailShape.ASCENDING_NORTH);
|
||||||
|
case NORTH_SOUTH:
|
||||||
|
return p_185471_1_.with(BACKWARDS, !p_185471_1_.get(BACKWARDS));
|
||||||
|
default:
|
||||||
|
return super.mirror(p_185471_1_, p_185471_2_);
|
||||||
|
}
|
||||||
|
case FRONT_BACK:
|
||||||
|
switch (railshape) {
|
||||||
|
case ASCENDING_EAST:
|
||||||
|
return p_185471_1_.with(SHAPE, RailShape.ASCENDING_WEST);
|
||||||
|
case ASCENDING_WEST:
|
||||||
|
return p_185471_1_.with(SHAPE, RailShape.ASCENDING_EAST);
|
||||||
|
case EAST_WEST:
|
||||||
|
return p_185471_1_.with(BACKWARDS, !p_185471_1_.get(BACKWARDS));
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.mirror(p_185471_1_, p_185471_2_);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionResultType onWrenched(BlockState state, ItemUseContext context) {
|
||||||
|
World world = context.getWorld();
|
||||||
|
if (world.isRemote)
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
BlockPos pos = context.getPos();
|
||||||
|
for (Rotation testRotation : new Rotation[]{Rotation.CLOCKWISE_90, Rotation.CLOCKWISE_180, Rotation.COUNTERCLOCKWISE_90}) {
|
||||||
|
BlockState testState = rotate(state, testRotation);
|
||||||
|
if (isStableWith(testState, world, pos)) {
|
||||||
|
placeAndNotify(testState, pos, world);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ActionResultType onSneakWrenched(BlockState state, ItemUseContext context) {
|
||||||
|
World world = context.getWorld();
|
||||||
|
BlockPos pos = context.getPos();
|
||||||
|
BlockState testState = state.with(BACKWARDS, !state.get(BACKWARDS));
|
||||||
|
if (isStableWith(testState, world, pos))
|
||||||
|
placeAndNotify(testState, pos, world);
|
||||||
|
return ActionResultType.SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void placeAndNotify(BlockState state, BlockPos pos, World world) {
|
||||||
|
world.setBlockState(pos, state, 3);
|
||||||
|
world.notifyNeighborsOfStateChange(pos.down(), this);
|
||||||
|
if (state.get(SHAPE).isAscending())
|
||||||
|
world.notifyNeighborsOfStateChange(pos.up(), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private BlockPos findNextRail(BlockPos from, IBlockReader world, boolean reversed) {
|
||||||
|
BlockState current = world.getBlockState(from);
|
||||||
|
if (!(current.getBlock() instanceof ControllerRailBlock))
|
||||||
|
return null;
|
||||||
|
Vec3i accelerationVec = getAccelerationVector(current);
|
||||||
|
BlockPos baseTestPos = reversed ? from.subtract(accelerationVec) : from.add(accelerationVec);
|
||||||
|
for (BlockPos testPos : new BlockPos[]{baseTestPos, baseTestPos.down(), baseTestPos.up()}) {
|
||||||
|
if (testPos.getY() > from.getY() && !current.get(SHAPE).isAscending())
|
||||||
|
continue;
|
||||||
|
BlockState testState = world.getBlockState(testPos);
|
||||||
|
if (testState.getBlock() instanceof ControllerRailBlock && getAccelerationVector(testState).equals(accelerationVec))
|
||||||
|
return testPos;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasComparatorInputOverride(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getComparatorInputOverride(BlockState state, World world, BlockPos pos) {
|
||||||
|
return state.get(POWER);
|
||||||
|
}
|
||||||
|
}
|
|
@ -252,7 +252,7 @@ public class BasinTileEntity extends SmartTileEntity implements ITickableTileEnt
|
||||||
newFacing = test;
|
newFacing = test;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preferredSpoutput != null && BasinBlock.canOutputTo(world, pos, preferredSpoutput))
|
if (preferredSpoutput != null && BasinBlock.canOutputTo(world, pos, preferredSpoutput) && preferredSpoutput != Direction.UP)
|
||||||
newFacing = preferredSpoutput;
|
newFacing = preferredSpoutput;
|
||||||
|
|
||||||
if (newFacing != currentFacing)
|
if (newFacing != currentFacing)
|
||||||
|
|
|
@ -112,6 +112,7 @@ public class ArmInteractionPointHandler {
|
||||||
else
|
else
|
||||||
inputs++;
|
inputs++;
|
||||||
}
|
}
|
||||||
|
if (inputs + outputs > 0)
|
||||||
player.sendStatusMessage(Lang.createTranslationTextComponent("mechanical_arm.summary", inputs, outputs)
|
player.sendStatusMessage(Lang.createTranslationTextComponent("mechanical_arm.summary", inputs, outputs)
|
||||||
.formatted(TextFormatting.WHITE), true);
|
.formatted(TextFormatting.WHITE), true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import java.util.Vector;
|
||||||
import java.util.function.BiFunction;
|
import java.util.function.BiFunction;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import com.simibubi.create.content.contraptions.components.tracks.ControllerRailBlock;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
@ -434,4 +435,47 @@ public class BlockStateGen {
|
||||||
.end();
|
.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static NonNullBiConsumer<DataGenContext<Block, ControllerRailBlock>, RegistrateBlockstateProvider> controllerRail() {
|
||||||
|
return (c, p) -> p.getVariantBuilder(c.get())
|
||||||
|
.forAllStates(state -> {
|
||||||
|
int power = state.get(ControllerRailBlock.POWER);
|
||||||
|
boolean backwards = state.get(ControllerRailBlock.BACKWARDS);
|
||||||
|
String powerStr = power == 0 ? "off" : (power == 15 ? "on" : "analog");
|
||||||
|
RailShape shape = state.get(ControllerRailBlock.SHAPE);
|
||||||
|
String shapeName = shape.isAscending() ? RailShape.ASCENDING_NORTH.getName() : RailShape.NORTH_SOUTH.getName();
|
||||||
|
int rotation = 0;
|
||||||
|
|
||||||
|
switch (shape) {
|
||||||
|
case EAST_WEST:
|
||||||
|
rotation += 270;
|
||||||
|
shapeName = RailShape.NORTH_SOUTH.getName();
|
||||||
|
break;
|
||||||
|
case ASCENDING_EAST:
|
||||||
|
rotation += 90;
|
||||||
|
break;
|
||||||
|
case ASCENDING_SOUTH:
|
||||||
|
rotation += 180;
|
||||||
|
break;
|
||||||
|
case ASCENDING_WEST:
|
||||||
|
rotation += 270;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (backwards) {
|
||||||
|
rotation += 180;
|
||||||
|
shapeName = shape.isAscending() ? RailShape.ASCENDING_SOUTH.getName() : RailShape.NORTH_SOUTH.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return ConfiguredModel.builder()
|
||||||
|
.modelFile(p.models()
|
||||||
|
.getExistingFile(p.modLoc(
|
||||||
|
"block/" + c.getName() + "/block_" + shapeName + "_" +
|
||||||
|
powerStr)))
|
||||||
|
.rotationY(rotation % 360)
|
||||||
|
.build();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,14 @@ public class Couple<T> extends Pair<T, T> implements Iterable<T> {
|
||||||
return Couple.create(function.apply(first), function.apply(second));
|
return Couple.create(function.apply(first), function.apply(second));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <S> Couple<S> mapWithContext(BiFunction<T, Boolean, S> function) {
|
||||||
|
return Couple.create(function.apply(first, true), function.apply(second, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
public <S, R> Couple<S> mapWithParams(BiFunction<T, R, S> function, Couple<R> values) {
|
||||||
|
return Couple.create(function.apply(first, values.first), function.apply(second, values.second));
|
||||||
|
}
|
||||||
|
|
||||||
public void replace(Function<T, T> function) {
|
public void replace(Function<T, T> function) {
|
||||||
setFirst(function.apply(getFirst()));
|
setFirst(function.apply(getFirst()));
|
||||||
setSecond(function.apply(getSecond()));
|
setSecond(function.apply(getSecond()));
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/template_rail_raised_ne",
|
||||||
|
"textures": {
|
||||||
|
"rail": "create:block/controller_rail_analog"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/template_rail_raised_ne",
|
||||||
|
"textures": {
|
||||||
|
"rail": "create:block/controller_rail_off"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/template_rail_raised_ne",
|
||||||
|
"textures": {
|
||||||
|
"rail": "create:block/controller_rail_on"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/template_rail_raised_sw",
|
||||||
|
"textures": {
|
||||||
|
"rail": "create:block/controller_rail_analog"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/template_rail_raised_sw",
|
||||||
|
"textures": {
|
||||||
|
"rail": "create:block/controller_rail_off"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/template_rail_raised_sw",
|
||||||
|
"textures": {
|
||||||
|
"rail": "create:block/controller_rail_on"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/rail_flat",
|
||||||
|
"textures": {
|
||||||
|
"rail": "create:block/controller_rail_analog"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/rail_flat",
|
||||||
|
"textures": {
|
||||||
|
"rail": "create:block/controller_rail_off"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/rail_flat",
|
||||||
|
"textures": {
|
||||||
|
"rail": "create:block/controller_rail_on"
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 336 B |
Binary file not shown.
After Width: | Height: | Size: 331 B |
Binary file not shown.
After Width: | Height: | Size: 342 B |
Loading…
Reference in a new issue