Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1461 commits
Select commit Hold shift + click to select a range
524fc54
Add client/workshop/WorkshopClient.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
c016dcc
Add client/workshop/WorkshopHomeScreen.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
0cf15f2
Add client/workshop/WorkshopPacksScreen.java to the 1.20.6 shared sou…
jaymar921 Nov 6, 2026
46d5272
Add client/workshop/WorkshopScreen.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
5343588
Add entity/AircraftEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
f1c7744
Add entity/AnimationState.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
cd55c7c
Add entity/ChainEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
86419d3
Add entity/ClientAccess.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
2e7bf0d
Add entity/ContainerEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
62c320f
Add entity/EngineSoundSource.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
09baaa1
Add entity/GltdEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
50721db
Add entity/GroundVehicleEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
7c5243e
Add entity/HelicopterEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
e8934af
Add entity/NightVision.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
b1174bb
Add entity/ParachuteEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
cae7930
Add entity/PartState.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
ea6458a
Add entity/PlaneEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
42febb8
Add entity/RappelEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
a95503d
Add entity/TankEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
a153345
Add entity/TerrainFollower.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
b273650
Add entity/UavStationEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
b1ed706
Add entity/VehicleInventory.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
4d26c86
Add entity/VehicleParticles.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
56794e8
Add entity/projectile/A10Entity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
e670aea
Add entity/projectile/AAMissileEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
ebc82d2
Add entity/projectile/ASMissileEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
3be26d0
Add entity/projectile/ATMissileEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
20455f5
Add entity/projectile/BombEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
36686f4
Add entity/projectile/BulletEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
7de40de
Add entity/projectile/DispensedItemEntity.java to the 1.20.6 shared s…
jaymar921 Nov 6, 2026
c7f89a7
Add entity/projectile/FlareEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
485777d
Add entity/projectile/MarkerRocketEntity.java to the 1.20.6 shared so…
jaymar921 Nov 6, 2026
6f134b5
Add entity/projectile/ProjectileEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
7c06dcd
Add entity/projectile/RocketEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
d121d9b
Add entity/projectile/ThrowableEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
f779224
Add entity/projectile/TorpedoEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
6870c6a
Add entity/projectile/TvMissileEntity.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
63afdda
Add item/AircraftItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
b072810
Add item/ChainItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
5524d59
Add item/FuelItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
9b58cb3
Add item/LauncherItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
bc0295c
Add item/LegacyAircraftItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
ceb69d0
Add item/ParachuteItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
d455fa0
Add item/PlacedEntityItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
aad1558
Add item/RangefinderItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
cf39a9d
Add item/ThrowableItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
4f4ee36
Add item/UavStationItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
b9efd78
Add item/VehicleIngredient.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
4a4c7a1
Add item/WrenchItem.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
172ab23
Take the drafting table's result from the recipe on 1.20.6
jaymar921 Nov 6, 2026
da2cec8
Add menu/UavStationMenu.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
906c0ea
Add menu/VehicleMenu.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
073620f
Add network/BoardVehiclePacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
534aea6
Add network/CrewActionPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
3817eba
Add network/DraftingTablePacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
b908e7a
Add network/EquipmentActionPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
c43426c
Add network/ExplosionEffectPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
ab160f6
Add network/FireWeaponPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
41161bc
Add network/LauncherPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
bd6523e
Add network/LockWarningPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
944c165
Add network/MarkerPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
52ce0d3
Add network/ModNetwork.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
45abf71
Add network/PackDataPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
9a47b1b
Add network/PackListPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
610962b
Add network/PackRequestPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
aec0294
Add network/PackSoundPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
a4d1495
Add network/PackSubmissions.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
57ef1a5
Add network/PackSubmitPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
3554824
Add network/PackSync.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
10dc4b7
Add network/PilotStatePacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
0ec76c6
Add network/SpotPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
74be919
Add network/TeamPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
69197e4
Add network/TestFlightPacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
eb86080
Add network/WeaponStatePacket.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
6d6bc1f
Add particle/GlowParticleOptions.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
4fdbf3d
Add particle/SmokeParticleOptions.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
6f9100a
Add platform/Platform.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
f8c1634
Add platform/Registered.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
77d5c66
Add platform/Registration.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
362e56e
Add registry/ModBlockEntities.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
953f6fe
Add registry/ModBlocks.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
6a94d2e
Add registry/ModCreativeTabs.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
807e430
Add registry/ModDataComponents.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
3e1761f
Add registry/ModEntities.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
07114bc
Add registry/ModItems.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
c6c5cac
Add registry/ModMenus.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
7d4ef62
Add registry/ModParticles.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
f12b373
Add team/Markers.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
ee134cb
Find the respawn point in TeamManager on 1.20.6, which has no Dimensi…
jaymar921 Nov 6, 2026
2347d15
Add weapon/CasStrike.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
50cc28d
Add weapon/Combat.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
7bb24fe
Add weapon/ExplosionEffect.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
2da8987
Add weapon/Explosions.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
a3888a8
Add weapon/FlareDispenser.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
bd23eb1
Add weapon/Guidance.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
3f9fe53
Add weapon/LegacyItems.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
8a36e9c
Add weapon/ModDamageTypes.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
df538c4
Add weapon/Resupply.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
b1d6910
Add weapon/ServerFiring.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
5ef92af
Add weapon/Shot.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
3a49445
Add weapon/Spotting.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
63ec898
Add weapon/VehicleWeapons.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
cb294af
Add weapon/WeaponSet.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
3490cd9
Add workshop/TestFlight.java to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
eeffdc1
Add assets/mcheli/blockstates/drafting_table.json to the 1.20.6 share…
jaymar921 Nov 6, 2026
f60140d
Add assets/mcheli/models/block/drafting_table.json to the 1.20.6 shar…
jaymar921 Nov 6, 2026
1b31c9d
Add assets/mcheli/models/item/drafting_table.json to the 1.20.6 share…
jaymar921 Nov 6, 2026
6300533
Add assets/mcheli/particles/glow.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
d10efe3
Add assets/mcheli/particles/smoke.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
8b5903f
Add assets/mcheli/shaders/post/thermal.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
c0aee97
Add assets/mcheli/textures/particle/glow.png to the 1.20.6 shared sou…
jaymar921 Nov 6, 2026
efa9f86
Add assets/minecraft/shaders/program/mcheli_thermal.fsh to the 1.20.6…
jaymar921 Nov 6, 2026
50e96fe
Add assets/minecraft/shaders/program/mcheli_thermal.json to the 1.20.…
jaymar921 Nov 6, 2026
d865b90
Add data/mcheli/damage_type/bullet.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
9e03040
Add data/mcheli/loot_tables/blocks/drafting_table.json to the 1.20.6 …
jaymar921 Nov 6, 2026
b6fc2c5
Add data/mcheli/recipes/chain.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
9818ff3
Add data/mcheli/recipes/container.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
55e38fd
Add data/mcheli/recipes/drafting_table.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
402c5d2
Add data/mcheli/recipes/fgm148.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
f636cc6
Add data/mcheli/recipes/fgm148_bullet.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
b505f48
Add data/mcheli/recipes/fim92.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
b12616a
Add data/mcheli/recipes/fim92_bullet.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
08b7677
Add data/mcheli/recipes/fuel.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
6eac33b
Add data/mcheli/recipes/gltd.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
e83cc71
Add data/mcheli/recipes/m18_green.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
c5b060c
Add data/mcheli/recipes/m18_red.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
319aaf5
Add data/mcheli/recipes/m18_violet.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
4a435aa
Add data/mcheli/recipes/m18_yellow.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
42ec5f2
Add data/mcheli/recipes/parachute.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
a74d488
Add data/mcheli/recipes/rangefinder.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
3d10111
Add data/mcheli/recipes/rangefinder_recharge.json to the 1.20.6 share…
jaymar921 Nov 6, 2026
904b4c0
Add data/mcheli/recipes/uav_station.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
59550b8
Add data/mcheli/recipes/uav_station2.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
289e931
Add data/mcheli/recipes/wrench.json to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
5013e70
Add data/minecraft/tags/damage_type/is_projectile.json to the 1.20.6 …
jaymar921 Nov 6, 2026
56716f0
Add mcheli_logo.png to the 1.20.6 shared sources
jaymar921 Nov 6, 2026
1269e02
Declare the 1.20.6 pack formats
jaymar921 Nov 6, 2026
48c813e
Add ForgeClient.java to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
3457851
Add ForgeNetwork.java to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
bd6a12d
Add ForgePlatform.java to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
fd68e2b
Add ForgeVehicleIngredient.java to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
f14c9b8
Replace the Forge 1.20.6 placeholder entry point with the real one
jaymar921 Nov 6, 2026
0df4dd7
Drop the placeholder wording from the Forge 1.20.6 metadata
jaymar921 Nov 6, 2026
79af164
Add water.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
cac005e
Add wooden.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
a57c0a2
Add redstone.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
74e0e58
Add black.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
0b69803
Add blue.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
c7a21b8
Add brown.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
eaaa63d
Add cyan.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
1318433
Add gray.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
eb5f6fa
Add green.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
8fa9590
Add light_blue.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
ec4c29a
Add light_gray.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
8892d92
Add lime.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
3fc1c51
Add magenta.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
1c5a24e
Add orange.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
9c8fe9a
Add pink.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
d857c14
Add purple.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
b074847
Add red.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
dca5114
Add white.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
5bd515b
Add yellow.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
a84efd4
Add feathers.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
2f372e6
Add raw_fish.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
5909d68
Add diamond.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
281a6b3
Add colorless.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
3a91054
Add colorless.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
2796664
Add gunpowders.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
ea0b205
Add gold.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
9c60ea4
Add iron.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
12c0c34
Add wooden.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
b61dbbd
Add coal.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
9add9d5
Add diamond.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
2a3893e
Add gold.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
ab49e26
Add iron.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
5e296cc
Add redstone.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
27368fa
Add strings.json to the Forge 1.20.6 glue
jaymar921 Nov 6, 2026
20e2d29
Set up the Forge 1.20.6 runs
jaymar921 Nov 6, 2026
581309f
Stop treating Forge 1.20.6 as a placeholder
jaymar921 Nov 6, 2026
2225a8b
Replace the NeoForge 1.20.6 placeholder entry point with the real one
jaymar921 Nov 6, 2026
54be9a5
Add the NeoForge client glue for 1.20.6, using its camera angle event
jaymar921 Nov 6, 2026
abf23bc
Add NeoForgePlatform.java to the NeoForge 1.20.6 glue
jaymar921 Nov 6, 2026
009cfc5
Add NeoForgeVehicleIngredient.java to the NeoForge 1.20.6 glue
jaymar921 Nov 6, 2026
876d65f
Invoke the private post effect loader on NeoForge 1.20.6
jaymar921 Nov 6, 2026
70c01f5
Drop the placeholder wording from the NeoForge 1.20.6 metadata
jaymar921 Nov 6, 2026
ea1f605
List the NeoForge 1.20.6 mixins, which no longer hook the camera
jaymar921 Nov 6, 2026
a147cd9
Set up the NeoForge 1.20.6 runs
jaymar921 Nov 6, 2026
f7543ac
Stop treating NeoForge 1.20.6 as a placeholder
jaymar921 Nov 6, 2026
c17486e
Add FabricPlatform.java to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
ddb74c1
Add FabricVehicleIngredient.java to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
c7aab0a
Replace the Fabric 1.20.6 placeholder entry point with the real one
jaymar921 Nov 6, 2026
197d8db
Add McheliFabricClient.java to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
9dd22a6
Add RollableCamera.java to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
e948698
Reach Camera.setRotation from the Fabric camera hook on 1.20.6
jaymar921 Nov 6, 2026
f0613a9
Invoke the private post effect loader on Fabric 1.20.6
jaymar921 Nov 6, 2026
e2bb18f
Hook the camera before the view matrix on Fabric 1.20.6 and stack the…
jaymar921 Nov 6, 2026
2e52b42
Add LivingEntityRendererMixin.java to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
7750b3b
Add MinecraftMixin.java to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
10511c8
Add PackRepositoryMixin.java to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
5a72da1
Add ParticleEngineMixin.java to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
e714c5e
Add RuntimeSoundInstanceMixin.java to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
318ec14
Add feathers.json to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
a1d8968
Add raw_fish.json to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
6d279e7
Add colorless.json to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
86bde9f
Add colorless.json to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
5078066
Add gunpowders.json to the Fabric 1.20.6 glue
jaymar921 Nov 6, 2026
dbb0137
Drop the placeholder wording from the Fabric 1.20.6 metadata
jaymar921 Nov 6, 2026
81c779a
List the Fabric 1.20.6 mixins
jaymar921 Nov 6, 2026
588bc23
Set up the Fabric 1.20.6 runs
jaymar921 Nov 6, 2026
d80a869
Stop treating Fabric 1.20.6 as a placeholder
jaymar921 Nov 6, 2026
4a1b367
Build the 1.20.6 modules
jaymar921 Nov 6, 2026
9d23129
Note the 1.20.6 port in the changelog
jaymar921 Nov 6, 2026
0e79c1e
List Minecraft 1.20.6 in the README
jaymar921 Nov 6, 2026
20d182b
Tick the 1.20.6 port on the roadmap
jaymar921 Nov 6, 2026
3f16672
Describe what differs on 1.20.6
jaymar921 Nov 6, 2026
4b81d37
List the 1.20.6 modules and say to count unmatched ingredients
jaymar921 Nov 6, 2026
b7e30bb
Add 1.20.6 checks for jars, camera roll, recipes and respawn
jaymar921 Nov 6, 2026
e96f222
Take 1.20.2 and 1.19.4 off the 1.1.0 plan on the roadmap
jaymar921 Nov 6, 2026
c69b4a1
Say 1.1.0 ships from 1.20.6 to 26.3
jaymar921 Nov 6, 2026
c77ef00
Describe the 1.20.2 and 1.19.4 modules as on hold
jaymar921 Nov 6, 2026
721b23c
Note in the changelog that 1.20.2 and 1.19.4 are not part of 1.1.0
jaymar921 Nov 6, 2026
5101c57
Let code outside the sound instance stream a pack sound on 26.3
jaymar921 Nov 7, 2026
7f7733d
Apply the Forge 26.3 access transformer
jaymar921 Nov 7, 2026
eefc06f
Open the sound engine's buffer library on Forge 26.3
jaymar921 Nov 7, 2026
079dd4b
Stream pack sounds from the buffer library on Forge 26.3
jaymar921 Nov 7, 2026
acf6118
Install the pack sound library when the Forge 26.3 sound engine loads
jaymar921 Nov 7, 2026
6f948c0
Let code outside the sound instance stream a pack sound on 26.2
jaymar921 Nov 7, 2026
26546cd
Open the sound engine's buffer library on Forge 26.2
jaymar921 Nov 7, 2026
3508def
Stream pack sounds from the buffer library on Forge 26.2
jaymar921 Nov 7, 2026
5afde33
Install the pack sound library when the Forge 26.2 sound engine loads
jaymar921 Nov 7, 2026
b1a08b5
Let code outside the sound instance stream a pack sound on 26.1
jaymar921 Nov 7, 2026
f36ed68
Open the sound engine's buffer library on Forge 26.1
jaymar921 Nov 7, 2026
7cc905d
Stream pack sounds from the buffer library on Forge 26.1
jaymar921 Nov 7, 2026
79a3048
Install the pack sound library when the Forge 26.1 sound engine loads
jaymar921 Nov 7, 2026
1f1aeda
Let code outside the sound instance stream a pack sound on 1.21.11
jaymar921 Nov 7, 2026
7a3c2aa
Open the sound engine's buffer library on Forge 1.21.11
jaymar921 Nov 7, 2026
ae9d4f6
Stream pack sounds from the buffer library on Forge 1.21.11
jaymar921 Nov 7, 2026
a9eceff
Install the pack sound library when the Forge 1.21.11 sound engine loads
jaymar921 Nov 7, 2026
83c34d8
Work out the angles that stack a camera roll on Forge 1.20.6's view m…
jaymar921 Nov 7, 2026
5e498a4
Check the 1.20.6 view angles against the view of the other versions
jaymar921 Nov 7, 2026
aaf850c
Stack the camera roll on the view on Forge 1.20.6
jaymar921 Nov 7, 2026
1fe1a49
Roll the camera the right way on NeoForge 1.20.6
jaymar921 Nov 7, 2026
9ceb2af
Roll the camera the right way on Fabric 1.20.6
jaymar921 Nov 7, 2026
b6870f4
Start the 1.21.11 pack format range where both pack types accept it
jaymar921 Nov 7, 2026
7a671fa
Describe the Forge sound library, the 1.20.6 camera roll and the 1.21…
jaymar921 Nov 7, 2026
ef3adbf
Say how to test a pack sound and what a banked view on 1.20.6 should …
jaymar921 Nov 7, 2026
8b10703
Mark phase 13 released and move the hands-on smoke tests to 1.1.0
jaymar921 Nov 7, 2026
f085b6a
Say the project is at phase 13 and ships every jar
jaymar921 Nov 7, 2026
1e334e2
Date 1.1.0-beta.9 and note the pack sound fix on Forge
jaymar921 Nov 7, 2026
af5997d
Set the version to 1.1.0-beta.9
jaymar921 Nov 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
43 changes: 43 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,48 @@ way to 1.0.0; see [docs/ROADMAP.md](docs/ROADMAP.md).

## [Unreleased]

## [1.1.0-beta.9] - 2026-11-07

Phase 13 of the road to 1.1.0: every loader on every supported version. This beta ships 21 jars, one per
loader and Minecraft version, from 1.20.6 to 26.3. Betas are not uploaded to CurseForge. Worlds from
1.1.0-beta.8.1 load as before, and the network protocol is unchanged (11). Only the Forge 26.3 jar has been
started from a launcher profile so far, and nobody has flown on the new jars yet; see the smoke test in
[docs/TESTING.md](docs/TESTING.md) before relying on one.

### Added

- NeoForge and Fabric on Minecraft 26.3 catch up with Forge: everything from phases 8 to 12 now runs
there, from the drafting table and vehicle screen to smoke and sight zoom.
- Minecraft 1.21.1 on Forge, NeoForge and Fabric gets everything from phases 8 to 12: fuel, equipment,
the vehicle screen, the drafting table, team manager, UAV stations and the workshop. On 1.21.1 the PVP
button of the team manager switches the server's PVP setting until a restart, since that version has
no game rule for it, and target markers ignore view bobbing.
- Minecraft 26.2, 26.1, 1.21.11, 1.21.5 and 1.20.6 on Forge, NeoForge and Fabric, with everything 26.3 has. On
26.1 and older, teams pick from the sixteen chat colours, since those versions have no separate team
colours. On 1.21.5 and 1.20.6 the PVP button of the team manager switches the server's PVP setting until a
restart.

### Changed

- Forge, NeoForge and Fabric on 26.3, 26.2, 26.1, 1.21.11, 1.21.5, 1.21.1 and 1.20.6 are all built on every pull request.
- 1.1.0 ships on 26.3, 26.2, 26.1, 1.21.11, 1.21.5, 1.21.1 and 1.20.6 on all three loaders (21 jars).
1.20.2 and 1.19.4 are on hold and not part of it.
- Clients and servers on different loaders cannot play together, which the roadmap used to promise.
Each loader refuses the other at its own handshake, before the mod runs. A pack zip still works on
every loader when copied by hand.

### Fixed

- Fabric clients crashed at startup on 26.3 and 1.21.1, because `RollableCamera` sat in the mixin package.
- Glow particles were invisible on Fabric 1.21.1: vanilla only draws the particle types on its own list.
- On 1.21.1 the E-767 recipe failed to load, since its UAV station ingredient used the newer format.
- On Forge 1.21.1, recipes that use gunpowder or feathers could not be crafted, since Forge names those
tags differently from the conventional ones our recipes use. The Forge modules on 1.21.x now define them.
- Sounds that come from a content pack or the workshop were silent on Forge 26.3, engine loops and
one-shots alike, and left a sound channel open. Forge's sound engine on 1.21.11 and later never asks the
sound for its stream, so the file on disk was never read. Forge 1.21.11, 26.1, 26.2 and 26.3 now read it
from the sound engine's own library.

## [1.1.0-beta.8.1] - 2026-11-06

A hotfix for the Forge 26.3 jar, with no other changes. Worlds from 1.1.0-beta.8 load as before, and
Expand Down Expand Up @@ -718,6 +760,7 @@ Phase 1: foundation and flyable helicopters.
- Free look moved from Left Ctrl to Left Alt, because Left Ctrl is now the vanilla sprint key.
- Roll damping runs per tick instead of per frame, so handling no longer depends on frame rate.

[1.1.0-beta.9]: https://github.com/JnH-Projects/MCHeli-Rework-Forge/releases/tag/v1.1.0-beta.9
[1.1.0-beta.8.1]: https://github.com/JnH-Projects/MCHeli-Rework-Forge/releases/tag/v1.1.0-beta.8.1
[1.1.0-beta.8]: https://github.com/JnH-Projects/MCHeli-Rework-Forge/releases/tag/v1.1.0-beta.8
[1.1.0-beta.7]: https://github.com/JnH-Projects/MCHeli-Rework-Forge/releases/tag/v1.1.0-beta.7
Expand Down
35 changes: 20 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,21 @@

<img src="docs/images/mcheli-rework-icon.png" alt="MCHeli Rework icon" width="160">

Helicopters, planes, tanks and ground vehicles for **Minecraft 26.3** and **1.21.1**, on **Forge**,
**NeoForge** and **Fabric**.
Helicopters, planes, tanks and ground vehicles for **Minecraft 26.3**, **26.2**, **26.1**,
**1.21.11**, **1.21.5**, **1.21.1** and **1.20.6**, on **Forge**, **NeoForge** and **Fabric**.

MCHeli Rework is a ground-up port of MCHeli 1.0.3, a mod that stopped at Minecraft 1.7.10. Every
system is rewritten for the modern game, while the original vehicle definitions, models,
textures and sounds load unchanged.

> **Status:** on the way to 1.1.0, now at phase 12 (`1.1.0-beta.8.1`). Every helicopter, plane,
> **Status:** on the way to 1.1.0, now at phase 13 (`1.1.0-beta.9`). Every helicopter, plane,
> tank, car and ground vehicle can be placed, crewed and driven with the original handling, all
> 229 weapons fire, and the scripted HUDs, fuel, the vehicle screen and all of the original's
> equipment are in, down to UAV stations, the drafting table and the team manager. The vehicle
> workshop builds new vehicles in game from a Blockbench or Blender model, with their own textures
> and sounds, and sends them to a server for its operators to approve. Betas ship the
> Forge 26.3 jar only; 1.1.0 ships on Forge and Fabric for every version from 1.19.4 to 26.3, and
> on NeoForge from 1.20.6 (see [supported versions](docs/ROADMAP.md#supported-versions)). See the
> [roadmap](docs/ROADMAP.md).
> and sounds, and sends them to a server for its operators to approve. From `1.1.0-beta.9` on,
> every jar ships: Forge, NeoForge and Fabric for every version from 1.20.6 to 26.3 (see
> [supported versions](docs/ROADMAP.md#supported-versions)). See the [roadmap](docs/ROADMAP.md).

## Showcase video

Expand Down Expand Up @@ -84,16 +83,21 @@ Reserved original, the code is source available rather than open source.

## Requirements

| | Minecraft 26.3 | Minecraft 1.21.1 |
|---|---|---|
| Forge | 66.1.0 or newer in the 66.x line | 52.1.0 or newer |
| NeoForge | 26.3.0.99 or newer | 21.1.200 or newer |
| Fabric | Loader 0.20 and Fabric API | Loader 0.16 and Fabric API |
| Java | 25 (bundled with the launcher) | 21 (bundled with the launcher) |
| Minecraft | Forge | NeoForge | Fabric | Java |
|---|---|---|---|---|
| 26.3 | 66.1.0 or newer in 66.x | 26.3.0.99 or newer | Loader 0.20 and Fabric API | 25 |
| 26.2 | 65.1.5 or newer in 65.x | 26.2.0.93 or newer | Loader 0.20 and Fabric API | 25 |
| 26.1 | 62.0.9 or newer in 62.x | 26.1.2.126 or newer | Loader 0.20 and Fabric API | 25 |
| 1.21.11 | 61.2.4 or newer in 61.x | 21.11.48 or newer | Loader 0.16 and Fabric API | 21 |
| 1.21.5 | 55.1.18 or newer in 55.x | 21.5.101 or newer | Loader 0.16 and Fabric API | 21 |
| 1.21.1 | 52.1.0 or newer | 21.1.200 or newer | Loader 0.16 and Fabric API | 21 |
| 1.20.6 | 50.2.14 or newer in 50.x | 20.6.144 or newer | Loader 0.16 and Fabric API | 21 |

The launcher bundles the right Java for each version.

## Installing

1. Install Forge, NeoForge or Fabric for Minecraft 26.3 or 1.21.1. On Fabric, also install
1. Install Forge, NeoForge or Fabric for Minecraft 26.3, 26.2, 26.1, 1.21.11, 1.21.5, 1.21.1 or 1.20.6. On Fabric, also install
[Fabric API](https://modrinth.com/mod/fabric-api).
2. Download the jar for your loader from the
[releases](https://github.com/JnH-Projects/MCHeli-Rework-Forge/releases):
Expand All @@ -118,7 +122,8 @@ zip goes.
Use a separate game directory for each loader and version. Mods built for other loaders or older
versions in a shared `mods` folder will stop the game from starting. Worlds and the `mcheli`
folder can move between loaders on the same Minecraft version: the imported content, content packs
and configs are the same files on all three. Do not open a 26.3 world in 1.21.1.
and configs are the same files on all three. Do not open a world in an older Minecraft version than
the one that last saved it.

## Playing

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,14 @@ public enum ImportTarget {
* the vehicle's model by {@code custom_model_data} (see {@link LegacyImporter#ICONS_FILE}), and
* recipe ingredients are {@code {"item": ...}} and {@code {"tag": ...}} objects.
*/
V1_21_1
V1_21_1,
/**
* Minecraft 1.20.6: the 1.21.1 layout, except that data folders still have their plural names.
*/
V1_20_6;

/** The folder under {@code data/<namespace>} that holds recipes on this target. */
public String recipeFolder() {
return this == V1_20_6 ? "recipes" : "recipe";
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.jnhprojects.mcheli.content;

import com.jnhprojects.mcheli.content.throwable.ThrowableDefinition;
import com.jnhprojects.mcheli.content.aircraft.AircraftDefinition;
import com.jnhprojects.mcheli.content.recipe.LegacyRecipe;

Expand Down Expand Up @@ -47,12 +48,12 @@ public final class LegacyImporter {
* Bump whenever the output changes, so existing installs import again. 2: recipes craft the
* generic vehicle items of 1.1.0. 3: vehicle ingredients name their type for every loader, and
* the output depends on the {@link ImportTarget}. 4: recipes may use the equipment
* items, so the E-767 is crafted with a UAV station.
* items, so the E-767 is crafted with a UAV station. 5: on 1.21.1, smoke grenades get icon numbers too.
*/
public static final int FORMAT = 4;
public static final int FORMAT = 5;

/**
* Written at the pack root for {@link ImportTarget#V1_21_1}: each original vehicle's
* Written at the pack root for every target but {@link ImportTarget#MODERN}: each original vehicle's
* {@code custom_model_data}, as {@code name=index}, which the mod puts on the vehicle's stack.
*/
public static final String ICONS_FILE = "item_icons.properties";
Expand All @@ -77,7 +78,7 @@ private LegacyImporter(Path packRoot, ImportTarget target) {
this.target = target;
this.packRoot = packRoot;
this.assetsOut = packRoot.resolve("assets/mcheli");
this.recipesOut = packRoot.resolve("data/mcheli/recipe");
this.recipesOut = packRoot.resolve("data/mcheli/" + target.recipeFolder());
}

/**
Expand Down Expand Up @@ -116,7 +117,7 @@ private Summary importFrom(Path zipPath) throws IOException {
writeTranslations();

ContentRegistry content = ContentRegistry.load(assetsOut);
Map<String, Integer> icons = target == ImportTarget.V1_21_1 ? writeKindModels(content) : Map.of();
Map<String, Integer> icons = target != ImportTarget.MODERN ? writeKindModels(content) : Map.of();
LegacyRecipe.Generated recipes = LegacyRecipe.generate(content, target, icons);
for (Map.Entry<String, String> e : recipes.files().entrySet()) {
write(recipesOut.resolve(e.getKey()), e.getValue());
Expand Down Expand Up @@ -289,6 +290,9 @@ private Map<String, Integer> writeKindModels(ContentRegistry content) throws IOE
for (AircraftDefinition def : content.all()) {
byKind.computeIfAbsent(def.kind(), k -> new ArrayList<>()).add(def.name());
}
for (ThrowableDefinition def : content.throwables()) {
byKind.computeIfAbsent("throwable", k -> new ArrayList<>()).add(def.name());
}
Map<String, Integer> icons = new TreeMap<>();
for (Map.Entry<String, List<String>> e : byKind.entrySet()) {
List<String> names = e.getValue();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ private static void appendResult(StringBuilder json, Vehicle result, int count,
private static String model(Vehicle result, ImportTarget target) {
return switch (target) {
case MODERN -> "\"minecraft:item_model\": \"mcheli:" + result.name() + '"';
case V1_21_1 -> "\"minecraft:custom_model_data\": " + result.icon();
case V1_21_1, V1_20_6 -> "\"minecraft:custom_model_data\": " + result.icon();
};
}

Expand All @@ -208,7 +208,7 @@ private static String ingredient(String name, int damage, Predicate<String> modI
String lower = name.trim().toLowerCase(Locale.ROOT);
if (lower.startsWith("mcheli:")) {
if (EQUIPMENT_ITEMS.contains(lower)) {
return '"' + lower + '"';
return target == ImportTarget.MODERN ? '"' + lower + '"' : "{\"item\": \"" + lower + "\"}";
}
if (!modItems.test(lower)) {
throw new InvalidRecipeException(lower + " does not exist (yet)");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.jnhprojects.mcheli.physics;

import org.joml.Matrix3d;
import org.joml.Quaternionf;
import org.joml.Vector3f;

Expand All @@ -12,6 +13,9 @@
* {@code rotY(-yaw) * rotX(pitch) * rotZ(roll)}.
*/
public final class AircraftRotation {
/** Below this cosine of the middle angle, {@link #rollInXyzOrder} treats the first and last as one axis. */
private static final double GIMBAL_LOCK = 1.0E-9;

private AircraftRotation() {
}

Expand Down Expand Up @@ -69,6 +73,39 @@ public static float cameraRoll(float yaw, float pitch, float roll, float viewYaw
return (float) Math.toDegrees(Math.atan2(onLeft, onUp));
}

/**
* Angles for a view matrix built as {@code rotationXYZ(pitch, yaw + PI, roll)}, the way Forge
* builds it on Minecraft 1.20.6, so that the matrix comes out as a camera roll stacked on top of
* the other two rotations. Fed the plain angles that matrix applies the roll around the world's
* Z axis instead: a bank would look like a bank going south, the opposite one going north, and a
* change of pitch going east or west.
*
* @param yaw the camera yaw, in degrees
* @param pitch the camera pitch, in degrees
* @param roll the roll as {@link #cameraRoll} returns it, in degrees
* @return {@code {yaw, pitch, roll}} in degrees, to pass on to that matrix
*/
public static float[] rollInXyzOrder(float yaw, float pitch, float roll) {
Matrix3d view = new Matrix3d()
.rotationZ(Math.toRadians(-roll))
.rotateX(Math.toRadians(pitch))
.rotateY(Math.toRadians(yaw) + Math.PI);
// The matrix above equals rotX(x) * rotY(y) * rotZ(z); read those three back from it.
double cosY = Math.hypot(view.m00, view.m10);
double x;
double z;
if (cosY > GIMBAL_LOCK) {
x = Math.atan2(-view.m21, view.m22);
z = Math.atan2(-view.m10, view.m00);
} else {
// Looking along X: the first and last rotation turn around the same axis, so Z can stay 0.
x = Math.atan2(view.m12, view.m11);
z = 0.0;
}
double y = Math.atan2(view.m20, cosY);
return new float[]{(float) Math.toDegrees(y - Math.PI), (float) Math.toDegrees(x), (float) Math.toDegrees(z)};
}

public static float wrap(float degrees) {
float d = degrees % 360.0F;
if (d >= 180.0F) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ void minecraft1211RecipesUseObjectsAndCustomModelData() {
""", LegacyRecipe.toJson(AH_6X, LINE, true, "mcheli:ah-6"::equals, ImportTarget.V1_21_1));
}

@Test
void equipmentIngredientsFollowTheTarget() {
assertTrue(LegacyRecipe.toJson(AH_6X, "mcheli:uav_station,coal", false, name -> false, ImportTarget.V1_21_1)
.contains("{\"item\": \"mcheli:uav_station\"}"));
assertTrue(LegacyRecipe.toJson(AH_6X, "mcheli:uav_station,coal", false, name -> false, ImportTarget.MODERN)
.contains("\"mcheli:uav_station\""));
}

@Test
void minecraft1211ShapelessIngredientsAreObjectsToo() {
String json = LegacyRecipe.toJson(AH_6X, "iron_block,coal", false, name -> false, ImportTarget.V1_21_1);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.jnhprojects.mcheli.physics;

import org.joml.Matrix4f;
import org.joml.Quaternionf;
import org.joml.Vector3f;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

/**
* Checks the camera tilt against the hull. The camera rotation is rebuilt the way
Expand Down Expand Up @@ -68,4 +70,56 @@ void cameraUpStaysOnTheHullsSideOfTheView() {
assertEquals(expected.y, cameraUp.y, EPSILON);
assertEquals(expected.z, cameraUp.z, EPSILON);
}

/** The view matrix Forge builds on Minecraft 1.20.6 from what its camera angle event returns. */
private static Matrix4f forgeView(float[] angles) {
return new Matrix4f().rotationXYZ((float) Math.toRadians(angles[1]), (float) (Math.toRadians(angles[0]) + Math.PI), (float) Math.toRadians(angles[2]));
}

/** The inverse of {@link #camera}: what every other version builds as its view matrix. */
private static Matrix4f expectedView(float yaw, float pitch, float roll) {
return new Matrix4f().rotation(camera(yaw, pitch, roll).conjugate());
}

private static void assertSameRotation(Matrix4f expected, Matrix4f actual) {
Vector3f[] axes = {new Vector3f(1.0F, 0.0F, 0.0F), new Vector3f(0.0F, 1.0F, 0.0F), new Vector3f(0.0F, 0.0F, 1.0F)};
for (Vector3f axis : axes) {
Vector3f a = expected.transformDirection(new Vector3f(axis));
Vector3f b = actual.transformDirection(new Vector3f(axis));
assertEquals(a.x, b.x, EPSILON);
assertEquals(a.y, b.y, EPSILON);
assertEquals(a.z, b.z, EPSILON);
}
}

@Test
void rollInXyzOrderBuildsTheSameViewOnEveryHeading() {
for (float yaw = -180.0F; yaw <= 180.0F; yaw += 15.0F) {
for (float pitch = -80.0F; pitch <= 80.0F; pitch += 20.0F) {
for (float roll = -170.0F; roll <= 170.0F; roll += 34.0F) {
assertSameRotation(expectedView(yaw, pitch, roll), forgeView(AircraftRotation.rollInXyzOrder(yaw, pitch, roll)));
}
}
}
}

@Test
void rollInXyzOrderSurvivesGimbalLock() {
// Due east or west and level, a hair of roll leaves the middle angle at its limit.
for (float yaw : new float[]{-90.0F, 90.0F}) {
for (float roll : new float[]{0.0F, 1.0E-4F, -1.0E-4F, 1.0F}) {
assertSameRotation(expectedView(yaw, 0.0F, roll), forgeView(AircraftRotation.rollInXyzOrder(yaw, 0.0F, roll)));
}
}
}

@Test
void forgesPlainAnglesWouldBeWrong() {
// Why rollInXyzOrder exists: going east, the plain angles do not give the same view at all.
Matrix4f expected = expectedView(-90.0F, 0.0F, -30.0F);
Matrix4f plain = forgeView(new float[]{-90.0F, 0.0F, -30.0F});
Vector3f expectedUp = expected.transformDirection(new Vector3f(0.0F, 1.0F, 0.0F));
Vector3f plainUp = plain.transformDirection(new Vector3f(0.0F, 1.0F, 0.0F));
assertTrue(expectedUp.distance(plainUp) > 0.1F);
}
}
Loading
Loading