From 28816a0385d0fc0478bc42bcf6a323a611adeda8 Mon Sep 17 00:00:00 2001 From: Halbear Date: Sun, 17 May 2026 00:47:05 +0100 Subject: [PATCH] Added the start of the space ship entity --- build.gradle | 28 +- .../fluid/SupernovaOverlayRenderer.java | 4 - .../supernova/data/DataGenerators.java | 12 - .../supernova/registry/ModEntities.java | 4 - .../registry/worldgen/ModFeatures.java | 4 - .../supernova/world/gen/ores/OreInCave.java | 4 - .../halbear}/supernova/SuperNova.java | 26 +- .../supernova/custom/block/ArcFurnace.java | 2 +- .../custom/block/DebugPortalBlock.java | 8 +- .../block/HorizontalRotationalDecorBlock.java | 2 +- .../custom/block/StraightSteelPipe.java | 8 +- .../SupernovaBlockstates.java | 4 +- .../blockstate_stuff/enums/PipeContents.java | 2 +- .../custom/fluid/FlammableFluid.java | 3 +- .../custom/fluid/SupernovaFlowingFluid.java | 3 +- .../fluid/SupernovaFluidAttributes.java | 7 +- .../fluid/SupernovaOverlayRenderer.java | 4 + .../supernova/data/DataGenerators.java | 9 + .../EntityRenderers/SpaceshipRenderer.java | 1197 +++++++++++++++++ .../halbear/supernova/entity/Spaceship.java | 124 ++ .../loot_modifiers/ModReplaceLootDrop.java | 2 +- .../halbear/supernova/mixin/CameraMixin.java | 31 + .../supernova/registry/ModArmourMaterial.java | 4 +- .../supernova/registry/ModEntities.java | 18 + .../supernova/registry/ModEventBusEvents.java | 23 +- .../supernova/registry/ModParticles.java | 6 +- .../supernova/registry/blocks/ModBlocks.java | 14 +- .../supernova/registry/blocks/ModFluids.java | 13 +- .../supernova/registry/items/ItemGroups.java | 4 +- .../supernova/registry/items/ModItems.java | 9 +- .../registry/util/ClientEventHandler.java | 45 +- .../registry/util/ModSoundEvents.java | 4 +- .../registry/util/ServerEventHandler.java | 6 +- .../registry/worldgen/ModBiomes.java | 4 +- .../worldgen/ModConfiguredFeatures.java | 6 +- .../registry/worldgen/ModDimensions.java | 5 +- .../registry/worldgen/ModFeatures.java | 4 + .../registry/worldgen/ModSurfaceBuilders.java | 4 +- .../supernova/setup/CommonEventHandler.java | 9 +- .../supernova/setup/ModEventHandler.java | 24 + .../supernova/vehicle/VehicleCameraSetup.java | 62 + .../world/dimension/DebugTeleporter.java | 6 +- .../supernova/world/gen/ores/OreInCave.java | 4 + src/main/resources/META-INF/mods.toml | 4 +- .../supernova/textures/entity/rocketship.png | 0 .../supernova/textures/entity/spaceship.png | Bin 0 -> 58168 bytes src/main/resources/supernova.mixin.json | 12 + 47 files changed, 1600 insertions(+), 178 deletions(-) delete mode 100644 src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaOverlayRenderer.java delete mode 100644 src/main/java/dev/halbear1/supernova/data/DataGenerators.java delete mode 100644 src/main/java/dev/halbear1/supernova/registry/ModEntities.java delete mode 100644 src/main/java/dev/halbear1/supernova/registry/worldgen/ModFeatures.java delete mode 100644 src/main/java/dev/halbear1/supernova/world/gen/ores/OreInCave.java rename src/main/java/{dev/halbear1 => net/halbear}/supernova/SuperNova.java (86%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/custom/block/ArcFurnace.java (95%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/custom/block/DebugPortalBlock.java (94%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/custom/block/HorizontalRotationalDecorBlock.java (95%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/custom/block/StraightSteelPipe.java (94%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/custom/block/blockstate_stuff/SupernovaBlockstates.java (84%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/custom/block/blockstate_stuff/enums/PipeContents.java (85%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/custom/fluid/FlammableFluid.java (77%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/custom/fluid/SupernovaFlowingFluid.java (98%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/custom/fluid/SupernovaFluidAttributes.java (85%) create mode 100644 src/main/java/net/halbear/supernova/custom/fluid/SupernovaOverlayRenderer.java create mode 100644 src/main/java/net/halbear/supernova/data/DataGenerators.java create mode 100644 src/main/java/net/halbear/supernova/entity/EntityRenderers/SpaceshipRenderer.java create mode 100644 src/main/java/net/halbear/supernova/entity/Spaceship.java rename src/main/java/{dev/halbear1 => net/halbear}/supernova/loot_modifiers/ModReplaceLootDrop.java (97%) create mode 100644 src/main/java/net/halbear/supernova/mixin/CameraMixin.java rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/ModArmourMaterial.java (96%) create mode 100644 src/main/java/net/halbear/supernova/registry/ModEntities.java rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/ModEventBusEvents.java (55%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/ModParticles.java (73%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/blocks/ModBlocks.java (95%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/blocks/ModFluids.java (95%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/items/ItemGroups.java (84%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/items/ModItems.java (97%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/util/ClientEventHandler.java (68%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/util/ModSoundEvents.java (93%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/util/ServerEventHandler.java (96%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/worldgen/ModBiomes.java (93%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/worldgen/ModConfiguredFeatures.java (92%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/worldgen/ModDimensions.java (91%) create mode 100644 src/main/java/net/halbear/supernova/registry/worldgen/ModFeatures.java rename src/main/java/{dev/halbear1 => net/halbear}/supernova/registry/worldgen/ModSurfaceBuilders.java (80%) rename src/main/java/{dev/halbear1 => net/halbear}/supernova/setup/CommonEventHandler.java (76%) create mode 100644 src/main/java/net/halbear/supernova/setup/ModEventHandler.java create mode 100644 src/main/java/net/halbear/supernova/vehicle/VehicleCameraSetup.java rename src/main/java/{dev/halbear1 => net/halbear}/supernova/world/dimension/DebugTeleporter.java (93%) create mode 100644 src/main/java/net/halbear/supernova/world/gen/ores/OreInCave.java create mode 100644 src/main/resources/assets/supernova/textures/entity/rocketship.png create mode 100644 src/main/resources/assets/supernova/textures/entity/spaceship.png create mode 100644 src/main/resources/supernova.mixin.json diff --git a/build.gradle b/build.gradle index a6f1ea9..81859f1 100644 --- a/build.gradle +++ b/build.gradle @@ -2,25 +2,32 @@ buildscript { repositories { maven { url = 'https://maven.minecraftforge.net' } maven { url = 'https://maven.parchmentmc.org' } + maven { url = 'https://repo.spongepowered.org/maven' } mavenCentral() } dependencies { classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true classpath 'org.parchmentmc:librarian:1.+' + classpath 'org.spongepowered:mixingradle:0.7.+' } } apply plugin: 'net.minecraftforge.gradle' +apply plugin: 'org.spongepowered.mixin' apply plugin: 'org.parchmentmc.librarian.forgegradle' apply plugin: 'eclipse' apply plugin: 'maven-publish' version = '1.16.5-0.1' -group = 'dev.halbear1.supernova' // http://maven.apache.org/guides/mini/guide-naming-conventions.html +group = 'net.halbear.supernova' // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = 'supernova' java.toolchain.languageVersion = JavaLanguageVersion.of(8) // Mojang ships Java 8 to end users, so your mod should target Java 8. +mixin { + add sourceSets.main, "supernova.mixin-refmap.json" +} + println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) minecraft { @@ -29,7 +36,11 @@ minecraft { runs { client { workingDirectory project.file('run') + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" + + arg "-mixin.config=supernova.mixin.json" property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' @@ -85,13 +96,14 @@ dependencies { jar { manifest { attributes([ - "Specification-Title": "supernova", - "Specification-Vendor": "supernovasareus", - "Specification-Version": "1", // We are version 1 of ourselves - "Implementation-Title": project.name, - "Implementation-Version": "${version}", - "Implementation-Vendor" :"supernovasareus", - "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") + "Specification-Title" : "supernova", + "Specification-Vendor" : "halbear", + "Specification-Version" : "1", + "Implementation-Title" : project.name, + "Implementation-Version" : "${version}", + "Implementation-Vendor" : "halbear", + "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + "MixinConfigs" : "supernova.mixin.json" ]) } } diff --git a/src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaOverlayRenderer.java b/src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaOverlayRenderer.java deleted file mode 100644 index 0f73896..0000000 --- a/src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaOverlayRenderer.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.halbear1.supernova.custom.fluid; - -public class SupernovaOverlayRenderer { -} diff --git a/src/main/java/dev/halbear1/supernova/data/DataGenerators.java b/src/main/java/dev/halbear1/supernova/data/DataGenerators.java deleted file mode 100644 index 344ed70..0000000 --- a/src/main/java/dev/halbear1/supernova/data/DataGenerators.java +++ /dev/null @@ -1,12 +0,0 @@ -package dev.halbear1.supernova.data; - -import dev.halbear1.supernova.SuperNova; -import net.minecraft.data.DataGenerator; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; - -@Mod.EventBusSubscriber(modid = SuperNova.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) -public class DataGenerators { - -} diff --git a/src/main/java/dev/halbear1/supernova/registry/ModEntities.java b/src/main/java/dev/halbear1/supernova/registry/ModEntities.java deleted file mode 100644 index e0b8691..0000000 --- a/src/main/java/dev/halbear1/supernova/registry/ModEntities.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.halbear1.supernova.registry; - -public class ModEntities { -} diff --git a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModFeatures.java b/src/main/java/dev/halbear1/supernova/registry/worldgen/ModFeatures.java deleted file mode 100644 index 5d38c19..0000000 --- a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModFeatures.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.halbear1.supernova.registry.worldgen; - -public class ModFeatures { -} diff --git a/src/main/java/dev/halbear1/supernova/world/gen/ores/OreInCave.java b/src/main/java/dev/halbear1/supernova/world/gen/ores/OreInCave.java deleted file mode 100644 index 228079b..0000000 --- a/src/main/java/dev/halbear1/supernova/world/gen/ores/OreInCave.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.halbear1.supernova.world.gen.ores; - -public class OreInCave { -} diff --git a/src/main/java/dev/halbear1/supernova/SuperNova.java b/src/main/java/net/halbear/supernova/SuperNova.java similarity index 86% rename from src/main/java/dev/halbear1/supernova/SuperNova.java rename to src/main/java/net/halbear/supernova/SuperNova.java index 9520c35..78505e0 100644 --- a/src/main/java/dev/halbear1/supernova/SuperNova.java +++ b/src/main/java/net/halbear/supernova/SuperNova.java @@ -1,20 +1,16 @@ -package dev.halbear1.supernova; +package net.halbear.supernova; -import dev.halbear1.supernova.registry.ModParticles; -import dev.halbear1.supernova.registry.blocks.ModBlocks; -import dev.halbear1.supernova.registry.blocks.ModFluids; -import dev.halbear1.supernova.registry.items.ModItems; -import dev.halbear1.supernova.registry.util.ModSoundEvents; -import dev.halbear1.supernova.registry.worldgen.ModBiomes; -import dev.halbear1.supernova.registry.worldgen.ModConfiguredFeatures; +import net.halbear.supernova.registry.ModEntities; +import net.halbear.supernova.registry.ModParticles; +import net.halbear.supernova.registry.blocks.ModBlocks; +import net.halbear.supernova.registry.blocks.ModFluids; +import net.halbear.supernova.registry.items.ModItems; +import net.halbear.supernova.registry.util.ModSoundEvents; +import net.halbear.supernova.registry.worldgen.ModBiomes; +import net.halbear.supernova.registry.worldgen.ModConfiguredFeatures; import net.minecraft.block.Block; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.RegistryKey; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.InterModComms; @@ -39,10 +35,14 @@ public class SuperNova // to chef, peaceful and pal, no touchy // Directly reference a log4j logger. private static final Logger LOGGER = LogManager.getLogger(); + public static float DegToRad = (float)Math.PI/180.0F; + public static float RadToDeg = 180.0F/(float)Math.PI; + public SuperNova() { //hal //creates a mod event bus IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); //register the mod elements on the mod event bus (loads them) + ModEntities.ENTITY_TYPES.register(bus); ModBlocks.BLOCKS.register(bus); ModItems.ITEMS.register(bus); ModFluids.FLUIDS.register(bus); diff --git a/src/main/java/dev/halbear1/supernova/custom/block/ArcFurnace.java b/src/main/java/net/halbear/supernova/custom/block/ArcFurnace.java similarity index 95% rename from src/main/java/dev/halbear1/supernova/custom/block/ArcFurnace.java rename to src/main/java/net/halbear/supernova/custom/block/ArcFurnace.java index 0d5a90f..024c241 100644 --- a/src/main/java/dev/halbear1/supernova/custom/block/ArcFurnace.java +++ b/src/main/java/net/halbear/supernova/custom/block/ArcFurnace.java @@ -1,4 +1,4 @@ -package dev.halbear1.supernova.custom.block; +package net.halbear.supernova.custom.block; import net.minecraft.block.*; import net.minecraft.item.BlockItemUseContext; diff --git a/src/main/java/dev/halbear1/supernova/custom/block/DebugPortalBlock.java b/src/main/java/net/halbear/supernova/custom/block/DebugPortalBlock.java similarity index 94% rename from src/main/java/dev/halbear1/supernova/custom/block/DebugPortalBlock.java rename to src/main/java/net/halbear/supernova/custom/block/DebugPortalBlock.java index 97ef958..6c85e89 100644 --- a/src/main/java/dev/halbear1/supernova/custom/block/DebugPortalBlock.java +++ b/src/main/java/net/halbear/supernova/custom/block/DebugPortalBlock.java @@ -1,8 +1,8 @@ -package dev.halbear1.supernova.custom.block; +package net.halbear.supernova.custom.block; -import dev.halbear1.supernova.registry.blocks.ModBlocks; -import dev.halbear1.supernova.registry.worldgen.ModDimensions; -import dev.halbear1.supernova.world.dimension.DebugTeleporter; +import net.halbear.supernova.registry.blocks.ModBlocks; +import net.halbear.supernova.registry.worldgen.ModDimensions; +import net.halbear.supernova.world.dimension.DebugTeleporter; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; diff --git a/src/main/java/dev/halbear1/supernova/custom/block/HorizontalRotationalDecorBlock.java b/src/main/java/net/halbear/supernova/custom/block/HorizontalRotationalDecorBlock.java similarity index 95% rename from src/main/java/dev/halbear1/supernova/custom/block/HorizontalRotationalDecorBlock.java rename to src/main/java/net/halbear/supernova/custom/block/HorizontalRotationalDecorBlock.java index aa61c71..6a7f0cd 100644 --- a/src/main/java/dev/halbear1/supernova/custom/block/HorizontalRotationalDecorBlock.java +++ b/src/main/java/net/halbear/supernova/custom/block/HorizontalRotationalDecorBlock.java @@ -1,4 +1,4 @@ -package dev.halbear1.supernova.custom.block; +package net.halbear.supernova.custom.block; import net.minecraft.block.*; import net.minecraft.item.BlockItemUseContext; diff --git a/src/main/java/dev/halbear1/supernova/custom/block/StraightSteelPipe.java b/src/main/java/net/halbear/supernova/custom/block/StraightSteelPipe.java similarity index 94% rename from src/main/java/dev/halbear1/supernova/custom/block/StraightSteelPipe.java rename to src/main/java/net/halbear/supernova/custom/block/StraightSteelPipe.java index 44241f5..b3a3132 100644 --- a/src/main/java/dev/halbear1/supernova/custom/block/StraightSteelPipe.java +++ b/src/main/java/net/halbear/supernova/custom/block/StraightSteelPipe.java @@ -1,14 +1,14 @@ -package dev.halbear1.supernova.custom.block; +package net.halbear.supernova.custom.block; -import dev.halbear1.supernova.custom.block.blockstate_stuff.SupernovaBlockstates; -import dev.halbear1.supernova.registry.blocks.ModBlocks; +import net.halbear.supernova.custom.block.blockstate_stuff.SupernovaBlockstates; +import net.halbear.supernova.registry.blocks.ModBlocks; import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.item.BlockItemUseContext; import net.minecraft.state.BooleanProperty; import net.minecraft.state.DirectionProperty; import net.minecraft.state.EnumProperty; -import dev.halbear1.supernova.custom.block.blockstate_stuff.enums.PipeContents; +import net.halbear.supernova.custom.block.blockstate_stuff.enums.PipeContents; import net.minecraft.state.StateContainer; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.util.Direction; diff --git a/src/main/java/dev/halbear1/supernova/custom/block/blockstate_stuff/SupernovaBlockstates.java b/src/main/java/net/halbear/supernova/custom/block/blockstate_stuff/SupernovaBlockstates.java similarity index 84% rename from src/main/java/dev/halbear1/supernova/custom/block/blockstate_stuff/SupernovaBlockstates.java rename to src/main/java/net/halbear/supernova/custom/block/blockstate_stuff/SupernovaBlockstates.java index 86da407..62c8490 100644 --- a/src/main/java/dev/halbear1/supernova/custom/block/blockstate_stuff/SupernovaBlockstates.java +++ b/src/main/java/net/halbear/supernova/custom/block/blockstate_stuff/SupernovaBlockstates.java @@ -1,6 +1,6 @@ -package dev.halbear1.supernova.custom.block.blockstate_stuff; +package net.halbear.supernova.custom.block.blockstate_stuff; -import dev.halbear1.supernova.custom.block.blockstate_stuff.enums.PipeContents; +import net.halbear.supernova.custom.block.blockstate_stuff.enums.PipeContents; import net.minecraft.state.EnumProperty; public class SupernovaBlockstates { diff --git a/src/main/java/dev/halbear1/supernova/custom/block/blockstate_stuff/enums/PipeContents.java b/src/main/java/net/halbear/supernova/custom/block/blockstate_stuff/enums/PipeContents.java similarity index 85% rename from src/main/java/dev/halbear1/supernova/custom/block/blockstate_stuff/enums/PipeContents.java rename to src/main/java/net/halbear/supernova/custom/block/blockstate_stuff/enums/PipeContents.java index f797d12..599912b 100644 --- a/src/main/java/dev/halbear1/supernova/custom/block/blockstate_stuff/enums/PipeContents.java +++ b/src/main/java/net/halbear/supernova/custom/block/blockstate_stuff/enums/PipeContents.java @@ -1,4 +1,4 @@ -package dev.halbear1.supernova.custom.block.blockstate_stuff.enums; +package net.halbear.supernova.custom.block.blockstate_stuff.enums; import net.minecraft.util.IStringSerializable; diff --git a/src/main/java/dev/halbear1/supernova/custom/fluid/FlammableFluid.java b/src/main/java/net/halbear/supernova/custom/fluid/FlammableFluid.java similarity index 77% rename from src/main/java/dev/halbear1/supernova/custom/fluid/FlammableFluid.java rename to src/main/java/net/halbear/supernova/custom/fluid/FlammableFluid.java index 95a05eb..f6df38b 100644 --- a/src/main/java/dev/halbear1/supernova/custom/fluid/FlammableFluid.java +++ b/src/main/java/net/halbear/supernova/custom/fluid/FlammableFluid.java @@ -1,7 +1,6 @@ -package dev.halbear1.supernova.custom.fluid; +package net.halbear.supernova.custom.fluid; import net.minecraft.block.FlowingFluidBlock; -import net.minecraft.fluid.FlowingFluid; import java.util.function.Supplier; diff --git a/src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaFlowingFluid.java b/src/main/java/net/halbear/supernova/custom/fluid/SupernovaFlowingFluid.java similarity index 98% rename from src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaFlowingFluid.java rename to src/main/java/net/halbear/supernova/custom/fluid/SupernovaFlowingFluid.java index 7c93e7e..ba4ccfd 100644 --- a/src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaFlowingFluid.java +++ b/src/main/java/net/halbear/supernova/custom/fluid/SupernovaFlowingFluid.java @@ -1,4 +1,4 @@ -package dev.halbear1.supernova.custom.fluid; +package net.halbear.supernova.custom.fluid; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -18,7 +18,6 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.IWorldReader; import net.minecraftforge.fluids.FluidAttributes; -import net.minecraftforge.fluids.ForgeFlowingFluid; import javax.annotation.Nullable; import java.util.function.Supplier; diff --git a/src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaFluidAttributes.java b/src/main/java/net/halbear/supernova/custom/fluid/SupernovaFluidAttributes.java similarity index 85% rename from src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaFluidAttributes.java rename to src/main/java/net/halbear/supernova/custom/fluid/SupernovaFluidAttributes.java index 8ec5646..e85d49e 100644 --- a/src/main/java/dev/halbear1/supernova/custom/fluid/SupernovaFluidAttributes.java +++ b/src/main/java/net/halbear/supernova/custom/fluid/SupernovaFluidAttributes.java @@ -1,12 +1,7 @@ -package dev.halbear1.supernova.custom.fluid; +package net.halbear.supernova.custom.fluid; -import dev.halbear1.supernova.registry.blocks.ModBlocks; -import jdk.nashorn.internal.ir.Block; import net.minecraft.fluid.Fluid; -import net.minecraft.item.Rarity; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.SoundEvent; -import net.minecraftforge.fluids.FluidAttributes; import java.util.function.BiFunction; diff --git a/src/main/java/net/halbear/supernova/custom/fluid/SupernovaOverlayRenderer.java b/src/main/java/net/halbear/supernova/custom/fluid/SupernovaOverlayRenderer.java new file mode 100644 index 0000000..b778cac --- /dev/null +++ b/src/main/java/net/halbear/supernova/custom/fluid/SupernovaOverlayRenderer.java @@ -0,0 +1,4 @@ +package net.halbear.supernova.custom.fluid; + +public class SupernovaOverlayRenderer { +} diff --git a/src/main/java/net/halbear/supernova/data/DataGenerators.java b/src/main/java/net/halbear/supernova/data/DataGenerators.java new file mode 100644 index 0000000..c8fe97a --- /dev/null +++ b/src/main/java/net/halbear/supernova/data/DataGenerators.java @@ -0,0 +1,9 @@ +package net.halbear.supernova.data; + +import net.halbear.supernova.SuperNova; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = SuperNova.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class DataGenerators { + +} diff --git a/src/main/java/net/halbear/supernova/entity/EntityRenderers/SpaceshipRenderer.java b/src/main/java/net/halbear/supernova/entity/EntityRenderers/SpaceshipRenderer.java new file mode 100644 index 0000000..456aeb4 --- /dev/null +++ b/src/main/java/net/halbear/supernova/entity/EntityRenderers/SpaceshipRenderer.java @@ -0,0 +1,1197 @@ +package net.halbear.supernova.entity.EntityRenderers; + +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.halbear.supernova.SuperNova; +import net.halbear.supernova.entity.Spaceship; +import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.culling.ClippingHelper; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.LivingRenderer; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.client.renderer.entity.model.EntityModel; +import net.minecraft.client.renderer.model.ModelRenderer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; + +import javax.annotation.Nonnull; + +@OnlyIn(Dist.CLIENT) +public class SpaceshipRenderer extends EntityRenderer { + + private SpaceshipModel model = new SpaceshipModel(); + + public SpaceshipRenderer(EntityRendererManager renderManagerIn) { + super(renderManagerIn ); + } + + @Override + public void render(Spaceship entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight) { + matrixStack.push(); + + matrixStack.rotate(Vector3f.YP.rotationDegrees(180.0F - entityYaw)); + matrixStack.scale(-1.0F, -1.0F, 1.0F); + matrixStack.translate(0.0D, -1.5D, 0.0D); + + IVertexBuilder vertexBuilder = buffer.getBuffer(this.model.getRenderType(getEntityTexture(entity))); + + this.model.setRotationAngles(entity, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F); + this.model.render(matrixStack, vertexBuilder, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + + matrixStack.pop(); + super.render(entity, entityYaw, partialTicks, matrixStack, buffer, packedLight); + } + + @Override + @Nonnull + public ResourceLocation getEntityTexture(Spaceship entity) { + return new ResourceLocation(SuperNova.MOD_ID,"textures/entity/spaceship.png"); + } + + //makes it so the spaceship ALWAYS renders, not good for an entity that has many instances of itself like a mob but for something like this it makes sure it renders even when hundreds of blocks away + @Override + public boolean shouldRender(Spaceship livingEntity, ClippingHelper camera, double camX, double camY, double camZ) { + return true; + } + + public static class SpaceshipModel extends EntityModel { + private final ModelRenderer RocketShip; + private final ModelRenderer Boosters; + private final ModelRenderer bone5; + private final ModelRenderer booster; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer cube_r5; + private final ModelRenderer cube_r6; + private final ModelRenderer cube_r7; + private final ModelRenderer cube_r8; + private final ModelRenderer cube_r9; + private final ModelRenderer cube_r10; + private final ModelRenderer cube_r11; + private final ModelRenderer cube_r12; + private final ModelRenderer bone7; + private final ModelRenderer cube_r13; + private final ModelRenderer cube_r14; + private final ModelRenderer cube_r15; + private final ModelRenderer cube_r16; + private final ModelRenderer cube_r17; + private final ModelRenderer cube_r18; + private final ModelRenderer cube_r19; + private final ModelRenderer cube_r20; + private final ModelRenderer booster4; + private final ModelRenderer bone21; + private final ModelRenderer bone4; + private final ModelRenderer booster2; + private final ModelRenderer cube_r21; + private final ModelRenderer cube_r22; + private final ModelRenderer cube_r23; + private final ModelRenderer cube_r24; + private final ModelRenderer cube_r25; + private final ModelRenderer cube_r26; + private final ModelRenderer cube_r27; + private final ModelRenderer cube_r28; + private final ModelRenderer cube_r29; + private final ModelRenderer cube_r30; + private final ModelRenderer cube_r31; + private final ModelRenderer cube_r32; + private final ModelRenderer bone6; + private final ModelRenderer cube_r33; + private final ModelRenderer cube_r34; + private final ModelRenderer cube_r35; + private final ModelRenderer cube_r36; + private final ModelRenderer cube_r37; + private final ModelRenderer cube_r38; + private final ModelRenderer cube_r39; + private final ModelRenderer cube_r40; + private final ModelRenderer bone8; + private final ModelRenderer booster3; + private final ModelRenderer cube_r41; + private final ModelRenderer cube_r42; + private final ModelRenderer cube_r43; + private final ModelRenderer cube_r44; + private final ModelRenderer cube_r45; + private final ModelRenderer cube_r46; + private final ModelRenderer cube_r47; + private final ModelRenderer cube_r48; + private final ModelRenderer cube_r49; + private final ModelRenderer cube_r50; + private final ModelRenderer cube_r51; + private final ModelRenderer cube_r52; + private final ModelRenderer bone9; + private final ModelRenderer cube_r53; + private final ModelRenderer cube_r54; + private final ModelRenderer cube_r55; + private final ModelRenderer cube_r56; + private final ModelRenderer cube_r57; + private final ModelRenderer cube_r58; + private final ModelRenderer cube_r59; + private final ModelRenderer cube_r60; + private final ModelRenderer ShuttleMain; + private final ModelRenderer Engine; + private final ModelRenderer cube_r61; + private final ModelRenderer cube_r62; + private final ModelRenderer cube_r63; + private final ModelRenderer cube_r64; + private final ModelRenderer cube_r65; + private final ModelRenderer cube_r66; + private final ModelRenderer cube_r67; + private final ModelRenderer cube_r68; + private final ModelRenderer cube_r69; + private final ModelRenderer cube_r70; + private final ModelRenderer cube_r71; + private final ModelRenderer cube_r72; + private final ModelRenderer bone2; + private final ModelRenderer cube_r73; + private final ModelRenderer cube_r74; + private final ModelRenderer cube_r75; + private final ModelRenderer cube_r76; + private final ModelRenderer bone3; + private final ModelRenderer cube_r77; + private final ModelRenderer cube_r78; + private final ModelRenderer cube_r79; + private final ModelRenderer cube_r80; + private final ModelRenderer Body; + private final ModelRenderer ShuttleTop; + private final ModelRenderer bone19; + private final ModelRenderer cube_r81; + private final ModelRenderer cube_r82; + private final ModelRenderer cube_r83; + private final ModelRenderer cube_r84; + private final ModelRenderer cube_r85; + private final ModelRenderer cube_r86; + private final ModelRenderer cube_r87; + private final ModelRenderer cube_r88; + private final ModelRenderer bone20; + private final ModelRenderer cube_r89; + private final ModelRenderer cube_r90; + private final ModelRenderer cube_r91; + private final ModelRenderer cube_r92; + private final ModelRenderer cube_r93; + private final ModelRenderer cube_r94; + private final ModelRenderer cube_r95; + private final ModelRenderer cube_r96; + private final ModelRenderer bone15; + private final ModelRenderer bone13; + private final ModelRenderer cube_r97; + private final ModelRenderer bone14; + private final ModelRenderer cube_r98; + private final ModelRenderer bone16; + private final ModelRenderer bone17; + private final ModelRenderer cube_r99; + private final ModelRenderer bone18; + private final ModelRenderer cube_r100; + private final ModelRenderer Compartmentroof; + private final ModelRenderer bone; + private final ModelRenderer cube_r101; + private final ModelRenderer cube_r102; + private final ModelRenderer cube_r103; + private final ModelRenderer cube_r104; + private final ModelRenderer bone10; + private final ModelRenderer cube_r105; + private final ModelRenderer cube_r106; + private final ModelRenderer cube_r107; + private final ModelRenderer cube_r108; + private final ModelRenderer bone11; + private final ModelRenderer cube_r109; + private final ModelRenderer cube_r110; + private final ModelRenderer bone12; + private final ModelRenderer cube_r111; + private final ModelRenderer cube_r112; + private final ModelRenderer panes; + private final ModelRenderer cube_r113; + private final ModelRenderer Interior; + private final ModelRenderer bone22; + private final ModelRenderer cube_r114; + private final ModelRenderer cube_r115; + private final ModelRenderer cube_r116; + private final ModelRenderer bone23; + private final ModelRenderer cube_r117; + private final ModelRenderer cube_r118; + private final ModelRenderer cube_r119; + + public SpaceshipModel() { + textureWidth = 1024; + textureHeight = 1024; + + RocketShip = new ModelRenderer(this); + RocketShip.setRotationPoint(0.0F, -59.0F, 0.0F); + setRotationAngle(RocketShip, 0.0F, 1.5708F, 0.0F); + + + Boosters = new ModelRenderer(this); + Boosters.setRotationPoint(0.0F, 83.0F, 0.0F); + RocketShip.addChild(Boosters); + + + bone5 = new ModelRenderer(this); + bone5.setRotationPoint(1.0F, 0.0F, -4.0F); + Boosters.addChild(bone5); + setRotationAngle(bone5, 0.0F, -2.0944F, 0.0F); + + + booster = new ModelRenderer(this); + booster.setRotationPoint(25.0F, -12.0F, -7.0F); + bone5.addChild(booster); + booster.setTextureOffset(0, 591).addBox(-1.0F, -41.0F, -1.0F, 16.0F, 39.0F, 16.0F, 0.0F, false); + booster.setTextureOffset(50, 542).addBox(4.0F, -59.0F, 4.0F, 6.0F, 16.0F, 6.0F, 0.0F, false); + booster.setTextureOffset(133, 257).addBox(0.0F, -41.0F, 0.0F, 14.0F, 39.0F, 14.0F, 0.0F, false); + booster.setTextureOffset(439, 339).addBox(-0.5F, -2.0F, -0.5F, 15.0F, 2.0F, 15.0F, 0.0F, false); + booster.setTextureOffset(165, 420).addBox(-0.5F, -43.0F, -0.5F, 15.0F, 2.0F, 15.0F, 0.0F, false); + booster.setTextureOffset(454, 0).addBox(4.0F, -0.4F, 4.0F, 6.0F, 10.0F, 6.0F, 0.0F, false); + booster.setTextureOffset(485, 339).addBox(3.5F, 9.6F, 3.5F, 7.0F, 2.0F, 7.0F, 0.0F, false); + booster.setTextureOffset(331, 470).addBox(3.5F, -60.4F, 3.5F, 7.0F, 2.0F, 7.0F, 0.0F, false); + booster.setTextureOffset(379, 0).addBox(-7.0F, -61.0F, 6.0F, 11.0F, 55.0F, 2.0F, 0.0F, false); + + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(0.0F, 0.0F, 14.0F); + booster.addChild(cube_r1); + setRotationAngle(cube_r1, -0.3319F, -0.043F, -0.3389F); + cube_r1.setTextureOffset(478, 565).addBox(0.0F, 0.0F, -2.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(14.0F, 0.0F, 14.0F); + booster.addChild(cube_r2); + setRotationAngle(cube_r2, -0.3319F, 0.043F, 0.3389F); + cube_r2.setTextureOffset(487, 565).addBox(-2.0F, 0.0F, -2.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(14.0F, 0.0F, 0.0F); + booster.addChild(cube_r3); + setRotationAngle(cube_r3, 0.3319F, -0.043F, 0.3389F); + cube_r3.setTextureOffset(496, 565).addBox(-2.0F, 0.0F, 0.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(0.0F, 0.0F, 0.0F); + booster.addChild(cube_r4); + setRotationAngle(cube_r4, 0.3319F, 0.043F, -0.3389F); + cube_r4.setTextureOffset(566, 0).addBox(0.0F, 0.0F, 0.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(10.3F, 9.6F, 7.0F); + booster.addChild(cube_r5); + setRotationAngle(cube_r5, 0.0F, 0.0F, 0.3491F); + cube_r5.setTextureOffset(543, 496).addBox(0.0F, -11.0F, -5.0F, 0.0F, 11.0F, 10.0F, 0.0F, false); + + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(3.7F, 9.6F, 7.0F); + booster.addChild(cube_r6); + setRotationAngle(cube_r6, 0.0F, 0.0F, -0.3491F); + cube_r6.setTextureOffset(543, 496).addBox(0.0F, -11.0F, -5.0F, 0.0F, 11.0F, 10.0F, 0.0F, false); + + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(7.0F, 9.6F, 10.3F); + booster.addChild(cube_r7); + setRotationAngle(cube_r7, -0.3491F, 0.0F, 0.0F); + cube_r7.setTextureOffset(543, 506).addBox(-5.0F, -11.0F, 0.0F, 10.0F, 11.0F, 0.0F, 0.0F, false); + + cube_r8 = new ModelRenderer(this); + cube_r8.setRotationPoint(7.0F, 9.6F, 3.7F); + booster.addChild(cube_r8); + setRotationAngle(cube_r8, 0.3491F, 0.0F, 0.0F); + cube_r8.setTextureOffset(543, 506).addBox(-5.0F, -11.0F, 0.0F, 10.0F, 11.0F, 0.0F, 0.0F, false); + + cube_r9 = new ModelRenderer(this); + cube_r9.setRotationPoint(14.0F, -43.0F, 7.0F); + booster.addChild(cube_r9); + setRotationAngle(cube_r9, 0.0F, 0.0F, -0.2339F); + cube_r9.setTextureOffset(511, 536).addBox(0.0F, -16.0F, -5.5F, 0.0F, 16.0F, 11.0F, 0.0F, false); + + cube_r10 = new ModelRenderer(this); + cube_r10.setRotationPoint(0.0F, -43.0F, 7.0F); + booster.addChild(cube_r10); + setRotationAngle(cube_r10, 0.0F, 0.0F, 0.2339F); + cube_r10.setTextureOffset(511, 536).addBox(0.0F, -16.0F, -5.5F, 0.0F, 16.0F, 11.0F, 0.0F, false); + + cube_r11 = new ModelRenderer(this); + cube_r11.setRotationPoint(7.0F, -43.0F, 14.0F); + booster.addChild(cube_r11); + setRotationAngle(cube_r11, 0.2339F, 0.0F, 0.0F); + cube_r11.setTextureOffset(511, 547).addBox(-5.5F, -16.0F, 0.0F, 11.0F, 16.0F, 0.0F, 0.0F, false); + + cube_r12 = new ModelRenderer(this); + cube_r12.setRotationPoint(7.0F, -43.0F, 0.0F); + booster.addChild(cube_r12); + setRotationAngle(cube_r12, -0.2339F, 0.0F, 0.0F); + cube_r12.setTextureOffset(511, 547).addBox(-5.5F, -16.0F, 0.0F, 11.0F, 16.0F, 0.0F, 0.0F, false); + + bone7 = new ModelRenderer(this); + bone7.setRotationPoint(14.0F, -43.0F, 14.0F); + booster.addChild(bone7); + + + cube_r13 = new ModelRenderer(this); + cube_r13.setRotationPoint(-14.0F, 0.0F, 0.0F); + bone7.addChild(cube_r13); + setRotationAngle(cube_r13, 0.2269F, 0.0F, 0.2269F); + cube_r13.setTextureOffset(518, 564).addBox(0.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r14 = new ModelRenderer(this); + cube_r14.setRotationPoint(-14.0F, 0.0F, 0.0F); + bone7.addChild(cube_r14); + setRotationAngle(cube_r14, 0.2277F, -0.085F, 0.2072F); + cube_r14.setTextureOffset(527, 564).addBox(0.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r15 = new ModelRenderer(this); + cube_r15.setRotationPoint(0.0F, 0.0F, -14.0F); + bone7.addChild(cube_r15); + setRotationAngle(cube_r15, -0.2269F, 0.0F, -0.2269F); + cube_r15.setTextureOffset(536, 564).addBox(-2.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r16 = new ModelRenderer(this); + cube_r16.setRotationPoint(0.0F, 0.0F, -14.0F); + bone7.addChild(cube_r16); + setRotationAngle(cube_r16, -0.2277F, -0.085F, -0.2072F); + cube_r16.setTextureOffset(545, 564).addBox(-2.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r17 = new ModelRenderer(this); + cube_r17.setRotationPoint(-14.0F, 0.0F, -14.0F); + bone7.addChild(cube_r17); + setRotationAngle(cube_r17, -0.2269F, 0.0F, 0.2269F); + cube_r17.setTextureOffset(564, 562).addBox(0.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r18 = new ModelRenderer(this); + cube_r18.setRotationPoint(-14.0F, 0.0F, -14.0F); + bone7.addChild(cube_r18); + setRotationAngle(cube_r18, -0.2277F, 0.085F, 0.2072F); + cube_r18.setTextureOffset(0, 565).addBox(0.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r19 = new ModelRenderer(this); + cube_r19.setRotationPoint(0.0F, 0.0F, 0.0F); + bone7.addChild(cube_r19); + setRotationAngle(cube_r19, 0.2269F, 0.0F, -0.2269F); + cube_r19.setTextureOffset(9, 565).addBox(-2.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r20 = new ModelRenderer(this); + cube_r20.setRotationPoint(0.0F, 0.0F, 0.0F); + bone7.addChild(cube_r20); + setRotationAngle(cube_r20, 0.2277F, 0.085F, -0.2072F); + cube_r20.setTextureOffset(18, 565).addBox(-2.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + booster4 = new ModelRenderer(this); + booster4.setRotationPoint(25.0F, -12.0F, -7.0F); + bone5.addChild(booster4); + + + bone21 = new ModelRenderer(this); + bone21.setRotationPoint(14.0F, -43.0F, 14.0F); + booster4.addChild(bone21); + + + bone4 = new ModelRenderer(this); + bone4.setRotationPoint(0.0F, 0.0F, 4.0F); + Boosters.addChild(bone4); + + + booster2 = new ModelRenderer(this); + booster2.setRotationPoint(26.0F, -12.0F, -11.0F); + bone4.addChild(booster2); + booster2.setTextureOffset(0, 591).addBox(-1.0F, -41.0F, -1.0F, 16.0F, 39.0F, 16.0F, 0.0F, false); + booster2.setTextureOffset(50, 542).addBox(4.0F, -59.0F, 4.0F, 6.0F, 16.0F, 6.0F, 0.0F, false); + booster2.setTextureOffset(133, 257).addBox(0.0F, -41.0F, 0.0F, 14.0F, 39.0F, 14.0F, 0.0F, false); + booster2.setTextureOffset(439, 339).addBox(-0.5F, -2.0F, -0.5F, 15.0F, 2.0F, 15.0F, 0.0F, false); + booster2.setTextureOffset(165, 420).addBox(-0.5F, -43.0F, -0.5F, 15.0F, 2.0F, 15.0F, 0.0F, false); + booster2.setTextureOffset(454, 0).addBox(4.0F, -0.4F, 4.0F, 6.0F, 10.0F, 6.0F, 0.0F, false); + booster2.setTextureOffset(485, 339).addBox(3.5F, 9.6F, 3.5F, 7.0F, 2.0F, 7.0F, 0.0F, false); + booster2.setTextureOffset(331, 470).addBox(3.5F, -60.4F, 3.5F, 7.0F, 2.0F, 7.0F, 0.0F, false); + booster2.setTextureOffset(379, 0).addBox(-7.0F, -61.0F, 6.0F, 11.0F, 55.0F, 2.0F, 0.0F, false); + + cube_r21 = new ModelRenderer(this); + cube_r21.setRotationPoint(0.0F, 0.0F, 14.0F); + booster2.addChild(cube_r21); + setRotationAngle(cube_r21, -0.3319F, -0.043F, -0.3389F); + cube_r21.setTextureOffset(478, 565).addBox(0.0F, 0.0F, -2.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r22 = new ModelRenderer(this); + cube_r22.setRotationPoint(14.0F, 0.0F, 14.0F); + booster2.addChild(cube_r22); + setRotationAngle(cube_r22, -0.3319F, 0.043F, 0.3389F); + cube_r22.setTextureOffset(487, 565).addBox(-2.0F, 0.0F, -2.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r23 = new ModelRenderer(this); + cube_r23.setRotationPoint(14.0F, 0.0F, 0.0F); + booster2.addChild(cube_r23); + setRotationAngle(cube_r23, 0.3319F, -0.043F, 0.3389F); + cube_r23.setTextureOffset(496, 565).addBox(-2.0F, 0.0F, 0.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r24 = new ModelRenderer(this); + cube_r24.setRotationPoint(0.0F, 0.0F, 0.0F); + booster2.addChild(cube_r24); + setRotationAngle(cube_r24, 0.3319F, 0.043F, -0.3389F); + cube_r24.setTextureOffset(566, 0).addBox(0.0F, 0.0F, 0.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r25 = new ModelRenderer(this); + cube_r25.setRotationPoint(10.3F, 9.6F, 7.0F); + booster2.addChild(cube_r25); + setRotationAngle(cube_r25, 0.0F, 0.0F, 0.3491F); + cube_r25.setTextureOffset(543, 496).addBox(0.0F, -11.0F, -5.0F, 0.0F, 11.0F, 10.0F, 0.0F, false); + + cube_r26 = new ModelRenderer(this); + cube_r26.setRotationPoint(3.7F, 9.6F, 7.0F); + booster2.addChild(cube_r26); + setRotationAngle(cube_r26, 0.0F, 0.0F, -0.3491F); + cube_r26.setTextureOffset(543, 496).addBox(0.0F, -11.0F, -5.0F, 0.0F, 11.0F, 10.0F, 0.0F, false); + + cube_r27 = new ModelRenderer(this); + cube_r27.setRotationPoint(7.0F, 9.6F, 10.3F); + booster2.addChild(cube_r27); + setRotationAngle(cube_r27, -0.3491F, 0.0F, 0.0F); + cube_r27.setTextureOffset(543, 506).addBox(-5.0F, -11.0F, 0.0F, 10.0F, 11.0F, 0.0F, 0.0F, false); + + cube_r28 = new ModelRenderer(this); + cube_r28.setRotationPoint(7.0F, 9.6F, 3.7F); + booster2.addChild(cube_r28); + setRotationAngle(cube_r28, 0.3491F, 0.0F, 0.0F); + cube_r28.setTextureOffset(543, 506).addBox(-5.0F, -11.0F, 0.0F, 10.0F, 11.0F, 0.0F, 0.0F, false); + + cube_r29 = new ModelRenderer(this); + cube_r29.setRotationPoint(14.0F, -43.0F, 7.0F); + booster2.addChild(cube_r29); + setRotationAngle(cube_r29, 0.0F, 0.0F, -0.2339F); + cube_r29.setTextureOffset(511, 536).addBox(0.0F, -16.0F, -5.5F, 0.0F, 16.0F, 11.0F, 0.0F, false); + + cube_r30 = new ModelRenderer(this); + cube_r30.setRotationPoint(0.0F, -43.0F, 7.0F); + booster2.addChild(cube_r30); + setRotationAngle(cube_r30, 0.0F, 0.0F, 0.2339F); + cube_r30.setTextureOffset(511, 536).addBox(0.0F, -16.0F, -5.5F, 0.0F, 16.0F, 11.0F, 0.0F, false); + + cube_r31 = new ModelRenderer(this); + cube_r31.setRotationPoint(7.0F, -43.0F, 14.0F); + booster2.addChild(cube_r31); + setRotationAngle(cube_r31, 0.2339F, 0.0F, 0.0F); + cube_r31.setTextureOffset(511, 547).addBox(-5.5F, -16.0F, 0.0F, 11.0F, 16.0F, 0.0F, 0.0F, false); + + cube_r32 = new ModelRenderer(this); + cube_r32.setRotationPoint(7.0F, -43.0F, 0.0F); + booster2.addChild(cube_r32); + setRotationAngle(cube_r32, -0.2339F, 0.0F, 0.0F); + cube_r32.setTextureOffset(511, 547).addBox(-5.5F, -16.0F, 0.0F, 11.0F, 16.0F, 0.0F, 0.0F, false); + + bone6 = new ModelRenderer(this); + bone6.setRotationPoint(14.0F, -43.0F, 14.0F); + booster2.addChild(bone6); + + + cube_r33 = new ModelRenderer(this); + cube_r33.setRotationPoint(-14.0F, 0.0F, 0.0F); + bone6.addChild(cube_r33); + setRotationAngle(cube_r33, 0.2269F, 0.0F, 0.2269F); + cube_r33.setTextureOffset(518, 564).addBox(0.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r34 = new ModelRenderer(this); + cube_r34.setRotationPoint(-14.0F, 0.0F, 0.0F); + bone6.addChild(cube_r34); + setRotationAngle(cube_r34, 0.2277F, -0.085F, 0.2072F); + cube_r34.setTextureOffset(527, 564).addBox(0.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r35 = new ModelRenderer(this); + cube_r35.setRotationPoint(0.0F, 0.0F, -14.0F); + bone6.addChild(cube_r35); + setRotationAngle(cube_r35, -0.2269F, 0.0F, -0.2269F); + cube_r35.setTextureOffset(536, 564).addBox(-2.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r36 = new ModelRenderer(this); + cube_r36.setRotationPoint(0.0F, 0.0F, -14.0F); + bone6.addChild(cube_r36); + setRotationAngle(cube_r36, -0.2277F, -0.085F, -0.2072F); + cube_r36.setTextureOffset(545, 564).addBox(-2.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r37 = new ModelRenderer(this); + cube_r37.setRotationPoint(-14.0F, 0.0F, -14.0F); + bone6.addChild(cube_r37); + setRotationAngle(cube_r37, -0.2269F, 0.0F, 0.2269F); + cube_r37.setTextureOffset(564, 562).addBox(0.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r38 = new ModelRenderer(this); + cube_r38.setRotationPoint(-14.0F, 0.0F, -14.0F); + bone6.addChild(cube_r38); + setRotationAngle(cube_r38, -0.2277F, 0.085F, 0.2072F); + cube_r38.setTextureOffset(0, 565).addBox(0.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r39 = new ModelRenderer(this); + cube_r39.setRotationPoint(0.0F, 0.0F, 0.0F); + bone6.addChild(cube_r39); + setRotationAngle(cube_r39, 0.2269F, 0.0F, -0.2269F); + cube_r39.setTextureOffset(9, 565).addBox(-2.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r40 = new ModelRenderer(this); + cube_r40.setRotationPoint(0.0F, 0.0F, 0.0F); + bone6.addChild(cube_r40); + setRotationAngle(cube_r40, 0.2277F, 0.085F, -0.2072F); + cube_r40.setTextureOffset(18, 565).addBox(-2.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + bone8 = new ModelRenderer(this); + bone8.setRotationPoint(1.1F, 0.0F, 5.7F); + Boosters.addChild(bone8); + setRotationAngle(bone8, 0.0F, 2.0944F, 0.0F); + + + booster3 = new ModelRenderer(this); + booster3.setRotationPoint(25.0F, -12.0F, 7.0F); + bone8.addChild(booster3); + booster3.setTextureOffset(0, 591).addBox(0.5F, -41.0F, -14.15F, 16.0F, 39.0F, 16.0F, 0.0F, false); + booster3.setTextureOffset(50, 542).addBox(5.5F, -59.0F, -9.15F, 6.0F, 16.0F, 6.0F, 0.0F, false); + booster3.setTextureOffset(133, 257).addBox(1.5F, -41.0F, -13.15F, 14.0F, 39.0F, 14.0F, 0.0F, false); + booster3.setTextureOffset(439, 339).addBox(1.0F, -2.0F, -13.65F, 15.0F, 2.0F, 15.0F, 0.0F, false); + booster3.setTextureOffset(165, 420).addBox(1.0F, -43.0F, -13.65F, 15.0F, 2.0F, 15.0F, 0.0F, false); + booster3.setTextureOffset(454, 0).addBox(5.5F, -0.4F, -9.15F, 6.0F, 10.0F, 6.0F, 0.0F, false); + booster3.setTextureOffset(485, 339).addBox(5.0F, 9.6F, -9.65F, 7.0F, 2.0F, 7.0F, 0.0F, false); + booster3.setTextureOffset(331, 470).addBox(5.0F, -60.4F, -9.65F, 7.0F, 2.0F, 7.0F, 0.0F, false); + booster3.setTextureOffset(379, 0).addBox(-5.5F, -61.0F, -7.15F, 11.0F, 55.0F, 2.0F, 0.0F, false); + + cube_r41 = new ModelRenderer(this); + cube_r41.setRotationPoint(1.5F, 0.0F, 0.85F); + booster3.addChild(cube_r41); + setRotationAngle(cube_r41, -0.3319F, -0.043F, -0.3389F); + cube_r41.setTextureOffset(478, 565).addBox(0.0F, 0.0F, -2.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r42 = new ModelRenderer(this); + cube_r42.setRotationPoint(15.5F, 0.0F, 0.85F); + booster3.addChild(cube_r42); + setRotationAngle(cube_r42, -0.3319F, 0.043F, 0.3389F); + cube_r42.setTextureOffset(487, 565).addBox(-2.0F, 0.0F, -2.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r43 = new ModelRenderer(this); + cube_r43.setRotationPoint(15.5F, 0.0F, -13.15F); + booster3.addChild(cube_r43); + setRotationAngle(cube_r43, 0.3319F, -0.043F, 0.3389F); + cube_r43.setTextureOffset(496, 565).addBox(-2.0F, 0.0F, 0.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r44 = new ModelRenderer(this); + cube_r44.setRotationPoint(1.5F, 0.0F, -13.15F); + booster3.addChild(cube_r44); + setRotationAngle(cube_r44, 0.3319F, 0.043F, -0.3389F); + cube_r44.setTextureOffset(566, 0).addBox(0.0F, 0.0F, 0.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r45 = new ModelRenderer(this); + cube_r45.setRotationPoint(11.8F, 9.6F, -6.15F); + booster3.addChild(cube_r45); + setRotationAngle(cube_r45, 0.0F, 0.0F, 0.3491F); + cube_r45.setTextureOffset(543, 496).addBox(0.0F, -11.0F, -5.0F, 0.0F, 11.0F, 10.0F, 0.0F, false); + + cube_r46 = new ModelRenderer(this); + cube_r46.setRotationPoint(5.2F, 9.6F, -6.15F); + booster3.addChild(cube_r46); + setRotationAngle(cube_r46, 0.0F, 0.0F, -0.3491F); + cube_r46.setTextureOffset(543, 496).addBox(0.0F, -11.0F, -5.0F, 0.0F, 11.0F, 10.0F, 0.0F, false); + + cube_r47 = new ModelRenderer(this); + cube_r47.setRotationPoint(8.5F, 9.6F, -2.85F); + booster3.addChild(cube_r47); + setRotationAngle(cube_r47, -0.3491F, 0.0F, 0.0F); + cube_r47.setTextureOffset(543, 506).addBox(-5.0F, -11.0F, 0.0F, 10.0F, 11.0F, 0.0F, 0.0F, false); + + cube_r48 = new ModelRenderer(this); + cube_r48.setRotationPoint(8.5F, 9.6F, -9.45F); + booster3.addChild(cube_r48); + setRotationAngle(cube_r48, 0.3491F, 0.0F, 0.0F); + cube_r48.setTextureOffset(543, 506).addBox(-5.0F, -11.0F, 0.0F, 10.0F, 11.0F, 0.0F, 0.0F, false); + + cube_r49 = new ModelRenderer(this); + cube_r49.setRotationPoint(15.5F, -43.0F, -6.15F); + booster3.addChild(cube_r49); + setRotationAngle(cube_r49, 0.0F, 0.0F, -0.2339F); + cube_r49.setTextureOffset(511, 536).addBox(0.0F, -16.0F, -5.5F, 0.0F, 16.0F, 11.0F, 0.0F, false); + + cube_r50 = new ModelRenderer(this); + cube_r50.setRotationPoint(1.5F, -43.0F, -6.15F); + booster3.addChild(cube_r50); + setRotationAngle(cube_r50, 0.0F, 0.0F, 0.2339F); + cube_r50.setTextureOffset(511, 536).addBox(0.0F, -16.0F, -5.5F, 0.0F, 16.0F, 11.0F, 0.0F, false); + + cube_r51 = new ModelRenderer(this); + cube_r51.setRotationPoint(8.5F, -43.0F, 0.85F); + booster3.addChild(cube_r51); + setRotationAngle(cube_r51, 0.2339F, 0.0F, 0.0F); + cube_r51.setTextureOffset(511, 547).addBox(-5.5F, -16.0F, 0.0F, 11.0F, 16.0F, 0.0F, 0.0F, false); + + cube_r52 = new ModelRenderer(this); + cube_r52.setRotationPoint(8.5F, -43.0F, -13.15F); + booster3.addChild(cube_r52); + setRotationAngle(cube_r52, -0.2339F, 0.0F, 0.0F); + cube_r52.setTextureOffset(511, 547).addBox(-5.5F, -16.0F, 0.0F, 11.0F, 16.0F, 0.0F, 0.0F, false); + + bone9 = new ModelRenderer(this); + bone9.setRotationPoint(15.5F, -43.0F, 0.85F); + booster3.addChild(bone9); + + + cube_r53 = new ModelRenderer(this); + cube_r53.setRotationPoint(-14.0F, 0.0F, 0.0F); + bone9.addChild(cube_r53); + setRotationAngle(cube_r53, 0.2269F, 0.0F, 0.2269F); + cube_r53.setTextureOffset(518, 564).addBox(0.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r54 = new ModelRenderer(this); + cube_r54.setRotationPoint(-14.0F, 0.0F, 0.0F); + bone9.addChild(cube_r54); + setRotationAngle(cube_r54, 0.2277F, -0.085F, 0.2072F); + cube_r54.setTextureOffset(527, 564).addBox(0.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r55 = new ModelRenderer(this); + cube_r55.setRotationPoint(0.0F, 0.0F, -14.0F); + bone9.addChild(cube_r55); + setRotationAngle(cube_r55, -0.2269F, 0.0F, -0.2269F); + cube_r55.setTextureOffset(536, 564).addBox(-2.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r56 = new ModelRenderer(this); + cube_r56.setRotationPoint(0.0F, 0.0F, -14.0F); + bone9.addChild(cube_r56); + setRotationAngle(cube_r56, -0.2277F, -0.085F, -0.2072F); + cube_r56.setTextureOffset(545, 564).addBox(-2.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r57 = new ModelRenderer(this); + cube_r57.setRotationPoint(-14.0F, 0.0F, -14.0F); + bone9.addChild(cube_r57); + setRotationAngle(cube_r57, -0.2269F, 0.0F, 0.2269F); + cube_r57.setTextureOffset(564, 562).addBox(0.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r58 = new ModelRenderer(this); + cube_r58.setRotationPoint(-14.0F, 0.0F, -14.0F); + bone9.addChild(cube_r58); + setRotationAngle(cube_r58, -0.2277F, 0.085F, 0.2072F); + cube_r58.setTextureOffset(0, 565).addBox(0.0F, -18.0F, 0.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r59 = new ModelRenderer(this); + cube_r59.setRotationPoint(0.0F, 0.0F, 0.0F); + bone9.addChild(cube_r59); + setRotationAngle(cube_r59, 0.2269F, 0.0F, -0.2269F); + cube_r59.setTextureOffset(9, 565).addBox(-2.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + cube_r60 = new ModelRenderer(this); + cube_r60.setRotationPoint(0.0F, 0.0F, 0.0F); + bone9.addChild(cube_r60); + setRotationAngle(cube_r60, 0.2277F, 0.085F, -0.2072F); + cube_r60.setTextureOffset(18, 565).addBox(-2.0F, -18.0F, -2.0F, 2.0F, 18.0F, 2.0F, 0.0F, false); + + ShuttleMain = new ModelRenderer(this); + ShuttleMain.setRotationPoint(-43.0F, 72.0F, 30.0F); + RocketShip.addChild(ShuttleMain); + + + Engine = new ModelRenderer(this); + Engine.setRotationPoint(43.0F, -13.658F, -30.0F); + ShuttleMain.addChild(Engine); + setRotationAngle(Engine, 0.0F, 0.7854F, 0.0F); + Engine.setTextureOffset(227, 29).addBox(-10.0F, 6.658F, -10.0F, 20.0F, 5.0F, 20.0F, 0.0F, false); + Engine.setTextureOffset(122, 311).addBox(-5.0F, -7.342F, -5.0F, 10.0F, 3.0F, 10.0F, 0.0F, false); + Engine.setTextureOffset(500, 339).addBox(-7.0F, -12.342F, -7.0F, 14.0F, 5.0F, 14.0F, 0.0F, false); + Engine.setTextureOffset(76, 36).addBox(-15.0F, -25.342F, -15.0F, 30.0F, 5.0F, 30.0F, 0.0F, false); + + cube_r61 = new ModelRenderer(this); + cube_r61.setRotationPoint(4.5F, -4.342F, -4.5F); + Engine.addChild(cube_r61); + setRotationAngle(cube_r61, -0.2094F, 0.0F, -0.2094F); + cube_r61.setTextureOffset(0, 54).addBox(-2.0F, -1.0F, 0.0F, 2.0F, 13.0F, 2.0F, 0.0F, false); + + cube_r62 = new ModelRenderer(this); + cube_r62.setRotationPoint(4.5F, -4.342F, 4.5F); + Engine.addChild(cube_r62); + setRotationAngle(cube_r62, 0.2094F, 0.0F, -0.2094F); + cube_r62.setTextureOffset(276, 55).addBox(-2.0F, -1.0F, -2.0F, 2.0F, 13.0F, 2.0F, 0.0F, false); + + cube_r63 = new ModelRenderer(this); + cube_r63.setRotationPoint(-4.5F, -4.342F, 4.5F); + Engine.addChild(cube_r63); + setRotationAngle(cube_r63, 0.2094F, 0.0F, 0.2094F); + cube_r63.setTextureOffset(0, 311).addBox(0.0F, -1.0F, -2.0F, 2.0F, 13.0F, 2.0F, 0.0F, false); + + cube_r64 = new ModelRenderer(this); + cube_r64.setRotationPoint(0.0F, -12.342F, -6.9F); + Engine.addChild(cube_r64); + setRotationAngle(cube_r64, 0.5934F, 0.0F, 0.0F); + cube_r64.setTextureOffset(107, 539).addBox(-9.0F, -11.0F, 0.0F, 18.0F, 11.0F, 0.0F, 0.0F, false); + + cube_r65 = new ModelRenderer(this); + cube_r65.setRotationPoint(0.0F, -12.342F, 6.9F); + Engine.addChild(cube_r65); + setRotationAngle(cube_r65, -0.5934F, 0.0F, 0.0F); + cube_r65.setTextureOffset(107, 539).addBox(-9.0F, -11.0F, 0.0F, 18.0F, 11.0F, 0.0F, 0.0F, false); + + cube_r66 = new ModelRenderer(this); + cube_r66.setRotationPoint(-9.5357F, -16.9284F, 0.0F); + Engine.addChild(cube_r66); + setRotationAngle(cube_r66, 0.0F, 1.5708F, -0.5323F); + cube_r66.setTextureOffset(107, 539).addBox(-9.0F, -5.5F, 0.0F, 18.0F, 11.0F, 0.0F, 0.0F, true); + + cube_r67 = new ModelRenderer(this); + cube_r67.setRotationPoint(9.5357F, -16.9284F, 0.0F); + Engine.addChild(cube_r67); + setRotationAngle(cube_r67, 0.0F, 1.5708F, 0.5323F); + cube_r67.setTextureOffset(107, 539).addBox(-9.0F, -5.5F, 0.0F, 18.0F, 11.0F, 0.0F, 0.0F, false); + + cube_r68 = new ModelRenderer(this); + cube_r68.setRotationPoint(6.5F, 6.658F, 0.0F); + Engine.addChild(cube_r68); + setRotationAngle(cube_r68, 0.0F, 0.0F, -0.2094F); + cube_r68.setTextureOffset(94, 539).addBox(0.0F, -13.0F, -6.0F, 0.0F, 13.0F, 12.0F, 0.0F, false); + + cube_r69 = new ModelRenderer(this); + cube_r69.setRotationPoint(-6.5F, 6.658F, 0.0F); + Engine.addChild(cube_r69); + setRotationAngle(cube_r69, 0.0F, 0.0F, 0.2094F); + cube_r69.setTextureOffset(94, 539).addBox(0.0F, -13.0F, -6.0F, 0.0F, 13.0F, 12.0F, 0.0F, false); + + cube_r70 = new ModelRenderer(this); + cube_r70.setRotationPoint(0.0F, 6.658F, -6.5F); + Engine.addChild(cube_r70); + setRotationAngle(cube_r70, -0.2094F, 0.0F, 0.0F); + cube_r70.setTextureOffset(94, 551).addBox(-6.0F, -13.0F, 0.0F, 12.0F, 13.0F, 0.0F, 0.0F, false); + + cube_r71 = new ModelRenderer(this); + cube_r71.setRotationPoint(0.0F, 6.658F, 6.5F); + Engine.addChild(cube_r71); + setRotationAngle(cube_r71, 0.2094F, 0.0F, 0.0F); + cube_r71.setTextureOffset(94, 551).addBox(-6.0F, -13.0F, 0.0F, 12.0F, 13.0F, 0.0F, 0.0F, false); + + cube_r72 = new ModelRenderer(this); + cube_r72.setRotationPoint(-4.5F, -4.342F, -4.5F); + Engine.addChild(cube_r72); + setRotationAngle(cube_r72, -0.2094F, 0.0F, 0.2094F); + cube_r72.setTextureOffset(227, 55).addBox(0.0F, -1.0F, 0.0F, 2.0F, 13.0F, 2.0F, 0.0F, false); + + bone2 = new ModelRenderer(this); + bone2.setRotationPoint(-7.0F, -12.342F, 7.0F); + Engine.addChild(bone2); + + + cube_r73 = new ModelRenderer(this); + cube_r73.setRotationPoint(0.0F, 0.0F, -14.0F); + bone2.addChild(cube_r73); + setRotationAngle(cube_r73, 0.5236F, 0.0F, -0.5236F); + cube_r73.setTextureOffset(435, 0).addBox(0.0F, -11.0F, 0.0F, 3.0F, 14.0F, 3.0F, 0.0F, false); + + cube_r74 = new ModelRenderer(this); + cube_r74.setRotationPoint(0.0F, 0.0F, -14.0F); + bone2.addChild(cube_r74); + setRotationAngle(cube_r74, 0.5409F, 0.241F, -0.3812F); + cube_r74.setTextureOffset(180, 394).addBox(0.0F, -11.0F, 0.0F, 3.0F, 14.0F, 3.0F, 0.0F, false); + + cube_r75 = new ModelRenderer(this); + cube_r75.setRotationPoint(0.0F, 0.0F, 0.0F); + bone2.addChild(cube_r75); + setRotationAngle(cube_r75, -0.5236F, 0.0F, -0.5236F); + cube_r75.setTextureOffset(406, 562).addBox(0.0F, -11.0F, -3.0F, 3.0F, 14.0F, 3.0F, 0.0F, false); + + cube_r76 = new ModelRenderer(this); + cube_r76.setRotationPoint(0.0F, 0.0F, 0.0F); + bone2.addChild(cube_r76); + setRotationAngle(cube_r76, -0.5409F, -0.241F, -0.3812F); + cube_r76.setTextureOffset(302, 495).addBox(0.0F, -11.0F, -3.0F, 3.0F, 14.0F, 3.0F, 0.0F, false); + + bone3 = new ModelRenderer(this); + bone3.setRotationPoint(7.0F, -12.342F, 7.0F); + Engine.addChild(bone3); + + + cube_r77 = new ModelRenderer(this); + cube_r77.setRotationPoint(0.0F, 0.0F, -14.0F); + bone3.addChild(cube_r77); + setRotationAngle(cube_r77, 0.5236F, 0.0F, 0.5236F); + cube_r77.setTextureOffset(362, 57).addBox(-3.0F, -11.0F, 0.0F, 3.0F, 14.0F, 3.0F, 0.0F, false); + + cube_r78 = new ModelRenderer(this); + cube_r78.setRotationPoint(0.0F, 0.0F, -14.0F); + bone3.addChild(cube_r78); + setRotationAngle(cube_r78, 0.5409F, -0.241F, 0.3812F); + cube_r78.setTextureOffset(227, 29).addBox(-3.0F, -11.0F, 0.0F, 3.0F, 14.0F, 3.0F, 0.0F, false); + + cube_r79 = new ModelRenderer(this); + cube_r79.setRotationPoint(0.0F, 0.0F, 0.0F); + bone3.addChild(cube_r79); + setRotationAngle(cube_r79, -0.5236F, 0.0F, 0.5236F); + cube_r79.setTextureOffset(331, 440).addBox(-3.0F, -11.0F, -3.0F, 3.0F, 14.0F, 3.0F, 0.0F, false); + + cube_r80 = new ModelRenderer(this); + cube_r80.setRotationPoint(0.0F, 0.0F, 0.0F); + bone3.addChild(cube_r80); + setRotationAngle(cube_r80, -0.5409F, 0.241F, 0.3812F); + cube_r80.setTextureOffset(445, 296).addBox(-3.0F, -11.0F, -3.0F, 3.0F, 14.0F, 3.0F, 0.0F, false); + + Body = new ModelRenderer(this); + Body.setRotationPoint(43.0F, 0.0F, -30.0F); + ShuttleMain.addChild(Body); + setRotationAngle(Body, 0.0F, 0.7854F, 0.0F); + Body.setTextureOffset(454, 85).addBox(-14.0F, -93.0F, -14.0F, 28.0F, 54.0F, 28.0F, 0.0F, false); + Body.setTextureOffset(454, 0).addBox(-15.0F, -93.0F, -15.0F, 30.0F, 54.0F, 30.0F, 0.0F, false); + Body.setTextureOffset(227, 0).addBox(-14.0F, -67.0F, -14.0F, 28.0F, 0.0F, 28.0F, 0.0F, false); + + ShuttleTop = new ModelRenderer(this); + ShuttleTop.setRotationPoint(-7.5F, -137.0F, -7.5F); + Body.addChild(ShuttleTop); + ShuttleTop.setTextureOffset(0, 0).addBox(0.0F, 1.0F, 0.0F, 15.0F, 38.0F, 15.0F, 0.0F, false); + ShuttleTop.setTextureOffset(276, 57).addBox(-0.5F, 0.0F, -0.5F, 16.0F, 1.0F, 16.0F, 0.0F, false); + ShuttleTop.setTextureOffset(227, 55).addBox(-0.5F, 12.0F, -0.5F, 16.0F, 1.0F, 16.0F, 0.0F, false); + ShuttleTop.setTextureOffset(180, 365).addBox(6.0F, -25.0F, 6.0F, 3.0F, 25.0F, 3.0F, 0.0F, false); + ShuttleTop.setTextureOffset(9, 0).addBox(7.0F, -35.0F, 7.0F, 1.0F, 10.0F, 1.0F, 0.0F, false); + + bone19 = new ModelRenderer(this); + bone19.setRotationPoint(0.0F, 0.0F, 15.0F); + ShuttleTop.addChild(bone19); + + + cube_r81 = new ModelRenderer(this); + cube_r81.setRotationPoint(15.0F, 0.0F, 0.0F); + bone19.addChild(cube_r81); + setRotationAngle(cube_r81, 0.2618F, 0.0F, -0.2618F); + cube_r81.setTextureOffset(437, 30).addBox(-2.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, true); + + cube_r82 = new ModelRenderer(this); + cube_r82.setRotationPoint(15.25F, 0.0F, 0.25F); + bone19.addChild(cube_r82); + setRotationAngle(cube_r82, 0.2618F, 0.0F, -0.2618F); + cube_r82.setTextureOffset(8, 440).addBox(-2.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, true); + + cube_r83 = new ModelRenderer(this); + cube_r83.setRotationPoint(15.0F, 0.0F, 0.0F); + bone19.addChild(cube_r83); + setRotationAngle(cube_r83, 0.2624F, 0.0674F, -0.2437F); + cube_r83.setTextureOffset(367, 24).addBox(-2.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, true); + + cube_r84 = new ModelRenderer(this); + cube_r84.setRotationPoint(15.25F, 0.0F, 0.25F); + bone19.addChild(cube_r84); + setRotationAngle(cube_r84, 0.2624F, 0.0674F, -0.2437F); + cube_r84.setTextureOffset(17, 440).addBox(-2.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, true); + + cube_r85 = new ModelRenderer(this); + cube_r85.setRotationPoint(-0.25F, 0.0F, 0.25F); + bone19.addChild(cube_r85); + setRotationAngle(cube_r85, 0.2624F, -0.0674F, 0.2437F); + cube_r85.setTextureOffset(17, 440).addBox(0.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, false); + + cube_r86 = new ModelRenderer(this); + cube_r86.setRotationPoint(0.0F, 0.0F, 0.0F); + bone19.addChild(cube_r86); + setRotationAngle(cube_r86, 0.2624F, -0.0674F, 0.2437F); + cube_r86.setTextureOffset(367, 24).addBox(0.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, false); + + cube_r87 = new ModelRenderer(this); + cube_r87.setRotationPoint(-0.25F, 0.0F, 0.25F); + bone19.addChild(cube_r87); + setRotationAngle(cube_r87, 0.2618F, 0.0F, 0.2618F); + cube_r87.setTextureOffset(8, 440).addBox(0.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, false); + + cube_r88 = new ModelRenderer(this); + cube_r88.setRotationPoint(0.0F, 0.0F, 0.0F); + bone19.addChild(cube_r88); + setRotationAngle(cube_r88, 0.2618F, 0.0F, 0.2618F); + cube_r88.setTextureOffset(437, 30).addBox(0.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, false); + + bone20 = new ModelRenderer(this); + bone20.setRotationPoint(7.5F, 0.0F, 7.5F); + ShuttleTop.addChild(bone20); + setRotationAngle(bone20, 0.0F, 3.1416F, 0.0F); + + + cube_r89 = new ModelRenderer(this); + cube_r89.setRotationPoint(7.5F, 0.0F, 7.5F); + bone20.addChild(cube_r89); + setRotationAngle(cube_r89, 0.2618F, 0.0F, -0.2618F); + cube_r89.setTextureOffset(437, 30).addBox(-2.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, true); + + cube_r90 = new ModelRenderer(this); + cube_r90.setRotationPoint(7.75F, 0.0F, 7.75F); + bone20.addChild(cube_r90); + setRotationAngle(cube_r90, 0.2618F, 0.0F, -0.2618F); + cube_r90.setTextureOffset(8, 440).addBox(-2.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, true); + + cube_r91 = new ModelRenderer(this); + cube_r91.setRotationPoint(7.5F, 0.0F, 7.5F); + bone20.addChild(cube_r91); + setRotationAngle(cube_r91, 0.2624F, 0.0674F, -0.2437F); + cube_r91.setTextureOffset(367, 24).addBox(-2.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, true); + + cube_r92 = new ModelRenderer(this); + cube_r92.setRotationPoint(7.75F, 0.0F, 7.75F); + bone20.addChild(cube_r92); + setRotationAngle(cube_r92, 0.2624F, 0.0674F, -0.2437F); + cube_r92.setTextureOffset(17, 440).addBox(-2.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, true); + + cube_r93 = new ModelRenderer(this); + cube_r93.setRotationPoint(-7.75F, 0.0F, 7.75F); + bone20.addChild(cube_r93); + setRotationAngle(cube_r93, 0.2624F, -0.0674F, 0.2437F); + cube_r93.setTextureOffset(17, 440).addBox(0.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, false); + + cube_r94 = new ModelRenderer(this); + cube_r94.setRotationPoint(-7.5F, 0.0F, 7.5F); + bone20.addChild(cube_r94); + setRotationAngle(cube_r94, 0.2624F, -0.0674F, 0.2437F); + cube_r94.setTextureOffset(367, 24).addBox(0.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, false); + + cube_r95 = new ModelRenderer(this); + cube_r95.setRotationPoint(-7.75F, 0.0F, 7.75F); + bone20.addChild(cube_r95); + setRotationAngle(cube_r95, 0.2618F, 0.0F, 0.2618F); + cube_r95.setTextureOffset(8, 440).addBox(0.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, false); + + cube_r96 = new ModelRenderer(this); + cube_r96.setRotationPoint(-7.5F, 0.0F, 7.5F); + bone20.addChild(cube_r96); + setRotationAngle(cube_r96, 0.2618F, 0.0F, 0.2618F); + cube_r96.setTextureOffset(437, 30).addBox(0.0F, -25.0F, -2.0F, 2.0F, 25.0F, 2.0F, 0.0F, false); + + bone15 = new ModelRenderer(this); + bone15.setRotationPoint(7.5F, 0.0F, 7.5F); + ShuttleTop.addChild(bone15); + setRotationAngle(bone15, 0.0F, 1.6144F, 0.0F); + + + bone13 = new ModelRenderer(this); + bone13.setRotationPoint(0.0F, 0.0F, -7.25F); + bone15.addChild(bone13); + + + cube_r97 = new ModelRenderer(this); + cube_r97.setRotationPoint(0.0F, 0.0F, 0.0F); + bone13.addChild(cube_r97); + setRotationAngle(cube_r97, -0.2618F, 0.0F, 0.0F); + cube_r97.setTextureOffset(537, 521).addBox(-6.0F, -25.0F, 0.0F, 12.0F, 25.0F, 0.0F, 0.0F, false); + + bone14 = new ModelRenderer(this); + bone14.setRotationPoint(0.0F, 0.0F, 0.0F); + bone15.addChild(bone14); + setRotationAngle(bone14, 0.0F, 3.1416F, 0.0F); + + + cube_r98 = new ModelRenderer(this); + cube_r98.setRotationPoint(0.0F, 0.0F, -7.25F); + bone14.addChild(cube_r98); + setRotationAngle(cube_r98, -0.2618F, 0.0F, 0.0F); + cube_r98.setTextureOffset(537, 521).addBox(-6.0F, -25.0F, 0.0F, 12.0F, 25.0F, 0.0F, 0.0F, false); + + bone16 = new ModelRenderer(this); + bone16.setRotationPoint(7.5F, 0.0F, 0.25F); + ShuttleTop.addChild(bone16); + + + bone17 = new ModelRenderer(this); + bone17.setRotationPoint(0.0F, 0.0F, 0.0F); + bone16.addChild(bone17); + + + cube_r99 = new ModelRenderer(this); + cube_r99.setRotationPoint(0.0F, 0.0F, 0.0F); + bone17.addChild(cube_r99); + setRotationAngle(cube_r99, -0.2618F, 0.0F, 0.0F); + cube_r99.setTextureOffset(537, 521).addBox(-6.0F, -25.0F, 0.0F, 12.0F, 25.0F, 0.0F, 0.0F, false); + + bone18 = new ModelRenderer(this); + bone18.setRotationPoint(0.0F, 0.0F, 7.25F); + bone16.addChild(bone18); + setRotationAngle(bone18, 0.0F, 3.1416F, 0.0F); + + + cube_r100 = new ModelRenderer(this); + cube_r100.setRotationPoint(0.0F, 0.0F, -7.25F); + bone18.addChild(cube_r100); + setRotationAngle(cube_r100, -0.2618F, 0.0F, 0.0F); + cube_r100.setTextureOffset(537, 521).addBox(-6.0F, -25.0F, 0.0F, 12.0F, 25.0F, 0.0F, 0.0F, false); + + Compartmentroof = new ModelRenderer(this); + Compartmentroof.setRotationPoint(-14.0F, -98.0F, 0.0F); + Body.addChild(Compartmentroof); + Compartmentroof.setTextureOffset(76, 0).addBox(-1.0F, 0.0F, -15.0F, 30.0F, 5.0F, 30.0F, 0.0F, false); + + bone = new ModelRenderer(this); + bone.setRotationPoint(-0.5F, 0.0F, 14.5F); + Compartmentroof.addChild(bone); + + + cube_r101 = new ModelRenderer(this); + cube_r101.setRotationPoint(0.0F, 0.0F, 0.0F); + bone.addChild(cube_r101); + setRotationAngle(cube_r101, 0.2618F, 0.0F, 0.2618F); + cube_r101.setTextureOffset(218, 315).addBox(0.0F, -39.0F, -2.0F, 2.0F, 39.0F, 2.0F, 0.0F, true); + + cube_r102 = new ModelRenderer(this); + cube_r102.setRotationPoint(28.5F, 0.0F, -0.5F); + bone.addChild(cube_r102); + setRotationAngle(cube_r102, 0.2618F, 0.0F, -0.2618F); + cube_r102.setTextureOffset(0, 465).addBox(-3.0F, -39.0F, -3.0F, 4.0F, 39.0F, 4.0F, 0.0F, false); + + cube_r103 = new ModelRenderer(this); + cube_r103.setRotationPoint(29.0F, 0.0F, 0.0F); + bone.addChild(cube_r103); + setRotationAngle(cube_r103, 0.2618F, 0.0F, -0.2618F); + cube_r103.setTextureOffset(218, 315).addBox(-2.0F, -39.0F, -2.0F, 2.0F, 39.0F, 2.0F, 0.0F, false); + + cube_r104 = new ModelRenderer(this); + cube_r104.setRotationPoint(0.5F, 0.0F, -0.5F); + bone.addChild(cube_r104); + setRotationAngle(cube_r104, 0.2618F, 0.0F, 0.2618F); + cube_r104.setTextureOffset(0, 465).addBox(-1.0F, -39.0F, -3.0F, 4.0F, 39.0F, 4.0F, 0.0F, true); + + bone10 = new ModelRenderer(this); + bone10.setRotationPoint(14.0F, 0.0F, 0.0F); + Compartmentroof.addChild(bone10); + setRotationAngle(bone10, 0.0F, 3.1416F, 0.0F); + + + cube_r105 = new ModelRenderer(this); + cube_r105.setRotationPoint(-14.5F, 0.0F, 14.5F); + bone10.addChild(cube_r105); + setRotationAngle(cube_r105, 0.2618F, 0.0F, 0.2618F); + cube_r105.setTextureOffset(218, 315).addBox(0.0F, -39.0F, -2.0F, 2.0F, 39.0F, 2.0F, 0.0F, true); + + cube_r106 = new ModelRenderer(this); + cube_r106.setRotationPoint(14.0F, 0.0F, 14.0F); + bone10.addChild(cube_r106); + setRotationAngle(cube_r106, 0.2618F, 0.0F, -0.2618F); + cube_r106.setTextureOffset(0, 465).addBox(-3.0F, -39.0F, -3.0F, 4.0F, 39.0F, 4.0F, 0.0F, false); + + cube_r107 = new ModelRenderer(this); + cube_r107.setRotationPoint(14.5F, 0.0F, 14.5F); + bone10.addChild(cube_r107); + setRotationAngle(cube_r107, 0.2618F, 0.0F, -0.2618F); + cube_r107.setTextureOffset(218, 315).addBox(-2.0F, -39.0F, -2.0F, 2.0F, 39.0F, 2.0F, 0.0F, false); + + cube_r108 = new ModelRenderer(this); + cube_r108.setRotationPoint(-14.0F, 0.0F, 14.0F); + bone10.addChild(cube_r108); + setRotationAngle(cube_r108, 0.2618F, 0.0F, 0.2618F); + cube_r108.setTextureOffset(0, 465).addBox(-1.0F, -39.0F, -3.0F, 4.0F, 39.0F, 4.0F, 0.0F, true); + + bone11 = new ModelRenderer(this); + bone11.setRotationPoint(28.0F, 0.0F, 0.0F); + Compartmentroof.addChild(bone11); + + + cube_r109 = new ModelRenderer(this); + cube_r109.setRotationPoint(0.0F, 0.0F, 0.0F); + bone11.addChild(cube_r109); + setRotationAngle(cube_r109, 0.0F, 0.0F, -0.2618F); + cube_r109.setTextureOffset(0, 488).addBox(0.0F, -27.0F, -13.0F, 0.0F, 27.0F, 26.0F, 0.0F, true); + + cube_r110 = new ModelRenderer(this); + cube_r110.setRotationPoint(-28.0F, 0.0F, 0.0F); + bone11.addChild(cube_r110); + setRotationAngle(cube_r110, 0.0F, 0.0F, 0.2618F); + cube_r110.setTextureOffset(0, 488).addBox(0.0F, -27.0F, -13.0F, 0.0F, 27.0F, 26.0F, 0.0F, false); + + bone12 = new ModelRenderer(this); + bone12.setRotationPoint(14.0F, 0.0F, 0.0F); + Compartmentroof.addChild(bone12); + setRotationAngle(bone12, 0.0F, 1.5708F, 0.0F); + + + cube_r111 = new ModelRenderer(this); + cube_r111.setRotationPoint(14.0F, 0.0F, 0.0F); + bone12.addChild(cube_r111); + setRotationAngle(cube_r111, 0.0F, 0.0F, -0.2618F); + cube_r111.setTextureOffset(0, 488).addBox(0.0F, -27.0F, -13.0F, 0.0F, 27.0F, 26.0F, 0.0F, true); + + cube_r112 = new ModelRenderer(this); + cube_r112.setRotationPoint(-14.0F, 0.0F, 0.0F); + bone12.addChild(cube_r112); + setRotationAngle(cube_r112, 0.0F, 0.0F, 0.2618F); + cube_r112.setTextureOffset(0, 488).addBox(0.0F, -27.0F, -13.0F, 0.0F, 27.0F, 26.0F, 0.0F, false); + + panes = new ModelRenderer(this); + panes.setRotationPoint(35.0F, 11.0F, -36.0F); + ShuttleMain.addChild(panes); + panes.setTextureOffset(151, 0).addBox(17.0F, -181.0F, -33.0F, 0.0F, 181.0F, 75.0F, 0.0F, false); + + cube_r113 = new ModelRenderer(this); + cube_r113.setRotationPoint(0.0F, 0.0F, 0.0F); + panes.addChild(cube_r113); + setRotationAngle(cube_r113, -3.1416F, 0.7854F, 3.1416F); + cube_r113.setTextureOffset(0, 0).addBox(0.0F, -181.0F, -39.0F, 0.0F, 181.0F, 75.0F, 0.0F, false); + + Interior = new ModelRenderer(this); + Interior.setRotationPoint(0.0F, -18.5F, 0.0F); + RocketShip.addChild(Interior); + setRotationAngle(Interior, 0.0F, 1.5708F, 0.0F); + + + bone22 = new ModelRenderer(this); + bone22.setRotationPoint(-16.0F, 23.5F, 11.0F); + Interior.addChild(bone22); + bone22.setTextureOffset(442, 521).addBox(21.0F, -9.0F, -18.0F, 4.0F, 9.0F, 14.0F, 0.0F, false); + bone22.setTextureOffset(442, 521).addBox(7.0F, -9.0F, -18.0F, 4.0F, 9.0F, 14.0F, 0.0F, true); + bone22.setTextureOffset(442, 521).addBox(7.0F, 19.0F, -18.0F, 4.0F, 9.0F, 14.0F, 0.0F, true); + bone22.setTextureOffset(291, 525).addBox(9.0F, -3.2F, -18.0F, 14.0F, 3.0F, 17.0F, 0.0F, false); + bone22.setTextureOffset(291, 525).addBox(9.0F, 25.0F, -18.0F, 14.0F, 3.0F, 17.0F, 0.0F, false); + bone22.setTextureOffset(343, 559).addBox(13.0F, -26.0F, 1.1F, 6.0F, 10.0F, 4.0F, 0.0F, false); + bone22.setTextureOffset(61, 0).addBox(13.0F, -26.0F, 5.0F, 6.0F, 27.0F, 0.0F, 0.0F, false); + bone22.setTextureOffset(194, 351).addBox(4.0F, -26.0F, -18.0F, 0.0F, 26.0F, 14.0F, 0.0F, false); + bone22.setTextureOffset(406, 0).addBox(9.0F, -26.0F, -23.0F, 14.0F, 26.0F, 0.0F, 0.0F, false); + bone22.setTextureOffset(151, 365).addBox(28.0F, -26.0F, -18.0F, 0.0F, 26.0F, 14.0F, 0.0F, false); + bone22.setTextureOffset(302, 440).addBox(9.0F, -26.0F, 1.0F, 14.0F, 26.0F, 0.0F, 0.0F, false); + + cube_r114 = new ModelRenderer(this); + cube_r114.setRotationPoint(7.0F, -23.5F, -9.0F); + bone22.addChild(cube_r114); + setRotationAngle(cube_r114, 0.0F, 0.0F, 0.5236F); + cube_r114.setTextureOffset(479, 521).addBox(-2.0F, -4.5F, -8.0F, 4.0F, 9.0F, 12.0F, 0.0F, false); + + cube_r115 = new ModelRenderer(this); + cube_r115.setRotationPoint(25.0F, -23.5F, -9.0F); + bone22.addChild(cube_r115); + setRotationAngle(cube_r115, 0.0F, 0.0F, -0.5236F); + cube_r115.setTextureOffset(424, 304).addBox(-2.0F, -4.5F, -8.0F, 4.0F, 9.0F, 12.0F, 0.0F, false); + + cube_r116 = new ModelRenderer(this); + cube_r116.setRotationPoint(16.0F, -9.75F, -18.0F); + bone22.addChild(cube_r116); + setRotationAngle(cube_r116, 0.2618F, 0.0F, 0.0F); + cube_r116.setTextureOffset(302, 521).addBox(-7.0F, -9.0F, -3.0F, 14.0F, 18.0F, 6.0F, 0.0F, false); + + bone23 = new ModelRenderer(this); + bone23.setRotationPoint(-16.0F, 51.5F, 11.0F); + Interior.addChild(bone23); + bone23.setTextureOffset(442, 521).addBox(21.0F, -9.0F, -18.0F, 4.0F, 9.0F, 14.0F, 0.0F, false); + bone23.setTextureOffset(343, 559).addBox(13.0F, -27.0F, 1.1F, 6.0F, 10.0F, 4.0F, 0.0F, false); + bone23.setTextureOffset(61, 0).addBox(13.0F, -26.0F, 5.0F, 6.0F, 27.0F, 0.0F, 0.0F, false); + bone23.setTextureOffset(194, 351).addBox(4.0F, -26.0F, -18.0F, 0.0F, 26.0F, 14.0F, 0.0F, false); + bone23.setTextureOffset(406, 0).addBox(9.0F, -26.0F, -23.0F, 14.0F, 26.0F, 0.0F, 0.0F, false); + bone23.setTextureOffset(151, 365).addBox(28.0F, -26.0F, -18.0F, 0.0F, 26.0F, 14.0F, 0.0F, false); + bone23.setTextureOffset(302, 440).addBox(9.0F, -27.0F, 1.0F, 14.0F, 26.0F, 0.0F, 0.0F, false); + + cube_r117 = new ModelRenderer(this); + cube_r117.setRotationPoint(7.0F, -23.5F, -9.0F); + bone23.addChild(cube_r117); + setRotationAngle(cube_r117, 0.0F, 0.0F, 0.5236F); + cube_r117.setTextureOffset(479, 521).addBox(-2.0F, -4.5F, -8.0F, 4.0F, 9.0F, 12.0F, 0.0F, false); + + cube_r118 = new ModelRenderer(this); + cube_r118.setRotationPoint(25.0F, -23.5F, -9.0F); + bone23.addChild(cube_r118); + setRotationAngle(cube_r118, 0.0F, 0.0F, -0.5236F); + cube_r118.setTextureOffset(424, 304).addBox(-2.0F, -4.5F, -8.0F, 4.0F, 9.0F, 12.0F, 0.0F, false); + + cube_r119 = new ModelRenderer(this); + cube_r119.setRotationPoint(16.0F, -9.0F, -18.0F); + bone23.addChild(cube_r119); + setRotationAngle(cube_r119, 0.2618F, 0.0F, 0.0F); + cube_r119.setTextureOffset(302, 521).addBox(-7.0F, -9.0F, -3.0F, 14.0F, 18.0F, 6.0F, 0.0F, false); + } + + @Override + public void setRotationAngles(Spaceship entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + RocketShip.rotateAngleY = (((Spaceship)entity).GetVehicleYaw()) * SuperNova.DegToRad; + RocketShip.rotateAngleX = (((Spaceship)entity).GetVehiclePitch()) * SuperNova.DegToRad; + RocketShip.rotateAngleZ = (((Spaceship)entity).GetVehicleRoll()) * SuperNova.DegToRad; + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + RocketShip.render(matrixStack, buffer, packedLight, packedOverlay, red, green, blue, alpha); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } + + } +} \ No newline at end of file diff --git a/src/main/java/net/halbear/supernova/entity/Spaceship.java b/src/main/java/net/halbear/supernova/entity/Spaceship.java new file mode 100644 index 0000000..b8a2695 --- /dev/null +++ b/src/main/java/net/halbear/supernova/entity/Spaceship.java @@ -0,0 +1,124 @@ +package net.halbear.supernova.entity; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.network.IPacket; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.network.datasync.EntityDataManager; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.Hand; +import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.World; +import net.minecraftforge.fml.network.NetworkHooks; + +import javax.annotation.Nonnull; + +public class Spaceship extends Entity { + private static final DataParameter ORIENTATION_ROLL = EntityDataManager.createKey(Spaceship.class, DataSerializers.FLOAT); + private static final DataParameter ORIENTATION_YAW = EntityDataManager.createKey(Spaceship.class, DataSerializers.FLOAT); + private static final DataParameter ORIENTATION_PITCH = EntityDataManager.createKey(Spaceship.class, DataSerializers.FLOAT); + + private static final Vector3d[] VehicleSeatOffsets = new Vector3d[]{ + new Vector3d(0.0D, 3D, 0.0D), + new Vector3d(0.0D, 1.5D, 0.0D), + }; + + public Spaceship(EntityType type, World worldIn) { + super(type, worldIn); + } + + public void SetVehicleRoll(float value){ + this.dataManager.set(ORIENTATION_ROLL, value); + } + public void SetVehicleYaw(float value){ + this.dataManager.set(ORIENTATION_YAW, value); + } + public void SetVehiclePitch(float value){ + this.dataManager.set(ORIENTATION_PITCH, value); + } + public float GetVehicleRoll(){ + return this.dataManager.get(ORIENTATION_ROLL); + } + public float GetVehicleYaw(){ + return this.dataManager.get(ORIENTATION_YAW); + } + public float GetVehiclePitch(){ + return this.dataManager.get(ORIENTATION_PITCH); + } + public float[] GetVehicleRotations(){ + return new float[]{GetVehicleYaw(),GetVehiclePitch(),GetVehicleRoll()}; + } + public void SetVehicleRotations(float Yaw, float Pitch, float Roll){ + SetVehicleRoll(Roll); + SetVehicleYaw(Yaw); + SetVehiclePitch(Pitch); + } + @Override + public boolean canBeCollidedWith(){return true;} + + @Override + protected boolean canFitPassenger(Entity passenger) { + return this.getPassengers().size() < VehicleSeatOffsets.length; + } + @Override + public ActionResultType processInitialInteract(PlayerEntity player, Hand hand) { + if (this.getPassengers().size() < VehicleSeatOffsets.length && !player.isPassenger()) { + if (!this.world.isRemote()) { + return player.startRiding(this) ? ActionResultType.CONSUME : ActionResultType.PASS; + } + return ActionResultType.func_233537_a_(this.world.isRemote()); + } + return ActionResultType.SUCCESS; + } + + @Override + public Entity getControllingPassenger() { + return this.getPassengers().isEmpty() ? null : this.getPassengers().get(0); + } + + @Override + public void updatePassenger(Entity passenger) { + if (this.isPassenger(passenger)) { + int seatIndex = this.getPassengers().indexOf(passenger); + + if (seatIndex >= 0 && seatIndex < VehicleSeatOffsets.length) { + Vector3d localOffset = VehicleSeatOffsets[seatIndex]; + Vector3d rotatedOffset = localOffset.rotateYaw((float) Math.toRadians(-this.rotationYaw)); + passenger.setPosition( + this.getPosX() + rotatedOffset.x, + this.getPosY() + rotatedOffset.y + passenger.getMountedYOffset(), + this.getPosZ() + rotatedOffset.z + ); + } else { + super.updatePassenger(passenger); + } + } + } + + @Override + protected void registerData() { + this.dataManager.register(ORIENTATION_ROLL, 0F); + this.dataManager.register(ORIENTATION_PITCH, 0F); + this.dataManager.register(ORIENTATION_YAW, 0F); + } + + @Override + protected void readAdditional(CompoundNBT compoundNBT) { + + } + + @Override + protected void writeAdditional(CompoundNBT compoundNBT) { + + } + + @Override + @Nonnull + public IPacket createSpawnPacket() { + return NetworkHooks.getEntitySpawningPacket(this); + } + +} diff --git a/src/main/java/dev/halbear1/supernova/loot_modifiers/ModReplaceLootDrop.java b/src/main/java/net/halbear/supernova/loot_modifiers/ModReplaceLootDrop.java similarity index 97% rename from src/main/java/dev/halbear1/supernova/loot_modifiers/ModReplaceLootDrop.java rename to src/main/java/net/halbear/supernova/loot_modifiers/ModReplaceLootDrop.java index 63cef9c..3a5fb1c 100644 --- a/src/main/java/dev/halbear1/supernova/loot_modifiers/ModReplaceLootDrop.java +++ b/src/main/java/net/halbear/supernova/loot_modifiers/ModReplaceLootDrop.java @@ -1,4 +1,4 @@ -package dev.halbear1.supernova.loot_modifiers; +package net.halbear.supernova.loot_modifiers; import com.google.gson.JsonObject; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; diff --git a/src/main/java/net/halbear/supernova/mixin/CameraMixin.java b/src/main/java/net/halbear/supernova/mixin/CameraMixin.java new file mode 100644 index 0000000..6fa6895 --- /dev/null +++ b/src/main/java/net/halbear/supernova/mixin/CameraMixin.java @@ -0,0 +1,31 @@ +package net.halbear.supernova.mixin; + +import net.halbear.supernova.SuperNova; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ActiveRenderInfo; +import net.minecraft.client.settings.PointOfView; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraft.world.IBlockReader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import static net.halbear.supernova.vehicle.VehicleCameraSetup.GetCameraOffsets; + +@Mixin(ActiveRenderInfo.class) +public abstract class CameraMixin { + @Inject(method = {"update", "func_216772_a"}, at = @At(value = "TAIL"),cancellable = true, remap = true) + private void update(IBlockReader currentRenderedLevel, Entity entity, boolean isDetached, boolean isMirrored, float partialTicks, CallbackInfo ci){ + + if(entity.isPassenger() && Minecraft.getInstance().gameSettings.getPointOfView() != PointOfView.FIRST_PERSON && entity.getRidingEntity().getType().getRegistryName().getNamespace().equals(SuperNova.MOD_ID)){ + Vector3f Position = GetCameraOffsets(); + this.movePosition(-this.calcCameraDistance(Position.getZ()), Position.getY(), Position.getX()); + } + } + @Shadow(aliases = {"move", "func_216782_a"}) + protected abstract void movePosition(double p_216782_1_, double p_216782_3_, double p_216782_5_); + @Shadow(aliases = {"getMaxZoom", "func_216779_a"}) protected abstract double calcCameraDistance(double p_216779_1_); +} diff --git a/src/main/java/dev/halbear1/supernova/registry/ModArmourMaterial.java b/src/main/java/net/halbear/supernova/registry/ModArmourMaterial.java similarity index 96% rename from src/main/java/dev/halbear1/supernova/registry/ModArmourMaterial.java rename to src/main/java/net/halbear/supernova/registry/ModArmourMaterial.java index d90136c..b28c25d 100644 --- a/src/main/java/dev/halbear1/supernova/registry/ModArmourMaterial.java +++ b/src/main/java/net/halbear/supernova/registry/ModArmourMaterial.java @@ -1,6 +1,6 @@ -package dev.halbear1.supernova.registry; +package net.halbear.supernova.registry; -import dev.halbear1.supernova.SuperNova; +import net.halbear.supernova.SuperNova; import net.minecraft.inventory.EquipmentSlotType; import net.minecraft.item.IArmorMaterial; import net.minecraft.item.crafting.Ingredient; diff --git a/src/main/java/net/halbear/supernova/registry/ModEntities.java b/src/main/java/net/halbear/supernova/registry/ModEntities.java new file mode 100644 index 0000000..0493ecf --- /dev/null +++ b/src/main/java/net/halbear/supernova/registry/ModEntities.java @@ -0,0 +1,18 @@ +package net.halbear.supernova.registry; + +import net.halbear.supernova.SuperNova; +import net.halbear.supernova.entity.Spaceship; +import net.minecraft.entity.EntityClassification; +import net.minecraft.entity.EntityType; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; + +public class ModEntities { + public static DeferredRegister> ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.ENTITIES, SuperNova.MOD_ID); + + public static final RegistryObject> SPACESHIP = + ENTITY_TYPES.register("spaceship", ()-> EntityType.Builder.create(Spaceship::new, + EntityClassification.MISC ).size(3f,8f).build(new ResourceLocation(SuperNova.MOD_ID, "spaceship").toString())); +} diff --git a/src/main/java/dev/halbear1/supernova/registry/ModEventBusEvents.java b/src/main/java/net/halbear/supernova/registry/ModEventBusEvents.java similarity index 55% rename from src/main/java/dev/halbear1/supernova/registry/ModEventBusEvents.java rename to src/main/java/net/halbear/supernova/registry/ModEventBusEvents.java index fe33063..1e1c0ff 100644 --- a/src/main/java/dev/halbear1/supernova/registry/ModEventBusEvents.java +++ b/src/main/java/net/halbear/supernova/registry/ModEventBusEvents.java @@ -1,28 +1,13 @@ -package dev.halbear1.supernova.registry; +package net.halbear.supernova.registry; -import dev.halbear1.supernova.*; -import dev.halbear1.supernova.loot_modifiers.ModReplaceLootDrop; -import dev.halbear1.supernova.registry.worldgen.ModDimensions; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.RegistryKey; +import net.halbear.supernova.*; +import net.halbear.supernova.SuperNova; +import net.halbear.supernova.loot_modifiers.ModReplaceLootDrop; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.Util; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.text.ChatType; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.world.World; -import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.common.loot.GlobalLootModifierSerializer; import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.event.ServerChatEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.server.ServerLifecycleHooks; import javax.annotation.Nonnull; diff --git a/src/main/java/dev/halbear1/supernova/registry/ModParticles.java b/src/main/java/net/halbear/supernova/registry/ModParticles.java similarity index 73% rename from src/main/java/dev/halbear1/supernova/registry/ModParticles.java rename to src/main/java/net/halbear/supernova/registry/ModParticles.java index 348118f..7a4e7e9 100644 --- a/src/main/java/dev/halbear1/supernova/registry/ModParticles.java +++ b/src/main/java/net/halbear/supernova/registry/ModParticles.java @@ -1,9 +1,7 @@ -package dev.halbear1.supernova.registry; +package net.halbear.supernova.registry; -import dev.halbear1.supernova.SuperNova; -import net.minecraft.particles.BasicParticleType; +import net.halbear.supernova.SuperNova; import net.minecraft.particles.ParticleType; -import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; diff --git a/src/main/java/dev/halbear1/supernova/registry/blocks/ModBlocks.java b/src/main/java/net/halbear/supernova/registry/blocks/ModBlocks.java similarity index 95% rename from src/main/java/dev/halbear1/supernova/registry/blocks/ModBlocks.java rename to src/main/java/net/halbear/supernova/registry/blocks/ModBlocks.java index 8da32b4..17797aa 100644 --- a/src/main/java/dev/halbear1/supernova/registry/blocks/ModBlocks.java +++ b/src/main/java/net/halbear/supernova/registry/blocks/ModBlocks.java @@ -1,12 +1,12 @@ -package dev.halbear1.supernova.registry.blocks; +package net.halbear.supernova.registry.blocks; -import dev.halbear1.supernova.SuperNova; +import net.halbear.supernova.SuperNova; -import dev.halbear1.supernova.custom.block.ArcFurnace; -import dev.halbear1.supernova.custom.block.DebugPortalBlock; -import dev.halbear1.supernova.custom.block.StraightSteelPipe; -import dev.halbear1.supernova.registry.items.ModItems; -import dev.halbear1.supernova.registry.items.ItemGroups; +import net.halbear.supernova.custom.block.ArcFurnace; +import net.halbear.supernova.custom.block.DebugPortalBlock; +import net.halbear.supernova.custom.block.StraightSteelPipe; +import net.halbear.supernova.registry.items.ModItems; +import net.halbear.supernova.registry.items.ItemGroups; import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.item.BlockItem; diff --git a/src/main/java/dev/halbear1/supernova/registry/blocks/ModFluids.java b/src/main/java/net/halbear/supernova/registry/blocks/ModFluids.java similarity index 95% rename from src/main/java/dev/halbear1/supernova/registry/blocks/ModFluids.java rename to src/main/java/net/halbear/supernova/registry/blocks/ModFluids.java index 98e8fa8..5503c9b 100644 --- a/src/main/java/dev/halbear1/supernova/registry/blocks/ModFluids.java +++ b/src/main/java/net/halbear/supernova/registry/blocks/ModFluids.java @@ -1,10 +1,10 @@ -package dev.halbear1.supernova.registry.blocks; +package net.halbear.supernova.registry.blocks; -import dev.halbear1.supernova.SuperNova; -import dev.halbear1.supernova.custom.fluid.FlammableFluid; -import dev.halbear1.supernova.custom.fluid.SupernovaFlowingFluid; -import dev.halbear1.supernova.custom.fluid.SupernovaFluidAttributes; -import dev.halbear1.supernova.registry.items.ModItems; +import net.halbear.supernova.SuperNova; +import net.halbear.supernova.custom.fluid.FlammableFluid; +import net.halbear.supernova.custom.fluid.SupernovaFlowingFluid; +import net.halbear.supernova.custom.fluid.SupernovaFluidAttributes; +import net.halbear.supernova.registry.items.ModItems; import net.minecraft.block.AbstractBlock; import net.minecraft.block.FlowingFluidBlock; import net.minecraft.block.material.Material; @@ -12,7 +12,6 @@ import net.minecraft.fluid.FlowingFluid; import net.minecraft.fluid.Fluid; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvents; -import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.ForgeFlowingFluid; import net.minecraftforge.fml.RegistryObject; diff --git a/src/main/java/dev/halbear1/supernova/registry/items/ItemGroups.java b/src/main/java/net/halbear/supernova/registry/items/ItemGroups.java similarity index 84% rename from src/main/java/dev/halbear1/supernova/registry/items/ItemGroups.java rename to src/main/java/net/halbear/supernova/registry/items/ItemGroups.java index b6bdab2..87814f4 100644 --- a/src/main/java/dev/halbear1/supernova/registry/items/ItemGroups.java +++ b/src/main/java/net/halbear/supernova/registry/items/ItemGroups.java @@ -1,6 +1,6 @@ -package dev.halbear1.supernova.registry.items; +package net.halbear.supernova.registry.items; -import dev.halbear1.supernova.registry.blocks.ModBlocks; +import net.halbear.supernova.registry.blocks.ModBlocks; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; diff --git a/src/main/java/dev/halbear1/supernova/registry/items/ModItems.java b/src/main/java/net/halbear/supernova/registry/items/ModItems.java similarity index 97% rename from src/main/java/dev/halbear1/supernova/registry/items/ModItems.java rename to src/main/java/net/halbear/supernova/registry/items/ModItems.java index 2bbea3f..0cc2b72 100644 --- a/src/main/java/dev/halbear1/supernova/registry/items/ModItems.java +++ b/src/main/java/net/halbear/supernova/registry/items/ModItems.java @@ -1,15 +1,14 @@ -package dev.halbear1.supernova.registry.items; +package net.halbear.supernova.registry.items; -import dev.halbear1.supernova.SuperNova; -import dev.halbear1.supernova.registry.blocks.ModFluids; -import dev.halbear1.supernova.registry.util.ModSoundEvents; +import net.halbear.supernova.SuperNova; +import net.halbear.supernova.registry.blocks.ModFluids; +import net.halbear.supernova.registry.util.ModSoundEvents; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.item.*; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; -import net.minecraftforge.common.ToolType; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; diff --git a/src/main/java/dev/halbear1/supernova/registry/util/ClientEventHandler.java b/src/main/java/net/halbear/supernova/registry/util/ClientEventHandler.java similarity index 68% rename from src/main/java/dev/halbear1/supernova/registry/util/ClientEventHandler.java rename to src/main/java/net/halbear/supernova/registry/util/ClientEventHandler.java index 038af12..5cb91fb 100644 --- a/src/main/java/dev/halbear1/supernova/registry/util/ClientEventHandler.java +++ b/src/main/java/net/halbear/supernova/registry/util/ClientEventHandler.java @@ -1,48 +1,26 @@ -package dev.halbear1.supernova.registry.util; +package net.halbear.supernova.registry.util; -import dev.halbear1.supernova.SuperNova; +import net.halbear.supernova.SuperNova; //import dev.halbear1.supernova.custom.particle.StarSparkle; -import dev.halbear1.supernova.registry.ModParticles; -import dev.halbear1.supernova.registry.blocks.ModBlocks; -import dev.halbear1.supernova.registry.blocks.ModFluids; -import dev.halbear1.supernova.registry.worldgen.ModBiomes; -import dev.halbear1.supernova.registry.worldgen.ModDimensions; -import net.minecraft.client.Minecraft; -import net.minecraft.client.particle.IParticleFactory; +import net.halbear.supernova.entity.EntityRenderers.SpaceshipRenderer; +import net.halbear.supernova.entity.Spaceship; +import net.halbear.supernova.registry.ModEntities; +import net.halbear.supernova.registry.blocks.ModBlocks; +import net.halbear.supernova.registry.blocks.ModFluids; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderTypeLookup; -import net.minecraft.client.world.DimensionRenderInfo; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererManager; +import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.fluid.FluidState; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.RegistryKey; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.Util; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.text.ChatType; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.world.Dimension; -import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.EntityViewRenderEvent; -import net.minecraftforge.client.event.ParticleFactoryRegisterEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.fml.client.registry.RenderingRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraft.block.Block; -import net.minecraftforge.fml.server.ServerLifecycleHooks; - -import java.util.AbstractMap; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Stream; @Mod.EventBusSubscriber(modid = SuperNova.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public class ClientEventHandler { @@ -75,6 +53,7 @@ public class ClientEventHandler { RenderTypeLookup.setRenderLayer(ModFluids.KEROSENE_FLOWING.get(), RenderType.getTranslucent()); RenderTypeLookup.setRenderLayer(ModFluids.KEROSENE_BLOCK.get(), RenderType.getTranslucent()); + RenderingRegistry.registerEntityRenderingHandler(ModEntities.SPACESHIP.get(), SpaceshipRenderer::new); /*SetCollectionRenderType(RenderType.getCutoutMipped(), // Cutout Mipped: Cutout but with mipmapping. Textures from far away are simplified for performance. //blocks here ); diff --git a/src/main/java/dev/halbear1/supernova/registry/util/ModSoundEvents.java b/src/main/java/net/halbear/supernova/registry/util/ModSoundEvents.java similarity index 93% rename from src/main/java/dev/halbear1/supernova/registry/util/ModSoundEvents.java rename to src/main/java/net/halbear/supernova/registry/util/ModSoundEvents.java index d5939ed..c4def3e 100644 --- a/src/main/java/dev/halbear1/supernova/registry/util/ModSoundEvents.java +++ b/src/main/java/net/halbear/supernova/registry/util/ModSoundEvents.java @@ -1,6 +1,6 @@ -package dev.halbear1.supernova.registry.util; +package net.halbear.supernova.registry.util; -import dev.halbear1.supernova.SuperNova; +import net.halbear.supernova.SuperNova; import net.minecraft.util.ResourceLocation; import net.minecraft.util.SoundEvent; import net.minecraftforge.fml.RegistryObject; diff --git a/src/main/java/dev/halbear1/supernova/registry/util/ServerEventHandler.java b/src/main/java/net/halbear/supernova/registry/util/ServerEventHandler.java similarity index 96% rename from src/main/java/dev/halbear1/supernova/registry/util/ServerEventHandler.java rename to src/main/java/net/halbear/supernova/registry/util/ServerEventHandler.java index 267b96c..0f5159f 100644 --- a/src/main/java/dev/halbear1/supernova/registry/util/ServerEventHandler.java +++ b/src/main/java/net/halbear/supernova/registry/util/ServerEventHandler.java @@ -1,7 +1,7 @@ -package dev.halbear1.supernova.registry.util; -import dev.halbear1.supernova.SuperNova; +package net.halbear.supernova.registry.util; +import net.halbear.supernova.SuperNova; -import dev.halbear1.supernova.registry.blocks.ModFluids; +import net.halbear.supernova.registry.blocks.ModFluids; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; diff --git a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModBiomes.java b/src/main/java/net/halbear/supernova/registry/worldgen/ModBiomes.java similarity index 93% rename from src/main/java/dev/halbear1/supernova/registry/worldgen/ModBiomes.java rename to src/main/java/net/halbear/supernova/registry/worldgen/ModBiomes.java index 443a410..7c7b722 100644 --- a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModBiomes.java +++ b/src/main/java/net/halbear/supernova/registry/worldgen/ModBiomes.java @@ -1,6 +1,6 @@ -package dev.halbear1.supernova.registry.worldgen; +package net.halbear.supernova.registry.worldgen; -import dev.halbear1.supernova.SuperNova; +import net.halbear.supernova.SuperNova; import net.minecraft.util.RegistryKey; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; diff --git a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModConfiguredFeatures.java b/src/main/java/net/halbear/supernova/registry/worldgen/ModConfiguredFeatures.java similarity index 92% rename from src/main/java/dev/halbear1/supernova/registry/worldgen/ModConfiguredFeatures.java rename to src/main/java/net/halbear/supernova/registry/worldgen/ModConfiguredFeatures.java index 4962d50..7acf69f 100644 --- a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModConfiguredFeatures.java +++ b/src/main/java/net/halbear/supernova/registry/worldgen/ModConfiguredFeatures.java @@ -1,7 +1,7 @@ -package dev.halbear1.supernova.registry.worldgen; +package net.halbear.supernova.registry.worldgen; -import dev.halbear1.supernova.SuperNova; -import dev.halbear1.supernova.registry.blocks.ModBlocks; +import net.halbear.supernova.SuperNova; +import net.halbear.supernova.registry.blocks.ModBlocks; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.WorldGenRegistries; diff --git a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModDimensions.java b/src/main/java/net/halbear/supernova/registry/worldgen/ModDimensions.java similarity index 91% rename from src/main/java/dev/halbear1/supernova/registry/worldgen/ModDimensions.java rename to src/main/java/net/halbear/supernova/registry/worldgen/ModDimensions.java index edf7a05..1768068 100644 --- a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModDimensions.java +++ b/src/main/java/net/halbear/supernova/registry/worldgen/ModDimensions.java @@ -1,6 +1,6 @@ -package dev.halbear1.supernova.registry.worldgen; +package net.halbear.supernova.registry.worldgen; -import dev.halbear1.supernova.SuperNova; +import net.halbear.supernova.SuperNova; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.util.RegistryKey; @@ -11,7 +11,6 @@ import net.minecraft.util.text.ChatType; import net.minecraft.util.text.StringTextComponent; import net.minecraft.world.World; import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.server.ServerLifecycleHooks; diff --git a/src/main/java/net/halbear/supernova/registry/worldgen/ModFeatures.java b/src/main/java/net/halbear/supernova/registry/worldgen/ModFeatures.java new file mode 100644 index 0000000..d7974a4 --- /dev/null +++ b/src/main/java/net/halbear/supernova/registry/worldgen/ModFeatures.java @@ -0,0 +1,4 @@ +package net.halbear.supernova.registry.worldgen; + +public class ModFeatures { +} diff --git a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModSurfaceBuilders.java b/src/main/java/net/halbear/supernova/registry/worldgen/ModSurfaceBuilders.java similarity index 80% rename from src/main/java/dev/halbear1/supernova/registry/worldgen/ModSurfaceBuilders.java rename to src/main/java/net/halbear/supernova/registry/worldgen/ModSurfaceBuilders.java index 6a1cca4..b7c8b33 100644 --- a/src/main/java/dev/halbear1/supernova/registry/worldgen/ModSurfaceBuilders.java +++ b/src/main/java/net/halbear/supernova/registry/worldgen/ModSurfaceBuilders.java @@ -1,6 +1,6 @@ -package dev.halbear1.supernova.registry.worldgen; +package net.halbear.supernova.registry.worldgen; -import dev.halbear1.supernova.SuperNova; +import net.halbear.supernova.SuperNova; import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; diff --git a/src/main/java/dev/halbear1/supernova/setup/CommonEventHandler.java b/src/main/java/net/halbear/supernova/setup/CommonEventHandler.java similarity index 76% rename from src/main/java/dev/halbear1/supernova/setup/CommonEventHandler.java rename to src/main/java/net/halbear/supernova/setup/CommonEventHandler.java index e9601d4..ed2b227 100644 --- a/src/main/java/dev/halbear1/supernova/setup/CommonEventHandler.java +++ b/src/main/java/net/halbear/supernova/setup/CommonEventHandler.java @@ -1,10 +1,7 @@ -package dev.halbear1.supernova.setup; -import dev.halbear1.supernova.SuperNova; -import dev.halbear1.supernova.registry.worldgen.ModConfiguredFeatures; -import dev.halbear1.supernova.registry.worldgen.ModDimensions; -import net.minecraft.entity.player.PlayerEntity; +package net.halbear.supernova.setup; +import net.halbear.supernova.SuperNova; +import net.halbear.supernova.registry.worldgen.ModConfiguredFeatures; import net.minecraft.world.gen.GenerationStage; -import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.world.BiomeLoadingEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; diff --git a/src/main/java/net/halbear/supernova/setup/ModEventHandler.java b/src/main/java/net/halbear/supernova/setup/ModEventHandler.java new file mode 100644 index 0000000..3de6077 --- /dev/null +++ b/src/main/java/net/halbear/supernova/setup/ModEventHandler.java @@ -0,0 +1,24 @@ +package net.halbear.supernova.setup; +import net.halbear.supernova.SuperNova; +import net.halbear.supernova.entity.Spaceship; +import net.halbear.supernova.registry.ModEntities; +import net.halbear.supernova.registry.worldgen.ModConfiguredFeatures; +import net.minecraft.entity.EntityType; +import net.minecraft.world.gen.GenerationStage; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.event.entity.EntityAttributeCreationEvent; +import net.minecraftforge.event.world.BiomeLoadingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber(modid = SuperNova.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class ModEventHandler { + @SubscribeEvent + public static void addEntityAttributes(EntityAttributeCreationEvent event){ + } + + @SubscribeEvent + public static void onRegisterEntities(RegistryEvent.Register> event){ + + } +} diff --git a/src/main/java/net/halbear/supernova/vehicle/VehicleCameraSetup.java b/src/main/java/net/halbear/supernova/vehicle/VehicleCameraSetup.java new file mode 100644 index 0000000..53f7559 --- /dev/null +++ b/src/main/java/net/halbear/supernova/vehicle/VehicleCameraSetup.java @@ -0,0 +1,62 @@ +package net.halbear.supernova.vehicle; + +import net.halbear.supernova.*; +import net.halbear.supernova.entity.Spaceship; +import net.halbear.supernova.registry.ModEntities; +import net.minecraft.client.Minecraft; +import net.minecraft.util.math.vector.Vector3f; +import net.minecraftforge.client.event.EntityViewRenderEvent; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; + +@Mod.EventBusSubscriber +public class VehicleCameraSetup { + private static Vector3f CamOffset = new Vector3f(0.0f, 0.0f, 0.0f); + private static Vector3f CamTransformations = new Vector3f(0.0f, 0.0f, 0.0f); + private static float CamFOV = 0.0f; + private static float CamFOVExternal = 0.0f; + private static String CurrentEntity = ""; + private static boolean SupernovaVehicle = false; + public static Vector3f GetCameraOffsets(){ + return CamOffset; + } + + @SubscribeEvent + public static void PlayerTickEvent(TickEvent.PlayerTickEvent event) { + + Minecraft minecraftInstance = Minecraft.getInstance(); + if (minecraftInstance.player != null && minecraftInstance.player.isPassenger() && minecraftInstance.player.getRidingEntity() != null + && CurrentEntity != minecraftInstance.player.getRidingEntity().getType().getRegistryName().toString()) { + CurrentEntity = minecraftInstance.player.getRidingEntity().getType().getRegistryName().toString(); + SupernovaVehicle = minecraftInstance.player.getRidingEntity().getType().getRegistryName().getNamespace().equals(SuperNova.MOD_ID); + if (CurrentEntity.equals(ModEntities.SPACESHIP.get().getRegistryName().toString())) { + CamOffset = new Vector3f(0.0f, -0.75f, 6.5f); + CamTransformations = new Vector3f(0.0f, 0.0f, 0.0f); + CamFOV = 70.0f; + CamFOVExternal = 60.0f; + } + } + if (minecraftInstance.player != null && (!minecraftInstance.player.isPassenger() || !SupernovaVehicle) + && (CamFOVExternal != (float) Minecraft.getInstance().gameSettings.fov + || CamFOV != (float) Minecraft.getInstance().gameSettings.fov || CamOffset.getX() != 0 || CamOffset.getY() != 0 + || CamOffset.getZ() != 0 || CamTransformations.getX() != 0 || CamTransformations.getY() != 0 + || CamTransformations.getZ() != 0)) { + CamOffset = new Vector3f(0.0f, 0.0f, 0.0f);// reset if the players not riding an entity and if any the values aren't 0 + CamTransformations = new Vector3f(0.0f, 0.0f, 0.0f); + CamFOV = (float) Minecraft.getInstance().gameSettings.fov; + CamFOVExternal = (float) Minecraft.getInstance().gameSettings.fov; + if (!minecraftInstance.player.isPassenger()) + CurrentEntity = ""; + } + } + + @SubscribeEvent + public static void onCameraSetup(EntityViewRenderEvent.CameraSetup event) { + if (SupernovaVehicle) { + event.setRoll(event.getRoll() + CamTransformations.getX()); + event.setYaw(event.getYaw() + CamTransformations.getY()); + event.setPitch(event.getPitch() + CamTransformations.getZ()); + } + } +} diff --git a/src/main/java/dev/halbear1/supernova/world/dimension/DebugTeleporter.java b/src/main/java/net/halbear/supernova/world/dimension/DebugTeleporter.java similarity index 93% rename from src/main/java/dev/halbear1/supernova/world/dimension/DebugTeleporter.java rename to src/main/java/net/halbear/supernova/world/dimension/DebugTeleporter.java index addfb9f..f9a67b8 100644 --- a/src/main/java/dev/halbear1/supernova/world/dimension/DebugTeleporter.java +++ b/src/main/java/net/halbear/supernova/world/dimension/DebugTeleporter.java @@ -1,7 +1,7 @@ -package dev.halbear1.supernova.world.dimension; +package net.halbear.supernova.world.dimension; -import dev.halbear1.supernova.custom.block.ArcFurnace; -import dev.halbear1.supernova.registry.blocks.ModBlocks; +import net.halbear.supernova.custom.block.ArcFurnace; +import net.halbear.supernova.registry.blocks.ModBlocks; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.fluid.Fluids; diff --git a/src/main/java/net/halbear/supernova/world/gen/ores/OreInCave.java b/src/main/java/net/halbear/supernova/world/gen/ores/OreInCave.java new file mode 100644 index 0000000..bc773d3 --- /dev/null +++ b/src/main/java/net/halbear/supernova/world/gen/ores/OreInCave.java @@ -0,0 +1,4 @@ +package net.halbear.supernova.world.gen.ores; + +public class OreInCave { +} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 0d6b395..b3acf1b 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -29,9 +29,9 @@ displayName="SuperNova" #mandatory # A file name (in the root of the mod JAR) containing a logo for display logoFile="SuperNova.png" #optional # A text field displayed in the mod UI -credits="halbear1, Masterchefreal, TechyKnight, Peacefulgamer_, Billz_Game" #optional +credits="halbear1, TechyKnight, Billz_Game" #optional # A text field displayed in the mod UI -authors="halbear1" #optional +authors="Halbear Networking & Software Ltd" #optional # The description text for the mod (multi line!) (#mandatory) description=''' SuperNova Space travel mod developed by Iron Horse Game Development (visit https://iron-horse.games/ to find out more) diff --git a/src/main/resources/assets/supernova/textures/entity/rocketship.png b/src/main/resources/assets/supernova/textures/entity/rocketship.png new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/assets/supernova/textures/entity/spaceship.png b/src/main/resources/assets/supernova/textures/entity/spaceship.png new file mode 100644 index 0000000000000000000000000000000000000000..038ff805c342286ccabad94965d1ab85aa55d1fb GIT binary patch literal 58168 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

BW;TY$(e z2SU0oKSJHxDq9YgtMerS1qJzok-G~Jl9*24hTD^sJrI&tSn)3+#FVIs+ecy!lE}d2 zI7EmqsSZ!%$VU(%Eee(p&N-!GS;7*WLajuEu#M^HDc7OH|@8 zG$b8GHlhWpb?ju47U~GTU(OUofFQ7usy35DC`8U_hZ9L#kd3^&oQF~YE074TS{=wn z5{!-_niFr+x8XKYg=|E(u<{o~$abQp$VO1k9nv2chX^@AsuQIG@Ln|i=VmQS zE|D$BMm{decSeMOL_~xj8!0q8R)z>UN8g6qNENb?fWoSCK!{%mQB!0is1%s$|9d%T zVQT}aL!Iw6VEQcpNYQSnB0v%8maNFEy)}K&XA6Y0H~@k z9!Ro707p^>um(s)D59d&ik5s70rW}7M1Y3?a2`nZM*w+Jhfsm^bPR?G1Zl#aojZP& zPRxdfylE+a!b1=Qx8Ukm1$iiyJ^H#5NsUDx$JuiXWj<|59^J6FyaUG@XXq)2xQWBf z`2m1clm=BB7r`MgimHi`L#R1eAxoCU&_*7*6wIh2bQW_R?h=U+e1ZUx4iNK}az;FA zWI<^q%0B`@F`l&S=mkb{fFzLw%7BbM+O0)MNzM?rh-BslWXz1#EC&3^kLiOz4WDr< zAiHAHla5OwGVD2BI2o3Z13Uif@^}H@FQq}naz!);?xjH&{i|*xde7*BEO|3d#%9pH z_>)Rp6llyO0kb#y?6_A)+K9oU`lJT(FTE(gwW5gBmd&+%RJV|2juLxYMO zC`LMCk3`5f_a!NcGBSi~#VISm=osDNj{GxVgiju##^02Sj4o6{UL+J$C`y*xVxbvf zVo|tIm|GDw%?BnSqRl;Bl6Fi6YQFm3Uj(k8)sLtmWWBf+)KS!+(b{N03988%9BE0& z3LRUm3seDH1+_F`f0oXX0ZoZNexbJ4}hP}-{+b5wQG(!r;)z`|lRaJ-G z`7IW7vLmzr^^p`T!Mh6?CkcVYvFmcdMga7wr-}NI2hmQ!9@v@A-13C!2s{1v`7k=t z;q;TR)&i!lTF6kIjMlw|rI`=uBcd(99vr_{7i>dYsKFg`_=#A+xr(+33FM+?P>J|) z5i!RRF)gl1umvTMxDnUY_>CaszDch@SfFb|8s1&v{0l3s2s@7*%ruKV#yzWJF>wCf z0CO5R|3B5qB?v=~QyW=302gQNG?W4HaT-E6g~xDF4=_RE9`2|d8L-kq-@J{;N0-nK z3!X=P#)pL53f~az zA#O0QuJTEO$;Vgh7a7S4;6}kGPt@L~%q>nnpq)GHn^4WEy>LBV{y3s=65L;qf>5=E z&a{xWi?Fl(>3knli|R=hiMRxxj^W(sXO$sTwOg^`4{?KP2b%t{xLFq@!?-J!j7PF8 z=onC4Mw?I$yk_e}B1|-nsC#!~fL#XT+Qbq( zZaEgf_ybybHH@nf&x*ziVZ3+%orf?LiAJLFCoo=FPVi2J+D*JcR2epcPS?#WM{wh|fW(EL8E7mmq=qDpMNgktR_Ipz+b`V&cUVssr6 z{Ho>3`AM{bv+Vc9bT9E4Kn~2j4{!IcR#*mJ%3XM*G(xo&29VMA;AWOTT?z{tpPS zlx6ZSjAGl{fNmNe{SpO$S2E01BFeUb-L1TU%08_<99I!awZP7vm9Nnb3PdB^?3DeG z8Cff6!;{QqL=@9tNu<+$NWj&KIS3#{ED-^iYd`?RugDWvN;6TQ6&OGg7+%ua9N6N2 zY7k{Ok|nj0A`!o$j}mo;~8 zBdX_CAVkt-m~dHZA==u3*o!N*at)+AHGQ{HJwLpRiHc|et{Y*(M)E~8!Gh>DX99?{ zMlBtAlVMrrZ=wm=Fd=&@$}`D mx|m1{skHNNR6-VVz!aSux*If2fwTJNFImMoTq zb<(iSIl3SrAHyEBk`hr8&4CgG%-y?ZE zmt!JB5FlU#$#tJqCVDh_BQ;C}C_w<e2yhmZq3^#;*kLsv#Eyh_BjNPa;CT_u_x3oTd1FKcpBn1g7o*pFR2TC=;M<%ACdra~c94#DK zvBltC^riO)0{&5JsEb8pL;x8I8}6ZV*$Z;yIdVD=WGq(OiqOBXf@}gm_}eg^B7ojj z5&|qI8;SsmpzOhvtyopDjI1jHm;hj6|5kLLZf?0jV7Q_gN4AP1fDBo9wFvkVhGv}H ziY}X7SW4a?TIwd6ac-*=0!WjwTP&C|FxY6u)vb#GFd;`?E1K~c%}C!WjQ}giiXy-a znvuU1eJNyOIeDcBpa=v8Kij$t0hW;kpH@MtYXX3YTI^#h6S8E%Cq@v!70qbhDvxH! zkP!|7UWK6QiKS%h?i?T8n`p*Q+t59x328Foj9>;E%~-Jw;kj6jjF>C{d`2_W zw<#mQ@*2TQg2-dcf?7={twj13A<>1O15&6+t%&;Cw`yq0!WOO@G`T;sW`kzWe zS{|-CP^In9qqNhF$iE?osjrj@RLW5g4}iWgQ|Yb(lmL^Tpf-~iuVcbUg9VgKIK&L> zNlMiVwIuqq)363VpYVTx>p!J$Bg5o?f;UVy0H5SK#Twe`9G0OmDz6eAIW{8v1^PQ%D) z*&2}p=5PRydGl5w%wRi_4}_Xqj8pS(g*tGpope~>f`DLoI1{A${U!?|t(%F0cSI1| zEW zD2CmaL+c|OhY1QE`Dnr+iUu}@IoT^{!Z}@3v)mB7K4%A%_iK3$BV0vSxnQw$kXO_$ zpS7^6_rfAzDSrcHGHRNhsXK-ORW%7EKmt${oN<%avhKskemOt<)PO>@0BsD^7; z|5I^D%cGF~tM4^HCQV!)R7|jiJgPdKY56eTT1+^ literal 0 HcmV?d00001 diff --git a/src/main/resources/supernova.mixin.json b/src/main/resources/supernova.mixin.json new file mode 100644 index 0000000..0e75706 --- /dev/null +++ b/src/main/resources/supernova.mixin.json @@ -0,0 +1,12 @@ +{ + "required": true, + "package": "net.halbear.supernova.mixin", + "refmap": "supernova.mixin-refmap.json", + "compatibilityLevel": "JAVA_8", + "client": [ + "CameraMixin" + ], + "injectors": { + "defaultRequire": 1 + } +}