From f55e6d00b9f786146c6bb39f2508262c272ac74c Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 27 Apr 2020 18:09:19 +0200 Subject: [PATCH] Some slight cleanup --- .../com/minelittlepony/unicopia/Race.java | 4 + .../unicopia/block/UBlocks.java | 206 ++++++++--------- .../minelittlepony/unicopia/item/UItems.java | 218 +++++++++--------- .../unicopia/particles/UParticles.java | 12 +- .../unicopia/structure/UStructures.java | 2 +- .../minelittlepony/unicopia/toxin/Toxic.java | 10 +- .../unicopia/toxin/Toxicity.java | 45 ++-- .../minelittlepony/unicopia/toxin/Toxin.java | 64 +++-- 8 files changed, 276 insertions(+), 285 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/Race.java b/src/main/java/com/minelittlepony/unicopia/Race.java index 3656e5c0..bcf0f2f9 100644 --- a/src/main/java/com/minelittlepony/unicopia/Race.java +++ b/src/main/java/com/minelittlepony/unicopia/Race.java @@ -35,6 +35,10 @@ public enum Race { this.earth = earth; } + public boolean hasIronGut() { + return isUsable() && this != CHANGELING; + } + public boolean isUsable() { return !isDefault(); } diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java index bd4aafde..5c6c021f 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java @@ -26,123 +26,123 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; public interface UBlocks { - CloudFarmlandBlock CLOUD_FARMLAND = register(new CloudFarmlandBlock(GasState.NORMAL.configure().build()), "cloud_farmland"); - CloudBlock CLOUD_BLOCK = register(new CloudBlock(GasState.NORMAL), "cloud_block"); - CloudBlock ENCHANTED_CLOUD_BLOCK = register(new CloudBlock(GasState.ENCHANTED), "enchanted_cloud_block"); - CloudBlock DENSE_CLOUD_BLOCK = register(new CloudBlock(GasState.DENSE), "dense_cloud_block"); + CloudFarmlandBlock CLOUD_FARMLAND = register("cloud_farmland", new CloudFarmlandBlock(GasState.NORMAL.configure().build())); + CloudBlock CLOUD_BLOCK = register("cloud_block", new CloudBlock(GasState.NORMAL)); + CloudBlock ENCHANTED_CLOUD_BLOCK = register("enchanted_cloud_block", new CloudBlock(GasState.ENCHANTED)); + CloudBlock DENSE_CLOUD_BLOCK = register("dense_cloud_block", new CloudBlock(GasState.DENSE)); - CloudStairsBlock CLOUD_STAIRS = register(new CloudStairsBlock<>(CLOUD_BLOCK.getDefaultState(), GasState.NORMAL.configure().build()), "cloud_stairs"); + CloudStairsBlock CLOUD_STAIRS = register("cloud_stairs", new CloudStairsBlock<>(CLOUD_BLOCK.getDefaultState(), GasState.NORMAL.configure().build())); - CloudSlabBlock CLOUD_SLAB = register(new CloudSlabBlock<>(CLOUD_BLOCK.getDefaultState(), GasState.NORMAL.configure().build()), "cloud_slab"); - CloudSlabBlock ENCHANTED_CLOUD_SLAB = register(new CloudSlabBlock<>(ENCHANTED_CLOUD_BLOCK.getDefaultState(), GasState.ENCHANTED.configure().build()), "enchanted_cloud_slab"); - CloudSlabBlock DENSE_CLOUD_SLAB = register(new CloudSlabBlock<>(ENCHANTED_CLOUD_BLOCK.getDefaultState(), GasState.DENSE.configure().build()), "dense_cloud_slab"); + CloudSlabBlock CLOUD_SLAB = register("cloud_slab", new CloudSlabBlock<>(CLOUD_BLOCK.getDefaultState(), GasState.NORMAL.configure().build())); + CloudSlabBlock ENCHANTED_CLOUD_SLAB = register("enchanted_cloud_slab", new CloudSlabBlock<>(ENCHANTED_CLOUD_BLOCK.getDefaultState(), GasState.ENCHANTED.configure().build())); + CloudSlabBlock DENSE_CLOUD_SLAB = register("dense_cloud_slab", new CloudSlabBlock<>(ENCHANTED_CLOUD_BLOCK.getDefaultState(), GasState.DENSE.configure().build())); - CloudDoorBlock MISTED_GLASS_DOOR = register(new CloudDoorBlock(), "misted_glass_door"); - DutchDoorBlock LIBRARY_DOOR = register(new DutchDoorBlock(FabricBlockSettings.of(Material.WOOD). - sounds(BlockSoundGroup.WOOD) - .hardness(3) - .build()), "library_door"); - DutchDoorBlock BAKERY_DOOR = register(new DutchDoorBlock(FabricBlockSettings.of(Material.WOOD) - .sounds(BlockSoundGroup.WOOD) - .hardness(3) - .build()), "bakery_door"); - DiamondDoorBlock DIAMOND_DOOR = register(new DiamondDoorBlock(), "diamond_door"); + CloudDoorBlock MISTED_GLASS_DOOR = register("misted_glass_door", new CloudDoorBlock()); + DutchDoorBlock LIBRARY_DOOR = register("library_door", new DutchDoorBlock(FabricBlockSettings.of(Material.WOOD). + sounds(BlockSoundGroup.WOOD) + .hardness(3) + .build())); + DutchDoorBlock BAKERY_DOOR = register("bakery_door", new DutchDoorBlock(FabricBlockSettings.of(Material.WOOD) + .sounds(BlockSoundGroup.WOOD) + .hardness(3) + .build())); + DiamondDoorBlock DIAMOND_DOOR = register("diamond_door", new DiamondDoorBlock()); - GemTorchBlock ENCHANTED_TORCH = register(new GemTorchBlock(FabricBlockSettings.of(Material.PART) - .noCollision() - .breakInstantly() - .ticksRandomly() - .lightLevel(1).sounds(BlockSoundGroup.GLASS).build()), "enchanted_torch"); - GemTorchBlock ENCHANTED_WALL_TORCH = register(new WallGemTorchBlock(FabricBlockSettings.of(Material.PART) - .noCollision() - .breakInstantly() - .ticksRandomly() - .lightLevel(1).sounds(BlockSoundGroup.GLASS).build()), "enchanted_wall_torch"); + GemTorchBlock ENCHANTED_TORCH = register("enchanted_torch", new GemTorchBlock(FabricBlockSettings.of(Material.PART) + .noCollision() + .breakInstantly() + .ticksRandomly() + .lightLevel(1).sounds(BlockSoundGroup.GLASS).build())); + GemTorchBlock ENCHANTED_WALL_TORCH = register("enchanted_wall_torch", new WallGemTorchBlock(FabricBlockSettings.of(Material.PART) + .noCollision() + .breakInstantly() + .ticksRandomly() + .lightLevel(1).sounds(BlockSoundGroup.GLASS).build())); - CloudAnvilBlock CLOUD_ANVIL = register(new CloudAnvilBlock(GasState.NORMAL.configure() - .strength(0.025F, 1) - .resistance(2000) - .breakByTool(FabricToolTags.SHOVELS, 0) - .ticksRandomly() - .build()), "cloud_anvil"); + CloudAnvilBlock CLOUD_ANVIL = register("cloud_anvil", new CloudAnvilBlock(GasState.NORMAL.configure() + .strength(0.025F, 1) + .resistance(2000) + .breakByTool(FabricToolTags.SHOVELS, 0) + .ticksRandomly() + .build())); - CloudFenceBlock CLOUD_FENCE = register(new CloudFenceBlock(GasState.NORMAL), "cloud_fence"); + CloudFenceBlock CLOUD_FENCE = register("cloud_fence", new CloudFenceBlock(GasState.NORMAL)); - TallCropBlock ALFALFA_CROPS = register(new TallCropBlock(FabricBlockSettings.of(Material.PLANT) - .noCollision() - .ticksRandomly() - .breakInstantly() - .sounds(BlockSoundGroup.CROP).build()), "alfalfa_crops"); + TallCropBlock ALFALFA_CROPS = register("alfalfa_crops", new TallCropBlock(FabricBlockSettings.of(Material.PLANT) + .noCollision() + .ticksRandomly() + .breakInstantly() + .sounds(BlockSoundGroup.CROP).build())); - StickBlock STICK = register(new StickBlock(FabricBlockSettings.of(Material.WOOD) - .noCollision() - .strength(0.2F, 0.2F) - .build()), "stick"); - TomatoPlantBlock TOMATO_PLANT = register(new TomatoPlantBlock(FabricBlockSettings.of(Material.PLANT) - .noCollision() - .strength(0.2F, 0.2F) - .ticksRandomly() - .lightLevel(1) - .sounds(BlockSoundGroup.WOOD) - .build()), "tomato_plant"); + StickBlock STICK = register("stick", new StickBlock(FabricBlockSettings.of(Material.WOOD) + .noCollision() + .strength(0.2F, 0.2F) + .build())); + TomatoPlantBlock TOMATO_PLANT = register("tomato_plant", new TomatoPlantBlock(FabricBlockSettings.of(Material.PLANT) + .noCollision() + .strength(0.2F, 0.2F) + .ticksRandomly() + .lightLevel(1) + .sounds(BlockSoundGroup.WOOD) + .build())); - HiveWallBlock HIVE_WALL_BLOCK = register(new HiveWallBlock(FabricBlockSettings.of(UMaterials.HIVE) - .noCollision() - .strength(10, 10) - .hardness(2) - .ticksRandomly() - .lightLevel(1) - .sounds(BlockSoundGroup.SAND) - .breakByTool(FabricToolTags.PICKAXES, 1) - .build()), "hive_wall_block"); - ChitinBlock CHITIN_SHELL_BLOCK = register(new ChitinBlock(FabricBlockSettings.of(UMaterials.CHITIN) - .hardness(50) - .strength(2000, 2000) - .build()), "chitin_shell_block"); - Block CHISELED_CHITIN_SHELL_BLOCK = register(new ChiselledChitinBlock(FabricBlockSettings.of(UMaterials.CHITIN) - .strength(50, 2000) - .build()), "chiseled_chitin_shell_block"); + HiveWallBlock HIVE_WALL_BLOCK = register("hive_wall_block", new HiveWallBlock(FabricBlockSettings.of(UMaterials.HIVE) + .noCollision() + .strength(10, 10) + .hardness(2) + .ticksRandomly() + .lightLevel(1) + .sounds(BlockSoundGroup.SAND) + .breakByTool(FabricToolTags.PICKAXES, 1) + .build())); + ChitinBlock CHITIN_SHELL_BLOCK = register("chitin_shell_block", new ChitinBlock(FabricBlockSettings.of(UMaterials.CHITIN) + .hardness(50) + .strength(2000, 2000) + .build())); + Block CHISELED_CHITIN_SHELL_BLOCK = register("chiseled_chitin_shell_block", new ChiselledChitinBlock(FabricBlockSettings.of(UMaterials.CHITIN) + .strength(50, 2000) + .build())); - SlimeDropBlock SLIME_DROP = register(new SlimeDropBlock(FabricBlockSettings.of(UMaterials.HIVE, MaterialColor.GRASS) - .ticksRandomly() - .breakInstantly() - .lightLevel(9) - .slipperiness(0.5F) - .sounds(BlockSoundGroup.SLIME) - .breakByTool(FabricToolTags.SHOVELS, 2) - .build()), "slime_drop"); - SlimeLayerBlock SLIME_LAYER = register(new SlimeLayerBlock(FabricBlockSettings.of(Material.CLAY, MaterialColor.GRASS) - .sounds(BlockSoundGroup.SLIME) - .slipperiness(0.8F) - .nonOpaque() - .build()), "slime_layer"); + SlimeDropBlock SLIME_DROP = register("slime_drop", new SlimeDropBlock(FabricBlockSettings.of(UMaterials.HIVE, MaterialColor.GRASS) + .ticksRandomly() + .breakInstantly() + .lightLevel(9) + .slipperiness(0.5F) + .sounds(BlockSoundGroup.SLIME) + .breakByTool(FabricToolTags.SHOVELS, 2) + .build())); + SlimeLayerBlock SLIME_LAYER = register("slime_layer", new SlimeLayerBlock(FabricBlockSettings.of(Material.CLAY, MaterialColor.GRASS) + .sounds(BlockSoundGroup.SLIME) + .slipperiness(0.8F) + .nonOpaque() + .build())); - Block SUGAR_BLOCK = register(new FallingBlock(FabricBlockSettings.of(Material.SAND) - .strength(10, 10) - .hardness(0.7F) - .sounds(BlockSoundGroup.SAND) - .build()), "sugar_block"); - Block APPLE_LEAVES = register(new FruitLeavesBlock(FabricBlockSettings.of(Material.LEAVES) - .strength(0.2F, 0.2F) - .ticksRandomly() - .sounds(BlockSoundGroup.GRASS) - .build()) - .growthChance(1200) - .tint(0xFFEE81) - .fruit(W -> TreeType.OAK.pickRandomStack()) - .compost(w -> new ItemStack(UItems.ROTTEN_APPLE)), "apple_leaves"); + Block SUGAR_BLOCK = register("sugar_block", new FallingBlock(FabricBlockSettings.of(Material.SAND) + .strength(10, 10) + .hardness(0.7F) + .sounds(BlockSoundGroup.SAND) + .build())); + Block APPLE_LEAVES = register("apple_leaves", new FruitLeavesBlock(FabricBlockSettings.of(Material.LEAVES) + .strength(0.2F, 0.2F) + .ticksRandomly() + .sounds(BlockSoundGroup.GRASS) + .build()) + .growthChance(1200) + .tint(0xFFEE81) + .fruit(W -> TreeType.OAK.pickRandomStack()) + .compost(w -> new ItemStack(UItems.ROTTEN_APPLE))); - SaplingBlock APPLE_SAPLING = register(new SaplingBlock( - new CustomSaplingGenerator(5, Blocks.OAK_LOG.getDefaultState(), APPLE_LEAVES.getDefaultState()), - FabricBlockSettings.of(Material.WOOD) - .noCollision() - .ticksRandomly() - .breakInstantly() - .sounds(BlockSoundGroup.GRASS) - .build()) {}, "apple_sapling"); + SaplingBlock APPLE_SAPLING = register("apple_sapling", new SaplingBlock( + new CustomSaplingGenerator(5, Blocks.OAK_LOG.getDefaultState(), APPLE_LEAVES.getDefaultState()), + FabricBlockSettings.of(Material.WOOD) + .noCollision() + .ticksRandomly() + .breakInstantly() + .sounds(BlockSoundGroup.GRASS) + .build()) {}); - static T register(T block, String name) { + static T register(String name, T block) { return Registry.BLOCK.add(new Identifier("unicopia", name), block); } diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java index 0db6cbc2..42c99904 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -30,150 +30,150 @@ import net.minecraft.util.registry.Registry; public interface UItems { - AppleItem GREEN_APPLE = register(new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)), "green_apple"); - AppleItem SWEET_APPLE = register(new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)), "sweet_apple"); - AppleItem SOUR_APPLE = register(new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)), "sour_apple"); + AppleItem GREEN_APPLE = register("green_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); + AppleItem SWEET_APPLE = register("sweet_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); + AppleItem SOUR_APPLE = register("sour_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); - ZapAppleItem ZAP_APPLE = register(new ZapAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.ZAP_APPLE)), "zap_apple"); + ZapAppleItem ZAP_APPLE = register("zap_apple", new ZapAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.ZAP_APPLE))); - AppleItem ROTTEN_APPLE = register(new RottenAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)), "rotten_apple"); - AppleItem COOKED_ZAP_APPLE = register(new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)), "cooked_zap_apple"); + AppleItem ROTTEN_APPLE = register("rotten_apple", new RottenAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); + AppleItem COOKED_ZAP_APPLE = register("cooked_zap_apple", new AppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); - Item CLOUD_MATTER = register(new Item(new Settings().group(ItemGroup.MATERIALS)), "cloud_matter"); - Item DEW_DROP = register(new Item(new Settings().group(ItemGroup.MATERIALS)), "dew_drop"); + Item CLOUD_MATTER = register("cloud_matter", new Item(new Settings().group(ItemGroup.MATERIALS))); + Item DEW_DROP = register("dew_drop", new Item(new Settings().group(ItemGroup.MATERIALS))); - CloudPlacerItem RACING_CLOUD_SPAWNER = register(new CloudPlacerItem(UEntities.RACING_CLOUD), "racing_cloud_spawner"); - CloudPlacerItem CONSTRUCTION_CLOUD_SPAWNER = register(new CloudPlacerItem(UEntities.CONSTRUCTION_CLOUD), "construction_cloud_spawner"); - CloudPlacerItem WILD_CLOUD_SPAWNER = register(new CloudPlacerItem(UEntities.WILD_CLOUD), "wild_cloud_spawner"); + CloudPlacerItem RACING_CLOUD_SPAWNER = register("racing_cloud_spawner", new CloudPlacerItem(UEntities.RACING_CLOUD)); + CloudPlacerItem CONSTRUCTION_CLOUD_SPAWNER = register("construction_cloud_spawner", new CloudPlacerItem(UEntities.CONSTRUCTION_CLOUD)); + CloudPlacerItem WILD_CLOUD_SPAWNER = register("wild_cloud_spawner", new CloudPlacerItem(UEntities.WILD_CLOUD)); - Item CLOUD_BLOCK = register(new PredicatedBlockItem(UBlocks.CLOUD_BLOCK, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS), "cloud_block"); - Item ENCHANTED_CLOUD_BLOCK = register(new PredicatedBlockItem(UBlocks.ENCHANTED_CLOUD_BLOCK, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS), "enchanted_cloud_block"); - Item DENSE_CLOUD_BLOCK = register(new PredicatedBlockItem(UBlocks.DENSE_CLOUD_BLOCK, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS), "dense_cloud_block"); + Item CLOUD_BLOCK = register("cloud_block", new PredicatedBlockItem(UBlocks.CLOUD_BLOCK, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS)); + Item ENCHANTED_CLOUD_BLOCK = register("enchanted_cloud_block", new PredicatedBlockItem(UBlocks.ENCHANTED_CLOUD_BLOCK, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS)); + Item DENSE_CLOUD_BLOCK = register("dense_cloud_block", new PredicatedBlockItem(UBlocks.DENSE_CLOUD_BLOCK, new Settings().group(ItemGroup.MATERIALS), PLAYER_PEGASUS)); - Item CLOUD_STAIRS = register(new PredicatedBlockItem(UBlocks.CLOUD_STAIRS, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS), "cloud_stairs"); - Item CLOUD_FENCE = register(new PredicatedBlockItem(UBlocks.CLOUD_FENCE, new Settings().group(ItemGroup.DECORATIONS), PLAYER_PEGASUS), "cloud_fence"); - Item CLOUD_ANVIL = register(new PredicatedBlockItem(UBlocks.CLOUD_ANVIL, new Settings().group(ItemGroup.DECORATIONS), PLAYER_PEGASUS), "cloud_anvil"); + Item CLOUD_STAIRS = register("cloud_stairs", new PredicatedBlockItem(UBlocks.CLOUD_STAIRS, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); + Item CLOUD_FENCE = register("cloud_fence", new PredicatedBlockItem(UBlocks.CLOUD_FENCE, new Settings().group(ItemGroup.DECORATIONS), PLAYER_PEGASUS)); + Item CLOUD_ANVIL = register("cloud_anvil", new PredicatedBlockItem(UBlocks.CLOUD_ANVIL, new Settings().group(ItemGroup.DECORATIONS), PLAYER_PEGASUS)); - Item MUSIC_DISC_CRUSADE = register(createRecord(USounds.RECORD_CRUSADE), "music_disc_crusade"); - Item MUSIC_DISC_PET = register(createRecord(USounds.RECORD_PET), "music_disc_pet"); - Item MUSIC_DISC_POPULAR = register(createRecord(USounds.RECORD_POPULAR), "music_disc_popular"); - Item MUSIC_DISC_FUNK = register(createRecord(USounds.RECORD_FUNK), "music_disc_funk"); + Item MUSIC_DISC_CRUSADE = register("music_disc_crusade", USounds.RECORD_CRUSADE); + Item MUSIC_DISC_PET = register("music_disc_pet", USounds.RECORD_PET); + Item MUSIC_DISC_POPULAR = register("music_disc_popular", USounds.RECORD_POPULAR); + Item MUSIC_DISC_FUNK = register("music_disc_funk", USounds.RECORD_FUNK); - Item HIVE_WALL_BLOCK = register(new BlockItem(UBlocks.HIVE_WALL_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS)), "hive_wall_block"); - Item CHITIN_SHELL = register(new Item(new Settings().group(ItemGroup.MATERIALS)), "chitin_shell"); - Item CHITIN_SHELL_BLOCK = register(new BlockItem(UBlocks.CHITIN_SHELL_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS)), "chitin_shell_block"); - Item CHISELED_CHITIN_SHELL_BLOCK = register(new BlockItem(UBlocks.CHISELED_CHITIN_SHELL_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS)), "chiseled_chitin_shell_block"); - Item SLIME_DROP = register(new BlockItem(UBlocks.SLIME_DROP, new Settings().group(ItemGroup.MATERIALS)), "slime_drop"); - Item SLIME_LAYER = register(new BlockItem(UBlocks.SLIME_LAYER, new Settings().group(ItemGroup.DECORATIONS)), "slime_layer"); + Item HIVE_WALL_BLOCK = register("hive_wall_block", new BlockItem(UBlocks.HIVE_WALL_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); + Item CHITIN_SHELL = register("chitin_shell", new Item(new Settings().group(ItemGroup.MATERIALS))); + Item CHITIN_SHELL_BLOCK = register("chitin_shell_block", new BlockItem(UBlocks.CHITIN_SHELL_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); + Item CHISELED_CHITIN_SHELL_BLOCK = register("chiseled_chitin_shell_block", new BlockItem(UBlocks.CHISELED_CHITIN_SHELL_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); + Item SLIME_DROP = register("slime_drop", new BlockItem(UBlocks.SLIME_DROP, new Settings().group(ItemGroup.MATERIALS))); + Item SLIME_LAYER = register("slime_layer", new BlockItem(UBlocks.SLIME_LAYER, new Settings().group(ItemGroup.DECORATIONS))); - Item MISTED_GLASS_DOOR = register(new TallBlockItem(UBlocks.MISTED_GLASS_DOOR, new Settings().group(ItemGroup.REDSTONE)), "misted_glass_door"); - Item LIBRARY_DOOR = register(new TallBlockItem(UBlocks.LIBRARY_DOOR, new Settings().group(ItemGroup.REDSTONE)), "library_door"); - Item BAKERY_DOOR = register(new TallBlockItem(UBlocks.BAKERY_DOOR, new Settings().group(ItemGroup.REDSTONE)), "bakery_door"); - Item DIAMOND_DOOR = register(new TallBlockItem(UBlocks.DIAMOND_DOOR, new Settings().group(ItemGroup.REDSTONE)), "diamond_door"); + Item MISTED_GLASS_DOOR = register("misted_glass_door", new TallBlockItem(UBlocks.MISTED_GLASS_DOOR, new Settings().group(ItemGroup.REDSTONE))); + Item LIBRARY_DOOR = register("library_door", new TallBlockItem(UBlocks.LIBRARY_DOOR, new Settings().group(ItemGroup.REDSTONE))); + Item BAKERY_DOOR = register("bakery_door", new TallBlockItem(UBlocks.BAKERY_DOOR, new Settings().group(ItemGroup.REDSTONE))); + Item DIAMOND_DOOR = register("diamond_door", new TallBlockItem(UBlocks.DIAMOND_DOOR, new Settings().group(ItemGroup.REDSTONE))); - Item SUGAR_BLOCK = register(new BlockItem(UBlocks.SUGAR_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS)), "sugar_block"); + Item SUGAR_BLOCK = register("sugar_block", new BlockItem(UBlocks.SUGAR_BLOCK, new Settings().group(ItemGroup.BUILDING_BLOCKS))); - Item CLOUD_SLAB = register(new PredicatedBlockItem(UBlocks.CLOUD_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS), "cloud_slab"); - Item ENCHANTED_CLOUD_SLAB = register(new PredicatedBlockItem(UBlocks.ENCHANTED_CLOUD_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS), "enchanted_cloud_slab"); - Item DENSE_CLOUD_SLAB = register(new PredicatedBlockItem(UBlocks.DENSE_CLOUD_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS), "dense_cloud_slab"); + Item CLOUD_SLAB = register("cloud_slab", new PredicatedBlockItem(UBlocks.CLOUD_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); + Item ENCHANTED_CLOUD_SLAB = register("enchanted_cloud_slab", new PredicatedBlockItem(UBlocks.ENCHANTED_CLOUD_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); + Item DENSE_CLOUD_SLAB = register("dense_cloud_slab", new PredicatedBlockItem(UBlocks.DENSE_CLOUD_SLAB, new Settings().group(ItemGroup.BUILDING_BLOCKS), PLAYER_PEGASUS)); - MagicGemItem GEM = register(new MagicGemItem(new Settings().maxCount(16).group(ItemGroup.BREWING)), "gem"); - MagicGemItem CORRUPTED_GEM = register(new CursedMagicGemItem(new Settings().maxCount(16).group(ItemGroup.BREWING)), "corrupted_gem"); + MagicGemItem GEM = register("gem", new MagicGemItem(new Settings().maxCount(16).group(ItemGroup.BREWING))); + MagicGemItem CORRUPTED_GEM = register("corrupted_gem", new CursedMagicGemItem(new Settings().maxCount(16).group(ItemGroup.BREWING))); - BagOfHoldingItem BAG_OF_HOLDING = register(new BagOfHoldingItem(new Settings().group(ItemGroup.TRANSPORTATION).rarity(Rarity.UNCOMMON).maxCount(1)), "bag_of_holding"); - AlicornAmuletItem ALICORN_AMULET = register(new AlicornAmuletItem(new Settings().group(ItemGroup.COMBAT).rarity(Rarity.RARE).maxCount(1)), "alicorn_amulet"); + BagOfHoldingItem BAG_OF_HOLDING = register("bag_of_holding", new BagOfHoldingItem(new Settings().group(ItemGroup.TRANSPORTATION).rarity(Rarity.UNCOMMON).maxCount(1))); + AlicornAmuletItem ALICORN_AMULET = register("alicorn_amulet", new AlicornAmuletItem(new Settings().group(ItemGroup.COMBAT).rarity(Rarity.RARE).maxCount(1))); - SpellbookItem SPELLBOOK = register(new SpellbookItem(new Item.Settings().maxCount(1).group(ItemGroup.BREWING)), "spellbook"); - Item MEADOW_BROOK_STAFF = register(new StaffItem(new Settings().group(ItemGroup.TOOLS).rarity(Rarity.UNCOMMON).maxCount(1).maxDamage(2)), "meadow_brook_staff"); - Item REMEMBERANCE_STAFF = register(new EnchantedStaffItem(new Settings().group(ItemGroup.TOOLS).rarity(Rarity.UNCOMMON).maxCount(1), new ScorchSpell()), "remembrance_staff"); + SpellbookItem SPELLBOOK = register("spellbook", new SpellbookItem(new Item.Settings().maxCount(1).group(ItemGroup.BREWING))); + Item MEADOW_BROOK_STAFF = register("meadow_brook_staff", new StaffItem(new Settings().group(ItemGroup.TOOLS).rarity(Rarity.UNCOMMON).maxCount(1).maxDamage(2))); + Item REMEMBERANCE_STAFF = register("remembrance_staff", new EnchantedStaffItem(new Settings().group(ItemGroup.TOOLS).rarity(Rarity.UNCOMMON).maxCount(1), new ScorchSpell())); - Item SPEAR = register(new SpearItem(new Settings().group(ItemGroup.TOOLS).maxCount(1).maxDamage(500)), "spear"); + Item SPEAR = register("spear", new SpearItem(new Settings().group(ItemGroup.TOOLS).maxCount(1).maxDamage(500))); - MossItem MOSS = register(new MossItem(new Settings().group(ItemGroup.FOOD).food(UFoodComponents.RANDOM_FOLIAGE)), "moss"); + MossItem MOSS = register("moss", new MossItem(new Settings().group(ItemGroup.FOOD).food(UFoodComponents.RANDOM_FOLIAGE))); - Item ALFALFA_SEEDS = register(new AliasedBlockItem(UBlocks.ALFALFA_CROPS, new Settings().group(ItemGroup.MATERIALS).food(UFoodComponents.ALFALFA_SEEDS)), "alfalfa_seeds"); - Item ALFALFA_LEAVES = register(new Item(new Settings().group(ItemGroup.FOOD).food(UFoodComponents.ALFALFA_LEAVES)), "alfalfa_leaves"); + Item ALFALFA_SEEDS = register("alfalfa_seeds", new AliasedBlockItem(UBlocks.ALFALFA_CROPS, new Settings().group(ItemGroup.MATERIALS).food(UFoodComponents.ALFALFA_SEEDS))); + Item ALFALFA_LEAVES = register("alfalfa_leaves", new Item(new Settings().group(ItemGroup.FOOD).food(UFoodComponents.ALFALFA_LEAVES))); - Item ENCHANTED_TORCH = register(new WallStandingBlockItem(UBlocks.ENCHANTED_TORCH, UBlocks.ENCHANTED_WALL_TORCH, new Settings().group(ItemGroup.DECORATIONS)), "enchanted_torch"); + Item ENCHANTED_TORCH = register("enchanted_torch", new WallStandingBlockItem(UBlocks.ENCHANTED_TORCH, UBlocks.ENCHANTED_WALL_TORCH, new Settings().group(ItemGroup.DECORATIONS))); - Item CEREAL = register(new SugaryItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.CEREAL) - .maxCount(1) - .recipeRemainder(Items.BOWL), 1), "cereal"); - Item BOOP_O_ROOPS = register(new SugaryItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.SUGAR) - .maxCount(1) - .recipeRemainder(Items.BOWL), 110), "boop_o_roops"); + Item CEREAL = register("cereal", new SugaryItem(new Settings() + .group(ItemGroup.FOOD) + .food(UFoodComponents.CEREAL) + .maxCount(1) + .recipeRemainder(Items.BOWL), 1)); + Item BOOP_O_ROOPS = register("boop_o_roops", new SugaryItem(new Settings() + .group(ItemGroup.FOOD) + .food(UFoodComponents.SUGAR) + .maxCount(1) + .recipeRemainder(Items.BOWL), 110)); - TomatoSeedsItem TOMATO_SEEDS = register(new TomatoSeedsItem(new Settings().group(ItemGroup.MATERIALS)), "tomato_seeds"); - TomatoItem TOMATO = register(new TomatoItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.TOMATO)), "tomato"); - RottenTomatoItem ROTTEN_TOMATO = register(new RottenTomatoItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.BAD_TOMATO)), "rotten_tomato"); + TomatoSeedsItem TOMATO_SEEDS = register("tomato_seeds", new TomatoSeedsItem(new Settings().group(ItemGroup.MATERIALS))); + TomatoItem TOMATO = register("tomato", new TomatoItem(new Settings() + .group(ItemGroup.FOOD) + .food(UFoodComponents.TOMATO))); + RottenTomatoItem ROTTEN_TOMATO = register("rotten_tomato", new RottenTomatoItem(new Settings() + .group(ItemGroup.FOOD) + .food(UFoodComponents.BAD_TOMATO))); - TomatoItem CLOUDSDALE_TOMATO = register(new TomatoItem(new Settings() - .rarity(Rarity.UNCOMMON) - .group(ItemGroup.FOOD) - .food(UFoodComponents.GOOD_TOMATO)), "cloudsdale_tomato"); - RottenTomatoItem ROTTEN_CLOUDSDALE_TOMATO = register(new RottenTomatoItem(new Settings() - .group(ItemGroup.FOOD) - .rarity(Rarity.UNCOMMON) - .food(UFoodComponents.BAD_TOMATO)), "rotten_cloudsdale_tomato"); + TomatoItem CLOUDSDALE_TOMATO = register("cloudsdale_tomato", new TomatoItem(new Settings() + .rarity(Rarity.UNCOMMON) + .group(ItemGroup.FOOD) + .food(UFoodComponents.GOOD_TOMATO))); + RottenTomatoItem ROTTEN_CLOUDSDALE_TOMATO = register("rotten_cloudsdale_tomato", new RottenTomatoItem(new Settings() + .group(ItemGroup.FOOD) + .rarity(Rarity.UNCOMMON) + .food(UFoodComponents.BAD_TOMATO))); - Item APPLE_SEEDS = register(new BlockItem(UBlocks.APPLE_SAPLING, new Settings().group(ItemGroup.DECORATIONS)), "apple_seeds"); - Item APPLE_LEAVES = register(new BlockItem(UBlocks.APPLE_LEAVES, new Settings().group(ItemGroup.DECORATIONS)), "apple_leaves"); + Item APPLE_SEEDS = register("apple_seeds", new BlockItem(UBlocks.APPLE_SAPLING, new Settings().group(ItemGroup.DECORATIONS))); + Item APPLE_LEAVES = register("apple_leaves", new BlockItem(UBlocks.APPLE_LEAVES, new Settings().group(ItemGroup.DECORATIONS))); - Item DAFFODIL_DAISY_SANDWICH = register(new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.DAFODIL_DAISY_SANDWICH), UseAction.EAT, Toxicity::fromStack, Toxin.FOOD), "daffodil_daisy_sandwich"); - Item HAY_BURGER = register(new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.HAY_BURGER), UseAction.EAT, Toxicity::fromStack, Toxin.FOOD), "hay_burger"); - Item HAY_FRIES = register(new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.HAY_FRIES), UseAction.EAT, Toxicity.SAFE, Toxin.FOOD), "hay_fries"); - Item SALAD = register(new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.SALAD) - .recipeRemainder(Items.BOWL), UseAction.EAT, Toxicity::fromStack, Toxin.FOOD), "salad"); + Item DAFFODIL_DAISY_SANDWICH = register("daffodil_daisy_sandwich", new ToxicItem(new Settings() + .group(ItemGroup.FOOD) + .food(UFoodComponents.DAFODIL_DAISY_SANDWICH), UseAction.EAT, Toxicity::fromStack, Toxin.FOOD)); + Item HAY_BURGER = register("hay_burger", new ToxicItem(new Settings() + .group(ItemGroup.FOOD) + .food(UFoodComponents.HAY_BURGER), UseAction.EAT, Toxicity::fromStack, Toxin.FOOD)); + Item HAY_FRIES = register("hay_fries", new ToxicItem(new Settings() + .group(ItemGroup.FOOD) + .food(UFoodComponents.HAY_FRIES), UseAction.EAT, Toxicity.SAFE, Toxin.FOOD)); + Item SALAD = register("salad", new ToxicItem(new Settings() + .group(ItemGroup.FOOD) + .food(UFoodComponents.SALAD) + .recipeRemainder(Items.BOWL), UseAction.EAT, Toxicity::fromStack, Toxin.FOOD)); - Item WHEAT_WORMS = register(new ToxicItem(new Settings() - .group(ItemGroup.MISC) - .food(UFoodComponents.WORMS), UseAction.EAT, Toxicity.SEVERE, Toxin.FOOD), "wheat_worms"); - Item MUG = register(new Item(new Settings().group(ItemGroup.MATERIALS)), "mug"); - Item CIDER = register(new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .food(UFoodComponents.SALAD) - .recipeRemainder(MUG), UseAction.DRINK, Toxicity.MILD, Toxin.FOOD), "apple_cider"); - Item JUICE = register(new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .recipeRemainder(Items.GLASS_BOTTLE) - .food(UFoodComponents.JUICE), UseAction.DRINK, Toxicity.SAFE, Toxin.FOOD), "juice"); - Item BURNED_JUICE = register(new ToxicItem(new Settings() - .group(ItemGroup.FOOD) - .recipeRemainder(Items.GLASS_BOTTLE) - .food(UFoodComponents.BURNED_JUICE), UseAction.DRINK, Toxicity.FAIR, Toxin.FOOD), "burned_juice"); + Item WHEAT_WORMS = register("wheat_worms", new ToxicItem(new Settings() + .group(ItemGroup.MISC) + .food(UFoodComponents.WORMS), UseAction.EAT, Toxicity.SEVERE, Toxin.FOOD)); + Item MUG = register("mug", new Item(new Settings().group(ItemGroup.MATERIALS))); + Item CIDER = register("apple_cider", new ToxicItem(new Settings() + .group(ItemGroup.FOOD) + .food(UFoodComponents.SALAD) + .recipeRemainder(MUG), UseAction.DRINK, Toxicity.MILD, Toxin.FOOD)); + Item JUICE = register("juice", new ToxicItem(new Settings() + .group(ItemGroup.FOOD) + .recipeRemainder(Items.GLASS_BOTTLE) + .food(UFoodComponents.JUICE), UseAction.DRINK, Toxicity.SAFE, Toxin.FOOD)); + Item BURNED_JUICE = register("burned_juice", new ToxicItem(new Settings() + .group(ItemGroup.FOOD) + .recipeRemainder(Items.GLASS_BOTTLE) + .food(UFoodComponents.BURNED_JUICE), UseAction.DRINK, Toxicity.FAIR, Toxin.FOOD)); - Item CLOUD_SPAWN_EGG = register(new SpawnEggItem(UEntities.CLOUD, 0x4169e1, 0x7fff00, new Settings().group(ItemGroup.MISC)), "cloud_spawn_egg"); - Item BUTTERFLY_SPAWN_EGG = register(new SpawnEggItem(UEntities.BUTTERFLY, 0x222200, 0xaaeeff, new Settings().group(ItemGroup.MISC)), "butterfly_spawn_egg"); + Item CLOUD_SPAWN_EGG = register("cloud_spawn_egg", new SpawnEggItem(UEntities.CLOUD, 0x4169e1, 0x7fff00, new Settings().group(ItemGroup.MISC))); + Item BUTTERFLY_SPAWN_EGG = register("butterfly_spawn_egg", new SpawnEggItem(UEntities.BUTTERFLY, 0x222200, 0xaaeeff, new Settings().group(ItemGroup.MISC))); - static T register(T item, String name) { + static T register(String name, T item) { if (item instanceof BlockItem) { ((BlockItem)item).appendBlocks(Item.BLOCK_ITEMS, item); } return Registry.ITEM.add(new Identifier("unicopia", name), item); } - static MusicDiscItem createRecord(SoundEvent sound) { - return new MusicDiscItem(1, sound, new Settings() + static MusicDiscItem register(String name, SoundEvent sound) { + return register(name, new MusicDiscItem(1, sound, new Settings() .maxCount(1) .group(ItemGroup.MISC) .rarity(Rarity.RARE) - ) {}; + ) {}); } static void bootstrap() { diff --git a/src/main/java/com/minelittlepony/unicopia/particles/UParticles.java b/src/main/java/com/minelittlepony/unicopia/particles/UParticles.java index b94bb561..ba9c5235 100644 --- a/src/main/java/com/minelittlepony/unicopia/particles/UParticles.java +++ b/src/main/java/com/minelittlepony/unicopia/particles/UParticles.java @@ -8,15 +8,15 @@ import net.minecraft.util.registry.Registry; public interface UParticles { - ParticleType UNICORN_MAGIC = register(FabricParticleTypes.complex(MagicParticleEffect.UNICORN_FACTORY), "unicorn_magic"); - DefaultParticleType CHANGELING_MAGIC = register(FabricParticleTypes.simple(), "changeling_magic"); + ParticleType UNICORN_MAGIC = register("unicorn_magic", FabricParticleTypes.complex(MagicParticleEffect.UNICORN_FACTORY)); + DefaultParticleType CHANGELING_MAGIC = register("changeling_magic", FabricParticleTypes.simple()); - DefaultParticleType RAIN_DROPS = register(FabricParticleTypes.simple(), "rain_drops"); + DefaultParticleType RAIN_DROPS = register("rain_drops", FabricParticleTypes.simple()); - DefaultParticleType SPHERE = register(FabricParticleTypes.simple(true), "sphere"); - DefaultParticleType DISK = register(FabricParticleTypes.simple(), "disk"); + DefaultParticleType SPHERE = register("sphere", FabricParticleTypes.simple(true)); + DefaultParticleType DISK = register("disk", FabricParticleTypes.simple()); - static > T register(T type, String name) { + static > T register(String name, T type) { return Registry.register(Registry.PARTICLE_TYPE, new Identifier("unicopia", name), type); } } diff --git a/src/main/java/com/minelittlepony/unicopia/structure/UStructures.java b/src/main/java/com/minelittlepony/unicopia/structure/UStructures.java index 1fa1ade1..325d12f9 100644 --- a/src/main/java/com/minelittlepony/unicopia/structure/UStructures.java +++ b/src/main/java/com/minelittlepony/unicopia/structure/UStructures.java @@ -21,7 +21,7 @@ public interface UStructures { static > F feature(String id, F feature) { return Registry.register(Registry.FEATURE, new Identifier("unicopia", id), feature); - } + } static void bootstrap() { } } diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/Toxic.java b/src/main/java/com/minelittlepony/unicopia/toxin/Toxic.java index 12aa273f..02acd6c6 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/Toxic.java +++ b/src/main/java/com/minelittlepony/unicopia/toxin/Toxic.java @@ -47,9 +47,9 @@ public class Toxic { public ItemStack finishUsing(ItemStack stack, World world, LivingEntity entity) { if (entity instanceof PlayerEntity) { Race race = Pony.of((PlayerEntity)entity).getSpecies(); - Toxicity toxicity = (race.isDefault() || race == Race.CHANGELING) ? Toxicity.LETHAL : this.toxicity.apply(stack); + Toxicity t = race.hasIronGut() ? toxicity.apply(stack) : Toxicity.LETHAL; - toxin.addSecondaryEffects((PlayerEntity)entity, toxicity, stack); + toxin.afflict((PlayerEntity)entity, t, stack); } return new ItemStack(item.getRecipeRemainder()); @@ -58,10 +58,10 @@ public class Toxic { public TypedActionResult use(World world, PlayerEntity player, Hand hand, Supplier> sup) { Race race = Pony.of(player).getSpecies(); - if (race.isDefault() || race == Race.CHANGELING) { - return new TypedActionResult<>(ActionResult.FAIL, player.getStackInHand(hand)); + if (race.hasIronGut()) { + return sup.get(); } - return sup.get(); + return new TypedActionResult<>(ActionResult.FAIL, player.getStackInHand(hand)); } } diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/Toxicity.java b/src/main/java/com/minelittlepony/unicopia/toxin/Toxicity.java index 13eba557..005d9e1e 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/Toxicity.java +++ b/src/main/java/com/minelittlepony/unicopia/toxin/Toxicity.java @@ -5,15 +5,18 @@ import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; +import com.minelittlepony.unicopia.item.UEffects; + import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; -public enum Toxicity { +public enum Toxicity implements Toxin { SAFE(0, 0), MILD(1, 160), FAIR(1, 30), @@ -23,8 +26,7 @@ public enum Toxicity { private final int level; private final int duration; - private static final Map REGISTRY; - private static final Toxicity[] values = values(); + private static final Map REGISTRY = Arrays.stream(values()).collect(Collectors.toMap(Toxicity::name, Function.identity())); Toxicity(int level, int duration) { this.level = level; @@ -47,10 +49,6 @@ public enum Toxicity { return this == LETHAL; } - public StatusEffectInstance getPoisonEffect() { - return new StatusEffectInstance(isMild() ? StatusEffects.NAUSEA : StatusEffects.POISON, duration, level); - } - public String getTranslationKey() { return String.format("toxicity.%s.name", name().toLowerCase()); } @@ -61,6 +59,19 @@ public enum Toxicity { return text; } + @Override + public void afflict(PlayerEntity player, Toxicity toxicity, ItemStack stack) { + if (toxicWhenRaw()) { + player.addStatusEffect(new StatusEffectInstance(isMild() ? StatusEffects.NAUSEA : StatusEffects.POISON, duration, level)); + } + + if (isLethal()) { + player.addStatusEffect(new StatusEffectInstance(UEffects.FOOD_POISONING, 300, 7, false, false)); + } else if (toxicWhenCooked()) { + WEAK_NAUSEA.afflict(player, toxicity, stack); + } + } + public static Toxicity fromStack(ItemStack stack) { if (stack.hasTag()) { CompoundTag tag = stack.getSubTag("toxicity"); @@ -70,24 +81,4 @@ public enum Toxicity { } return SAFE; } - - @Deprecated - public static Toxicity byMetadata(int metadata) { - return values[metadata % values.length]; - } - - @Deprecated - public static String[] getVariants(String key) { - String[] result = new String[values.length]; - - for (int i = 0; i < result.length; i++) { - result[i] = values[i].name() + key; - } - - return result; - } - - static { - REGISTRY = Arrays.stream(values()).collect(Collectors.toMap(Toxicity::name, Function.identity())); - } } diff --git a/src/main/java/com/minelittlepony/unicopia/toxin/Toxin.java b/src/main/java/com/minelittlepony/unicopia/toxin/Toxin.java index c3c07618..0385753b 100644 --- a/src/main/java/com/minelittlepony/unicopia/toxin/Toxin.java +++ b/src/main/java/com/minelittlepony/unicopia/toxin/Toxin.java @@ -1,7 +1,6 @@ package com.minelittlepony.unicopia.toxin; -import com.minelittlepony.unicopia.item.UEffects; - +import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.player.PlayerEntity; @@ -9,43 +8,40 @@ import net.minecraft.item.ItemStack; @FunctionalInterface public interface Toxin { - Toxin DAMAGE = (player, toxicity, stack) -> { - if (player.world.random.nextInt(30) == 0) { - player.addStatusEffect(new StatusEffectInstance(StatusEffects.INSTANT_DAMAGE, 1, 1, false, false)); - } - }; - Toxin RADIOACTIVITY = (player, toxicity, stack) -> { - if (player.world.random.nextInt(30) == 0) { - player.addStatusEffect(new StatusEffectInstance(StatusEffects.GLOWING, 10, 1, false, false)); - } - }; - Toxin NAUSEA = (player, toxicity, stack) -> { - player.addStatusEffect(new StatusEffectInstance(StatusEffects.NAUSEA, 30, 1, false, false)); - }; - Toxin STRENGTH = (player, toxicity, stack) -> { - player.addStatusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, 30, 1, false, false)); - }; - Toxin BLINDNESS = (player, toxicity, stack) -> { - player.addStatusEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, 30, 1, false, false)); - }; - Toxin FOOD = (player, toxicity, stack) -> { - if (toxicity.toxicWhenRaw()) { - player.addStatusEffect(toxicity.getPoisonEffect()); - } + Predicate ONE_EVERY_30_TICKS = (player, toxicity, stack) -> player.world.random.nextInt(30) == 0; - if (toxicity.isLethal()) { - player.addStatusEffect(new StatusEffectInstance(UEffects.FOOD_POISONING, 300, 7, false, false)); - } else if (toxicity.toxicWhenCooked()) { - player.addStatusEffect(new StatusEffectInstance(StatusEffects.NAUSEA, 3, 1, false, false)); - } - }; + Toxin DAMAGE = ONE_EVERY_30_TICKS.then(of(StatusEffects.INSTANT_DAMAGE, 1, 1)); + Toxin RADIOACTIVITY = ONE_EVERY_30_TICKS.then(of(StatusEffects.GLOWING, 10, 1)); + Toxin NAUSEA = of(StatusEffects.NAUSEA, 30, 1); + Toxin WEAK_NAUSEA = of(StatusEffects.NAUSEA, 3, 1); + Toxin STRENGTH = of(StatusEffects.STRENGTH, 30, 1); + Toxin BLINDNESS = of(StatusEffects.BLINDNESS, 30, 1); + Toxin FOOD = (player, toxicity, stack) -> toxicity.afflict(player, toxicity, stack); - void addSecondaryEffects(PlayerEntity player, Toxicity toxicity, ItemStack stack); + void afflict(PlayerEntity player, Toxicity toxicity, ItemStack stack); default Toxin and(Toxin other) { + Toxin self = this; return (player, toxicity, stack) -> { - other.addSecondaryEffects(player, toxicity, stack); - this.addSecondaryEffects(player, toxicity, stack); + self.afflict(player, toxicity, stack); + other.afflict(player, toxicity, stack); }; } + + static Toxin of(StatusEffect effect, int duration, int amplifier) { + return (player, toxicity, stack) -> { + player.addStatusEffect(new StatusEffectInstance(effect, duration, amplifier, false, false)); + }; + } + + interface Predicate { + boolean test(PlayerEntity player, Toxicity toxicity, ItemStack stack); + default Toxin then(Toxin toxin) { + return (player, toxicity, stack) -> { + if (test(player, toxicity, stack)) { + toxin.afflict(player, toxicity, stack); + } + }; + } + } }