package com.thebrokenrail.energonrelics; import com.thebrokenrail.energonrelics.block.BlockBreakerBlock; import com.thebrokenrail.energonrelics.block.CreativeEnergySourceBlock; import com.thebrokenrail.energonrelics.block.DefensiveLaserBlock; import com.thebrokenrail.energonrelics.block.HolographicSkyBlock; import com.thebrokenrail.energonrelics.block.InfuserBlock; import com.thebrokenrail.energonrelics.block.PhaseShifterBlock; import com.thebrokenrail.energonrelics.block.lightning.LightningRodBaseBlock; import com.thebrokenrail.energonrelics.block.forcefield.ForcefieldProjectorBlock; import com.thebrokenrail.energonrelics.block.forcefield.laser.IndustrialLaserProjectorBlock; import com.thebrokenrail.energonrelics.block.forcefield.laser.IndustrialLaserBlock; import com.thebrokenrail.energonrelics.block.forcefield.beam.RepulsorBeamBlock; import com.thebrokenrail.energonrelics.block.forcefield.beam.TractorBeamBlock; import com.thebrokenrail.energonrelics.block.forcefield.beam.TractorBeamProjectorBlock; import com.thebrokenrail.energonrelics.block.forcefield.ForcefieldBlock; import com.thebrokenrail.energonrelics.block.lightning.LightningRodBlock; import com.thebrokenrail.energonrelics.block.misc.VeridiumBlockBlock; import com.thebrokenrail.energonrelics.block.portal.EnergizedObsidianBlock; import com.thebrokenrail.energonrelics.block.portal.EnergyBeamBlock; import com.thebrokenrail.energonrelics.block.portal.EnergyPortalBlock; import com.thebrokenrail.energonrelics.block.portal.EnergyProjectorBlock; import com.thebrokenrail.energonrelics.block.structure.StructureGeneratorBlock; import com.thebrokenrail.energonrelics.block.misc.ThermalGlassBlock; import com.thebrokenrail.energonrelics.block.battery.ActiveBatteryControllerBlock; import com.thebrokenrail.energonrelics.block.reactor.ReactorControllerBlock; import com.thebrokenrail.energonrelics.block.reactor.ReactorCoreBlock; import com.thebrokenrail.energonrelics.block.reactor.ReactorInputBlock; import com.thebrokenrail.energonrelics.block.misc.ThermalCasingBlock; import com.thebrokenrail.energonrelics.block.battery.PassiveBatteryControllerBlock; import com.thebrokenrail.energonrelics.block.battery.BatteryCoreBlock; import com.thebrokenrail.energonrelics.block.EnergonLightBlock; import com.thebrokenrail.energonrelics.block.SolarPanelBlock; import com.thebrokenrail.energonrelics.block.SwitchBlock; import com.thebrokenrail.energonrelics.api.block.SimpleBlock; import com.thebrokenrail.energonrelics.feature.CustomFeatures; import com.thebrokenrail.energonrelics.item.MultimeterItem; import com.thebrokenrail.energonrelics.item.NetworkChipItem; import com.thebrokenrail.energonrelics.potion.CustomPotions; import com.thebrokenrail.energonrelics.recipe.DuplicateNetworkChipRecipe; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.block.Material; import net.minecraft.block.MaterialColor; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.recipe.SpecialRecipeSerializer; import net.minecraft.sound.SoundCategory; import net.minecraft.sound.SoundEvent; import net.minecraft.util.Identifier; import net.minecraft.util.Rarity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; public final class EnergonRelics implements ModInitializer { public static final String NAMESPACE = "energonrelics"; public static final class Items { static { if (ItemGroup.BUILDING_BLOCKS == null) { throw new RuntimeException("Items Loaded Too Early"); } } public static final NetworkChipItem NETWORK_CHIP_ITEM; public static final ItemGroup ITEM_GROUP = FabricItemGroupBuilder.build(new Identifier(NAMESPACE, "item_group"), () -> new ItemStack(Items.NETWORK_CHIP_ITEM)); static { NETWORK_CHIP_ITEM = new NetworkChipItem(); } public static final MultimeterItem MULTIMETER = new MultimeterItem(); public static final Item VERIDIUM_ORB = new Item(new Item.Settings().group(ITEM_GROUP).rarity(Rarity.UNCOMMON)); public static final Item VERIDIUM_POWDER = new Item(new Item.Settings().group(ITEM_GROUP)); public static final Item DEFENSIVE_LASER_CORE = new Item(new Item.Settings().group(ITEM_GROUP)); public static final Item CIRCUIT_BOARD = new Item(new Item.Settings().group(ITEM_GROUP)); public static final Item VERIDIUM_INGOT = new Item(new Item.Settings().group(ITEM_GROUP)); } public static final class Blocks { public static final EnergonLightBlock ENERGON_LIGHT = new EnergonLightBlock(); public static final SolarPanelBlock SOLAR_PANEL = new SolarPanelBlock(); public static final SwitchBlock SWITCH = new SwitchBlock(); public static final ThermalCasingBlock THERMAL_CASING = new ThermalCasingBlock(); public static final ThermalGlassBlock THERMAL_GLASS = new ThermalGlassBlock(); public static final BatteryCoreBlock BATTERY_CORE = new BatteryCoreBlock(); public static final PassiveBatteryControllerBlock PASSIVE_BATTERY_CONTROLLER = new PassiveBatteryControllerBlock(); public static final ActiveBatteryControllerBlock ACTIVE_BATTERY_CONTROLLER = new ActiveBatteryControllerBlock(); public static final ReactorCoreBlock REACTOR_CORE = new ReactorCoreBlock(); public static final ReactorInputBlock REACTOR_INPUT = new ReactorInputBlock(); public static final ReactorControllerBlock REACTOR_CONTROLLER = new ReactorControllerBlock(); public static final SimpleBlock VERIDIUM_ORE = new SimpleBlock(FabricBlockSettings.of(Material.STONE).requiresTool().strength(3f, 3f)); public static final SimpleBlock VERIDIUM_BLOCK = new VeridiumBlockBlock(); public static final DefensiveLaserBlock DEFENSIVE_LASER = new DefensiveLaserBlock(); public static final BlockBreakerBlock BLOCK_BREAKER = new BlockBreakerBlock(); public static final LightningRodBaseBlock LIGHTNING_ROD_BASE = new LightningRodBaseBlock(); public static final LightningRodBlock LIGHTNING_ROD = new LightningRodBlock(); public static final ForcefieldBlock FORCEFIELD = new ForcefieldBlock(); public static final ForcefieldProjectorBlock FORCEFIELD_PROJECTOR = new ForcefieldProjectorBlock(); public static final TractorBeamBlock TRACTOR_BEAM = new TractorBeamBlock(); public static final RepulsorBeamBlock REPULSOR_BEAM = new RepulsorBeamBlock(); public static final TractorBeamProjectorBlock TRACTOR_BEAM_PROJECTOR = new TractorBeamProjectorBlock(); public static final IndustrialLaserBlock INDUSTRIAL_LASER = new IndustrialLaserBlock(); public static final IndustrialLaserProjectorBlock INDUSTRIAL_LASER_PROJECTOR = new IndustrialLaserProjectorBlock(); public static final CreativeEnergySourceBlock CREATIVE_ENERGY_SOURCE = new CreativeEnergySourceBlock(); public static final HolographicSkyBlock HOLOGRAPHIC_SKY = new HolographicSkyBlock(); public static final InfuserBlock INFUSER = new InfuserBlock(); public static final EnergizedObsidianBlock ENERGIZED_OBSIDIAN = new EnergizedObsidianBlock(); public static final EnergyBeamBlock ENERGY_BEAM = new EnergyBeamBlock(); public static final EnergyPortalBlock ENERGY_PORTAL = new EnergyPortalBlock(); public static final EnergyProjectorBlock ENERGY_PROJECTOR = new EnergyProjectorBlock(); public static final PhaseShifterBlock PHASE_SHIFTER = new PhaseShifterBlock(); } public static final class Extras { public static final SpecialRecipeSerializer DUPLICATE_NETWORK_CHIP_RECIPE = new SpecialRecipeSerializer<>(DuplicateNetworkChipRecipe::new); public static final Material FIELD_MATERIAL = new Material.Builder(MaterialColor.CLEAR).replaceable().build(); private static final Identifier BEEP_SOUND_ID = new Identifier(NAMESPACE, "beep"); private static final SoundEvent BEEP_SOUND_EVENT = new SoundEvent(BEEP_SOUND_ID); public static void playBeep(World world, BlockPos pos) { if (!world.isClient()) { world.playSound(null, pos, BEEP_SOUND_EVENT, SoundCategory.BLOCKS, 0.3f, 1f); } } } @Override public void onInitialize() { Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "veridium_ingot"), Items.VERIDIUM_INGOT); Blocks.VERIDIUM_ORE.register("veridium_ore"); Blocks.VERIDIUM_BLOCK.register("veridium_block"); CustomFeatures.register(); Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "veridium_powder"), Items.VERIDIUM_POWDER); Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "veridium_orb"), Items.VERIDIUM_ORB); Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "network_chip"), Items.NETWORK_CHIP_ITEM); Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "multimeter"), Items.MULTIMETER); Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "circuit_board"), Items.CIRCUIT_BOARD); Blocks.ENERGON_LIGHT.register("energon_light"); Blocks.SOLAR_PANEL.register("solar_panel"); Blocks.SWITCH.register("switch"); Blocks.THERMAL_CASING.register("thermal_casing"); Blocks.THERMAL_GLASS.register("thermal_glass"); Blocks.BATTERY_CORE.register("battery_core"); Blocks.PASSIVE_BATTERY_CONTROLLER.register("passive_battery_controller"); Blocks.ACTIVE_BATTERY_CONTROLLER.register("active_battery_controller"); Blocks.REACTOR_CORE.register("reactor_core"); Blocks.REACTOR_INPUT.register("reactor_input"); Blocks.REACTOR_CONTROLLER.register("reactor_controller"); Registry.register(Registry.ITEM, new Identifier(NAMESPACE, "defensive_laser_core"), Items.DEFENSIVE_LASER_CORE); Blocks.DEFENSIVE_LASER.register("defensive_laser"); StructureGeneratorBlock.registerBlocks(); Blocks.BLOCK_BREAKER.register("block_breaker"); CustomPotions.register(); Blocks.LIGHTNING_ROD_BASE.register("lightning_rod_base"); Blocks.LIGHTNING_ROD.register("lightning_rod"); Registry.register(Registry.RECIPE_SERIALIZER, new Identifier(NAMESPACE, "duplicate_network_chip"), Extras.DUPLICATE_NETWORK_CHIP_RECIPE); Blocks.FORCEFIELD.register("forcefield"); Blocks.FORCEFIELD_PROJECTOR.register("forcefield_projector"); Blocks.TRACTOR_BEAM.register("tractor_beam"); Blocks.REPULSOR_BEAM.register("repulsor_beam"); Blocks.TRACTOR_BEAM_PROJECTOR.register("tractor_beam_projector"); Blocks.INDUSTRIAL_LASER.register("industrial_laser"); Blocks.INDUSTRIAL_LASER_PROJECTOR.register("industrial_laser_projector"); Registry.register(Registry.SOUND_EVENT, Extras.BEEP_SOUND_ID, Extras.BEEP_SOUND_EVENT); Blocks.CREATIVE_ENERGY_SOURCE.register("creative_energy_source"); Blocks.HOLOGRAPHIC_SKY.register("holographic_sky"); Blocks.INFUSER.register("infuser"); Blocks.ENERGIZED_OBSIDIAN.register("energized_obsidian"); Blocks.ENERGY_BEAM.register("energy_beam"); Blocks.ENERGY_PORTAL.register("energy_portal"); Blocks.ENERGY_PROJECTOR.register("energy_projector"); Blocks.PHASE_SHIFTER.register("phase_shifter"); } }