From 5ad33e4a0c548486ec7ebd362cdd3959a7d3fcb2 Mon Sep 17 00:00:00 2001 From: mrsterner Date: Fri, 27 Oct 2023 22:28:03 +0200 Subject: [PATCH 1/5] there we go, all expect worlgen --- lib/lodestone-1.20.1-1.4.21.jar | Bin 0 -> 580066 bytes .../curiosities/armor/SoulHunterArmorItem.java | 3 ++- .../armor/SoulStainedSteelArmorItem.java | 2 +- .../curios/soulward/CurioMagebaneBelt.java | 1 - .../common/recipe/SpiritFocusingRecipe.java | 1 - 5 files changed, 3 insertions(+), 4 deletions(-) create mode 100644 lib/lodestone-1.20.1-1.4.21.jar diff --git a/lib/lodestone-1.20.1-1.4.21.jar b/lib/lodestone-1.20.1-1.4.21.jar new file mode 100644 index 0000000000000000000000000000000000000000..3ed24c70247093421d7312007ac61b9900fbcdf9 GIT binary patch literal 580066 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

}*H6RA*`)JsyH3V!4f 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

Uc5`6il7og^I+5aa`6gK{kNhbo?l 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�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�gF+e&HQfGeI0Q^{oW$i2*2r#Dka&kSirwCI8u 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

nmm7b{*$MVo$)U1`Jo<4{EMFSf70sP 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 z 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

OUeRLFG~@O2ReWe3Vk2^z)GGlEwp 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 createExtraAttributes(EquipmentSlot slot) { + ImmutableMultimap.Builder builder = new ImmutableMultimap.Builder<>(); - UUID uuid = ARMOR_MODIFIER_UUID_PER_TYPE[slot.getIndex()]; + UUID uuid = ARMOR_MODIFIER_UUID_PER_TYPE.get(slot.getIndex()); builder.put(LodestoneAttributeRegistry.MAGIC_PROFICIENCY.get(), new AttributeModifier(uuid, "Magic Proficiency", 2f, AttributeModifier.Operation.ADDITION)); return builder; } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java index 5dcc8f3c0..584ccba07 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java @@ -29,7 +29,7 @@ public SoulStainedSteelArmorItem(ArmorItem.Type slot, Properties builder) { @Override public ImmutableMultimap.Builder createExtraAttributes(EquipmentSlot slot) { ImmutableMultimap.Builder builder = new ImmutableMultimap.Builder<>(); - UUID uuid = ARMOR_MODIFIER_UUID_PER_SLOT[slot.getIndex()]; + UUID uuid = ARMOR_MODIFIER_UUID_PER_TYPE.get(slot.getIndex()); builder.put(AttributeRegistry.SOUL_WARD_CAP.get(), new AttributeModifier(uuid, "Soul Ward Cap", 3f, AttributeModifier.Operation.ADDITION)); return builder; } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/soulward/CurioMagebaneBelt.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/soulward/CurioMagebaneBelt.java index 2a333685a..74a2470d6 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/soulward/CurioMagebaneBelt.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/soulward/CurioMagebaneBelt.java @@ -9,7 +9,6 @@ import com.sammy.malum.core.systems.item.IMalumEventResponderItem; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageTypes; -import net.minecraft.world.damagesource.EntityDamageSource; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.player.Player; diff --git a/src/main/java/com/sammy/malum/common/recipe/SpiritFocusingRecipe.java b/src/main/java/com/sammy/malum/common/recipe/SpiritFocusingRecipe.java index 4360beebf..ca11fe396 100644 --- a/src/main/java/com/sammy/malum/common/recipe/SpiritFocusingRecipe.java +++ b/src/main/java/com/sammy/malum/common/recipe/SpiritFocusingRecipe.java @@ -13,7 +13,6 @@ import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.Level; import net.minecraftforge.common.crafting.CraftingHelper; -import net.minecraftforge.registries.ForgeRegistryEntry; import team.lodestar.lodestone.systems.recipe.ILodestoneRecipe; import javax.annotation.Nullable; From 53157518786f97b478534688c4f8364b52d543ab Mon Sep 17 00:00:00 2001 From: mrsterner Date: Sat, 28 Oct 2023 12:51:41 +0200 Subject: [PATCH 2/5] fwe --- src/main/java/com/sammy/malum/MalumMod.java | 81 ++--- .../cosmetic/ArmorSkinRenderingData.java | 16 +- .../cosmetic/PrideArmorSkinRenderingData.java | 11 +- .../SimpleArmorSkinRenderingData.java | 6 +- .../malum/client/model/HeadOverlayModel.java | 38 +-- .../client/model/SoulHunterArmorModel.java | 315 +++++++++--------- .../model/SoulStainedSteelArmorModel.java | 152 ++++----- .../sammy/malum/client/model/TailModel.java | 50 +-- .../sammy/malum/client/model/TopHatModel.java | 55 +-- .../model/cosmetic/GenericArmorModel.java | 54 +-- .../model/cosmetic/GenericSlimArmorModel.java | 54 +-- .../client/model/cosmetic/ScarfModel.java | 52 +-- .../ancient/AncientSoulHunterArmorModel.java | 54 +-- .../AncientSoulStainedSteelArmorModel.java | 54 +-- .../cosmetic/pride/PridewearArmorModel.java | 80 ++--- .../pride/SlimPridewearArmorModel.java | 80 ++--- .../cosmetic/risky/CommandoArmorModel.java | 82 ++--- .../cosmetic/risky/ExecutionerArmorModel.java | 97 +++--- .../ultrakill/UltrakillMachineArmorModel.java | 254 +++++++------- .../spiritflame/SpiritFlameParticle.java | 2 +- .../spiritflame/SpiritFlameParticleType.java | 2 +- .../block/MalumItemHolderRenderer.java | 5 +- .../renderer/block/MoteOfManaRenderer.java | 37 +- .../renderer/block/SoulVialRenderer.java | 2 +- .../renderer/block/SpiritAltarRenderer.java | 6 +- .../block/SpiritCatalyzerRenderer.java | 2 - .../block/SpiritCrucibleRenderer.java | 1 - .../renderer/block/SpiritJarRenderer.java | 8 +- .../renderer/block/TotemPoleRenderer.java | 11 +- .../curio/TokenOfGratitudeRenderer.java | 1 - .../renderer/curio/TopHatCurioRenderer.java | 27 +- .../entity/EthericNitrateEntityRenderer.java | 31 +- .../entity/FloatingItemEntityRenderer.java | 63 ++-- .../entity/NightTerrorEntityRenderer.java | 31 +- .../entity/ScytheBoomerangEntityRenderer.java | 2 - .../entity/VividNitrateEntityRenderer.java | 29 +- .../renderer/item/SpiritJarItemRenderer.java | 3 +- .../screen/codex/AbstractMalumScreen.java | 15 +- .../codex/AbstractProgressionCodexScreen.java | 16 +- .../screen/codex/ArcanaCodexHelper.java | 54 +-- .../screen/codex/ArcanaProgressionScreen.java | 40 ++- .../client/screen/codex/EntryScreen.java | 26 +- .../screen/codex/VoidProgressionScreen.java | 43 ++- .../screen/codex/objects/BookObject.java | 3 +- .../screen/codex/objects/EntryObject.java | 13 +- .../screen/codex/objects/IconObject.java | 17 +- .../codex/objects/ImportantEntryObject.java | 12 +- .../codex/objects/MinorEntryObject.java | 12 +- .../screen/codex/objects/RiteEntryObject.java | 9 +- .../codex/objects/VanishingEntryObject.java | 3 +- .../client/screen/codex/pages/BookPage.java | 13 +- .../screen/codex/pages/CraftingBookPage.java | 7 +- .../codex/pages/HeadlineTextItemPage.java | 12 +- .../screen/codex/pages/HeadlineTextPage.java | 12 +- .../screen/codex/pages/SmeltingBookPage.java | 18 +- .../codex/pages/SpiritCruciblePage.java | 16 +- .../codex/pages/SpiritInfusionPage.java | 15 +- .../screen/codex/pages/SpiritRepairPage.java | 15 +- .../codex/pages/SpiritRiteRecipePage.java | 45 ++- .../codex/pages/SpiritRiteTextPage.java | 11 +- .../codex/pages/SpiritTransmutationPage.java | 28 +- .../client/screen/codex/pages/TextPage.java | 9 +- .../container/SpiritPouchContainerScreen.java | 1 - .../WeaversWorkbenchContainerScreen.java | 45 +-- .../block/blight/BlightedSoilBlock.java | 42 ++- .../block/blight/BlightedSoulwoodBlock.java | 2 +- .../obelisk/ObeliskComponentBlock.java | 3 +- .../obelisk/RunewoodObeliskBlockEntity.java | 31 +- .../spirit_altar/IAltarAccelerator.java | 2 +- .../spirit_altar/SpiritAltarBlock.java | 11 +- .../spirit_altar/SpiritAltarBlockEntity.java | 75 +++-- .../spirit_crucible/ICrucibleAccelerator.java | 2 + .../SpiritCatalyzerComponentBlock.java | 4 +- .../SpiritCatalyzerCoreBlockEntity.java | 6 +- .../SpiritCrucibleComponentBlock.java | 1 + .../SpiritCrucibleCoreBlock.java | 3 +- .../SpiritCrucibleCoreBlockEntity.java | 10 +- .../tablet/TwistedTabletBlockEntity.java | 4 +- .../curiosities/totem/TotemBaseBlock.java | 7 +- .../totem/TotemBaseBlockEntity.java | 8 +- .../totem/TotemPoleBlockEntity.java | 7 +- .../WeaversWorkbenchBlockEntity.java | 59 ++-- .../WeaversWorkbenchItemHandler.java | 8 +- .../weeping_well/PrimordialSoupBlock.java | 74 ++-- .../weeping_well/VoidConduitBlockEntity.java | 95 +++--- .../common/block/ether/EtherBlockEntity.java | 11 +- .../common/block/ether/EtherBrazierBlock.java | 21 +- .../mana_mote/MoteOfManaBlockEntity.java | 8 +- .../block/mana_mote/SoulstoneBlock.java | 33 +- .../block/mana_mote/SpiritMoteBlock.java | 19 +- .../block/nature/MalumSaplingBlock.java | 1 - .../block/nature/SapFilledLogBlock.java | 4 +- .../nature/soulwood/SoulwoodGrowthBlock.java | 3 - .../storage/IMalumSpecialItemAccessPoint.java | 7 +- .../storage/MalumItemHolderBlockEntity.java | 16 +- .../storage/jar/SpiritJarBlockEntity.java | 14 +- .../pedestal/ItemPedestalBlockEntity.java | 16 +- .../pedestal/WoodItemPedestalBlock.java | 6 +- .../storage/stand/ItemStandBlockEntity.java | 28 +- .../block/storage/vial/SoulVialBlock.java | 9 +- .../common/block/the_device/TheDevice.java | 2 +- .../common/block/the_device/TheVessel.java | 8 +- .../capability/MalumPlayerDataCapability.java | 1 - .../container/SpiritPouchContainer.java | 2 +- .../container/WeaversWorkbenchContainer.java | 30 +- .../malum/common/effect/AqueousAura.java | 2 +- .../common/effect/CorruptedAerialAura.java | 2 +- .../common/effect/CorruptedInfernalAura.java | 2 +- .../malum/common/effect/GluttonyEffect.java | 4 +- .../malum/common/effect/InfernalAura.java | 4 +- .../common/effect/WickedIntentEffect.java | 25 +- .../malum/common/entity/FloatingEntity.java | 8 +- .../common/entity/FloatingItemEntity.java | 2 +- .../boomerang/ScytheBoomerangEntity.java | 54 +-- .../night_terror/NightTerrorSeekerEntity.java | 48 +-- .../entity/nitrate/AbstractNitrateEntity.java | 20 +- .../entity/nitrate/EthericNitrateEntity.java | 39 +-- .../entity/nitrate/VividNitrateEntity.java | 44 ++- .../entity/spirit/SpiritItemEntity.java | 41 ++- .../common/item/EncyclopediaArcanaItem.java | 8 +- .../curios/CurioTokenOfGratitude.java | 34 +- .../item/cosmetic/curios/CurioTopHat.java | 4 +- .../common/item/cosmetic/skins/ArmorSkin.java | 14 +- .../item/cosmetic/skins/PrideArmorSkin.java | 10 +- .../cosmetic/skins/UltrakillArmorSkin.java | 12 +- .../skins/ancient/AncientClothArmorSkin.java | 16 +- .../skins/ancient/AncientMetalArmorSkin.java | 16 +- .../skins/risk_of_rain/CommandoArmorSkin.java | 16 +- .../risk_of_rain/ExecutionerArmorSkin.java | 16 +- .../item/curiosities/SoulStaveItem.java | 1 - .../item/curiosities/SpiritPouchItem.java | 4 +- .../curiosities/armor/MalumArmorItem.java | 14 +- .../armor/SoulHunterArmorItem.java | 44 ++- .../armor/SoulStainedSteelArmorItem.java | 37 +- .../curiosities/curios/CurioGildedBelt.java | 5 +- .../curiosities/curios/CurioGildedRing.java | 5 +- .../curios/CurioOrnateNecklace.java | 5 +- .../curiosities/curios/CurioOrnateRing.java | 5 +- .../curiosities/curios/MalumCurioItem.java | 16 +- .../alchemical/CurioAlchemicalRing.java | 32 +- .../curios/alchemical/CurioCurativeRing.java | 11 +- .../curios/alchemical/CurioRingOfProwess.java | 4 +- .../curios/misc/CurioHarmonyNecklace.java | 6 +- .../curios/misc/CurioNarrowNecklace.java | 10 +- .../curios/misc/CurioWaterNecklace.java | 9 +- .../prospector/CurioDemolitionistRing.java | 2 +- .../curios/prospector/CurioHoarderRing.java | 2 +- .../prospector/CurioProspectorBelt.java | 3 +- .../curios/rotten/CurioStarvedBelt.java | 26 +- .../curios/rotten/CurioVoraciousRing.java | 11 +- .../curios/soulward/CurioMagebaneBelt.java | 9 +- .../curios/spirit/CurioArcaneSpoilRing.java | 10 +- .../curios/spirit/CurioMirrorNecklace.java | 12 +- .../curios/weeping/CurioGrowingFleshRing.java | 4 +- .../weeping/CurioGruesomeSatiationRing.java | 4 +- .../weeping/CurioHiddenBladeNecklace.java | 16 +- .../curios/weeping/CurioWatcherNecklace.java | 4 +- .../nitrate/EthericNitrateItem.java | 12 +- .../curiosities/nitrate/VividNitrateItem.java | 14 +- .../curiosities/weapons/MagicScytheItem.java | 1 + .../curiosities/weapons/MalumScytheItem.java | 2 +- .../unique/MephiticEdgeScytheItem.java | 4 +- .../weapons/unique/TyrvingItem.java | 4 +- .../common/item/ether/EtherBrazierItem.java | 16 +- .../malum/common/item/ether/EtherItem.java | 16 +- .../common/item/ether/EtherTorchItem.java | 12 +- .../item/impetus/CrackedImpetusItem.java | 1 + .../item/spirit/FusedConsciousnessItem.java | 5 +- .../common/item/spirit/SoulVialItem.java | 2 +- .../common/item/spirit/SpiritJarItem.java | 1 + .../common/item/spirit/SpiritShardItem.java | 5 +- .../common/item/spirit/TunedOpticItem.java | 20 +- .../common/packets/ParticleEffectPacket.java | 28 +- .../common/packets/VoidRejectionPacket.java | 1 - .../ItemAbsorbParticleEffectPacket.java | 9 +- .../SuccessfulSoulHarvestParticlePacket.java | 28 +- .../base/BlockBasedParticleEffectPacket.java | 6 +- .../PositionBasedParticleEffectPacket.java | 4 +- .../ColorBasedBlockParticleEffectPacket.java | 6 +- .../color/ColorBasedParticleEffectPacket.java | 4 +- .../SpiritBasedBlockParticleEffectPacket.java | 24 +- .../SpiritBasedParticleEffectPacket.java | 20 +- .../altar/AltarConsumeParticlePacket.java | 32 +- .../altar/AltarCraftParticlePacket.java | 30 +- .../blight/BlightMistParticlePacket.java | 54 +-- .../BlightTransformItemParticlePacket.java | 59 ++-- .../nitrate/EthericNitrateParticlePacket.java | 42 +-- .../VividNitrateBounceParticlePacket.java | 13 +- .../rite/AerialBlockFallRiteEffectPacket.java | 35 +- .../InfernalAccelerationRiteEffectPacket.java | 36 +- .../InfernalExtinguishRiteEffectPacket.java | 27 +- .../rite/SacredMistRiteEffectPacket.java | 35 +- .../SpiritRiteActivationEffectPacket.java | 36 +- .../generic/BlockSparkleParticlePacket.java | 36 +- .../MajorEntityEffectParticlePacket.java | 5 +- .../TotemPoleActivationEffectPacket.java | 34 +- .../common/recipe/FavorOfTheVoidRecipe.java | 8 +- .../common/recipe/SpiritFocusingRecipe.java | 2 +- .../common/recipe/SpiritInfusionRecipe.java | 2 +- .../common/recipe/SpiritRepairRecipe.java | 2 +- .../recipe/vanilla/INodeSmeltingRecipe.java | 2 +- .../vanilla/MetalNodeBlastingRecipe.java | 1 - .../vanilla/MetalNodeSmeltingRecipe.java | 4 +- .../recipe/vanilla/NodeCookingSerializer.java | 78 ++--- .../malum/common/sound/BlightedSoundType.java | 4 +- .../common/sound/QuartzClusterSoundType.java | 2 +- .../common/spiritrite/AerialRiteType.java | 2 +- .../common/spiritrite/AqueousRiteType.java | 2 +- .../common/spiritrite/ArcaneRiteType.java | 8 +- .../common/spiritrite/EarthenRiteType.java | 2 +- .../common/spiritrite/InfernalRiteType.java | 8 +- .../common/spiritrite/SacredRiteType.java | 35 +- .../common/spiritrite/WickedRiteType.java | 25 +- .../greater/EldritchAerialRiteType.java | 55 +-- .../greater/EldritchAqueousRiteType.java | 31 +- .../greater/EldritchEarthenRiteType.java | 2 +- .../greater/EldritchInfernalRiteType.java | 39 ++- .../greater/EldritchSacredRiteType.java | 31 +- .../greater/EldritchWickedRiteType.java | 2 +- .../common/worldevent/ActiveBlightEvent.java | 26 +- .../worldevent/TotemCreatedBlightEvent.java | 2 +- .../common/worldgen/RareEarthsGeode.java | 28 +- .../common/worldgen/RunewoodTreeFeature.java | 5 +- .../common/worldgen/SoulwoodTreeFeature.java | 7 +- .../common/worldgen/WeepingWellFeature.java | 9 +- .../malum/compability/jei/JEIHandler.java | 26 +- .../SpiritFocusingRecipeCategory.java | 7 +- .../SpiritInfusionRecipeCategory.java | 7 +- .../SpiritRepairRecipeCategory.java | 16 +- .../categories/SpiritRiteRecipeCategory.java | 8 +- .../SpiritTransmutationRecipeCategory.java | 5 +- .../com/sammy/malum/config/ClientConfig.java | 8 +- .../com/sammy/malum/config/CommonConfig.java | 96 +++--- .../malum/core/events/ClientSetupEvents.java | 2 - .../malum/core/events/RuntimeEvents.java | 10 +- .../sammy/malum/core/events/SetupEvents.java | 5 - .../core/handlers/EsotericReapingHandler.java | 3 +- .../handlers/MalumResourcePackHandler.java | 66 ++-- .../core/handlers/MissingMappingHandler.java | 6 - .../malum/core/handlers/SoulDataHandler.java | 1 - .../core/handlers/SoulHarvestHandler.java | 2 +- .../malum/core/handlers/SoulWardHandler.java | 8 +- .../core/handlers/TouchOfDarknessHandler.java | 60 ++-- .../sammy/malum/core/helper/SpiritHelper.java | 9 +- .../listeners/ReapingDataReloadListener.java | 1 - .../listeners/SpiritDataReloadListener.java | 41 ++- .../malum/core/systems/item/IVoidItem.java | 10 +- .../core/systems/recipe/SpiritWithCount.java | 4 +- .../core/systems/rites/AuraRiteEffect.java | 4 +- .../rites/BlockAffectingRiteEffect.java | 2 +- .../rites/EntityAffectingRiteEffect.java | 4 +- .../core/systems/rites/MalumRiteType.java | 12 +- .../systems/spirit/MalumEntitySpiritData.java | 2 +- .../core/systems/spirit/MalumSpiritType.java | 40 +-- .../systems/spirit/SpiritTypeBuilder.java | 11 +- .../systems/spirit/SpiritTypeProperty.java | 96 +++--- .../java/com/sammy/malum/data/MalumLang.java | 2 +- .../com/sammy/malum/data/MalumRecipes.java | 204 ++++++------ .../malum/data/MalumWorldgenProvider.java | 24 ++ .../data/block/MalumBlockLootTables.java | 22 +- .../data/block/MalumBlockStateSmithTypes.java | 29 +- .../malum/data/block/MalumBlockStates.java | 41 ++- .../malum/data/block/MalumBlockTags.java | 22 +- .../data/item/MalumItemModelSmithTypes.java | 34 +- .../malum/data/item/MalumItemModels.java | 47 +-- .../sammy/malum/data/item/MalumItemTags.java | 1 - .../recipe/MalumSpiritFocusingRecipes.java | 1 - .../recipe/MalumSpiritInfusionRecipes.java | 35 +- .../MalumSpiritTransmutationRecipes.java | 113 ++++--- .../MalumVanillaRecipeReplacements.java | 48 +-- .../data/recipe/MalumVoidFavorRecipes.java | 17 +- .../builder/SpiritFocusingRecipeBuilder.java | 2 +- .../builder/SpiritInfusionRecipeBuilder.java | 2 +- .../builder/SpiritRepairRecipeBuilder.java | 4 +- .../builder/VoidFavorRecipeBuilder.java | 1 - .../MetalNodeCookingRecipeBuilder.java | 196 +++++------ .../StackedMalumCookingRecipeBuilder.java | 242 +++++++------- .../com/sammy/malum/mixin/ExplosionMixin.java | 1 - .../malum/mixin/FishingHookEntityMixin.java | 2 +- .../com/sammy/malum/mixin/ItemStackMixin.java | 4 +- .../malum/registry/client/ModelRegistry.java | 4 +- .../registry/client/ParticleRegistry.java | 4 +- .../registry/common/AttributeRegistry.java | 2 +- .../registry/common/ContainerRegistry.java | 2 +- .../malum/registry/common/PacketRegistry.java | 32 +- .../common/ParticleEffectTypeRegistry.java | 19 +- .../malum/registry/common/SoundRegistry.java | 11 +- .../registry/common/SpiritTypeRegistry.java | 25 +- .../common/block/BlockEntityRegistry.java | 31 +- .../registry/common/block/BlockRegistry.java | 112 ++++--- .../common/block/BlockTagRegistry.java | 2 - .../common/block/WoodTypeRegistry.java | 5 - .../common/entity/EntityRegistry.java | 51 +-- .../common/item/ArmorSkinRegistry.java | 29 +- .../registry/common/item/ArmorTiers.java | 54 ++- .../registry/common/item/CurioRegistry.java | 20 +- .../common/item/EnchantmentRegistry.java | 5 +- .../registry/common/item/ItemRegistry.java | 149 ++++++--- .../registry/common/item/ItemTagRegistry.java | 1 - .../malum/registry/common/item/ItemTiers.java | 41 +-- .../common/item/tabs/CreativeTabRegistry.java | 120 ++----- .../recipe/RecipeSerializerRegistry.java | 8 +- .../common/recipe/RecipeTypeRegistry.java | 33 +- .../worldgen/ConfiguredFeatureRegistry.java | 10 + .../common/worldgen/FeatureRegistry.java | 13 +- .../worldgen/PlacedFeatureRegistry.java | 9 + .../ItemCrumbleParticleEffects.java | 35 +- .../visual_effects/ParticleEffectSpawner.java | 10 +- .../visual_effects/ScreenParticleEffects.java | 34 +- .../visual_effects/SparkParticleEffects.java | 26 +- .../SpiritAltarParticleEffects.java | 46 +-- .../visual_effects/SpiritLightSpecs.java | 26 +- .../networked/ParticleEffectType.java | 23 +- .../SpiritMoteCreationParticleEffect.java | 27 +- .../altar/SpiritAltarCraftParticleEffect.java | 13 +- .../SpiritAltarEatItemParticleEffect.java | 22 +- .../blight/BlightingMistParticleEffect.java | 42 +-- .../networked/data/ColorEffectData.java | 23 +- .../networked/data/NBTEffectData.java | 4 +- .../networked/data/PositionEffectData.java | 8 +- .../generic/DrippingSmokeParticleEffect.java | 34 +- .../generic/HexingSmokeParticleEffect.java | 33 +- .../generic/RisingSparklesParticleEffect.java | 27 +- .../WeepingWellReactionParticleEffect.java | 37 +- .../has_structure/weeping_well_biomes.json | 6 + .../ore_blazing_quartz.json | 18 + .../configured_feature/ore_brilliant.json | 27 ++ .../ore_natural_quartz.json | 27 ++ .../ore_soulstone_surface.json | 18 + .../ore_soulstone_underground.json | 27 ++ .../placed_feature/ore_blazing_quartz.json | 27 ++ .../placed_feature/ore_brilliant.json | 27 ++ .../placed_feature/ore_natural_quartz.json | 27 ++ .../placed_feature/ore_soulstone_lower.json | 27 ++ .../placed_feature/ore_soulstone_upper.json | 27 ++ .../worldgen/structure/weeping_well.json | 22 ++ .../worldgen/structure_set/weeping_well.json | 14 + .../worldgen/template_pool/weeping_well.json | 14 + 338 files changed, 4287 insertions(+), 3895 deletions(-) create mode 100644 src/main/java/com/sammy/malum/data/MalumWorldgenProvider.java create mode 100644 src/main/java/com/sammy/malum/registry/common/worldgen/ConfiguredFeatureRegistry.java create mode 100644 src/main/java/com/sammy/malum/registry/common/worldgen/PlacedFeatureRegistry.java create mode 100644 src/main/resources/data/malum/tags/worldgen/biome/has_structure/weeping_well_biomes.json create mode 100644 src/main/resources/data/malum/worldgen/configured_feature/ore_blazing_quartz.json create mode 100644 src/main/resources/data/malum/worldgen/configured_feature/ore_brilliant.json create mode 100644 src/main/resources/data/malum/worldgen/configured_feature/ore_natural_quartz.json create mode 100644 src/main/resources/data/malum/worldgen/configured_feature/ore_soulstone_surface.json create mode 100644 src/main/resources/data/malum/worldgen/configured_feature/ore_soulstone_underground.json create mode 100644 src/main/resources/data/malum/worldgen/placed_feature/ore_blazing_quartz.json create mode 100644 src/main/resources/data/malum/worldgen/placed_feature/ore_brilliant.json create mode 100644 src/main/resources/data/malum/worldgen/placed_feature/ore_natural_quartz.json create mode 100644 src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_lower.json create mode 100644 src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_upper.json create mode 100644 src/main/resources/data/malum/worldgen/structure/weeping_well.json create mode 100644 src/main/resources/data/malum/worldgen/structure_set/weeping_well.json create mode 100644 src/main/resources/data/malum/worldgen/template_pool/weeping_well.json diff --git a/src/main/java/com/sammy/malum/MalumMod.java b/src/main/java/com/sammy/malum/MalumMod.java index d482044f2..bbe2f0c2e 100644 --- a/src/main/java/com/sammy/malum/MalumMod.java +++ b/src/main/java/com/sammy/malum/MalumMod.java @@ -1,47 +1,49 @@ package com.sammy.malum; -import com.sammy.malum.compability.create.*; -import com.sammy.malum.compability.farmersdelight.*; -import com.sammy.malum.compability.tetra.*; -import com.sammy.malum.config.*; -import com.sammy.malum.data.*; -import com.sammy.malum.data.block.*; -import com.sammy.malum.data.item.*; +import com.sammy.malum.compability.create.CreateCompat; +import com.sammy.malum.compability.farmersdelight.FarmersDelightCompat; +import com.sammy.malum.config.ClientConfig; +import com.sammy.malum.config.CommonConfig; +import com.sammy.malum.data.MalumLang; +import com.sammy.malum.data.MalumRecipes; +import com.sammy.malum.data.MalumWorldgenProvider; +import com.sammy.malum.data.block.MalumBlockLootTables; +import com.sammy.malum.data.block.MalumBlockStates; +import com.sammy.malum.data.block.MalumBlockTags; +import com.sammy.malum.data.item.MalumItemModels; +import com.sammy.malum.data.item.MalumItemTags; import com.sammy.malum.data.recipe.*; import net.minecraft.core.HolderLookup; -import net.minecraft.data.*; -import net.minecraft.data.tags.*; -import net.minecraft.resources.*; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.*; -import net.minecraft.world.item.*; import net.minecraftforge.common.data.BlockTagsProvider; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.data.event.GatherDataEvent; -import net.minecraftforge.eventbus.api.*; -import net.minecraftforge.fml.*; -import net.minecraftforge.fml.common.*; -import net.minecraftforge.fml.config.*; -import net.minecraftforge.fml.javafmlmod.*; -import org.apache.logging.log4j.*; - -import java.util.*; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.ModLoadingContext; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import java.util.concurrent.CompletableFuture; -import java.util.function.*; - -import static com.sammy.malum.registry.client.ParticleRegistry.*; -import static com.sammy.malum.registry.common.AttributeRegistry.*; -import static com.sammy.malum.registry.common.ContainerRegistry.*; -import static com.sammy.malum.registry.common.MobEffectRegistry.*; -import static com.sammy.malum.registry.common.SoundRegistry.*; -import static com.sammy.malum.registry.common.block.BlockEntityRegistry.*; -import static com.sammy.malum.registry.common.block.BlockRegistry.*; -import static com.sammy.malum.registry.common.entity.EntityRegistry.*; -import static com.sammy.malum.registry.common.item.EnchantmentRegistry.*; -import static com.sammy.malum.registry.common.item.ItemRegistry.*; -import static com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry.*; -import static com.sammy.malum.registry.common.recipe.RecipeTypeRegistry.*; -import static com.sammy.malum.registry.common.worldgen.FeatureRegistry.*; + +import static com.sammy.malum.registry.client.ParticleRegistry.PARTICLES; +import static com.sammy.malum.registry.common.AttributeRegistry.ATTRIBUTES; +import static com.sammy.malum.registry.common.ContainerRegistry.CONTAINERS; +import static com.sammy.malum.registry.common.MobEffectRegistry.EFFECTS; +import static com.sammy.malum.registry.common.SoundRegistry.SOUNDS; +import static com.sammy.malum.registry.common.block.BlockEntityRegistry.BLOCK_ENTITY_TYPES; +import static com.sammy.malum.registry.common.block.BlockRegistry.BLOCKS; +import static com.sammy.malum.registry.common.entity.EntityRegistry.ENTITY_TYPES; +import static com.sammy.malum.registry.common.item.EnchantmentRegistry.ENCHANTMENTS; +import static com.sammy.malum.registry.common.item.ItemRegistry.ITEMS; +import static com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry.RECIPE_SERIALIZERS; +import static com.sammy.malum.registry.common.recipe.RecipeTypeRegistry.RECIPE_TYPES; +import static com.sammy.malum.registry.common.worldgen.FeatureRegistry.FEATURE_TYPES; @SuppressWarnings("unused") @Mod(MalumMod.MALUM) @@ -81,7 +83,6 @@ public static ResourceLocation malumPath(String path) { return new ResourceLocation(MALUM, path); } - public static class DataOnly { public static void gatherData(GatherDataEvent event) { DataGenerator generator = event.getGenerator(); @@ -99,10 +100,9 @@ public static void gatherData(GatherDataEvent event) { MalumVanillaRecipeReplacements vanillaRecipeReplacementsProvider = new MalumVanillaRecipeReplacements(output); MalumSpiritInfusionRecipes spiritInfusionRecipesProvider = new MalumSpiritInfusionRecipes(output); MalumSpiritFocusingRecipes spiritFocusingRecipesProvider = new MalumSpiritFocusingRecipes(output); - MalumSpiritTransmutationRecipes spiritTransmutationRecipesProvider =new MalumSpiritTransmutationRecipes(output); + MalumSpiritTransmutationRecipes spiritTransmutationRecipesProvider = new MalumSpiritTransmutationRecipes(output); MalumVoidFavorRecipes voidFavorRecipesProvider = new MalumVoidFavorRecipes(output); - - + MalumWorldgenProvider worldgenProvider = new MalumWorldgenProvider(output, provider); generator.addProvider(event.includeClient(), blockStateProvider); generator.addProvider(event.includeClient(), itemModelsProvider); @@ -112,13 +112,14 @@ public static void gatherData(GatherDataEvent event) { generator.addProvider(event.includeServer(), lootTablesProvider); generator.addProvider(event.includeServer(), itemTagsProvider); - generator.addProvider(event.includeServer(), recipeProvider); generator.addProvider(event.includeServer(), vanillaRecipeReplacementsProvider); generator.addProvider(event.includeServer(), spiritInfusionRecipesProvider); generator.addProvider(event.includeServer(), spiritFocusingRecipesProvider); generator.addProvider(event.includeServer(), spiritTransmutationRecipesProvider); generator.addProvider(event.includeServer(), voidFavorRecipesProvider); + + generator.addProvider(event.includeServer(), worldgenProvider); } } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/cosmetic/ArmorSkinRenderingData.java b/src/main/java/com/sammy/malum/client/cosmetic/ArmorSkinRenderingData.java index 525c43227..083b65a68 100644 --- a/src/main/java/com/sammy/malum/client/cosmetic/ArmorSkinRenderingData.java +++ b/src/main/java/com/sammy/malum/client/cosmetic/ArmorSkinRenderingData.java @@ -1,13 +1,13 @@ package com.sammy.malum.client.cosmetic; -import com.sammy.malum.common.item.cosmetic.skins.*; -import net.minecraft.*; -import net.minecraft.client.player.*; -import net.minecraft.resources.*; -import net.minecraft.world.entity.*; -import team.lodestar.lodestone.systems.model.*; - -import java.util.function.*; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import net.minecraft.Util; +import net.minecraft.client.player.AbstractClientPlayer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import team.lodestar.lodestone.systems.model.LodestoneArmorModel; + +import java.util.function.Function; public abstract class ArmorSkinRenderingData { diff --git a/src/main/java/com/sammy/malum/client/cosmetic/PrideArmorSkinRenderingData.java b/src/main/java/com/sammy/malum/client/cosmetic/PrideArmorSkinRenderingData.java index c924c1b66..67864355f 100644 --- a/src/main/java/com/sammy/malum/client/cosmetic/PrideArmorSkinRenderingData.java +++ b/src/main/java/com/sammy/malum/client/cosmetic/PrideArmorSkinRenderingData.java @@ -1,11 +1,11 @@ package com.sammy.malum.client.cosmetic; -import com.sammy.malum.registry.client.*; -import net.minecraft.resources.*; -import net.minecraft.world.entity.*; -import team.lodestar.lodestone.systems.model.*; +import com.sammy.malum.registry.client.ModelRegistry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import team.lodestar.lodestone.systems.model.LodestoneArmorModel; -import static com.sammy.malum.MalumMod.*; +import static com.sammy.malum.MalumMod.malumPath; public class PrideArmorSkinRenderingData extends ArmorSkinRenderingData { @@ -16,6 +16,7 @@ public PrideArmorSkinRenderingData(String type) { this.slimTexture = malumPath("textures/armor/cosmetic/pride/" + type + "_drip_slim.png"); this.standardTexture = malumPath("textures/armor/cosmetic/pride/" + type + "_drip.png"); } + @Override public ResourceLocation getTexture(LivingEntity livingEntity, boolean slim) { return slim ? this.slimTexture : standardTexture; diff --git a/src/main/java/com/sammy/malum/client/cosmetic/SimpleArmorSkinRenderingData.java b/src/main/java/com/sammy/malum/client/cosmetic/SimpleArmorSkinRenderingData.java index 949fac6ea..c966692f6 100644 --- a/src/main/java/com/sammy/malum/client/cosmetic/SimpleArmorSkinRenderingData.java +++ b/src/main/java/com/sammy/malum/client/cosmetic/SimpleArmorSkinRenderingData.java @@ -1,8 +1,8 @@ package com.sammy.malum.client.cosmetic; -import net.minecraft.resources.*; -import net.minecraft.world.entity.*; -import team.lodestar.lodestone.systems.model.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class SimpleArmorSkinRenderingData extends ArmorSkinRenderingData { diff --git a/src/main/java/com/sammy/malum/client/model/HeadOverlayModel.java b/src/main/java/com/sammy/malum/client/model/HeadOverlayModel.java index 9d7454e09..e99ae9c4a 100644 --- a/src/main/java/com/sammy/malum/client/model/HeadOverlayModel.java +++ b/src/main/java/com/sammy/malum/client/model/HeadOverlayModel.java @@ -12,30 +12,30 @@ public class HeadOverlayModel extends EntityModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("head_overlay"), "main"); - public final ModelPart overlay; + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("head_overlay"), "main"); + public final ModelPart overlay; - public HeadOverlayModel(ModelPart root) { - this.overlay = root.getChild("overlay"); - } + public HeadOverlayModel(ModelPart root) { + this.overlay = root.getChild("overlay"); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition meshdefinition = new MeshDefinition(); - PartDefinition partdefinition = meshdefinition.getRoot(); + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); - PartDefinition overlay = partdefinition.addOrReplaceChild("overlay", CubeListBuilder.create().texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.51F)) - .texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.001F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition overlay = partdefinition.addOrReplaceChild("overlay", CubeListBuilder.create().texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.51F)) + .texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.001F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - return LayerDefinition.create(meshdefinition, 64, 64); - } + return LayerDefinition.create(meshdefinition, 64, 64); + } - @Override - public void setupAnim(Player entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + @Override + public void setupAnim(Player entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { - } + } - @Override - public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { - overlay.render(poseStack, buffer, packedLight, packedOverlay); - } + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + overlay.render(poseStack, buffer, packedLight, packedOverlay); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/SoulHunterArmorModel.java b/src/main/java/com/sammy/malum/client/model/SoulHunterArmorModel.java index e215e0cee..471c4d4dd 100644 --- a/src/main/java/com/sammy/malum/client/model/SoulHunterArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/SoulHunterArmorModel.java @@ -19,162 +19,161 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class SoulHunterArmorModel extends LodestoneArmorModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("soul_hunter_armor"), "main"); - - public ModelPart cape; - public ModelPart lowered_hood; - - public SoulHunterArmorModel(ModelPart root) { - super(root); - this.cape = root.getChild("cape"); - this.lowered_hood = root.getChild("lowered_hood"); - } - - @Override - protected Iterable bodyParts() { - if (this.slot == EquipmentSlot.CHEST) { - return ImmutableList.of(this.body, this.leftArm, this.rightArm, this.cape, this.lowered_hood); - } else if (this.slot == EquipmentSlot.LEGS) { - return ImmutableList.of(this.leftLegging, this.rightLegging, this.leggings); - } else { - return this.slot == EquipmentSlot.FEET ? ImmutableList.of(this.leftFoot, this.rightFoot) : ImmutableList.of(); - } - } - - @Override - public void copyFromDefault(HumanoidModel model) { - super.copyFromDefault(model); - cape.copyFrom(model.body); - lowered_hood.copyFrom(model.body); - } - - @Override - public void setupAnim(LivingEntity pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) { - float pPartialTicks = Minecraft.getInstance().getDeltaFrameTime(); - - lowered_hood.visible = pEntity.getItemBySlot(EquipmentSlot.HEAD).isEmpty(); - if (pEntity instanceof AbstractClientPlayer clientPlayer) { - double d0 = Mth.lerp(pPartialTicks, clientPlayer.xCloakO, clientPlayer.xCloak) - Mth.lerp(pPartialTicks, pEntity.xo, pEntity.getX()); - double d1 = Mth.lerp(pPartialTicks, clientPlayer.yCloakO, clientPlayer.yCloak) - Mth.lerp(pPartialTicks, pEntity.yo, pEntity.getY()); - double d2 = Mth.lerp(pPartialTicks, clientPlayer.zCloakO, clientPlayer.zCloak) - Mth.lerp(pPartialTicks, pEntity.zo, pEntity.getZ()); - float f = pEntity.yBodyRotO + (pEntity.yBodyRot - pEntity.yBodyRotO); - double d3 = Mth.sin(f * ((float) Math.PI / 180F)); - double d4 = (-Mth.cos(f * ((float) Math.PI / 180F))); - float f1 = (float) d1 * 10.0F; - f1 = Mth.clamp(f1, -6.0F, 16.0F); - float f2 = (float) (d0 * d3 + d2 * d4) * 65.0F; - f2 = Mth.clamp(f2, 0.0F, 75.0F); - float f3 = (float) (d0 * d4 - d2 * d3) * 100.0F; - f3 = Mth.clamp(f3, -20.0F, 20.0F); - if (f2 < 0.0F) { - f2 = 0.0F; - } - float f4 = Mth.lerp(pPartialTicks, clientPlayer.oBob, clientPlayer.bob); - f1 += Mth.sin(Mth.lerp(pPartialTicks, pEntity.walkDistO, pEntity.walkDist) * 6.0F) * 32.0F * f4; - if (pEntity.isCrouching()) { - f1 += 25.0F; - } - float x = (float) Math.toRadians(6.0F + f2 / 2.0F + f1); - float y = (float) Math.toRadians(f3 / 2.0F); - float z = (float) Math.toRadians(f3 / 2.0F); - cape.xRot = x; - cape.yRot = y; - cape.zRot = z; - lowered_hood.xRot = x/3f; - lowered_hood.yRot = y/3f; - lowered_hood.zRot = z/3f; - } - else { - cape.xRot = 0; - cape.yRot = 0; - cape.zRot = 0; - lowered_hood.xRot = 0; - lowered_hood.yRot = 0; - lowered_hood.zRot = 0; - } - super.setupAnim(pEntity, pLimbSwing, pLimbSwingAmount, pAgeInTicks, pNetHeadYaw, pHeadPitch); - } - - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); - PartDefinition cape = root.addOrReplaceChild("cape", new CubeListBuilder(), PartPose.ZERO); - PartDefinition lowered_hood = root.addOrReplaceChild("lowered_hood", new CubeListBuilder(), PartPose.ZERO); - - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(0, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 10.0F, 5.0F, new CubeDeformation(0.0F)) - .texOffs(28, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 10.0F, 5.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition left_stripe = torso.addOrReplaceChild("left_stripe", CubeListBuilder.create().texOffs(0, 33).addBox(-1.9074F, 0.0F, -0.6014F, 3.0F, 10.0F, 1.0F, new CubeDeformation(0.01F)), PartPose.offsetAndRotation(-2.5F, -0.5F, -2.5F, -0.0892F, 0.3487F, -0.0061F)); - PartDefinition right_stripe = torso.addOrReplaceChild("right_stripe", CubeListBuilder.create().texOffs(0, 33).mirror().addBox(-1.0926F, 0.0F, -0.6014F, 3.0F, 10.0F, 1.0F, new CubeDeformation(0.01F)).mirror(false), PartPose.offsetAndRotation(2.5F, -0.5F, -2.5F, -0.0892F, -0.3487F, 0.0061F)); - - PartDefinition leggings = root.getChild("leggings"); - PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 84).addBox(-5.0F, -14.5F, -3.5F, 10.0F, 3.0F, 7.0F, new CubeDeformation(0.01F)) - .texOffs(34, 84).addBox(-5.0F, -14.5F, -3.5F, 10.0F, 3.0F, 7.0F, new CubeDeformation(0.26F)), PartPose.offset(0.0F, 24.0F, 0.0F)); - - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(39, 103).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.01F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition right_leg_robe = right_legging.addOrReplaceChild("right_leg_robe", CubeListBuilder.create().texOffs(0, 118).addBox(-1.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.25F)) - .texOffs(0, 108).addBox(-1.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.0F)) - .texOffs(22, 94).addBox(0.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)) - .texOffs(0, 94).addBox(0.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.0F, -0.5F, 1.5F, 0.0F, 0.0F, 0.1745F)); - - PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(16, 116).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)) - .texOffs(40, 116).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 44).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(20, 44).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) - .texOffs(40, 46).mirror().addBox(-5.5F, 4.5F, -1.5F, 2.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(50, 46).mirror().addBox(-5.5F, 4.5F, -1.5F, 2.0F, 5.0F, 3.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(8, 33).mirror().addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(28, 33).mirror().addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offset(1, 0, 0.0F)); - - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(39, 103).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_leg_robe = left_legging.addOrReplaceChild("left_leg_robe", CubeListBuilder.create().texOffs(0, 118).mirror().addBox(0.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(0, 108).mirror().addBox(0.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(22, 94).mirror().addBox(-4.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(0, 94).mirror().addBox(-4.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(3.0F, -0.5F, 1.5F, 0.0F, 0.0F, -0.1745F)); - - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(16, 116).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(40, 116).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); - - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(8, 33).addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)) - .texOffs(28, 33).addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)) - .texOffs(0, 44).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.01F)) - .texOffs(20, 44).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)) - .texOffs(40, 46).addBox(3.5F, 4.5F, -1.5F, 2.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)) - .texOffs(50, 46).addBox(3.5F, 4.5F, -1.5F, 2.0F, 5.0F, 3.0F, new CubeDeformation(0.25F)), PartPose.offset(-1, 0, 0.0F)); - - PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -8.5F, -4.5F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.0F)) - .texOffs(36, 0).addBox(-4.5F, -8.5F, -4.5F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition left_hood_bit = head.addOrReplaceChild("left_hood_bit", CubeListBuilder.create().texOffs(53, 59).mirror().addBox(-2.0F, -5.0F, -4.0F, 2.0F, 5.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(53, 47).mirror().addBox(-2.0F, -5.0F, -4.0F, 2.0F, 5.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-4.5F, 0.5F, 0.5F, 0.0F, 0.0F, 0.3927F)); - PartDefinition back_hood_bit = head.addOrReplaceChild("back_hood_bit", CubeListBuilder.create().texOffs(48, 33).addBox(-3.5F, 0.0F, 0.0F, 7.0F, 5.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -8.5F, 4.5F, -0.7854F, 0.0F, 0.0F)); - PartDefinition right_hood_bit = head.addOrReplaceChild("right_hood_bit", CubeListBuilder.create().texOffs(53, 59).addBox(0.0F, -5.0F, -4.0F, 2.0F, 5.0F, 7.0F, new CubeDeformation(0.25F)) - .texOffs(53, 47).addBox(0.0F, -5.0F, -4.0F, 2.0F, 5.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(4.5F, 0.5F, 0.5F, 0.0F, 0.0F, -0.3927F)); - - PartDefinition cape_top = cape.addOrReplaceChild("cape_top", CubeListBuilder.create().texOffs(0, 54).addBox(-6.5213F, -0.1479F, -1.0812F, 11.0F, 8.0F, 1.0F, new CubeDeformation(0.0F)) - .texOffs(24, 54).addBox(-6.5213F, -0.1479F, -1.0812F, 11.0F, 8.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(1.0F, -0.5F, 3.5F, 0.0839F, -0.02F, 0.0126F)); - - PartDefinition cape_middle = cape_top.addOrReplaceChild("cape_middle", CubeListBuilder.create().texOffs(24, 62).addBox(-6.5213F, -0.2878F, -1.0526F, 11.0F, 7.0F, 1.0F, new CubeDeformation(0.25F)) - .texOffs(0, 62).addBox(-6.5213F, -0.2878F, -1.0526F, 11.0F, 7.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 8.0F, 0.0F, 0.1309F, 0.0F, 0.0F)); - - PartDefinition cape_bottom = cape_middle.addOrReplaceChild("cape_bottom", CubeListBuilder.create().texOffs(24, 77).addBox(-6.5213F, -0.9301F, 2.1414F, 3.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) - .texOffs(0, 77).addBox(-3.5213F, -0.9301F, 2.1414F, 5.0F, 6.0F, 1.0F, new CubeDeformation(0.0F)) - .texOffs(24, 77).mirror().addBox(1.4787F, -0.9301F, 2.1414F, 3.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(32, 77).mirror().addBox(1.4787F, -0.9301F, 2.1414F, 3.0F, 4.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(12, 77).addBox(-3.5213F, -0.9301F, 2.1414F, 5.0F, 6.0F, 1.0F, new CubeDeformation(0.25F)) - .texOffs(32, 77).addBox(-6.5213F, -0.9301F, 2.1414F, 3.0F, 4.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 8.0F, -3.0F, 0.1745F, 0.0F, 0.0F)); - - PartDefinition hood = lowered_hood.addOrReplaceChild("hood", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition overhang = hood.addOrReplaceChild("overhang", CubeListBuilder.create().texOffs(26, 70).addBox(-4.98F, -0.5028F, -2.1358F, 8.0F, 2.0F, 5.0F, new CubeDeformation(0.25F)) - .texOffs(0, 70).addBox(-4.98F, -0.5028F, -2.1358F, 8.0F, 2.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.0F, -0.5F, 3.5F, -0.6109F, 0.0F, 0.0F)); - - return LayerDefinition.create(mesh, 128, 128); - } + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("soul_hunter_armor"), "main"); + + public ModelPart cape; + public ModelPart lowered_hood; + + public SoulHunterArmorModel(ModelPart root) { + super(root); + this.cape = root.getChild("cape"); + this.lowered_hood = root.getChild("lowered_hood"); + } + + @Override + protected Iterable bodyParts() { + if (this.slot == EquipmentSlot.CHEST) { + return ImmutableList.of(this.body, this.leftArm, this.rightArm, this.cape, this.lowered_hood); + } else if (this.slot == EquipmentSlot.LEGS) { + return ImmutableList.of(this.leftLegging, this.rightLegging, this.leggings); + } else { + return this.slot == EquipmentSlot.FEET ? ImmutableList.of(this.leftFoot, this.rightFoot) : ImmutableList.of(); + } + } + + @Override + public void copyFromDefault(HumanoidModel model) { + super.copyFromDefault(model); + cape.copyFrom(model.body); + lowered_hood.copyFrom(model.body); + } + + @Override + public void setupAnim(LivingEntity pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) { + float pPartialTicks = Minecraft.getInstance().getDeltaFrameTime(); + + lowered_hood.visible = pEntity.getItemBySlot(EquipmentSlot.HEAD).isEmpty(); + if (pEntity instanceof AbstractClientPlayer clientPlayer) { + double d0 = Mth.lerp(pPartialTicks, clientPlayer.xCloakO, clientPlayer.xCloak) - Mth.lerp(pPartialTicks, pEntity.xo, pEntity.getX()); + double d1 = Mth.lerp(pPartialTicks, clientPlayer.yCloakO, clientPlayer.yCloak) - Mth.lerp(pPartialTicks, pEntity.yo, pEntity.getY()); + double d2 = Mth.lerp(pPartialTicks, clientPlayer.zCloakO, clientPlayer.zCloak) - Mth.lerp(pPartialTicks, pEntity.zo, pEntity.getZ()); + float f = pEntity.yBodyRotO + (pEntity.yBodyRot - pEntity.yBodyRotO); + double d3 = Mth.sin(f * ((float) Math.PI / 180F)); + double d4 = (-Mth.cos(f * ((float) Math.PI / 180F))); + float f1 = (float) d1 * 10.0F; + f1 = Mth.clamp(f1, -6.0F, 16.0F); + float f2 = (float) (d0 * d3 + d2 * d4) * 65.0F; + f2 = Mth.clamp(f2, 0.0F, 75.0F); + float f3 = (float) (d0 * d4 - d2 * d3) * 100.0F; + f3 = Mth.clamp(f3, -20.0F, 20.0F); + if (f2 < 0.0F) { + f2 = 0.0F; + } + float f4 = Mth.lerp(pPartialTicks, clientPlayer.oBob, clientPlayer.bob); + f1 += Mth.sin(Mth.lerp(pPartialTicks, pEntity.walkDistO, pEntity.walkDist) * 6.0F) * 32.0F * f4; + if (pEntity.isCrouching()) { + f1 += 25.0F; + } + float x = (float) Math.toRadians(6.0F + f2 / 2.0F + f1); + float y = (float) Math.toRadians(f3 / 2.0F); + float z = (float) Math.toRadians(f3 / 2.0F); + cape.xRot = x; + cape.yRot = y; + cape.zRot = z; + lowered_hood.xRot = x / 3f; + lowered_hood.yRot = y / 3f; + lowered_hood.zRot = z / 3f; + } else { + cape.xRot = 0; + cape.yRot = 0; + cape.zRot = 0; + lowered_hood.xRot = 0; + lowered_hood.yRot = 0; + lowered_hood.zRot = 0; + } + super.setupAnim(pEntity, pLimbSwing, pLimbSwingAmount, pAgeInTicks, pNetHeadYaw, pHeadPitch); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); + PartDefinition cape = root.addOrReplaceChild("cape", new CubeListBuilder(), PartPose.ZERO); + PartDefinition lowered_hood = root.addOrReplaceChild("lowered_hood", new CubeListBuilder(), PartPose.ZERO); + + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(0, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 10.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(28, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 10.0F, 5.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition left_stripe = torso.addOrReplaceChild("left_stripe", CubeListBuilder.create().texOffs(0, 33).addBox(-1.9074F, 0.0F, -0.6014F, 3.0F, 10.0F, 1.0F, new CubeDeformation(0.01F)), PartPose.offsetAndRotation(-2.5F, -0.5F, -2.5F, -0.0892F, 0.3487F, -0.0061F)); + PartDefinition right_stripe = torso.addOrReplaceChild("right_stripe", CubeListBuilder.create().texOffs(0, 33).mirror().addBox(-1.0926F, 0.0F, -0.6014F, 3.0F, 10.0F, 1.0F, new CubeDeformation(0.01F)).mirror(false), PartPose.offsetAndRotation(2.5F, -0.5F, -2.5F, -0.0892F, -0.3487F, 0.0061F)); + + PartDefinition leggings = root.getChild("leggings"); + PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 84).addBox(-5.0F, -14.5F, -3.5F, 10.0F, 3.0F, 7.0F, new CubeDeformation(0.01F)) + .texOffs(34, 84).addBox(-5.0F, -14.5F, -3.5F, 10.0F, 3.0F, 7.0F, new CubeDeformation(0.26F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(39, 103).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.01F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_leg_robe = right_legging.addOrReplaceChild("right_leg_robe", CubeListBuilder.create().texOffs(0, 118).addBox(-1.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.25F)) + .texOffs(0, 108).addBox(-1.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(22, 94).addBox(0.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)) + .texOffs(0, 94).addBox(0.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-3.0F, -0.5F, 1.5F, 0.0F, 0.0F, 0.1745F)); + + PartDefinition right_foot = root.getChild("right_foot"); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(16, 116).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(40, 116).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 44).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(20, 44).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) + .texOffs(40, 46).mirror().addBox(-5.5F, 4.5F, -1.5F, 2.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(50, 46).mirror().addBox(-5.5F, 4.5F, -1.5F, 2.0F, 5.0F, 3.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(8, 33).mirror().addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(28, 33).mirror().addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offset(1, 0, 0.0F)); + + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(39, 103).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_leg_robe = left_legging.addOrReplaceChild("left_leg_robe", CubeListBuilder.create().texOffs(0, 118).mirror().addBox(0.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(0, 108).mirror().addBox(0.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(22, 94).mirror().addBox(-4.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(0, 94).mirror().addBox(-4.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(3.0F, -0.5F, 1.5F, 0.0F, 0.0F, -0.1745F)); + + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(16, 116).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(40, 116).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(8, 33).addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)) + .texOffs(28, 33).addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)) + .texOffs(0, 44).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.01F)) + .texOffs(20, 44).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)) + .texOffs(40, 46).addBox(3.5F, 4.5F, -1.5F, 2.0F, 5.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(50, 46).addBox(3.5F, 4.5F, -1.5F, 2.0F, 5.0F, 3.0F, new CubeDeformation(0.25F)), PartPose.offset(-1, 0, 0.0F)); + + PartDefinition head = root.getChild("head"); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -8.5F, -4.5F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.0F)) + .texOffs(36, 0).addBox(-4.5F, -8.5F, -4.5F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition left_hood_bit = head.addOrReplaceChild("left_hood_bit", CubeListBuilder.create().texOffs(53, 59).mirror().addBox(-2.0F, -5.0F, -4.0F, 2.0F, 5.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(53, 47).mirror().addBox(-2.0F, -5.0F, -4.0F, 2.0F, 5.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-4.5F, 0.5F, 0.5F, 0.0F, 0.0F, 0.3927F)); + PartDefinition back_hood_bit = head.addOrReplaceChild("back_hood_bit", CubeListBuilder.create().texOffs(48, 33).addBox(-3.5F, 0.0F, 0.0F, 7.0F, 5.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -8.5F, 4.5F, -0.7854F, 0.0F, 0.0F)); + PartDefinition right_hood_bit = head.addOrReplaceChild("right_hood_bit", CubeListBuilder.create().texOffs(53, 59).addBox(0.0F, -5.0F, -4.0F, 2.0F, 5.0F, 7.0F, new CubeDeformation(0.25F)) + .texOffs(53, 47).addBox(0.0F, -5.0F, -4.0F, 2.0F, 5.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(4.5F, 0.5F, 0.5F, 0.0F, 0.0F, -0.3927F)); + + PartDefinition cape_top = cape.addOrReplaceChild("cape_top", CubeListBuilder.create().texOffs(0, 54).addBox(-6.5213F, -0.1479F, -1.0812F, 11.0F, 8.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 54).addBox(-6.5213F, -0.1479F, -1.0812F, 11.0F, 8.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(1.0F, -0.5F, 3.5F, 0.0839F, -0.02F, 0.0126F)); + + PartDefinition cape_middle = cape_top.addOrReplaceChild("cape_middle", CubeListBuilder.create().texOffs(24, 62).addBox(-6.5213F, -0.2878F, -1.0526F, 11.0F, 7.0F, 1.0F, new CubeDeformation(0.25F)) + .texOffs(0, 62).addBox(-6.5213F, -0.2878F, -1.0526F, 11.0F, 7.0F, 1.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 8.0F, 0.0F, 0.1309F, 0.0F, 0.0F)); + + PartDefinition cape_bottom = cape_middle.addOrReplaceChild("cape_bottom", CubeListBuilder.create().texOffs(24, 77).addBox(-6.5213F, -0.9301F, 2.1414F, 3.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(0, 77).addBox(-3.5213F, -0.9301F, 2.1414F, 5.0F, 6.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 77).mirror().addBox(1.4787F, -0.9301F, 2.1414F, 3.0F, 4.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(32, 77).mirror().addBox(1.4787F, -0.9301F, 2.1414F, 3.0F, 4.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(12, 77).addBox(-3.5213F, -0.9301F, 2.1414F, 5.0F, 6.0F, 1.0F, new CubeDeformation(0.25F)) + .texOffs(32, 77).addBox(-6.5213F, -0.9301F, 2.1414F, 3.0F, 4.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 8.0F, -3.0F, 0.1745F, 0.0F, 0.0F)); + + PartDefinition hood = lowered_hood.addOrReplaceChild("hood", CubeListBuilder.create(), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition overhang = hood.addOrReplaceChild("overhang", CubeListBuilder.create().texOffs(26, 70).addBox(-4.98F, -0.5028F, -2.1358F, 8.0F, 2.0F, 5.0F, new CubeDeformation(0.25F)) + .texOffs(0, 70).addBox(-4.98F, -0.5028F, -2.1358F, 8.0F, 2.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(1.0F, -0.5F, 3.5F, -0.6109F, 0.0F, 0.0F)); + + return LayerDefinition.create(mesh, 128, 128); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/SoulStainedSteelArmorModel.java b/src/main/java/com/sammy/malum/client/model/SoulStainedSteelArmorModel.java index 720c1962f..9f4159be5 100644 --- a/src/main/java/com/sammy/malum/client/model/SoulStainedSteelArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/SoulStainedSteelArmorModel.java @@ -13,91 +13,91 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class SoulStainedSteelArmorModel extends LodestoneArmorModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("soul_stained_steel_armor"), "main"); + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("soul_stained_steel_armor"), "main"); - public SoulStainedSteelArmorModel(ModelPart root) { - super(root); - } + public SoulStainedSteelArmorModel(ModelPart root) { + super(root); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(0, 39).addBox(-5.0F, 1.0F, -3.0F, 10.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)) - .texOffs(32, 39).addBox(-5.0F, 1.0F, -3.0F, 10.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)) - .texOffs(0, 51).addBox(-4.5F, 3.5F, -2.5F, 9.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)) - .texOffs(28, 51).addBox(-4.5F, 3.5F, -2.5F, 9.0F, 7.0F, 5.0F, new CubeDeformation(0.35F)) - .texOffs(0, 63).mirror().addBox(-5.0F, -1.0F, -3.0F, 3.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(36, 31).addBox(2.0F, -1.0F, -3.0F, 3.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)) - .texOffs(54, 31).mirror().addBox(-5.0F, -1.0F, -3.0F, 3.0F, 2.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(54, 31).addBox(2.0F, -1.0F, -3.0F, 3.0F, 2.0F, 6.0F, new CubeDeformation(0.25F)) - .texOffs(11, 25).addBox(2.0F, -1.0F, 3.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.0F)) - .texOffs(11, 25).mirror().addBox(-5.0F, -1.0F, 3.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(29, 25).addBox(2.0F, -1.0F, 3.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.25F)) - .texOffs(29, 25).mirror().addBox(-5.0F, -1.0F, 3.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(0, 39).addBox(-5.0F, 1.0F, -3.0F, 10.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(32, 39).addBox(-5.0F, 1.0F, -3.0F, 10.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)) + .texOffs(0, 51).addBox(-4.5F, 3.5F, -2.5F, 9.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(28, 51).addBox(-4.5F, 3.5F, -2.5F, 9.0F, 7.0F, 5.0F, new CubeDeformation(0.35F)) + .texOffs(0, 63).mirror().addBox(-5.0F, -1.0F, -3.0F, 3.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(36, 31).addBox(2.0F, -1.0F, -3.0F, 3.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(54, 31).mirror().addBox(-5.0F, -1.0F, -3.0F, 3.0F, 2.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(54, 31).addBox(2.0F, -1.0F, -3.0F, 3.0F, 2.0F, 6.0F, new CubeDeformation(0.25F)) + .texOffs(11, 25).addBox(2.0F, -1.0F, 3.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(11, 25).mirror().addBox(-5.0F, -1.0F, 3.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(29, 25).addBox(2.0F, -1.0F, 3.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.25F)) + .texOffs(29, 25).mirror().addBox(-5.0F, -1.0F, 3.0F, 3.0F, 5.0F, 2.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition leggings = root.getChild("leggings"); - PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 63).addBox(-4.0F, -14.5F, -3.0F, 8.0F, 2.0F, 6.0F, new CubeDeformation(0.01F)) - .texOffs(28, 63).addBox(-4.0F, -14.5F, -3.0F, 8.0F, 2.0F, 6.0F, new CubeDeformation(0.26F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + PartDefinition leggings = root.getChild("leggings"); + PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 63).addBox(-4.0F, -14.5F, -3.0F, 8.0F, 2.0F, 6.0F, new CubeDeformation(0.01F)) + .texOffs(28, 63).addBox(-4.0F, -14.5F, -3.0F, 8.0F, 2.0F, 6.0F, new CubeDeformation(0.26F)), PartPose.offset(0.0F, 24.0F, 0.0F)); - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 105).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition right_thigh_guard = right_leg.addOrReplaceChild("right_thigh_guard", CubeListBuilder.create().texOffs(0, 117).addBox(-3.0F, -1.0003F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.0F)) - .texOffs(18, 117).addBox(-3.0F, -1.0003F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.1745F)); + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 105).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_thigh_guard = right_leg.addOrReplaceChild("right_thigh_guard", CubeListBuilder.create().texOffs(0, 117).addBox(-3.0F, -1.0003F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(18, 117).addBox(-3.0F, -1.0003F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.1745F)); - PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(36, 115).mirror().addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(60, 115).mirror().addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_boot_wing = right_boot.addOrReplaceChild("right_boot_wing", CubeListBuilder.create().texOffs(84, 117).mirror().addBox(-4.0F, 4.3639F, -8.364F, 1.0F, 4.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(100, 117).mirror().addBox(-4.0F, 4.3639F, -8.364F, 1.0F, 4.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.7854F, 0.0F, 0.0F)); + PartDefinition right_foot = root.getChild("right_foot"); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(36, 115).mirror().addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(60, 115).mirror().addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_boot_wing = right_boot.addOrReplaceChild("right_boot_wing", CubeListBuilder.create().texOffs(84, 117).mirror().addBox(-4.0F, 4.3639F, -8.364F, 1.0F, 4.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(100, 117).mirror().addBox(-4.0F, 4.3639F, -8.364F, 1.0F, 4.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.7854F, 0.0F, 0.0F)); - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 71).mirror().addBox(-6.0F, -4.0F, -3.0F, 4.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(20, 71).mirror().addBox(-6.0F, -4.0F, -3.0F, 4.0F, 6.0F, 6.0F, new CubeDeformation(0.26F)).mirror(false) - .texOffs(0, 83).mirror().addBox(-5.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.02F)).mirror(false) - .texOffs(22, 83).mirror().addBox(-5.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.27F)).mirror(false) - .texOffs(0, 95).mirror().addBox(-6.5F, 4.0F, -2.5F, 4.0F, 5.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(18, 95).mirror().addBox(-6.5F, 4.0F, -2.5F, 4.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offset(2, 0, 0.0F)); + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 71).mirror().addBox(-6.0F, -4.0F, -3.0F, 4.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(20, 71).mirror().addBox(-6.0F, -4.0F, -3.0F, 4.0F, 6.0F, 6.0F, new CubeDeformation(0.26F)).mirror(false) + .texOffs(0, 83).mirror().addBox(-5.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.02F)).mirror(false) + .texOffs(22, 83).mirror().addBox(-5.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.27F)).mirror(false) + .texOffs(0, 95).mirror().addBox(-6.5F, 4.0F, -2.5F, 4.0F, 5.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(18, 95).mirror().addBox(-6.5F, 4.0F, -2.5F, 4.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offset(2, 0, 0.0F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 105).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_thigh_guard = left_leg.addOrReplaceChild("left_thigh_guard", CubeListBuilder.create().texOffs(0, 117).mirror().addBox(0.0F, -0.9997F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(18, 117).mirror().addBox(0.0F, -0.9997F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, -0.1745F)); + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 105).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 7.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_thigh_guard = left_leg.addOrReplaceChild("left_thigh_guard", CubeListBuilder.create().texOffs(0, 117).mirror().addBox(0.0F, -0.9997F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(18, 117).mirror().addBox(0.0F, -0.9997F, -3.0F, 3.0F, 5.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, -0.1745F)); - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(36, 115).addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.01F)) - .texOffs(60, 115).addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.26F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition left_boot_wing = left_boot.addOrReplaceChild("left_boot_wing", CubeListBuilder.create().texOffs(84, 117).addBox(3.0F, 4.3639F, -8.364F, 1.0F, 4.0F, 7.0F, new CubeDeformation(0.0F)) - .texOffs(100, 117).addBox(3.0F, 4.3639F, -8.364F, 1.0F, 4.0F, 7.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.7854F, 0.0F, 0.0F)); + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(36, 115).addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.01F)) + .texOffs(60, 115).addBox(-3.0F, 6.0F, -3.0F, 6.0F, 7.0F, 6.0F, new CubeDeformation(0.26F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition left_boot_wing = left_boot.addOrReplaceChild("left_boot_wing", CubeListBuilder.create().texOffs(84, 117).addBox(3.0F, 4.3639F, -8.364F, 1.0F, 4.0F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(100, 117).addBox(3.0F, 4.3639F, -8.364F, 1.0F, 4.0F, 7.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, 0.7854F, 0.0F, 0.0F)); - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(0, 71).addBox(2.0F, -4.0F, -3.0F, 4.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)) - .texOffs(20, 71).addBox(2.0F, -4.0F, -3.0F, 4.0F, 6.0F, 6.0F, new CubeDeformation(0.26F)) - .texOffs(0, 83).addBox(0.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.02F)) - .texOffs(22, 83).addBox(0.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.27F)) - .texOffs(0, 95).addBox(2.5F, 4.0F, -2.5F, 4.0F, 5.0F, 5.0F, new CubeDeformation(0.01F)) - .texOffs(18, 95).addBox(2.5F, 4.0F, -2.5F, 4.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(-2, 0, 0.0F)); + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(0, 71).addBox(2.0F, -4.0F, -3.0F, 4.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)) + .texOffs(20, 71).addBox(2.0F, -4.0F, -3.0F, 4.0F, 6.0F, 6.0F, new CubeDeformation(0.26F)) + .texOffs(0, 83).addBox(0.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.02F)) + .texOffs(22, 83).addBox(0.5F, 5.0F, -3.0F, 5.0F, 6.0F, 6.0F, new CubeDeformation(0.27F)) + .texOffs(0, 95).addBox(2.5F, 4.0F, -2.5F, 4.0F, 5.0F, 5.0F, new CubeDeformation(0.01F)) + .texOffs(18, 95).addBox(2.5F, 4.0F, -2.5F, 4.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(-2, 0, 0.0F)); - PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -9.0F, -5.0F, 3.0F, 4.0F, 6.0F, new CubeDeformation(0.0F)) - .texOffs(0, 0).mirror().addBox(1.5F, -9.0F, -5.0F, 3.0F, 4.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(30, 0).addBox(-4.5F, -9.0F, -5.0F, 3.0F, 4.0F, 6.0F, new CubeDeformation(0.25F)) - .texOffs(30, 0).mirror().addBox(1.5F, -9.0F, -5.0F, 3.0F, 4.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(0, 10).addBox(-1.5F, -10.0F, -6.0F, 3.0F, 6.0F, 9.0F, new CubeDeformation(0.0F)) - .texOffs(24, 10).addBox(-1.5F, -10.0F, -6.0F, 3.0F, 6.0F, 9.0F, new CubeDeformation(0.25F)) - .texOffs(18, 0).addBox(-5.0F, -5.0F, -5.0F, 2.0F, 6.0F, 4.0F, new CubeDeformation(0.0F)) - .texOffs(0, 25).mirror().addBox(-5.0F, -10.0F, -1.0F, 2.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(0, 25).addBox(3.0F, -10.0F, -1.0F, 2.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)) - .texOffs(18, 25).mirror().addBox(-5.0F, -10.0F, -1.0F, 2.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(18, 25).addBox(3.0F, -10.0F, -1.0F, 2.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)) - .texOffs(15, 13).addBox(3.0F, -10.0F, 6.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)) - .texOffs(15, 13).mirror().addBox(-5.0F, -10.0F, 6.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(23, 13).addBox(3.0F, -10.0F, 6.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.25F)) - .texOffs(23, 13).mirror().addBox(-5.0F, -10.0F, 6.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(18, 0).mirror().addBox(3.0F, -5.0F, -5.0F, 2.0F, 6.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(48, 0).addBox(-5.0F, -5.0F, -5.0F, 2.0F, 6.0F, 4.0F, new CubeDeformation(0.25F)) - .texOffs(48, 0).mirror().addBox(3.0F, -5.0F, -5.0F, 2.0F, 6.0F, 4.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); - return LayerDefinition.create(mesh, 128, 128); - } + PartDefinition head = root.getChild("head"); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -9.0F, -5.0F, 3.0F, 4.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(0, 0).mirror().addBox(1.5F, -9.0F, -5.0F, 3.0F, 4.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(30, 0).addBox(-4.5F, -9.0F, -5.0F, 3.0F, 4.0F, 6.0F, new CubeDeformation(0.25F)) + .texOffs(30, 0).mirror().addBox(1.5F, -9.0F, -5.0F, 3.0F, 4.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(0, 10).addBox(-1.5F, -10.0F, -6.0F, 3.0F, 6.0F, 9.0F, new CubeDeformation(0.0F)) + .texOffs(24, 10).addBox(-1.5F, -10.0F, -6.0F, 3.0F, 6.0F, 9.0F, new CubeDeformation(0.25F)) + .texOffs(18, 0).addBox(-5.0F, -5.0F, -5.0F, 2.0F, 6.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(0, 25).mirror().addBox(-5.0F, -10.0F, -1.0F, 2.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(0, 25).addBox(3.0F, -10.0F, -1.0F, 2.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(18, 25).mirror().addBox(-5.0F, -10.0F, -1.0F, 2.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(18, 25).addBox(3.0F, -10.0F, -1.0F, 2.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)) + .texOffs(15, 13).addBox(3.0F, -10.0F, 6.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(15, 13).mirror().addBox(-5.0F, -10.0F, 6.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(23, 13).addBox(3.0F, -10.0F, 6.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.25F)) + .texOffs(23, 13).mirror().addBox(-5.0F, -10.0F, 6.0F, 2.0F, 4.0F, 2.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(18, 0).mirror().addBox(3.0F, -5.0F, -5.0F, 2.0F, 6.0F, 4.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(48, 0).addBox(-5.0F, -5.0F, -5.0F, 2.0F, 6.0F, 4.0F, new CubeDeformation(0.25F)) + .texOffs(48, 0).mirror().addBox(3.0F, -5.0F, -5.0F, 2.0F, 6.0F, 4.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + return LayerDefinition.create(mesh, 128, 128); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/TailModel.java b/src/main/java/com/sammy/malum/client/model/TailModel.java index ef370db12..11dd52fb8 100644 --- a/src/main/java/com/sammy/malum/client/model/TailModel.java +++ b/src/main/java/com/sammy/malum/client/model/TailModel.java @@ -12,40 +12,40 @@ public class TailModel extends EntityModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("tail"), "main"); - private final ModelPart tail; + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("tail"), "main"); + private final ModelPart tail; - public TailModel(ModelPart root) { - this.tail = root.getChild("tail"); - } + public TailModel(ModelPart root) { + this.tail = root.getChild("tail"); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition meshdefinition = new MeshDefinition(); - PartDefinition partdefinition = meshdefinition.getRoot(); + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); - PartDefinition tail = partdefinition.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(0, 13).addBox(-2.0F, -3.5F, -3.0F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)) - .texOffs(14, 13).addBox(-2.0F, -3.5F, -3.0F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.4F)), PartPose.offsetAndRotation(0.0F, 12.0F, 2.75F, -0.7854F, 0.0F, 0.0F)); + PartDefinition tail = partdefinition.addOrReplaceChild("tail", CubeListBuilder.create().texOffs(0, 13).addBox(-2.0F, -3.5F, -3.0F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.0F)) + .texOffs(14, 13).addBox(-2.0F, -3.5F, -3.0F, 4.0F, 4.0F, 3.0F, new CubeDeformation(0.4F)), PartPose.offsetAndRotation(0.0F, 12.0F, 2.75F, -0.7854F, 0.0F, 0.0F)); - PartDefinition tail2 = tail.addOrReplaceChild("tail2", CubeListBuilder.create().texOffs(0, 0).addBox(-3.0F, -7.5F, -2.5F, 6.0F, 8.0F, 5.0F, new CubeDeformation(0.0F)) - .texOffs(22, 0).addBox(-3.0F, -7.5F, -2.5F, 6.0F, 8.0F, 5.0F, new CubeDeformation(0.4F)), PartPose.offsetAndRotation(0.0F, -4.0F, -1.5F, 0.2182F, 0.0F, 0.0F)); + PartDefinition tail2 = tail.addOrReplaceChild("tail2", CubeListBuilder.create().texOffs(0, 0).addBox(-3.0F, -7.5F, -2.5F, 6.0F, 8.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(22, 0).addBox(-3.0F, -7.5F, -2.5F, 6.0F, 8.0F, 5.0F, new CubeDeformation(0.4F)), PartPose.offsetAndRotation(0.0F, -4.0F, -1.5F, 0.2182F, 0.0F, 0.0F)); - PartDefinition tailtip = tail2.addOrReplaceChild("tailtip", CubeListBuilder.create().texOffs(0, 20).addBox(-2.5F, -2.0F, -2.0F, 5.0F, 3.0F, 4.0F, new CubeDeformation(0.0F)) - .texOffs(18, 20).addBox(-2.5F, -2.0F, -2.0F, 5.0F, 3.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, -7.5F, 0.0F, -0.3491F, 0.0F, 0.0F)); + PartDefinition tailtip = tail2.addOrReplaceChild("tailtip", CubeListBuilder.create().texOffs(0, 20).addBox(-2.5F, -2.0F, -2.0F, 5.0F, 3.0F, 4.0F, new CubeDeformation(0.0F)) + .texOffs(18, 20).addBox(-2.5F, -2.0F, -2.0F, 5.0F, 3.0F, 4.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, -7.5F, 0.0F, -0.3491F, 0.0F, 0.0F)); - PartDefinition tailtip1 = tailtip.addOrReplaceChild("tailtip1", CubeListBuilder.create().texOffs(0, 28).addBox(-0.3856F, -6.5303F, -2.561F, 0.0F, 6.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -0.5F, 0.0F, -0.1298F, -0.7769F, 0.1841F)); + PartDefinition tailtip1 = tailtip.addOrReplaceChild("tailtip1", CubeListBuilder.create().texOffs(0, 28).addBox(-0.3856F, -6.5303F, -2.561F, 0.0F, 6.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -0.5F, 0.0F, -0.1298F, -0.7769F, 0.1841F)); - PartDefinition tailtip2 = tailtip.addOrReplaceChild("tailtip2", CubeListBuilder.create().texOffs(0, 22).addBox(0.3856F, -6.0303F, -2.561F, 0.0F, 6.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -0.5F, 0.0F, -0.1298F, 0.7769F, -0.1841F)); + PartDefinition tailtip2 = tailtip.addOrReplaceChild("tailtip2", CubeListBuilder.create().texOffs(0, 22).addBox(0.3856F, -6.0303F, -2.561F, 0.0F, 6.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -0.5F, 0.0F, -0.1298F, 0.7769F, -0.1841F)); - return LayerDefinition.create(meshdefinition, 64, 64); - } + return LayerDefinition.create(meshdefinition, 64, 64); + } - @Override - public void setupAnim(Player entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + @Override + public void setupAnim(Player entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { - } + } - @Override - public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { - tail.render(poseStack, buffer, packedLight, packedOverlay); - } + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + tail.render(poseStack, buffer, packedLight, packedOverlay); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/TopHatModel.java b/src/main/java/com/sammy/malum/client/model/TopHatModel.java index be161fb35..d78c3cd27 100644 --- a/src/main/java/com/sammy/malum/client/model/TopHatModel.java +++ b/src/main/java/com/sammy/malum/client/model/TopHatModel.java @@ -1,39 +1,42 @@ package com.sammy.malum.client.model; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import net.minecraft.client.model.*; -import net.minecraft.client.model.geom.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.sammy.malum.MalumMod; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.ModelLayerLocation; +import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.builders.*; -import net.minecraft.world.entity.player.*; +import net.minecraft.world.entity.player.Player; public class TopHatModel extends EntityModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("top_hat"), "main"); - public final ModelPart topHat; + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("top_hat"), "main"); + public final ModelPart topHat; - public TopHatModel(ModelPart root) { - this.topHat = root.getChild("topHat"); - } + public TopHatModel(ModelPart root) { + this.topHat = root.getChild("topHat"); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition meshdefinition = new MeshDefinition(); - PartDefinition partdefinition = meshdefinition.getRoot(); + public static LayerDefinition createBodyLayer() { + MeshDefinition meshdefinition = new MeshDefinition(); + PartDefinition partdefinition = meshdefinition.getRoot(); - PartDefinition topHat = partdefinition.addOrReplaceChild("topHat", CubeListBuilder.create().texOffs(36, 0).addBox(-6.5F, -9.0F, -6.5F, 13.0F, 2.0F, 13.0F, new CubeDeformation(0.0F)) - .texOffs(36, 15).addBox(-6.5F, -9.0F, -6.5F, 13.0F, 2.0F, 13.0F, new CubeDeformation(0.35F)) - .texOffs(0, 0).addBox(-4.5F, -20.0F, -4.5F, 9.0F, 11.0F, 9.0F, new CubeDeformation(0.0F)) - .texOffs(0, 20).addBox(-4.5F, -20.0F, -4.5F, 9.0F, 11.0F, 9.0F, new CubeDeformation(0.35F)), PartPose.offset(0.0F, 1.0F, 0.0F)); - return LayerDefinition.create(meshdefinition, 96, 64); - } + PartDefinition topHat = partdefinition.addOrReplaceChild("topHat", CubeListBuilder.create().texOffs(36, 0).addBox(-6.5F, -9.0F, -6.5F, 13.0F, 2.0F, 13.0F, new CubeDeformation(0.0F)) + .texOffs(36, 15).addBox(-6.5F, -9.0F, -6.5F, 13.0F, 2.0F, 13.0F, new CubeDeformation(0.35F)) + .texOffs(0, 0).addBox(-4.5F, -20.0F, -4.5F, 9.0F, 11.0F, 9.0F, new CubeDeformation(0.0F)) + .texOffs(0, 20).addBox(-4.5F, -20.0F, -4.5F, 9.0F, 11.0F, 9.0F, new CubeDeformation(0.35F)), PartPose.offset(0.0F, 1.0F, 0.0F)); + return LayerDefinition.create(meshdefinition, 96, 64); + } - @Override - public void setupAnim(Player entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { + @Override + public void setupAnim(Player entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { - } + } - @Override - public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { - topHat.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); - } + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + topHat.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/GenericArmorModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/GenericArmorModel.java index f243261ed..15874c3c3 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/GenericArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/GenericArmorModel.java @@ -12,40 +12,40 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class GenericArmorModel extends LodestoneArmorModel { - public static final ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("generic_armor_model"), "main"); + public static final ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("generic_armor_model"), "main"); - public GenericArmorModel(ModelPart root) { - super(root); - } + public GenericArmorModel(ModelPart root) { + super(root); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); - PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.525F)) - .texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(1.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition head = root.getChild("head"); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.525F)) + .texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(1.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(16, 32).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(16, 32).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(40, 16).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(40, 32).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(40, 16).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(40, 32).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(0, 32).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(0, 32).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(16, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(0, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(16, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(0, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); - return LayerDefinition.create(mesh, 64, 64); - } + return LayerDefinition.create(mesh, 64, 64); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/GenericSlimArmorModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/GenericSlimArmorModel.java index 71b619403..ad979e175 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/GenericSlimArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/GenericSlimArmorModel.java @@ -12,40 +12,40 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class GenericSlimArmorModel extends LodestoneArmorModel { - public static final ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("generic_slim_armor_model"), "main"); + public static final ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("generic_slim_armor_model"), "main"); - public GenericSlimArmorModel(ModelPart root) { - super(root); - } + public GenericSlimArmorModel(ModelPart root) { + super(root); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); - PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.525F)) - .texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(1.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition head = root.getChild("head"); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.525F)) + .texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(1.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(16, 32).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(16, 32).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(40, 16).addBox(-3.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(40, 32).addBox(-3.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(40, 16).addBox(-3.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(40, 32).addBox(-3.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(32, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(48, 48).addBox(-1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(0, 32).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(0, 32).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(16, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(0, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(16, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(0, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0, 0, 0.0F)); - return LayerDefinition.create(mesh, 64, 64); - } + return LayerDefinition.create(mesh, 64, 64); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/ScarfModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/ScarfModel.java index 16aa678d2..f8ebb2b10 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/ScarfModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/ScarfModel.java @@ -13,39 +13,39 @@ public class ScarfModel extends EntityModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("scarf"), "main"); - public final ModelPart headScarf; - public final ModelPart torsoScarf; + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("scarf"), "main"); + public final ModelPart headScarf; + public final ModelPart torsoScarf; - public ScarfModel(ModelPart root) { - this.headScarf = root.getChild("head_scarf"); - this.torsoScarf = root.getChild("torso_scarf"); - } + public ScarfModel(ModelPart root) { + this.headScarf = root.getChild("head_scarf"); + this.torsoScarf = root.getChild("torso_scarf"); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition partdefinition = mesh.getRoot(); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition partdefinition = mesh.getRoot(); - PartDefinition headScarf = partdefinition.addOrReplaceChild("head_scarf", CubeListBuilder.create().texOffs(0, 14).addBox(-4.5F, -2.25F, -4.5F, 9.0F, 3.0F, 9.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition headScarf = partdefinition.addOrReplaceChild("head_scarf", CubeListBuilder.create().texOffs(0, 14).addBox(-4.5F, -2.25F, -4.5F, 9.0F, 3.0F, 9.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition torsoScarf = partdefinition.addOrReplaceChild("torso_scarf", CubeListBuilder.create().texOffs(0, 0).addBox(-5.5F, -1.0F, -2.5F, 11.0F, 9.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition torsoScarf = partdefinition.addOrReplaceChild("torso_scarf", CubeListBuilder.create().texOffs(0, 0).addBox(-5.5F, -1.0F, -2.5F, 11.0F, 9.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - return LayerDefinition.create(mesh, 64, 32); - } + return LayerDefinition.create(mesh, 64, 32); + } - public void copyFromDefault(HumanoidModel model) { - torsoScarf.copyFrom(model.body); - headScarf.copyFrom(model.head); - } + public void copyFromDefault(HumanoidModel model) { + torsoScarf.copyFrom(model.body); + headScarf.copyFrom(model.head); + } - @Override - public void setupAnim(Player pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) { + @Override + public void setupAnim(Player pEntity, float pLimbSwing, float pLimbSwingAmount, float pAgeInTicks, float pNetHeadYaw, float pHeadPitch) { - } + } - @Override - public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { - headScarf.render(poseStack, buffer, packedLight, packedOverlay); - torsoScarf.render(poseStack, buffer, packedLight, packedOverlay); - } + @Override + public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { + headScarf.render(poseStack, buffer, packedLight, packedOverlay); + torsoScarf.render(poseStack, buffer, packedLight, packedOverlay); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/ancient/AncientSoulHunterArmorModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/ancient/AncientSoulHunterArmorModel.java index f07d12630..bbe5acd18 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/ancient/AncientSoulHunterArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/ancient/AncientSoulHunterArmorModel.java @@ -13,41 +13,41 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class AncientSoulHunterArmorModel extends LodestoneArmorModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("ancient_soul_hunter_armor"), "main"); + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("ancient_soul_hunter_armor"), "main"); - public AncientSoulHunterArmorModel(ModelPart root) { - super(root); - } + public AncientSoulHunterArmorModel(ModelPart root) { + super(root); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(40, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 13.0F, 4.0F, new CubeDeformation(0.95F)).texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 13.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(40, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 13.0F, 4.0F, new CubeDeformation(0.95F)).texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 13.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition leggings = root.getChild("leggings"); - PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(16, 33).addBox(-4.0F, 9.0F, -2.0F, 8.0F, 3.0F, 4.0F, new CubeDeformation(0.5F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition leggings = root.getChild("leggings"); + PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(16, 33).addBox(-4.0F, 9.0F, -2.0F, 8.0F, 3.0F, 4.0F, new CubeDeformation(0.5F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 42).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.45F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 55).addBox(-2.0F, 8.0F, -2.0F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.9F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 42).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.45F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_foot = root.getChild("right_foot"); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 55).addBox(-2.0F, 8.0F, -2.0F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.9F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 29).mirror().addBox(-3.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.5F)).mirror(false).texOffs(0, 16).mirror().addBox(-3.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.7F)).mirror(false), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 29).mirror().addBox(-3.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.5F)).mirror(false).texOffs(0, 16).mirror().addBox(-3.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.7F)).mirror(false), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 42).mirror().addBox(-2.0F, 0.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.45F)).mirror(false), PartPose.offset(0, 0, 0)); - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(0, 55).mirror().addBox(-2.0F, 8.0F, -2.0F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.9001F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 42).mirror().addBox(-2.0F, 0.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.45F)).mirror(false), PartPose.offset(0, 0, 0)); + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(0, 55).mirror().addBox(-2.0F, 8.0F, -2.0F, 4.0F, 4.0F, 4.0F, new CubeDeformation(0.9001F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(0, 29).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.5F)).texOffs(0, 16).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(0, 29).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.5F)).texOffs(0, 16).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.5F)).texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.7F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition head = root.getChild("head"); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.5F)).texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.7F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - return LayerDefinition.create(mesh, 64, 64); - } + return LayerDefinition.create(mesh, 64, 64); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/ancient/AncientSoulStainedSteelArmorModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/ancient/AncientSoulStainedSteelArmorModel.java index 0f8f73d9e..08a24e9bb 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/ancient/AncientSoulStainedSteelArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/ancient/AncientSoulStainedSteelArmorModel.java @@ -13,41 +13,41 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class AncientSoulStainedSteelArmorModel extends LodestoneArmorModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("ancient_soul_stained_steel_armor"), "main"); + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("ancient_soul_stained_steel_armor"), "main"); - public AncientSoulStainedSteelArmorModel(ModelPart root) { - super(root); - } + public AncientSoulStainedSteelArmorModel(ModelPart root) { + super(root); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(24, 17).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(1.1F)).texOffs(0, 17).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.6F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(24, 17).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(1.1F)).texOffs(0, 17).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.6F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition leggings = root.getChild("leggings"); - PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(16, 33).addBox(-4.0F, 9.0F, -2.0F, 8.0F, 3.0F, 4.0F, new CubeDeformation(0.501F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition leggings = root.getChild("leggings"); + PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(16, 33).addBox(-4.0F, 9.0F, -2.0F, 8.0F, 3.0F, 4.0F, new CubeDeformation(0.501F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 33).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.5F)).texOffs(0, 45).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(-0, 0, 0.0F)); - PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(16, 40).addBox(-2.0F, 9.0F, -2.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.5F)).texOffs(32, 40).addBox(-2.0F, 9.0F, -2.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 33).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.5F)).texOffs(0, 45).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(-0, 0, 0.0F)); + PartDefinition right_foot = root.getChild("right_foot"); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(16, 40).addBox(-2.0F, 9.0F, -2.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.5F)).texOffs(32, 40).addBox(-2.0F, 9.0F, -2.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(48, 17).mirror().addBox(-3.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.5F)).mirror(false).texOffs(48, 30).mirror().addBox(-3.25F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.75F)).mirror(false), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(48, 17).mirror().addBox(-3.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.5F)).mirror(false).texOffs(48, 30).mirror().addBox(-3.25F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.75F)).mirror(false), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 33).mirror().addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.5001F)).mirror(false).texOffs(0, 45).mirror().addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.8501F)).mirror(false), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(16, 40).mirror().addBox(-2.0F, 9.0F, -2.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.5001F)).mirror(false).texOffs(32, 40).mirror().addBox(-2.0F, 9.0F, -2.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.7501F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 33).mirror().addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.5001F)).mirror(false).texOffs(0, 45).mirror().addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.8501F)).mirror(false), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(16, 40).mirror().addBox(-2.0F, 9.0F, -2.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.5001F)).mirror(false).texOffs(32, 40).mirror().addBox(-2.0F, 9.0F, -2.0F, 4.0F, 3.0F, 4.0F, new CubeDeformation(0.7501F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(48, 30).addBox(-0.75F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.75F)).texOffs(48, 17).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.5F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(48, 30).addBox(-0.75F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.75F)).texOffs(48, 17).addBox(-1.0F, -2.0F, -2.0F, 4.0F, 9.0F, 4.0F, new CubeDeformation(0.5F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -9.0F, -4.0F, 8.0F, 9.0F, 8.0F, new CubeDeformation(0.5F)).texOffs(32, 0).addBox(-4.0F, -9.0F, -4.0F, 8.0F, 9.0F, 8.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 1.0F, 0.0F)); + PartDefinition head = root.getChild("head"); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -9.0F, -4.0F, 8.0F, 9.0F, 8.0F, new CubeDeformation(0.5F)).texOffs(32, 0).addBox(-4.0F, -9.0F, -4.0F, 8.0F, 9.0F, 8.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 1.0F, 0.0F)); - return LayerDefinition.create(mesh, 64, 64); - } + return LayerDefinition.create(mesh, 64, 64); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/pride/PridewearArmorModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/pride/PridewearArmorModel.java index 3eedca30d..8eb7c3c98 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/pride/PridewearArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/pride/PridewearArmorModel.java @@ -13,54 +13,54 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class PridewearArmorModel extends LodestoneArmorModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("pridewear"), "main"); + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("pridewear"), "main"); - public PridewearArmorModel(ModelPart root) { - super(root); - } + public PridewearArmorModel(ModelPart root) { + super(root); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(16, 0).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(16, 0).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition leggings = root.getChild("leggings"); - PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 56).addBox(-5.0F, -14.0F, -3.0F, 10.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24f, 0.0F)); + PartDefinition leggings = root.getChild("leggings"); + PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 56).addBox(-5.0F, -14.0F, -3.0F, 10.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24f, 0.0F)); - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 48).addBox(-1.9F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.625F)) - .texOffs(16, 48).addBox(-1.9F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 4).addBox(-1.9F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.625F)) - .texOffs(0, 20).addBox(-1.9F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 48).addBox(-1.9F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.625F)) + .texOffs(16, 48).addBox(-1.9F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_foot = root.getChild("right_foot"); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 4).addBox(-1.9F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.625F)) + .texOffs(0, 20).addBox(-1.9F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(40, 0).addBox(-5.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(40, 16).addBox(-5.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(2, 0, 0.0F)); + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(40, 0).addBox(-5.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(40, 16).addBox(-5.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(2, 0, 0.0F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(32, 48).addBox(-2.1F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.625F)) - .texOffs(48, 48).addBox(-2.1F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(16, 36).addBox(-2.1F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.625F)) - .texOffs(0, 36).addBox(-2.1F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(32, 48).addBox(-2.1F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.625F)) + .texOffs(48, 48).addBox(-2.1F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(16, 36).addBox(-2.1F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.625F)) + .texOffs(0, 36).addBox(-2.1F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(32, 32).addBox(1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(48, 32).addBox(1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(-2, 0, 0.0F)); + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(32, 32).addBox(1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(48, 32).addBox(1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(-2, 0, 0.0F)); - PartDefinition head = root.getChild("head"); - PartDefinition beanie = head.addOrReplaceChild("beanie", CubeListBuilder.create().texOffs(100, 60).addBox(-1.5F, -33.3512F, -8.053F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.2F)) - .texOffs(64, 53).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.0F)) - .texOffs(64, 53).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.2F)) - .texOffs(64, 35).addBox(-5.0F, -29.3512F, -16.303F, 10.0F, 3.0F, 10.0F, new CubeDeformation(0.2F)) - .texOffs(100, 28).addBox(-1.5F, -33.3512F, -8.053F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.0F)) - .texOffs(64, 21).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.0F)) - .texOffs(64, 3).addBox(-5.0F, -29.3512F, -16.303F, 10.0F, 3.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 24f, 0.0F, -0.3927F, 0.0F, 0.0F)); + PartDefinition head = root.getChild("head"); + PartDefinition beanie = head.addOrReplaceChild("beanie", CubeListBuilder.create().texOffs(100, 60).addBox(-1.5F, -33.3512F, -8.053F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.2F)) + .texOffs(64, 53).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(64, 53).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.2F)) + .texOffs(64, 35).addBox(-5.0F, -29.3512F, -16.303F, 10.0F, 3.0F, 10.0F, new CubeDeformation(0.2F)) + .texOffs(100, 28).addBox(-1.5F, -33.3512F, -8.053F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(64, 21).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(64, 3).addBox(-5.0F, -29.3512F, -16.303F, 10.0F, 3.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 24f, 0.0F, -0.3927F, 0.0F, 0.0F)); - return LayerDefinition.create(mesh, 128, 64); - } + return LayerDefinition.create(mesh, 128, 64); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/pride/SlimPridewearArmorModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/pride/SlimPridewearArmorModel.java index 4cf649f6c..b7a417010 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/pride/SlimPridewearArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/pride/SlimPridewearArmorModel.java @@ -13,54 +13,54 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class SlimPridewearArmorModel extends LodestoneArmorModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("slim_pridewear"), "main"); + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("slim_pridewear"), "main"); - public SlimPridewearArmorModel(ModelPart root) { - super(root); - } + public SlimPridewearArmorModel(ModelPart root) { + super(root); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(16, 0).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(16, 0).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition leggings = root.getChild("leggings"); - PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 56).addBox(-5.0F, -14.0F, -3.0F, 10.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24f, 0.0F)); + PartDefinition leggings = root.getChild("leggings"); + PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 56).addBox(-5.0F, -14.0F, -3.0F, 10.0F, 2.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 24f, 0.0F)); - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 48).addBox(-1.9F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.625F)) - .texOffs(16, 48).addBox(-1.9F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 4).addBox(-1.9F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.625F)) - .texOffs(0, 20).addBox(-1.9F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 48).addBox(-1.9F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.625F)) + .texOffs(16, 48).addBox(-1.9F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_foot = root.getChild("right_foot"); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 4).addBox(-1.9F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.625F)) + .texOffs(0, 20).addBox(-1.9F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(40, 0).addBox(-4.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(40, 16).addBox(-4.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(2, 0, 0.0F)); + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(40, 0).addBox(-4.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(40, 16).addBox(-4.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(2, 0, 0.0F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(32, 48).addBox(-2.1F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.625F)) - .texOffs(48, 48).addBox(-2.1F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(16, 36).addBox(-2.1F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.625F)) - .texOffs(0, 36).addBox(-2.1F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(32, 48).addBox(-2.1F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.625F)) + .texOffs(48, 48).addBox(-2.1F, 0.0F, -2.0F, 4.0F, 2.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(16, 36).addBox(-2.1F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.625F)) + .texOffs(0, 36).addBox(-2.1F, 4.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.85F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(32, 32).addBox(1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) - .texOffs(48, 32).addBox(1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(-2.0F, 0, 0.0F)); + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(32, 32).addBox(1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.525F)) + .texOffs(48, 32).addBox(1.0F, -2.0F, -2.0F, 3.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(-2.0F, 0, 0.0F)); - PartDefinition head = root.getChild("head"); - PartDefinition beanie = head.addOrReplaceChild("beanie", CubeListBuilder.create().texOffs(100, 60).addBox(-1.5F, -33.3512F, -8.053F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.2F)) - .texOffs(64, 53).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.0F)) - .texOffs(64, 53).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.2F)) - .texOffs(64, 35).addBox(-5.0F, -29.3512F, -16.303F, 10.0F, 3.0F, 10.0F, new CubeDeformation(0.2F)) - .texOffs(100, 28).addBox(-1.5F, -33.3512F, -8.053F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.0F)) - .texOffs(64, 21).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.0F)) - .texOffs(64, 3).addBox(-5.0F, -29.3512F, -16.303F, 10.0F, 3.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 24f, 0.0F, -0.3927F, 0.0F, 0.0F)); + PartDefinition head = root.getChild("head"); + PartDefinition beanie = head.addOrReplaceChild("beanie", CubeListBuilder.create().texOffs(100, 60).addBox(-1.5F, -33.3512F, -8.053F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.2F)) + .texOffs(64, 53).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(64, 53).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.2F)) + .texOffs(64, 35).addBox(-5.0F, -29.3512F, -16.303F, 10.0F, 3.0F, 10.0F, new CubeDeformation(0.2F)) + .texOffs(100, 28).addBox(-1.5F, -33.3512F, -8.053F, 3.0F, 2.0F, 2.0F, new CubeDeformation(0.0F)) + .texOffs(64, 21).addBox(-4.6F, -32.4238F, -15.2587F, 9.0F, 3.0F, 8.0F, new CubeDeformation(0.0F)) + .texOffs(64, 3).addBox(-5.0F, -29.3512F, -16.303F, 10.0F, 3.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 24f, 0.0F, -0.3927F, 0.0F, 0.0F)); - return LayerDefinition.create(mesh, 128, 64); - } + return LayerDefinition.create(mesh, 128, 64); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/risky/CommandoArmorModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/risky/CommandoArmorModel.java index c070fa5c5..a83fec9ee 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/risky/CommandoArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/risky/CommandoArmorModel.java @@ -13,54 +13,54 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class CommandoArmorModel extends LodestoneArmorModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("commando_armor"), "main"); + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("commando_armor"), "main"); - public CommandoArmorModel(ModelPart root) { - super(root); - } + public CommandoArmorModel(ModelPart root) { + super(root); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); - - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(0, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 11.0F, 5.0F, new CubeDeformation(0.0F)) - .texOffs(28, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 11.0F, 5.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); - PartDefinition leggings = root.getChild("leggings"); - PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 55).addBox(-4.5F, -13.5F, -2.5F, 9.0F, 3.0F, 5.0F, new CubeDeformation(0.015F)) - .texOffs(28, 55).addBox(-4.5F, -13.5F, -2.5F, 9.0F, 3.0F, 5.0F, new CubeDeformation(0.3F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(0, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 11.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(28, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 11.0F, 5.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 64).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(20, 64).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offset(0, 0, 0.0F)); - PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 77).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)) - .texOffs(24, 77).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition leggings = root.getChild("leggings"); + PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 55).addBox(-4.5F, -13.5F, -2.5F, 9.0F, 3.0F, 5.0F, new CubeDeformation(0.015F)) + .texOffs(28, 55).addBox(-4.5F, -13.5F, -2.5F, 9.0F, 3.0F, 5.0F, new CubeDeformation(0.3F)), PartPose.offset(0.0F, 24.0F, 0.0F)); - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 45).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.02F)).mirror(false) - .texOffs(20, 45).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) - .texOffs(8, 34).addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)) - .texOffs(28, 34).addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(1, 0, 0.0F)); + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 64).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(20, 64).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_foot = root.getChild("right_foot"); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 77).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(24, 77).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 64).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.0F)) - .texOffs(20, 64).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.25F)), PartPose.offset(0, 0, 0)); - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(0, 77).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(24, 77).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 45).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.02F)).mirror(false) + .texOffs(20, 45).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) + .texOffs(8, 34).addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)) + .texOffs(28, 34).addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(1, 0, 0.0F)); - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(8, 34).mirror().addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(28, 34).mirror().addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) - .texOffs(0, 45).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.02F)) - .texOffs(20, 45).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(-1, 0, 0.0F)); + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 64).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(20, 64).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.25F)), PartPose.offset(0, 0, 0)); + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(0, 77).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(24, 77).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -8.5F, -5.0F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.1F)) - .texOffs(36, 0).addBox(-4.5F, -8.5F, -5.0F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.35F)), PartPose.offset(0.0F, 0.0F, 0)); + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(8, 34).mirror().addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(28, 34).mirror().addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) + .texOffs(0, 45).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.02F)) + .texOffs(20, 45).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(-1, 0, 0.0F)); - return LayerDefinition.create(mesh, 128, 128); - } + PartDefinition head = root.getChild("head"); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -8.5F, -5.0F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.1F)) + .texOffs(36, 0).addBox(-4.5F, -8.5F, -5.0F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.35F)), PartPose.offset(0.0F, 0.0F, 0)); + + return LayerDefinition.create(mesh, 128, 128); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/risky/ExecutionerArmorModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/risky/ExecutionerArmorModel.java index c3ca33008..59ef8b8eb 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/risky/ExecutionerArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/risky/ExecutionerArmorModel.java @@ -13,64 +13,63 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class ExecutionerArmorModel extends LodestoneArmorModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("executioner_armor"), "main"); + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("executioner_armor"), "main"); - public ExecutionerArmorModel(ModelPart root) { - super(root); - } + public ExecutionerArmorModel(ModelPart root) { + super(root); + } - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(0, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 11.0F, 5.0F, new CubeDeformation(0.0F)) - .texOffs(28, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 11.0F, 5.0F, new CubeDeformation(0.35F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(0, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 11.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(28, 18).addBox(-4.5F, -0.5F, -2.5F, 9.0F, 11.0F, 5.0F, new CubeDeformation(0.35F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition leggings = root.getChild("leggings"); - PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 84).addBox(-5.0F, -14.5F, -3.5F, 10.0F, 3.0F, 7.0F, new CubeDeformation(0.01F)) - .texOffs(34, 84).addBox(-5.0F, -14.5F, -3.5F, 10.0F, 3.0F, 7.0F, new CubeDeformation(0.26F)), PartPose.offset(0.0F, 24.0F, 0.0F)); + PartDefinition leggings = root.getChild("leggings"); + PartDefinition codpiece = leggings.addOrReplaceChild("codpiece", CubeListBuilder.create().texOffs(0, 84).addBox(-5.0F, -14.5F, -3.5F, 10.0F, 3.0F, 7.0F, new CubeDeformation(0.01F)) + .texOffs(34, 84).addBox(-5.0F, -14.5F, -3.5F, 10.0F, 3.0F, 7.0F, new CubeDeformation(0.26F)), PartPose.offset(0.0F, 24.0F, 0.0F)); - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 59).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(20, 59).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offset(0, 0, 0.0F)); - PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 72).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)) - .texOffs(24, 72).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition right_robe = right_legging.addOrReplaceChild("right_robe", CubeListBuilder.create().texOffs(0, 118).addBox(-1.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.25F)) - .texOffs(0, 108).addBox(-1.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.0F)) - .texOffs(0, 94).addBox(0.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)) - .texOffs(22, 94).addBox(0.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(-3.0F, -0.5F, 1.5F, 0.0F, 0.0F, 0.1745F)); + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 59).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(20, 59).mirror().addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false), PartPose.offset(0, 0, 0.0F)); + PartDefinition right_foot = root.getChild("right_foot"); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(0, 72).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)) + .texOffs(24, 72).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition right_robe = right_legging.addOrReplaceChild("right_robe", CubeListBuilder.create().texOffs(0, 118).addBox(-1.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.25F)) + .texOffs(0, 108).addBox(-1.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(0, 94).addBox(0.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)) + .texOffs(22, 94).addBox(0.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(-3.0F, -0.5F, 1.5F, 0.0F, 0.0F, 0.1745F)); - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 49).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.02F)).mirror(false) - .texOffs(20, 49).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) - .texOffs(8, 34).addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)) - .texOffs(28, 34).addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(1, 0, 0.0F)); + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 49).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.02F)).mirror(false) + .texOffs(20, 49).mirror().addBox(-4.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) + .texOffs(8, 34).addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)) + .texOffs(28, 34).addBox(-4.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(1, 0, 0.0F)); - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 59).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.0F)) - .texOffs(20, 59).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.25F)), PartPose.offset(0, 0, 0.0F)); - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(0, 72).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(24, 72).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); - PartDefinition left_robe = left_legging.addOrReplaceChild("left_robe", CubeListBuilder.create().texOffs(0, 118).mirror().addBox(0.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(0, 108).mirror().addBox(0.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(22, 94).mirror().addBox(-4.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(0, 94).mirror().addBox(-4.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(3.0F, -0.5F, 1.5F, 0.0F, 0.0F, -0.1745F)); + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 59).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.0F)) + .texOffs(20, 59).addBox(-2.5F, -0.5F, -2.5F, 5.0F, 8.0F, 5.0F, new CubeDeformation(0.25F)), PartPose.offset(0, 0, 0.0F)); + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(0, 72).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(24, 72).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offset(0.0F, 0.0F, 0.0F)); + PartDefinition left_robe = left_legging.addOrReplaceChild("left_robe", CubeListBuilder.create().texOffs(0, 118).mirror().addBox(0.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(0, 108).mirror().addBox(0.0F, 3.0F, -5.0F, 1.0F, 3.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(22, 94).mirror().addBox(-4.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(0, 94).mirror().addBox(-4.0F, -1.0F, -5.0F, 4.0F, 7.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(3.0F, -0.5F, 1.5F, 0.0F, 0.0F, -0.1745F)); + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(8, 34).mirror().addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) + .texOffs(28, 34).mirror().addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) + .texOffs(0, 49).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.02F)) + .texOffs(20, 49).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(-1, 0, 0.0F)); - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(8, 34).mirror().addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.01F)).mirror(false) - .texOffs(28, 34).mirror().addBox(-0.5F, -2.5F, -2.5F, 5.0F, 6.0F, 5.0F, new CubeDeformation(0.26F)).mirror(false) - .texOffs(0, 49).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.02F)) - .texOffs(20, 49).addBox(-0.5F, 5.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.26F)), PartPose.offset(-1, 0, 0.0F)); + PartDefinition head = root.getChild("head"); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -8.5F, -5.0F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.0F)) + .texOffs(36, 0).addBox(-4.5F, -8.5F, -5.0F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.35F)), PartPose.offset(0.0F, 0.0F, 0.5F)); - PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.5F, -8.5F, -5.0F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.0F)) - .texOffs(36, 0).addBox(-4.5F, -8.5F, -5.0F, 9.0F, 9.0F, 9.0F, new CubeDeformation(0.35F)), PartPose.offset(0.0F, 0.0F, 0.5F)); - - return LayerDefinition.create(mesh, 128, 128); - } + return LayerDefinition.create(mesh, 128, 128); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/model/cosmetic/ultrakill/UltrakillMachineArmorModel.java b/src/main/java/com/sammy/malum/client/model/cosmetic/ultrakill/UltrakillMachineArmorModel.java index 4e4589dc7..b276ba909 100644 --- a/src/main/java/com/sammy/malum/client/model/cosmetic/ultrakill/UltrakillMachineArmorModel.java +++ b/src/main/java/com/sammy/malum/client/model/cosmetic/ultrakill/UltrakillMachineArmorModel.java @@ -18,132 +18,132 @@ import team.lodestar.lodestone.systems.model.LodestoneArmorModel; public class UltrakillMachineArmorModel extends LodestoneArmorModel { - public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("ultrakill_machine"), "main"); - - public ModelPart wings; - public ModelPart wingsFullBright; - public ModelPart helmetFullBright; - - public UltrakillMachineArmorModel(ModelPart root) { - super(root); - this.wings = root.getChild("wings"); - this.wingsFullBright = root.getChild("wings_full_bright"); - this.helmetFullBright = root.getChild("helmet_full_bright"); - } - - @Override - public void renderToBuffer(PoseStack pPoseStack, VertexConsumer pBuffer, int pPackedLight, int pPackedOverlay, float pRed, float pGreen, float pBlue, float pAlpha) { - super.renderToBuffer(pPoseStack, pBuffer, pPackedLight, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); - if (!this.young) { - if (slot == EquipmentSlot.CHEST) { - wingsFullBright.render(pPoseStack, pBuffer, RenderHelper.FULL_BRIGHT, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); - } - if (slot == EquipmentSlot.HEAD) { - helmetFullBright.render(pPoseStack, pBuffer, RenderHelper.FULL_BRIGHT, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); - } - } - } - - @Override - protected Iterable bodyParts() { - if (this.slot == EquipmentSlot.CHEST) { - return ImmutableList.of(this.body, this.leftArm, this.rightArm, this.wings); - } else if (this.slot == EquipmentSlot.LEGS) { - return ImmutableList.of(this.leftLegging, this.rightLegging, this.leggings); - } else { - return this.slot == EquipmentSlot.FEET ? ImmutableList.of(this.leftFoot, this.rightFoot) : ImmutableList.of(); - } - } - - @Override - public void copyFromDefault(HumanoidModel model) { - super.copyFromDefault(model); - wings.copyFrom(model.body); - wingsFullBright.copyFrom(model.body); - helmetFullBright.copyFrom(model.head); - } - - public static LayerDefinition createBodyLayer() { - MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); - PartDefinition root = createHumanoidAlias(mesh); - PartDefinition wings = root.addOrReplaceChild("wings", new CubeListBuilder(), PartPose.ZERO); - PartDefinition wingsFullBright = root.addOrReplaceChild("wings_full_bright", new CubeListBuilder(), PartPose.ZERO); - PartDefinition helmetFullBright = root.addOrReplaceChild("helmet_full_bright", new CubeListBuilder(), PartPose.ZERO); - - PartDefinition body = root.getChild("body"); - PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(24, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.95F)) - .texOffs(0, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - - PartDefinition right_legging = root.getChild("right_legging"); - PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 48).mirror().addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.45F)).mirror(false), PartPose.offset(0, 0, 0)); - - PartDefinition right_foot = root.getChild("right_foot"); - PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(32, 44).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)) - .texOffs(32, 32).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - - PartDefinition right_arm = root.getChild("right_arm"); - PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 32).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.5F)) - .texOffs(16, 32).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offset(0, 0, 0.0F)); - - PartDefinition left_legging = root.getChild("left_legging"); - PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.45F)), PartPose.offset(0, 0, 0.0F)); - - PartDefinition left_foot = root.getChild("left_foot"); - PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(32, 44).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.26F)).mirror(false) - .texOffs(32, 32).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false), PartPose.offset(0, 0.0F, 0.0F)); - - PartDefinition left_arm = root.getChild("left_arm"); - PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(0, 32).mirror().addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.5F)).mirror(false) - .texOffs(16, 32).mirror().addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.7F)).mirror(false), PartPose.offset(0, 0, 0.0F)); - - PartDefinition head = root.getChild("head"); - PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.5F)) - .texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.95F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - - PartDefinition helmet_full_bright = helmetFullBright.addOrReplaceChild("helmet_full_bright", CubeListBuilder.create().texOffs(10, 10).addBox(-2.0F, -6.0F, -4.25F, 4.0F, 4.0F, 0.0F, new CubeDeformation(0.251F)), PartPose.offset(0.0F, 0.0F, 0.0F)); - - PartDefinition l1 = wings.addOrReplaceChild("l1", CubeListBuilder.create().texOffs(16, 48).addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) - .texOffs(24, 48).mirror().addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(16, 51).addBox(6.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)) - .texOffs(24, 51).addBox(6.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, -0.1745F, -0.6981F)); - - PartDefinition l2 = wings.addOrReplaceChild("l2", CubeListBuilder.create().texOffs(16, 48).addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) - .texOffs(24, 48).mirror().addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(16, 51).addBox(6.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)) - .texOffs(24, 51).addBox(6.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, -0.1309F, 0.0F)); - - PartDefinition l3 = wings.addOrReplaceChild("l3", CubeListBuilder.create().texOffs(16, 48).addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) - .texOffs(24, 48).mirror().addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false) - .texOffs(16, 51).addBox(6.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)) - .texOffs(24, 51).addBox(6.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, -0.0873F, 0.6981F)); - - PartDefinition r1 = wings.addOrReplaceChild("r1", CubeListBuilder.create().texOffs(16, 48).mirror().addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(24, 48).addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)) - .texOffs(16, 51).mirror().addBox(-9.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(24, 51).mirror().addBox(-9.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, 0.1745F, 0.6981F)); - - PartDefinition r2 = wings.addOrReplaceChild("r2", CubeListBuilder.create().texOffs(16, 48).mirror().addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(24, 48).addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)) - .texOffs(16, 51).mirror().addBox(-9.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(24, 51).mirror().addBox(-9.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, 0.1309F, 0.0F)); - - PartDefinition r3 = wings.addOrReplaceChild("r3", CubeListBuilder.create().texOffs(16, 48).mirror().addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(24, 48).addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)) - .texOffs(16, 51).mirror().addBox(-9.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) - .texOffs(24, 51).mirror().addBox(-9.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, 0.0873F, -0.6981F)); - - PartDefinition l4 = wingsFullBright.addOrReplaceChild("l4", CubeListBuilder.create().texOffs(16, 57).mirror().addBox(6.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, -0.1745F, -0.6981F)); - - PartDefinition l5 = wingsFullBright.addOrReplaceChild("l5", CubeListBuilder.create().texOffs(16, 57).mirror().addBox(7.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, -0.1309F, 0.0F)); - - PartDefinition l6 = wingsFullBright.addOrReplaceChild("l6", CubeListBuilder.create().texOffs(16, 57).mirror().addBox(6.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, -0.0873F, 0.6981F)); - - PartDefinition r4 = wingsFullBright.addOrReplaceChild("r4", CubeListBuilder.create().texOffs(16, 57).addBox(-19.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, 0.1745F, 0.6981F)); - - PartDefinition r5 = wingsFullBright.addOrReplaceChild("r5", CubeListBuilder.create().texOffs(16, 57).addBox(-19.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, 0.1309F, 0.0F)); - - PartDefinition r6 = wingsFullBright.addOrReplaceChild("r6", CubeListBuilder.create().texOffs(16, 57).addBox(-19.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, 0.0873F, -0.6981F)); + public static ModelLayerLocation LAYER = new ModelLayerLocation(MalumMod.malumPath("ultrakill_machine"), "main"); + + public ModelPart wings; + public ModelPart wingsFullBright; + public ModelPart helmetFullBright; + + public UltrakillMachineArmorModel(ModelPart root) { + super(root); + this.wings = root.getChild("wings"); + this.wingsFullBright = root.getChild("wings_full_bright"); + this.helmetFullBright = root.getChild("helmet_full_bright"); + } + + @Override + public void renderToBuffer(PoseStack pPoseStack, VertexConsumer pBuffer, int pPackedLight, int pPackedOverlay, float pRed, float pGreen, float pBlue, float pAlpha) { + super.renderToBuffer(pPoseStack, pBuffer, pPackedLight, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); + if (!this.young) { + if (slot == EquipmentSlot.CHEST) { + wingsFullBright.render(pPoseStack, pBuffer, RenderHelper.FULL_BRIGHT, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); + } + if (slot == EquipmentSlot.HEAD) { + helmetFullBright.render(pPoseStack, pBuffer, RenderHelper.FULL_BRIGHT, pPackedOverlay, pRed, pGreen, pBlue, pAlpha); + } + } + } + + @Override + protected Iterable bodyParts() { + if (this.slot == EquipmentSlot.CHEST) { + return ImmutableList.of(this.body, this.leftArm, this.rightArm, this.wings); + } else if (this.slot == EquipmentSlot.LEGS) { + return ImmutableList.of(this.leftLegging, this.rightLegging, this.leggings); + } else { + return this.slot == EquipmentSlot.FEET ? ImmutableList.of(this.leftFoot, this.rightFoot) : ImmutableList.of(); + } + } + + @Override + public void copyFromDefault(HumanoidModel model) { + super.copyFromDefault(model); + wings.copyFrom(model.body); + wingsFullBright.copyFrom(model.body); + helmetFullBright.copyFrom(model.head); + } + + public static LayerDefinition createBodyLayer() { + MeshDefinition mesh = HumanoidModel.createMesh(new CubeDeformation(0), 0); + PartDefinition root = createHumanoidAlias(mesh); + PartDefinition wings = root.addOrReplaceChild("wings", new CubeListBuilder(), PartPose.ZERO); + PartDefinition wingsFullBright = root.addOrReplaceChild("wings_full_bright", new CubeListBuilder(), PartPose.ZERO); + PartDefinition helmetFullBright = root.addOrReplaceChild("helmet_full_bright", new CubeListBuilder(), PartPose.ZERO); + + PartDefinition body = root.getChild("body"); + PartDefinition torso = body.addOrReplaceChild("torso", CubeListBuilder.create().texOffs(24, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.95F)) + .texOffs(0, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, new CubeDeformation(0.75F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition right_legging = root.getChild("right_legging"); + PartDefinition right_leg = right_legging.addOrReplaceChild("right_leg", CubeListBuilder.create().texOffs(0, 48).mirror().addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.45F)).mirror(false), PartPose.offset(0, 0, 0)); + + PartDefinition right_foot = root.getChild("right_foot"); + PartDefinition right_boot = right_foot.addOrReplaceChild("right_boot", CubeListBuilder.create().texOffs(32, 44).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.25F)) + .texOffs(32, 32).addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition right_arm = root.getChild("right_arm"); + PartDefinition right_shoulder = right_arm.addOrReplaceChild("right_shoulder", CubeListBuilder.create().texOffs(0, 32).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.5F)) + .texOffs(16, 32).addBox(-3.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.7F)), PartPose.offset(0, 0, 0.0F)); + + PartDefinition left_legging = root.getChild("left_legging"); + PartDefinition left_leg = left_legging.addOrReplaceChild("left_leg", CubeListBuilder.create().texOffs(0, 48).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 8.0F, 4.0F, new CubeDeformation(0.45F)), PartPose.offset(0, 0, 0.0F)); + + PartDefinition left_foot = root.getChild("left_foot"); + PartDefinition left_boot = left_foot.addOrReplaceChild("left_boot", CubeListBuilder.create().texOffs(32, 44).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.26F)).mirror(false) + .texOffs(32, 32).mirror().addBox(-3.0F, 7.0F, -3.0F, 6.0F, 6.0F, 6.0F, new CubeDeformation(0.01F)).mirror(false), PartPose.offset(0, 0.0F, 0.0F)); + + PartDefinition left_arm = root.getChild("left_arm"); + PartDefinition left_shoulder = left_arm.addOrReplaceChild("left_shoulder", CubeListBuilder.create().texOffs(0, 32).mirror().addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.5F)).mirror(false) + .texOffs(16, 32).mirror().addBox(-1.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F, new CubeDeformation(0.7F)).mirror(false), PartPose.offset(0, 0, 0.0F)); + + PartDefinition head = root.getChild("head"); + PartDefinition helmet = head.addOrReplaceChild("helmet", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.5F)) + .texOffs(32, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, new CubeDeformation(0.95F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition helmet_full_bright = helmetFullBright.addOrReplaceChild("helmet_full_bright", CubeListBuilder.create().texOffs(10, 10).addBox(-2.0F, -6.0F, -4.25F, 4.0F, 4.0F, 0.0F, new CubeDeformation(0.251F)), PartPose.offset(0.0F, 0.0F, 0.0F)); + + PartDefinition l1 = wings.addOrReplaceChild("l1", CubeListBuilder.create().texOffs(16, 48).addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 48).mirror().addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(16, 51).addBox(6.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 51).addBox(6.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, -0.1745F, -0.6981F)); + + PartDefinition l2 = wings.addOrReplaceChild("l2", CubeListBuilder.create().texOffs(16, 48).addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 48).mirror().addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(16, 51).addBox(6.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 51).addBox(6.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, -0.1309F, 0.0F)); + + PartDefinition l3 = wings.addOrReplaceChild("l3", CubeListBuilder.create().texOffs(16, 48).addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 48).mirror().addBox(3.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false) + .texOffs(16, 51).addBox(6.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)) + .texOffs(24, 51).addBox(6.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, -0.0873F, 0.6981F)); + + PartDefinition r1 = wings.addOrReplaceChild("r1", CubeListBuilder.create().texOffs(16, 48).mirror().addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(24, 48).addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)) + .texOffs(16, 51).mirror().addBox(-9.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(24, 51).mirror().addBox(-9.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, 0.1745F, 0.6981F)); + + PartDefinition r2 = wings.addOrReplaceChild("r2", CubeListBuilder.create().texOffs(16, 48).mirror().addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(24, 48).addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)) + .texOffs(16, 51).mirror().addBox(-9.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(24, 51).mirror().addBox(-9.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, 0.1309F, 0.0F)); + + PartDefinition r3 = wings.addOrReplaceChild("r3", CubeListBuilder.create().texOffs(16, 48).mirror().addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(24, 48).addBox(-6.0F, -1.0F, -1.0F, 3.0F, 2.0F, 1.0F, new CubeDeformation(0.25F)) + .texOffs(16, 51).mirror().addBox(-9.0F, -4.0F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.0F)).mirror(false) + .texOffs(24, 51).mirror().addBox(-9.0F, -4.25F, -1.0F, 3.0F, 5.0F, 1.0F, new CubeDeformation(0.25F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5F, 5, 0.0F, 0.0873F, -0.6981F)); + + PartDefinition l4 = wingsFullBright.addOrReplaceChild("l4", CubeListBuilder.create().texOffs(16, 57).mirror().addBox(6.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, -0.1745F, -0.6981F)); + + PartDefinition l5 = wingsFullBright.addOrReplaceChild("l5", CubeListBuilder.create().texOffs(16, 57).mirror().addBox(7.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, -0.1309F, 0.0F)); + + PartDefinition l6 = wingsFullBright.addOrReplaceChild("l6", CubeListBuilder.create().texOffs(16, 57).mirror().addBox(6.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, -0.0873F, 0.6981F)); + + PartDefinition r4 = wingsFullBright.addOrReplaceChild("r4", CubeListBuilder.create().texOffs(16, 57).addBox(-19.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, 0.1745F, 0.6981F)); + + PartDefinition r5 = wingsFullBright.addOrReplaceChild("r5", CubeListBuilder.create().texOffs(16, 57).addBox(-19.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, 0.1309F, 0.0F)); + + PartDefinition r6 = wingsFullBright.addOrReplaceChild("r6", CubeListBuilder.create().texOffs(16, 57).addBox(-19.0F, -3.5F, -0.5F, 12.0F, 4.0F, 0.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 5, 5, 0.0F, 0.0873F, -0.6981F)); - return LayerDefinition.create(mesh, 64, 64); - } + return LayerDefinition.create(mesh, 64, 64); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/particles/spiritflame/SpiritFlameParticle.java b/src/main/java/com/sammy/malum/client/particles/spiritflame/SpiritFlameParticle.java index 6dfe10f91..452203d8b 100644 --- a/src/main/java/com/sammy/malum/client/particles/spiritflame/SpiritFlameParticle.java +++ b/src/main/java/com/sammy/malum/client/particles/spiritflame/SpiritFlameParticle.java @@ -2,7 +2,7 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.ParticleEngine; -import team.lodestar.lodestone.systems.particle.options.*; +import team.lodestar.lodestone.systems.particle.options.WorldParticleOptions; import team.lodestar.lodestone.systems.particle.world.FrameSetParticle; public class SpiritFlameParticle extends FrameSetParticle { diff --git a/src/main/java/com/sammy/malum/client/particles/spiritflame/SpiritFlameParticleType.java b/src/main/java/com/sammy/malum/client/particles/spiritflame/SpiritFlameParticleType.java index 1ee942f30..91f2b699e 100644 --- a/src/main/java/com/sammy/malum/client/particles/spiritflame/SpiritFlameParticleType.java +++ b/src/main/java/com/sammy/malum/client/particles/spiritflame/SpiritFlameParticleType.java @@ -7,7 +7,7 @@ import net.minecraft.client.particle.ParticleProvider; import net.minecraft.client.particle.SpriteSet; import net.minecraft.core.particles.ParticleType; -import team.lodestar.lodestone.systems.particle.options.*; +import team.lodestar.lodestone.systems.particle.options.WorldParticleOptions; import javax.annotation.Nullable; diff --git a/src/main/java/com/sammy/malum/client/renderer/block/MalumItemHolderRenderer.java b/src/main/java/com/sammy/malum/client/renderer/block/MalumItemHolderRenderer.java index ee3042f1a..31764cc85 100644 --- a/src/main/java/com/sammy/malum/client/renderer/block/MalumItemHolderRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/block/MalumItemHolderRenderer.java @@ -2,17 +2,16 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import com.sammy.malum.common.block.storage.*; +import com.sammy.malum.common.block.storage.MalumItemHolderBlockEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.*; +import net.minecraft.world.phys.Vec3; import static net.minecraft.client.renderer.texture.OverlayTexture.NO_OVERLAY; diff --git a/src/main/java/com/sammy/malum/client/renderer/block/MoteOfManaRenderer.java b/src/main/java/com/sammy/malum/client/renderer/block/MoteOfManaRenderer.java index 36f7813b5..fed79881d 100644 --- a/src/main/java/com/sammy/malum/client/renderer/block/MoteOfManaRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/block/MoteOfManaRenderer.java @@ -1,22 +1,25 @@ package com.sammy.malum.client.renderer.block; -import com.mojang.blaze3d.vertex.*; -import com.mojang.math.*; -import com.sammy.malum.*; -import com.sammy.malum.common.block.mana_mote.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.blockentity.*; -import net.minecraft.resources.*; -import net.minecraft.util.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.block.mana_mote.MoteOfManaBlockEntity; +import com.sammy.malum.common.block.mana_mote.SpiritMoteBlock; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import org.joml.Vector3f; -import team.lodestar.lodestone.handlers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.rendering.*; +import team.lodestar.lodestone.handlers.RenderHandler; +import team.lodestar.lodestone.setup.LodestoneRenderTypeRegistry; +import team.lodestar.lodestone.systems.rendering.VFXBuilders; import java.awt.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; public class MoteOfManaRenderer implements BlockEntityRenderer { @@ -43,8 +46,8 @@ public void renderQuad(MoteOfManaBlockEntity blockEntityIn, PoseStack poseStack) offsetMap.add(new Vector3f[]{bottomVertices[i], bottomVertices[(i + 1) % 4], topVertices[(i + 1) % 4], topVertices[(i) % 4]}); } poseStack.pushPose(); - poseStack.translate(0.5f,0.5f,0.5f); - MalumSpiritType spiritType = ((SpiritMoteBlock)blockEntityIn.getBlockState().getBlock()).spiritType; + poseStack.translate(0.5f, 0.5f, 0.5f); + MalumSpiritType spiritType = ((SpiritMoteBlock) blockEntityIn.getBlockState().getBlock()).spiritType; drawWobblyCube(poseStack, spiritType.getPrimaryColor(), 1f, 0.86f, offsetMap, bottomVertices, topVertices); drawWobblyCube(poseStack, spiritType.getSecondaryColor(), -0.92f, 0.6f, offsetMap, bottomVertices, topVertices); drawWobblyCube(poseStack, spiritType.getPrimaryColor(), 1.12f, 0.5f, offsetMap, bottomVertices, topVertices); @@ -53,7 +56,7 @@ public void renderQuad(MoteOfManaBlockEntity blockEntityIn, PoseStack poseStack) public static void drawWobblyCube(PoseStack poseStack, Color color, float scale, float alpha, Collection offsetMap, Vector3f[] bottomVertices, Vector3f[] topVertices) { poseStack.pushPose(); - poseStack.scale(scale,scale,scale); + poseStack.scale(scale, scale, scale); poseStack.translate(-0.5f, -0.5f, -0.5f); for (Vector3f[] offsets : offsetMap) { drawSide(poseStack, color, alpha, offsets); diff --git a/src/main/java/com/sammy/malum/client/renderer/block/SoulVialRenderer.java b/src/main/java/com/sammy/malum/client/renderer/block/SoulVialRenderer.java index 947da9d5d..ed44ef378 100644 --- a/src/main/java/com/sammy/malum/client/renderer/block/SoulVialRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/block/SoulVialRenderer.java @@ -18,7 +18,7 @@ public void render(SoulVialBlockEntity blockEntityIn, float partialTicks, PoseSt double y = 0.5f + Math.sin(((blockEntityIn.getLevel().getGameTime() % 360) + partialTicks) / 20f) * 0.08f; poseStack.translate(0.5f, y, 0.5f); poseStack.scale(0.75f, 0.75f, 0.75f); - // SoulEntityRenderer.renderSoul(poseStack, blockEntityIn.data.primaryType.getColor().darker()); + // SoulEntityRenderer.renderSoul(poseStack, blockEntityIn.data.primaryType.getColor().darker()); poseStack.popPose(); } } diff --git a/src/main/java/com/sammy/malum/client/renderer/block/SpiritAltarRenderer.java b/src/main/java/com/sammy/malum/client/renderer/block/SpiritAltarRenderer.java index ded09045e..88b0e43a2 100644 --- a/src/main/java/com/sammy/malum/client/renderer/block/SpiritAltarRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/block/SpiritAltarRenderer.java @@ -2,13 +2,11 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import com.sammy.malum.client.renderer.entity.*; +import com.sammy.malum.client.renderer.entity.FloatingItemEntityRenderer; import com.sammy.malum.common.block.curiosities.spirit_altar.SpiritAltarBlockEntity; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.registry.common.*; +import com.sammy.malum.common.item.spirit.SpiritShardItem; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.entity.ItemRenderer; diff --git a/src/main/java/com/sammy/malum/client/renderer/block/SpiritCatalyzerRenderer.java b/src/main/java/com/sammy/malum/client/renderer/block/SpiritCatalyzerRenderer.java index fe06d74eb..b98aad174 100644 --- a/src/main/java/com/sammy/malum/client/renderer/block/SpiritCatalyzerRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/block/SpiritCatalyzerRenderer.java @@ -2,11 +2,9 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import com.mojang.math.Vector3f; import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCatalyzerCoreBlockEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.entity.ItemRenderer; diff --git a/src/main/java/com/sammy/malum/client/renderer/block/SpiritCrucibleRenderer.java b/src/main/java/com/sammy/malum/client/renderer/block/SpiritCrucibleRenderer.java index dc21bde41..1bfbeba7f 100644 --- a/src/main/java/com/sammy/malum/client/renderer/block/SpiritCrucibleRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/block/SpiritCrucibleRenderer.java @@ -5,7 +5,6 @@ import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCrucibleCoreBlockEntity; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.entity.ItemRenderer; diff --git a/src/main/java/com/sammy/malum/client/renderer/block/SpiritJarRenderer.java b/src/main/java/com/sammy/malum/client/renderer/block/SpiritJarRenderer.java index bc9b2d7fc..0f28a3df1 100644 --- a/src/main/java/com/sammy/malum/client/renderer/block/SpiritJarRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/block/SpiritJarRenderer.java @@ -2,13 +2,11 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import com.mojang.math.Vector3f; -import com.sammy.malum.client.renderer.entity.*; +import com.sammy.malum.client.renderer.entity.FloatingItemEntityRenderer; import com.sammy.malum.common.block.storage.jar.SpiritJarBlockEntity; -import com.sammy.malum.core.systems.spirit.*; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.entity.ItemRenderer; @@ -29,7 +27,7 @@ public void render(SpiritJarBlockEntity blockEntityIn, float partialTicks, PoseS if (blockEntityIn.type != null) { final MalumSpiritType type = blockEntityIn.type; double time = ((level.getGameTime() + partialTicks) * 0.05f) % 6.2831f; - double y = 0.5f + (float)Math.sin(time) * 0.2f; + double y = 0.5f + (float) Math.sin(time) * 0.2f; poseStack.pushPose(); poseStack.translate(0.5f, y, 0.5f); FloatingItemEntityRenderer.renderSpiritGlimmer(poseStack, type, partialTicks); diff --git a/src/main/java/com/sammy/malum/client/renderer/block/TotemPoleRenderer.java b/src/main/java/com/sammy/malum/client/renderer/block/TotemPoleRenderer.java index 7fd11d7d5..638100c5c 100644 --- a/src/main/java/com/sammy/malum/client/renderer/block/TotemPoleRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/block/TotemPoleRenderer.java @@ -4,16 +4,11 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; import com.sammy.malum.common.block.curiosities.totem.TotemPoleBlockEntity; -import com.sammy.malum.core.systems.spirit.MalumSpiritType; -import com.sammy.malum.registry.common.SpiritTypeRegistry; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.client.renderer.texture.TextureAtlas; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.Material; import net.minecraft.core.Direction; -import net.minecraft.resources.*; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import org.joml.Vector3f; import team.lodestar.lodestone.handlers.RenderHandler; @@ -21,8 +16,6 @@ import team.lodestar.lodestone.systems.rendering.VFXBuilders; import java.awt.*; -import java.util.HashMap; -import java.util.Map; public class TotemPoleRenderer implements BlockEntityRenderer { @@ -36,7 +29,7 @@ public void render(TotemPoleBlockEntity blockEntityIn, float partialTicks, PoseS if (blockEntityIn.type == null) { return; } - renderQuad(blockEntityIn.type.getTotemGlowTexture(), blockEntityIn.type.getPrimaryColor(), blockEntityIn.currentColor/20f, direction, poseStack); + renderQuad(blockEntityIn.type.getTotemGlowTexture(), blockEntityIn.type.getPrimaryColor(), blockEntityIn.currentColor / 20f, direction, poseStack); } public void renderQuad(ResourceLocation resourceLocation, Color color, float alpha, Direction direction, PoseStack poseStack) { diff --git a/src/main/java/com/sammy/malum/client/renderer/curio/TokenOfGratitudeRenderer.java b/src/main/java/com/sammy/malum/client/renderer/curio/TokenOfGratitudeRenderer.java index 532c7d24b..4351c280a 100644 --- a/src/main/java/com/sammy/malum/client/renderer/curio/TokenOfGratitudeRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/curio/TokenOfGratitudeRenderer.java @@ -3,7 +3,6 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Axis; -import com.mojang.math.Vector3f; import com.sammy.malum.MalumMod; import com.sammy.malum.common.item.cosmetic.curios.CurioTokenOfGratitude; import com.sammy.malum.registry.client.ModelRegistry; diff --git a/src/main/java/com/sammy/malum/client/renderer/curio/TopHatCurioRenderer.java b/src/main/java/com/sammy/malum/client/renderer/curio/TopHatCurioRenderer.java index 7747497cf..b49027926 100644 --- a/src/main/java/com/sammy/malum/client/renderer/curio/TopHatCurioRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/curio/TopHatCurioRenderer.java @@ -1,18 +1,19 @@ package com.sammy.malum.client.renderer.curio; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.registry.client.*; -import net.minecraft.client.model.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraft.resources.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.item.*; -import team.lodestar.lodestone.setup.*; -import top.theillusivec4.curios.api.*; -import top.theillusivec4.curios.api.client.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.sammy.malum.MalumMod; +import com.sammy.malum.registry.client.ModelRegistry; +import net.minecraft.client.model.EntityModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.client.ICurioRenderer; public class TopHatCurioRenderer implements ICurioRenderer { diff --git a/src/main/java/com/sammy/malum/client/renderer/entity/EthericNitrateEntityRenderer.java b/src/main/java/com/sammy/malum/client/renderer/entity/EthericNitrateEntityRenderer.java index 3c73cf0b5..b5c40259a 100644 --- a/src/main/java/com/sammy/malum/client/renderer/entity/EthericNitrateEntityRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/entity/EthericNitrateEntityRenderer.java @@ -1,27 +1,16 @@ package com.sammy.malum.client.renderer.entity; -import com.mojang.blaze3d.vertex.*; -import com.mojang.math.*; -import com.sammy.malum.common.entity.nitrate.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraft.resources.*; -import net.minecraft.util.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.rendering.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.common.entity.nitrate.EthericNitrateEntity; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.resources.ResourceLocation; +import team.lodestar.lodestone.setup.LodestoneRenderTypeRegistry; -import java.awt.*; -import java.util.List; -import java.util.*; -import java.util.stream.*; - -import static com.sammy.malum.MalumMod.*; -import static com.sammy.malum.client.renderer.entity.FloatingItemEntityRenderer.*; -import static team.lodestar.lodestone.handlers.RenderHandler.*; +import static com.sammy.malum.MalumMod.malumPath; public class EthericNitrateEntityRenderer extends EntityRenderer { diff --git a/src/main/java/com/sammy/malum/client/renderer/entity/FloatingItemEntityRenderer.java b/src/main/java/com/sammy/malum/client/renderer/entity/FloatingItemEntityRenderer.java index 285888547..301c8ad04 100644 --- a/src/main/java/com/sammy/malum/client/renderer/entity/FloatingItemEntityRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/entity/FloatingItemEntityRenderer.java @@ -1,32 +1,38 @@ package com.sammy.malum.client.renderer.entity; -import com.mojang.blaze3d.vertex.*; -import com.mojang.math.*; -import com.sammy.malum.common.entity.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.block.model.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraft.client.resources.model.*; -import net.minecraft.resources.*; -import net.minecraft.util.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.rendering.*; -import team.lodestar.lodestone.systems.rendering.trail.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import com.sammy.malum.common.entity.FloatingItemEntity; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemDisplayContext; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.helpers.EasingHelper; +import team.lodestar.lodestone.setup.LodestoneRenderTypeRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.rendering.VFXBuilders; +import team.lodestar.lodestone.systems.rendering.trail.TrailPoint; import java.awt.*; import java.util.List; -import static com.sammy.malum.MalumMod.*; -import static team.lodestar.lodestone.LodestoneLib.*; -import static team.lodestar.lodestone.handlers.RenderHandler.*; +import static com.sammy.malum.MalumMod.malumPath; +import static team.lodestar.lodestone.LodestoneLib.lodestonePath; +import static team.lodestar.lodestone.handlers.RenderHandler.DELAYED_RENDER; public class FloatingItemEntityRenderer extends EntityRenderer { public final ItemRenderer itemRenderer; @@ -40,6 +46,7 @@ public FloatingItemEntityRenderer(EntityRendererProvider.Context context) { private static final ResourceLocation LIGHT_TRAIL = malumPath("textures/vfx/concentrated_trail.png"); private static final RenderType TRAIL_TYPE = LodestoneRenderTypeRegistry.ADDITIVE_TEXTURE_TRIANGLE.apply(LIGHT_TRAIL); + @Override public void render(FloatingItemEntity entity, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { List trailPoints = entity.trailPointBuilder.getTrailPoints(partialTicks); @@ -48,7 +55,7 @@ public void render(FloatingItemEntity entity, float entityYaw, float partialTick float x = (float) Mth.lerp(partialTicks, entity.xOld, entity.getX()); float y = (float) Mth.lerp(partialTicks, entity.yOld, entity.getY()); float z = (float) Mth.lerp(partialTicks, entity.zOld, entity.getZ()); - trailPoints.add(new TrailPoint(new Vec3(x, y + entity.getYOffset(partialTicks) + 0.25F, z).add(entity.getDeltaMovement().scale(1+partialTicks)))); + trailPoints.add(new TrailPoint(new Vec3(x, y + entity.getYOffset(partialTicks) + 0.25F, z).add(entity.getDeltaMovement().scale(1 + partialTicks)))); poseStack.translate(-x, -y, -z); VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld().setPosColorTexLightmapDefaultFormat(); VertexConsumer lightBuffer = DELAYED_RENDER.getBuffer(TRAIL_TYPE); @@ -105,15 +112,15 @@ public static void renderSpiritGlimmer(PoseStack poseStack, MalumSpiritType spir VFXBuilders.WorldVFXBuilder builder = VFXBuilders.createWorld().setPosColorTexLightmapDefaultFormat().setColor(spiritType.getPrimaryColor()); float gameTime = level.getGameTime() + partialTicks; float sine = (float) Math.abs(((Math.sin((gameTime / 80f) % 360)) * 0.075f)); - float bounce = EasingHelper.weightedEasingLerp(Easing.BOUNCE_IN_OUT, (gameTime % 20)/20f, 0.025f, 0.05f, 0.025f); + float bounce = EasingHelper.weightedEasingLerp(Easing.BOUNCE_IN_OUT, (gameTime % 20) / 20f, 0.025f, 0.05f, 0.025f); float scale = 0.12f + sine + bounce; poseStack.pushPose(); poseStack.mulPose(Minecraft.getInstance().getEntityRenderDispatcher().cameraOrientation()); poseStack.mulPose(Axis.YP.rotationDegrees(180f)); - builder.setAlpha(0.6f).renderQuad(star, poseStack, scale*1.2f); - builder.setAlpha(0.8f).renderQuad(bloom, poseStack, scale*0.8f); - builder.setAlpha(0.2f).setColor(spiritType.getSecondaryColor()).renderQuad(bloom, poseStack, scale*1.2f); + builder.setAlpha(0.6f).renderQuad(star, poseStack, scale * 1.2f); + builder.setAlpha(0.8f).renderQuad(bloom, poseStack, scale * 0.8f); + builder.setAlpha(0.2f).setColor(spiritType.getSecondaryColor()).renderQuad(bloom, poseStack, scale * 1.2f); poseStack.popPose(); } diff --git a/src/main/java/com/sammy/malum/client/renderer/entity/NightTerrorEntityRenderer.java b/src/main/java/com/sammy/malum/client/renderer/entity/NightTerrorEntityRenderer.java index 6ebeea851..aef8fbee5 100644 --- a/src/main/java/com/sammy/malum/client/renderer/entity/NightTerrorEntityRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/entity/NightTerrorEntityRenderer.java @@ -1,27 +1,16 @@ package com.sammy.malum.client.renderer.entity; -import com.mojang.blaze3d.vertex.*; -import com.mojang.math.*; -import com.sammy.malum.common.entity.night_terror.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraft.resources.*; -import net.minecraft.util.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.rendering.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.common.entity.night_terror.NightTerrorSeekerEntity; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.resources.ResourceLocation; +import team.lodestar.lodestone.setup.LodestoneRenderTypeRegistry; -import java.awt.*; -import java.util.List; -import java.util.*; -import java.util.stream.*; - -import static com.sammy.malum.MalumMod.*; -import static com.sammy.malum.client.renderer.entity.FloatingItemEntityRenderer.*; -import static team.lodestar.lodestone.handlers.RenderHandler.*; +import static com.sammy.malum.MalumMod.malumPath; public class NightTerrorEntityRenderer extends EntityRenderer { diff --git a/src/main/java/com/sammy/malum/client/renderer/entity/ScytheBoomerangEntityRenderer.java b/src/main/java/com/sammy/malum/client/renderer/entity/ScytheBoomerangEntityRenderer.java index 6f6980714..d79109bca 100644 --- a/src/main/java/com/sammy/malum/client/renderer/entity/ScytheBoomerangEntityRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/entity/ScytheBoomerangEntityRenderer.java @@ -2,11 +2,9 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import com.mojang.math.Vector3f; import com.sammy.malum.common.entity.boomerang.ScytheBoomerangEntity; import com.sammy.malum.common.item.curiosities.weapons.MalumScytheItem; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.ItemRenderer; diff --git a/src/main/java/com/sammy/malum/client/renderer/entity/VividNitrateEntityRenderer.java b/src/main/java/com/sammy/malum/client/renderer/entity/VividNitrateEntityRenderer.java index d7e9b9ee5..6cbe3758b 100644 --- a/src/main/java/com/sammy/malum/client/renderer/entity/VividNitrateEntityRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/entity/VividNitrateEntityRenderer.java @@ -1,25 +1,16 @@ package com.sammy.malum.client.renderer.entity; -import com.mojang.blaze3d.vertex.*; -import com.mojang.math.*; -import com.sammy.malum.common.entity.nitrate.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraft.resources.*; -import net.minecraft.util.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.rendering.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.common.entity.nitrate.VividNitrateEntity; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.resources.ResourceLocation; +import team.lodestar.lodestone.setup.LodestoneRenderTypeRegistry; -import java.util.*; -import java.util.stream.*; - -import static com.sammy.malum.MalumMod.*; -import static com.sammy.malum.client.renderer.entity.FloatingItemEntityRenderer.*; -import static com.sammy.malum.common.entity.nitrate.VividNitrateEntity.*; -import static team.lodestar.lodestone.handlers.RenderHandler.*; +import static com.sammy.malum.MalumMod.malumPath; public class VividNitrateEntityRenderer extends EntityRenderer { diff --git a/src/main/java/com/sammy/malum/client/renderer/item/SpiritJarItemRenderer.java b/src/main/java/com/sammy/malum/client/renderer/item/SpiritJarItemRenderer.java index acea57288..7de8daf8b 100644 --- a/src/main/java/com/sammy/malum/client/renderer/item/SpiritJarItemRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/item/SpiritJarItemRenderer.java @@ -4,12 +4,11 @@ import com.sammy.malum.common.block.storage.jar.SpiritJarBlockEntity; import com.sammy.malum.common.item.spirit.SpiritJarItem; import com.sammy.malum.core.helper.SpiritHelper; -import com.sammy.malum.registry.common.block.BlockRegistry; import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.registry.common.block.BlockRegistry; import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemDisplayContext; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/AbstractMalumScreen.java b/src/main/java/com/sammy/malum/client/screen/codex/AbstractMalumScreen.java index f568344f1..e274db65e 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/AbstractMalumScreen.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/AbstractMalumScreen.java @@ -1,12 +1,13 @@ package com.sammy.malum.client.screen.codex; -import net.minecraft.client.*; -import net.minecraft.client.gui.screens.*; -import net.minecraft.network.chat.*; -import net.minecraft.sounds.*; -import net.minecraft.world.entity.player.*; - -import java.util.function.*; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.player.Player; + +import java.util.function.Supplier; public abstract class AbstractMalumScreen extends Screen { diff --git a/src/main/java/com/sammy/malum/client/screen/codex/AbstractProgressionCodexScreen.java b/src/main/java/com/sammy/malum/client/screen/codex/AbstractProgressionCodexScreen.java index 59c74b942..3784bb20a 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/AbstractProgressionCodexScreen.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/AbstractProgressionCodexScreen.java @@ -1,16 +1,14 @@ package com.sammy.malum.client.screen.codex; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.client.screen.codex.objects.*; -import net.minecraft.client.*; +import com.sammy.malum.client.screen.codex.objects.BookObject; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.*; -import net.minecraft.resources.*; -import org.lwjgl.opengl.*; +import net.minecraft.network.chat.Component; +import org.lwjgl.opengl.GL11; -import java.util.*; - -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; public abstract class AbstractProgressionCodexScreen extends AbstractMalumScreen { diff --git a/src/main/java/com/sammy/malum/client/screen/codex/ArcanaCodexHelper.java b/src/main/java/com/sammy/malum/client/screen/codex/ArcanaCodexHelper.java index 256c2483d..1dd1ab735 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/ArcanaCodexHelper.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/ArcanaCodexHelper.java @@ -1,34 +1,32 @@ package com.sammy.malum.client.screen.codex; -import com.mojang.blaze3d.systems.*; -import com.mojang.blaze3d.vertex.*; -import com.mojang.math.*; -import com.sammy.malum.core.systems.rites.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.*; -import net.minecraft.client.*; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.renderer.*; -import net.minecraft.network.chat.*; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.renderer.ShaderInstance; import net.minecraft.network.chat.Component; -import net.minecraft.resources.*; -import net.minecraft.util.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; import org.joml.Vector4f; -import org.lwjgl.opengl.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.recipe.*; -import team.lodestar.lodestone.systems.rendering.*; -import team.lodestar.lodestone.systems.rendering.shader.*; - -import java.awt.*; -import java.util.*; +import org.lwjgl.opengl.GL11; +import team.lodestar.lodestone.setup.LodestoneShaderRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.recipe.IRecipeComponent; +import team.lodestar.lodestone.systems.rendering.VFXBuilders; +import team.lodestar.lodestone.systems.rendering.shader.ExtendedShaderInstance; + +import java.util.ArrayList; import java.util.List; -import java.util.function.*; -import java.util.stream.*; +import java.util.function.Supplier; +import java.util.stream.Collectors; import static com.sammy.malum.config.ClientConfig.BOOK_THEME; import static net.minecraft.util.FastColor.ARGB32.color; @@ -48,6 +46,7 @@ public static void renderRiteIcon(MalumRiteType rite, PoseStack stack, boolean c public static void renderRiteIcon(ResourceLocation texture, MalumSpiritType spiritType, PoseStack stack, boolean corrupted, float glowAlpha, int x, int y) { renderRiteIcon(texture, spiritType, stack, corrupted, glowAlpha, x, y, 0); } + public static void renderRiteIcon(ResourceLocation texture, MalumSpiritType spiritType, PoseStack stack, boolean corrupted, float glowAlpha, int x, int y, int z) { ExtendedShaderInstance shaderInstance = (ExtendedShaderInstance) LodestoneShaderRegistry.DISTORTED_TEXTURE.getInstance().get(); shaderInstance.safeGetUniform("YFrequency").set(corrupted ? 5f : 11f); @@ -131,6 +130,7 @@ public static void renderTexture(ResourceLocation texture, PoseStack poseStack, public static void renderTransparentTexture(ResourceLocation texture, PoseStack poseStack, int x, int y, float u, float v, int width, int height, int textureWidth, int textureHeight) { renderTransparentTexture(texture, poseStack, VFX_BUILDER, x, y, u, v, width, height, textureWidth, textureHeight); } + public static void renderTransparentTexture(ResourceLocation texture, PoseStack poseStack, VFXBuilders.ScreenVFXBuilder builder, int x, int y, float u, float v, int width, int height, int textureWidth, int textureHeight) { RenderSystem.enableBlend(); RenderSystem.enableDepthTest(); @@ -159,7 +159,7 @@ public static void renderComponent(AbstractMalumScreen screen, GuiGraphics guiGr guiGraphics.renderItem(stack, posX, posY); guiGraphics.renderItemDecorations(Minecraft.getInstance().font, stack, posX, posY, null); if (screen.isHovering(mouseX, mouseY, posX, posY, 16, 16)) { - guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, screen.getTooltipFromItem(Minecraft.getInstance(), stack), mouseX, mouseY); + guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, Screen.getTooltipFromItem(Minecraft.getInstance(), stack), mouseX, mouseY); } } @@ -177,7 +177,7 @@ public static void renderItem(AbstractMalumScreen screen, GuiGraphics guiGraphic guiGraphics.renderItem(stack, posX, posY); guiGraphics.renderItemDecorations(Minecraft.getInstance().font, stack, posX, posY, null); if (screen.isHovering(mouseX, mouseY, posX, posY, 16, 16)) { - guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, screen.getTooltipFromItem(Minecraft.getInstance(), stack), mouseX, mouseY); + guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, Screen.getTooltipFromItem(Minecraft.getInstance(), stack), mouseX, mouseY); } } @@ -185,7 +185,7 @@ public static void renderItem(AbstractMalumScreen screen, GuiGraphics guiGraphic guiGraphics.renderItem(stack, posX, posY); guiGraphics.renderItemDecorations(Minecraft.getInstance().font, stack, posX, posY, null); if (screen.isHovering(mouseX, mouseY, posX, posY, 16, 16)) { - guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, screen.getTooltipFromItem(Minecraft.getInstance(), stack), mouseX, mouseY); + guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, Screen.getTooltipFromItem(Minecraft.getInstance(), stack), mouseX, mouseY); } } diff --git a/src/main/java/com/sammy/malum/client/screen/codex/ArcanaProgressionScreen.java b/src/main/java/com/sammy/malum/client/screen/codex/ArcanaProgressionScreen.java index 4255a8619..ac4417ed0 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/ArcanaProgressionScreen.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/ArcanaProgressionScreen.java @@ -1,25 +1,31 @@ package com.sammy.malum.client.screen.codex; -import com.mojang.blaze3d.vertex.*; +import com.mojang.blaze3d.vertex.PoseStack; import com.sammy.malum.client.screen.codex.objects.*; import com.sammy.malum.client.screen.codex.pages.*; -import com.sammy.malum.common.events.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.client.*; +import com.sammy.malum.common.events.SetupMalumCodexEntriesEvent; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.registry.common.SpiritRiteRegistry; +import com.sammy.malum.registry.common.item.ItemRegistry; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.resources.*; -import net.minecraft.sounds.*; -import net.minecraft.world.item.*; -import net.minecraftforge.common.*; -import org.lwjgl.opengl.*; -import team.lodestar.lodestone.handlers.screenparticle.*; - -import java.util.*; -import java.util.function.*; - -import static com.sammy.malum.MalumMod.*; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraftforge.common.MinecraftForge; +import org.lwjgl.opengl.GL11; +import team.lodestar.lodestone.handlers.screenparticle.ScreenParticleHandler; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.function.Supplier; + +import static com.sammy.malum.MalumMod.malumPath; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTexture; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTransparentTexture; import static com.sammy.malum.registry.common.item.ItemRegistry.*; import static net.minecraft.world.item.Items.*; import static org.lwjgl.opengl.GL11C.GL_SCISSOR_TEST; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/EntryScreen.java b/src/main/java/com/sammy/malum/client/screen/codex/EntryScreen.java index 4ab1f24c3..445a4326e 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/EntryScreen.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/EntryScreen.java @@ -1,20 +1,20 @@ package com.sammy.malum.client.screen.codex; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.objects.*; -import com.sammy.malum.client.screen.codex.pages.*; -import com.sammy.malum.config.*; -import com.sammy.malum.registry.common.*; -import net.minecraft.client.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.objects.EntryObject; +import com.sammy.malum.client.screen.codex.pages.BookPage; +import com.sammy.malum.config.ClientConfig; +import com.sammy.malum.registry.common.SoundRegistry; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.*; -import net.minecraft.resources.*; -import net.minecraft.sounds.*; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; -import java.util.function.*; +import java.util.function.Supplier; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTexture; public class EntryScreen extends AbstractMalumScreen { @@ -157,6 +157,6 @@ public static void openScreen(EntryObject entryObject) { } public float getSweetenerPitch() { - return 1 + (float)grouping / openObject.entry.pages.size(); + return 1 + (float) grouping / openObject.entry.pages.size(); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/screen/codex/VoidProgressionScreen.java b/src/main/java/com/sammy/malum/client/screen/codex/VoidProgressionScreen.java index 11b36ee9d..1c3e30a90 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/VoidProgressionScreen.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/VoidProgressionScreen.java @@ -1,28 +1,27 @@ package com.sammy.malum.client.screen.codex; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.client.screen.codex.objects.*; -import com.sammy.malum.client.screen.codex.pages.*; -import com.sammy.malum.common.events.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.client.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.common.events.SetupMalumCodexEntriesEvent; +import com.sammy.malum.registry.common.SoundRegistry; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.resources.*; -import net.minecraft.sounds.*; -import net.minecraft.world.item.*; -import net.minecraftforge.common.*; -import org.lwjgl.opengl.*; -import team.lodestar.lodestone.handlers.screenparticle.*; - -import java.util.*; -import java.util.function.*; - -import static com.sammy.malum.MalumMod.*; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraftforge.common.MinecraftForge; +import org.lwjgl.opengl.GL11; +import team.lodestar.lodestone.handlers.screenparticle.ScreenParticleHandler; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.function.Supplier; + +import static com.sammy.malum.MalumMod.malumPath; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTexture; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTransparentTexture; import static com.sammy.malum.registry.common.item.ItemRegistry.*; -import static net.minecraft.world.item.Items.*; -import static org.lwjgl.opengl.GL11C.*; +import static net.minecraft.world.item.Items.BARRIER; +import static org.lwjgl.opengl.GL11C.GL_SCISSOR_TEST; public class VoidProgressionScreen extends AbstractProgressionCodexScreen { @@ -65,7 +64,7 @@ public void renderBackground(PoseStack poseStack, float xModifier, float yModifi int insideLeft = getInsideLeft(); int insideTop = getInsideTop(); float uOffset = (bookInsideWidth / 4f - xOffset * xModifier); - float vOffset = (backgroundImageHeight/10.75f - yOffset * yModifier); + float vOffset = (backgroundImageHeight / 10.75f - yOffset * yModifier); if (uOffset <= 0) { uOffset = 0; } diff --git a/src/main/java/com/sammy/malum/client/screen/codex/objects/BookObject.java b/src/main/java/com/sammy/malum/client/screen/codex/objects/BookObject.java index 4d3bfc324..c11d38255 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/objects/BookObject.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/objects/BookObject.java @@ -1,7 +1,6 @@ package com.sammy.malum.client.screen.codex.objects; -import com.mojang.blaze3d.vertex.PoseStack; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.AbstractProgressionCodexScreen; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/objects/EntryObject.java b/src/main/java/com/sammy/malum/client/screen/codex/objects/EntryObject.java index e96e5d72c..c552b6614 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/objects/EntryObject.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/objects/EntryObject.java @@ -1,7 +1,8 @@ package com.sammy.malum.client.screen.codex.objects; -import com.mojang.blaze3d.vertex.PoseStack; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.AbstractProgressionCodexScreen; +import com.sammy.malum.client.screen.codex.BookEntry; +import com.sammy.malum.client.screen.codex.EntryScreen; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; @@ -9,8 +10,10 @@ import java.util.Arrays; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; -import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.*; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTexture; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTransparentTexture; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FADE_TEXTURE; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FRAME_TEXTURE; public class EntryObject extends BookObject { public final BookEntry entry; @@ -44,7 +47,7 @@ public void lateRender(Minecraft minecraft, GuiGraphics guiGraphics, float xOffs mouseX, mouseY ); - // screen.renderComponentTooltip(guiGraphics, Arrays.asList(Component.translatable(entry.translationKey()), Component.translatable(entry.descriptionTranslationKey()).withStyle(ChatFormatting.GRAY)), mouseX, mouseY, minecraft.font); + // screen.renderComponentTooltip(guiGraphics, Arrays.asList(Component.translatable(entry.translationKey()), Component.translatable(entry.descriptionTranslationKey()).withStyle(ChatFormatting.GRAY)), mouseX, mouseY, minecraft.font); } } diff --git a/src/main/java/com/sammy/malum/client/screen/codex/objects/IconObject.java b/src/main/java/com/sammy/malum/client/screen/codex/objects/IconObject.java index 09578e7ea..3e664838b 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/objects/IconObject.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/objects/IconObject.java @@ -1,17 +1,20 @@ package com.sammy.malum.client.screen.codex.objects; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.client.screen.codex.*; -import net.minecraft.client.*; -import net.minecraft.client.gui.Gui; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.client.screen.codex.AbstractProgressionCodexScreen; +import com.sammy.malum.client.screen.codex.BookEntry; +import com.sammy.malum.client.screen.codex.EntryScreen; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.resources.*; +import net.minecraft.resources.ResourceLocation; import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; -import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.*; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FADE_TEXTURE; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FRAME_TEXTURE; public class IconObject extends EntryObject { public final ResourceLocation textureLocation; + public IconObject(AbstractProgressionCodexScreen screen, BookEntry entry, ResourceLocation textureLocation, int posX, int posY) { super(screen, entry.setDark(), posX, posY); this.textureLocation = textureLocation; @@ -27,7 +30,7 @@ public void render(Minecraft minecraft, GuiGraphics guiGraphics, float xOffset, int posX = offsetPosX(xOffset); int posY = offsetPosY(yOffset); PoseStack poseStack = guiGraphics.pose(); - renderTransparentTexture(FADE_TEXTURE, poseStack, posX-13, posY-13, 1, 252, 58, 58, 512, 512); + renderTransparentTexture(FADE_TEXTURE, poseStack, posX - 13, posY - 13, 1, 252, 58, 58, 512, 512); renderTexture(FRAME_TEXTURE, poseStack, posX, posY, 67, getFrameTextureV(), width, height, 512, 512); renderTexture(FRAME_TEXTURE, poseStack, posX, posY, 166, getBackgroundTextureV(), width, height, 512, 512); renderWavyIcon(textureLocation, poseStack, posX + 8, posY + 8); diff --git a/src/main/java/com/sammy/malum/client/screen/codex/objects/ImportantEntryObject.java b/src/main/java/com/sammy/malum/client/screen/codex/objects/ImportantEntryObject.java index 5340dc4c9..83e0ceb34 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/objects/ImportantEntryObject.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/objects/ImportantEntryObject.java @@ -1,12 +1,14 @@ package com.sammy.malum.client.screen.codex.objects; -import com.mojang.blaze3d.vertex.PoseStack; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.AbstractProgressionCodexScreen; +import com.sammy.malum.client.screen.codex.BookEntry; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; -import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.*; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTexture; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTransparentTexture; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FADE_TEXTURE; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FRAME_TEXTURE; public class ImportantEntryObject extends EntryObject { @@ -18,7 +20,7 @@ public ImportantEntryObject(AbstractProgressionCodexScreen screen, BookEntry ent public void render(Minecraft minecraft, GuiGraphics guiGraphics, float xOffset, float yOffset, int mouseX, int mouseY, float partialTicks) { int posX = offsetPosX(xOffset); int posY = offsetPosY(yOffset); - renderTransparentTexture(FADE_TEXTURE, guiGraphics.pose(), posX-13, posY-13, 1, 252, 58, 58, 512, 512); + renderTransparentTexture(FADE_TEXTURE, guiGraphics.pose(), posX - 13, posY - 13, 1, 252, 58, 58, 512, 512); renderTexture(FRAME_TEXTURE, guiGraphics.pose(), posX, posY, 34, getFrameTextureV(), width, height, 512, 512); renderTexture(FRAME_TEXTURE, guiGraphics.pose(), posX, posY, 133, getBackgroundTextureV(), width, height, 512, 512); guiGraphics.renderItem(entry.iconStack, posX + 8, posY + 8); diff --git a/src/main/java/com/sammy/malum/client/screen/codex/objects/MinorEntryObject.java b/src/main/java/com/sammy/malum/client/screen/codex/objects/MinorEntryObject.java index 4978026dc..c23427de6 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/objects/MinorEntryObject.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/objects/MinorEntryObject.java @@ -1,12 +1,14 @@ package com.sammy.malum.client.screen.codex.objects; -import com.mojang.blaze3d.vertex.PoseStack; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.AbstractProgressionCodexScreen; +import com.sammy.malum.client.screen.codex.BookEntry; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; -import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.*; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTexture; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTransparentTexture; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FADE_TEXTURE; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FRAME_TEXTURE; public class MinorEntryObject extends EntryObject { @@ -18,7 +20,7 @@ public MinorEntryObject(AbstractProgressionCodexScreen screen, BookEntry entry, public void render(Minecraft minecraft, GuiGraphics guiGraphics, float xOffset, float yOffset, int mouseX, int mouseY, float partialTicks) { int posX = offsetPosX(xOffset); int posY = offsetPosY(yOffset); - renderTransparentTexture(FADE_TEXTURE, guiGraphics.pose(), posX-13, posY-13, 1, 252, 58, 58, 512, 512); + renderTransparentTexture(FADE_TEXTURE, guiGraphics.pose(), posX - 13, posY - 13, 1, 252, 58, 58, 512, 512); renderTexture(FRAME_TEXTURE, guiGraphics.pose(), posX, posY, 67, getFrameTextureV(), width, height, 512, 512); renderTexture(FRAME_TEXTURE, guiGraphics.pose(), posX, posY, 166, getBackgroundTextureV(), width, height, 512, 512); guiGraphics.renderItem(entry.iconStack, posX + 8, posY + 8); diff --git a/src/main/java/com/sammy/malum/client/screen/codex/objects/RiteEntryObject.java b/src/main/java/com/sammy/malum/client/screen/codex/objects/RiteEntryObject.java index 0ba08b0fc..93ad9d479 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/objects/RiteEntryObject.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/objects/RiteEntryObject.java @@ -1,7 +1,8 @@ package com.sammy.malum.client.screen.codex.objects; -import com.mojang.blaze3d.vertex.PoseStack; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.AbstractProgressionCodexScreen; +import com.sammy.malum.client.screen.codex.BookEntry; +import com.sammy.malum.client.screen.codex.EntryScreen; import com.sammy.malum.client.screen.codex.pages.SpiritRiteTextPage; import com.sammy.malum.core.systems.rites.MalumRiteType; import net.minecraft.client.Minecraft; @@ -10,10 +11,12 @@ import java.util.Optional; import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; -import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.*; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FADE_TEXTURE; +import static com.sammy.malum.client.screen.codex.ArcanaProgressionScreen.FRAME_TEXTURE; public class RiteEntryObject extends EntryObject { public final MalumRiteType riteType; + public RiteEntryObject(AbstractProgressionCodexScreen screen, BookEntry entry, int posX, int posY) { super(screen, entry.setDark(), posX, posY); Optional page = entry.pages.stream().filter(p -> p instanceof SpiritRiteTextPage).map(p -> ((SpiritRiteTextPage) p)).findAny(); diff --git a/src/main/java/com/sammy/malum/client/screen/codex/objects/VanishingEntryObject.java b/src/main/java/com/sammy/malum/client/screen/codex/objects/VanishingEntryObject.java index eb77c7ef7..cfd5bad8c 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/objects/VanishingEntryObject.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/objects/VanishingEntryObject.java @@ -1,6 +1,7 @@ package com.sammy.malum.client.screen.codex.objects; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.AbstractProgressionCodexScreen; +import com.sammy.malum.client.screen.codex.BookEntry; import com.sammy.malum.registry.common.SoundRegistry; import net.minecraft.client.Minecraft; import net.minecraft.sounds.SoundSource; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/BookPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/BookPage.java index bc7f0349d..0cb3115ba 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/BookPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/BookPage.java @@ -1,13 +1,14 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.client.screen.codex.*; -import net.minecraft.client.*; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.client.screen.codex.BookEntry; +import com.sammy.malum.client.screen.codex.EntryScreen; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.resources.*; +import net.minecraft.resources.ResourceLocation; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; -import static com.sammy.malum.client.screen.codex.EntryScreen.*; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderTexture; +import static com.sammy.malum.client.screen.codex.EntryScreen.entryScreen; public class BookPage { public final ResourceLocation background; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/CraftingBookPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/CraftingBookPage.java index 6eef711a0..418c968ed 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/CraftingBookPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/CraftingBookPage.java @@ -1,9 +1,8 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import net.minecraft.client.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.world.item.*; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/HeadlineTextItemPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/HeadlineTextItemPage.java index e3c4d6c6c..e26223e00 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/HeadlineTextItemPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/HeadlineTextItemPage.java @@ -1,12 +1,12 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import net.minecraft.client.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.*; -import net.minecraft.world.item.*; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/HeadlineTextPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/HeadlineTextPage.java index f9bfb37c0..158251f67 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/HeadlineTextPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/HeadlineTextPage.java @@ -1,13 +1,13 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import net.minecraft.client.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.*; +import net.minecraft.network.chat.Component; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderText; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderWrappingText; public class HeadlineTextPage extends BookPage { private final String headlineTranslationKey; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/SmeltingBookPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/SmeltingBookPage.java index 16dcb445e..2faefb868 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/SmeltingBookPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/SmeltingBookPage.java @@ -1,16 +1,16 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import net.minecraft.client.*; -import net.minecraft.client.gui.Gui; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.world.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.item.crafting.SmeltingRecipe; -import java.util.*; +import java.util.Optional; import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderItem; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritCruciblePage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritCruciblePage.java index 0067bca2f..642705c43 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritCruciblePage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritCruciblePage.java @@ -1,16 +1,16 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import com.sammy.malum.common.recipe.*; -import net.minecraft.client.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import com.sammy.malum.common.recipe.SpiritFocusingRecipe; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.world.item.*; +import net.minecraft.world.item.Item; -import java.util.function.*; +import java.util.function.Predicate; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderComponents; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderItem; @SuppressWarnings("all") public class SpiritCruciblePage extends BookPage { diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritInfusionPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritInfusionPage.java index 58d3ce7d8..93217a92f 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritInfusionPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritInfusionPage.java @@ -1,15 +1,14 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import com.sammy.malum.common.recipe.*; -import net.minecraft.client.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import com.sammy.malum.common.recipe.SpiritInfusionRecipe; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.world.item.*; -import net.minecraftforge.data.loading.*; +import net.minecraft.world.item.Item; +import net.minecraftforge.data.loading.DatagenModLoader; -import java.util.function.*; +import java.util.function.Predicate; import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRepairPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRepairPage.java index 7319b803c..523989cbb 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRepairPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRepairPage.java @@ -1,15 +1,14 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import com.sammy.malum.common.recipe.*; -import net.minecraft.client.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import com.sammy.malum.common.recipe.SpiritRepairRecipe; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.world.item.*; +import net.minecraft.world.item.Item; -import java.util.function.*; -import java.util.stream.*; +import java.util.function.Predicate; +import java.util.stream.Collectors; import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRiteRecipePage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRiteRecipePage.java index 6f6758de4..3e7693534 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRiteRecipePage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRiteRecipePage.java @@ -1,28 +1,27 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import com.sammy.malum.core.systems.rites.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.*; -import net.minecraft.client.gui.Gui; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.resources.*; -import net.minecraft.world.item.*; -import team.lodestar.lodestone.handlers.screenparticle.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.screen.*; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import team.lodestar.lodestone.handlers.screenparticle.ScreenParticleHandler; +import team.lodestar.lodestone.helpers.RandomHelper; +import team.lodestar.lodestone.setup.LodestoneScreenParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.ScreenParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; -import java.util.*; +import java.util.List; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderRiteIcon; import static net.minecraft.util.Mth.nextFloat; public class SpiritRiteRecipePage extends BookPage { @@ -68,7 +67,7 @@ public void renderRite(GuiGraphics guiGraphics, EntryScreen screen, int left, in ItemStack stack = spirits.get(i).spiritShard.get().getDefaultInstance(); renderRiteIcon(spiritTexture, spiritType, poseStack, parentEntry.isSoulwood, 0.25f, left, y); if (screen.isHovering(mouseX, mouseY, left, y, 16, 16)) { - guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, screen.getTooltipFromItem(Minecraft.getInstance(), stack), mouseX, mouseY); + guiGraphics.renderComponentTooltip(Minecraft.getInstance().font, Screen.getTooltipFromItem(Minecraft.getInstance(), stack), mouseX, mouseY); } if (ScreenParticleHandler.canSpawnParticles) { final int x = left + 8; @@ -83,8 +82,8 @@ public void renderRite(GuiGraphics guiGraphics, EntryScreen screen, int left, in .setColorData(spiritType.createMainColorData().setCoefficient(0.25f).build()) .setLifetime(lifetime) .setMotion(0, yMotion) - .spawn(x -xOffset, y) - .spawn(x+xOffset, y); + .spawn(x - xOffset, y) + .spawn(x + xOffset, y); } } } diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRiteTextPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRiteTextPage.java index fc008a170..bfd3b7781 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRiteTextPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritRiteTextPage.java @@ -1,12 +1,11 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import com.sammy.malum.core.systems.rites.*; -import net.minecraft.client.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.*; +import net.minecraft.network.chat.Component; import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritTransmutationPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritTransmutationPage.java index e77a0c471..4ffad564f 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritTransmutationPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/SpiritTransmutationPage.java @@ -1,21 +1,21 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import com.sammy.malum.common.recipe.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.client.*; -import net.minecraft.client.gui.Gui; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import com.sammy.malum.common.recipe.SpiritTransmutationRecipe; +import com.sammy.malum.registry.common.item.ItemRegistry; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; -import net.minecraftforge.data.loading.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.recipe.*; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraftforge.data.loading.DatagenModLoader; +import team.lodestar.lodestone.helpers.DataHelper; +import team.lodestar.lodestone.systems.recipe.WrappedIngredient; -import java.util.*; +import java.util.ArrayList; +import java.util.List; import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; diff --git a/src/main/java/com/sammy/malum/client/screen/codex/pages/TextPage.java b/src/main/java/com/sammy/malum/client/screen/codex/pages/TextPage.java index e0d08eb06..3981d014d 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/pages/TextPage.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/pages/TextPage.java @@ -1,12 +1,11 @@ package com.sammy.malum.client.screen.codex.pages; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.*; -import com.sammy.malum.client.screen.codex.*; -import net.minecraft.client.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.client.screen.codex.EntryScreen; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.*; +import static com.sammy.malum.client.screen.codex.ArcanaCodexHelper.renderWrappingText; public class TextPage extends BookPage { public final String translationKey; diff --git a/src/main/java/com/sammy/malum/client/screen/container/SpiritPouchContainerScreen.java b/src/main/java/com/sammy/malum/client/screen/container/SpiritPouchContainerScreen.java index 3a480ea68..b0557eeee 100644 --- a/src/main/java/com/sammy/malum/client/screen/container/SpiritPouchContainerScreen.java +++ b/src/main/java/com/sammy/malum/client/screen/container/SpiritPouchContainerScreen.java @@ -1,7 +1,6 @@ package com.sammy.malum.client.screen.container; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import com.sammy.malum.MalumMod; import com.sammy.malum.common.container.SpiritPouchContainer; import net.minecraft.client.gui.GuiGraphics; diff --git a/src/main/java/com/sammy/malum/client/screen/container/WeaversWorkbenchContainerScreen.java b/src/main/java/com/sammy/malum/client/screen/container/WeaversWorkbenchContainerScreen.java index 689cfea53..7a7dee42c 100644 --- a/src/main/java/com/sammy/malum/client/screen/container/WeaversWorkbenchContainerScreen.java +++ b/src/main/java/com/sammy/malum/client/screen/container/WeaversWorkbenchContainerScreen.java @@ -1,29 +1,30 @@ package com.sammy.malum.client.screen.container; -import com.mojang.blaze3d.platform.*; -import com.mojang.blaze3d.systems.*; -import com.mojang.blaze3d.vertex.*; -import com.mojang.math.*; -import com.sammy.malum.*; -import com.sammy.malum.common.container.*; -import net.minecraft.client.*; -import net.minecraft.client.gui.Gui; +import com.mojang.blaze3d.platform.Lighting; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.container.WeaversWorkbenchContainer; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.inventory.*; -import net.minecraft.client.renderer.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.network.chat.*; -import net.minecraft.resources.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.decoration.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import org.joml.Matrix4f; -import org.joml.Matrix4fc; import org.joml.Quaternionf; -import javax.annotation.*; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; public class WeaversWorkbenchContainerScreen extends AbstractContainerScreen { @@ -44,12 +45,14 @@ public WeaversWorkbenchContainerScreen(WeaversWorkbenchContainer pMenu, Inventor this.imageHeight = 166; setupArmorStand(); } + @Override public void render(@Nonnull GuiGraphics poseStack, int mouseX, int mouseY, float partialTicks) { this.renderBackground(poseStack); super.render(poseStack, mouseX, mouseY, partialTicks); this.renderTooltip(poseStack, mouseX, mouseY); } + @Override protected void renderBg(GuiGraphics pGuiGraphics, float pPartialTick, int pMouseX, int pMouseY) { RenderSystem.setShader(GameRenderer::getPositionTexShader); @@ -103,7 +106,7 @@ public static void drawEntity(PoseStack matrices, int x, int y, int size, Quater RenderSystem.applyModelViewMatrix(); matrices.pushPose(); matrices.translate(x, y, -950.0); - matrices.mulPoseMatrix((new Matrix4f()).scaling((float)size, (float)size, (float)(-size))); + matrices.mulPoseMatrix((new Matrix4f()).scaling((float) size, (float) size, (float) (-size))); matrices.mulPose(matrixMultiplier); Lighting.setupForEntityInInventory(); EntityRenderDispatcher entityRenderDispatcher = Minecraft.getInstance().getEntityRenderDispatcher(); diff --git a/src/main/java/com/sammy/malum/common/block/blight/BlightedSoilBlock.java b/src/main/java/com/sammy/malum/common/block/blight/BlightedSoilBlock.java index c7b60bfe7..3310cfb9f 100644 --- a/src/main/java/com/sammy/malum/common/block/blight/BlightedSoilBlock.java +++ b/src/main/java/com/sammy/malum/common/block/blight/BlightedSoilBlock.java @@ -1,24 +1,30 @@ package com.sammy.malum.common.block.blight; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.common.worldevent.*; -import com.sammy.malum.common.worldgen.*; -import com.sammy.malum.registry.common.*; -import net.minecraft.core.*; -import net.minecraft.server.level.*; -import net.minecraft.sounds.*; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.common.worldevent.ActiveBlightEvent; +import com.sammy.malum.common.worldgen.SoulwoodTreeFeature; +import com.sammy.malum.registry.common.SoundRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; -import net.minecraft.world.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.phys.*; -import net.minecraft.world.phys.shapes.*; -import team.lodestar.lodestone.systems.worldgen.*; - -import java.util.*; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import team.lodestar.lodestone.systems.worldgen.LodestoneBlockFiller; public class BlightedSoilBlock extends Block implements BonemealableBlock { protected static final VoxelShape SHAPE = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 14.0D, 16.0D); diff --git a/src/main/java/com/sammy/malum/common/block/blight/BlightedSoulwoodBlock.java b/src/main/java/com/sammy/malum/common/block/blight/BlightedSoulwoodBlock.java index a1edde8aa..b9d81bb86 100644 --- a/src/main/java/com/sammy/malum/common/block/blight/BlightedSoulwoodBlock.java +++ b/src/main/java/com/sammy/malum/common/block/blight/BlightedSoulwoodBlock.java @@ -20,7 +20,7 @@ public BlightedSoulwoodBlock(Properties p_49795_) { public BlockState getToolModifiedState(BlockState state, UseOnContext context, ToolAction toolAction, boolean simulate) { if (toolAction.equals(ToolActions.AXE_STRIP)) { if (!simulate) { - context.getLevel().playSound(null, context.getClickedPos(), SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS,1, 1); + context.getLevel().playSound(null, context.getClickedPos(), SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); } return BlockRegistry.SOULWOOD_LOG.get().defaultBlockState(); } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/obelisk/ObeliskComponentBlock.java b/src/main/java/com/sammy/malum/common/block/curiosities/obelisk/ObeliskComponentBlock.java index 2e20b45a5..5337c7b49 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/obelisk/ObeliskComponentBlock.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/obelisk/ObeliskComponentBlock.java @@ -18,6 +18,7 @@ public class ObeliskComponentBlock extends MultiblockComponentBlock { public static final VoxelShape SHAPE = makeShape(); private final Supplier cloneStack; + public ObeliskComponentBlock(Properties properties, Supplier cloneStack) { super(properties); this.cloneStack = cloneStack; @@ -33,7 +34,7 @@ public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGett return cloneStack.get().getDefaultInstance(); } - public static VoxelShape makeShape(){ + public static VoxelShape makeShape() { VoxelShape shape = Shapes.empty(); shape = Shapes.join(shape, Shapes.box(0.1875, 0, 0.1875, 0.8125, 0.5625, 0.8125), BooleanOp.OR); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/obelisk/RunewoodObeliskBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/obelisk/RunewoodObeliskBlockEntity.java index e82762a49..3fa8a9cef 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/obelisk/RunewoodObeliskBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/obelisk/RunewoodObeliskBlockEntity.java @@ -1,23 +1,17 @@ package com.sammy.malum.common.block.curiosities.obelisk; -import com.sammy.malum.common.block.curiosities.spirit_altar.*; -import com.sammy.malum.core.systems.spirit.*; -import com.sammy.malum.registry.common.block.*; -import com.sammy.malum.visual_effects.*; -import net.minecraft.core.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.multiblock.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; - -import java.awt.*; -import java.util.function.*; +import com.sammy.malum.common.block.curiosities.spirit_altar.IAltarAccelerator; +import com.sammy.malum.common.block.curiosities.spirit_altar.SpiritAltarBlockEntity; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.registry.common.block.BlockEntityRegistry; +import com.sammy.malum.registry.common.block.BlockRegistry; +import com.sammy.malum.visual_effects.SpiritAltarParticleEffects; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import team.lodestar.lodestone.systems.multiblock.MultiBlockStructure; + +import java.util.function.Supplier; public class RunewoodObeliskBlockEntity extends ObeliskCoreBlockEntity implements IAltarAccelerator { private static final Vec3 OBELISK_PARTICLE_OFFSET = new Vec3(0.5f, 2f, 0.5f); @@ -43,6 +37,7 @@ public float getAcceleration() { public void addParticles(SpiritAltarBlockEntity blockEntity, MalumSpiritType activeSpiritType) { SpiritAltarParticleEffects.runewoodObeliskParticles(this, blockEntity, activeSpiritType); } + public Vec3 getParticleOffset() { return OBELISK_PARTICLE_OFFSET; } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/IAltarAccelerator.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/IAltarAccelerator.java index df2eb1d0d..f26730e7e 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/IAltarAccelerator.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/IAltarAccelerator.java @@ -1,6 +1,6 @@ package com.sammy.malum.common.block.curiosities.spirit_altar; -import com.sammy.malum.core.systems.spirit.*; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; public interface IAltarAccelerator { diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlock.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlock.java index 49d7f4ba5..0f8ed9603 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlock.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlock.java @@ -14,12 +14,11 @@ import net.minecraftforge.items.wrapper.EmptyHandler; import team.lodestar.lodestone.systems.block.WaterLoggedEntityBlock; -public class SpiritAltarBlock extends WaterLoggedEntityBlock -{ +public class SpiritAltarBlock extends WaterLoggedEntityBlock { public static final VoxelShape SHAPE = makeShape(); public static final VoxelShape RENDER_SHAPE = makeRenderShape(); - public SpiritAltarBlock(Properties properties) - { + + public SpiritAltarBlock(Properties properties) { super(properties); } @@ -52,7 +51,7 @@ public boolean hasAnalogOutputSignal(BlockState pState) { return true; } - public static VoxelShape makeShape(){ + public static VoxelShape makeShape() { VoxelShape shape = Shapes.empty(); shape = Shapes.join(shape, Shapes.box(0.0625, 0, 0.0625, 0.9375, 0.25, 0.9375), BooleanOp.OR); shape = Shapes.join(shape, Shapes.box(0.1875, 0.25, 0.1875, 0.8125, 0.625, 0.8125), BooleanOp.OR); @@ -69,7 +68,7 @@ public static VoxelShape makeShape(){ return shape; } - public static VoxelShape makeRenderShape(){ + public static VoxelShape makeRenderShape() { VoxelShape shape = Shapes.empty(); shape = Shapes.join(shape, Shapes.box(0.0625, 0, 0.0625, 0.9375, 0.25, 0.9375), BooleanOp.OR); shape = Shapes.join(shape, Shapes.box(0.1875, 0.25, 0.1875, 0.8125, 0.625, 0.8125), BooleanOp.OR); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlockEntity.java index fef66e389..77e1f5111 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlockEntity.java @@ -1,39 +1,46 @@ package com.sammy.malum.common.block.curiosities.spirit_altar; -import com.sammy.malum.common.block.storage.*; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.common.recipe.*; - -import com.sammy.malum.core.systems.recipe.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.block.*; -import com.sammy.malum.visual_effects.*; -import com.sammy.malum.visual_effects.networked.altar.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.core.*; -import net.minecraft.nbt.*; -import net.minecraft.sounds.*; -import net.minecraft.util.*; -import net.minecraft.world.*; -import net.minecraft.world.entity.item.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.block.entity.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.common.capabilities.*; -import net.minecraftforge.common.util.*; -import net.minecraftforge.items.*; -import net.minecraftforge.items.wrapper.*; -import org.jetbrains.annotations.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.blockentity.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.recipe.*; +import com.sammy.malum.common.block.storage.IMalumSpecialItemAccessPoint; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.common.recipe.SpiritInfusionRecipe; +import com.sammy.malum.core.systems.recipe.SpiritWithCount; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.registry.common.SpiritTypeRegistry; +import com.sammy.malum.registry.common.block.BlockEntityRegistry; +import com.sammy.malum.visual_effects.SpiritAltarParticleEffects; +import com.sammy.malum.visual_effects.networked.altar.SpiritAltarEatItemParticleEffect; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import com.sammy.malum.visual_effects.networked.data.PositionEffectData; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; +import org.jetbrains.annotations.NotNull; +import team.lodestar.lodestone.helpers.BlockHelper; +import team.lodestar.lodestone.helpers.DataHelper; +import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntity; +import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntityInventory; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.recipe.IngredientWithCount; +import javax.annotation.Nonnull; import javax.annotation.Nullable; -import javax.annotation.*; -import java.util.List; import java.util.*; public class SpiritAltarBlockEntity extends LodestoneBlockEntity { @@ -229,7 +236,7 @@ public void tick() { isCrafting = false; progress = 0; if (spiritYLevel > 0) { - this.spiritYLevel = Math.max(spiritYLevel-0.8f, 0); + this.spiritYLevel = Math.max(spiritYLevel - 0.8f, 0); } } if (level.isClientSide) { @@ -335,7 +342,7 @@ public float getSpinUp(Easing easing) { public Vec3 getItemPos() { final BlockPos blockPos = getBlockPos(); final Vec3 offset = getCentralItemOffset(); - return new Vec3(blockPos.getX()+offset.x, blockPos.getY()+offset.y, blockPos.getZ()+offset.z); + return new Vec3(blockPos.getX() + offset.x, blockPos.getY() + offset.y, blockPos.getZ() + offset.z); } public Vec3 getCentralItemOffset() { diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/ICrucibleAccelerator.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/ICrucibleAccelerator.java index 796fbeddb..b797b4494 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/ICrucibleAccelerator.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/ICrucibleAccelerator.java @@ -11,9 +11,11 @@ public interface ICrucibleAccelerator { default boolean canStartAccelerating() { return true; } + default boolean canAccelerate() { return true; } + IAccelerationTarget getTarget(); void setTarget(IAccelerationTarget target); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerComponentBlock.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerComponentBlock.java index 12885598f..7f86d8bbe 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerComponentBlock.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerComponentBlock.java @@ -55,6 +55,7 @@ public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(HORIZONTAL_FACING); } + @Override public ItemStack getCloneItemStack(BlockState state, HitResult target, BlockGetter world, BlockPos pos, Player player) { return cloneStack.get().getDefaultInstance(); @@ -86,7 +87,8 @@ public static VoxelShape makeNorthSouthShape() { return shape; } - public static VoxelShape makeWestEastShape(){ + + public static VoxelShape makeWestEastShape() { VoxelShape shape = Shapes.empty(); shape = Shapes.join(shape, Shapes.box(0.3125, 0, 0.75, 0.6875, 0.3125, 0.9375), BooleanOp.OR); shape = Shapes.join(shape, Shapes.box(0.1875, 0, 0.25, 0.3125, 0.4375, 0.75), BooleanOp.OR); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerCoreBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerCoreBlockEntity.java index 7f0013804..656616857 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerCoreBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerCoreBlockEntity.java @@ -16,17 +16,17 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; import team.lodestar.lodestone.helpers.BlockHelper; import team.lodestar.lodestone.setup.LodestoneParticleRegistry; import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntityInventory; import team.lodestar.lodestone.systems.multiblock.HorizontalDirectionStructure; import team.lodestar.lodestone.systems.multiblock.MultiBlockCoreEntity; import team.lodestar.lodestone.systems.multiblock.MultiBlockStructure; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import javax.annotation.Nonnull; diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleComponentBlock.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleComponentBlock.java index 3ae435d7a..26c4fae7b 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleComponentBlock.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleComponentBlock.java @@ -22,6 +22,7 @@ public class SpiritCrucibleComponentBlock extends MultiblockComponentBlock { public static final VoxelShape SHAPE = makeShape(); public static final VoxelShape RENDER_SHAPE = makeRenderShape(); + public SpiritCrucibleComponentBlock(Properties properties) { super(properties); } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlock.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlock.java index de0728e0b..aa0773c4d 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlock.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlock.java @@ -16,6 +16,7 @@ public class SpiritCrucibleCoreBlock extends WaterLoggedEntityBlock { public static final VoxelShape SHAPE = makeShape(); + public SpiritCrucibleCoreBlock(Properties properties) { super(properties); } @@ -39,7 +40,7 @@ public boolean hasAnalogOutputSignal(BlockState pState) { return true; } - public static VoxelShape makeShape(){ + public static VoxelShape makeShape() { VoxelShape shape = Shapes.empty(); shape = Shapes.join(shape, Shapes.box(0.125, 0.75, 0.125, 0.875, 1, 0.875), BooleanOp.OR); shape = Shapes.join(shape, Shapes.box(0, 0, 0, 1, 0.75, 1), BooleanOp.OR); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlockEntity.java index 36e4bccdc..c86ecfb7f 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlockEntity.java @@ -1,6 +1,5 @@ package com.sammy.malum.common.block.curiosities.spirit_crucible; -import com.sammy.malum.visual_effects.SpiritLightSpecs; import com.sammy.malum.common.block.curiosities.tablet.ITabletTracker; import com.sammy.malum.common.block.curiosities.tablet.TwistedTabletBlockEntity; import com.sammy.malum.common.item.impetus.ImpetusItem; @@ -13,6 +12,7 @@ import com.sammy.malum.registry.common.SoundRegistry; import com.sammy.malum.registry.common.block.BlockEntityRegistry; import com.sammy.malum.registry.common.block.BlockRegistry; +import com.sammy.malum.visual_effects.SpiritLightSpecs; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -28,8 +28,8 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.network.PacketDistributor; @@ -42,9 +42,9 @@ import team.lodestar.lodestone.systems.multiblock.MultiBlockCoreEntity; import team.lodestar.lodestone.systems.multiblock.MultiBlockStructure; import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import javax.annotation.Nonnull; @@ -461,7 +461,7 @@ public void passiveParticles() { double x = getBlockPos().getX() + offset.x(); double y = getBlockPos().getY() + offset.y(); double z = getBlockPos().getZ() + offset.z(); - SpiritLightSpecs.spiritLightSpecs(level, new Vec3(x,y,z), spiritSplinterItem.type); + SpiritLightSpecs.spiritLightSpecs(level, new Vec3(x, y, z), spiritSplinterItem.type); } } } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/tablet/TwistedTabletBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/tablet/TwistedTabletBlockEntity.java index d88af5200..b2cf1c731 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/tablet/TwistedTabletBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/tablet/TwistedTabletBlockEntity.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.block.curiosities.tablet; import com.sammy.malum.common.block.storage.stand.ItemStandBlockEntity; -import com.sammy.malum.common.item.spirit.*; +import com.sammy.malum.common.item.spirit.SpiritShardItem; import com.sammy.malum.registry.common.block.BlockEntityRegistry; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -19,7 +19,7 @@ public Vec3 getItemOffset(float partialTicks) { Direction direction = getBlockState().getValue(BlockStateProperties.FACING); float gameTime = level().getGameTime() + partialTicks; float xOffset = direction.getStepX() * 0.25f; - float yOffset = direction.getStepY() * 0.4f + (inventory.getStackInSlot(0).getItem() instanceof SpiritShardItem ? (float)Math.sin((gameTime % 360) / 20f) * 0.05f : 0); + float yOffset = direction.getStepY() * 0.4f + (inventory.getStackInSlot(0).getItem() instanceof SpiritShardItem ? (float) Math.sin((gameTime % 360) / 20f) * 0.05f : 0); float zOffset = direction.getStepY() * 0.25f; return new Vec3(0.5f - xOffset, 0.5f - yOffset, 0.5f - zOffset); } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlock.java b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlock.java index a98c4af52..9e6cbd22f 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlock.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlock.java @@ -6,11 +6,10 @@ import net.minecraft.world.level.block.state.BlockState; import team.lodestar.lodestone.systems.block.LodestoneEntityBlock; -public class TotemBaseBlock extends LodestoneEntityBlock -{ +public class TotemBaseBlock extends LodestoneEntityBlock { public final boolean corrupted; - public TotemBaseBlock(Properties properties, boolean corrupted) - { + + public TotemBaseBlock(Properties properties, boolean corrupted) { super(properties); this.corrupted = corrupted; } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlockEntity.java index 51d965655..f418377e0 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlockEntity.java @@ -3,11 +3,11 @@ import com.sammy.malum.common.block.storage.stand.ItemStandBlockEntity; import com.sammy.malum.common.packets.particle.curiosities.rite.SpiritRiteActivationEffectPacket; import com.sammy.malum.core.helper.SpiritHelper; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; import com.sammy.malum.registry.common.SoundRegistry; import com.sammy.malum.registry.common.SpiritRiteRegistry; import com.sammy.malum.registry.common.block.BlockEntityRegistry; -import com.sammy.malum.core.systems.rites.MalumRiteType; -import com.sammy.malum.core.systems.spirit.MalumSpiritType; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -47,6 +47,7 @@ public TotemBaseBlockEntity(BlockEntityType type super(type, pos, state); this.corrupted = ((TotemBaseBlock) state.getBlock()).corrupted; } + public TotemBaseBlockEntity(BlockPos pos, BlockState state) { this(BlockEntityRegistry.TOTEM_BASE.get(), pos, state); } @@ -181,10 +182,12 @@ public void load(CompoundTag compound) { progress = compound.getInt("progress"); super.load(compound); } + public void addFilter(ItemStandBlockEntity itemStand) { filters.add(itemStand.getBlockPos()); cachedFilterInstances.add(itemStand); } + public void addPole(TotemPoleBlockEntity pole) { Direction direction = pole.getBlockState().getValue(HORIZONTAL_FACING); if (poles.isEmpty()) { @@ -227,6 +230,7 @@ public void disableOtherRites() { }); } + public void tryDisableRite(TotemBaseBlockEntity target) { int range = rite.getRiteRadius(corrupted); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java index 73a5a7533..39dc0d8ea 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java @@ -31,9 +31,9 @@ import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntity; import team.lodestar.lodestone.systems.easing.Easing; import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import javax.annotation.Nullable; @@ -236,7 +236,7 @@ public void filterParticles(ItemStandBlockEntity itemStandBlockEntity) { WorldParticleBuilder.create(LodestoneParticleRegistry.STAR_PARTICLE) .setTransparencyData(GenericParticleData.create(0.04f, 0.1f, 0f).build()) .setScaleData(GenericParticleData.create(0.5f, 1f + level().random.nextFloat() * 0.1f, 0).setEasing(Easing.QUINTIC_IN, Easing.CUBIC_IN_OUT).build()) - .setSpinData(SpinParticleData.create(0, 0.2f, 0).setSpinOffset((level.getGameTime()*0.02f)%360).setEasing(Easing.CUBIC_IN, Easing.EXPO_IN).build()) + .setSpinData(SpinParticleData.create(0, 0.2f, 0).setSpinOffset((level.getGameTime() * 0.02f) % 360).setEasing(Easing.CUBIC_IN, Easing.EXPO_IN).build()) .setColorData(ColorParticleData.create(type.getPrimaryColor(), type.getSecondaryColor()).setEasing(Easing.BOUNCE_IN_OUT).setCoefficient(0.5f).build()) .setLifetime(25) .setRandomOffset(0.1) @@ -248,6 +248,7 @@ public void filterParticles(ItemStandBlockEntity itemStandBlockEntity) { } } } + public void passiveParticles() { if (level.getGameTime() % 6L == 0) { Color color = type.getPrimaryColor(); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchBlockEntity.java index 3d273e71e..0396ed21c 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchBlockEntity.java @@ -1,36 +1,43 @@ package com.sammy.malum.common.block.curiosities.weavers_workbench; -import com.sammy.malum.common.container.*; -import com.sammy.malum.common.packets.particle.curiosities.blight.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.block.*; -import net.minecraft.core.*; -import net.minecraft.nbt.*; -import net.minecraft.server.level.*; -import net.minecraft.sounds.*; -import net.minecraft.world.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.common.capabilities.*; -import net.minecraftforge.common.util.*; -import net.minecraftforge.items.*; -import net.minecraftforge.network.*; -import org.jetbrains.annotations.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.blockentity.*; +import com.sammy.malum.common.container.WeaversWorkbenchContainer; +import com.sammy.malum.common.packets.particle.curiosities.blight.BlightTransformItemParticlePacket; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.registry.common.block.BlockEntityRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleMenuProvider; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.network.NetworkHooks; +import net.minecraftforge.network.PacketDistributor; +import org.jetbrains.annotations.NotNull; +import team.lodestar.lodestone.helpers.BlockHelper; +import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntity; -import java.util.*; +import java.util.List; -import static com.sammy.malum.common.item.cosmetic.skins.ArmorSkin.*; -import static com.sammy.malum.registry.common.PacketRegistry.*; -import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; +import static com.sammy.malum.common.item.cosmetic.skins.ArmorSkin.MALUM_SKIN_TAG; +import static com.sammy.malum.common.item.cosmetic.skins.ArmorSkin.getApplicableItemSkinTag; +import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; +import static com.sammy.malum.registry.common.SpiritTypeRegistry.ARCANE_SPIRIT; public class WeaversWorkbenchBlockEntity extends LodestoneBlockEntity { - public final WeaversWorkbenchItemHandler itemHandler = new WeaversWorkbenchItemHandler(2, 1,this); + public final WeaversWorkbenchItemHandler itemHandler = new WeaversWorkbenchItemHandler(2, 1, this); private final LazyOptional handler = LazyOptional.of(() -> itemHandler); + public WeaversWorkbenchBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityRegistry.WEAVERS_WORKBENCH.get(), pos, state); } @@ -47,7 +54,7 @@ public InteractionResult onUse(Player player, InteractionHand hand) { @NotNull @Override public LazyOptional getCapability(@NotNull Capability cap) { - if(cap == ForgeCapabilities.ITEM_HANDLER){ + if (cap == ForgeCapabilities.ITEM_HANDLER) { return handler.cast(); } return super.getCapability(cap); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchItemHandler.java b/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchItemHandler.java index 8d6e9b8b2..97c49a586 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchItemHandler.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchItemHandler.java @@ -1,8 +1,8 @@ package com.sammy.malum.common.block.curiosities.weavers_workbench; -import net.minecraft.world.item.*; -import net.minecraftforge.items.*; -import org.jetbrains.annotations.*; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.ItemStackHandler; +import org.jetbrains.annotations.NotNull; public class WeaversWorkbenchItemHandler extends ItemStackHandler { @@ -12,7 +12,7 @@ public class WeaversWorkbenchItemHandler extends ItemStackHandler { public WeaversWorkbenchItemHandler(int size, int outputs, WeaversWorkbenchBlockEntity blockEntity) { super(size + outputs); - this.entity = blockEntity; + this.entity = blockEntity; this.outputs = outputs; } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/PrimordialSoupBlock.java b/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/PrimordialSoupBlock.java index d27a6ccc7..9678da4ed 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/PrimordialSoupBlock.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/PrimordialSoupBlock.java @@ -20,49 +20,49 @@ public class PrimordialSoupBlock extends Block { - public static final BooleanProperty TOP = BooleanProperty.create("top"); - protected static final VoxelShape TOP_SHAPE = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D); + public static final BooleanProperty TOP = BooleanProperty.create("top"); + protected static final VoxelShape TOP_SHAPE = Block.box(0.0D, 0.0D, 0.0D, 16.0D, 12.0D, 16.0D); - public PrimordialSoupBlock(BlockBehaviour.Properties pProperties) { - super(pProperties); - this.registerDefaultState(this.stateDefinition.any().setValue(TOP, true)); - } + public PrimordialSoupBlock(BlockBehaviour.Properties pProperties) { + super(pProperties); + this.registerDefaultState(this.stateDefinition.any().setValue(TOP, true)); + } - public boolean skipRendering(BlockState pState, BlockState pAdjacentBlockState, Direction pDirection) { - return (pAdjacentBlockState.getBlock() instanceof VoidConduitBlock || pAdjacentBlockState.is(this)) || super.skipRendering(pState, pAdjacentBlockState, pDirection); - } + public boolean skipRendering(BlockState pState, BlockState pAdjacentBlockState, Direction pDirection) { + return (pAdjacentBlockState.getBlock() instanceof VoidConduitBlock || pAdjacentBlockState.is(this)) || super.skipRendering(pState, pAdjacentBlockState, pDirection); + } - public VoxelShape getOcclusionShape(BlockState pState, BlockGetter pLevel, BlockPos pPos) { - return Shapes.empty(); - } + public VoxelShape getOcclusionShape(BlockState pState, BlockGetter pLevel, BlockPos pPos) { + return Shapes.empty(); + } - @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(TOP); - } + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(TOP); + } - @Override - public BlockState updateShape(BlockState pState, Direction pDirection, BlockState pNeighborState, LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) { - return super.updateShape(pState, pDirection, pNeighborState, pLevel, pCurrentPos, pNeighborPos).setValue(TOP, !(pLevel.getBlockState(pCurrentPos.above()).getBlock() instanceof PrimordialSoupBlock)); - } + @Override + public BlockState updateShape(BlockState pState, Direction pDirection, BlockState pNeighborState, LevelAccessor pLevel, BlockPos pCurrentPos, BlockPos pNeighborPos) { + return super.updateShape(pState, pDirection, pNeighborState, pLevel, pCurrentPos, pNeighborPos).setValue(TOP, !(pLevel.getBlockState(pCurrentPos.above()).getBlock() instanceof PrimordialSoupBlock)); + } - @Override - public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { - if (pState.getValue(TOP)) { - return TOP_SHAPE; - } - return super.getShape(pState, pLevel, pPos, pContext); - } + @Override + public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { + if (pState.getValue(TOP)) { + return TOP_SHAPE; + } + return super.getShape(pState, pLevel, pPos, pContext); + } - @Override - public VoxelShape getCollisionShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { - return Shapes.empty(); - } + @Override + public VoxelShape getCollisionShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext) { + return Shapes.empty(); + } - @Override - public void entityInside(BlockState pState, Level pLevel, BlockPos pPos, Entity pEntity) { - if (pEntity instanceof LivingEntity livingEntity) { - TouchOfDarknessHandler.handlePrimordialSoupContact(pState, livingEntity); - } - } + @Override + public void entityInside(BlockState pState, Level pLevel, BlockPos pPos, Entity pEntity) { + if (pEntity instanceof LivingEntity livingEntity) { + TouchOfDarknessHandler.handlePrimordialSoupContact(pState, livingEntity); + } + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/VoidConduitBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/VoidConduitBlockEntity.java index a63deeae8..e6f88161a 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/VoidConduitBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/VoidConduitBlockEntity.java @@ -1,38 +1,40 @@ package com.sammy.malum.common.block.curiosities.weeping_well; -import com.sammy.malum.common.recipe.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.block.*; -import com.sammy.malum.registry.common.item.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.core.*; -import net.minecraft.nbt.*; -import net.minecraft.server.level.*; -import net.minecraft.sounds.*; -import net.minecraft.util.*; -import net.minecraft.world.entity.item.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.phys.*; -import net.minecraft.world.phys.shapes.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.blockentity.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; -import team.lodestar.lodestone.systems.particle.world.*; +import com.sammy.malum.common.recipe.FavorOfTheVoidRecipe; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.registry.common.block.BlockEntityRegistry; +import com.sammy.malum.registry.common.item.ItemRegistry; +import com.sammy.malum.visual_effects.networked.data.PositionEffectData; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.VoxelShape; +import team.lodestar.lodestone.helpers.BlockHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntity; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.render_types.LodestoneWorldParticleRenderType; import java.awt.*; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; -import java.util.*; -import java.util.stream.*; +import java.util.stream.Collectors; public class VoidConduitBlockEntity extends LodestoneBlockEntity { @@ -41,6 +43,7 @@ public class VoidConduitBlockEntity extends LodestoneBlockEntity { public int streak; protected static final VoxelShape WELL_SHAPE = Block.box(-16.0D, 11.0D, -16.0D, 32.0D, 13.0D, 32.0D); + public VoidConduitBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityRegistry.VOID_CONDUIT.get(), pos, state); } @@ -53,7 +56,7 @@ protected void saveAdditional(CompoundTag compound) { CompoundTag itemTag = new CompoundTag(); ItemStack stack = eatenItems.get(i); stack.save(itemTag); - compound.put("item_"+i, itemTag); + compound.put("item_" + i, itemTag); } } compound.putInt("progress", progress); @@ -65,7 +68,7 @@ protected void saveAdditional(CompoundTag compound) { public void load(CompoundTag compound) { eatenItems.clear(); for (int i = 0; i < compound.getInt("itemCount"); i++) { - CompoundTag itemTag = compound.getCompound("item_"+i); + CompoundTag itemTag = compound.getCompound("item_" + i); eatenItems.add(ItemStack.of(itemTag)); } progress = compound.getInt("progress"); @@ -85,14 +88,14 @@ public void tick() { } if (serverLevel.getGameTime() % 40L == 0) { List items = serverLevel.getEntitiesOfClass( - ItemEntity.class, - new AABB(worldPosition.offset(1, -3, 1), worldPosition.offset(-1, -1, -1)).inflate(1)) + ItemEntity.class, + new AABB(worldPosition.offset(1, -3, 1), worldPosition.offset(-1, -1, -1)).inflate(1)) .stream().sorted(Comparator.comparingInt(itemEntity -> itemEntity.age)).collect(Collectors.toList()); for (ItemEntity entity : items) { ItemStack item = entity.getItem(); if (item.getItem().equals(ItemRegistry.BLIGHTED_GUNK.get())) { - progress+=20; + progress += 20; } eatenItems.add(item); entity.discard(); @@ -103,14 +106,13 @@ public void tick() { progress++; if (progress >= 80) { int resultingProgress = 65; - ItemStack stack = eatenItems.get(eatenItems.size()-1); + ItemStack stack = eatenItems.get(eatenItems.size() - 1); if (stack.getItem().equals(ItemRegistry.BLIGHTED_GUNK.get())) { - resultingProgress = 72+streak/4; + resultingProgress = 72 + streak / 4; streak++; - level().playSound(null, worldPosition, SoundRegistry.HUNGRY_BELT_FEEDS.get(), SoundSource.PLAYERS, 0.7f, 0.6f + level().random.nextFloat() * 0.3f+streak*0.05f); - level().playSound(null, worldPosition, SoundEvents.GENERIC_EAT, SoundSource.PLAYERS, 0.7f, 0.6f + level().random.nextFloat() * 0.2f+streak*0.05f); - } - else { + level().playSound(null, worldPosition, SoundRegistry.HUNGRY_BELT_FEEDS.get(), SoundSource.PLAYERS, 0.7f, 0.6f + level().random.nextFloat() * 0.3f + streak * 0.05f); + level().playSound(null, worldPosition, SoundEvents.GENERIC_EAT, SoundSource.PLAYERS, 0.7f, 0.6f + level().random.nextFloat() * 0.2f + streak * 0.05f); + } else { FavorOfTheVoidRecipe recipe = FavorOfTheVoidRecipe.getRecipe(level, stack); float pitch = Mth.nextFloat(level.getRandom(), 0.85f, 1.35f) + streak * 0.1f; if (recipe != null) { @@ -134,24 +136,23 @@ public void tick() { } } progress = resultingProgress; - ParticleEffectTypeRegistry.WEEPING_WELL_REACTS.createPositionedEffect(level, new PositionEffectData(worldPosition.getX()+0.5f, worldPosition.getY()+0.75f, worldPosition.getZ()+0.5f)); - eatenItems.remove(eatenItems.size()-1); + ParticleEffectTypeRegistry.WEEPING_WELL_REACTS.createPositionedEffect(level, new PositionEffectData(worldPosition.getX() + 0.5f, worldPosition.getY() + 0.75f, worldPosition.getZ() + 0.5f)); + eatenItems.remove(eatenItems.size() - 1); BlockHelper.updateAndNotifyState(level, worldPosition); } if (eatenItems.isEmpty()) { progress = 0; } - } - else if (streak != 0) { + } else if (streak != 0) { streak = 0; } - } - else { + } else { if (level.getGameTime() % 6L == 0) { ClientOnly.spawnParticles(level, worldPosition); } } } + public static class ClientOnly { public static void spawnParticles(Level level, BlockPos blockPos) { float multiplier = Mth.nextFloat(level.random, 0.4f, 1f); diff --git a/src/main/java/com/sammy/malum/common/block/ether/EtherBlockEntity.java b/src/main/java/com/sammy/malum/common/block/ether/EtherBlockEntity.java index 35ac752cc..4501e1814 100644 --- a/src/main/java/com/sammy/malum/common/block/ether/EtherBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/ether/EtherBlockEntity.java @@ -11,7 +11,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.WallTorchBlock; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.HitResult; @@ -21,9 +22,9 @@ import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntity; import team.lodestar.lodestone.systems.easing.Easing; import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; @@ -160,7 +161,7 @@ public void tick() { .setRandomOffset(0.15f, 0.2f) .addMotion(0, 0.0035f, 0) .setRandomMotion(0.001f, 0.005f) - .addActor(p -> p.setParticleMotion(p.getParticleSpeed().scale(0.985f-level.random.nextFloat() * 0.04f))) + .addActor(p -> p.setParticleMotion(p.getParticleSpeed().scale(0.985f - level.random.nextFloat() * 0.04f))) .enableNoClip() .setDiscardFunction(SimpleParticleOptions.ParticleDiscardFunctionType.ENDING_CURVE_INVISIBLE) .spawn(level, x, y, z); @@ -173,7 +174,7 @@ public void tick() { .setRandomOffset(0.1f, 0.225f) .addMotion(0, velocity / 2f, 0) .setRandomMotion(0, 0.015f) - .addActor(p -> p.setParticleMotion(p.getParticleSpeed().scale(0.97f-level.random.nextFloat() * 0.025f))) + .addActor(p -> p.setParticleMotion(p.getParticleSpeed().scale(0.97f - level.random.nextFloat() * 0.025f))) .enableNoClip() .setDiscardFunction(SimpleParticleOptions.ParticleDiscardFunctionType.ENDING_CURVE_INVISIBLE) .spawn(level, x, y, z); diff --git a/src/main/java/com/sammy/malum/common/block/ether/EtherBrazierBlock.java b/src/main/java/com/sammy/malum/common/block/ether/EtherBrazierBlock.java index 3d5b42d3a..d4ff3e9f6 100644 --- a/src/main/java/com/sammy/malum/common/block/ether/EtherBrazierBlock.java +++ b/src/main/java/com/sammy/malum/common/block/ether/EtherBrazierBlock.java @@ -19,24 +19,22 @@ import javax.annotation.Nullable; -public class EtherBrazierBlock extends EtherBlock -{ +public class EtherBrazierBlock extends EtherBlock { public static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 8, 12); public static final BooleanProperty ROTATED = BooleanProperty.create("rotated"); public static final BooleanProperty HANGING = BlockStateProperties.HANGING; - public EtherBrazierBlock(Properties properties) - { + public EtherBrazierBlock(Properties properties) { super(properties); this.registerDefaultState(this.stateDefinition.any().setValue(HANGING, false).setValue(WATERLOGGED, false).setValue(ROTATED, false)); - + } @Override public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { return SHAPE; } - + @Nullable public BlockState getStateForPlacement(BlockPlaceContext context) { FluidState fluidstate = context.getLevel().getFluidState(context.getClickedPos()); @@ -54,8 +52,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { } @Override - protected void createBlockStateDefinition(StateDefinition.Builder builder) - { + protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(HANGING, WATERLOGGED, ROTATED); } @@ -65,14 +62,12 @@ public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { return Block.canSupportCenter(level, pos.relative(direction), direction.getOpposite()); } - protected static Direction getBlockConnected(BlockState state) - { + protected static Direction getBlockConnected(BlockState state) { return state.getValue(HANGING) ? Direction.DOWN : Direction.UP; } - + @Override - public PushReaction getPistonPushReaction(BlockState state) - { + public PushReaction getPistonPushReaction(BlockState state) { return PushReaction.DESTROY; } diff --git a/src/main/java/com/sammy/malum/common/block/mana_mote/MoteOfManaBlockEntity.java b/src/main/java/com/sammy/malum/common/block/mana_mote/MoteOfManaBlockEntity.java index 66e592e37..44cfc6aa6 100644 --- a/src/main/java/com/sammy/malum/common/block/mana_mote/MoteOfManaBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/mana_mote/MoteOfManaBlockEntity.java @@ -1,9 +1,9 @@ package com.sammy.malum.common.block.mana_mote; -import com.sammy.malum.registry.common.block.*; -import net.minecraft.core.*; -import net.minecraft.world.level.block.state.*; -import team.lodestar.lodestone.systems.blockentity.*; +import com.sammy.malum.registry.common.block.BlockEntityRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntity; public class MoteOfManaBlockEntity extends LodestoneBlockEntity { public MoteOfManaBlockEntity(BlockPos pos, BlockState state) { diff --git a/src/main/java/com/sammy/malum/common/block/mana_mote/SoulstoneBlock.java b/src/main/java/com/sammy/malum/common/block/mana_mote/SoulstoneBlock.java index d8bc545b5..05fb079b2 100644 --- a/src/main/java/com/sammy/malum/common/block/mana_mote/SoulstoneBlock.java +++ b/src/main/java/com/sammy/malum/common/block/mana_mote/SoulstoneBlock.java @@ -1,20 +1,23 @@ package com.sammy.malum.common.block.mana_mote; -import com.sammy.malum.common.item.spirit.*; - -import com.sammy.malum.core.systems.spirit.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.core.*; -import net.minecraft.sounds.*; -import net.minecraft.util.*; -import net.minecraft.world.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.phys.*; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import com.sammy.malum.visual_effects.networked.data.PositionEffectData; +import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; public class SoulstoneBlock extends Block { public SoulstoneBlock(Properties pProperties) { diff --git a/src/main/java/com/sammy/malum/common/block/mana_mote/SpiritMoteBlock.java b/src/main/java/com/sammy/malum/common/block/mana_mote/SpiritMoteBlock.java index 93bd3136c..dc9013461 100644 --- a/src/main/java/com/sammy/malum/common/block/mana_mote/SpiritMoteBlock.java +++ b/src/main/java/com/sammy/malum/common/block/mana_mote/SpiritMoteBlock.java @@ -1,18 +1,19 @@ package com.sammy.malum.common.block.mana_mote; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.core.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.entity.*; -import net.minecraft.world.level.block.state.*; -import team.lodestar.lodestone.systems.block.*; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import team.lodestar.lodestone.systems.block.LodestoneEntityBlock; -import java.util.function.*; +import java.util.function.Supplier; public class SpiritMoteBlock extends LodestoneEntityBlock { public final MalumSpiritType spiritType; + public SpiritMoteBlock(Properties properties, MalumSpiritType spiritType) { super(properties.lightLevel(b -> 6)); this.spiritType = spiritType; @@ -25,6 +26,6 @@ protected void spawnDestroyParticles(Level pLevel, Player pPlayer, BlockPos pPos @Override public SpiritMoteBlock setBlockEntity(Supplier> type) { - return (SpiritMoteBlock)super.setBlockEntity(type); + return (SpiritMoteBlock) super.setBlockEntity(type); } } diff --git a/src/main/java/com/sammy/malum/common/block/nature/MalumSaplingBlock.java b/src/main/java/com/sammy/malum/common/block/nature/MalumSaplingBlock.java index 203b6c59d..d3b63c123 100644 --- a/src/main/java/com/sammy/malum/common/block/nature/MalumSaplingBlock.java +++ b/src/main/java/com/sammy/malum/common/block/nature/MalumSaplingBlock.java @@ -15,7 +15,6 @@ import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.registries.RegistryObject; -import java.util.Random; import java.util.function.Supplier; public class MalumSaplingBlock extends SaplingBlock { diff --git a/src/main/java/com/sammy/malum/common/block/nature/SapFilledLogBlock.java b/src/main/java/com/sammy/malum/common/block/nature/SapFilledLogBlock.java index aa4da0607..595e4deeb 100644 --- a/src/main/java/com/sammy/malum/common/block/nature/SapFilledLogBlock.java +++ b/src/main/java/com/sammy/malum/common/block/nature/SapFilledLogBlock.java @@ -18,9 +18,9 @@ import net.minecraftforge.items.ItemHandlerHelper; import team.lodestar.lodestone.helpers.BlockHelper; import team.lodestar.lodestone.setup.LodestoneParticleRegistry; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; diff --git a/src/main/java/com/sammy/malum/common/block/nature/soulwood/SoulwoodGrowthBlock.java b/src/main/java/com/sammy/malum/common/block/nature/soulwood/SoulwoodGrowthBlock.java index a43863164..989e7415a 100644 --- a/src/main/java/com/sammy/malum/common/block/nature/soulwood/SoulwoodGrowthBlock.java +++ b/src/main/java/com/sammy/malum/common/block/nature/soulwood/SoulwoodGrowthBlock.java @@ -20,9 +20,6 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.registries.RegistryObject; -import java.util.Random; -import java.util.random.RandomGenerator; - import static com.sammy.malum.registry.common.block.BlockTagRegistry.BLIGHTED_BLOCKS; public class SoulwoodGrowthBlock extends MalumSaplingBlock { diff --git a/src/main/java/com/sammy/malum/common/block/storage/IMalumSpecialItemAccessPoint.java b/src/main/java/com/sammy/malum/common/block/storage/IMalumSpecialItemAccessPoint.java index 1647d21da..d41be7809 100644 --- a/src/main/java/com/sammy/malum/common/block/storage/IMalumSpecialItemAccessPoint.java +++ b/src/main/java/com/sammy/malum/common/block/storage/IMalumSpecialItemAccessPoint.java @@ -4,13 +4,16 @@ import net.minecraft.world.phys.Vec3; import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntityInventory; -public interface IMalumSpecialItemAccessPoint -{ +public interface IMalumSpecialItemAccessPoint { LodestoneBlockEntityInventory getSuppliedInventory(); + default Vec3 getItemPos() { return getItemPos(0); } + Vec3 getItemPos(float partialTicks); + Vec3 getItemOffset(float partialTicks); + BlockPos getAccessPointBlockPos(); } diff --git a/src/main/java/com/sammy/malum/common/block/storage/MalumItemHolderBlockEntity.java b/src/main/java/com/sammy/malum/common/block/storage/MalumItemHolderBlockEntity.java index 26b594ee4..ce868544d 100644 --- a/src/main/java/com/sammy/malum/common/block/storage/MalumItemHolderBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/storage/MalumItemHolderBlockEntity.java @@ -1,12 +1,12 @@ package com.sammy.malum.common.block.storage; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.core.systems.spirit.*; -import com.sammy.malum.visual_effects.*; -import net.minecraft.core.*; -import net.minecraft.world.level.block.entity.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.phys.*; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.visual_effects.SpiritLightSpecs; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; import team.lodestar.lodestone.helpers.BlockHelper; import team.lodestar.lodestone.systems.blockentity.ItemHolderBlockEntity; import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntityInventory; @@ -33,7 +33,7 @@ public LodestoneBlockEntityInventory getSuppliedInventory() { public Vec3 getItemPos(float partialTicks) { final BlockPos blockPos = getBlockPos(); final Vec3 offset = getItemOffset(partialTicks); - return new Vec3(blockPos.getX()+offset.x, blockPos.getY()+offset.y, blockPos.getZ()+offset.z); + return new Vec3(blockPos.getX() + offset.x, blockPos.getY() + offset.y, blockPos.getZ() + offset.z); } @Override diff --git a/src/main/java/com/sammy/malum/common/block/storage/jar/SpiritJarBlockEntity.java b/src/main/java/com/sammy/malum/common/block/storage/jar/SpiritJarBlockEntity.java index ba1527df2..12c728521 100644 --- a/src/main/java/com/sammy/malum/common/block/storage/jar/SpiritJarBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/storage/jar/SpiritJarBlockEntity.java @@ -1,11 +1,11 @@ package com.sammy.malum.common.block.storage.jar; -import com.sammy.malum.visual_effects.SpiritLightSpecs; -import com.sammy.malum.common.item.spirit.SpiritShardItem; import com.sammy.malum.common.item.curiosities.SpiritPouchItem; +import com.sammy.malum.common.item.spirit.SpiritShardItem; import com.sammy.malum.core.helper.SpiritHelper; import com.sammy.malum.core.systems.spirit.MalumSpiritType; import com.sammy.malum.registry.common.block.BlockEntityRegistry; +import com.sammy.malum.visual_effects.SpiritLightSpecs; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -17,21 +17,21 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.*; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.IItemHandler; import org.jetbrains.annotations.NotNull; import team.lodestar.lodestone.helpers.BlockHelper; import team.lodestar.lodestone.setup.LodestoneParticleRegistry; import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntity; import team.lodestar.lodestone.systems.container.ItemInventory; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import javax.annotation.Nonnull; @@ -240,7 +240,7 @@ public void tick() { if (type != null) { double time = (level.getGameTime() * 0.05f) % 6.2831f; double x = getBlockPos().getX() + 0.5f; - double y = getBlockPos().getY() + 0.5f + (float)Math.sin(time) * 0.2f; + double y = getBlockPos().getY() + 0.5f + (float) Math.sin(time) * 0.2f; double z = getBlockPos().getZ() + 0.5f; SpiritLightSpecs.rotatingLightSpecs(level, new Vec3(x, y, z), type, 0.4f, 3); } diff --git a/src/main/java/com/sammy/malum/common/block/storage/pedestal/ItemPedestalBlockEntity.java b/src/main/java/com/sammy/malum/common/block/storage/pedestal/ItemPedestalBlockEntity.java index b8d9ea8ac..fd45d59df 100644 --- a/src/main/java/com/sammy/malum/common/block/storage/pedestal/ItemPedestalBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/storage/pedestal/ItemPedestalBlockEntity.java @@ -1,12 +1,12 @@ package com.sammy.malum.common.block.storage.pedestal; -import com.sammy.malum.common.block.storage.*; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.registry.common.block.*; -import net.minecraft.core.*; -import net.minecraft.world.level.block.entity.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.phys.*; +import com.sammy.malum.common.block.storage.MalumItemHolderBlockEntity; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.registry.common.block.BlockEntityRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.Vec3; public class ItemPedestalBlockEntity extends MalumItemHolderBlockEntity { @@ -24,7 +24,7 @@ public ItemPedestalBlockEntity(BlockPos pos, BlockState state) { public Vec3 getItemOffset(float partialTicks) { if (inventory.getStackInSlot(0).getItem() instanceof SpiritShardItem) { float gameTime = level().getGameTime() + partialTicks; - return PEDESTAL_ITEM_OFFSET.add(0, (float)Math.sin((gameTime % 360) / 20f) * 0.05f, 0); + return PEDESTAL_ITEM_OFFSET.add(0, (float) Math.sin((gameTime % 360) / 20f) * 0.05f, 0); } return PEDESTAL_ITEM_OFFSET; } diff --git a/src/main/java/com/sammy/malum/common/block/storage/pedestal/WoodItemPedestalBlock.java b/src/main/java/com/sammy/malum/common/block/storage/pedestal/WoodItemPedestalBlock.java index bf6978287..e725bf8e8 100644 --- a/src/main/java/com/sammy/malum/common/block/storage/pedestal/WoodItemPedestalBlock.java +++ b/src/main/java/com/sammy/malum/common/block/storage/pedestal/WoodItemPedestalBlock.java @@ -11,16 +11,14 @@ import java.util.stream.Stream; -public class WoodItemPedestalBlock extends ItemPedestalBlock -{ +public class WoodItemPedestalBlock extends ItemPedestalBlock { public static final VoxelShape SHAPE = Stream.of( Block.box(4, 0, 4, 12, 3, 12), Block.box(5, 3, 5, 11, 11, 11), Block.box(4, 11, 4, 12, 13, 12) ).reduce((v1, v2) -> Shapes.join(v1, v2, BooleanOp.OR)).get(); - public WoodItemPedestalBlock(Properties properties) - { + public WoodItemPedestalBlock(Properties properties) { super(properties); } diff --git a/src/main/java/com/sammy/malum/common/block/storage/stand/ItemStandBlockEntity.java b/src/main/java/com/sammy/malum/common/block/storage/stand/ItemStandBlockEntity.java index b7d797a18..710e9536a 100644 --- a/src/main/java/com/sammy/malum/common/block/storage/stand/ItemStandBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/storage/stand/ItemStandBlockEntity.java @@ -1,17 +1,19 @@ package com.sammy.malum.common.block.storage.stand; -import com.sammy.malum.common.block.curiosities.totem.*; -import com.sammy.malum.common.block.storage.*; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.registry.common.block.*; -import net.minecraft.core.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.block.entity.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.level.block.state.properties.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; +import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; +import com.sammy.malum.common.block.curiosities.totem.TotemPoleBlockEntity; +import com.sammy.malum.common.block.storage.MalumItemHolderBlockEntity; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.registry.common.block.BlockEntityRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.phys.Vec3; +import team.lodestar.lodestone.helpers.BlockHelper; public class ItemStandBlockEntity extends MalumItemHolderBlockEntity { @@ -29,7 +31,7 @@ public Vec3 getItemOffset(float partialTicks) { Direction direction = getBlockState().getValue(BlockStateProperties.FACING); float gameTime = level().getGameTime() + partialTicks; float xOffset = direction.getStepX() * 0.25f; - float yOffset = direction.getStepY() * 0.1f + (inventory.getStackInSlot(0).getItem() instanceof SpiritShardItem ? (float)Math.sin((gameTime % 360) / 20f) * 0.05f : 0); + float yOffset = direction.getStepY() * 0.1f + (inventory.getStackInSlot(0).getItem() instanceof SpiritShardItem ? (float) Math.sin((gameTime % 360) / 20f) * 0.05f : 0); float zOffset = direction.getStepZ() * 0.25f; return new Vec3(0.5f - xOffset, 0.5f - yOffset, 0.5f - zOffset); } diff --git a/src/main/java/com/sammy/malum/common/block/storage/vial/SoulVialBlock.java b/src/main/java/com/sammy/malum/common/block/storage/vial/SoulVialBlock.java index 0944b6624..b6327f275 100644 --- a/src/main/java/com/sammy/malum/common/block/storage/vial/SoulVialBlock.java +++ b/src/main/java/com/sammy/malum/common/block/storage/vial/SoulVialBlock.java @@ -11,11 +11,10 @@ import net.minecraft.world.phys.shapes.VoxelShape; import team.lodestar.lodestone.systems.block.WaterLoggedEntityBlock; -public class SoulVialBlock extends WaterLoggedEntityBlock -{ +public class SoulVialBlock extends WaterLoggedEntityBlock { public static final VoxelShape SHAPE = makeShape(); - public SoulVialBlock(Properties properties) - { + + public SoulVialBlock(Properties properties) { super(properties); } @@ -38,7 +37,7 @@ public int getAnalogOutputSignal(BlockState pState, Level pLevel, BlockPos pPos) return 0; } - public static VoxelShape makeShape(){ + public static VoxelShape makeShape() { VoxelShape shape = Shapes.empty(); shape = Shapes.join(shape, Shapes.box(0.21875, 0.03125, 0.21875, 0.78125, 0.78125, 0.78125), BooleanOp.OR); shape = Shapes.join(shape, Shapes.box(0.28125, 0.84375, 0.28125, 0.71875, 0.96875, 0.71875), BooleanOp.OR); diff --git a/src/main/java/com/sammy/malum/common/block/the_device/TheDevice.java b/src/main/java/com/sammy/malum/common/block/the_device/TheDevice.java index 1442c3c5b..ceca7747f 100644 --- a/src/main/java/com/sammy/malum/common/block/the_device/TheDevice.java +++ b/src/main/java/com/sammy/malum/common/block/the_device/TheDevice.java @@ -57,7 +57,7 @@ public void neighborChanged(BlockState pState, Level pLevel, BlockPos pPos, Bloc public void playSound(Level level, BlockPos pos) { if (level instanceof ServerLevel serverLevel) { - LodestonePacketRegistry.LODESTONE_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> serverLevel.getChunkAt(pos)), new PositionedScreenshakePacket(40, BlockHelper.fromBlockPos(pos),4f,10f, Easing.EXPO_OUT).setIntensity(4f, 0)); + LodestonePacketRegistry.LODESTONE_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> serverLevel.getChunkAt(pos)), new PositionedScreenshakePacket(40, BlockHelper.fromBlockPos(pos), 4f, 10f, Easing.EXPO_OUT).setIntensity(4f, 0)); } level().playSound(null, pos, SoundRegistry.THE_DEEP_BECKONS.get(), SoundSource.BLOCKS, 1, 1); } diff --git a/src/main/java/com/sammy/malum/common/block/the_device/TheVessel.java b/src/main/java/com/sammy/malum/common/block/the_device/TheVessel.java index 55093b899..9d4069186 100644 --- a/src/main/java/com/sammy/malum/common/block/the_device/TheVessel.java +++ b/src/main/java/com/sammy/malum/common/block/the_device/TheVessel.java @@ -1,9 +1,9 @@ package com.sammy.malum.common.block.the_device; -import com.sammy.malum.registry.common.*; -import net.minecraft.core.*; -import net.minecraft.sounds.*; -import net.minecraft.world.level.*; +import com.sammy.malum.registry.common.SoundRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.Level; public class TheVessel extends TheDevice { public TheVessel(Properties p_49795_) { diff --git a/src/main/java/com/sammy/malum/common/capability/MalumPlayerDataCapability.java b/src/main/java/com/sammy/malum/common/capability/MalumPlayerDataCapability.java index 550334353..443f6042a 100644 --- a/src/main/java/com/sammy/malum/common/capability/MalumPlayerDataCapability.java +++ b/src/main/java/com/sammy/malum/common/capability/MalumPlayerDataCapability.java @@ -17,7 +17,6 @@ import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.entity.EntityJoinLevelEvent; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.network.PacketDistributor; import team.lodestar.lodestone.systems.capability.LodestoneCapability; diff --git a/src/main/java/com/sammy/malum/common/container/SpiritPouchContainer.java b/src/main/java/com/sammy/malum/common/container/SpiritPouchContainer.java index efbe781ac..d5e1d7f1d 100644 --- a/src/main/java/com/sammy/malum/common/container/SpiritPouchContainer.java +++ b/src/main/java/com/sammy/malum/common/container/SpiritPouchContainer.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.container; -import com.sammy.malum.common.item.spirit.SpiritShardItem; import com.sammy.malum.common.item.curiosities.SpiritPouchItem; +import com.sammy.malum.common.item.spirit.SpiritShardItem; import com.sammy.malum.registry.common.ContainerRegistry; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; diff --git a/src/main/java/com/sammy/malum/common/container/WeaversWorkbenchContainer.java b/src/main/java/com/sammy/malum/common/container/WeaversWorkbenchContainer.java index 541535e11..0a5dd22fa 100644 --- a/src/main/java/com/sammy/malum/common/container/WeaversWorkbenchContainer.java +++ b/src/main/java/com/sammy/malum/common/container/WeaversWorkbenchContainer.java @@ -1,19 +1,22 @@ package com.sammy.malum.common.container; -import com.sammy.malum.common.block.curiosities.weavers_workbench.*; -import com.sammy.malum.common.item.cosmetic.weaves.*; -import com.sammy.malum.registry.common.*; -import net.minecraft.network.*; -import net.minecraft.network.chat.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.inventory.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.block.entity.*; -import net.minecraftforge.items.*; -import team.lodestar.lodestone.systems.item.*; +import com.sammy.malum.common.block.curiosities.weavers_workbench.WeaversWorkbenchBlockEntity; +import com.sammy.malum.common.block.curiosities.weavers_workbench.WeaversWorkbenchItemHandler; +import com.sammy.malum.common.item.cosmetic.weaves.AbstractWeaveItem; +import com.sammy.malum.registry.common.ContainerRegistry; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.items.SlotItemHandler; +import team.lodestar.lodestone.systems.item.LodestoneArmorItem; -import javax.annotation.*; -import java.util.*; +import javax.annotation.Nonnull; +import java.util.Objects; public class WeaversWorkbenchContainer extends AbstractContainerMenu { @@ -24,6 +27,7 @@ public class WeaversWorkbenchContainer extends AbstractContainerMenu { public WeaversWorkbenchContainer(int windowId, Inventory playerInv, FriendlyByteBuf data) { this(windowId, playerInv, getTileEntity(playerInv, data)); } + public WeaversWorkbenchContainer(int windowId, Inventory playerInv, WeaversWorkbenchBlockEntity blockEntity) { super(ContainerRegistry.WEAVERS_WORKBENCH.get(), windowId); this.itemHandler = blockEntity.itemHandler; diff --git a/src/main/java/com/sammy/malum/common/effect/AqueousAura.java b/src/main/java/com/sammy/malum/common/effect/AqueousAura.java index 2565abe8f..d71c84eae 100644 --- a/src/main/java/com/sammy/malum/common/effect/AqueousAura.java +++ b/src/main/java/com/sammy/malum/common/effect/AqueousAura.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.effect; -import com.sammy.malum.registry.common.SpiritTypeRegistry; import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.registry.common.SpiritTypeRegistry; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; import net.minecraft.world.effect.MobEffectInstance; diff --git a/src/main/java/com/sammy/malum/common/effect/CorruptedAerialAura.java b/src/main/java/com/sammy/malum/common/effect/CorruptedAerialAura.java index daff952a5..73496b707 100644 --- a/src/main/java/com/sammy/malum/common/effect/CorruptedAerialAura.java +++ b/src/main/java/com/sammy/malum/common/effect/CorruptedAerialAura.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.effect; -import com.sammy.malum.registry.common.SpiritTypeRegistry; import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.registry.common.SpiritTypeRegistry; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; import net.minecraft.world.effect.MobEffectInstance; diff --git a/src/main/java/com/sammy/malum/common/effect/CorruptedInfernalAura.java b/src/main/java/com/sammy/malum/common/effect/CorruptedInfernalAura.java index ef2f8e4c4..587797be2 100644 --- a/src/main/java/com/sammy/malum/common/effect/CorruptedInfernalAura.java +++ b/src/main/java/com/sammy/malum/common/effect/CorruptedInfernalAura.java @@ -14,7 +14,7 @@ public CorruptedInfernalAura() { @Override public void applyEffectTick(LivingEntity entityLivingBaseIn, int amplifier) { if (entityLivingBaseIn.getHealth() < entityLivingBaseIn.getMaxHealth()) { - entityLivingBaseIn.heal(amplifier+1); + entityLivingBaseIn.heal(amplifier + 1); } } diff --git a/src/main/java/com/sammy/malum/common/effect/GluttonyEffect.java b/src/main/java/com/sammy/malum/common/effect/GluttonyEffect.java index 7fbe0e2f4..bc6e4da9d 100644 --- a/src/main/java/com/sammy/malum/common/effect/GluttonyEffect.java +++ b/src/main/java/com/sammy/malum/common/effect/GluttonyEffect.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.effect; -import com.sammy.malum.registry.common.SoundRegistry; import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.registry.common.SoundRegistry; import net.minecraft.sounds.SoundSource; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; @@ -11,7 +11,7 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; +import net.minecraft.world.level.Level; import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; import net.minecraftforge.event.entity.living.MobEffectEvent; import net.minecraftforge.eventbus.api.Event; diff --git a/src/main/java/com/sammy/malum/common/effect/InfernalAura.java b/src/main/java/com/sammy/malum/common/effect/InfernalAura.java index f0683a53e..46945fc86 100644 --- a/src/main/java/com/sammy/malum/common/effect/InfernalAura.java +++ b/src/main/java/com/sammy/malum/common/effect/InfernalAura.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.effect; -import com.sammy.malum.registry.common.SpiritTypeRegistry; import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.registry.common.SpiritTypeRegistry; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; import net.minecraft.world.entity.LivingEntity; @@ -24,7 +24,7 @@ public void applyEffectTick(LivingEntity entityLivingBaseIn, int amplifier) { public static void increaseDigSpeed(PlayerEvent.BreakSpeed event) { Player player = event.getEntity(); if (player.hasEffect(MobEffectRegistry.MINERS_RAGE.get())) { - event.setNewSpeed(event.getOriginalSpeed() * (1 + 0.2f *player.getEffect(MobEffectRegistry.MINERS_RAGE.get()).getAmplifier())); + event.setNewSpeed(event.getOriginalSpeed() * (1 + 0.2f * player.getEffect(MobEffectRegistry.MINERS_RAGE.get()).getAmplifier())); } } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/effect/WickedIntentEffect.java b/src/main/java/com/sammy/malum/common/effect/WickedIntentEffect.java index beb6d890a..89bc3bc6a 100644 --- a/src/main/java/com/sammy/malum/common/effect/WickedIntentEffect.java +++ b/src/main/java/com/sammy/malum/common/effect/WickedIntentEffect.java @@ -1,15 +1,20 @@ package com.sammy.malum.common.effect; -import com.sammy.malum.common.item.curiosities.weapons.*; -import com.sammy.malum.registry.common.*; -import net.minecraft.sounds.*; -import net.minecraft.world.damagesource.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.ai.attributes.*; -import net.minecraft.world.level.*; -import net.minecraftforge.event.entity.living.*; -import team.lodestar.lodestone.helpers.*; +import com.sammy.malum.common.item.curiosities.weapons.MalumScytheItem; +import com.sammy.malum.registry.common.AttributeRegistry; +import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.registry.common.SoundRegistry; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageTypes; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.level.Level; +import net.minecraftforge.event.entity.living.LivingDamageEvent; +import team.lodestar.lodestone.helpers.ColorHelper; public class WickedIntentEffect extends MobEffect { public WickedIntentEffect() { diff --git a/src/main/java/com/sammy/malum/common/entity/FloatingEntity.java b/src/main/java/com/sammy/malum/common/entity/FloatingEntity.java index cecea64ad..7db59edd8 100644 --- a/src/main/java/com/sammy/malum/common/entity/FloatingEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/FloatingEntity.java @@ -1,6 +1,6 @@ package com.sammy.malum.common.entity; -import com.sammy.malum.core.systems.spirit.*; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; import com.sammy.malum.registry.common.SpiritTypeRegistry; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -24,7 +24,7 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkHooks; import team.lodestar.lodestone.systems.easing.Easing; -import team.lodestar.lodestone.systems.rendering.trail.*; +import team.lodestar.lodestone.systems.rendering.trail.TrailPointBuilder; public abstract class FloatingEntity extends Entity { @@ -96,7 +96,7 @@ public void tick() { } public void trackPastPositions() { - trailPointBuilder.addTrailPoint(position().add(0, getYOffset(0)+0.25f, 0f)); + trailPointBuilder.addTrailPoint(position().add(0, getYOffset(0) + 0.25f, 0f)); trailPointBuilder.tickTrailPoints(); } @@ -150,7 +150,7 @@ public float getYOffset(float partialTicks) { } public float getRotation(float partialTicks) { - return ((float) age + partialTicks) / 20.0F + getHoverStart(partialTicks)/2f; + return ((float) age + partialTicks) / 20.0F + getHoverStart(partialTicks) / 2f; } public float getHoverStart(float partialTicks) { diff --git a/src/main/java/com/sammy/malum/common/entity/FloatingItemEntity.java b/src/main/java/com/sammy/malum/common/entity/FloatingItemEntity.java index 7b5a1206e..224811bba 100644 --- a/src/main/java/com/sammy/malum/common/entity/FloatingItemEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/FloatingItemEntity.java @@ -1,6 +1,6 @@ package com.sammy.malum.common.entity; -import com.sammy.malum.common.item.spirit.*; +import com.sammy.malum.common.item.spirit.SpiritShardItem; import com.sammy.malum.registry.common.item.ItemRegistry; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; diff --git a/src/main/java/com/sammy/malum/common/entity/boomerang/ScytheBoomerangEntity.java b/src/main/java/com/sammy/malum/common/entity/boomerang/ScytheBoomerangEntity.java index 7e304cd87..b61290931 100644 --- a/src/main/java/com/sammy/malum/common/entity/boomerang/ScytheBoomerangEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/boomerang/ScytheBoomerangEntity.java @@ -1,29 +1,37 @@ package com.sammy.malum.common.entity.boomerang; -import com.sammy.malum.common.item.curiosities.weapons.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.entity.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.core.particles.*; -import net.minecraft.nbt.*; -import net.minecraft.network.protocol.*; +import com.sammy.malum.common.item.curiosities.weapons.MalumScytheItem; +import com.sammy.malum.registry.common.DamageSourceRegistry; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.registry.common.entity.EntityRegistry; +import com.sammy.malum.registry.common.item.EnchantmentRegistry; +import com.sammy.malum.registry.common.item.ItemRegistry; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; -import net.minecraft.sounds.*; -import net.minecraft.util.*; -import net.minecraft.world.damagesource.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.item.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.entity.projectile.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.enchantment.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.items.*; -import net.minecraftforge.network.*; -import team.lodestar.lodestone.helpers.*; - -import java.util.*; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.ThrowableItemProjectile; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.items.ItemHandlerHelper; +import net.minecraftforge.network.NetworkHooks; +import team.lodestar.lodestone.helpers.ItemHelper; + +import java.util.Random; public class ScytheBoomerangEntity extends ThrowableItemProjectile { diff --git a/src/main/java/com/sammy/malum/common/entity/night_terror/NightTerrorSeekerEntity.java b/src/main/java/com/sammy/malum/common/entity/night_terror/NightTerrorSeekerEntity.java index 903c589a9..02e6ae471 100644 --- a/src/main/java/com/sammy/malum/common/entity/night_terror/NightTerrorSeekerEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/night_terror/NightTerrorSeekerEntity.java @@ -1,31 +1,36 @@ package com.sammy.malum.common.entity.night_terror; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.entity.*; -import net.minecraft.nbt.*; -import net.minecraft.network.protocol.*; +import com.sammy.malum.registry.common.DamageSourceRegistry; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.registry.common.entity.EntityRegistry; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; -import net.minecraft.util.*; -import net.minecraft.world.damagesource.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.projectile.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.network.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; +import net.minecraft.util.Mth; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableProjectile; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.EntityHitResult; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.network.NetworkHooks; +import team.lodestar.lodestone.helpers.EntityHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleDataBuilder; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.render_types.LodestoneWorldParticleRenderType; import java.awt.*; +import java.util.ArrayList; import java.util.List; -import java.util.*; -import static net.minecraft.util.Mth.*; +import static net.minecraft.util.Mth.nextFloat; public class NightTerrorSeekerEntity extends ThrowableProjectile { @@ -114,6 +119,7 @@ protected void onHitEntity(EntityHitResult result) { } super.onHitEntity(result); } + @Override public void tick() { super.tick(); diff --git a/src/main/java/com/sammy/malum/common/entity/nitrate/AbstractNitrateEntity.java b/src/main/java/com/sammy/malum/common/entity/nitrate/AbstractNitrateEntity.java index 2c73b1c09..50fc306e5 100644 --- a/src/main/java/com/sammy/malum/common/entity/nitrate/AbstractNitrateEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/nitrate/AbstractNitrateEntity.java @@ -1,16 +1,18 @@ package com.sammy.malum.common.entity.nitrate; -import net.minecraft.nbt.*; -import net.minecraft.util.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.projectile.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.projectile.ThrowableProjectile; +import net.minecraft.world.level.Explosion; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.HitResult; +import team.lodestar.lodestone.helpers.EntityHelper; import java.awt.*; +import java.util.ArrayList; import java.util.List; -import java.util.*; public abstract class AbstractNitrateEntity extends ThrowableProjectile { public static final Color SECOND_SMOKE_COLOR = new Color(45, 45, 45); @@ -97,7 +99,7 @@ public void removeOldPositions(List pastPositions) { List toRemove = new ArrayList<>(); for (int i = 0; i < amount; i++) { EntityHelper.PastPosition excess = pastPositions.get(i); - if (excess.time > Math.min(age*0.8f, 25)) { + if (excess.time > Math.min(age * 0.8f, 25)) { toRemove.add(excess); } } diff --git a/src/main/java/com/sammy/malum/common/entity/nitrate/EthericNitrateEntity.java b/src/main/java/com/sammy/malum/common/entity/nitrate/EthericNitrateEntity.java index d0c4234af..0834af522 100644 --- a/src/main/java/com/sammy/malum/common/entity/nitrate/EthericNitrateEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/nitrate/EthericNitrateEntity.java @@ -1,29 +1,26 @@ package com.sammy.malum.common.entity.nitrate; -import com.sammy.malum.common.packets.particle.curiosities.nitrate.*; -import com.sammy.malum.registry.common.entity.*; -import com.sammy.malum.visual_effects.*; -import net.minecraft.server.level.*; -import net.minecraft.util.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.network.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; -import team.lodestar.lodestone.systems.particle.world.*; +import com.sammy.malum.common.packets.particle.curiosities.nitrate.EthericNitrateParticlePacket; +import com.sammy.malum.registry.common.entity.EntityRegistry; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.network.PacketDistributor; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleDataBuilder; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.render_types.LodestoneWorldParticleRenderType; import java.awt.*; -import java.util.*; -import static com.sammy.malum.registry.common.PacketRegistry.*; -import static net.minecraft.util.Mth.*; +import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; +import static net.minecraft.util.Mth.nextFloat; public class EthericNitrateEntity extends AbstractNitrateEntity { diff --git a/src/main/java/com/sammy/malum/common/entity/nitrate/VividNitrateEntity.java b/src/main/java/com/sammy/malum/common/entity/nitrate/VividNitrateEntity.java index 0257a32d2..b541510be 100644 --- a/src/main/java/com/sammy/malum/common/entity/nitrate/VividNitrateEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/nitrate/VividNitrateEntity.java @@ -1,32 +1,30 @@ package com.sammy.malum.common.entity.nitrate; -import com.sammy.malum.common.packets.particle.curiosities.nitrate.*; -import com.sammy.malum.registry.common.entity.*; -import com.sammy.malum.visual_effects.*; -import net.minecraft.server.level.*; -import net.minecraft.util.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.network.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; -import team.lodestar.lodestone.systems.particle.world.*; +import com.sammy.malum.common.packets.particle.curiosities.nitrate.VividNitrateBounceParticlePacket; +import com.sammy.malum.registry.common.entity.EntityRegistry; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.network.PacketDistributor; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleDataBuilder; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.render_types.LodestoneWorldParticleRenderType; import java.awt.*; +import java.util.ArrayList; import java.util.List; -import java.util.*; -import java.util.function.*; +import java.util.function.Function; -import static com.sammy.malum.registry.common.PacketRegistry.*; -import static net.minecraft.util.Mth.*; +import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; +import static net.minecraft.util.Mth.nextFloat; public class VividNitrateEntity extends AbstractNitrateEntity { diff --git a/src/main/java/com/sammy/malum/common/entity/spirit/SpiritItemEntity.java b/src/main/java/com/sammy/malum/common/entity/spirit/SpiritItemEntity.java index 549ddf9b7..9bb1f8aef 100644 --- a/src/main/java/com/sammy/malum/common/entity/spirit/SpiritItemEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/spirit/SpiritItemEntity.java @@ -1,25 +1,23 @@ package com.sammy.malum.common.entity.spirit; -import com.sammy.malum.common.entity.*; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.core.handlers.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.entity.*; -import com.sammy.malum.visual_effects.*; -import net.minecraft.nbt.*; -import net.minecraft.server.level.*; -import net.minecraft.sounds.*; -import net.minecraft.util.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.particle.builder.*; +import com.sammy.malum.common.entity.FloatingItemEntity; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.core.handlers.SpiritHarvestHandler; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.registry.common.entity.EntityRegistry; +import com.sammy.malum.visual_effects.SpiritLightSpecs; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import team.lodestar.lodestone.helpers.ItemHelper; -import java.util.*; -import java.util.function.*; +import java.util.UUID; public class SpiritItemEntity extends FloatingItemEntity { public UUID ownerUUID; @@ -93,7 +91,7 @@ public void move() { } Vec3 desiredLocation = owner.position().add(0, owner.getBbHeight() / 3, 0); float distance = (float) distanceToSqr(desiredLocation); - float velocity = windUp < 0.25f ? 0 : Math.min(windUp-0.25f, 0.8f)*5f; + float velocity = windUp < 0.25f ? 0 : Math.min(windUp - 0.25f, 0.8f) * 5f; moveTime++; Vec3 desiredMotion = desiredLocation.subtract(position()).normalize().multiply(velocity, velocity, velocity); float easing = 0.01f; @@ -107,8 +105,7 @@ public void move() { ItemStack stack = getItem(); if (stack.getItem() instanceof SpiritShardItem) { SpiritHarvestHandler.pickupSpirit(owner, stack); - } - else { + } else { ItemHelper.giveItemToEntity(owner, stack); } if (random.nextFloat() < 0.6f) { diff --git a/src/main/java/com/sammy/malum/common/item/EncyclopediaArcanaItem.java b/src/main/java/com/sammy/malum/common/item/EncyclopediaArcanaItem.java index 6fb22729b..80893e739 100644 --- a/src/main/java/com/sammy/malum/common/item/EncyclopediaArcanaItem.java +++ b/src/main/java/com/sammy/malum/common/item/EncyclopediaArcanaItem.java @@ -1,7 +1,8 @@ package com.sammy.malum.common.item; -import com.sammy.malum.client.screen.codex.*; -import com.sammy.malum.core.handlers.*; +import com.sammy.malum.client.screen.codex.ArcanaProgressionScreen; +import com.sammy.malum.client.screen.codex.VoidProgressionScreen; +import com.sammy.malum.core.handlers.TouchOfDarknessHandler; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.player.Player; @@ -20,8 +21,7 @@ public InteractionResultHolder use(Level level, Player player, Intera if (level.isClientSide) { if (isNearWeepingWell) { VoidProgressionScreen.openCodexViaItem(); - } - else { + } else { ArcanaProgressionScreen.openCodexViaItem(); } player.swing(hand); diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTokenOfGratitude.java b/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTokenOfGratitude.java index e2331fce4..9a93db11c 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTokenOfGratitude.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTokenOfGratitude.java @@ -1,22 +1,26 @@ package com.sammy.malum.common.item.cosmetic.curios; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.sounds.*; -import net.minecraft.world.damagesource.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.item.*; -import net.minecraftforge.event.entity.*; -import net.minecraftforge.items.*; -import org.jetbrains.annotations.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.item.*; -import top.theillusivec4.curios.api.*; -import top.theillusivec4.curios.api.type.capability.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; +import com.sammy.malum.registry.common.item.ItemRegistry; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.entity.EntityJoinLevelEvent; +import net.minecraftforge.items.ItemHandlerHelper; +import org.jetbrains.annotations.NotNull; +import team.lodestar.lodestone.helpers.CurioHelper; +import team.lodestar.lodestone.systems.item.IEventResponderItem; +import top.theillusivec4.curios.api.SlotContext; +import top.theillusivec4.curios.api.type.capability.ICurio; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; -import static top.theillusivec4.curios.api.type.capability.ICurio.DropRule.*; +import static top.theillusivec4.curios.api.type.capability.ICurio.DropRule.ALWAYS_KEEP; public class CurioTokenOfGratitude extends MalumCurioItem implements IEventResponderItem { public static final List GRADITUDE_CERTIFIED = new ArrayList<>(); diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTopHat.java b/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTopHat.java index e93917d2d..4c1855d64 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTopHat.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTopHat.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.item.cosmetic.curios; -import com.sammy.malum.common.item.curiosities.curios.*; -import team.lodestar.lodestone.systems.item.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; +import team.lodestar.lodestone.systems.item.IEventResponderItem; public class CurioTopHat extends MalumCurioItem implements IEventResponderItem { diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ArmorSkin.java b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ArmorSkin.java index 8fa2fb375..e60ee4cec 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ArmorSkin.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ArmorSkin.java @@ -1,12 +1,14 @@ package com.sammy.malum.common.item.cosmetic.skins; -import com.sammy.malum.client.cosmetic.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.systems.item.*; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.registry.common.item.ArmorSkinRegistry; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.systems.item.LodestoneArmorItem; -import java.util.*; +import java.util.Map; public abstract class ArmorSkin { public static final String MALUM_SKIN_TAG = "malum:item_skin"; diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/PrideArmorSkin.java b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/PrideArmorSkin.java index 162a711db..f4143d75a 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/PrideArmorSkin.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/PrideArmorSkin.java @@ -1,9 +1,11 @@ package com.sammy.malum.common.item.cosmetic.skins; -import com.sammy.malum.client.cosmetic.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.systems.item.*; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.client.cosmetic.PrideArmorSkinRenderingData; +import net.minecraft.world.item.Item; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.systems.item.LodestoneArmorItem; public class PrideArmorSkin extends ArmorSkin { public PrideArmorSkin(String id, Class validArmorClass, Item weaveItem) { diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/UltrakillArmorSkin.java b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/UltrakillArmorSkin.java index 6c6ede8b3..cdf7da5dc 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/UltrakillArmorSkin.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/UltrakillArmorSkin.java @@ -1,10 +1,12 @@ package com.sammy.malum.common.item.cosmetic.skins; -import com.sammy.malum.client.cosmetic.*; -import com.sammy.malum.registry.client.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.systems.item.*; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.client.cosmetic.SimpleArmorSkinRenderingData; +import com.sammy.malum.registry.client.ModelRegistry; +import net.minecraft.world.item.Item; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.systems.item.LodestoneArmorItem; import static com.sammy.malum.MalumMod.malumPath; diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ancient/AncientClothArmorSkin.java b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ancient/AncientClothArmorSkin.java index 14f7ff976..666b99abb 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ancient/AncientClothArmorSkin.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ancient/AncientClothArmorSkin.java @@ -1,13 +1,15 @@ package com.sammy.malum.common.item.cosmetic.skins.ancient; -import com.sammy.malum.client.cosmetic.*; -import com.sammy.malum.common.item.cosmetic.skins.*; -import com.sammy.malum.common.item.curiosities.armor.*; -import com.sammy.malum.registry.client.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.client.cosmetic.SimpleArmorSkinRenderingData; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import com.sammy.malum.common.item.curiosities.armor.SoulHunterArmorItem; +import com.sammy.malum.registry.client.ModelRegistry; +import net.minecraft.world.item.Item; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -import static com.sammy.malum.MalumMod.*; +import static com.sammy.malum.MalumMod.malumPath; public class AncientClothArmorSkin extends ArmorSkin { public AncientClothArmorSkin(String id, Item weaveItem) { diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ancient/AncientMetalArmorSkin.java b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ancient/AncientMetalArmorSkin.java index 794bee425..ed5fd9189 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ancient/AncientMetalArmorSkin.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/ancient/AncientMetalArmorSkin.java @@ -1,13 +1,15 @@ package com.sammy.malum.common.item.cosmetic.skins.ancient; -import com.sammy.malum.client.cosmetic.*; -import com.sammy.malum.common.item.cosmetic.skins.*; -import com.sammy.malum.common.item.curiosities.armor.*; -import com.sammy.malum.registry.client.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.client.cosmetic.SimpleArmorSkinRenderingData; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import com.sammy.malum.common.item.curiosities.armor.SoulStainedSteelArmorItem; +import com.sammy.malum.registry.client.ModelRegistry; +import net.minecraft.world.item.Item; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -import static com.sammy.malum.MalumMod.*; +import static com.sammy.malum.MalumMod.malumPath; public class AncientMetalArmorSkin extends ArmorSkin { public AncientMetalArmorSkin(String id, Item weaveItem) { diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/risk_of_rain/CommandoArmorSkin.java b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/risk_of_rain/CommandoArmorSkin.java index 6c60acd9b..67ddee91d 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/risk_of_rain/CommandoArmorSkin.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/risk_of_rain/CommandoArmorSkin.java @@ -1,13 +1,15 @@ package com.sammy.malum.common.item.cosmetic.skins.risk_of_rain; -import com.sammy.malum.client.cosmetic.*; -import com.sammy.malum.common.item.cosmetic.skins.*; -import com.sammy.malum.registry.client.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.systems.item.*; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.client.cosmetic.SimpleArmorSkinRenderingData; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import com.sammy.malum.registry.client.ModelRegistry; +import net.minecraft.world.item.Item; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.systems.item.LodestoneArmorItem; -import static com.sammy.malum.MalumMod.*; +import static com.sammy.malum.MalumMod.malumPath; public class CommandoArmorSkin extends ArmorSkin { public CommandoArmorSkin(String id, Class validArmorClass, Item weaveItem) { diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/risk_of_rain/ExecutionerArmorSkin.java b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/risk_of_rain/ExecutionerArmorSkin.java index f06028ff6..e68a4c720 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/skins/risk_of_rain/ExecutionerArmorSkin.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/skins/risk_of_rain/ExecutionerArmorSkin.java @@ -1,13 +1,15 @@ package com.sammy.malum.common.item.cosmetic.skins.risk_of_rain; -import com.sammy.malum.client.cosmetic.*; -import com.sammy.malum.common.item.cosmetic.skins.*; -import com.sammy.malum.registry.client.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.systems.item.*; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.client.cosmetic.SimpleArmorSkinRenderingData; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import com.sammy.malum.registry.client.ModelRegistry; +import net.minecraft.world.item.Item; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.systems.item.LodestoneArmorItem; -import static com.sammy.malum.MalumMod.*; +import static com.sammy.malum.MalumMod.malumPath; public class ExecutionerArmorSkin extends ArmorSkin { public ExecutionerArmorSkin(String id, Class validArmorClass, Item weaveItem) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/SoulStaveItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/SoulStaveItem.java index 5e11fd26c..ab265fe83 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/SoulStaveItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/SoulStaveItem.java @@ -6,7 +6,6 @@ import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/SpiritPouchItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/SpiritPouchItem.java index e28032ead..6b728e14e 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/SpiritPouchItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/SpiritPouchItem.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.item.curiosities; import com.sammy.malum.common.container.SpiritPouchContainer; -import com.sammy.malum.common.item.spirit.*; +import com.sammy.malum.common.item.spirit.SpiritShardItem; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; @@ -21,9 +21,9 @@ import net.minecraft.world.item.ItemUtils; import net.minecraft.world.level.Level; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.network.NetworkHooks; diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/MalumArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/MalumArmorItem.java index f16e0def0..550b140f1 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/armor/MalumArmorItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/MalumArmorItem.java @@ -1,10 +1,14 @@ package com.sammy.malum.common.item.curiosities.armor; -import com.sammy.malum.client.cosmetic.*; -import com.sammy.malum.common.item.cosmetic.skins.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.item.*; -import team.lodestar.lodestone.systems.item.*; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; +import team.lodestar.lodestone.systems.item.LodestoneArmorItem; public class MalumArmorItem extends LodestoneArmorItem { public MalumArmorItem(ArmorMaterial materialIn, ArmorItem.Type slot, Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java index 47eed8762..e2aa48de7 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java @@ -1,26 +1,28 @@ package com.sammy.malum.common.item.curiosities.armor; -import com.google.common.collect.*; -import com.sammy.malum.client.cosmetic.*; -import com.sammy.malum.common.item.cosmetic.skins.*; -import com.sammy.malum.registry.client.*; -import net.minecraft.client.*; -import net.minecraft.client.model.*; -import net.minecraft.util.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.ai.attributes.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.client.*; +import com.google.common.collect.ImmutableMultimap; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import com.sammy.malum.registry.client.ModelRegistry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.extensions.common.IClientItemExtensions; import team.lodestar.lodestone.registry.common.LodestoneAttributeRegistry; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.model.*; +import team.lodestar.lodestone.systems.model.LodestoneArmorModel; -import java.util.*; -import java.util.function.*; +import java.util.UUID; +import java.util.function.Consumer; -import static com.sammy.malum.registry.common.item.ArmorTiers.ArmorTierEnum.*; +import static com.sammy.malum.registry.common.item.ArmorTiers.ArmorTierEnum.SPIRIT_HUNTER; public class SoulHunterArmorItem extends MalumArmorItem { public SoulHunterArmorItem(ArmorItem.Type slot, Properties builder) { @@ -63,7 +65,13 @@ public LodestoneArmorModel getHumanoidArmorModel(LivingEntity entity, ItemStack } model.slot = armorSlot; model.copyFromDefault(_default); - model.setupAnim(entity, entity.animationPosition, entity.animationSpeed, entity.tickCount + pticks, netHeadYaw, netHeadPitch); + + //pLimbSwing, pLimbSwingAmount + /* + f8 = pEntity.walkAnimation.speed(pPartialTicks); + f5 = pEntity.walkAnimation.position(pPartialTicks); + */ + model.setupAnim(entity, entity.walkAnimation.position(), entity.walkAnimation.speed(), entity.tickCount + pticks, netHeadYaw, netHeadPitch); return model; } }); diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java index 584ccba07..3c749a313 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java @@ -1,25 +1,28 @@ package com.sammy.malum.common.item.curiosities.armor; -import com.google.common.collect.*; -import com.sammy.malum.client.cosmetic.*; -import com.sammy.malum.common.item.cosmetic.skins.*; -import com.sammy.malum.registry.client.*; -import com.sammy.malum.registry.common.*; -import net.minecraft.client.*; -import net.minecraft.client.model.*; -import net.minecraft.util.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.ai.attributes.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.client.*; +import com.google.common.collect.ImmutableMultimap; +import com.sammy.malum.client.cosmetic.ArmorSkinRenderingData; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import com.sammy.malum.registry.client.ModelRegistry; +import com.sammy.malum.registry.common.AttributeRegistry; +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.extensions.common.IClientItemExtensions; -import team.lodestar.lodestone.systems.model.*; +import team.lodestar.lodestone.systems.model.LodestoneArmorModel; -import java.util.*; -import java.util.function.*; +import java.util.UUID; +import java.util.function.Consumer; -import static com.sammy.malum.registry.common.item.ArmorTiers.ArmorTierEnum.*; +import static com.sammy.malum.registry.common.item.ArmorTiers.ArmorTierEnum.SOUL_STAINED_STEEL; public class SoulStainedSteelArmorItem extends MalumArmorItem { public SoulStainedSteelArmorItem(ArmorItem.Type slot, Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioGildedBelt.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioGildedBelt.java index 965cad424..b3810c035 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioGildedBelt.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioGildedBelt.java @@ -1,14 +1,11 @@ package com.sammy.malum.common.item.curiosities.curios; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ItemStack; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioGildedBelt extends MalumCurioItem { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioGildedRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioGildedRing.java index 963eb0381..4fcea5359 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioGildedRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioGildedRing.java @@ -1,14 +1,11 @@ package com.sammy.malum.common.item.curiosities.curios; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ItemStack; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioGildedRing extends MalumCurioItem { public CurioGildedRing(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioOrnateNecklace.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioOrnateNecklace.java index ae37f579e..f70530781 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioOrnateNecklace.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioOrnateNecklace.java @@ -1,14 +1,11 @@ package com.sammy.malum.common.item.curiosities.curios; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ItemStack; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioOrnateNecklace extends MalumCurioItem { public CurioOrnateNecklace(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioOrnateRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioOrnateRing.java index 9345a0dd9..b65ca53b3 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioOrnateRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/CurioOrnateRing.java @@ -1,14 +1,11 @@ package com.sammy.malum.common.item.curiosities.curios; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ItemStack; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioOrnateRing extends MalumCurioItem { public CurioOrnateRing(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/MalumCurioItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/MalumCurioItem.java index aa437d6e6..12d37198d 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/MalumCurioItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/MalumCurioItem.java @@ -1,22 +1,26 @@ package com.sammy.malum.common.item.curiosities.curios; -import com.google.common.collect.*; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; import com.sammy.malum.registry.common.SoundRegistry; -import net.minecraft.*; -import net.minecraft.sounds.*; +import net.minecraft.Util; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.attributes.*; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; -import top.theillusivec4.curios.api.*; +import top.theillusivec4.curios.api.SlotContext; import top.theillusivec4.curios.api.type.capability.ICurioItem; import java.util.Map; import java.util.UUID; -import java.util.function.*; +import java.util.function.Function; +import java.util.function.Supplier; public class MalumCurioItem extends Item implements ICurioItem { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioAlchemicalRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioAlchemicalRing.java index 26a0f3836..f2a46962e 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioAlchemicalRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioAlchemicalRing.java @@ -1,25 +1,23 @@ package com.sammy.malum.common.item.curiosities.curios.alchemical; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.registry.common.item.ItemRegistry; -import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.core.systems.item.IMalumEventResponderItem; +import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.registry.common.item.ItemRegistry; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.attributes.*; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ItemStack; import net.minecraftforge.event.entity.living.MobEffectEvent; import net.minecraftforge.registries.ForgeRegistries; import team.lodestar.lodestone.helpers.CurioHelper; import team.lodestar.lodestone.helpers.EntityHelper; import team.lodestar.lodestone.registry.common.LodestoneAttributeRegistry; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioAlchemicalRing extends MalumCurioItem implements IMalumEventResponderItem { @@ -40,10 +38,9 @@ public static void onPotionApplied(MobEffectEvent.Added event) { MobEffect type = effect.getEffect(); float multiplier = MobEffectRegistry.ALCHEMICAL_PROFICIENCY_MAP.getOrDefault(ForgeRegistries.MOB_EFFECTS.getKey(type), 1f); if (type.isBeneficial()) { - EntityHelper.extendEffect(effect, entity, (int) (effect.getDuration()*0.25f*multiplier)); - } - else if (type.getCategory().equals(MobEffectCategory.HARMFUL)) { - EntityHelper.shortenEffect(effect, entity, (int) (effect.getDuration()*0.33f*multiplier)); + EntityHelper.extendEffect(effect, entity, (int) (effect.getDuration() * 0.25f * multiplier)); + } else if (type.getCategory().equals(MobEffectCategory.HARMFUL)) { + EntityHelper.shortenEffect(effect, entity, (int) (effect.getDuration() * 0.33f * multiplier)); } } } @@ -53,12 +50,11 @@ public void pickupSpirit(LivingEntity collector, ItemStack stack, double arcaneR collector.getActiveEffectsMap().forEach((e, i) -> { float multiplier = MobEffectRegistry.ALCHEMICAL_PROFICIENCY_MAP.getOrDefault(ForgeRegistries.MOB_EFFECTS.getKey(e), 1f); if (e.isBeneficial()) { - int base = 40 +(int)(arcaneResonance*20); - EntityHelper.extendEffect(i, collector, (int) (base*multiplier), 1200); - } - else if (e.getCategory().equals(MobEffectCategory.HARMFUL)) { - int base = 60 +(int)(arcaneResonance*30); - EntityHelper.shortenEffect(i, collector, (int) (base*multiplier)); + int base = 40 + (int) (arcaneResonance * 20); + EntityHelper.extendEffect(i, collector, (int) (base * multiplier), 1200); + } else if (e.getCategory().equals(MobEffectCategory.HARMFUL)) { + int base = 60 + (int) (arcaneResonance * 30); + EntityHelper.shortenEffect(i, collector, (int) (base * multiplier)); } }); } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioCurativeRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioCurativeRing.java index 95a1d3c6d..b8bcbce47 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioCurativeRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioCurativeRing.java @@ -1,18 +1,14 @@ package com.sammy.malum.common.item.curiosities.curios.alchemical; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.core.systems.item.IMalumEventResponderItem; -import com.sammy.malum.registry.common.*; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ItemStack; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioCurativeRing extends MalumCurioItem implements IMalumEventResponderItem { public CurioCurativeRing(Properties builder) { @@ -21,8 +17,9 @@ public CurioCurativeRing(Properties builder) { @Override public void pickupSpirit(LivingEntity collector, ItemStack stack, double arcaneResonance) { - collector.heal(collector.getMaxHealth() * 0.1f+(float)(arcaneResonance*0.05f)); + collector.heal(collector.getMaxHealth() * 0.1f + (float) (arcaneResonance * 0.05f)); } + @Override public void addAttributeModifiers(Multimap map, SlotContext slotContext, ItemStack stack) { addAttributeModifier(map, Attributes.MAX_HEALTH, uuid -> new AttributeModifier(uuid, diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioRingOfProwess.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioRingOfProwess.java index 2cad62b65..fdc14788e 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioRingOfProwess.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/alchemical/CurioRingOfProwess.java @@ -1,6 +1,6 @@ package com.sammy.malum.common.item.curiosities.curios.alchemical; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.core.systems.item.IMalumEventResponderItem; import net.minecraft.world.entity.ExperienceOrb; import net.minecraft.world.entity.LivingEntity; @@ -16,7 +16,7 @@ public CurioRingOfProwess(Properties builder) { public void pickupSpirit(LivingEntity collector, ItemStack stack, double arcaneResonance) { Level level = collector.level(); int floored = (int) Math.floor(arcaneResonance); - int i = 1 + level.random.nextInt(1+floored) + level.random.nextInt(2+floored); + int i = 1 + level.random.nextInt(1 + floored) + level.random.nextInt(2 + floored); while (i > 0) { int j = ExperienceOrb.getExperienceValue(i); diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioHarmonyNecklace.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioHarmonyNecklace.java index d059afc82..3299b1ff2 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioHarmonyNecklace.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioHarmonyNecklace.java @@ -1,10 +1,10 @@ package com.sammy.malum.common.item.curiosities.curios.misc; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.core.helper.SpiritHelper; +import com.sammy.malum.core.systems.spirit.MalumEntitySpiritData; import com.sammy.malum.registry.common.SpiritTypeRegistry; import com.sammy.malum.registry.common.item.ItemRegistry; -import com.sammy.malum.core.systems.spirit.MalumEntitySpiritData; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.LivingEntity; import net.minecraftforge.event.entity.living.LivingEvent; @@ -20,7 +20,7 @@ public static void preventDetection(LivingEvent.LivingVisibilityEvent event) { LivingEntity target = event.getEntity(); if (CurioHelper.hasCurioEquipped(target, ItemRegistry.NECKLACE_OF_BLISSFUL_HARMONY.get())) { MalumEntitySpiritData data = SpiritHelper.getEntitySpiritData(watcher); - float visibilityModifier = data == null ? 0.5f : 0.5f / (1+data.dataEntries.stream().map(s -> s.type.equals(SpiritTypeRegistry.WICKED_SPIRIT) ? 1 : 0).count()); + float visibilityModifier = data == null ? 0.5f : 0.5f / (1 + data.dataEntries.stream().map(s -> s.type.equals(SpiritTypeRegistry.WICKED_SPIRIT) ? 1 : 0).count()); if (target.hasEffect(MobEffects.INVISIBILITY)) { visibilityModifier *= 0.5f; } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioNarrowNecklace.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioNarrowNecklace.java index 1df7e956b..7ff74b35c 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioNarrowNecklace.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioNarrowNecklace.java @@ -1,14 +1,12 @@ package com.sammy.malum.common.item.curiosities.curios.misc; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.registry.common.AttributeRegistry; -import net.minecraft.world.entity.ai.attributes.*; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ItemStack; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioNarrowNecklace extends MalumCurioItem { public CurioNarrowNecklace(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioWaterNecklace.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioWaterNecklace.java index 385971902..7729009b6 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioWaterNecklace.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioWaterNecklace.java @@ -1,19 +1,18 @@ package com.sammy.malum.common.item.curiosities.curios.misc; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.core.systems.item.IMalumEventResponderItem; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.attributes.*; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.ForgeMod; import net.minecraftforge.event.entity.living.LivingHurtEvent; import top.theillusivec4.curios.api.SlotContext; -import java.util.UUID; - public class CurioWaterNecklace extends MalumCurioItem implements IMalumEventResponderItem { public CurioWaterNecklace(Properties builder) { super(builder, MalumTrinketType.GILDED); diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioDemolitionistRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioDemolitionistRing.java index e6f9f76d0..611dde477 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioDemolitionistRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioDemolitionistRing.java @@ -1,6 +1,6 @@ package com.sammy.malum.common.item.curiosities.curios.prospector; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.registry.common.item.ItemRegistry; import net.minecraft.world.entity.LivingEntity; import team.lodestar.lodestone.helpers.CurioHelper; diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioHoarderRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioHoarderRing.java index 7b3aa748c..a68a3eca6 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioHoarderRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioHoarderRing.java @@ -1,6 +1,6 @@ package com.sammy.malum.common.item.curiosities.curios.prospector; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.registry.common.item.ItemRegistry; import net.minecraft.core.BlockPos; import net.minecraft.world.InteractionHand; diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioProspectorBelt.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioProspectorBelt.java index e0a7c4d19..7a182ff34 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioProspectorBelt.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioProspectorBelt.java @@ -1,6 +1,6 @@ package com.sammy.malum.common.item.curiosities.curios.prospector; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.registry.common.item.ItemRegistry; import com.sammy.malum.registry.common.item.ItemTagRegistry; import net.minecraft.world.entity.Entity; @@ -9,7 +9,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.Enchantments; -import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraftforge.event.level.ExplosionEvent; diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/rotten/CurioStarvedBelt.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/rotten/CurioStarvedBelt.java index 92f35da21..d4fcce690 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/rotten/CurioStarvedBelt.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/rotten/CurioStarvedBelt.java @@ -1,15 +1,10 @@ package com.sammy.malum.common.item.curiosities.curios.rotten; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.registry.common.SoundRegistry; -import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.core.systems.item.IMalumEventResponderItem; -import net.minecraft.*; -import net.minecraft.network.chat.*; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextComponent; +import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.registry.common.SoundRegistry; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.effect.MobEffect; @@ -18,15 +13,10 @@ import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.item.*; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import org.jetbrains.annotations.*; -import team.lodestar.lodestone.helpers.*; -import top.theillusivec4.curios.api.*; - -import java.awt.*; -import java.util.*; -import java.util.List; +import team.lodestar.lodestone.helpers.EntityHelper; +import top.theillusivec4.curios.api.SlotContext; public class CurioStarvedBelt extends MalumCurioItem implements IMalumEventResponderItem { @@ -45,9 +35,9 @@ public void pickupSpirit(LivingEntity collector, ItemStack stack, double arcaneR MobEffect gluttony = MobEffectRegistry.GLUTTONY.get(); MobEffectInstance effect = collector.getEffect(gluttony); if (effect == null) { - collector.addEffect(new MobEffectInstance(gluttony, 100+(int)(arcaneResonance*100), 0, true, true, true)); + collector.addEffect(new MobEffectInstance(gluttony, 100 + (int) (arcaneResonance * 100), 0, true, true, true)); } else { - EntityHelper.extendEffect(effect, collector, 50, 200+(int)(arcaneResonance*200)); + EntityHelper.extendEffect(effect, collector, 50, 200 + (int) (arcaneResonance * 200)); EntityHelper.amplifyEffect(effect, collector, 1, 9); } Level level = collector.level(); diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/rotten/CurioVoraciousRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/rotten/CurioVoraciousRing.java index d48e587cb..dac13fa22 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/rotten/CurioVoraciousRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/rotten/CurioVoraciousRing.java @@ -1,9 +1,8 @@ package com.sammy.malum.common.item.curiosities.curios.rotten; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.registry.common.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; +import com.sammy.malum.registry.common.MobEffectRegistry; import com.sammy.malum.registry.common.item.ItemRegistry; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; @@ -15,9 +14,7 @@ import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent; import team.lodestar.lodestone.helpers.CurioHelper; import team.lodestar.lodestone.helpers.EntityHelper; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; import static com.sammy.malum.registry.common.item.ItemTagRegistry.GROSS_FOODS; @@ -50,7 +47,7 @@ public static void finishEating(LivingEntityUseItemEvent.Finish event) { if (stack.is(GROSS_FOODS)) { MobEffectInstance gluttony = player.getEffect(MobEffectRegistry.GLUTTONY.get()); if (gluttony != null) { - player.getFoodData().eat(1, 0.25f*(gluttony.amplifier+1)); + player.getFoodData().eat(1, 0.25f * (gluttony.amplifier + 1)); } player.getFoodData().eat(1, 1f); MobEffectInstance hunger = player.getEffect(MobEffects.HUNGER); diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/soulward/CurioMagebaneBelt.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/soulward/CurioMagebaneBelt.java index 74a2470d6..88f12cc8c 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/soulward/CurioMagebaneBelt.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/soulward/CurioMagebaneBelt.java @@ -1,12 +1,11 @@ package com.sammy.malum.common.item.curiosities.curios.soulward; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.sammy.malum.common.capability.MalumPlayerDataCapability; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.core.handlers.SoulWardHandler; -import com.sammy.malum.registry.common.AttributeRegistry; import com.sammy.malum.core.systems.item.IMalumEventResponderItem; +import com.sammy.malum.registry.common.AttributeRegistry; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.entity.ai.attributes.Attribute; @@ -14,9 +13,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.event.entity.living.LivingHurtEvent; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioMagebaneBelt extends MalumCurioItem implements IMalumEventResponderItem { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/spirit/CurioArcaneSpoilRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/spirit/CurioArcaneSpoilRing.java index 047cbfbf8..abbad5d29 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/spirit/CurioArcaneSpoilRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/spirit/CurioArcaneSpoilRing.java @@ -1,14 +1,12 @@ package com.sammy.malum.common.item.curiosities.curios.spirit; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.sammy.malum.common.item.curiosities.curios.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.registry.common.AttributeRegistry; -import net.minecraft.world.entity.ai.attributes.*; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ItemStack; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioArcaneSpoilRing extends MalumCurioItem { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/spirit/CurioMirrorNecklace.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/spirit/CurioMirrorNecklace.java index 7ac85ca07..9ff685ef4 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/spirit/CurioMirrorNecklace.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/spirit/CurioMirrorNecklace.java @@ -1,16 +1,14 @@ package com.sammy.malum.common.item.curiosities.curios.spirit; -import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.registry.common.AttributeRegistry; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; import com.sammy.malum.core.systems.item.IMalumEventResponderItem; -import net.minecraft.world.entity.ai.attributes.*; +import com.sammy.malum.registry.common.AttributeRegistry; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ItemStack; import team.lodestar.lodestone.registry.common.LodestoneAttributeRegistry; -import top.theillusivec4.curios.api.*; - -import java.util.UUID; +import top.theillusivec4.curios.api.SlotContext; public class CurioMirrorNecklace extends MalumCurioItem implements IMalumEventResponderItem { public CurioMirrorNecklace(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioGrowingFleshRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioGrowingFleshRing.java index 2bb13247e..4baaf6cd8 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioGrowingFleshRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioGrowingFleshRing.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.item.curiosities.curios.weeping; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.core.systems.item.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; +import com.sammy.malum.core.systems.item.IVoidItem; public class CurioGrowingFleshRing extends MalumCurioItem implements IVoidItem { public CurioGrowingFleshRing(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioGruesomeSatiationRing.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioGruesomeSatiationRing.java index d99297bae..0cca05c2d 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioGruesomeSatiationRing.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioGruesomeSatiationRing.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.item.curiosities.curios.weeping; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.core.systems.item.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; +import com.sammy.malum.core.systems.item.IVoidItem; public class CurioGruesomeSatiationRing extends MalumCurioItem implements IVoidItem { public CurioGruesomeSatiationRing(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioHiddenBladeNecklace.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioHiddenBladeNecklace.java index 09d638fc4..f2c981e9f 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioHiddenBladeNecklace.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioHiddenBladeNecklace.java @@ -1,12 +1,14 @@ package com.sammy.malum.common.item.curiosities.curios.weeping; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.core.systems.item.*; -import com.sammy.malum.registry.common.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.item.*; -import net.minecraftforge.event.entity.living.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; +import com.sammy.malum.core.systems.item.IMalumEventResponderItem; +import com.sammy.malum.core.systems.item.IVoidItem; +import com.sammy.malum.registry.common.MobEffectRegistry; +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingHurtEvent; public class CurioHiddenBladeNecklace extends MalumCurioItem implements IMalumEventResponderItem, IVoidItem { public CurioHiddenBladeNecklace(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioWatcherNecklace.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioWatcherNecklace.java index 9710ed202..eb1aa1215 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioWatcherNecklace.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/weeping/CurioWatcherNecklace.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.item.curiosities.curios.weeping; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.core.systems.item.*; +import com.sammy.malum.common.item.curiosities.curios.MalumCurioItem; +import com.sammy.malum.core.systems.item.IVoidItem; public class CurioWatcherNecklace extends MalumCurioItem implements IVoidItem { public CurioWatcherNecklace(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/nitrate/EthericNitrateItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/nitrate/EthericNitrateItem.java index dbe90dbf9..9951c39ab 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/nitrate/EthericNitrateItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/nitrate/EthericNitrateItem.java @@ -6,16 +6,14 @@ import team.lodestar.lodestone.helpers.ColorHelper; import team.lodestar.lodestone.setup.LodestoneScreenParticleRegistry; import team.lodestar.lodestone.systems.easing.Easing; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.ScreenParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.screen.*; -import team.lodestar.lodestone.systems.particle.screen.base.ScreenParticle; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleDataBuilder; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; import java.awt.*; -import java.util.ArrayList; -import java.util.HashMap; public class EthericNitrateItem extends AbstractNitrateItem { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/nitrate/VividNitrateItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/nitrate/VividNitrateItem.java index 4488a1db2..23ec6b42e 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/nitrate/VividNitrateItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/nitrate/VividNitrateItem.java @@ -5,16 +5,14 @@ import net.minecraft.world.level.Level; import team.lodestar.lodestone.setup.LodestoneScreenParticleRegistry; import team.lodestar.lodestone.systems.easing.Easing; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.ScreenParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.screen.*; -import team.lodestar.lodestone.systems.particle.screen.base.ScreenParticle; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleDataBuilder; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; import java.awt.*; -import java.util.ArrayList; -import java.util.HashMap; import static com.sammy.malum.common.entity.nitrate.VividNitrateEntity.COLOR_FUNCTION; @@ -46,6 +44,6 @@ public void spawnLateParticles(ScreenParticleHolder target, Level level, float p .setScaleData(GenericParticleData.create((float) (1.4f - Math.sin(gameTime * 0.075f) * 0.125f), 0).build()) .setColorData(ColorParticleData.create(secondColor, firstColor).build()) .setSpinData(spinParticleData.setSpinOffset(0.785f - 0.01f * gameTime % 6.28f).build()) - .spawnOnStack( -1, +4); + .spawnOnStack(-1, +4); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MagicScytheItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MagicScytheItem.java index 6241493ea..961008320 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MagicScytheItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MagicScytheItem.java @@ -9,6 +9,7 @@ public class MagicScytheItem extends MalumScytheItem { public final float magicDamage; + public MagicScytheItem(Tier tier, float attackDamageIn, float attackSpeedIn, float magicDamage, Properties builderIn) { super(tier, attackDamageIn, attackSpeedIn, builderIn); this.magicDamage = magicDamage; diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MalumScytheItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MalumScytheItem.java index 32dbc84e7..59e8405fd 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MalumScytheItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MalumScytheItem.java @@ -1,11 +1,11 @@ package com.sammy.malum.common.item.curiosities.weapons; import com.sammy.malum.common.entity.boomerang.ScytheBoomerangEntity; +import com.sammy.malum.core.systems.item.IMalumEventResponderItem; import com.sammy.malum.registry.client.ParticleRegistry; import com.sammy.malum.registry.common.DamageSourceRegistry; import com.sammy.malum.registry.common.SoundRegistry; import com.sammy.malum.registry.common.item.ItemRegistry; -import com.sammy.malum.core.systems.item.IMalumEventResponderItem; import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/unique/MephiticEdgeScytheItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/unique/MephiticEdgeScytheItem.java index c44dc85b2..8cca041b6 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/unique/MephiticEdgeScytheItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/unique/MephiticEdgeScytheItem.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.item.curiosities.weapons.unique; -import com.sammy.malum.common.item.curiosities.weapons.*; -import net.minecraft.world.item.*; +import com.sammy.malum.common.item.curiosities.weapons.MagicScytheItem; +import net.minecraft.world.item.Tier; public class MephiticEdgeScytheItem extends MagicScytheItem { public MephiticEdgeScytheItem(Tier tier, float attackDamageIn, float attackSpeedIn, float magicDamage, Properties builderIn) { diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/unique/TyrvingItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/unique/TyrvingItem.java index 03d2dfc4d..45adaa9da 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/unique/TyrvingItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/unique/TyrvingItem.java @@ -2,10 +2,10 @@ import com.sammy.malum.common.packets.particle.curiosities.rite.generic.MajorEntityEffectParticlePacket; import com.sammy.malum.core.helper.SpiritHelper; +import com.sammy.malum.core.systems.item.IMalumEventResponderItem; import com.sammy.malum.registry.common.DamageSourceRegistry; import com.sammy.malum.registry.common.SoundRegistry; import com.sammy.malum.registry.common.SpiritTypeRegistry; -import com.sammy.malum.core.systems.item.IMalumEventResponderItem; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundSource; import net.minecraft.world.damagesource.DamageTypes; @@ -33,7 +33,7 @@ public void hurtEvent(LivingHurtEvent event, LivingEntity attacker, LivingEntity if (attacker.level() instanceof ServerLevel) { float spiritCount = SpiritHelper.getEntitySpiritCount(target) * 2f; if (target instanceof Player) { - spiritCount = 4 * Math.max(1, (1 + target.getArmorValue() / 12f) * (1 + (1 - 1 / (float)target.getArmorValue())) / 12f); + spiritCount = 4 * Math.max(1, (1 + target.getArmorValue() / 12f) * (1 + (1 - 1 / (float) target.getArmorValue())) / 12f); } if (target.isAlive()) { diff --git a/src/main/java/com/sammy/malum/common/item/ether/EtherBrazierItem.java b/src/main/java/com/sammy/malum/common/item/ether/EtherBrazierItem.java index 17acd4eca..8f5c6a024 100644 --- a/src/main/java/com/sammy/malum/common/item/ether/EtherBrazierItem.java +++ b/src/main/java/com/sammy/malum/common/item/ether/EtherBrazierItem.java @@ -5,16 +5,14 @@ import net.minecraft.world.level.block.Block; import team.lodestar.lodestone.setup.LodestoneScreenParticleRegistry; import team.lodestar.lodestone.systems.easing.Easing; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.ScreenParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.screen.*; -import team.lodestar.lodestone.systems.particle.screen.base.ScreenParticle; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleDataBuilder; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; import java.awt.*; -import java.util.ArrayList; -import java.util.HashMap; public class EtherBrazierItem extends AbstractEtherItem { public EtherBrazierItem(Block blockIn, Properties builder, boolean iridescent) { @@ -30,7 +28,7 @@ public void spawnLateParticles(ScreenParticleHolder target, Level level, float p float alphaMultiplier = etherItem.iridescent ? 0.75f : 0.5f; SpinParticleDataBuilder spinDataBuilder = SpinParticleData.create(0, 1).setSpinOffset(0.025f * time % 6.28f).setEasing(Easing.EXPO_IN_OUT); ScreenParticleBuilder.create(LodestoneScreenParticleRegistry.STAR, target) - .setTransparencyData(GenericParticleData.create(0.1f*alphaMultiplier, 0f).setEasing(Easing.QUINTIC_IN).build()) + .setTransparencyData(GenericParticleData.create(0.1f * alphaMultiplier, 0f).setEasing(Easing.QUINTIC_IN).build()) .setScaleData(GenericParticleData.create((float) (1.3f + Math.sin(time * 0.1f) * 0.125f), 0).build()) .setColorData(ColorParticleData.create(firstColor, secondColor).setCoefficient(1.25f).build()) .setLifetime(6) @@ -39,7 +37,7 @@ public void spawnLateParticles(ScreenParticleHolder target, Level level, float p .spawnOnStack(-0.5f, -2) .setScaleData(GenericParticleData.create((float) (1.2f - Math.sin(time * 0.075f) * 0.125f), 0).build()) .setColorData(ColorParticleData.create(secondColor, firstColor).build()) - .setSpinData(spinDataBuilder.setSpinOffset(0.785f-0.01f * time % 6.28f).build()) + .setSpinData(spinDataBuilder.setSpinOffset(0.785f - 0.01f * time % 6.28f).build()) .spawnOnStack(-0.5f, -2); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/item/ether/EtherItem.java b/src/main/java/com/sammy/malum/common/item/ether/EtherItem.java index 43301e416..bcf69c0b1 100644 --- a/src/main/java/com/sammy/malum/common/item/ether/EtherItem.java +++ b/src/main/java/com/sammy/malum/common/item/ether/EtherItem.java @@ -5,16 +5,14 @@ import net.minecraft.world.level.block.Block; import team.lodestar.lodestone.setup.LodestoneScreenParticleRegistry; import team.lodestar.lodestone.systems.easing.Easing; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.ScreenParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.screen.*; -import team.lodestar.lodestone.systems.particle.screen.base.ScreenParticle; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleDataBuilder; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; import java.awt.*; -import java.util.ArrayList; -import java.util.HashMap; public class EtherItem extends AbstractEtherItem { public EtherItem(Block blockIn, Properties builder, boolean iridescent) { @@ -32,7 +30,7 @@ public void spawnLateParticles(ScreenParticleHolder target, Level level, float p final int xOffset = etherItem.iridescent ? -1 : 0; final SpinParticleDataBuilder spinDataBuilder = SpinParticleData.create(0, 1).setSpinOffset(0.025f * time % 6.28f).setEasing(Easing.EXPO_IN_OUT); ScreenParticleBuilder.create(LodestoneScreenParticleRegistry.STAR, target) - .setTransparencyData(GenericParticleData.create(0.09f*alphaMultiplier, 0f).setEasing(Easing.QUINTIC_IN).build()) + .setTransparencyData(GenericParticleData.create(0.09f * alphaMultiplier, 0f).setEasing(Easing.QUINTIC_IN).build()) .setScaleData(GenericParticleData.create((float) (1.5f + Math.sin(time * 0.1f) * 0.125f), 0).build()) .setColorData(ColorParticleData.create(firstColor, secondColor).setCoefficient(1.25f).build()) .setLifetime(6) @@ -41,7 +39,7 @@ public void spawnLateParticles(ScreenParticleHolder target, Level level, float p .spawnOnStack(xOffset, yOffset) .setScaleData(GenericParticleData.create((float) (1.4f - Math.sin(time * 0.075f) * 0.125f), 0).build()) .setColorData(ColorParticleData.create(secondColor, firstColor).build()) - .setSpinData(spinDataBuilder.setSpinOffset(0.785f-0.01f * time % 6.28f).build()) + .setSpinData(spinDataBuilder.setSpinOffset(0.785f - 0.01f * time % 6.28f).build()) .spawnOnStack(xOffset, yOffset); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/item/ether/EtherTorchItem.java b/src/main/java/com/sammy/malum/common/item/ether/EtherTorchItem.java index a72d5a861..8b9dfd802 100644 --- a/src/main/java/com/sammy/malum/common/item/ether/EtherTorchItem.java +++ b/src/main/java/com/sammy/malum/common/item/ether/EtherTorchItem.java @@ -11,17 +11,15 @@ import net.minecraft.world.phys.shapes.CollisionContext; import team.lodestar.lodestone.setup.LodestoneScreenParticleRegistry; import team.lodestar.lodestone.systems.easing.Easing; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.ScreenParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.screen.*; -import team.lodestar.lodestone.systems.particle.screen.base.ScreenParticle; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleDataBuilder; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; import javax.annotation.Nullable; import java.awt.*; -import java.util.ArrayList; -import java.util.HashMap; import java.util.Map; public class EtherTorchItem extends AbstractEtherItem { diff --git a/src/main/java/com/sammy/malum/common/item/impetus/CrackedImpetusItem.java b/src/main/java/com/sammy/malum/common/item/impetus/CrackedImpetusItem.java index 97aa8eb0b..434d81e5e 100644 --- a/src/main/java/com/sammy/malum/common/item/impetus/CrackedImpetusItem.java +++ b/src/main/java/com/sammy/malum/common/item/impetus/CrackedImpetusItem.java @@ -5,6 +5,7 @@ public class CrackedImpetusItem extends Item implements SpiritRepairRecipe.IRepairOutputOverride { public ImpetusItem impetus; + public CrackedImpetusItem(Properties pProperties) { super(pProperties); } diff --git a/src/main/java/com/sammy/malum/common/item/spirit/FusedConsciousnessItem.java b/src/main/java/com/sammy/malum/common/item/spirit/FusedConsciousnessItem.java index 6905c350f..f39fedfe9 100644 --- a/src/main/java/com/sammy/malum/common/item/spirit/FusedConsciousnessItem.java +++ b/src/main/java/com/sammy/malum/common/item/spirit/FusedConsciousnessItem.java @@ -1,8 +1,7 @@ package com.sammy.malum.common.item.spirit; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.core.systems.item.*; -import net.minecraft.world.item.*; +import com.sammy.malum.core.systems.item.IVoidItem; +import net.minecraft.world.item.SimpleFoiledItem; public class FusedConsciousnessItem extends SimpleFoiledItem implements IVoidItem { public FusedConsciousnessItem(Properties builder) { diff --git a/src/main/java/com/sammy/malum/common/item/spirit/SoulVialItem.java b/src/main/java/com/sammy/malum/common/item/spirit/SoulVialItem.java index eb75f792d..2302a75b4 100644 --- a/src/main/java/com/sammy/malum/common/item/spirit/SoulVialItem.java +++ b/src/main/java/com/sammy/malum/common/item/spirit/SoulVialItem.java @@ -1,6 +1,6 @@ package com.sammy.malum.common.item.spirit; -import com.sammy.malum.common.item.curiosities.*; +import com.sammy.malum.common.item.curiosities.SoulStaveItem; import com.sammy.malum.core.systems.item.ISoulContainerItem; import com.sammy.malum.core.systems.spirit.MalumEntitySpiritData; import net.minecraft.ChatFormatting; diff --git a/src/main/java/com/sammy/malum/common/item/spirit/SpiritJarItem.java b/src/main/java/com/sammy/malum/common/item/spirit/SpiritJarItem.java index 4a21db9e7..5479a825d 100644 --- a/src/main/java/com/sammy/malum/common/item/spirit/SpiritJarItem.java +++ b/src/main/java/com/sammy/malum/common/item/spirit/SpiritJarItem.java @@ -56,6 +56,7 @@ public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List consumer) { consumer.accept(new IClientItemExtensions() { static final NonNullLazy renderer = NonNullLazy.of(() -> new SpiritJarItemRenderer(Minecraft.getInstance().getBlockEntityRenderDispatcher(), Minecraft.getInstance().getEntityModels())); + @Override public BlockEntityWithoutLevelRenderer getCustomRenderer() { return renderer.get(); diff --git a/src/main/java/com/sammy/malum/common/item/spirit/SpiritShardItem.java b/src/main/java/com/sammy/malum/common/item/spirit/SpiritShardItem.java index ea29edebd..90b87ef4f 100644 --- a/src/main/java/com/sammy/malum/common/item/spirit/SpiritShardItem.java +++ b/src/main/java/com/sammy/malum/common/item/spirit/SpiritShardItem.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.item.spirit; import com.sammy.malum.core.systems.spirit.MalumSpiritType; -import com.sammy.malum.visual_effects.*; +import com.sammy.malum.visual_effects.ScreenParticleEffects; import net.minecraft.network.chat.Component; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -9,9 +9,8 @@ import net.minecraft.world.level.Level; import org.jetbrains.annotations.Nullable; import team.lodestar.lodestone.handlers.screenparticle.ParticleEmitterHandler.ItemParticleSupplier; -import team.lodestar.lodestone.systems.particle.screen.*; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; -import java.awt.*; import java.util.List; public class SpiritShardItem extends Item implements ItemParticleSupplier { diff --git a/src/main/java/com/sammy/malum/common/item/spirit/TunedOpticItem.java b/src/main/java/com/sammy/malum/common/item/spirit/TunedOpticItem.java index 1e0bef7ce..fe74c63d5 100644 --- a/src/main/java/com/sammy/malum/common/item/spirit/TunedOpticItem.java +++ b/src/main/java/com/sammy/malum/common/item/spirit/TunedOpticItem.java @@ -1,15 +1,17 @@ package com.sammy.malum.common.item.spirit; -import com.sammy.malum.core.systems.spirit.*; -import com.sammy.malum.visual_effects.*; -import net.minecraft.network.chat.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import org.jetbrains.annotations.*; -import team.lodestar.lodestone.handlers.screenparticle.ParticleEmitterHandler.*; -import team.lodestar.lodestone.systems.particle.screen.*; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.visual_effects.ScreenParticleEffects; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; +import team.lodestar.lodestone.handlers.screenparticle.ParticleEmitterHandler.ItemParticleSupplier; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; -import java.util.*; +import java.util.List; public class TunedOpticItem extends Item implements ItemParticleSupplier { public final MalumSpiritType type; diff --git a/src/main/java/com/sammy/malum/common/packets/ParticleEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/ParticleEffectPacket.java index d0ca73161..1fa635b48 100644 --- a/src/main/java/com/sammy/malum/common/packets/ParticleEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/ParticleEffectPacket.java @@ -1,19 +1,21 @@ package com.sammy.malum.common.packets; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.visual_effects.networked.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.client.*; -import net.minecraft.client.multiplayer.*; -import net.minecraft.nbt.*; -import net.minecraft.network.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.systems.network.*; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.visual_effects.networked.ParticleEffectType; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import com.sammy.malum.visual_effects.networked.data.NBTEffectData; +import com.sammy.malum.visual_effects.networked.data.PositionEffectData; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.systems.network.LodestoneClientPacket; -import javax.annotation.*; -import java.util.function.*; +import javax.annotation.Nullable; +import java.util.function.Supplier; public class ParticleEffectPacket extends LodestoneClientPacket { diff --git a/src/main/java/com/sammy/malum/common/packets/VoidRejectionPacket.java b/src/main/java/com/sammy/malum/common/packets/VoidRejectionPacket.java index 46af16eec..2ae9f44dd 100644 --- a/src/main/java/com/sammy/malum/common/packets/VoidRejectionPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/VoidRejectionPacket.java @@ -2,7 +2,6 @@ import com.sammy.malum.common.capability.MalumLivingEntityDataCapability; import net.minecraft.client.Minecraft; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; diff --git a/src/main/java/com/sammy/malum/common/packets/particle/ItemAbsorbParticleEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/ItemAbsorbParticleEffectPacket.java index 90b443910..cac8e9616 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/ItemAbsorbParticleEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/ItemAbsorbParticleEffectPacket.java @@ -1,10 +1,11 @@ package com.sammy.malum.common.packets.particle; -import com.sammy.malum.common.packets.particle.base.spirit.*; -import net.minecraft.network.*; -import net.minecraft.world.item.*; +import com.sammy.malum.common.packets.particle.base.spirit.SpiritBasedParticleEffectPacket; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.item.ItemStack; -import java.util.*; +import java.util.ArrayList; +import java.util.List; public abstract class ItemAbsorbParticleEffectPacket extends SpiritBasedParticleEffectPacket { protected final ItemStack stack; diff --git a/src/main/java/com/sammy/malum/common/packets/particle/SuccessfulSoulHarvestParticlePacket.java b/src/main/java/com/sammy/malum/common/packets/particle/SuccessfulSoulHarvestParticlePacket.java index 0adaaef38..c39a076d9 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/SuccessfulSoulHarvestParticlePacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/SuccessfulSoulHarvestParticlePacket.java @@ -1,21 +1,21 @@ package com.sammy.malum.common.packets.particle; -import com.sammy.malum.common.packets.particle.base.*; -import net.minecraft.client.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.common.packets.particle.base.PositionBasedParticleEffectPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.function.*; +import java.util.function.Supplier; public class SuccessfulSoulHarvestParticlePacket extends PositionBasedParticleEffectPacket { private final Color color; diff --git a/src/main/java/com/sammy/malum/common/packets/particle/base/BlockBasedParticleEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/base/BlockBasedParticleEffectPacket.java index 6de7eae68..31b4f5209 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/base/BlockBasedParticleEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/base/BlockBasedParticleEffectPacket.java @@ -1,8 +1,8 @@ package com.sammy.malum.common.packets.particle.base; -import net.minecraft.core.*; -import net.minecraft.network.*; -import team.lodestar.lodestone.systems.network.*; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import team.lodestar.lodestone.systems.network.LodestoneClientPacket; public abstract class BlockBasedParticleEffectPacket extends LodestoneClientPacket { protected final BlockPos pos; diff --git a/src/main/java/com/sammy/malum/common/packets/particle/base/PositionBasedParticleEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/base/PositionBasedParticleEffectPacket.java index 452767d82..96b34482c 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/base/PositionBasedParticleEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/base/PositionBasedParticleEffectPacket.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.packets.particle.base; -import net.minecraft.network.*; -import team.lodestar.lodestone.systems.network.*; +import net.minecraft.network.FriendlyByteBuf; +import team.lodestar.lodestone.systems.network.LodestoneClientPacket; public abstract class PositionBasedParticleEffectPacket extends LodestoneClientPacket { protected final double posX; diff --git a/src/main/java/com/sammy/malum/common/packets/particle/base/color/ColorBasedBlockParticleEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/base/color/ColorBasedBlockParticleEffectPacket.java index c59927313..d782748e5 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/base/color/ColorBasedBlockParticleEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/base/color/ColorBasedBlockParticleEffectPacket.java @@ -1,8 +1,8 @@ package com.sammy.malum.common.packets.particle.base.color; -import com.sammy.malum.common.packets.particle.base.*; -import net.minecraft.core.*; -import net.minecraft.network.*; +import com.sammy.malum.common.packets.particle.base.BlockBasedParticleEffectPacket; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; import java.awt.*; diff --git a/src/main/java/com/sammy/malum/common/packets/particle/base/color/ColorBasedParticleEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/base/color/ColorBasedParticleEffectPacket.java index 58afadf00..f099a75d5 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/base/color/ColorBasedParticleEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/base/color/ColorBasedParticleEffectPacket.java @@ -1,7 +1,7 @@ package com.sammy.malum.common.packets.particle.base.color; -import com.sammy.malum.common.packets.particle.base.*; -import net.minecraft.network.*; +import com.sammy.malum.common.packets.particle.base.PositionBasedParticleEffectPacket; +import net.minecraft.network.FriendlyByteBuf; import java.awt.*; diff --git a/src/main/java/com/sammy/malum/common/packets/particle/base/spirit/SpiritBasedBlockParticleEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/base/spirit/SpiritBasedBlockParticleEffectPacket.java index 8a4163d4f..a073b4494 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/base/spirit/SpiritBasedBlockParticleEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/base/spirit/SpiritBasedBlockParticleEffectPacket.java @@ -1,15 +1,17 @@ package com.sammy.malum.common.packets.particle.base.spirit; -import com.sammy.malum.common.packets.particle.base.*; -import com.sammy.malum.core.helper.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; - -import java.util.*; -import java.util.function.*; +import com.sammy.malum.common.packets.particle.base.BlockBasedParticleEffectPacket; +import com.sammy.malum.core.helper.SpiritHelper; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; public abstract class SpiritBasedBlockParticleEffectPacket extends BlockBasedParticleEffectPacket { protected final List spirits; @@ -46,7 +48,7 @@ public static T decode(PacketPr double posX = buf.readInt(); double posY = buf.readInt(); double posZ = buf.readInt(); - return provider.getPacket(spirits, new BlockPos((int)posX, (int)posY, (int)posZ)); + return provider.getPacket(spirits, new BlockPos((int) posX, (int) posY, (int) posZ)); } public interface PacketProvider { diff --git a/src/main/java/com/sammy/malum/common/packets/particle/base/spirit/SpiritBasedParticleEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/base/spirit/SpiritBasedParticleEffectPacket.java index 15c851382..a235f0e71 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/base/spirit/SpiritBasedParticleEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/base/spirit/SpiritBasedParticleEffectPacket.java @@ -1,14 +1,16 @@ package com.sammy.malum.common.packets.particle.base.spirit; -import com.sammy.malum.common.packets.particle.base.*; -import com.sammy.malum.core.helper.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.network.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; - -import java.util.*; -import java.util.function.*; +import com.sammy.malum.common.packets.particle.base.PositionBasedParticleEffectPacket; +import com.sammy.malum.core.helper.SpiritHelper; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; public abstract class SpiritBasedParticleEffectPacket extends PositionBasedParticleEffectPacket { protected final List spirits; diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/altar/AltarConsumeParticlePacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/altar/AltarConsumeParticlePacket.java index 709695e4f..5d60c9cd5 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/altar/AltarConsumeParticlePacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/altar/AltarConsumeParticlePacket.java @@ -1,24 +1,24 @@ package com.sammy.malum.common.packets.particle.curiosities.altar; -import com.sammy.malum.common.packets.particle.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.*; -import net.minecraft.network.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; +import com.sammy.malum.common.packets.particle.ItemAbsorbParticleEffectPacket; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.Minecraft; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import java.awt.*; import java.util.List; -import java.util.function.*; +import java.util.function.Supplier; public class AltarConsumeParticlePacket extends ItemAbsorbParticleEffectPacket { diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/altar/AltarCraftParticlePacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/altar/AltarCraftParticlePacket.java index 1f4aad493..1601d99a3 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/altar/AltarCraftParticlePacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/altar/AltarCraftParticlePacket.java @@ -1,23 +1,23 @@ package com.sammy.malum.common.packets.particle.curiosities.altar; -import com.sammy.malum.common.packets.particle.base.spirit.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; +import com.sammy.malum.common.packets.particle.base.spirit.SpiritBasedParticleEffectPacket; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.Minecraft; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import java.awt.*; import java.util.List; -import java.util.function.*; +import java.util.function.Supplier; public class AltarCraftParticlePacket extends SpiritBasedParticleEffectPacket { diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/blight/BlightMistParticlePacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/blight/BlightMistParticlePacket.java index 7b44478d8..65a4d5cf5 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/blight/BlightMistParticlePacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/blight/BlightMistParticlePacket.java @@ -1,26 +1,26 @@ package com.sammy.malum.common.packets.particle.curiosities.blight; -import com.sammy.malum.common.packets.particle.base.*; -import net.minecraft.client.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.util.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; -import team.lodestar.lodestone.systems.particle.world.*; +import com.sammy.malum.common.packets.particle.base.BlockBasedParticleEffectPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.render_types.LodestoneWorldParticleRenderType; import java.awt.*; -import java.util.function.*; +import java.util.function.Supplier; public class BlightMistParticlePacket extends BlockBasedParticleEffectPacket { public BlightMistParticlePacket(BlockPos pos) { @@ -34,13 +34,13 @@ public void execute(Supplier context) { for (int i = 0; i < 3; i++) { float multiplier = Mth.nextFloat(level.random, 0.4f, 1f); float timeMultiplier = Mth.nextFloat(level.random, 0.9f, 1.4f); - Color color = new Color((int)(31*multiplier), (int)(19*multiplier), (int)(31*multiplier)); + Color color = new Color((int) (31 * multiplier), (int) (19 * multiplier), (int) (31 * multiplier)); boolean spinDirection = level.random.nextBoolean(); WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) .setTransparencyData(GenericParticleData.create(0.15f, 1f, 0).build()) - .setSpinData(SpinParticleData.create(0.2f*(spinDirection ? 1 : -1)).build()) + .setSpinData(SpinParticleData.create(0.2f * (spinDirection ? 1 : -1)).build()) .setScaleData(GenericParticleData.create(0.15f, 0.2f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) - .setLifetime((int) (45*timeMultiplier)) + .setLifetime((int) (45 * timeMultiplier)) .setColorData(ColorParticleData.create(color, color).build()) .enableNoClip() .setRandomOffset(0.1f, 0f) @@ -50,8 +50,8 @@ public void execute(Supplier context) { WorldParticleBuilder.create(LodestoneParticleRegistry.SMOKE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.25f, 0.55f, 0).build()) - .setLifetime((int) (50*timeMultiplier)) - .setSpinData(SpinParticleData.create(0.1f*(spinDirection ? 1 : -1)).build()) + .setLifetime((int) (50 * timeMultiplier)) + .setSpinData(SpinParticleData.create(0.1f * (spinDirection ? 1 : -1)).build()) .setScaleData(GenericParticleData.create(0.35f, 0.4f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(color, color).build()) .setRandomOffset(0.2f, 0) @@ -60,13 +60,13 @@ public void execute(Supplier context) { .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) .repeatSurroundBlock(level, pos, 2, Direction.UP); - color = new Color((int)(80*multiplier), (int)(40*multiplier), (int)(80*multiplier)); + color = new Color((int) (80 * multiplier), (int) (40 * multiplier), (int) (80 * multiplier)); WorldParticleBuilder.create(LodestoneParticleRegistry.SMOKE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.02f, 0.15f, 0).build()) - .setSpinData(SpinParticleData.create(0.1f*(spinDirection ? 1 : -1)).build()) + .setSpinData(SpinParticleData.create(0.1f * (spinDirection ? 1 : -1)).build()) .setScaleData(GenericParticleData.create(0.35f, 0.4f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(color, color).build()) - .setLifetime((int) (50*timeMultiplier)) + .setLifetime((int) (50 * timeMultiplier)) .setRandomOffset(0.2f, 0) .enableNoClip() .setRandomMotion(0.01f, 0.005f) diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/blight/BlightTransformItemParticlePacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/blight/BlightTransformItemParticlePacket.java index bccfd83d8..07099a103 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/blight/BlightTransformItemParticlePacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/blight/BlightTransformItemParticlePacket.java @@ -1,30 +1,29 @@ package com.sammy.malum.common.packets.particle.curiosities.blight; -import com.sammy.malum.common.packets.particle.base.spirit.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.*; -import net.minecraft.network.*; -import net.minecraft.util.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; -import team.lodestar.lodestone.systems.particle.world.*; +import com.sammy.malum.common.packets.particle.base.spirit.SpiritBasedParticleEffectPacket; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.Minecraft; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.render_types.LodestoneWorldParticleRenderType; import java.awt.*; import java.util.List; -import java.util.*; -import java.util.function.*; +import java.util.function.Supplier; public class BlightTransformItemParticlePacket extends SpiritBasedParticleEffectPacket { @@ -45,12 +44,12 @@ public void execute(Supplier context) { for (int i = 0; i < 3; i++) { float multiplier = Mth.nextFloat(rand, 0.4f, 1f); float timeMultiplier = Mth.nextFloat(rand, 0.9f, 1.4f); - Color color = new Color((int)(31*multiplier), (int)(19*multiplier), (int)(31*multiplier)); + Color color = new Color((int) (31 * multiplier), (int) (19 * multiplier), (int) (31 * multiplier)); boolean spinDirection = rand.nextBoolean(); WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) .setTransparencyData(GenericParticleData.create(0.4f, 1f, 0).build()) - .setLifetime((int) (45*timeMultiplier)) - .setSpinData(SpinParticleData.create(0.2f*(spinDirection ? 1 : -1)).build()) + .setLifetime((int) (45 * timeMultiplier)) + .setSpinData(SpinParticleData.create(0.2f * (spinDirection ? 1 : -1)).build()) .setScaleData(GenericParticleData.create(0.15f, 0.2f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(color, color).build()) .enableNoClip() @@ -62,8 +61,8 @@ public void execute(Supplier context) { WorldParticleBuilder.create(LodestoneParticleRegistry.SMOKE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.35f, 0.55f, 0).build()) - .setLifetime((int) (50*timeMultiplier)) - .setSpinData(SpinParticleData.create(0.1f*(spinDirection ? 1 : -1)).build()) + .setLifetime((int) (50 * timeMultiplier)) + .setSpinData(SpinParticleData.create(0.1f * (spinDirection ? 1 : -1)).build()) .setScaleData(GenericParticleData.create(0.35f, 0.4f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(color, color).build()) .setRandomOffset(0.2f, 0) @@ -73,11 +72,11 @@ public void execute(Supplier context) { .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) .repeat(level, posX, posY, posZ, 3); - color = new Color((int)(80*multiplier), (int)(40*multiplier), (int)(80*multiplier)); + color = new Color((int) (80 * multiplier), (int) (40 * multiplier), (int) (80 * multiplier)); WorldParticleBuilder.create(LodestoneParticleRegistry.SMOKE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.1f, 0.15f, 0).build()) - .setLifetime((int) (50*timeMultiplier)) - .setSpinData(SpinParticleData.create(0.1f*(spinDirection ? 1 : -1)).build()) + .setLifetime((int) (50 * timeMultiplier)) + .setSpinData(SpinParticleData.create(0.1f * (spinDirection ? 1 : -1)).build()) .setScaleData(GenericParticleData.create(0.35f, 0.4f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(color, color).build()) .setRandomOffset(0.2f, 0) diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/nitrate/EthericNitrateParticlePacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/nitrate/EthericNitrateParticlePacket.java index 24efb6154..7d97ced2b 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/nitrate/EthericNitrateParticlePacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/nitrate/EthericNitrateParticlePacket.java @@ -1,23 +1,23 @@ package com.sammy.malum.common.packets.particle.curiosities.nitrate; -import com.sammy.malum.common.entity.nitrate.*; -import com.sammy.malum.common.packets.particle.base.*; -import net.minecraft.client.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.common.entity.nitrate.EthericNitrateEntity; +import com.sammy.malum.common.packets.particle.base.PositionBasedParticleEffectPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; -import java.util.*; -import java.util.function.*; +import java.util.function.Supplier; public class EthericNitrateParticlePacket extends PositionBasedParticleEffectPacket { @@ -40,7 +40,7 @@ public void execute(Supplier context) { for (int i = 0; i < 3; i++) { int spinDirection = (rand.nextBoolean() ? 1 : -1); int spinOffset = rand.nextInt(360); - float motionMultiplier = (float) (1+Math.pow(rand.nextFloat(), 2)); + float motionMultiplier = (float) (1 + Math.pow(rand.nextFloat(), 2)); WorldParticleBuilder.create(LodestoneParticleRegistry.TWINKLE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.2f, 0.8f, 0).build()) .setLifetime(20) @@ -52,19 +52,19 @@ public void execute(Supplier context) { .setGravityStrength(1.1f) .addMotion(0, 0.3f + rand.nextFloat() * 0.15f * motionMultiplier, 0) .disableNoClip() - .setRandomMotion(0.2f*motionMultiplier, 0.25f*motionMultiplier) + .setRandomMotion(0.2f * motionMultiplier, 0.25f * motionMultiplier) .setDiscardFunction(SimpleParticleOptions.ParticleDiscardFunctionType.ENDING_CURVE_INVISIBLE) .repeat(level, posX, posY, posZ, 4); } int spinOffset = rand.nextInt(360); for (int i = 0; i < 3; i++) { int spinDirection = (rand.nextBoolean() ? 1 : -1); - float scaleMultiplier = (float) (1+Math.pow(rand.nextFloat(), 2)*0.5f); + float scaleMultiplier = (float) (1 + Math.pow(rand.nextFloat(), 2) * 0.5f); WorldParticleBuilder.create(LodestoneParticleRegistry.SPARKLE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.35f, 0.07f, 0).setEasing(Easing.SINE_IN, Easing.CIRC_IN).build()) .setLifetime(9) .setSpinData(SpinParticleData.create((0.125f + rand.nextFloat() * 0.075f) * spinDirection).setSpinOffset(spinOffset).build()) - .setScaleData(GenericParticleData.create(0.8f*scaleMultiplier, 0.5f, 0).setEasing(Easing.EXPO_OUT, Easing.SINE_IN).build()) + .setScaleData(GenericParticleData.create(0.8f * scaleMultiplier, 0.5f, 0).setEasing(Easing.EXPO_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(EthericNitrateEntity.FIRST_COLOR.brighter(), EthericNitrateEntity.SECOND_COLOR.darker()).build()) .setRandomOffset(0.6f) .enableNoClip() diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/nitrate/VividNitrateBounceParticlePacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/nitrate/VividNitrateBounceParticlePacket.java index 535efe246..459d11b58 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/nitrate/VividNitrateBounceParticlePacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/nitrate/VividNitrateBounceParticlePacket.java @@ -12,13 +12,12 @@ import team.lodestar.lodestone.setup.LodestoneParticleRegistry; import team.lodestar.lodestone.systems.easing.Easing; import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.Random; import java.util.function.Supplier; public class VividNitrateBounceParticlePacket extends ColorBasedParticleEffectPacket { @@ -35,7 +34,7 @@ public void execute(Supplier context) { for (int i = 0; i < 4; i++) { int spinDirection = (rand.nextBoolean() ? 1 : -1); int spinOffset = rand.nextInt(360); - float motionMultiplier = (float) (1+Math.pow(rand.nextFloat(), 2)); + float motionMultiplier = (float) (1 + Math.pow(rand.nextFloat(), 2)); WorldParticleBuilder.create(LodestoneParticleRegistry.TWINKLE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.2f, 0.8f, 0).build()) .setSpinData(SpinParticleData.create(0.9f * spinDirection, 0).setSpinOffset(spinOffset).setCoefficient(1.25f).setEasing(Easing.CUBIC_IN).build()) @@ -47,19 +46,19 @@ public void execute(Supplier context) { .setGravityStrength(1.1f) .addMotion(0, 0.3f + rand.nextFloat() * 0.15f * motionMultiplier, 0) .disableNoClip() - .setRandomMotion(0.2f*motionMultiplier, 0.25f*motionMultiplier) + .setRandomMotion(0.2f * motionMultiplier, 0.25f * motionMultiplier) .setDiscardFunction(SimpleParticleOptions.ParticleDiscardFunctionType.ENDING_CURVE_INVISIBLE) .repeat(level, posX, posY, posZ, 4); } int spinOffset = rand.nextInt(360); for (int i = 0; i < 4; i++) { int spinDirection = (rand.nextBoolean() ? 1 : -1); - float scaleMultiplier = (float) (1+Math.pow(rand.nextFloat(), 2)); + float scaleMultiplier = (float) (1 + Math.pow(rand.nextFloat(), 2)); WorldParticleBuilder.create(LodestoneParticleRegistry.SPARKLE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.4f, 0.08f, 0).setEasing(Easing.SINE_IN, Easing.CIRC_IN_OUT).build()) .setLifetime(15) .setSpinData(SpinParticleData.create((0.125f + rand.nextFloat() * 0.075f) * spinDirection).setSpinOffset(spinOffset).build()) - .setScaleData(GenericParticleData.create(1.4f*scaleMultiplier, 0.6f, 0).setEasing(Easing.EXPO_OUT, Easing.SINE_IN).build()) + .setScaleData(GenericParticleData.create(1.4f * scaleMultiplier, 0.6f, 0).setEasing(Easing.EXPO_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(color.brighter(), color.darker()).build()) .setRandomOffset(0.6f) .enableNoClip() diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/AerialBlockFallRiteEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/AerialBlockFallRiteEffectPacket.java index 0583b8ec2..f8f900204 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/AerialBlockFallRiteEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/AerialBlockFallRiteEffectPacket.java @@ -1,25 +1,24 @@ package com.sammy.malum.common.packets.particle.curiosities.rite; -import com.sammy.malum.common.packets.particle.base.color.*; -import net.minecraft.client.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.common.packets.particle.base.color.ColorBasedBlockParticleEffectPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.*; -import java.util.function.*; +import java.util.function.Supplier; public class AerialBlockFallRiteEffectPacket extends ColorBasedBlockParticleEffectPacket { public AerialBlockFallRiteEffectPacket(Color color, BlockPos pos) { diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/InfernalAccelerationRiteEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/InfernalAccelerationRiteEffectPacket.java index 57ac1eded..9df3e7094 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/InfernalAccelerationRiteEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/InfernalAccelerationRiteEffectPacket.java @@ -1,26 +1,26 @@ package com.sammy.malum.common.packets.particle.curiosities.rite; -import com.sammy.malum.common.packets.particle.base.spirit.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.common.packets.particle.base.spirit.SpiritBasedBlockParticleEffectPacket; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; import java.util.List; -import java.util.*; -import java.util.function.*; +import java.util.function.Supplier; public class InfernalAccelerationRiteEffectPacket extends SpiritBasedBlockParticleEffectPacket { diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/InfernalExtinguishRiteEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/InfernalExtinguishRiteEffectPacket.java index 60e82df62..fc0c7fc26 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/InfernalExtinguishRiteEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/InfernalExtinguishRiteEffectPacket.java @@ -1,21 +1,20 @@ package com.sammy.malum.common.packets.particle.curiosities.rite; -import com.sammy.malum.common.packets.particle.curiosities.rite.generic.*; -import net.minecraft.client.*; -import net.minecraft.core.*; -import net.minecraft.core.particles.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; +import com.sammy.malum.common.packets.particle.curiosities.rite.generic.BlockSparkleParticlePacket; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; import java.awt.*; -import java.util.*; -import java.util.function.*; +import java.util.function.Supplier; -public class InfernalExtinguishRiteEffectPacket extends BlockSparkleParticlePacket -{ +public class InfernalExtinguishRiteEffectPacket extends BlockSparkleParticlePacket { public InfernalExtinguishRiteEffectPacket(Color color, BlockPos pos) { super(color, pos); } @@ -26,7 +25,7 @@ public void execute(Supplier context) { Level level = Minecraft.getInstance().level; var rand = level.random; - for(int i = 0; i < 8; ++i) { + for (int i = 0; i < 8; ++i) { double d0 = pos.getX() + rand.nextFloat(); double d1 = pos.getY() + rand.nextFloat(); double d2 = pos.getZ() + rand.nextFloat(); diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/SacredMistRiteEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/SacredMistRiteEffectPacket.java index 9ff457080..244d3fa71 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/SacredMistRiteEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/SacredMistRiteEffectPacket.java @@ -1,25 +1,26 @@ package com.sammy.malum.common.packets.particle.curiosities.rite; -import com.sammy.malum.common.packets.particle.base.spirit.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.common.packets.particle.base.spirit.SpiritBasedBlockParticleEffectPacket; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; import java.util.List; -import java.util.function.*; +import java.util.function.Supplier; public class SacredMistRiteEffectPacket extends SpiritBasedBlockParticleEffectPacket { public SacredMistRiteEffectPacket(List spirits, BlockPos pos) { diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/SpiritRiteActivationEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/SpiritRiteActivationEffectPacket.java index 3330bd644..d6f57b335 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/SpiritRiteActivationEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/SpiritRiteActivationEffectPacket.java @@ -1,29 +1,31 @@ package com.sammy.malum.common.packets.particle.curiosities.rite; -import com.sammy.malum.common.packets.particle.base.spirit.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.common.packets.particle.base.spirit.SpiritBasedBlockParticleEffectPacket; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; import java.util.List; -import java.util.function.*; +import java.util.function.Supplier; public class SpiritRiteActivationEffectPacket extends SpiritBasedBlockParticleEffectPacket { private int height = 0; + public SpiritRiteActivationEffectPacket(List spirits, BlockPos pos) { super(spirits, pos); } diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/BlockSparkleParticlePacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/BlockSparkleParticlePacket.java index 0b6728031..f084c9a6f 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/BlockSparkleParticlePacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/BlockSparkleParticlePacket.java @@ -1,25 +1,25 @@ package com.sammy.malum.common.packets.particle.curiosities.rite.generic; -import com.sammy.malum.common.packets.particle.base.color.*; -import net.minecraft.client.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.common.packets.particle.base.color.ColorBasedBlockParticleEffectPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.*; -import java.util.function.*; +import java.util.function.Supplier; public class BlockSparkleParticlePacket extends ColorBasedBlockParticleEffectPacket { diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/MajorEntityEffectParticlePacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/MajorEntityEffectParticlePacket.java index c3110fd92..d9662b254 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/MajorEntityEffectParticlePacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/MajorEntityEffectParticlePacket.java @@ -11,13 +11,12 @@ import team.lodestar.lodestone.helpers.ColorHelper; import team.lodestar.lodestone.setup.LodestoneParticleRegistry; import team.lodestar.lodestone.systems.easing.Easing; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.Random; import java.util.function.Supplier; public class MajorEntityEffectParticlePacket extends ColorBasedParticleEffectPacket { diff --git a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/TotemPoleActivationEffectPacket.java b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/TotemPoleActivationEffectPacket.java index d7e105e9c..9c48aff66 100644 --- a/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/TotemPoleActivationEffectPacket.java +++ b/src/main/java/com/sammy/malum/common/packets/particle/curiosities/rite/generic/TotemPoleActivationEffectPacket.java @@ -1,23 +1,25 @@ package com.sammy.malum.common.packets.particle.curiosities.rite.generic; -import com.sammy.malum.common.packets.particle.base.color.*; -import net.minecraft.client.*; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.common.packets.particle.base.color.ColorBasedBlockParticleEffectPacket; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.NetworkEvent; +import net.minecraftforge.network.simple.SimpleChannel; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.function.*; +import java.util.function.Supplier; public class TotemPoleActivationEffectPacket extends ColorBasedBlockParticleEffectPacket { diff --git a/src/main/java/com/sammy/malum/common/recipe/FavorOfTheVoidRecipe.java b/src/main/java/com/sammy/malum/common/recipe/FavorOfTheVoidRecipe.java index 94b6eb948..7c46e03d1 100644 --- a/src/main/java/com/sammy/malum/common/recipe/FavorOfTheVoidRecipe.java +++ b/src/main/java/com/sammy/malum/common/recipe/FavorOfTheVoidRecipe.java @@ -1,21 +1,19 @@ package com.sammy.malum.common.recipe; -import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import com.sammy.malum.core.systems.recipe.SpiritWithCount; import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import com.sammy.malum.registry.common.recipe.RecipeTypeRegistry; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.*; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.Level; import net.minecraftforge.common.crafting.CraftingHelper; import team.lodestar.lodestone.systems.recipe.ILodestoneRecipe; -import team.lodestar.lodestone.systems.recipe.IngredientWithCount; import javax.annotation.Nullable; -import java.util.ArrayList; import java.util.List; import java.util.function.Predicate; diff --git a/src/main/java/com/sammy/malum/common/recipe/SpiritFocusingRecipe.java b/src/main/java/com/sammy/malum/common/recipe/SpiritFocusingRecipe.java index ca11fe396..ad6a50a67 100644 --- a/src/main/java/com/sammy/malum/common/recipe/SpiritFocusingRecipe.java +++ b/src/main/java/com/sammy/malum/common/recipe/SpiritFocusingRecipe.java @@ -2,9 +2,9 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import com.sammy.malum.core.systems.recipe.SpiritWithCount; import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import com.sammy.malum.registry.common.recipe.RecipeTypeRegistry; -import com.sammy.malum.core.systems.recipe.SpiritWithCount; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/com/sammy/malum/common/recipe/SpiritInfusionRecipe.java b/src/main/java/com/sammy/malum/common/recipe/SpiritInfusionRecipe.java index ec1259e47..327e2201a 100644 --- a/src/main/java/com/sammy/malum/common/recipe/SpiritInfusionRecipe.java +++ b/src/main/java/com/sammy/malum/common/recipe/SpiritInfusionRecipe.java @@ -2,9 +2,9 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import com.sammy.malum.core.systems.recipe.SpiritWithCount; import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import com.sammy.malum.registry.common.recipe.RecipeTypeRegistry; -import com.sammy.malum.core.systems.recipe.SpiritWithCount; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/com/sammy/malum/common/recipe/SpiritRepairRecipe.java b/src/main/java/com/sammy/malum/common/recipe/SpiritRepairRecipe.java index 54f1990be..ef7b32c4d 100644 --- a/src/main/java/com/sammy/malum/common/recipe/SpiritRepairRecipe.java +++ b/src/main/java/com/sammy/malum/common/recipe/SpiritRepairRecipe.java @@ -3,9 +3,9 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.sammy.malum.core.systems.recipe.SpiritWithCount; import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import com.sammy.malum.registry.common.recipe.RecipeTypeRegistry; -import com.sammy.malum.core.systems.recipe.SpiritWithCount; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; diff --git a/src/main/java/com/sammy/malum/common/recipe/vanilla/INodeSmeltingRecipe.java b/src/main/java/com/sammy/malum/common/recipe/vanilla/INodeSmeltingRecipe.java index 6f3f1cc36..96b1bb039 100644 --- a/src/main/java/com/sammy/malum/common/recipe/vanilla/INodeSmeltingRecipe.java +++ b/src/main/java/com/sammy/malum/common/recipe/vanilla/INodeSmeltingRecipe.java @@ -3,5 +3,5 @@ import team.lodestar.lodestone.systems.recipe.IngredientWithCount; public interface INodeSmeltingRecipe { - public IngredientWithCount getOutput(); + IngredientWithCount getOutput(); } diff --git a/src/main/java/com/sammy/malum/common/recipe/vanilla/MetalNodeBlastingRecipe.java b/src/main/java/com/sammy/malum/common/recipe/vanilla/MetalNodeBlastingRecipe.java index f141a44cb..11f1cfa89 100644 --- a/src/main/java/com/sammy/malum/common/recipe/vanilla/MetalNodeBlastingRecipe.java +++ b/src/main/java/com/sammy/malum/common/recipe/vanilla/MetalNodeBlastingRecipe.java @@ -2,7 +2,6 @@ import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.Container; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.BlastingRecipe; import net.minecraft.world.item.crafting.CookingBookCategory; diff --git a/src/main/java/com/sammy/malum/common/recipe/vanilla/MetalNodeSmeltingRecipe.java b/src/main/java/com/sammy/malum/common/recipe/vanilla/MetalNodeSmeltingRecipe.java index 9a183af48..8aa21a0d2 100644 --- a/src/main/java/com/sammy/malum/common/recipe/vanilla/MetalNodeSmeltingRecipe.java +++ b/src/main/java/com/sammy/malum/common/recipe/vanilla/MetalNodeSmeltingRecipe.java @@ -2,7 +2,6 @@ import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.Container; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CookingBookCategory; import net.minecraft.world.item.crafting.Ingredient; @@ -21,8 +20,7 @@ public MetalNodeSmeltingRecipe(ResourceLocation pId, String pGroup, Ingredient p } @Override - public boolean isSpecial() - { + public boolean isSpecial() { return false; } diff --git a/src/main/java/com/sammy/malum/common/recipe/vanilla/NodeCookingSerializer.java b/src/main/java/com/sammy/malum/common/recipe/vanilla/NodeCookingSerializer.java index 9568db245..25658a68d 100644 --- a/src/main/java/com/sammy/malum/common/recipe/vanilla/NodeCookingSerializer.java +++ b/src/main/java/com/sammy/malum/common/recipe/vanilla/NodeCookingSerializer.java @@ -11,43 +11,43 @@ import team.lodestar.lodestone.systems.recipe.IngredientWithCount; public class NodeCookingSerializer implements RecipeSerializer { - public final int defaultCookingTime; - public final NodeBaker factory; - - public NodeCookingSerializer(NodeBaker pFactory, int pDefaultCookingTime) { - this.defaultCookingTime = pDefaultCookingTime; - this.factory = pFactory; - } - - public T fromJson(ResourceLocation pRecipeId, JsonObject pJson) { - String s = GsonHelper.getAsString(pJson, "group", ""); - JsonElement jsonelement = (GsonHelper.isArrayNode(pJson, "ingredient") ? GsonHelper.getAsJsonArray(pJson, "ingredient") : GsonHelper.getAsJsonObject(pJson, "ingredient")); - Ingredient ingredient = Ingredient.fromJson(jsonelement); - IngredientWithCount result = IngredientWithCount.deserialize(pJson.getAsJsonObject("result")); - - float f = GsonHelper.getAsFloat(pJson, "experience", 0.0F); - int i = GsonHelper.getAsInt(pJson, "cookingtime", this.defaultCookingTime); - return this.factory.create(pRecipeId, s, ingredient, result, f, i); - } - - public T fromNetwork(ResourceLocation pRecipeId, FriendlyByteBuf pBuffer) { - String s = pBuffer.readUtf(); - Ingredient ingredient = Ingredient.fromNetwork(pBuffer); - IngredientWithCount result = IngredientWithCount.read(pBuffer); - float f = pBuffer.readFloat(); - int i = pBuffer.readVarInt(); - return this.factory.create(pRecipeId, s, ingredient, result, f, i); - } - - public void toNetwork(FriendlyByteBuf pBuffer, T pRecipe) { - pBuffer.writeUtf(pRecipe.getGroup()); - pRecipe.getIngredients().get(0).toNetwork(pBuffer); - ((INodeSmeltingRecipe)pRecipe).getOutput().write(pBuffer); - pBuffer.writeFloat(pRecipe.getExperience()); - pBuffer.writeVarInt(pRecipe.getCookingTime()); - } - - public interface NodeBaker { - T create(ResourceLocation pId, String pGroup, Ingredient pIngredient, IngredientWithCount pResult, float pExperience, int pCookingTime); - } + public final int defaultCookingTime; + public final NodeBaker factory; + + public NodeCookingSerializer(NodeBaker pFactory, int pDefaultCookingTime) { + this.defaultCookingTime = pDefaultCookingTime; + this.factory = pFactory; + } + + public T fromJson(ResourceLocation pRecipeId, JsonObject pJson) { + String s = GsonHelper.getAsString(pJson, "group", ""); + JsonElement jsonelement = (GsonHelper.isArrayNode(pJson, "ingredient") ? GsonHelper.getAsJsonArray(pJson, "ingredient") : GsonHelper.getAsJsonObject(pJson, "ingredient")); + Ingredient ingredient = Ingredient.fromJson(jsonelement); + IngredientWithCount result = IngredientWithCount.deserialize(pJson.getAsJsonObject("result")); + + float f = GsonHelper.getAsFloat(pJson, "experience", 0.0F); + int i = GsonHelper.getAsInt(pJson, "cookingtime", this.defaultCookingTime); + return this.factory.create(pRecipeId, s, ingredient, result, f, i); + } + + public T fromNetwork(ResourceLocation pRecipeId, FriendlyByteBuf pBuffer) { + String s = pBuffer.readUtf(); + Ingredient ingredient = Ingredient.fromNetwork(pBuffer); + IngredientWithCount result = IngredientWithCount.read(pBuffer); + float f = pBuffer.readFloat(); + int i = pBuffer.readVarInt(); + return this.factory.create(pRecipeId, s, ingredient, result, f, i); + } + + public void toNetwork(FriendlyByteBuf pBuffer, T pRecipe) { + pBuffer.writeUtf(pRecipe.getGroup()); + pRecipe.getIngredients().get(0).toNetwork(pBuffer); + ((INodeSmeltingRecipe) pRecipe).getOutput().write(pBuffer); + pBuffer.writeFloat(pRecipe.getExperience()); + pBuffer.writeVarInt(pRecipe.getCookingTime()); + } + + public interface NodeBaker { + T create(ResourceLocation pId, String pGroup, Ingredient pIngredient, IngredientWithCount pResult, float pExperience, int pCookingTime); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/sound/BlightedSoundType.java b/src/main/java/com/sammy/malum/common/sound/BlightedSoundType.java index 19c7cca6b..318bf5593 100644 --- a/src/main/java/com/sammy/malum/common/sound/BlightedSoundType.java +++ b/src/main/java/com/sammy/malum/common/sound/BlightedSoundType.java @@ -28,7 +28,7 @@ public void onPlayBreakSound(Level level, BlockPos pos) { @Override public void onPlayStepSound(Level level, BlockPos pos, BlockState state, SoundSource category) { - level.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundRegistry.MINOR_BLIGHT_MOTIF.get(), category, getVolume() * 0.15F, getPitch()* 1.6F); + level.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundRegistry.MINOR_BLIGHT_MOTIF.get(), category, getVolume() * 0.15F, getPitch() * 1.6F); } @Override @@ -39,7 +39,7 @@ public void onPlayPlaceSound(Level level, BlockPos pos, Player player) { @Override @OnlyIn(value = Dist.CLIENT) public void onPlayHitSound(BlockPos pos) { - Minecraft.getInstance().getSoundManager().play(new SimpleSoundInstance(SoundRegistry.MINOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, (getVolume() + 1.0F) / 8.0F, getPitch() * 2F, MalumMod.RANDOM,pos)); + Minecraft.getInstance().getSoundManager().play(new SimpleSoundInstance(SoundRegistry.MINOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, (getVolume() + 1.0F) / 8.0F, getPitch() * 2F, MalumMod.RANDOM, pos)); } @Override diff --git a/src/main/java/com/sammy/malum/common/sound/QuartzClusterSoundType.java b/src/main/java/com/sammy/malum/common/sound/QuartzClusterSoundType.java index 4c2bae404..2f064ec17 100644 --- a/src/main/java/com/sammy/malum/common/sound/QuartzClusterSoundType.java +++ b/src/main/java/com/sammy/malum/common/sound/QuartzClusterSoundType.java @@ -28,7 +28,7 @@ public void onPlayBreakSound(Level level, BlockPos pos) { @Override public void onPlayStepSound(Level level, BlockPos pos, BlockState state, SoundSource category) { - level.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.AMETHYST_CLUSTER_STEP, category, getVolume() * 0.65F, getPitch()* 1.3F); + level.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.AMETHYST_CLUSTER_STEP, category, getVolume() * 0.65F, getPitch() * 1.3F); } @Override diff --git a/src/main/java/com/sammy/malum/common/spiritrite/AerialRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/AerialRiteType.java index d588d8767..90ab1fb4d 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/AerialRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/AerialRiteType.java @@ -1,9 +1,9 @@ package com.sammy.malum.common.spiritrite; -import com.sammy.malum.registry.common.MobEffectRegistry; import com.sammy.malum.core.systems.rites.AuraRiteEffect; import com.sammy.malum.core.systems.rites.MalumRiteEffect; import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.registry.common.MobEffectRegistry; import net.minecraft.world.entity.LivingEntity; import static com.sammy.malum.registry.common.SpiritTypeRegistry.AERIAL_SPIRIT; diff --git a/src/main/java/com/sammy/malum/common/spiritrite/AqueousRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/AqueousRiteType.java index 54d82a94a..c2e28106c 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/AqueousRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/AqueousRiteType.java @@ -1,9 +1,9 @@ package com.sammy.malum.common.spiritrite; -import com.sammy.malum.registry.common.MobEffectRegistry; import com.sammy.malum.core.systems.rites.AuraRiteEffect; import com.sammy.malum.core.systems.rites.MalumRiteEffect; import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.registry.common.MobEffectRegistry; import net.minecraft.world.entity.LivingEntity; import static com.sammy.malum.registry.common.SpiritTypeRegistry.AQUEOUS_SPIRIT; diff --git a/src/main/java/com/sammy/malum/common/spiritrite/ArcaneRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/ArcaneRiteType.java index 2901823b9..cdcc5564a 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/ArcaneRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/ArcaneRiteType.java @@ -1,11 +1,11 @@ package com.sammy.malum.common.spiritrite; import com.sammy.malum.common.block.blight.BlightedSoilBlock; -import com.sammy.malum.common.block.storage.IMalumSpecialItemAccessPoint; import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; -import com.sammy.malum.common.packets.particle.curiosities.rite.generic.BlockSparkleParticlePacket; +import com.sammy.malum.common.block.storage.IMalumSpecialItemAccessPoint; import com.sammy.malum.common.packets.particle.curiosities.blight.BlightMistParticlePacket; import com.sammy.malum.common.packets.particle.curiosities.blight.BlightTransformItemParticlePacket; +import com.sammy.malum.common.packets.particle.curiosities.rite.generic.BlockSparkleParticlePacket; import com.sammy.malum.common.recipe.SpiritTransmutationRecipe; import com.sammy.malum.common.worldevent.TotemCreatedBlightEvent; import com.sammy.malum.core.systems.rites.MalumRiteEffect; @@ -28,8 +28,8 @@ import java.util.List; import java.util.Set; -import static com.sammy.malum.registry.common.SpiritTypeRegistry.ARCANE_SPIRIT; import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; +import static com.sammy.malum.registry.common.SpiritTypeRegistry.ARCANE_SPIRIT; public class ArcaneRiteType extends MalumRiteType { public ArcaneRiteType() { @@ -58,7 +58,7 @@ public MalumRiteEffect getCorruptedEffect() { @Override public int getRiteEffectRadius() { - return (BASE_RADIUS * 2)+1; + return (BASE_RADIUS * 2) + 1; } @Override diff --git a/src/main/java/com/sammy/malum/common/spiritrite/EarthenRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/EarthenRiteType.java index d9fe8bbc0..d5f937e75 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/EarthenRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/EarthenRiteType.java @@ -1,9 +1,9 @@ package com.sammy.malum.common.spiritrite; -import com.sammy.malum.registry.common.MobEffectRegistry; import com.sammy.malum.core.systems.rites.AuraRiteEffect; import com.sammy.malum.core.systems.rites.MalumRiteEffect; import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.registry.common.MobEffectRegistry; import net.minecraft.world.entity.LivingEntity; import static com.sammy.malum.registry.common.SpiritTypeRegistry.ARCANE_SPIRIT; diff --git a/src/main/java/com/sammy/malum/common/spiritrite/InfernalRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/InfernalRiteType.java index 75ae3846b..e4553f952 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/InfernalRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/InfernalRiteType.java @@ -1,14 +1,14 @@ package com.sammy.malum.common.spiritrite; import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; -import com.sammy.malum.common.packets.particle.curiosities.rite.generic.BlockSparkleParticlePacket; import com.sammy.malum.common.packets.particle.curiosities.rite.InfernalExtinguishRiteEffectPacket; +import com.sammy.malum.common.packets.particle.curiosities.rite.generic.BlockSparkleParticlePacket; import com.sammy.malum.common.packets.particle.curiosities.rite.generic.MajorEntityEffectParticlePacket; -import com.sammy.malum.registry.common.block.BlockTagRegistry; -import com.sammy.malum.registry.common.MobEffectRegistry; import com.sammy.malum.core.systems.rites.AuraRiteEffect; import com.sammy.malum.core.systems.rites.MalumRiteEffect; import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.registry.common.MobEffectRegistry; +import com.sammy.malum.registry.common.block.BlockTagRegistry; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.effect.MobEffectInstance; @@ -19,9 +19,9 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.network.PacketDistributor; +import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; import static com.sammy.malum.registry.common.SpiritTypeRegistry.ARCANE_SPIRIT; import static com.sammy.malum.registry.common.SpiritTypeRegistry.INFERNAL_SPIRIT; -import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; public class InfernalRiteType extends MalumRiteType { public InfernalRiteType() { diff --git a/src/main/java/com/sammy/malum/common/spiritrite/SacredRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/SacredRiteType.java index 0761ef030..2f3635f2e 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/SacredRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/SacredRiteType.java @@ -1,21 +1,28 @@ package com.sammy.malum.common.spiritrite; -import com.sammy.malum.common.block.curiosities.totem.*; -import com.sammy.malum.core.systems.rites.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.*; -import net.minecraft.core.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.ai.goal.*; -import net.minecraft.world.entity.animal.*; -import net.minecraft.world.entity.monster.*; -import net.minecraft.world.level.block.*; +import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; +import com.sammy.malum.core.systems.rites.EntityAffectingRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import net.minecraft.Util; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.goal.EatBlockGoal; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.animal.Bee; +import net.minecraft.world.entity.animal.Chicken; +import net.minecraft.world.entity.animal.Sheep; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.level.block.Blocks; -import java.util.*; +import java.util.HashMap; +import java.util.Map; -import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; -import static net.minecraft.world.entity.ai.goal.EatBlockGoal.*; +import static com.sammy.malum.registry.common.SpiritTypeRegistry.ARCANE_SPIRIT; +import static com.sammy.malum.registry.common.SpiritTypeRegistry.SACRED_SPIRIT; +import static net.minecraft.world.entity.ai.goal.EatBlockGoal.IS_TALL_GRASS; public class SacredRiteType extends MalumRiteType { diff --git a/src/main/java/com/sammy/malum/common/spiritrite/WickedRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/WickedRiteType.java index 7d2745f65..e7c519c3e 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/WickedRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/WickedRiteType.java @@ -1,21 +1,26 @@ package com.sammy.malum.common.spiritrite; -import com.sammy.malum.common.block.curiosities.totem.*; +import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; +import com.sammy.malum.core.systems.rites.EntityAffectingRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.registry.common.DamageSourceRegistry; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; -import com.sammy.malum.core.systems.rites.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.monster.*; -import net.minecraft.world.entity.player.*; - -import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; +import static com.sammy.malum.registry.common.SpiritTypeRegistry.ARCANE_SPIRIT; +import static com.sammy.malum.registry.common.SpiritTypeRegistry.WICKED_SPIRIT; public class WickedRiteType extends MalumRiteType { public WickedRiteType() { super("wicked_rite", ARCANE_SPIRIT, WICKED_SPIRIT, WICKED_SPIRIT); } + @Override public MalumRiteEffect getNaturalRiteEffect() { return new EntityAffectingRiteEffect() { diff --git a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchAerialRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchAerialRiteType.java index 4b9ba38a2..c3332dcb2 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchAerialRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchAerialRiteType.java @@ -1,29 +1,38 @@ package com.sammy.malum.common.spiritrite.greater; -import com.sammy.malum.common.block.curiosities.totem.*; -import com.sammy.malum.common.packets.particle.curiosities.rite.*; +import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; +import com.sammy.malum.common.packets.particle.curiosities.rite.AerialBlockFallRiteEffectPacket; +import com.sammy.malum.core.systems.rites.BlockAffectingRiteEffect; +import com.sammy.malum.core.systems.rites.EntityAffectingRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.registry.common.block.BlockTagRegistry; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundSource; +import net.minecraft.stats.ServerStatsCounter; +import net.minecraft.stats.Stat; +import net.minecraft.stats.Stats; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.network.PacketDistributor; -import com.sammy.malum.core.systems.rites.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.block.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.core.*; -import net.minecraft.resources.*; -import net.minecraft.server.level.*; -import net.minecraft.sounds.*; -import net.minecraft.stats.*; -import net.minecraft.tags.*; -import net.minecraft.world.entity.item.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.enchantment.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; -import net.minecraftforge.network.*; +import java.util.List; -import java.util.*; - -import static com.sammy.malum.registry.common.PacketRegistry.*; +import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; public class EldritchAerialRiteType extends MalumRiteType { @@ -64,7 +73,7 @@ public void riteEffect(TotemBaseBlockEntity totemBase) { ServerStatsCounter stats = p.getStats(); Stat sleepStat = Stats.CUSTOM.get(Stats.TIME_SINCE_REST); int value = stats.getValue(sleepStat); - stats.setValue(p, sleepStat, Math.max(0, value-500)); + stats.setValue(p, sleepStat, Math.max(0, value - 500)); ParticleEffectTypeRegistry.HEXING_SMOKE.createEntityEffect(p, new ColorEffectData(AERIAL_SPIRIT)); }); } diff --git a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchAqueousRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchAqueousRiteType.java index 261a525d9..0d7692261 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchAqueousRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchAqueousRiteType.java @@ -1,18 +1,23 @@ package com.sammy.malum.common.spiritrite.greater; -import com.sammy.malum.common.block.curiosities.totem.*; +import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; +import com.sammy.malum.core.systems.rites.BlockAffectingRiteEffect; +import com.sammy.malum.core.systems.rites.EntityAffectingRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import com.sammy.malum.visual_effects.networked.data.PositionEffectData; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.monster.Drowned; +import net.minecraft.world.entity.monster.Zombie; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockState; -import com.sammy.malum.core.systems.rites.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.core.*; -import net.minecraft.server.level.*; -import net.minecraft.world.entity.monster.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; - -import java.util.*; +import java.util.Set; import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; @@ -28,7 +33,7 @@ public MalumRiteEffect getNaturalRiteEffect() { @Override public void riteEffect(TotemBaseBlockEntity totemBase) { Level level = totemBase.getLevel(); - getNearbyBlocks(totemBase, PointedDripstoneBlock.class, getRiteEffectRadius()*4).forEach(p -> { + getNearbyBlocks(totemBase, PointedDripstoneBlock.class, getRiteEffectRadius() * 4).forEach(p -> { if (level.random.nextFloat() < 0.1f) { for (int i = 0; i < 4 + level.random.nextInt(2); i++) { level.getBlockState(p).randomTick((ServerLevel) level, p, level.random); diff --git a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchEarthenRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchEarthenRiteType.java index 7b10adec9..9c2d90a80 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchEarthenRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchEarthenRiteType.java @@ -17,8 +17,8 @@ import java.util.Set; -import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; +import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; public class EldritchEarthenRiteType extends MalumRiteType { public EldritchEarthenRiteType() { diff --git a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchInfernalRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchInfernalRiteType.java index 66ec28ec6..bef345801 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchInfernalRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchInfernalRiteType.java @@ -1,21 +1,26 @@ package com.sammy.malum.common.spiritrite.greater; -import com.sammy.malum.common.block.curiosities.totem.*; -import com.sammy.malum.common.packets.particle.curiosities.rite.generic.*; -import com.sammy.malum.core.systems.rites.*; -import net.minecraft.core.*; -import net.minecraft.world.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.entity.*; -import net.minecraft.world.level.block.state.*; -import net.minecraftforge.network.*; +import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; +import com.sammy.malum.common.packets.particle.curiosities.rite.generic.BlockSparkleParticlePacket; +import com.sammy.malum.core.systems.rites.BlockAffectingRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import net.minecraft.core.BlockPos; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.item.crafting.SmeltingRecipe; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.AbstractFurnaceBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.network.PacketDistributor; -import java.util.*; +import java.util.Optional; -import static com.sammy.malum.registry.common.PacketRegistry.*; +import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; public class EldritchInfernalRiteType extends MalumRiteType { @@ -58,8 +63,8 @@ public void riteEffect(TotemBaseBlockEntity totemBase) { getNearbyBlocks(totemBase, AbstractFurnaceBlock.class).map(b -> level.getBlockEntity(b)).filter(e -> e instanceof AbstractFurnaceBlockEntity).map(e -> (AbstractFurnaceBlockEntity) e).forEach(f -> { if (f.isLit()) { BlockPos blockPos = f.getBlockPos(); - // MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(blockPos)), new InfernalAccelerationRiteEffectPacket(INFERNAL_SPIRIT.getPrimaryColor(), blockPos)); - f.cookingProgress = Math.min(f.cookingProgress + 5, f.cookingTotalTime-1); + // MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(blockPos)), new InfernalAccelerationRiteEffectPacket(INFERNAL_SPIRIT.getPrimaryColor(), blockPos)); + f.cookingProgress = Math.min(f.cookingProgress + 5, f.cookingTotalTime - 1); } }); } @@ -71,7 +76,7 @@ public int getRiteEffectTickRate() { @Override public int getRiteEffectRadius() { - return BASE_RADIUS*2; + return BASE_RADIUS * 2; } }; } diff --git a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchSacredRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchSacredRiteType.java index ab14016c6..9c0294009 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchSacredRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchSacredRiteType.java @@ -1,20 +1,23 @@ package com.sammy.malum.common.spiritrite.greater; -import com.sammy.malum.common.block.curiosities.totem.*; -import com.sammy.malum.common.packets.particle.curiosities.rite.generic.*; -import com.sammy.malum.core.systems.rites.*; -import net.minecraft.core.*; -import net.minecraft.server.level.*; -import net.minecraft.world.entity.animal.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; -import net.minecraftforge.network.*; +import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; +import com.sammy.malum.common.packets.particle.curiosities.rite.generic.MajorEntityEffectParticlePacket; +import com.sammy.malum.core.systems.rites.BlockAffectingRiteEffect; +import com.sammy.malum.core.systems.rites.EntityAffectingRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteEffect; +import com.sammy.malum.core.systems.rites.MalumRiteType; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.network.PacketDistributor; -import java.util.*; -import java.util.stream.*; +import java.util.List; +import java.util.stream.Collectors; -import static com.sammy.malum.registry.common.PacketRegistry.*; +import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; public class EldritchSacredRiteType extends MalumRiteType { @@ -47,7 +50,7 @@ public void riteEffect(TotemBaseBlockEntity totemBase) { state.randomTick((ServerLevel) level, p, level.random); } BlockPos particlePos = state.canOcclude() ? p : p.below(); - // MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(pos)), new SacredMistRiteEffectPacket(SACRED_SPIRIT, particlePos)); + // MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(pos)), new SacredMistRiteEffectPacket(SACRED_SPIRIT, particlePos)); } }); } diff --git a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchWickedRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchWickedRiteType.java index d9b454799..7d84aec67 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchWickedRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchWickedRiteType.java @@ -29,7 +29,7 @@ public MalumRiteEffect getNaturalRiteEffect() { public void riteEffect(TotemBaseBlockEntity totemBase) { getNearbyEntities(totemBase, LivingEntity.class, e -> !(e instanceof Player)).forEach(e -> { if (e.getHealth() <= 2.5f && !e.isInvulnerableTo(DamageSourceRegistry.VOODOO)) { - MALUM_CHANNEL.send(PacketDistributor.TRACKING_ENTITY.with(() -> e), new MajorEntityEffectParticlePacket(getEffectSpirit().getPrimaryColor(), e.getX(), e.getY()+ e.getBbHeight() / 2f, e.getZ())); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_ENTITY.with(() -> e), new MajorEntityEffectParticlePacket(getEffectSpirit().getPrimaryColor(), e.getX(), e.getY() + e.getBbHeight() / 2f, e.getZ())); e.hurt(DamageSourceRegistry.VOODOO, 10f); } }); diff --git a/src/main/java/com/sammy/malum/common/worldevent/ActiveBlightEvent.java b/src/main/java/com/sammy/malum/common/worldevent/ActiveBlightEvent.java index 8b4adfe65..0498c8ec2 100644 --- a/src/main/java/com/sammy/malum/common/worldevent/ActiveBlightEvent.java +++ b/src/main/java/com/sammy/malum/common/worldevent/ActiveBlightEvent.java @@ -1,17 +1,19 @@ package com.sammy.malum.common.worldevent; -import com.sammy.malum.common.block.blight.*; -import com.sammy.malum.common.worldgen.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.core.*; -import net.minecraft.server.level.*; -import net.minecraft.sounds.*; -import net.minecraft.world.level.*; -import team.lodestar.lodestone.systems.worldevent.*; -import team.lodestar.lodestone.systems.worldgen.*; +import com.sammy.malum.common.block.blight.BlightedSoilBlock; +import com.sammy.malum.common.worldgen.SoulwoodTreeFeature; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.registry.common.SoundRegistry; +import com.sammy.malum.registry.common.WorldEventTypes; +import com.sammy.malum.visual_effects.networked.data.PositionEffectData; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.level.Level; +import team.lodestar.lodestone.systems.worldevent.WorldEventInstance; +import team.lodestar.lodestone.systems.worldgen.LodestoneBlockFiller; -import java.util.*; +import java.util.Map; public class ActiveBlightEvent extends WorldEventInstance { public int blightTimer, intensity, rate, times; @@ -44,7 +46,7 @@ public void tick(Level level) { blightTimer = rate; times--; createBlight((ServerLevel) level); - intensity+=2; + intensity += 2; } else { blightTimer--; } diff --git a/src/main/java/com/sammy/malum/common/worldevent/TotemCreatedBlightEvent.java b/src/main/java/com/sammy/malum/common/worldevent/TotemCreatedBlightEvent.java index 95737d192..9d32d4e85 100644 --- a/src/main/java/com/sammy/malum/common/worldevent/TotemCreatedBlightEvent.java +++ b/src/main/java/com/sammy/malum/common/worldevent/TotemCreatedBlightEvent.java @@ -2,8 +2,8 @@ import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; import com.sammy.malum.common.block.curiosities.totem.TotemPoleBlockEntity; -import com.sammy.malum.registry.common.SoundRegistry; import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.registry.common.SoundRegistry; import net.minecraft.core.BlockPos; import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.Level; diff --git a/src/main/java/com/sammy/malum/common/worldgen/RareEarthsGeode.java b/src/main/java/com/sammy/malum/common/worldgen/RareEarthsGeode.java index 3d13cc2b1..9446e41bb 100644 --- a/src/main/java/com/sammy/malum/common/worldgen/RareEarthsGeode.java +++ b/src/main/java/com/sammy/malum/common/worldgen/RareEarthsGeode.java @@ -23,11 +23,11 @@ import java.util.ArrayList; import java.util.List; -import java.util.Random; import java.util.function.Predicate; public class RareEarthsGeode extends Feature { private static final Direction[] DIRECTIONS = Direction.values(); + public RareEarthsGeode(Codec config) { super(config); } @@ -45,7 +45,7 @@ public boolean place(FeaturePlaceContext context) { WorldgenRandom worldgenrandom = new WorldgenRandom(new LegacyRandomSource(worldgenlevel.getSeed())); NormalNoise normalnoise = NormalNoise.create(worldgenrandom, -4, 1.0D); List list1 = Lists.newLinkedList(); - double d0 = (double)k / (double)geodeconfiguration.outerWallDistance.getMaxValue(); + double d0 = (double) k / (double) geodeconfiguration.outerWallDistance.getMaxValue(); GeodeLayerSettings geodelayersettings = geodeconfiguration.geodeLayerSettings; GeodeBlockSettings geodeblocksettings = geodeconfiguration.geodeBlockSettings; GeodeCrackSettings geodecracksettings = geodeconfiguration.geodeCrackSettings; @@ -54,10 +54,10 @@ public boolean place(FeaturePlaceContext context) { double d3 = 1.0D / Math.sqrt(geodelayersettings.middleLayer + d0); double d4 = 1.0D / Math.sqrt(geodelayersettings.outerLayer + d0); double d5 = 1.0D / Math.sqrt(geodecracksettings.baseCrackSize + random.nextDouble() / 2.0D + (k > 3 ? d0 : 0.0D)); - boolean flag = (double)random.nextFloat() < geodecracksettings.generateCrackChance; + boolean flag = (double) random.nextFloat() < geodecracksettings.generateCrackChance; int l = 0; - for(int i1 = 0; i1 < k; ++i1) { + for (int i1 = 0; i1 < k; ++i1) { int j1 = geodeconfiguration.outerWallDistance.sample(random); int k1 = geodeconfiguration.outerWallDistance.sample(random); int l1 = geodeconfiguration.outerWallDistance.sample(random); @@ -99,24 +99,24 @@ public boolean place(FeaturePlaceContext context) { List potentialRareEarthPositions = new ArrayList<>(); Predicate predicate = isReplaceable(geodeconfiguration.geodeBlockSettings.cannotReplace); - for(BlockPos blockpos3 : BlockPos.betweenClosed(blockpos.offset(i, i, i), blockpos.offset(j, j, j))) { + for (BlockPos blockpos3 : BlockPos.betweenClosed(blockpos.offset(i, i, i), blockpos.offset(j, j, j))) { double d8 = normalnoise.getValue(blockpos3.getX(), blockpos3.getY(), blockpos3.getZ()) * geodeconfiguration.noiseMultiplier; double d6 = 0.0D; double d7 = 0.0D; - for(Pair pair : list) { - d6 += Mth.fastInvSqrt(blockpos3.distSqr(pair.getFirst()) + (double)pair.getSecond().intValue()) + d8; + for (Pair pair : list) { + d6 += Mth.fastInvSqrt(blockpos3.distSqr(pair.getFirst()) + (double) pair.getSecond().intValue()) + d8; } - for(BlockPos blockpos6 : list1) { - d7 += Mth.fastInvSqrt(blockpos3.distSqr(blockpos6) + (double)geodecracksettings.crackPointOffset) + d8; + for (BlockPos blockpos6 : list1) { + d7 += Mth.fastInvSqrt(blockpos3.distSqr(blockpos6) + (double) geodecracksettings.crackPointOffset) + d8; } if (!(d6 < d4)) { if (flag && d7 >= d5 && d6 < d1) { this.safeSetBlock(worldgenlevel, blockpos3, Blocks.AIR.defaultBlockState(), predicate); - for(Direction direction1 : DIRECTIONS) { + for (Direction direction1 : DIRECTIONS) { BlockPos blockpos2 = blockpos3.relative(direction1); FluidState fluidstate = worldgenlevel.getFluidState(blockpos2); if (!fluidstate.isEmpty()) { @@ -130,7 +130,7 @@ public boolean place(FeaturePlaceContext context) { potentialRareEarthPositions.add(new BlockPos(blockpos3)); } } else if (d6 >= d2) { - boolean flag1 = (double)random.nextFloat() < geodeconfiguration.useAlternateLayer0Chance; + boolean flag1 = (double) random.nextFloat() < geodeconfiguration.useAlternateLayer0Chance; if (flag1) { this.safeSetBlock(worldgenlevel, blockpos3, geodeblocksettings.alternateInnerLayerProvider.getState(random, blockpos3), predicate); } else { @@ -140,7 +140,7 @@ public boolean place(FeaturePlaceContext context) { if (predicate.test(state)) { potentialRareEarthPositions.add(new BlockPos(blockpos3)); } - if ((!geodeconfiguration.placementsRequireLayer0Alternate || flag1) && (double)random.nextFloat() < geodeconfiguration.usePotentialPlacementsChance) { + if ((!geodeconfiguration.placementsRequireLayer0Alternate || flag1) && (double) random.nextFloat() < geodeconfiguration.usePotentialPlacementsChance) { list2.add(blockpos3.immutable()); } } else if (d6 >= d3) { @@ -152,10 +152,10 @@ public boolean place(FeaturePlaceContext context) { } List list3 = geodeblocksettings.innerPlacements; - for(BlockPos blockpos4 : list2) { + for (BlockPos blockpos4 : list2) { BlockState blockstate1 = Util.getRandom(list3, random); - for(Direction direction : DIRECTIONS) { + for (Direction direction : DIRECTIONS) { if (blockstate1.hasProperty(BlockStateProperties.FACING)) { blockstate1 = blockstate1.setValue(BlockStateProperties.FACING, direction); } diff --git a/src/main/java/com/sammy/malum/common/worldgen/RunewoodTreeFeature.java b/src/main/java/com/sammy/malum/common/worldgen/RunewoodTreeFeature.java index 082b6bd6d..adb623927 100644 --- a/src/main/java/com/sammy/malum/common/worldgen/RunewoodTreeFeature.java +++ b/src/main/java/com/sammy/malum/common/worldgen/RunewoodTreeFeature.java @@ -20,7 +20,10 @@ import team.lodestar.lodestone.systems.worldgen.LodestoneBlockFiller; import team.lodestar.lodestone.systems.worldgen.LodestoneBlockFiller.BlockStateEntry; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; public class RunewoodTreeFeature extends Feature { public RunewoodTreeFeature() { diff --git a/src/main/java/com/sammy/malum/common/worldgen/SoulwoodTreeFeature.java b/src/main/java/com/sammy/malum/common/worldgen/SoulwoodTreeFeature.java index 9dfd9fe22..e920a2a71 100644 --- a/src/main/java/com/sammy/malum/common/worldgen/SoulwoodTreeFeature.java +++ b/src/main/java/com/sammy/malum/common/worldgen/SoulwoodTreeFeature.java @@ -25,7 +25,10 @@ import team.lodestar.lodestone.systems.worldgen.LodestoneBlockFiller; import team.lodestar.lodestone.systems.worldgen.LodestoneBlockFiller.BlockStateEntry; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import static com.sammy.malum.common.worldgen.RunewoodTreeFeature.canPlace; import static com.sammy.malum.common.worldgen.RunewoodTreeFeature.updateLeaves; @@ -246,7 +249,7 @@ public static Map generateBlight(ServerLevelAccessor level, Lod } public static void generateBlight(ServerLevelAccessor level, LodestoneBlockFiller filler, Map noiseValues, BlockPos pos, int radius) { - generateBlight(level, filler, pos, radius*2, radius, noiseValues); + generateBlight(level, filler, pos, radius * 2, radius, noiseValues); filler.fill(level); } diff --git a/src/main/java/com/sammy/malum/common/worldgen/WeepingWellFeature.java b/src/main/java/com/sammy/malum/common/worldgen/WeepingWellFeature.java index e58a80f19..a1617f66e 100644 --- a/src/main/java/com/sammy/malum/common/worldgen/WeepingWellFeature.java +++ b/src/main/java/com/sammy/malum/common/worldgen/WeepingWellFeature.java @@ -19,8 +19,6 @@ import team.lodestar.lodestone.systems.worldgen.LodestoneBlockFiller; import team.lodestar.lodestone.systems.worldgen.LodestoneBlockFiller.BlockStateEntry; -import java.util.Random; - public class WeepingWellFeature extends Feature { public WeepingWellFeature() { super(NoneFeatureConfiguration.CODEC); @@ -59,13 +57,12 @@ public boolean place(FeaturePlaceContext context) { for (int x = -2; x <= 2; x++) { for (int y = -5; y <= 4; y++) { for (int z = -2; z <= 2; z++) { - mutableBlockPos.set(pos.getX()+x, pos.getY()+y, pos.getZ()+z); + mutableBlockPos.set(pos.getX() + x, pos.getY() + y, pos.getZ() + z); if (y <= 0) { if (level.isEmptyBlock(mutableBlockPos) || !level.isFluidAtPosition(mutableBlockPos, FluidState::isEmpty)) { failedSolidChecks++; } - } - else { + } else { if (!canPlace(level, mutableBlockPos)) { failedNonSolidChecks++; } @@ -147,7 +144,7 @@ public boolean place(FeaturePlaceContext context) { filler.getEntries().put(columnPosition.immutable(), new BlockStateEntry(state)); if (j < wallHeight) { BlockState wallState = BlockRegistry.TAINTED_ROCK_BRICKS_WALL.get().defaultBlockState(); - final WallSide wallSide = j == wallHeight-1 ? WallSide.LOW : WallSide.TALL; + final WallSide wallSide = j == wallHeight - 1 ? WallSide.LOW : WallSide.TALL; switch (columnDirection) { case SOUTH -> wallState = wallState.setValue(WallBlock.SOUTH_WALL, wallSide); case NORTH -> wallState = wallState.setValue(WallBlock.NORTH_WALL, wallSide); diff --git a/src/main/java/com/sammy/malum/compability/jei/JEIHandler.java b/src/main/java/com/sammy/malum/compability/jei/JEIHandler.java index 737aeee09..02d86d9ad 100644 --- a/src/main/java/com/sammy/malum/compability/jei/JEIHandler.java +++ b/src/main/java/com/sammy/malum/compability/jei/JEIHandler.java @@ -9,9 +9,9 @@ import com.sammy.malum.compability.farmersdelight.FarmersDelightCompat; import com.sammy.malum.compability.jei.categories.*; import com.sammy.malum.compability.jei.recipes.SpiritTransmutationWrapper; +import com.sammy.malum.core.systems.rites.MalumRiteType; import com.sammy.malum.registry.common.SpiritRiteRegistry; import com.sammy.malum.registry.common.item.ItemRegistry; -import com.sammy.malum.core.systems.rites.MalumRiteType; import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.constants.RecipeTypes; @@ -69,10 +69,10 @@ public void registerCategories(IRecipeCategoryRegistration registry) { IGuiHelper guiHelper = registry.getJeiHelpers().getGuiHelper(); registry.addRecipeCategories(new SpiritInfusionRecipeCategory(guiHelper), - new SpiritTransmutationRecipeCategory(guiHelper), - new SpiritFocusingRecipeCategory(guiHelper), - new SpiritRiteRecipeCategory(guiHelper), - new SpiritRepairRecipeCategory(guiHelper)); + new SpiritTransmutationRecipeCategory(guiHelper), + new SpiritFocusingRecipeCategory(guiHelper), + new SpiritRiteRecipeCategory(guiHelper), + new SpiritRepairRecipeCategory(guiHelper)); } @Override @@ -93,12 +93,12 @@ public void registerRecipes(@Nonnull IRecipeRegistration registry) { } registry.addRecipes(TRANSMUTATION, groups.values().stream() - .map(SpiritTransmutationWrapper::new) - .collect(Collectors.toList())); + .map(SpiritTransmutationWrapper::new) + .collect(Collectors.toList())); registry.addRecipes(TRANSMUTATION, leftovers.stream() - .map(List::of) - .map(SpiritTransmutationWrapper::new) - .collect(Collectors.toList())); + .map(List::of) + .map(SpiritTransmutationWrapper::new) + .collect(Collectors.toList())); registry.addRecipes(FOCUSING, SpiritFocusingRecipe.getRecipes(level)); registry.addRecipes(RITES, SpiritRiteRegistry.RITES); @@ -123,9 +123,9 @@ public void onRuntimeAvailable(IJeiRuntime jeiRuntime) { IRecipeManager recipeRegistry = jeiRuntime.getRecipeManager(); IFocusFactory focusFactory = jeiRuntime.getJeiHelpers().getFocusFactory(); recipeRegistry.hideRecipes(RecipeTypes.CRAFTING, recipeRegistry - .createRecipeLookup(RecipeTypes.CRAFTING) - .limitFocus(List.of(focusFactory.createFocus(RecipeIngredientRole.OUTPUT, VanillaTypes.ITEM_STACK, new ItemStack(ItemRegistry.THE_DEVICE.get())))) - .get().toList()); + .createRecipeLookup(RecipeTypes.CRAFTING) + .limitFocus(List.of(focusFactory.createFocus(RecipeIngredientRole.OUTPUT, VanillaTypes.ITEM_STACK, new ItemStack(ItemRegistry.THE_DEVICE.get())))) + .get().toList()); } @Nonnull diff --git a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritFocusingRecipeCategory.java b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritFocusingRecipeCategory.java index 640d4dcde..75f36b93a 100644 --- a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritFocusingRecipeCategory.java +++ b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritFocusingRecipeCategory.java @@ -1,8 +1,7 @@ package com.sammy.malum.compability.jei.categories; -import com.mojang.blaze3d.vertex.PoseStack; import com.sammy.malum.MalumMod; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.ArcanaCodexHelper; import com.sammy.malum.common.recipe.SpiritFocusingRecipe; import com.sammy.malum.compability.jei.JEIHandler; import com.sammy.malum.registry.common.item.ItemRegistry; @@ -72,8 +71,8 @@ public void setRecipe(IRecipeLayoutBuilder builder, SpiritFocusingRecipe recipe, JEIHandler.addItemsToJei(builder, RecipeIngredientRole.INPUT, 62, 13, false, recipe.spirits); builder.addSlot(RecipeIngredientRole.INPUT, 63, 57) - .addIngredients(recipe.input); + .addIngredients(recipe.input); builder.addSlot(RecipeIngredientRole.OUTPUT, 63, 124) - .addItemStack(recipe.output); + .addItemStack(recipe.output); } } diff --git a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritInfusionRecipeCategory.java b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritInfusionRecipeCategory.java index c88f67177..f152f8d7f 100644 --- a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritInfusionRecipeCategory.java +++ b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritInfusionRecipeCategory.java @@ -1,8 +1,7 @@ package com.sammy.malum.compability.jei.categories; -import com.mojang.blaze3d.vertex.PoseStack; import com.sammy.malum.MalumMod; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.ArcanaCodexHelper; import com.sammy.malum.common.recipe.SpiritInfusionRecipe; import com.sammy.malum.compability.jei.JEIHandler; import com.sammy.malum.registry.common.item.ItemRegistry; @@ -75,9 +74,9 @@ public void setRecipe(IRecipeLayoutBuilder builder, SpiritInfusionRecipe recipe, JEIHandler.addItemsToJei(builder, RecipeIngredientRole.INPUT, 104, 49, true, recipe.extraItems); builder.addSlot(RecipeIngredientRole.INPUT, 63, 57) - .addItemStacks(recipe.input.getStacks()); + .addItemStacks(recipe.input.getStacks()); builder.addSlot(RecipeIngredientRole.OUTPUT, 63, 124) - .addItemStack(recipe.output); + .addItemStack(recipe.output); } } diff --git a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritRepairRecipeCategory.java b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritRepairRecipeCategory.java index 480d51896..3d0b80abd 100644 --- a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritRepairRecipeCategory.java +++ b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritRepairRecipeCategory.java @@ -1,8 +1,7 @@ package com.sammy.malum.compability.jei.categories; -import com.mojang.blaze3d.vertex.PoseStack; import com.sammy.malum.MalumMod; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.ArcanaCodexHelper; import com.sammy.malum.common.recipe.SpiritRepairRecipe; import com.sammy.malum.compability.jei.JEIHandler; import com.sammy.malum.registry.common.item.ItemRegistry; @@ -16,7 +15,6 @@ import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; -import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -79,20 +77,20 @@ public void setRecipe(IRecipeLayoutBuilder builder, SpiritRepairRecipe recipe, I List repairIngredient = recipe.repairMaterial.getStacks(); List damaged = repaired.stream() - .map(ItemStack::copy) - .peek(s -> s.setDamageValue((int) (s.getMaxDamage() * recipe.durabilityPercentage))) - .collect(Collectors.toCollection(ArrayList::new)); + .map(ItemStack::copy) + .peek(s -> s.setDamageValue((int) (s.getMaxDamage() * recipe.durabilityPercentage))) + .collect(Collectors.toCollection(ArrayList::new)); JEIHandler.addItemsToJei(builder, RecipeIngredientRole.INPUT, 62, 13, false, recipe.spirits); IRecipeSlotBuilder input = builder.addSlot(RecipeIngredientRole.INPUT, 82, 57) - .addItemStacks(damaged); + .addItemStacks(damaged); builder.addSlot(RecipeIngredientRole.INPUT, 44, 57) - .addItemStacks(repairIngredient); + .addItemStacks(repairIngredient); IRecipeSlotBuilder output = builder.addSlot(RecipeIngredientRole.OUTPUT, 63, 124) - .addItemStacks(repaired.stream().map(SpiritRepairRecipe::getRepairRecipeOutput).collect(Collectors.toList())); + .addItemStacks(repaired.stream().map(SpiritRepairRecipe::getRepairRecipeOutput).collect(Collectors.toList())); builder.createFocusLink(input, output); } diff --git a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritRiteRecipeCategory.java b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritRiteRecipeCategory.java index d7055fa84..57bf5e8e0 100644 --- a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritRiteRecipeCategory.java +++ b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritRiteRecipeCategory.java @@ -1,11 +1,10 @@ package com.sammy.malum.compability.jei.categories; -import com.mojang.blaze3d.vertex.PoseStack; import com.sammy.malum.MalumMod; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.ArcanaCodexHelper; import com.sammy.malum.compability.jei.JEIHandler; -import com.sammy.malum.registry.common.item.ItemRegistry; import com.sammy.malum.core.systems.rites.MalumRiteType; +import com.sammy.malum.registry.common.item.ItemRegistry; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawable; @@ -54,7 +53,6 @@ public RecipeType getRecipeType() { } - @Override public Component getTitle() { return Component.translatable("malum.jei." + UID.getPath()); @@ -76,7 +74,7 @@ public IDrawable getIcon() { public void setRecipe(IRecipeLayoutBuilder builder, MalumRiteType rite, IFocusGroup focuses) { for (int i = 0; i < rite.spirits.size(); i++) { builder.addSlot(RecipeIngredientRole.CATALYST, 63, 121 - 20 * i) - .addItemStack(rite.spirits.get(i).spiritShard.get().getDefaultInstance()); + .addItemStack(rite.spirits.get(i).spiritShard.get().getDefaultInstance()); } } } diff --git a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritTransmutationRecipeCategory.java b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritTransmutationRecipeCategory.java index e7ed56aea..30bc02da4 100644 --- a/src/main/java/com/sammy/malum/compability/jei/categories/SpiritTransmutationRecipeCategory.java +++ b/src/main/java/com/sammy/malum/compability/jei/categories/SpiritTransmutationRecipeCategory.java @@ -1,6 +1,5 @@ package com.sammy.malum.compability.jei.categories; -import com.mojang.blaze3d.vertex.PoseStack; import com.sammy.malum.MalumMod; import com.sammy.malum.compability.jei.JEIHandler; import com.sammy.malum.compability.jei.recipes.SpiritTransmutationWrapper; @@ -78,9 +77,9 @@ public void setRecipe(IRecipeLayoutBuilder builder, SpiritTransmutationWrapper r } var input = builder.addSlot(RecipeIngredientRole.INPUT, 28, 27) - .addItemStacks(inputs); + .addItemStacks(inputs); var output = builder.addSlot(RecipeIngredientRole.OUTPUT, 93, 27) - .addItemStacks(outputs); + .addItemStacks(outputs); builder.createFocusLink(input, output); } } diff --git a/src/main/java/com/sammy/malum/config/ClientConfig.java b/src/main/java/com/sammy/malum/config/ClientConfig.java index 575ce6f04..8244a54e6 100644 --- a/src/main/java/com/sammy/malum/config/ClientConfig.java +++ b/src/main/java/com/sammy/malum/config/ClientConfig.java @@ -1,7 +1,7 @@ package com.sammy.malum.config; -import com.sammy.malum.client.screen.codex.*; +import com.sammy.malum.client.screen.codex.ArcanaCodexHelper; import net.minecraftforge.common.ForgeConfigSpec; import org.apache.commons.lang3.tuple.Pair; import team.lodestar.lodestone.systems.config.LodestoneConfig; @@ -10,16 +10,16 @@ public class ClientConfig extends LodestoneConfig { - public static ConfigValueHolder BOOK_THEME = new ConfigValueHolder<>(MALUM,"client/codex", (builder -> + public static ConfigValueHolder BOOK_THEME = new ConfigValueHolder<>(MALUM, "client/codex", (builder -> builder.comment("What theme should the encyclopedia arcana be in?") .defineEnum("bookTheme", ArcanaCodexHelper.BookTheme.DEFAULT))); - public static ConfigValueHolder SCROLL_DIRECTION = new ConfigValueHolder<>(MALUM,"client/codex", (builder -> + public static ConfigValueHolder SCROLL_DIRECTION = new ConfigValueHolder<>(MALUM, "client/codex", (builder -> builder.comment("Should the scroll direction be reversed in the encyclopedia arcana entry screen? This simply affects how you move through pages in an entry.") .define("scrollDirection", false))); public ClientConfig(ForgeConfigSpec.Builder builder) { - super(MALUM,"client", builder); + super(MALUM, "client", builder); } public static final ClientConfig INSTANCE; diff --git a/src/main/java/com/sammy/malum/config/CommonConfig.java b/src/main/java/com/sammy/malum/config/CommonConfig.java index 3c6b61fbd..36eba6142 100644 --- a/src/main/java/com/sammy/malum/config/CommonConfig.java +++ b/src/main/java/com/sammy/malum/config/CommonConfig.java @@ -12,141 +12,141 @@ public class CommonConfig extends LodestoneConfig { //worldgen - public static ConfigValueHolder GENERATE_RUNEWOOD_TREES = new ConfigValueHolder<>(MALUM,"common/worldgen/runewood", (builder -> + public static ConfigValueHolder GENERATE_RUNEWOOD_TREES = new ConfigValueHolder<>(MALUM, "common/worldgen/runewood", (builder -> builder.comment("Should runewood trees naturally generate?") .define("generateRunewood", true))); - public static ConfigValueHolder COMMON_RUNEWOOD_CHANCE = new ConfigValueHolder<>(MALUM,"common/worldgen/runewood", (builder -> + public static ConfigValueHolder COMMON_RUNEWOOD_CHANCE = new ConfigValueHolder<>(MALUM, "common/worldgen/runewood", (builder -> builder.comment("Chance for runewood trees to generate in open biomes such as plains.") .defineInRange("runewoodCommonChance", 0.02d, 0, 1))); - public static ConfigValueHolder RARE_RUNEWOOD_CHANCE = new ConfigValueHolder<>(MALUM,"common/worldgen/runewood", (builder -> + public static ConfigValueHolder RARE_RUNEWOOD_CHANCE = new ConfigValueHolder<>(MALUM, "common/worldgen/runewood", (builder -> builder.comment("Chance for runewood trees to generate in forest biomes.") .defineInRange("runewoodRareChance", 0.01d, 0, 1))); - public static ConfigValueHolder GENERATE_WEEPING_WELLS = new ConfigValueHolder<>(MALUM,"common/worldgen/weeping_well", (builder -> + public static ConfigValueHolder GENERATE_WEEPING_WELLS = new ConfigValueHolder<>(MALUM, "common/worldgen/weeping_well", (builder -> builder.comment("Should the void be curious?") .define("generateTheUnknown", true))); - public static final ConfigValueHolder> WEEPING_WELL_ALLOWED_DIMENSIONS = new ConfigValueHolder<>(MALUM,"common/worldgen/weeping_well", (builder) -> + public static final ConfigValueHolder> WEEPING_WELL_ALLOWED_DIMENSIONS = new ConfigValueHolder<>(MALUM, "common/worldgen/weeping_well", (builder) -> builder.comment("Which dimensions is the void interested in?") .defineList("markedDimensions", new ArrayList<>(List.of("minecraft:overworld")), s -> s instanceof String)); - public static ConfigValueHolder GENERATE_BLAZE_QUARTZ = new ConfigValueHolder<>(MALUM,"common/worldgen/blazing_quartz", (builder -> + public static ConfigValueHolder GENERATE_BLAZE_QUARTZ = new ConfigValueHolder<>(MALUM, "common/worldgen/blazing_quartz", (builder -> builder.comment("Should blaze quartz ore generate?") .define("generateBlazeQuartz", true))); - public static ConfigValueHolder BLAZE_QUARTZ_SIZE = new ConfigValueHolder<>(MALUM,"common/worldgen/blazing_quartz", (builder -> + public static ConfigValueHolder BLAZE_QUARTZ_SIZE = new ConfigValueHolder<>(MALUM, "common/worldgen/blazing_quartz", (builder -> builder.comment("Size of blaze quartz ore veins.") .define("blazeQuartzSize", 14))); - public static ConfigValueHolder BLAZE_QUARTZ_AMOUNT = new ConfigValueHolder<>(MALUM,"common/worldgen/blazing_quartz", (builder -> + public static ConfigValueHolder BLAZE_QUARTZ_AMOUNT = new ConfigValueHolder<>(MALUM, "common/worldgen/blazing_quartz", (builder -> builder.comment("Amount of blaze quartz ore veins.") .define("blazeQuartzAmount", 16))); - public static ConfigValueHolder GENERATE_BRILLIANT_STONE = new ConfigValueHolder<>(MALUM,"common/worldgen/brilliance", (builder -> + public static ConfigValueHolder GENERATE_BRILLIANT_STONE = new ConfigValueHolder<>(MALUM, "common/worldgen/brilliance", (builder -> builder.comment("Should brilliant stone generate?") .define("generateBrilliantStone", true))); - public static ConfigValueHolder BRILLIANT_STONE_SIZE = new ConfigValueHolder<>(MALUM,"common/worldgen/brilliance", (builder -> + public static ConfigValueHolder BRILLIANT_STONE_SIZE = new ConfigValueHolder<>(MALUM, "common/worldgen/brilliance", (builder -> builder.comment("Size of brilliant stone veins.") .define("brilliantStoneSize", 4))); - public static ConfigValueHolder BRILLIANT_STONE_AMOUNT = new ConfigValueHolder<>(MALUM,"common/worldgen/brilliance", (builder -> + public static ConfigValueHolder BRILLIANT_STONE_AMOUNT = new ConfigValueHolder<>(MALUM, "common/worldgen/brilliance", (builder -> builder.comment("Amount of brilliant stone veins.") .define("brilliantStoneAmount", 3))); - public static ConfigValueHolder BRILLIANT_STONE_MIN_Y = new ConfigValueHolder<>(MALUM,"common/worldgen/brilliance", (builder -> + public static ConfigValueHolder BRILLIANT_STONE_MIN_Y = new ConfigValueHolder<>(MALUM, "common/worldgen/brilliance", (builder -> builder.comment("Minimum height at which brilliant stone can spawn.") .define("brilliantStoneMinY", -64))); - public static ConfigValueHolder BRILLIANT_STONE_MAX_Y = new ConfigValueHolder<>(MALUM,"common/worldgen/brilliance", (builder -> + public static ConfigValueHolder BRILLIANT_STONE_MAX_Y = new ConfigValueHolder<>(MALUM, "common/worldgen/brilliance", (builder -> builder.comment("Maximum height at which brilliant stone can spawn.") .define("brilliantStoneMaxY", 40))); - public static ConfigValueHolder GENERATE_SOULSTONE = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder GENERATE_SOULSTONE = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Should soulstone ore generate underground?") .define("generateSoulstone", true))); - public static ConfigValueHolder SOULSTONE_SIZE = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder SOULSTONE_SIZE = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Size of soulstone ore veins underground.") .define("soulstoneSize", 8))); - public static ConfigValueHolder SOULSTONE_AMOUNT = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder SOULSTONE_AMOUNT = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Amount of soulstone ore veins.") .define("soulstoneAmount", 3))); - public static ConfigValueHolder SOULSTONE_MIN_Y = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder SOULSTONE_MIN_Y = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Minimum height at which soulstone ore can spawn.") .define("soulstoneMinY", -64))); - public static ConfigValueHolder SOULSTONE_MAX_Y = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder SOULSTONE_MAX_Y = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Maximum height at which soulstone ore can spawn.") .define("soulstoneMaxY", 30))); - public static ConfigValueHolder GENERATE_SURFACE_SOULSTONE = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder GENERATE_SURFACE_SOULSTONE = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Should soulstone ore generate on the surface?") .define("generateSurfaceSoulstone", true))); - public static ConfigValueHolder SURFACE_SOULSTONE_SIZE = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder SURFACE_SOULSTONE_SIZE = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Size of soulstone ore veins on the surface.") .define("surfaceSoulstoneSize", 4))); - public static ConfigValueHolder SURFACE_SOULSTONE_AMOUNT = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder SURFACE_SOULSTONE_AMOUNT = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Amount of soulstone ore veins on the surface.") .define("surfaceSoulstoneAmount", 4))); - public static ConfigValueHolder SURFACE_SOULSTONE_MIN_Y = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder SURFACE_SOULSTONE_MIN_Y = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Minimum height at which surface soulstone ore can spawn.") .define("surfaceSoulstoneMinY", 60))); - public static ConfigValueHolder SURFACE_SOULSTONE_MAX_Y = new ConfigValueHolder<>(MALUM,"common/worldgen/soulstone", (builder -> + public static ConfigValueHolder SURFACE_SOULSTONE_MAX_Y = new ConfigValueHolder<>(MALUM, "common/worldgen/soulstone", (builder -> builder.comment("Maximum height at which surface soulstone ore can spawn.") .define("surfaceSoulstoneMaxY", 100))); - public static ConfigValueHolder GENERATE_NATURAL_QUARTZ = new ConfigValueHolder<>(MALUM,"common/worldgen/natural_quartz", (builder -> + public static ConfigValueHolder GENERATE_NATURAL_QUARTZ = new ConfigValueHolder<>(MALUM, "common/worldgen/natural_quartz", (builder -> builder.comment("Should natural quartz ore generate?") .define("generateNaturalQuartz", true))); - public static ConfigValueHolder NATURAL_QUARTZ_SIZE = new ConfigValueHolder<>(MALUM,"common/worldgen/natural_quartz", (builder -> + public static ConfigValueHolder NATURAL_QUARTZ_SIZE = new ConfigValueHolder<>(MALUM, "common/worldgen/natural_quartz", (builder -> builder.comment("Size of natural quartz ore veins.") .define("naturalQuartzSize", 5))); - public static ConfigValueHolder NATURAL_QUARTZ_AMOUNT = new ConfigValueHolder<>(MALUM,"common/worldgen/natural_quartz", (builder -> + public static ConfigValueHolder NATURAL_QUARTZ_AMOUNT = new ConfigValueHolder<>(MALUM, "common/worldgen/natural_quartz", (builder -> builder.comment("Amount of natural quartz ore veins.") .define("naturalQuartzAmount", 2))); - public static ConfigValueHolder NATURAL_QUARTZ_MIN_Y = new ConfigValueHolder<>(MALUM,"common/worldgen/natural_quartz", (builder -> + public static ConfigValueHolder NATURAL_QUARTZ_MIN_Y = new ConfigValueHolder<>(MALUM, "common/worldgen/natural_quartz", (builder -> builder.comment("Minimum height at which natural quartz ore can spawn.") .define("naturalQuartzMinY", -64))); - public static ConfigValueHolder NATURAL_QUARTZ_MAX_Y = new ConfigValueHolder<>(MALUM,"common/worldgen/natural_quartz", (builder -> + public static ConfigValueHolder NATURAL_QUARTZ_MAX_Y = new ConfigValueHolder<>(MALUM, "common/worldgen/natural_quartz", (builder -> builder.comment("Maximum height at which natural quartz ore can spawn.") .define("naturalQuartzMaxY", 10))); - public static ConfigValueHolder GENERATE_QUARTZ_GEODES = new ConfigValueHolder<>(MALUM,"common/worldgen/natural_quartz_geode", (builder -> + public static ConfigValueHolder GENERATE_QUARTZ_GEODES = new ConfigValueHolder<>(MALUM, "common/worldgen/natural_quartz_geode", (builder -> builder.comment("Should quartz geodes generate?") .define("generateQuartzGeodes", true))); - public static final ConfigValueHolder> QUARTZ_GEODE_ALLOWED_DIMENSIONS = new ConfigValueHolder<>(MALUM,"common/worldgen/natural_quartz_geode", (builder) -> - builder.comment("Which dimensions can quartz geodes generate in?") - .defineList("quartzGeodeDimensions", new ArrayList<>(List.of("minecraft:overworld")), s -> s instanceof String)); + public static final ConfigValueHolder> QUARTZ_GEODE_ALLOWED_DIMENSIONS = new ConfigValueHolder<>(MALUM, "common/worldgen/natural_quartz_geode", (builder) -> + builder.comment("Which dimensions can quartz geodes generate in?") + .defineList("quartzGeodeDimensions", new ArrayList<>(List.of("minecraft:overworld")), s -> s instanceof String)); - public static ConfigValueHolder GENERATE_CTHONIC_GOLD = new ConfigValueHolder<>(MALUM,"common/worldgen/cthonic_gold", (builder -> + public static ConfigValueHolder GENERATE_CTHONIC_GOLD = new ConfigValueHolder<>(MALUM, "common/worldgen/cthonic_gold", (builder -> builder.comment("Should cthonic gold generate?") .define("generateCthonicGold", true))); - public static final ConfigValueHolder> CTHONIC_GOLD_ALLOWED_DIMENSIONS = new ConfigValueHolder<>(MALUM,"common/worldgen/cthonic_gold", (builder) -> - builder.comment("Which dimensions can cthonic gold generate in?") - .defineList("cthonicGoldDimensions", new ArrayList<>(List.of("minecraft:overworld")), s -> s instanceof String)); + public static final ConfigValueHolder> CTHONIC_GOLD_ALLOWED_DIMENSIONS = new ConfigValueHolder<>(MALUM, "common/worldgen/cthonic_gold", (builder) -> + builder.comment("Which dimensions can cthonic gold generate in?") + .defineList("cthonicGoldDimensions", new ArrayList<>(List.of("minecraft:overworld")), s -> s instanceof String)); - public static ConfigValueHolder ULTIMATE_REBOUND = new ConfigValueHolder<>(MALUM,"common/item/rebound", (builder -> + public static ConfigValueHolder ULTIMATE_REBOUND = new ConfigValueHolder<>(MALUM, "common/item/rebound", (builder -> builder.comment("If set to true, you may put rebound on any weapon in the game.") .define("enableUltimateRebound", false))); - public static ConfigValueHolder AWARD_CODEX_ON_KILL = new ConfigValueHolder<>(MALUM,"common/codex", (builder -> + public static ConfigValueHolder AWARD_CODEX_ON_KILL = new ConfigValueHolder<>(MALUM, "common/codex", (builder -> builder.comment("If set to true, the first undead enemy a player slays will drop the encyclopedia arcana.") .define("enableCodexDrop", true))); - public static ConfigValueHolder NO_FANCY_SPIRITS = new ConfigValueHolder<>(MALUM,"common/spirit", (builder -> - builder.comment("If set to true, any spirits dropped will simply take the form of an item.") - .define("noFancySpirits", false))); + public static ConfigValueHolder NO_FANCY_SPIRITS = new ConfigValueHolder<>(MALUM, "common/spirit", (builder -> + builder.comment("If set to true, any spirits dropped will simply take the form of an item.") + .define("noFancySpirits", false))); - public static ConfigValueHolder SOULLESS_SPAWNERS = new ConfigValueHolder<>(MALUM,"common/spirit/spawner", (builder -> + public static ConfigValueHolder SOULLESS_SPAWNERS = new ConfigValueHolder<>(MALUM, "common/spirit/spawner", (builder -> builder.comment("If set to true, mob spawners will create soulless mobs instead.") .define("lameSpawners", false))); - public static ConfigValueHolder USE_DEFAULT_SPIRIT_VALUES = new ConfigValueHolder<>(MALUM,"common/spirit/defaults", (builder -> - builder.comment("Whether entities without spirit jsons will use the default spirit data for their category.") - .define("defaultSpiritValues", true))); + public static ConfigValueHolder USE_DEFAULT_SPIRIT_VALUES = new ConfigValueHolder<>(MALUM, "common/spirit/defaults", (builder -> + builder.comment("Whether entities without spirit jsons will use the default spirit data for their category.") + .define("defaultSpiritValues", true))); - public static ConfigValueHolder SOUL_WARD_PHYSICAL = new ConfigValueHolder<>(MALUM,"common/spirit/affinity/soul_ward", (builder -> + public static ConfigValueHolder SOUL_WARD_PHYSICAL = new ConfigValueHolder<>(MALUM, "common/spirit/affinity/soul_ward", (builder -> builder.comment("Multiplier for physical damage taken while soul ward is active.") .defineInRange("soulWardPhysical", 0.7f, 0, 1))); - public static ConfigValueHolder SOUL_WARD_MAGIC = new ConfigValueHolder<>(MALUM,"common/spirit/affinity/soul_ward", (builder -> + public static ConfigValueHolder SOUL_WARD_MAGIC = new ConfigValueHolder<>(MALUM, "common/spirit/affinity/soul_ward", (builder -> builder.comment("Multiplier for magic damage taken while soul ward is active.") .defineInRange("soulWardMagic", 0.1f, 0, 1))); - public static ConfigValueHolder SOUL_WARD_RATE = new ConfigValueHolder<>(MALUM,"common/spirit/affinity/soul_ward", (builder -> + public static ConfigValueHolder SOUL_WARD_RATE = new ConfigValueHolder<>(MALUM, "common/spirit/affinity/soul_ward", (builder -> builder.comment("Base time in ticks it takes for one point of soul ward to recover.") .define("soulWardRate", 60))); diff --git a/src/main/java/com/sammy/malum/core/events/ClientSetupEvents.java b/src/main/java/com/sammy/malum/core/events/ClientSetupEvents.java index d23c3aa29..9a1f3d3b5 100644 --- a/src/main/java/com/sammy/malum/core/events/ClientSetupEvents.java +++ b/src/main/java/com/sammy/malum/core/events/ClientSetupEvents.java @@ -12,10 +12,8 @@ import net.minecraftforge.client.event.RegisterGuiOverlaysEvent; import net.minecraftforge.client.event.RegisterParticleProvidersEvent; import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; -import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import java.util.Map; diff --git a/src/main/java/com/sammy/malum/core/events/RuntimeEvents.java b/src/main/java/com/sammy/malum/core/events/RuntimeEvents.java index 88e7dda2d..1188964c7 100644 --- a/src/main/java/com/sammy/malum/core/events/RuntimeEvents.java +++ b/src/main/java/com/sammy/malum/core/events/RuntimeEvents.java @@ -10,11 +10,11 @@ import com.sammy.malum.common.effect.WickedIntentEffect; import com.sammy.malum.common.enchantment.ReboundEnchantment; import com.sammy.malum.common.entity.nitrate.EthericExplosion; -import com.sammy.malum.common.item.cosmetic.curios.*; -import com.sammy.malum.common.item.curiosities.curios.alchemical.*; -import com.sammy.malum.common.item.curiosities.curios.rotten.*; -import com.sammy.malum.common.item.curiosities.curios.misc.*; -import com.sammy.malum.common.item.curiosities.curios.prospector.*; +import com.sammy.malum.common.item.cosmetic.curios.CurioTokenOfGratitude; +import com.sammy.malum.common.item.curiosities.curios.alchemical.CurioAlchemicalRing; +import com.sammy.malum.common.item.curiosities.curios.misc.CurioHarmonyNecklace; +import com.sammy.malum.common.item.curiosities.curios.prospector.CurioProspectorBelt; +import com.sammy.malum.common.item.curiosities.curios.rotten.CurioVoraciousRing; import com.sammy.malum.compability.create.CreateCompat; import com.sammy.malum.core.handlers.*; import com.sammy.malum.core.listeners.ReapingDataReloadListener; diff --git a/src/main/java/com/sammy/malum/core/events/SetupEvents.java b/src/main/java/com/sammy/malum/core/events/SetupEvents.java index 3bfb2f8bf..437ad8ddd 100644 --- a/src/main/java/com/sammy/malum/core/events/SetupEvents.java +++ b/src/main/java/com/sammy/malum/core/events/SetupEvents.java @@ -3,10 +3,6 @@ import com.sammy.malum.common.capability.MalumItemDataCapability; import com.sammy.malum.common.capability.MalumLivingEntityDataCapability; import com.sammy.malum.common.capability.MalumPlayerDataCapability; -import com.sammy.malum.core.handlers.MissingMappingHandler; -import com.sammy.malum.registry.client.ParticleRegistry; -import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.Block; import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -35,5 +31,4 @@ public static void correctMissingBlockMappings(RegistryEvent.MissingMappings event) { diff --git a/src/main/java/com/sammy/malum/core/handlers/SoulDataHandler.java b/src/main/java/com/sammy/malum/core/handlers/SoulDataHandler.java index d66f33462..b88261e30 100644 --- a/src/main/java/com/sammy/malum/core/handlers/SoulDataHandler.java +++ b/src/main/java/com/sammy/malum/core/handlers/SoulDataHandler.java @@ -8,7 +8,6 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.ai.goal.*; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/com/sammy/malum/core/handlers/SoulHarvestHandler.java b/src/main/java/com/sammy/malum/core/handlers/SoulHarvestHandler.java index 8873c4e74..0f37b6b62 100644 --- a/src/main/java/com/sammy/malum/core/handlers/SoulHarvestHandler.java +++ b/src/main/java/com/sammy/malum/core/handlers/SoulHarvestHandler.java @@ -212,7 +212,7 @@ public static void renderSoulHarvestEffects(PoseStack poseStack, LivingEntity ta VFXBuilders.createWorld().setPosColorTexLightmapDefaultFormat() .setColor(color.brighter()) .setAlpha(intensity * 0.6f) - .renderQuad(soulNoise, poseStack, intensity*0.4f); + .renderQuad(soulNoise, poseStack, intensity * 0.4f); poseStack.popPose(); } } diff --git a/src/main/java/com/sammy/malum/core/handlers/SoulWardHandler.java b/src/main/java/com/sammy/malum/core/handlers/SoulWardHandler.java index 72ced0152..62cb0220f 100644 --- a/src/main/java/com/sammy/malum/core/handlers/SoulWardHandler.java +++ b/src/main/java/com/sammy/malum/core/handlers/SoulWardHandler.java @@ -30,12 +30,12 @@ import team.lodestar.lodestone.helpers.ItemHelper; import team.lodestar.lodestone.setup.LodestoneScreenParticleRegistry; import team.lodestar.lodestone.setup.LodestoneShaderRegistry; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.builder.ScreenParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import team.lodestar.lodestone.systems.rendering.VFXBuilders; -import team.lodestar.lodestone.systems.rendering.shader.*; +import team.lodestar.lodestone.systems.rendering.shader.ExtendedShaderInstance; public class SoulWardHandler { @@ -48,6 +48,7 @@ public CompoundTag serializeNBT() { tag.putFloat("soulWardProgress", soulWardProgress); return tag; } + public void deserializeNBT(CompoundTag tag) { soulWard = tag.getFloat("soulWard"); soulWardProgress = tag.getFloat("soulWardProgress"); @@ -206,6 +207,7 @@ public static void renderSoulWard(ForgeGui gui, GuiGraphics guiGraphics, int wid } } } + public static ResourceLocation getSoulWardTexture() { return MalumMod.malumPath("textures/gui/soul_ward/default.png"); } diff --git a/src/main/java/com/sammy/malum/core/handlers/TouchOfDarknessHandler.java b/src/main/java/com/sammy/malum/core/handlers/TouchOfDarknessHandler.java index d4af78edb..77d798a4e 100644 --- a/src/main/java/com/sammy/malum/core/handlers/TouchOfDarknessHandler.java +++ b/src/main/java/com/sammy/malum/core/handlers/TouchOfDarknessHandler.java @@ -1,35 +1,36 @@ package com.sammy.malum.core.handlers; -import com.mojang.blaze3d.systems.*; -import com.mojang.blaze3d.vertex.*; -import com.sammy.malum.common.block.curiosities.spirit_altar.*; -import com.sammy.malum.common.block.curiosities.weeping_well.*; -import com.sammy.malum.common.capability.*; -import com.sammy.malum.common.packets.*; -import com.sammy.malum.registry.client.*; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; +import com.sammy.malum.common.block.curiosities.weeping_well.PrimordialSoupBlock; +import com.sammy.malum.common.block.curiosities.weeping_well.VoidConduitBlockEntity; +import com.sammy.malum.common.capability.MalumLivingEntityDataCapability; +import com.sammy.malum.common.packets.VoidRejectionPacket; +import com.sammy.malum.registry.client.ShaderRegistry; import com.sammy.malum.registry.common.*; -import net.minecraft.client.*; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.nbt.*; -import net.minecraft.network.chat.*; -import net.minecraft.sounds.*; -import net.minecraft.util.*; -import net.minecraft.world.damagesource.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.ai.attributes.*; -import net.minecraft.world.entity.player.*; -import net.minecraft.world.level.block.state.*; -import net.minecraftforge.common.*; -import net.minecraftforge.event.entity.living.*; -import net.minecraftforge.network.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.rendering.*; -import team.lodestar.lodestone.systems.rendering.shader.*; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeInstance; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.ForgeMod; +import net.minecraftforge.event.entity.living.LivingEvent; +import net.minecraftforge.network.PacketDistributor; +import team.lodestar.lodestone.helpers.BlockHelper; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.rendering.VFXBuilders; +import team.lodestar.lodestone.systems.rendering.shader.ExtendedShaderInstance; -import java.util.*; -import java.util.function.*; +import java.util.UUID; +import java.util.function.Consumer; public class TouchOfDarknessHandler { @@ -144,8 +145,7 @@ public static void entityTick(LivingEvent.LivingTickEvent event) { gravity.addTransientModifier(getEntityGravityAttributeModifier(livingEntity)); } gravity.setDirty(); - } - else if (hasModifier) { + } else if (hasModifier) { gravity.removeModifier(GRAVITY_MODIFIER_UUID); } } @@ -154,7 +154,7 @@ else if (hasModifier) { handler.timeSpentInGoop++; boolean isPlayer = livingEntity instanceof Player; if (isPlayer && livingEntity.level().getGameTime() % 6L == 0) { - livingEntity.level().playSound(null, livingEntity.blockPosition(), SoundRegistry.SONG_OF_THE_VOID.get(), SoundSource.HOSTILE, 0.5f+handler.timeSpentInGoop*0.02f, 0.5f+handler.timeSpentInGoop*0.03f); + livingEntity.level().playSound(null, livingEntity.blockPosition(), SoundRegistry.SONG_OF_THE_VOID.get(), SoundSource.HOSTILE, 0.5f + handler.timeSpentInGoop * 0.02f, 0.5f + handler.timeSpentInGoop * 0.03f); } if (!isPlayer) { if (livingEntity.getDeltaMovement().y > 0) { diff --git a/src/main/java/com/sammy/malum/core/helper/SpiritHelper.java b/src/main/java/com/sammy/malum/core/helper/SpiritHelper.java index 272fef92a..0b89234ae 100644 --- a/src/main/java/com/sammy/malum/core/helper/SpiritHelper.java +++ b/src/main/java/com/sammy/malum/core/helper/SpiritHelper.java @@ -5,13 +5,13 @@ import com.sammy.malum.common.entity.spirit.SpiritItemEntity; import com.sammy.malum.config.CommonConfig; import com.sammy.malum.core.listeners.SpiritDataReloadListener; +import com.sammy.malum.core.systems.recipe.SpiritWithCount; +import com.sammy.malum.core.systems.spirit.MalumEntitySpiritData; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; import com.sammy.malum.registry.common.AttributeRegistry; import com.sammy.malum.registry.common.SoundRegistry; import com.sammy.malum.registry.common.SpiritTypeRegistry; import com.sammy.malum.registry.common.item.EnchantmentRegistry; -import com.sammy.malum.core.systems.recipe.SpiritWithCount; -import com.sammy.malum.core.systems.spirit.MalumEntitySpiritData; -import com.sammy.malum.core.systems.spirit.MalumSpiritType; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; @@ -24,7 +24,8 @@ import team.lodestar.lodestone.helpers.ItemHelper; import javax.annotation.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import static net.minecraft.util.Mth.nextFloat; diff --git a/src/main/java/com/sammy/malum/core/listeners/ReapingDataReloadListener.java b/src/main/java/com/sammy/malum/core/listeners/ReapingDataReloadListener.java index a6e95c853..e4a783fb6 100644 --- a/src/main/java/com/sammy/malum/core/listeners/ReapingDataReloadListener.java +++ b/src/main/java/com/sammy/malum/core/listeners/ReapingDataReloadListener.java @@ -3,7 +3,6 @@ import com.google.gson.*; import com.sammy.malum.MalumMod; import com.sammy.malum.core.systems.reaping.MalumReapingDropsData; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; diff --git a/src/main/java/com/sammy/malum/core/listeners/SpiritDataReloadListener.java b/src/main/java/com/sammy/malum/core/listeners/SpiritDataReloadListener.java index eb73a13c8..62caafb9a 100644 --- a/src/main/java/com/sammy/malum/core/listeners/SpiritDataReloadListener.java +++ b/src/main/java/com/sammy/malum/core/listeners/SpiritDataReloadListener.java @@ -3,10 +3,9 @@ import com.google.gson.*; import com.sammy.malum.MalumMod; import com.sammy.malum.core.helper.SpiritHelper; -import com.sammy.malum.registry.common.SpiritTypeRegistry; import com.sammy.malum.core.systems.recipe.SpiritWithCount; import com.sammy.malum.core.systems.spirit.MalumEntitySpiritData; -import net.minecraft.core.Registry; +import com.sammy.malum.registry.common.SpiritTypeRegistry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; @@ -22,32 +21,32 @@ public class SpiritDataReloadListener extends SimpleJsonResourceReloadListener { public static final Set HAS_NO_DATA = new HashSet<>(); public static final MalumEntitySpiritData DEFAULT_MONSTER_SPIRIT_DATA = MalumEntitySpiritData - .builder(SpiritTypeRegistry.WICKED_SPIRIT) - .build(); + .builder(SpiritTypeRegistry.WICKED_SPIRIT) + .build(); public static final MalumEntitySpiritData DEFAULT_CREATURE_SPIRIT_DATA = MalumEntitySpiritData - .builder(SpiritTypeRegistry.SACRED_SPIRIT) - .build(); + .builder(SpiritTypeRegistry.SACRED_SPIRIT) + .build(); public static final MalumEntitySpiritData DEFAULT_AMBIENT_SPIRIT_DATA = MalumEntitySpiritData - .builder(SpiritTypeRegistry.AERIAL_SPIRIT) - .build(); + .builder(SpiritTypeRegistry.AERIAL_SPIRIT) + .build(); public static final MalumEntitySpiritData DEFAULT_WATER_CREATURE_SPIRIT_DATA = MalumEntitySpiritData - .builder(SpiritTypeRegistry.AQUEOUS_SPIRIT) - .withSpirit(SpiritTypeRegistry.SACRED_SPIRIT) - .build(); + .builder(SpiritTypeRegistry.AQUEOUS_SPIRIT) + .withSpirit(SpiritTypeRegistry.SACRED_SPIRIT) + .build(); public static final MalumEntitySpiritData DEFAULT_WATER_AMBIENT_SPIRIT_DATA = MalumEntitySpiritData - .builder(SpiritTypeRegistry.AQUEOUS_SPIRIT) - .build(); + .builder(SpiritTypeRegistry.AQUEOUS_SPIRIT) + .build(); public static final MalumEntitySpiritData DEFAULT_UNDERGROUND_WATER_CREATURE_SPIRIT_DATA = MalumEntitySpiritData - .builder(SpiritTypeRegistry.AQUEOUS_SPIRIT) - .withSpirit(SpiritTypeRegistry.EARTHEN_SPIRIT) - .build(); + .builder(SpiritTypeRegistry.AQUEOUS_SPIRIT) + .withSpirit(SpiritTypeRegistry.EARTHEN_SPIRIT) + .build(); public static final MalumEntitySpiritData DEFAULT_AXOLOTL_SPIRIT_DATA = MalumEntitySpiritData // They're their own category - .builder(SpiritTypeRegistry.AQUEOUS_SPIRIT, 2) - .withSpirit(SpiritTypeRegistry.SACRED_SPIRIT) - .build(); + .builder(SpiritTypeRegistry.AQUEOUS_SPIRIT, 2) + .withSpirit(SpiritTypeRegistry.SACRED_SPIRIT) + .build(); public static final MalumEntitySpiritData DEFAULT_BOSS_SPIRIT_DATA = MalumEntitySpiritData - .builder(SpiritTypeRegistry.ELDRITCH_SPIRIT, 2) - .build(); + .builder(SpiritTypeRegistry.ELDRITCH_SPIRIT, 2) + .build(); private static final Gson GSON = (new GsonBuilder()).create(); diff --git a/src/main/java/com/sammy/malum/core/systems/item/IVoidItem.java b/src/main/java/com/sammy/malum/core/systems/item/IVoidItem.java index c39324bc2..e43101a47 100644 --- a/src/main/java/com/sammy/malum/core/systems/item/IVoidItem.java +++ b/src/main/java/com/sammy/malum/core/systems/item/IVoidItem.java @@ -1,10 +1,10 @@ package com.sammy.malum.core.systems.item; -import com.sammy.malum.visual_effects.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import team.lodestar.lodestone.handlers.screenparticle.*; -import team.lodestar.lodestone.systems.particle.screen.*; +import com.sammy.malum.visual_effects.ScreenParticleEffects; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import team.lodestar.lodestone.handlers.screenparticle.ParticleEmitterHandler; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; public interface IVoidItem extends ParticleEmitterHandler.ItemParticleSupplier { diff --git a/src/main/java/com/sammy/malum/core/systems/recipe/SpiritWithCount.java b/src/main/java/com/sammy/malum/core/systems/recipe/SpiritWithCount.java index 8c92e82b4..abf92dc4c 100644 --- a/src/main/java/com/sammy/malum/core/systems/recipe/SpiritWithCount.java +++ b/src/main/java/com/sammy/malum/core/systems/recipe/SpiritWithCount.java @@ -10,7 +10,6 @@ import net.minecraft.world.item.ItemStack; import team.lodestar.lodestone.systems.recipe.IRecipeComponent; -import java.util.ArrayList; import java.util.List; public class SpiritWithCount implements IRecipeComponent { @@ -18,7 +17,7 @@ public class SpiritWithCount implements IRecipeComponent { public final int count; public SpiritWithCount(ItemStack stack) { - this.type = ((SpiritShardItem)stack.getItem()).type; + this.type = ((SpiritShardItem) stack.getItem()).type; this.count = stack.getCount(); } @@ -44,6 +43,7 @@ public JsonObject serialize() { } return object; } + public Component getComponent() { return type.getSpiritJarCounterComponent(count); } diff --git a/src/main/java/com/sammy/malum/core/systems/rites/AuraRiteEffect.java b/src/main/java/com/sammy/malum/core/systems/rites/AuraRiteEffect.java index e9b04f0ff..58b1dcbaa 100644 --- a/src/main/java/com/sammy/malum/core/systems/rites/AuraRiteEffect.java +++ b/src/main/java/com/sammy/malum/core/systems/rites/AuraRiteEffect.java @@ -29,14 +29,14 @@ public AuraRiteEffect(Class targetClass, Supplier { if (!e.hasEffect(effect.get())) { - MALUM_CHANNEL.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> e), new MajorEntityEffectParticlePacket(spirit.getPrimaryColor(), e.getX(), e.getY()+ e.getBbHeight() / 2f, e.getZ())); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> e), new MajorEntityEffectParticlePacket(spirit.getPrimaryColor(), e.getX(), e.getY() + e.getBbHeight() / 2f, e.getZ())); } e.addEffect(new MobEffectInstance(effect.get(), getEffectDuration(), getEffectAmplifier(), true, true)); }); diff --git a/src/main/java/com/sammy/malum/core/systems/rites/BlockAffectingRiteEffect.java b/src/main/java/com/sammy/malum/core/systems/rites/BlockAffectingRiteEffect.java index bee0e19d4..82c84fd58 100644 --- a/src/main/java/com/sammy/malum/core/systems/rites/BlockAffectingRiteEffect.java +++ b/src/main/java/com/sammy/malum/core/systems/rites/BlockAffectingRiteEffect.java @@ -16,6 +16,6 @@ public BlockPos getRiteEffectCenter(TotemBaseBlockEntity totemBase) { @Override public int getRiteEffectTickRate() { - return BASE_TICK_RATE*5; + return BASE_TICK_RATE * 5; } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/core/systems/rites/EntityAffectingRiteEffect.java b/src/main/java/com/sammy/malum/core/systems/rites/EntityAffectingRiteEffect.java index 8553b499b..b5f28d1ee 100644 --- a/src/main/java/com/sammy/malum/core/systems/rites/EntityAffectingRiteEffect.java +++ b/src/main/java/com/sammy/malum/core/systems/rites/EntityAffectingRiteEffect.java @@ -8,11 +8,11 @@ public EntityAffectingRiteEffect() { @Override public int getRiteEffectTickRate() { - return BASE_TICK_RATE*2; + return BASE_TICK_RATE * 2; } @Override public int getRiteEffectRadius() { - return BASE_RADIUS*2; + return BASE_RADIUS * 2; } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/core/systems/rites/MalumRiteType.java b/src/main/java/com/sammy/malum/core/systems/rites/MalumRiteType.java index 9a51156d6..592833397 100644 --- a/src/main/java/com/sammy/malum/core/systems/rites/MalumRiteType.java +++ b/src/main/java/com/sammy/malum/core/systems/rites/MalumRiteType.java @@ -30,16 +30,16 @@ public MalumRiteType(String identifier, String basicName, String corruptName, Ma public MalumRiteType(String identifier, String basicName, MalumSpiritType... spirits) { this(identifier, - basicName, - ("Twisted " + basicName) - .replaceAll("Twisted Greater", "Warped"), - spirits); + basicName, + ("Twisted " + basicName) + .replaceAll("Twisted Greater", "Warped"), + spirits); } public MalumRiteType(String identifier, MalumSpiritType... spirits) { this(identifier, - DataHelper.toTitleCase(identifier, "_"), - spirits); + DataHelper.toTitleCase(identifier, "_"), + spirits); } public String translationIdentifier(boolean corrupt) { diff --git a/src/main/java/com/sammy/malum/core/systems/spirit/MalumEntitySpiritData.java b/src/main/java/com/sammy/malum/core/systems/spirit/MalumEntitySpiritData.java index 17921eecf..4bfc89149 100644 --- a/src/main/java/com/sammy/malum/core/systems/spirit/MalumEntitySpiritData.java +++ b/src/main/java/com/sammy/malum/core/systems/spirit/MalumEntitySpiritData.java @@ -2,8 +2,8 @@ import com.google.gson.JsonSyntaxException; import com.sammy.malum.core.helper.SpiritHelper; -import com.sammy.malum.registry.common.SpiritTypeRegistry; import com.sammy.malum.core.systems.recipe.SpiritWithCount; +import com.sammy.malum.registry.common.SpiritTypeRegistry; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/sammy/malum/core/systems/spirit/MalumSpiritType.java b/src/main/java/com/sammy/malum/core/systems/spirit/MalumSpiritType.java index a71a4bfc5..036ae6538 100644 --- a/src/main/java/com/sammy/malum/core/systems/spirit/MalumSpiritType.java +++ b/src/main/java/com/sammy/malum/core/systems/spirit/MalumSpiritType.java @@ -1,25 +1,27 @@ package com.sammy.malum.core.systems.spirit; -import com.sammy.malum.*; -import com.sammy.malum.common.block.mana_mote.*; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.block.*; -import net.minecraft.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.block.mana_mote.SpiritMoteBlock; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.registry.common.SpiritTypeRegistry; +import com.sammy.malum.registry.common.block.BlockRegistry; +import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.*; -import net.minecraft.resources.*; -import net.minecraft.world.item.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.*; -import net.minecraft.world.level.block.state.properties.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.data.color.*; +import net.minecraft.network.chat.Style; +import net.minecraft.network.chat.TextColor; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.phys.BlockHitResult; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleDataBuilder; import java.awt.*; -import java.util.function.*; +import java.util.function.Supplier; public class MalumSpiritType { @@ -81,7 +83,7 @@ public ColorParticleDataBuilder createMainColorData() { } public ColorParticleDataBuilder createMainColorData(float coefficientMultiplier) { - return ColorParticleData.create(primaryColor, secondaryColor).setCoefficient(mainColorCoefficient*coefficientMultiplier).setEasing(mainColorEasing); + return ColorParticleData.create(primaryColor, secondaryColor).setCoefficient(mainColorCoefficient * coefficientMultiplier).setEasing(mainColorEasing); } public ColorParticleDataBuilder createBloomColorData() { @@ -89,7 +91,7 @@ public ColorParticleDataBuilder createBloomColorData() { } public ColorParticleDataBuilder createBloomColorData(float coefficientMultiplier) { - return ColorParticleData.create(primaryBloomColor, secondaryBloomColor).setCoefficient(bloomColorCoefficient*coefficientMultiplier).setEasing(bloomColorEasing); + return ColorParticleData.create(primaryBloomColor, secondaryBloomColor).setCoefficient(bloomColorCoefficient * coefficientMultiplier).setEasing(bloomColorEasing); } public Rarity getItemRarity() { diff --git a/src/main/java/com/sammy/malum/core/systems/spirit/SpiritTypeBuilder.java b/src/main/java/com/sammy/malum/core/systems/spirit/SpiritTypeBuilder.java index e6d744459..bc4fa37b6 100644 --- a/src/main/java/com/sammy/malum/core/systems/spirit/SpiritTypeBuilder.java +++ b/src/main/java/com/sammy/malum/core/systems/spirit/SpiritTypeBuilder.java @@ -1,11 +1,12 @@ package com.sammy.malum.core.systems.spirit; -import com.sammy.malum.common.block.mana_mote.*; -import com.sammy.malum.common.item.spirit.*; -import team.lodestar.lodestone.systems.easing.*; +import com.sammy.malum.common.block.mana_mote.SpiritMoteBlock; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import team.lodestar.lodestone.systems.easing.Easing; import java.awt.*; -import java.util.function.*; +import java.util.function.Function; +import java.util.function.Supplier; public class SpiritTypeBuilder { @@ -31,9 +32,11 @@ public SpiritTypeBuilder(String identifier, Supplier spiritShar this.spiritShard = spiritShard; this.spiritMote = spiritMote; } + public SpiritTypeBuilder setColorData(Color primaryColor, Color secondaryColor, float colorCoefficient) { return setMainColorData(primaryColor, secondaryColor, colorCoefficient).setBloomColorData(primaryColor, secondaryColor, colorCoefficient); } + public SpiritTypeBuilder setColorData(Color primaryColor, Color secondaryColor, float colorCoefficient, Easing easing) { return setMainColorData(primaryColor, secondaryColor, colorCoefficient, easing).setBloomColorData(primaryColor, secondaryColor, colorCoefficient, easing); } diff --git a/src/main/java/com/sammy/malum/core/systems/spirit/SpiritTypeProperty.java b/src/main/java/com/sammy/malum/core/systems/spirit/SpiritTypeProperty.java index 872076a1e..a69a4ad70 100644 --- a/src/main/java/com/sammy/malum/core/systems/spirit/SpiritTypeProperty.java +++ b/src/main/java/com/sammy/malum/core/systems/spirit/SpiritTypeProperty.java @@ -11,52 +11,52 @@ public class SpiritTypeProperty extends Property { - private final ImmutableSet values; - private final Map types = Maps.newHashMap(); - - public SpiritTypeProperty(String name, Collection types) { - super(name, String.class); - this.values = ImmutableSet.copyOf(types.stream().map(s -> s.identifier).collect(Collectors.toList())); - - for (MalumSpiritType type : types) { - if (this.types.containsKey(type.identifier)) { - throw new IllegalArgumentException("Multiple values have the same name '" + type.identifier + "'"); - } - - this.types.put(type.identifier, type); - } - } - - @Override - public Collection getPossibleValues() { - return this.values; - } - - @Override - public Optional getValue(String value) { - return values.stream().filter(v -> v.equals(value)).findAny(); - } - - @Override - public String getName(String value) { - return value; - } - - @Override - public boolean equals(Object pOther) { - if (this == pOther) { - return true; - } else if (pOther instanceof SpiritTypeProperty property && super.equals(pOther)) { - return this.values.equals(property.values) && this.types.equals(property.types); - } else { - return false; - } - } - - @Override - public int generateHashCode() { - int i = super.generateHashCode(); - i = 31 * i + this.values.hashCode(); - return 31 * i + this.types.hashCode(); - } + private final ImmutableSet values; + private final Map types = Maps.newHashMap(); + + public SpiritTypeProperty(String name, Collection types) { + super(name, String.class); + this.values = ImmutableSet.copyOf(types.stream().map(s -> s.identifier).collect(Collectors.toList())); + + for (MalumSpiritType type : types) { + if (this.types.containsKey(type.identifier)) { + throw new IllegalArgumentException("Multiple values have the same name '" + type.identifier + "'"); + } + + this.types.put(type.identifier, type); + } + } + + @Override + public Collection getPossibleValues() { + return this.values; + } + + @Override + public Optional getValue(String value) { + return values.stream().filter(v -> v.equals(value)).findAny(); + } + + @Override + public String getName(String value) { + return value; + } + + @Override + public boolean equals(Object pOther) { + if (this == pOther) { + return true; + } else if (pOther instanceof SpiritTypeProperty property && super.equals(pOther)) { + return this.values.equals(property.values) && this.types.equals(property.types); + } else { + return false; + } + } + + @Override + public int generateHashCode() { + int i = super.generateHashCode(); + i = 31 * i + this.values.hashCode(); + return 31 * i + this.types.hashCode(); + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/data/MalumLang.java b/src/main/java/com/sammy/malum/data/MalumLang.java index 78073456a..1d957a91d 100644 --- a/src/main/java/com/sammy/malum/data/MalumLang.java +++ b/src/main/java/com/sammy/malum/data/MalumLang.java @@ -336,7 +336,7 @@ protected void addTranslations() { addHeadline("spirit_trinkets.guardian_ring", "Ring of the Guardian"); addPages("spirit_trinkets.guardian_ring", "As a first attempt to create a trinket using these as a base, I have designed one that mimics Soulstained Armor's Soul Ward."); - + addEntryHeader("reactive_trinkets", "Reactive Trinkets", "Harnessing the harvest"); addHeadline("reactive_trinkets.ring_of_curative_talent", "Ring of Curative Talent"); addPages("reactive_trinkets.ring_of_curative_talent", diff --git a/src/main/java/com/sammy/malum/data/MalumRecipes.java b/src/main/java/com/sammy/malum/data/MalumRecipes.java index bda85f3ab..2e4b77d4c 100644 --- a/src/main/java/com/sammy/malum/data/MalumRecipes.java +++ b/src/main/java/com/sammy/malum/data/MalumRecipes.java @@ -1,35 +1,44 @@ package com.sammy.malum.data; -import com.sammy.malum.*; -import com.sammy.malum.common.item.impetus.*; -import com.sammy.malum.data.recipe.builder.vanilla.*; -import com.sammy.malum.registry.common.item.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.item.impetus.ImpetusItem; +import com.sammy.malum.data.recipe.builder.vanilla.TheDeviceRecipeBuilder; +import com.sammy.malum.registry.common.item.ItemRegistry; +import com.sammy.malum.registry.common.item.ItemTagRegistry; import net.minecraft.advancements.critereon.*; -import net.minecraft.core.*; -import net.minecraft.data.*; -import net.minecraft.data.recipes.*; -import net.minecraft.tags.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; -import net.minecraft.world.level.*; -import net.minecraft.world.level.block.*; -import net.minecraftforge.common.*; -import net.minecraftforge.common.crafting.*; -import net.minecraftforge.common.crafting.conditions.*; -import net.minecraftforge.registries.*; -import team.lodestar.lodestone.data.builder.*; -import team.lodestar.lodestone.systems.recipe.*; - -import java.util.function.*; - -import static com.sammy.malum.MalumMod.*; -import static com.sammy.malum.data.recipe.builder.vanilla.MetalNodeCookingRecipeBuilder.*; -import static com.sammy.malum.data.recipe.builder.vanilla.StackedMalumCookingRecipeBuilder.*; -import static net.minecraft.data.recipes.ShapedRecipeBuilder.*; -import static net.minecraft.data.recipes.ShapelessRecipeBuilder.*; -import static net.minecraft.data.recipes.SimpleCookingRecipeBuilder.smoking; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.crafting.ConditionalRecipe; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.crafting.conditions.TagEmptyCondition; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import team.lodestar.lodestone.data.builder.NBTCarryRecipeBuilder; +import team.lodestar.lodestone.systems.recipe.IngredientWithCount; + +import java.util.function.Consumer; +import java.util.function.Supplier; + +import static com.sammy.malum.MalumMod.malumPath; +import static com.sammy.malum.data.recipe.builder.vanilla.MetalNodeCookingRecipeBuilder.blastingWithTag; +import static com.sammy.malum.data.recipe.builder.vanilla.MetalNodeCookingRecipeBuilder.smeltingWithTag; +import static com.sammy.malum.data.recipe.builder.vanilla.StackedMalumCookingRecipeBuilder.blastingWithCount; +import static com.sammy.malum.data.recipe.builder.vanilla.StackedMalumCookingRecipeBuilder.smeltingWithCount; +import static net.minecraft.data.recipes.ShapedRecipeBuilder.shaped; +import static net.minecraft.data.recipes.ShapelessRecipeBuilder.shapeless; import static net.minecraft.data.recipes.SimpleCookingRecipeBuilder.*; -import static net.minecraft.data.recipes.SingleItemRecipeBuilder.*; +import static net.minecraft.data.recipes.SingleItemRecipeBuilder.stonecutting; import static team.lodestar.lodestone.registry.common.tag.LodestoneItemTags.*; public class MalumRecipes extends RecipeProvider implements IConditionBuilder { @@ -109,7 +118,7 @@ protected void buildRecipes(Consumer consumer) { shapeless(RecipeCategory.MISC, ItemRegistry.COPPER_NUGGET.get(), 9).requires(INGOTS_COPPER).unlockedBy("has_copper", has(INGOTS_COPPER)).save(consumer, malumPath("copper_nugget_from_ingot")); //ORE SMELTING - smelting(Ingredient.of(ItemRegistry.BLAZING_QUARTZ_ORE.get()),RecipeCategory.MISC, ItemRegistry.BLAZING_QUARTZ.get(), 0.25f, 200).unlockedBy("has_blazing_quartz", has(ItemRegistry.BLAZING_QUARTZ.get())).save(consumer, malumPath("blazing_quartz_from_smelting")); + smelting(Ingredient.of(ItemRegistry.BLAZING_QUARTZ_ORE.get()), RecipeCategory.MISC, ItemRegistry.BLAZING_QUARTZ.get(), 0.25f, 200).unlockedBy("has_blazing_quartz", has(ItemRegistry.BLAZING_QUARTZ.get())).save(consumer, malumPath("blazing_quartz_from_smelting")); blasting(Ingredient.of(ItemRegistry.BLAZING_QUARTZ_ORE.get()), RecipeCategory.MISC, ItemRegistry.BLAZING_QUARTZ.get(), 0.25f, 100).unlockedBy("has_blazing_quartz", has(ItemRegistry.BLAZING_QUARTZ.get())).save(consumer, malumPath("blazing_quartz_from_blasting")); smelting(Ingredient.of(ItemRegistry.NATURAL_QUARTZ_ORE.get()), RecipeCategory.MISC, ItemRegistry.NATURAL_QUARTZ.get(), 0.25f, 200).unlockedBy("has_natural_quartz", has(ItemRegistry.NATURAL_QUARTZ.get())).save(consumer, malumPath("natural_quartz_from_smelting")); blasting(Ingredient.of(ItemRegistry.NATURAL_QUARTZ_ORE.get()), RecipeCategory.MISC, ItemRegistry.NATURAL_QUARTZ.get(), 0.25f, 100).unlockedBy("has_natural_quartz", has(ItemRegistry.NATURAL_QUARTZ.get())).save(consumer, malumPath("natural_quartz_from_blasting")); @@ -274,31 +283,31 @@ protected void buildRecipes(Consumer consumer) { shaped(RecipeCategory.MISC, ItemRegistry.POLISHED_TAINTED_ROCK.get(), 4).define('#', ItemRegistry.TAINTED_ROCK.get()).pattern("##").pattern("##").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.POLISHED_TAINTED_ROCK_SLAB.get(), 6).define('#', ItemRegistry.POLISHED_TAINTED_ROCK.get()).pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.POLISHED_TAINTED_ROCK_STAIRS.get(), 4).define('#', ItemRegistry.POLISHED_TAINTED_ROCK.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.POLISHED_TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.POLISHED_TAINTED_ROCK_SLAB.get(), 2).unlockedBy("has_polished_tainted_rock", has(ItemRegistry.POLISHED_TAINTED_ROCK.get())).save(consumer, malumPath("polished_tainted_rock_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.POLISHED_TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.POLISHED_TAINTED_ROCK_STAIRS.get()).unlockedBy("has_polished_tainted_rock", has(ItemRegistry.POLISHED_TAINTED_ROCK.get())).save(consumer, malumPath("polished_tainted_rock_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.POLISHED_TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.POLISHED_TAINTED_ROCK_SLAB.get(), 2).unlockedBy("has_polished_tainted_rock", has(ItemRegistry.POLISHED_TAINTED_ROCK.get())).save(consumer, malumPath("polished_tainted_rock_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.POLISHED_TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.POLISHED_TAINTED_ROCK_STAIRS.get()).unlockedBy("has_polished_tainted_rock", has(ItemRegistry.POLISHED_TAINTED_ROCK.get())).save(consumer, malumPath("polished_tainted_rock_stairs_stonecutting")); - smelting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.SMOOTH_TAINTED_ROCK.get(), 0.1f, 200).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); + smelting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMOOTH_TAINTED_ROCK.get(), 0.1f, 200).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.SMOOTH_TAINTED_ROCK_SLAB.get(), 6).define('#', ItemRegistry.SMOOTH_TAINTED_ROCK.get()).pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.SMOOTH_TAINTED_ROCK_STAIRS.get(), 4).define('#', ItemRegistry.SMOOTH_TAINTED_ROCK.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); stonecutting(Ingredient.of(ItemRegistry.SMOOTH_TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMOOTH_TAINTED_ROCK_SLAB.get(), 2).unlockedBy("has_smooth_tainted_rock", has(ItemRegistry.POLISHED_TAINTED_ROCK.get())).save(consumer, malumPath("smooth_tainted_rock_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.SMOOTH_TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.SMOOTH_TAINTED_ROCK_STAIRS.get()).unlockedBy("has_smooth_tainted_rock", has(ItemRegistry.POLISHED_TAINTED_ROCK.get())).save(consumer, malumPath("smooth_tainted_rock_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.SMOOTH_TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMOOTH_TAINTED_ROCK_STAIRS.get()).unlockedBy("has_smooth_tainted_rock", has(ItemRegistry.POLISHED_TAINTED_ROCK.get())).save(consumer, malumPath("smooth_tainted_rock_stairs_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS.get(), 4).define('#', ItemRegistry.POLISHED_TAINTED_ROCK.get()).pattern("##").pattern("##").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS.get(), 4).define('#', ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()).pattern("##").pattern("##").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_bricks_from_small_bricks")); shaped(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS_SLAB.get(), 6).define('#', ItemRegistry.TAINTED_ROCK_BRICKS.get()).pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS_STAIRS.get(), 4).define('#', ItemRegistry.TAINTED_ROCK_BRICKS.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS_WALL.get(), 6).define('#', ItemRegistry.TAINTED_ROCK_BRICKS.get()).pattern("###").pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.POLISHED_TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_bricks_stonecutting_from_polished")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_bricks_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_bricks_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_brick_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.POLISHED_TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_bricks_stonecutting_from_polished")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_bricks_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_bricks_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_brick_wall_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS_WALL.get(), 6).define('#', ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get()).pattern("###").pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); - smelting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get(), 0.1f, 200).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); + smelting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get(), 0.1f, 200).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS_SLAB.get(), 6).define('#', ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get()).pattern("###").unlockedBy("has_cracked_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS_STAIRS.get(), 4).define('#', ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_cracked_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_cracked_tainted_rock_bricks", has(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get())).save(consumer, malumPath("cracked_tainted_rock_bricks_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_cracked_tainted_rock_bricks", has(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get())).save(consumer, malumPath("cracked_tainted_rock_bricks_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_cracked_tainted_rock_bricks", has(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get())).save(consumer, malumPath("cracked_tainted_rock_bricks_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_cracked_tainted_rock_bricks", has(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get())).save(consumer, malumPath("cracked_tainted_rock_bricks_stairs_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES.get(), 4).define('#', ItemRegistry.TAINTED_ROCK_BRICKS.get()).pattern("##").pattern("##").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES_SLAB.get(), 6).define('#', ItemRegistry.TAINTED_ROCK_TILES.get()).pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); @@ -306,19 +315,19 @@ protected void buildRecipes(Consumer consumer) { shaped(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES_WALL.get(), 6).define('#', ItemRegistry.TAINTED_ROCK_TILES.get()).pattern("###").pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_tiles_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.POLISHED_TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_tiles_stonecutting_from_polished")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_tiles_stonecutting_from_bricks")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_tiles_stonecutting_from_bricks")); stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES_SLAB.get(), 2).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_tiles_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES_STAIRS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_tiles_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES_WALL.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_tiles_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES_STAIRS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_tiles_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_TILES_WALL.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_tiles_wall_stonecutting")); smelting(Ingredient.of(ItemRegistry.TAINTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get(), 0.1f, 200).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES_SLAB.get(), 6).define('#', ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()).pattern("###").unlockedBy("has_cracked_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES_STAIRS.get(), 4).define('#', ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_cracked_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES_WALL.get(), 6).define('#', ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()).pattern("###").pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_tainted_rock_tiles_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES_SLAB.get(), 2).unlockedBy("has_cracked_tainted_rock_tiles", has(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get())).save(consumer, malumPath("cracked_tainted_rock_tiles_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES_STAIRS.get()).unlockedBy("has_cracked_tainted_rock_tiles", has(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get())).save(consumer, malumPath("cracked_tainted_rock_tiles_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES_WALL.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_tainted_rock_tiles_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_tainted_rock_tiles_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES_SLAB.get(), 2).unlockedBy("has_cracked_tainted_rock_tiles", has(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get())).save(consumer, malumPath("cracked_tainted_rock_tiles_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES_STAIRS.get()).unlockedBy("has_cracked_tainted_rock_tiles", has(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get())).save(consumer, malumPath("cracked_tainted_rock_tiles_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TAINTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TAINTED_ROCK_TILES_WALL.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_tainted_rock_tiles_wall_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get(), 4).define('#', ItemRegistry.TAINTED_ROCK_TILES.get()).pattern("##").pattern("##").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS_SLAB.get(), 6).define('#', ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()).pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); @@ -327,18 +336,18 @@ protected void buildRecipes(Consumer consumer) { stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_stonecutting_alt")); - stonecutting(Ingredient.of(ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_wall_stonecutting")); - smelting(Ingredient.of(ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get(), 0.1f, 200).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_small_tainted_rock_bricks_smelting")); + smelting(Ingredient.of(ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get(), 0.1f, 200).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_small_tainted_rock_bricks_smelting")); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS_SLAB.get(), 6).define('#', ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()).pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS_STAIRS.get(), 4).define('#', ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS_WALL.get(), 6).define('#', ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()).pattern("###").pattern("###").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_small_tainted_rock_bricks_stonecutting_alt")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_small_tainted_rock_bricks_stonecutting_alt")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_small_tainted_rock_bricks_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_small_tainted_rock_bricks_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_small_tainted_rock_bricks_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_small_tainted_rock_bricks_stairs_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TAINTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cracked_small_tainted_rock_bricks_wall_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.CHISELED_TAINTED_ROCK.get()).define('#', ItemRegistry.TAINTED_ROCK_SLAB.get()).pattern("#").pattern("#").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); @@ -347,16 +356,16 @@ protected void buildRecipes(Consumer consumer) { shapeless(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_COLUMN.get()).requires(ItemRegistry.TAINTED_ROCK_COLUMN_CAP.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_column_from_cap")); shaped(RecipeCategory.MISC, ItemRegistry.CUT_TAINTED_ROCK.get(), 4).define('#', ItemRegistry.SMOOTH_TAINTED_ROCK.get()).pattern("##").pattern("##").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.CUT_TAINTED_ROCK.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cut_tainted_rock_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_COLUMN.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_column_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_COLUMN_CAP.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_column_cap_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.CUT_TAINTED_ROCK.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("cut_tainted_rock_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_COLUMN.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_column_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_COLUMN_CAP.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_column_cap_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("tainted_rock_bricks_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.SMOOTH_TAINTED_ROCK.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("smooth_tainted_rock_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMOOTH_TAINTED_ROCK.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("smooth_tainted_rock_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.POLISHED_TAINTED_ROCK.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("polished_tainted_rock_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.CHISELED_TAINTED_ROCK.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("chiseled_tainted_rock_bricks_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.CHISELED_TAINTED_ROCK.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("chiseled_tainted_rock_bricks_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.CHISELED_TAINTED_ROCK.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("chiseled_tainted_rock_bricks_stonecutting_alt")); - stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_stonecutting_from_bricks")); + stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_stonecutting_from_bricks")); stonecutting(Ingredient.of(ItemRegistry.TAINTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TAINTED_ROCK_BRICKS.get()).unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer, malumPath("small_tainted_rock_bricks_stonecutting_from_tiles")); shaped(RecipeCategory.MISC, ItemRegistry.TAINTED_ROCK_ITEM_STAND.get(), 2).define('X', ItemRegistry.TAINTED_ROCK.get()).define('Y', ItemRegistry.TAINTED_ROCK_SLAB.get()).pattern("YYY").pattern("XXX").unlockedBy("has_tainted_rock", has(ItemRegistry.TAINTED_ROCK.get())).save(consumer); @@ -369,9 +378,9 @@ protected void buildRecipes(Consumer consumer) { shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_WALL.get(), 6).define('#', ItemRegistry.TWISTED_ROCK.get()).pattern("###").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_SLAB.get(), 6).define('#', ItemRegistry.TWISTED_ROCK.get()).pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_STAIRS.get(), 4).define('#', ItemRegistry.TWISTED_ROCK.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_SLAB.get(), 2).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_SLAB.get(), 2).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_slab_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_STAIRS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_wall_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.POLISHED_TWISTED_ROCK.get(), 4).define('#', ItemRegistry.TWISTED_ROCK.get()).pattern("##").pattern("##").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.POLISHED_TWISTED_ROCK_SLAB.get(), 6).define('#', ItemRegistry.POLISHED_TWISTED_ROCK.get()).pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); @@ -379,69 +388,69 @@ protected void buildRecipes(Consumer consumer) { stonecutting(Ingredient.of(ItemRegistry.POLISHED_TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.POLISHED_TWISTED_ROCK_SLAB.get(), 2).unlockedBy("has_polished_twisted_rock", has(ItemRegistry.POLISHED_TWISTED_ROCK.get())).save(consumer, malumPath("polished_twisted_rock_slab_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.POLISHED_TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.POLISHED_TWISTED_ROCK_STAIRS.get()).unlockedBy("has_polished_twisted_rock", has(ItemRegistry.POLISHED_TWISTED_ROCK.get())).save(consumer, malumPath("polished_twisted_rock_stairs_stonecutting")); - smelting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK.get(), 0.1f, 200).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); + smelting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK.get(), 0.1f, 200).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK_SLAB.get(), 6).define('#', ItemRegistry.SMOOTH_TWISTED_ROCK.get()).pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK_STAIRS.get(), 4).define('#', ItemRegistry.SMOOTH_TWISTED_ROCK.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.SMOOTH_TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK_SLAB.get(), 2).unlockedBy("has_smooth_twisted_rock", has(ItemRegistry.POLISHED_TWISTED_ROCK.get())).save(consumer, malumPath("smooth_twisted_rock_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.SMOOTH_TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK_STAIRS.get()).unlockedBy("has_smooth_twisted_rock", has(ItemRegistry.POLISHED_TWISTED_ROCK.get())).save(consumer, malumPath("smooth_twisted_rock_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.SMOOTH_TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK_SLAB.get(), 2).unlockedBy("has_smooth_twisted_rock", has(ItemRegistry.POLISHED_TWISTED_ROCK.get())).save(consumer, malumPath("smooth_twisted_rock_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.SMOOTH_TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK_STAIRS.get()).unlockedBy("has_smooth_twisted_rock", has(ItemRegistry.POLISHED_TWISTED_ROCK.get())).save(consumer, malumPath("smooth_twisted_rock_stairs_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS.get(), 4).define('#', ItemRegistry.POLISHED_TWISTED_ROCK.get()).pattern("##").pattern("##").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS.get(), 4).define('#', ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).pattern("##").pattern("##").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_bricks_from_small_bricks")); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS_SLAB.get(), 6).define('#', ItemRegistry.TWISTED_ROCK_BRICKS.get()).pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS_STAIRS.get(), 4).define('#', ItemRegistry.TWISTED_ROCK_BRICKS.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS_WALL.get(), 6).define('#', ItemRegistry.TWISTED_ROCK_BRICKS.get()).pattern("###").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.POLISHED_TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_bricks_stonecutting_from_polished")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_bricks_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_bricks_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_brick_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.POLISHED_TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_bricks_stonecutting_from_polished")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_bricks_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_bricks_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_brick_wall_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS_WALL.get(), 6).define('#', ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get()).pattern("###").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); - smelting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get(), 0.1f, 200).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); + smelting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get(), 0.1f, 200).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS_SLAB.get(), 6).define('#', ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get()).pattern("###").unlockedBy("has_cracked_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS_STAIRS.get(), 4).define('#', ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_cracked_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_cracked_twisted_rock_bricks", has(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get())).save(consumer, malumPath("cracked_twisted_rock_bricks_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_cracked_twisted_rock_bricks", has(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get())).save(consumer, malumPath("cracked_twisted_rock_bricks_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_cracked_twisted_rock_bricks", has(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get())).save(consumer, malumPath("cracked_twisted_rock_bricks_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_cracked_twisted_rock_bricks", has(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get())).save(consumer, malumPath("cracked_twisted_rock_bricks_stairs_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES.get(), 4).define('#', ItemRegistry.TWISTED_ROCK_BRICKS.get()).pattern("##").pattern("##").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES_SLAB.get(), 6).define('#', ItemRegistry.TWISTED_ROCK_TILES.get()).pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES_STAIRS.get(), 4).define('#', ItemRegistry.TWISTED_ROCK_TILES.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES_WALL.get(), 6).define('#', ItemRegistry.TWISTED_ROCK_TILES.get()).pattern("###").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.POLISHED_TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_stonecutting_from_polished")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_stonecutting_from_bricks")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.POLISHED_TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_stonecutting_from_polished")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_stonecutting_from_bricks")); stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES_SLAB.get(), 2).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES_STAIRS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES_STAIRS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_TILES_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_tiles_wall_stonecutting")); smelting(Ingredient.of(ItemRegistry.TWISTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get(), 0.1f, 200).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES_SLAB.get(), 6).define('#', ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()).pattern("###").unlockedBy("has_cracked_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES_STAIRS.get(), 4).define('#', ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_cracked_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES_WALL.get(), 6).define('#', ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()).pattern("###").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_twisted_rock_tiles_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES_SLAB.get(), 2).unlockedBy("has_cracked_twisted_rock_tiles", has(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get())).save(consumer, malumPath("cracked_twisted_rock_tiles_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES_STAIRS.get()).unlockedBy("has_cracked_twisted_rock_tiles", has(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get())).save(consumer, malumPath("cracked_twisted_rock_tiles_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_twisted_rock_tiles_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_twisted_rock_tiles_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES_SLAB.get(), 2).unlockedBy("has_cracked_twisted_rock_tiles", has(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get())).save(consumer, malumPath("cracked_twisted_rock_tiles_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES_STAIRS.get()).unlockedBy("has_cracked_twisted_rock_tiles", has(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get())).save(consumer, malumPath("cracked_twisted_rock_tiles_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_TWISTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_TWISTED_ROCK_TILES_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_twisted_rock_tiles_wall_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get(), 4).define('#', ItemRegistry.TWISTED_ROCK_TILES.get()).pattern("##").pattern("##").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS_SLAB.get(), 6).define('#', ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS_STAIRS.get(), 4).define('#', ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS_WALL.get(), 6).define('#', ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).pattern("###").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_stonecutting_alt")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_stonecutting_alt")); - stonecutting(Ingredient.of(ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_slab_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_wall_stonecutting")); - smelting(Ingredient.of(ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get(), 0.1f, 200).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_small_twisted_rock_bricks_smelting")); + smelting(Ingredient.of(ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get(), 0.1f, 200).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_small_twisted_rock_bricks_smelting")); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS_SLAB.get(), 6).define('#', ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()).pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS_STAIRS.get(), 4).define('#', ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()).pattern("# ").pattern("## ").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS_WALL.get(), 6).define('#', ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()).pattern("###").pattern("###").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_small_twisted_rock_bricks_stonecutting_alt")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_small_twisted_rock_bricks_slab_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_small_twisted_rock_bricks_stairs_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_small_twisted_rock_bricks_wall_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS_SLAB.get(), 2).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_small_twisted_rock_bricks_slab_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS_STAIRS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_small_twisted_rock_bricks_stairs_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.RUNIC_SMALL_TWISTED_ROCK_BRICKS_WALL.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cracked_small_twisted_rock_bricks_wall_stonecutting")); shaped(RecipeCategory.MISC, ItemRegistry.CHISELED_TWISTED_ROCK.get()).define('#', ItemRegistry.TWISTED_ROCK_SLAB.get()).pattern("#").pattern("#").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_COLUMN.get(), 2).define('#', ItemRegistry.TWISTED_ROCK_BRICKS.get()).pattern("#").pattern("#").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); @@ -449,17 +458,17 @@ protected void buildRecipes(Consumer consumer) { shapeless(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_COLUMN.get()).requires(ItemRegistry.TWISTED_ROCK_COLUMN_CAP.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_column_from_cap")); shaped(RecipeCategory.MISC, ItemRegistry.CUT_TWISTED_ROCK.get(), 4).define('#', ItemRegistry.SMOOTH_TWISTED_ROCK.get()).pattern("##").pattern("##").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.CUT_TWISTED_ROCK.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cut_twisted_rock_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_COLUMN.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_column_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_COLUMN_CAP.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_column_cap_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_bricks_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("smooth_twisted_rock_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()),RecipeCategory.MISC, ItemRegistry.POLISHED_TWISTED_ROCK.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("polished_twisted_rock_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.CUT_TWISTED_ROCK.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("cut_twisted_rock_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_COLUMN.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_column_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_COLUMN_CAP.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_column_cap_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("twisted_rock_bricks_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.SMOOTH_TWISTED_ROCK.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("smooth_twisted_rock_stonecutting")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.POLISHED_TWISTED_ROCK.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("polished_twisted_rock_stonecutting")); stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK.get()), RecipeCategory.MISC, ItemRegistry.CHISELED_TWISTED_ROCK.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("chiseled_twisted_rock_bricks_stonecutting")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()),RecipeCategory.MISC, ItemRegistry.CHISELED_TWISTED_ROCK.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("chiseled_twisted_rock_bricks_stonecutting_alt")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.CHISELED_TWISTED_ROCK.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("chiseled_twisted_rock_bricks_stonecutting_alt")); stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_BRICKS.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_stonecutting_from_bricks")); - stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_TILES.get()),RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_stonecutting_from_tiles")); + stonecutting(Ingredient.of(ItemRegistry.TWISTED_ROCK_TILES.get()), RecipeCategory.MISC, ItemRegistry.SMALL_TWISTED_ROCK_BRICKS.get()).unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer, malumPath("small_twisted_rock_bricks_stonecutting_from_tiles")); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_ITEM_STAND.get(), 2).define('X', ItemRegistry.TWISTED_ROCK.get()).define('Y', ItemRegistry.TWISTED_ROCK_SLAB.get()).pattern("YYY").pattern("XXX").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); shaped(RecipeCategory.MISC, ItemRegistry.TWISTED_ROCK_ITEM_PEDESTAL.get()).define('X', ItemRegistry.TWISTED_ROCK.get()).define('Y', ItemRegistry.TWISTED_ROCK_SLAB.get()).pattern("YYY").pattern(" X ").pattern("YYY").unlockedBy("has_twisted_rock", has(ItemRegistry.TWISTED_ROCK.get())).save(consumer); @@ -583,7 +592,6 @@ private static void shapedSign(Consumer recipeConsumer, ItemLike } - protected static EnterBlockTrigger.TriggerInstance insideOf(Block pBlock) { return new EnterBlockTrigger.TriggerInstance(ContextAwarePredicate.ANY, pBlock, StatePropertiesPredicate.ANY); } diff --git a/src/main/java/com/sammy/malum/data/MalumWorldgenProvider.java b/src/main/java/com/sammy/malum/data/MalumWorldgenProvider.java new file mode 100644 index 000000000..7f0eb20a8 --- /dev/null +++ b/src/main/java/com/sammy/malum/data/MalumWorldgenProvider.java @@ -0,0 +1,24 @@ +package com.sammy.malum.data; + +import com.sammy.malum.MalumMod; +import com.sammy.malum.registry.common.worldgen.ConfiguredFeatureRegistry; +import com.sammy.malum.registry.common.worldgen.PlacedFeatureRegistry; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; + +import java.util.Set; +import java.util.concurrent.CompletableFuture; + +public class MalumWorldgenProvider extends DatapackBuiltinEntriesProvider { + + public MalumWorldgenProvider(PackOutput output, CompletableFuture registries) { + super(output, registries, Set.of(MalumMod.MALUM)); + } + + private static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() + .add(Registries.CONFIGURED_FEATURE, ConfiguredFeatureRegistry::bootstrap) + .add(Registries.PLACED_FEATURE, PlacedFeatureRegistry::bootstrap); +} diff --git a/src/main/java/com/sammy/malum/data/block/MalumBlockLootTables.java b/src/main/java/com/sammy/malum/data/block/MalumBlockLootTables.java index 63096aa30..2dbf8a6d3 100644 --- a/src/main/java/com/sammy/malum/data/block/MalumBlockLootTables.java +++ b/src/main/java/com/sammy/malum/data/block/MalumBlockLootTables.java @@ -3,15 +3,14 @@ import com.google.common.collect.ImmutableSet; import com.mojang.datafixers.util.Pair; import com.sammy.malum.common.block.ether.EtherBlock; -import com.sammy.malum.common.block.storage.vial.SoulVialBlock; import com.sammy.malum.common.block.storage.jar.SpiritJarBlock; +import com.sammy.malum.common.block.storage.vial.SoulVialBlock; import com.sammy.malum.registry.common.block.BlockRegistry; import com.sammy.malum.registry.common.item.ItemRegistry; import net.minecraft.advancements.critereon.EnchantmentPredicate; import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.advancements.critereon.StatePropertiesPredicate; -import net.minecraft.core.Registry; import net.minecraft.data.PackOutput; import net.minecraft.data.loot.BlockLootSubProvider; import net.minecraft.data.loot.LootTableProvider; @@ -28,7 +27,6 @@ import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.ValidationContext; import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer; import net.minecraft.world.level.storage.loot.functions.*; @@ -43,7 +41,10 @@ import net.minecraftforge.registries.RegistryObject; import team.lodestar.lodestone.systems.block.LodestoneBlockProperties; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; @@ -72,6 +73,7 @@ public MalumBlockLootTables(PackOutput pOutput) { new SubProviderEntry(BlocksLoot::new, LootContextParamSets.BLOCK)) ); } + public static class BlocksLoot extends BlockLootSubProvider { protected BlocksLoot() { @@ -84,8 +86,8 @@ protected void generate() { takeAll(blocks, b -> b.get().properties instanceof LodestoneBlockProperties && ((LodestoneBlockProperties) b.get().properties).getDatagenData().hasInheritedLootTable); - add(take(blocks, BlockRegistry.RUNEWOOD_LEAVES).get(), (b)->createLeavesDrops(b, BlockRegistry.RUNEWOOD_SAPLING.get(), MAGIC_SAPLING_DROP_CHANCE)); - add(take(blocks, BlockRegistry.SOULWOOD_LEAVES).get(), (b)->createLeavesDrops(b, BlockRegistry.SOULWOOD_GROWTH.get(), MAGIC_SAPLING_DROP_CHANCE)); + add(take(blocks, BlockRegistry.RUNEWOOD_LEAVES).get(), (b) -> createLeavesDrops(b, BlockRegistry.RUNEWOOD_SAPLING.get(), MAGIC_SAPLING_DROP_CHANCE)); + add(take(blocks, BlockRegistry.SOULWOOD_LEAVES).get(), (b) -> createLeavesDrops(b, BlockRegistry.SOULWOOD_GROWTH.get(), MAGIC_SAPLING_DROP_CHANCE)); add(take(blocks, BlockRegistry.BLIGHTED_SOULWOOD).get(), createSingleItemTableWithSilkTouch(BlockRegistry.BLIGHTED_SOULWOOD.get(), ItemRegistry.SOULWOOD_LOG.get())); add(take(blocks, BlockRegistry.BLIGHTED_SOIL).get(), createBlightedDrop(BlockRegistry.BLIGHTED_SOIL.get(), 4)); @@ -121,11 +123,11 @@ protected void generate() { protected static > T applyExplosionDecay(ItemLike p_124132_, FunctionUserBuilder p_124133_) { - return (T)(!EXPLOSION_RESISTANT.contains(p_124132_.asItem()) ? p_124133_.apply(ApplyExplosionDecay.explosionDecay()) : p_124133_.unwrap()); + return !EXPLOSION_RESISTANT.contains(p_124132_.asItem()) ? p_124133_.apply(ApplyExplosionDecay.explosionDecay()) : p_124133_.unwrap(); } protected static > T applyExplosionCondition(ItemLike p_124135_, ConditionUserBuilder p_124136_) { - return (T)(!EXPLOSION_RESISTANT.contains(p_124135_.asItem()) ? p_124136_.when(ExplosionCondition.survivesExplosion()) : p_124136_.unwrap()); + return !EXPLOSION_RESISTANT.contains(p_124135_.asItem()) ? p_124136_.when(ExplosionCondition.survivesExplosion()) : p_124136_.unwrap(); } protected static LootTable.Builder createBlightedDrop(Block block, int gunkAmount) { @@ -226,7 +228,7 @@ protected Iterable getKnownBlocks() { public void dropPottedContents(Block p_124253_) { this.add(p_124253_, (p_176061_) -> { - return createPotFlowerItemTable(((FlowerPotBlock)p_176061_).getContent()); + return createPotFlowerItemTable(((FlowerPotBlock) p_176061_).getContent()); }); } @@ -255,6 +257,6 @@ protected void add(Block block, LootTable.Builder builder) { } protected void add(ResourceLocation path, LootTable.Builder lootTable) { - tables.add(Pair.of(() -> (lootBuilder) -> lootBuilder.accept(path, lootTable), LootContextParamSets.BLOCK)); + tables.add(Pair.of(() -> (lootBuilder) -> lootBuilder.accept(path, lootTable), LootContextParamSets.BLOCK)); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/data/block/MalumBlockStateSmithTypes.java b/src/main/java/com/sammy/malum/data/block/MalumBlockStateSmithTypes.java index 970395fb6..e73dd11d2 100644 --- a/src/main/java/com/sammy/malum/data/block/MalumBlockStateSmithTypes.java +++ b/src/main/java/com/sammy/malum/data/block/MalumBlockStateSmithTypes.java @@ -1,21 +1,22 @@ package com.sammy.malum.data.block; -import com.sammy.malum.common.block.curiosities.totem.*; -import com.sammy.malum.common.block.curiosities.weeping_well.*; -import com.sammy.malum.common.block.ether.*; -import com.sammy.malum.core.systems.spirit.*; -import com.sammy.malum.data.item.*; -import com.sammy.malum.registry.common.*; -import net.minecraft.resources.*; -import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.state.properties.*; -import net.minecraftforge.client.model.generators.*; -import team.lodestar.lodestone.systems.datagen.*; -import team.lodestar.lodestone.systems.datagen.statesmith.*; +import com.sammy.malum.common.block.curiosities.totem.TotemPoleBlock; +import com.sammy.malum.common.block.curiosities.weeping_well.PrimordialSoupBlock; +import com.sammy.malum.common.block.ether.EtherBrazierBlock; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.data.item.MalumItemModelSmithTypes; +import com.sammy.malum.registry.common.SpiritTypeRegistry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraftforge.client.model.generators.ConfiguredModel; +import net.minecraftforge.client.model.generators.ModelFile; +import team.lodestar.lodestone.systems.datagen.ItemModelSmithTypes; +import team.lodestar.lodestone.systems.datagen.statesmith.BlockStateSmith; -import java.util.function.*; +import java.util.function.Function; -import static com.sammy.malum.MalumMod.*; +import static com.sammy.malum.MalumMod.malumPath; public class MalumBlockStateSmithTypes { diff --git a/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java b/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java index 0ba907612..af9b286d5 100644 --- a/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java +++ b/src/main/java/com/sammy/malum/data/block/MalumBlockStates.java @@ -1,22 +1,26 @@ package com.sammy.malum.data.block; -import com.sammy.malum.*; -import com.sammy.malum.data.item.*; -import net.minecraft.data.*; -import net.minecraft.resources.*; -import net.minecraft.server.packs.repository.Pack; -import net.minecraft.world.level.block.*; -import net.minecraftforge.client.model.generators.*; -import net.minecraftforge.common.data.*; -import team.lodestar.lodestone.systems.datagen.*; -import team.lodestar.lodestone.systems.datagen.providers.*; -import team.lodestar.lodestone.systems.datagen.statesmith.*; - -import javax.annotation.*; -import java.util.*; -import java.util.function.*; - -import static com.sammy.malum.MalumMod.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.data.item.MalumItemModelSmithTypes; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.client.model.generators.ConfiguredModel; +import net.minecraftforge.client.model.generators.ModelFile; +import net.minecraftforge.common.data.ExistingFileHelper; +import team.lodestar.lodestone.systems.datagen.BlockStateSmithTypes; +import team.lodestar.lodestone.systems.datagen.ItemModelSmithTypes; +import team.lodestar.lodestone.systems.datagen.providers.LodestoneBlockStateProvider; +import team.lodestar.lodestone.systems.datagen.providers.LodestoneItemModelProvider; +import team.lodestar.lodestone.systems.datagen.statesmith.AbstractBlockStateSmith; + +import javax.annotation.Nonnull; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Supplier; + +import static com.sammy.malum.MalumMod.MALUM; +import static com.sammy.malum.MalumMod.malumPath; import static com.sammy.malum.registry.common.block.BlockRegistry.*; public class MalumBlockStates extends LodestoneBlockStateProvider { @@ -268,7 +272,7 @@ public ModelFile layeredBlockModel(Block block) { String name = getBlockName(block); ResourceLocation parent = malumPath("block/templates/template_glowing_block"); ResourceLocation texture = getBlockTexture(name); - ResourceLocation glowingTexture = getBlockTexture(name+"_glow"); + ResourceLocation glowingTexture = getBlockTexture(name + "_glow"); return models().withExistingParent(name, parent).texture("all", texture).texture("glow", glowingTexture).texture("particle", texture); } @@ -284,6 +288,7 @@ public ModelFile etherTorchModel(Block block) { public ModelFile wallEtherTorchModel(Block block) { return models().getExistingFile(malumPath("block/ether_torch_wall")); } + public ModelFile totemBaseModel(Block block) { String name = getBlockName(block); String woodName = name.substring(0, 8); diff --git a/src/main/java/com/sammy/malum/data/block/MalumBlockTags.java b/src/main/java/com/sammy/malum/data/block/MalumBlockTags.java index d0147290d..26b42f34c 100644 --- a/src/main/java/com/sammy/malum/data/block/MalumBlockTags.java +++ b/src/main/java/com/sammy/malum/data/block/MalumBlockTags.java @@ -1,22 +1,22 @@ package com.sammy.malum.data.block; -import com.sammy.malum.*; -import com.sammy.malum.registry.common.block.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.registry.common.block.BlockTagRegistry; import net.minecraft.core.HolderLookup; -import net.minecraft.data.*; -import net.minecraft.world.level.block.*; -import net.minecraftforge.common.data.*; -import net.minecraftforge.registries.*; +import net.minecraft.data.PackOutput; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.common.data.ExistingFileHelper; +import net.minecraftforge.registries.RegistryObject; import org.jetbrains.annotations.Nullable; -import team.lodestar.lodestone.systems.datagen.providers.*; +import team.lodestar.lodestone.systems.datagen.providers.LodestoneBlockTagsProvider; -import javax.annotation.*; +import javax.annotation.Nonnull; import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.function.*; -import java.util.stream.*; +import java.util.function.Predicate; +import java.util.stream.Collectors; -import static com.sammy.malum.registry.common.block.BlockRegistry.*; +import static com.sammy.malum.registry.common.block.BlockRegistry.BLOCKS; public class MalumBlockTags extends LodestoneBlockTagsProvider { diff --git a/src/main/java/com/sammy/malum/data/item/MalumItemModelSmithTypes.java b/src/main/java/com/sammy/malum/data/item/MalumItemModelSmithTypes.java index b31a3804c..e1208a7cd 100644 --- a/src/main/java/com/sammy/malum/data/item/MalumItemModelSmithTypes.java +++ b/src/main/java/com/sammy/malum/data/item/MalumItemModelSmithTypes.java @@ -1,15 +1,19 @@ package com.sammy.malum.data.item; -import com.sammy.malum.common.item.cosmetic.skins.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.resources.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.datagen.itemsmith.*; -import team.lodestar.lodestone.systems.item.*; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import com.sammy.malum.registry.common.item.ArmorSkinRegistry; +import net.minecraft.resources.ResourceLocation; +import team.lodestar.lodestone.helpers.DataHelper; +import team.lodestar.lodestone.systems.datagen.itemsmith.ItemModelSmith; +import team.lodestar.lodestone.systems.item.LodestoneArmorItem; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; -import static team.lodestar.lodestone.systems.datagen.ItemModelSmithTypes.*; +import static team.lodestar.lodestone.systems.datagen.ItemModelSmithTypes.GENERATED; +import static team.lodestar.lodestone.systems.datagen.ItemModelSmithTypes.HANDHELD; public class MalumItemModelSmithTypes { @@ -31,33 +35,33 @@ public class MalumItemModelSmithTypes { public static ItemModelSmith GENERATED_OVERLAY_ITEM = new ItemModelSmith((item, provider) -> { String name = provider.getItemName(item); - provider.withExistingParent(name, GENERATED).texture("layer0", provider.modLoc("item/"+name)).texture("layer1", provider.modLoc("item/"+name+"_overlay")); + provider.withExistingParent(name, GENERATED).texture("layer0", provider.modLoc("item/" + name)).texture("layer1", provider.modLoc("item/" + name + "_overlay")); }); public static ItemModelSmith HANDHELD_OVERLAY_ITEM = new ItemModelSmith((item, provider) -> { String name = provider.getItemName(item); - provider.withExistingParent(name, HANDHELD).texture("layer0", provider.modLoc("item/"+name)).texture("layer1", provider.modLoc("item/"+name+"_overlay")); + provider.withExistingParent(name, HANDHELD).texture("layer0", provider.modLoc("item/" + name)).texture("layer1", provider.modLoc("item/" + name + "_overlay")); }); public static ItemModelSmith ETHER_BRAZIER_ITEM = new ItemModelSmith((item, provider) -> { String name = provider.getItemName(item); String rockType = name.split("_")[0]; String brazierName = rockType + "_ether_brazier"; - String overlayName = name.replace(rockType+"_", ""); - provider.withExistingParent(name, GENERATED).texture("layer0", provider.modLoc("item/"+brazierName)).texture("layer1", provider.modLoc("item/"+overlayName+"_overlay")); + String overlayName = name.replace(rockType + "_", ""); + provider.withExistingParent(name, GENERATED).texture("layer0", provider.modLoc("item/" + brazierName)).texture("layer1", provider.modLoc("item/" + overlayName + "_overlay")); }); public static ItemModelSmith IRIDESCENT_ETHER_BRAZIER_ITEM = new ItemModelSmith((item, provider) -> { String name = provider.getItemName(item); String rockType = name.split("_")[0]; String brazierName = rockType + "_ether_brazier"; - String overlayName = name.replace(rockType+"_", ""); - provider.withExistingParent(name, GENERATED).texture("layer0", provider.modLoc("item/"+brazierName)).texture("layer1", provider.modLoc("item/"+overlayName)).texture("layer2", provider.modLoc("item/"+overlayName+"_overlay")); + String overlayName = name.replace(rockType + "_", ""); + provider.withExistingParent(name, GENERATED).texture("layer0", provider.modLoc("item/" + brazierName)).texture("layer1", provider.modLoc("item/" + overlayName)).texture("layer2", provider.modLoc("item/" + overlayName + "_overlay")); }); public static ItemModelSmith IRIDESCENT_ETHER_TORCH_ITEM = new ItemModelSmith((item, provider) -> { String name = provider.getItemName(item); - provider.withExistingParent(name, HANDHELD).texture("layer0", provider.modLoc("item/ether_torch")).texture("layer1", provider.modLoc("item/"+name)).texture("layer2", provider.modLoc("item/"+name+"_overlay")); + provider.withExistingParent(name, HANDHELD).texture("layer0", provider.modLoc("item/ether_torch")).texture("layer1", provider.modLoc("item/" + name)).texture("layer2", provider.modLoc("item/" + name + "_overlay")); }); diff --git a/src/main/java/com/sammy/malum/data/item/MalumItemModels.java b/src/main/java/com/sammy/malum/data/item/MalumItemModels.java index ebc495c37..3df413e0b 100644 --- a/src/main/java/com/sammy/malum/data/item/MalumItemModels.java +++ b/src/main/java/com/sammy/malum/data/item/MalumItemModels.java @@ -1,28 +1,31 @@ package com.sammy.malum.data.item; -import com.sammy.malum.*; -import com.sammy.malum.common.item.cosmetic.weaves.*; -import com.sammy.malum.common.item.curiosities.weapons.*; -import com.sammy.malum.common.item.ether.*; -import com.sammy.malum.common.item.impetus.*; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.core.*; -import net.minecraft.data.*; -import net.minecraft.world.item.*; -import net.minecraftforge.common.data.*; -import net.minecraftforge.registries.*; -import team.lodestar.lodestone.systems.datagen.*; -import team.lodestar.lodestone.systems.datagen.itemsmith.*; -import team.lodestar.lodestone.systems.datagen.providers.*; -import team.lodestar.lodestone.systems.item.*; - -import java.util.*; -import java.util.function.*; - -import static com.sammy.malum.MalumMod.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.item.cosmetic.weaves.AbstractWeaveItem; +import com.sammy.malum.common.item.cosmetic.weaves.PrideweaveItem; +import com.sammy.malum.common.item.curiosities.weapons.MalumScytheItem; +import com.sammy.malum.common.item.impetus.CrackedImpetusItem; +import com.sammy.malum.common.item.impetus.ImpetusItem; +import com.sammy.malum.common.item.impetus.NodeItem; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.common.item.spirit.TunedOpticItem; +import com.sammy.malum.registry.common.item.ArmorSkinRegistry; +import net.minecraft.data.PackOutput; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.DiggerItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.SwordItem; +import net.minecraftforge.common.data.ExistingFileHelper; +import team.lodestar.lodestone.systems.datagen.ItemModelSmithTypes; +import team.lodestar.lodestone.systems.datagen.itemsmith.AbstractItemModelSmith; +import team.lodestar.lodestone.systems.datagen.providers.LodestoneItemModelProvider; +import team.lodestar.lodestone.systems.item.ModCombatItem; + +import java.util.HashSet; +import java.util.Set; +import java.util.function.Supplier; + import static com.sammy.malum.registry.common.item.ItemRegistry.*; -import static team.lodestar.lodestone.systems.datagen.ItemModelSmithTypes.*; public class MalumItemModels extends LodestoneItemModelProvider { public MalumItemModels(PackOutput output, ExistingFileHelper existingFileHelper) { diff --git a/src/main/java/com/sammy/malum/data/item/MalumItemTags.java b/src/main/java/com/sammy/malum/data/item/MalumItemTags.java index a9a65cbb2..64c397b45 100644 --- a/src/main/java/com/sammy/malum/data/item/MalumItemTags.java +++ b/src/main/java/com/sammy/malum/data/item/MalumItemTags.java @@ -5,7 +5,6 @@ import com.sammy.malum.registry.common.block.BlockTagRegistry; import com.sammy.malum.registry.common.item.ItemTagRegistry; import net.minecraft.core.HolderLookup; -import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritFocusingRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritFocusingRecipes.java index f0908e110..3e6f16ac8 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritFocusingRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritFocusingRecipes.java @@ -5,7 +5,6 @@ import com.sammy.malum.data.recipe.builder.SpiritFocusingRecipeBuilder; import com.sammy.malum.data.recipe.builder.SpiritRepairRecipeBuilder; import com.sammy.malum.registry.common.item.ItemRegistry; -import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeProvider; diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java index d6d9837a8..0a56fab63 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java @@ -1,20 +1,24 @@ package com.sammy.malum.data.recipe; -import com.sammy.malum.*; -import com.sammy.malum.common.item.impetus.*; -import com.sammy.malum.data.recipe.builder.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.data.*; -import net.minecraft.data.recipes.*; -import net.minecraft.tags.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; -import net.minecraftforge.common.*; -import net.minecraftforge.common.crafting.*; -import net.minecraftforge.common.crafting.conditions.*; -import net.minecraftforge.registries.*; - -import java.util.function.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.item.impetus.ImpetusItem; +import com.sammy.malum.data.recipe.builder.SpiritInfusionRecipeBuilder; +import com.sammy.malum.registry.common.item.ItemRegistry; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.crafting.ConditionalRecipe; +import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.crafting.conditions.TagEmptyCondition; +import net.minecraftforge.registries.RegistryObject; + +import java.util.function.Consumer; import static com.sammy.malum.registry.common.SpiritTypeRegistry.*; import static team.lodestar.lodestone.registry.common.tag.LodestoneItemTags.*; @@ -25,7 +29,6 @@ public MalumSpiritInfusionRecipes(PackOutput generatorIn) { } - @Override protected void buildRecipes(Consumer consumer) { new SpiritInfusionRecipeBuilder(Items.GUNPOWDER, 1, ItemRegistry.HEX_ASH.get(), 1) diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritTransmutationRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritTransmutationRecipes.java index 956f25e3a..66790a444 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritTransmutationRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritTransmutationRecipes.java @@ -2,7 +2,6 @@ import com.mojang.datafixers.util.Pair; import com.sammy.malum.data.recipe.builder.SpiritTransmutationRecipeBuilder; -import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeProvider; @@ -21,112 +20,112 @@ public MalumSpiritTransmutationRecipes(PackOutput generatorIn) { } private static final List, RegistryObject>> SOULWOOD_TRANSMUTATIONS = List.of( - new Pair<>(RUNEWOOD_SAPLING, SOULWOOD_GROWTH), - new Pair<>(RUNEWOOD_LEAVES, SOULWOOD_LEAVES), - new Pair<>(STRIPPED_RUNEWOOD_LOG, STRIPPED_SOULWOOD_LOG), - new Pair<>(RUNEWOOD_LOG, SOULWOOD_LOG), - new Pair<>(STRIPPED_RUNEWOOD, STRIPPED_SOULWOOD), - new Pair<>(RUNEWOOD, SOULWOOD), - new Pair<>(REVEALED_RUNEWOOD_LOG, REVEALED_SOULWOOD_LOG), - new Pair<>(EXPOSED_RUNEWOOD_LOG, EXPOSED_SOULWOOD_LOG), - new Pair<>(RUNEWOOD_PLANKS, SOULWOOD_PLANKS), - new Pair<>(RUNEWOOD_PLANKS_SLAB, SOULWOOD_PLANKS_SLAB), - new Pair<>(RUNEWOOD_PLANKS_STAIRS, SOULWOOD_PLANKS_STAIRS), - new Pair<>(VERTICAL_RUNEWOOD_PLANKS, VERTICAL_SOULWOOD_PLANKS), - new Pair<>(VERTICAL_RUNEWOOD_PLANKS_SLAB, VERTICAL_SOULWOOD_PLANKS_SLAB), - new Pair<>(VERTICAL_RUNEWOOD_PLANKS_STAIRS, VERTICAL_SOULWOOD_PLANKS_STAIRS), - new Pair<>(RUNEWOOD_PANEL, SOULWOOD_PANEL), - new Pair<>(RUNEWOOD_PANEL_SLAB, SOULWOOD_PANEL_SLAB), - new Pair<>(RUNEWOOD_PANEL_STAIRS, SOULWOOD_PANEL_STAIRS), - new Pair<>(RUNEWOOD_TILES, SOULWOOD_TILES), - new Pair<>(RUNEWOOD_TILES_SLAB, SOULWOOD_TILES_SLAB), - new Pair<>(RUNEWOOD_TILES_STAIRS, SOULWOOD_TILES_STAIRS), - new Pair<>(CUT_RUNEWOOD_PLANKS, CUT_SOULWOOD_PLANKS), - new Pair<>(RUNEWOOD_BEAM, SOULWOOD_BEAM), - new Pair<>(RUNEWOOD_DOOR, SOULWOOD_DOOR), - new Pair<>(RUNEWOOD_TRAPDOOR, SOULWOOD_TRAPDOOR), - new Pair<>(SOLID_RUNEWOOD_TRAPDOOR, SOLID_SOULWOOD_TRAPDOOR), - new Pair<>(RUNEWOOD_BUTTON, SOULWOOD_BUTTON), - new Pair<>(RUNEWOOD_PRESSURE_PLATE, SOULWOOD_PRESSURE_PLATE), - new Pair<>(RUNEWOOD_FENCE, SOULWOOD_FENCE), - new Pair<>(RUNEWOOD_FENCE_GATE, SOULWOOD_FENCE_GATE), - new Pair<>(RUNEWOOD_ITEM_STAND, SOULWOOD_ITEM_STAND), - new Pair<>(RUNEWOOD_ITEM_PEDESTAL, SOULWOOD_ITEM_PEDESTAL), - new Pair<>(RUNEWOOD_SIGN, SOULWOOD_SIGN) // Wall sign already handled by this. Is it??? Wire? Huh ? How + new Pair<>(RUNEWOOD_SAPLING, SOULWOOD_GROWTH), + new Pair<>(RUNEWOOD_LEAVES, SOULWOOD_LEAVES), + new Pair<>(STRIPPED_RUNEWOOD_LOG, STRIPPED_SOULWOOD_LOG), + new Pair<>(RUNEWOOD_LOG, SOULWOOD_LOG), + new Pair<>(STRIPPED_RUNEWOOD, STRIPPED_SOULWOOD), + new Pair<>(RUNEWOOD, SOULWOOD), + new Pair<>(REVEALED_RUNEWOOD_LOG, REVEALED_SOULWOOD_LOG), + new Pair<>(EXPOSED_RUNEWOOD_LOG, EXPOSED_SOULWOOD_LOG), + new Pair<>(RUNEWOOD_PLANKS, SOULWOOD_PLANKS), + new Pair<>(RUNEWOOD_PLANKS_SLAB, SOULWOOD_PLANKS_SLAB), + new Pair<>(RUNEWOOD_PLANKS_STAIRS, SOULWOOD_PLANKS_STAIRS), + new Pair<>(VERTICAL_RUNEWOOD_PLANKS, VERTICAL_SOULWOOD_PLANKS), + new Pair<>(VERTICAL_RUNEWOOD_PLANKS_SLAB, VERTICAL_SOULWOOD_PLANKS_SLAB), + new Pair<>(VERTICAL_RUNEWOOD_PLANKS_STAIRS, VERTICAL_SOULWOOD_PLANKS_STAIRS), + new Pair<>(RUNEWOOD_PANEL, SOULWOOD_PANEL), + new Pair<>(RUNEWOOD_PANEL_SLAB, SOULWOOD_PANEL_SLAB), + new Pair<>(RUNEWOOD_PANEL_STAIRS, SOULWOOD_PANEL_STAIRS), + new Pair<>(RUNEWOOD_TILES, SOULWOOD_TILES), + new Pair<>(RUNEWOOD_TILES_SLAB, SOULWOOD_TILES_SLAB), + new Pair<>(RUNEWOOD_TILES_STAIRS, SOULWOOD_TILES_STAIRS), + new Pair<>(CUT_RUNEWOOD_PLANKS, CUT_SOULWOOD_PLANKS), + new Pair<>(RUNEWOOD_BEAM, SOULWOOD_BEAM), + new Pair<>(RUNEWOOD_DOOR, SOULWOOD_DOOR), + new Pair<>(RUNEWOOD_TRAPDOOR, SOULWOOD_TRAPDOOR), + new Pair<>(SOLID_RUNEWOOD_TRAPDOOR, SOLID_SOULWOOD_TRAPDOOR), + new Pair<>(RUNEWOOD_BUTTON, SOULWOOD_BUTTON), + new Pair<>(RUNEWOOD_PRESSURE_PLATE, SOULWOOD_PRESSURE_PLATE), + new Pair<>(RUNEWOOD_FENCE, SOULWOOD_FENCE), + new Pair<>(RUNEWOOD_FENCE_GATE, SOULWOOD_FENCE_GATE), + new Pair<>(RUNEWOOD_ITEM_STAND, SOULWOOD_ITEM_STAND), + new Pair<>(RUNEWOOD_ITEM_PEDESTAL, SOULWOOD_ITEM_PEDESTAL), + new Pair<>(RUNEWOOD_SIGN, SOULWOOD_SIGN) // Wall sign already handled by this. Is it??? Wire? Huh ? How ); @Override protected void buildRecipes(Consumer consumer) { for (var transmutation : SOULWOOD_TRANSMUTATIONS) { new SpiritTransmutationRecipeBuilder(transmutation.getFirst(), transmutation.getSecond()) - .group("soulwood") - .build(consumer, "soulwood/" + transmutation.getSecond().getId().getPath().replace("soulwood_", "").replace("_soulwood", "")); + .group("soulwood") + .build(consumer, "soulwood/" + transmutation.getSecond().getId().getPath().replace("soulwood_", "").replace("_soulwood", "")); } new SpiritTransmutationRecipeBuilder(Blocks.STONE, Blocks.COBBLESTONE) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.COBBLESTONE, Blocks.GRAVEL) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.GRAVEL, Blocks.SAND) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.SAND, BLIGHTED_SOIL.get()) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.ANDESITE, Blocks.TUFF) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.TUFF, Blocks.STONE) - .build(consumer, "tuff_block_to_stone"); + .build(consumer, "tuff_block_to_stone"); new SpiritTransmutationRecipeBuilder(Blocks.GRANITE, Blocks.DRIPSTONE_BLOCK) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.DRIPSTONE_BLOCK, Blocks.STONE) - .build(consumer, "dripstone_block_to_stone"); + .build(consumer, "dripstone_block_to_stone"); new SpiritTransmutationRecipeBuilder(Blocks.DIORITE, Blocks.CALCITE) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.CALCITE, Blocks.STONE) - .build(consumer, "calcite_to_stone"); + .build(consumer, "calcite_to_stone"); new SpiritTransmutationRecipeBuilder(Blocks.DEEPSLATE, Blocks.COBBLED_DEEPSLATE) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.COBBLED_DEEPSLATE, Blocks.BASALT) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.BASALT, Blocks.NETHERRACK) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.NETHERRACK, Blocks.SOUL_SAND) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.SOUL_SAND, Blocks.RED_SAND) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.RED_SAND, BLIGHTED_SOIL.get()) - .build(consumer, "red_sand_to_blighted_soil"); + .build(consumer, "red_sand_to_blighted_soil"); new SpiritTransmutationRecipeBuilder(Blocks.SMOOTH_BASALT, Blocks.CLAY) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.CLAY, Blocks.PRISMARINE) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.PRISMARINE, Blocks.SEA_LANTERN) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.SEA_LANTERN, Blocks.SNOW_BLOCK) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.SNOW_BLOCK, Blocks.ICE) - .build(consumer); + .build(consumer); new SpiritTransmutationRecipeBuilder(Blocks.ICE, BLIGHTED_SOIL.get()) - .build(consumer, "ice_to_blighted_soil"); + .build(consumer, "ice_to_blighted_soil"); } } diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipeReplacements.java b/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipeReplacements.java index 7c37ebdb1..077ac3ae2 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipeReplacements.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipeReplacements.java @@ -1,9 +1,5 @@ package com.sammy.malum.data.recipe; -import com.google.gson.JsonObject; -import net.minecraft.data.CachedOutput; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.HashCache; import net.minecraft.data.PackOutput; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeProvider; @@ -11,19 +7,15 @@ import net.minecraft.data.recipes.ShapelessRecipeBuilder; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; -import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.ItemLike; import net.minecraftforge.common.Tags; -import org.jetbrains.annotations.Nullable; import java.lang.reflect.Field; -import java.nio.file.Path; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; public class MalumVanillaRecipeReplacements extends RecipeProvider { @@ -62,20 +54,18 @@ private void replace(ItemLike item, TagKey tag) { private FinishedRecipe enhance(FinishedRecipe vanilla) { if (vanilla instanceof ShapelessRecipeBuilder.Result) - return enhance((ShapelessRecipeBuilder.Result)vanilla); + return enhance((ShapelessRecipeBuilder.Result) vanilla); if (vanilla instanceof ShapedRecipeBuilder.Result) - return enhance((ShapedRecipeBuilder.Result)vanilla); + return enhance((ShapedRecipeBuilder.Result) vanilla); return null; } private FinishedRecipe enhance(ShapelessRecipeBuilder.Result vanilla) { List ingredients = getField(ShapelessRecipeBuilder.Result.class, vanilla, 4); boolean modified = false; - for (int x = 0; x < ingredients.size(); x++) - { + for (int x = 0; x < ingredients.size(); x++) { Ingredient ing = enhance(vanilla.getId(), ingredients.get(x)); - if (ing != null) - { + if (ing != null) { ingredients.set(x, ing); modified = true; } @@ -86,11 +76,9 @@ private FinishedRecipe enhance(ShapelessRecipeBuilder.Result vanilla) { private FinishedRecipe enhance(ShapedRecipeBuilder.Result vanilla) { Map ingredients = getField(ShapedRecipeBuilder.Result.class, vanilla, 5); boolean modified = false; - for (Character x : ingredients.keySet()) - { + for (Character x : ingredients.keySet()) { Ingredient ing = enhance(vanilla.getId(), ingredients.get(x)); - if (ing != null) - { + if (ing != null) { ingredients.put(x, ing); modified = true; } @@ -105,21 +93,16 @@ private Ingredient enhance(ResourceLocation name, Ingredient vanilla) { boolean modified = false; List items = new ArrayList<>(); Ingredient.Value[] vanillaItems = getField(Ingredient.class, vanilla, 2); //This will probably crash between versions, if null fix index - for (Ingredient.Value entry : vanillaItems) - { - if (entry instanceof Ingredient.ItemValue) - { + for (Ingredient.Value entry : vanillaItems) { + if (entry instanceof Ingredient.ItemValue) { ItemStack stack = entry.getItems().stream().findFirst().orElse(ItemStack.EMPTY); TagKey replacement = replacements.get(stack.getItem()); - if (replacement != null) - { + if (replacement != null) { items.add(new Ingredient.TagValue(replacement)); modified = true; - } - else + } else items.add(entry); - } - else + } else items.add(entry); } return modified ? Ingredient.fromValues(items.stream()) : null; @@ -129,12 +112,9 @@ private Ingredient enhance(ResourceLocation name, Ingredient vanilla) { private R getField(Class clz, T inst, int index) { Field fld = clz.getDeclaredFields()[index]; fld.setAccessible(true); - try - { - return (R)fld.get(inst); - } - catch (IllegalArgumentException | IllegalAccessException e) - { + try { + return (R) fld.get(inst); + } catch (IllegalArgumentException | IllegalAccessException e) { throw new RuntimeException(e); } } diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumVoidFavorRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumVoidFavorRecipes.java index b90b1fe42..a55da9baf 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumVoidFavorRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumVoidFavorRecipes.java @@ -1,14 +1,15 @@ package com.sammy.malum.data.recipe; -import com.sammy.malum.data.recipe.builder.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.data.*; -import net.minecraft.data.recipes.*; -import net.minecraft.world.item.*; -import net.minecraft.world.item.crafting.*; -import net.minecraftforge.common.*; +import com.sammy.malum.data.recipe.builder.VoidFavorRecipeBuilder; +import com.sammy.malum.registry.common.item.ItemRegistry; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraftforge.common.Tags; -import java.util.function.*; +import java.util.function.Consumer; public class MalumVoidFavorRecipes extends RecipeProvider { public MalumVoidFavorRecipes(PackOutput generatorIn) { diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritFocusingRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritFocusingRecipeBuilder.java index ec5edc314..e0ade0a07 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritFocusingRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritFocusingRecipeBuilder.java @@ -5,9 +5,9 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.sammy.malum.MalumMod; -import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import com.sammy.malum.core.systems.recipe.SpiritWithCount; import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritInfusionRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritInfusionRecipeBuilder.java index c177176d3..420d16ad1 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritInfusionRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritInfusionRecipeBuilder.java @@ -5,9 +5,9 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.sammy.malum.MalumMod; -import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import com.sammy.malum.core.systems.recipe.SpiritWithCount; import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritRepairRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritRepairRecipeBuilder.java index dbc535509..3c059649c 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritRepairRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritRepairRecipeBuilder.java @@ -3,9 +3,9 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.sammy.malum.MalumMod; -import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import com.sammy.malum.core.systems.recipe.SpiritWithCount; import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.registry.common.recipe.RecipeSerializerRegistry; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; @@ -33,10 +33,12 @@ public SpiritRepairRecipeBuilder(String itemIdRegex, String modIdRegex, float du this.durabilityPercentage = durabilityPercentage; this.repairMaterial = repairMaterial; } + public SpiritRepairRecipeBuilder(String itemIdRegex, float durabilityPercentage, Ingredient repairMaterial, int repairMaterialCount) { this(itemIdRegex, "", durabilityPercentage, new IngredientWithCount(repairMaterial, repairMaterialCount)); } + public SpiritRepairRecipeBuilder(float durabilityPercentage, Ingredient repairMaterial, int repairMaterialCount) { this("", "", durabilityPercentage, new IngredientWithCount(repairMaterial, repairMaterialCount)); } diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/VoidFavorRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/VoidFavorRecipeBuilder.java index 1b0283701..e2f064c32 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/VoidFavorRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/VoidFavorRecipeBuilder.java @@ -10,7 +10,6 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.ItemLike; -import team.lodestar.lodestone.systems.recipe.IngredientWithCount; import javax.annotation.Nullable; import java.util.function.Consumer; diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/MetalNodeCookingRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/MetalNodeCookingRecipeBuilder.java index 2d9fded27..4c4c1cb3d 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/MetalNodeCookingRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/MetalNodeCookingRecipeBuilder.java @@ -15,102 +15,102 @@ import java.util.function.Consumer; public class MetalNodeCookingRecipeBuilder { - private final IngredientWithCount result; - private final Ingredient ingredient; - private final float experience; - private final int cookingTime; - private final Advancement.Builder advancement = Advancement.Builder.advancement(); - @Nullable - private String group; - private final RecipeSerializer serializer; - - private MetalNodeCookingRecipeBuilder(IngredientWithCount result, Ingredient pIngredient, float pExperience, int pCookingTime, RecipeSerializer pSerializer) { - this.result = result; - this.ingredient = pIngredient; - this.experience = pExperience; - this.cookingTime = pCookingTime; - this.serializer = pSerializer; - } - - public static MetalNodeCookingRecipeBuilder cookingWithCount(IngredientWithCount result, Ingredient pIngredient, float pExperience, int pCookingTime, RecipeSerializer pSerializer) { - return new MetalNodeCookingRecipeBuilder(result, pIngredient, pExperience, pCookingTime, pSerializer); - } - - public static MetalNodeCookingRecipeBuilder blastingWithTag(IngredientWithCount result, Ingredient pIngredient, float pExperience, int pCookingTime) { - return cookingWithCount(result, pIngredient, pExperience, pCookingTime, RecipeSerializerRegistry.METAL_NODE_BLASTING_SERIALIZER.get()); - } - - public static MetalNodeCookingRecipeBuilder smeltingWithTag(IngredientWithCount result, Ingredient pIngredient, float pExperience, int pCookingTime) { - return cookingWithCount(result, pIngredient, pExperience, pCookingTime, RecipeSerializerRegistry.METAL_NODE_SMELTING_SERIALIZER.get()); - } - - public MetalNodeCookingRecipeBuilder group(@Nullable String pGroupName) { - this.group = pGroupName; - return this; - } - - - public void build(Consumer consumerIn, String recipeName) { - build(consumerIn, MalumMod.malumPath("node_processing/" + recipeName)); - } - - public void build(Consumer consumerIn) { - build(consumerIn, result.getStack().getItem().getRegistryName().getPath()); - } - - public void build(Consumer consumerIn, ResourceLocation id) { - consumerIn.accept(new MetalNodeCookingRecipeBuilder.Result(id, this.group == null ? "" : this.group, this.ingredient, this.result, this.experience, this.cookingTime, this.advancement, new ResourceLocation(id.getNamespace(), "recipes/metal_node_smelting/" + id.getPath()), this.serializer)); - } - - public static class Result implements FinishedRecipe { - private final ResourceLocation id; - private final String group; - private final Ingredient ingredient; - private final IngredientWithCount result; - private final float experience; - private final int cookingTime; - private final Advancement.Builder advancement; - private final ResourceLocation advancementId; - private final RecipeSerializer serializer; - - public Result(ResourceLocation pId, String pGroup, Ingredient pIngredient, IngredientWithCount result, float pExperience, int pCookingTime, Advancement.Builder pAdvancement, ResourceLocation pAdvancementId, RecipeSerializer pSerializer) { - this.id = pId; - this.group = pGroup; - this.ingredient = pIngredient; - this.result = result; - this.experience = pExperience; - this.cookingTime = pCookingTime; - this.advancement = pAdvancement; - this.advancementId = pAdvancementId; - this.serializer = pSerializer; - } - - public void serializeRecipeData(JsonObject pJson) { - if (!this.group.isEmpty()) { - pJson.addProperty("group", this.group); - } - pJson.add("ingredient", this.ingredient.toJson()); - pJson.add("result", result.serialize()); - pJson.addProperty("experience", this.experience); - pJson.addProperty("cookingtime", this.cookingTime); - } - - public RecipeSerializer getType() { - return this.serializer; - } - - public ResourceLocation getId() { - return this.id; - } - - @Nullable - public JsonObject serializeAdvancement() { - return this.advancement.serializeToJson(); - } - - @Nullable - public ResourceLocation getAdvancementId() { - return this.advancementId; - } - } + private final IngredientWithCount result; + private final Ingredient ingredient; + private final float experience; + private final int cookingTime; + private final Advancement.Builder advancement = Advancement.Builder.advancement(); + @Nullable + private String group; + private final RecipeSerializer serializer; + + private MetalNodeCookingRecipeBuilder(IngredientWithCount result, Ingredient pIngredient, float pExperience, int pCookingTime, RecipeSerializer pSerializer) { + this.result = result; + this.ingredient = pIngredient; + this.experience = pExperience; + this.cookingTime = pCookingTime; + this.serializer = pSerializer; + } + + public static MetalNodeCookingRecipeBuilder cookingWithCount(IngredientWithCount result, Ingredient pIngredient, float pExperience, int pCookingTime, RecipeSerializer pSerializer) { + return new MetalNodeCookingRecipeBuilder(result, pIngredient, pExperience, pCookingTime, pSerializer); + } + + public static MetalNodeCookingRecipeBuilder blastingWithTag(IngredientWithCount result, Ingredient pIngredient, float pExperience, int pCookingTime) { + return cookingWithCount(result, pIngredient, pExperience, pCookingTime, RecipeSerializerRegistry.METAL_NODE_BLASTING_SERIALIZER.get()); + } + + public static MetalNodeCookingRecipeBuilder smeltingWithTag(IngredientWithCount result, Ingredient pIngredient, float pExperience, int pCookingTime) { + return cookingWithCount(result, pIngredient, pExperience, pCookingTime, RecipeSerializerRegistry.METAL_NODE_SMELTING_SERIALIZER.get()); + } + + public MetalNodeCookingRecipeBuilder group(@Nullable String pGroupName) { + this.group = pGroupName; + return this; + } + + + public void build(Consumer consumerIn, String recipeName) { + build(consumerIn, MalumMod.malumPath("node_processing/" + recipeName)); + } + + public void build(Consumer consumerIn) { + build(consumerIn, result.getStack().getItem().getRegistryName().getPath()); + } + + public void build(Consumer consumerIn, ResourceLocation id) { + consumerIn.accept(new MetalNodeCookingRecipeBuilder.Result(id, this.group == null ? "" : this.group, this.ingredient, this.result, this.experience, this.cookingTime, this.advancement, new ResourceLocation(id.getNamespace(), "recipes/metal_node_smelting/" + id.getPath()), this.serializer)); + } + + public static class Result implements FinishedRecipe { + private final ResourceLocation id; + private final String group; + private final Ingredient ingredient; + private final IngredientWithCount result; + private final float experience; + private final int cookingTime; + private final Advancement.Builder advancement; + private final ResourceLocation advancementId; + private final RecipeSerializer serializer; + + public Result(ResourceLocation pId, String pGroup, Ingredient pIngredient, IngredientWithCount result, float pExperience, int pCookingTime, Advancement.Builder pAdvancement, ResourceLocation pAdvancementId, RecipeSerializer pSerializer) { + this.id = pId; + this.group = pGroup; + this.ingredient = pIngredient; + this.result = result; + this.experience = pExperience; + this.cookingTime = pCookingTime; + this.advancement = pAdvancement; + this.advancementId = pAdvancementId; + this.serializer = pSerializer; + } + + public void serializeRecipeData(JsonObject pJson) { + if (!this.group.isEmpty()) { + pJson.addProperty("group", this.group); + } + pJson.add("ingredient", this.ingredient.toJson()); + pJson.add("result", result.serialize()); + pJson.addProperty("experience", this.experience); + pJson.addProperty("cookingtime", this.cookingTime); + } + + public RecipeSerializer getType() { + return this.serializer; + } + + public ResourceLocation getId() { + return this.id; + } + + @Nullable + public JsonObject serializeAdvancement() { + return this.advancement.serializeToJson(); + } + + @Nullable + public ResourceLocation getAdvancementId() { + return this.advancementId; + } + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/StackedMalumCookingRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/StackedMalumCookingRecipeBuilder.java index 05118bd7f..538b89f25 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/StackedMalumCookingRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/StackedMalumCookingRecipeBuilder.java @@ -21,125 +21,125 @@ import java.util.function.Consumer; public class StackedMalumCookingRecipeBuilder implements RecipeBuilder { - private final Item result; - private final int resultCount; - private final Ingredient ingredient; - private final float experience; - private final int cookingTime; - private final Advancement.Builder advancement = Advancement.Builder.advancement(); - @Nullable - private String group; - private final SimpleCookingSerializer serializer; - - private StackedMalumCookingRecipeBuilder(ItemLike pResult, int resultCount, Ingredient pIngredient, float pExperience, int pCookingTime, SimpleCookingSerializer pSerializer) { - this.result = pResult.asItem(); - this.resultCount = resultCount; - this.ingredient = pIngredient; - this.experience = pExperience; - this.cookingTime = pCookingTime; - this.serializer = pSerializer; - } - - public static StackedMalumCookingRecipeBuilder cookingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime, SimpleCookingSerializer pSerializer) { - return new StackedMalumCookingRecipeBuilder(pResult, resultCount, pIngredient, pExperience, pCookingTime, pSerializer); - } - - public static StackedMalumCookingRecipeBuilder campfireCookingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { - return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.CAMPFIRE_COOKING_RECIPE); - } - - public static StackedMalumCookingRecipeBuilder blastingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { - return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.BLASTING_RECIPE); - } - - public static StackedMalumCookingRecipeBuilder smeltingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { - return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.SMELTING_RECIPE); - } - - public static StackedMalumCookingRecipeBuilder smoking(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { - return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.SMOKING_RECIPE); - } - - public StackedMalumCookingRecipeBuilder unlockedBy(String pCriterionName, CriterionTriggerInstance pCriterionTrigger) { - this.advancement.addCriterion(pCriterionName, pCriterionTrigger); - return this; - } - - public StackedMalumCookingRecipeBuilder group(@Nullable String pGroupName) { - this.group = pGroupName; - return this; - } - - public Item getResult() { - return this.result; - } - - public void save(Consumer pFinishedRecipeConsumer, ResourceLocation pRecipeId) { - this.ensureValid(pRecipeId); - this.advancement.parent(new ResourceLocation("recipes/root")).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(pRecipeId)).rewards(AdvancementRewards.Builder.recipe(pRecipeId)).requirements(RequirementsStrategy.OR); - pFinishedRecipeConsumer.accept(new StackedMalumCookingRecipeBuilder.Result(pRecipeId, this.group == null ? "" : this.group, this.ingredient, this.result, this.resultCount, this.experience, this.cookingTime, this.advancement, new ResourceLocation(pRecipeId.getNamespace(), "recipes/" + this.result.getItemCategory().getRecipeFolderName() + "/" + pRecipeId.getPath()), this.serializer)); - } - - private void ensureValid(ResourceLocation pId) { - if (this.advancement.getCriteria().isEmpty()) { - throw new IllegalStateException("No way of obtaining recipe " + pId); - } - } - - public static class Result implements FinishedRecipe { - private final ResourceLocation id; - private final String group; - private final Ingredient ingredient; - private final Item result; - private final int resultCount; - private final float experience; - private final int cookingTime; - private final Advancement.Builder advancement; - private final ResourceLocation advancementId; - private final RecipeSerializer serializer; - - public Result(ResourceLocation pId, String pGroup, Ingredient pIngredient, Item pResult, int resultCount, float pExperience, int pCookingTime, Advancement.Builder pAdvancement, ResourceLocation pAdvancementId, RecipeSerializer pSerializer) { - this.id = pId; - this.group = pGroup; - this.ingredient = pIngredient; - this.result = pResult; - this.resultCount = resultCount; - this.experience = pExperience; - this.cookingTime = pCookingTime; - this.advancement = pAdvancement; - this.advancementId = pAdvancementId; - this.serializer = pSerializer; - } - - public void serializeRecipeData(JsonObject pJson) { - if (!this.group.isEmpty()) { - pJson.addProperty("group", this.group); - } - pJson.add("ingredient", this.ingredient.toJson()); - JsonObject object = new JsonObject(); - object.addProperty("item", Registry.ITEM.getKey(this.result).toString()); - object.addProperty("count", this.resultCount); - pJson.add("result", object); - pJson.addProperty("experience", this.experience); - pJson.addProperty("cookingtime", this.cookingTime); - } - - public RecipeSerializer getType() { - return this.serializer; - } - - public ResourceLocation getId() { - return this.id; - } - - @Nullable - public JsonObject serializeAdvancement() { - return this.advancement.serializeToJson(); - } - - @Nullable - public ResourceLocation getAdvancementId() { - return this.advancementId; - } - } + private final Item result; + private final int resultCount; + private final Ingredient ingredient; + private final float experience; + private final int cookingTime; + private final Advancement.Builder advancement = Advancement.Builder.advancement(); + @Nullable + private String group; + private final SimpleCookingSerializer serializer; + + private StackedMalumCookingRecipeBuilder(ItemLike pResult, int resultCount, Ingredient pIngredient, float pExperience, int pCookingTime, SimpleCookingSerializer pSerializer) { + this.result = pResult.asItem(); + this.resultCount = resultCount; + this.ingredient = pIngredient; + this.experience = pExperience; + this.cookingTime = pCookingTime; + this.serializer = pSerializer; + } + + public static StackedMalumCookingRecipeBuilder cookingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime, SimpleCookingSerializer pSerializer) { + return new StackedMalumCookingRecipeBuilder(pResult, resultCount, pIngredient, pExperience, pCookingTime, pSerializer); + } + + public static StackedMalumCookingRecipeBuilder campfireCookingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { + return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.CAMPFIRE_COOKING_RECIPE); + } + + public static StackedMalumCookingRecipeBuilder blastingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { + return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.BLASTING_RECIPE); + } + + public static StackedMalumCookingRecipeBuilder smeltingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { + return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.SMELTING_RECIPE); + } + + public static StackedMalumCookingRecipeBuilder smoking(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { + return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.SMOKING_RECIPE); + } + + public StackedMalumCookingRecipeBuilder unlockedBy(String pCriterionName, CriterionTriggerInstance pCriterionTrigger) { + this.advancement.addCriterion(pCriterionName, pCriterionTrigger); + return this; + } + + public StackedMalumCookingRecipeBuilder group(@Nullable String pGroupName) { + this.group = pGroupName; + return this; + } + + public Item getResult() { + return this.result; + } + + public void save(Consumer pFinishedRecipeConsumer, ResourceLocation pRecipeId) { + this.ensureValid(pRecipeId); + this.advancement.parent(new ResourceLocation("recipes/root")).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(pRecipeId)).rewards(AdvancementRewards.Builder.recipe(pRecipeId)).requirements(RequirementsStrategy.OR); + pFinishedRecipeConsumer.accept(new StackedMalumCookingRecipeBuilder.Result(pRecipeId, this.group == null ? "" : this.group, this.ingredient, this.result, this.resultCount, this.experience, this.cookingTime, this.advancement, new ResourceLocation(pRecipeId.getNamespace(), "recipes/" + this.result.getItemCategory().getRecipeFolderName() + "/" + pRecipeId.getPath()), this.serializer)); + } + + private void ensureValid(ResourceLocation pId) { + if (this.advancement.getCriteria().isEmpty()) { + throw new IllegalStateException("No way of obtaining recipe " + pId); + } + } + + public static class Result implements FinishedRecipe { + private final ResourceLocation id; + private final String group; + private final Ingredient ingredient; + private final Item result; + private final int resultCount; + private final float experience; + private final int cookingTime; + private final Advancement.Builder advancement; + private final ResourceLocation advancementId; + private final RecipeSerializer serializer; + + public Result(ResourceLocation pId, String pGroup, Ingredient pIngredient, Item pResult, int resultCount, float pExperience, int pCookingTime, Advancement.Builder pAdvancement, ResourceLocation pAdvancementId, RecipeSerializer pSerializer) { + this.id = pId; + this.group = pGroup; + this.ingredient = pIngredient; + this.result = pResult; + this.resultCount = resultCount; + this.experience = pExperience; + this.cookingTime = pCookingTime; + this.advancement = pAdvancement; + this.advancementId = pAdvancementId; + this.serializer = pSerializer; + } + + public void serializeRecipeData(JsonObject pJson) { + if (!this.group.isEmpty()) { + pJson.addProperty("group", this.group); + } + pJson.add("ingredient", this.ingredient.toJson()); + JsonObject object = new JsonObject(); + object.addProperty("item", Registry.ITEM.getKey(this.result).toString()); + object.addProperty("count", this.resultCount); + pJson.add("result", object); + pJson.addProperty("experience", this.experience); + pJson.addProperty("cookingtime", this.cookingTime); + } + + public RecipeSerializer getType() { + return this.serializer; + } + + public ResourceLocation getId() { + return this.id; + } + + @Nullable + public JsonObject serializeAdvancement() { + return this.advancement.serializeToJson(); + } + + @Nullable + public ResourceLocation getAdvancementId() { + return this.advancementId; + } + } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/mixin/ExplosionMixin.java b/src/main/java/com/sammy/malum/mixin/ExplosionMixin.java index 22888a15d..9b427c5f6 100644 --- a/src/main/java/com/sammy/malum/mixin/ExplosionMixin.java +++ b/src/main/java/com/sammy/malum/mixin/ExplosionMixin.java @@ -11,7 +11,6 @@ import net.minecraft.world.level.Explosion; import net.minecraft.world.level.ExplosionDamageCalculator; import net.minecraft.world.level.Level; -import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootParams; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/com/sammy/malum/mixin/FishingHookEntityMixin.java b/src/main/java/com/sammy/malum/mixin/FishingHookEntityMixin.java index 51949d8c3..209c55a31 100644 --- a/src/main/java/com/sammy/malum/mixin/FishingHookEntityMixin.java +++ b/src/main/java/com/sammy/malum/mixin/FishingHookEntityMixin.java @@ -33,7 +33,7 @@ private Player malumFishingStatChangesPlayerGrabberMixin(Player player) { private void malumModifyFishingLuckStatsMixin(Player p_37106_, Level p_37107_, int p_37108_, int p_37109_, CallbackInfo ci) { if (malum$player.hasEffect(MobEffectRegistry.ANGLERS_LURE.get())) { float bonus = (malum$player.getEffect(MobEffectRegistry.ANGLERS_LURE.get()).getAmplifier() / 2f); - luck += bonus*2f; + luck += bonus * 2f; lureSpeed += bonus + 0.5f; } } diff --git a/src/main/java/com/sammy/malum/mixin/ItemStackMixin.java b/src/main/java/com/sammy/malum/mixin/ItemStackMixin.java index 68e1ded4b..fdb9b4b0d 100644 --- a/src/main/java/com/sammy/malum/mixin/ItemStackMixin.java +++ b/src/main/java/com/sammy/malum/mixin/ItemStackMixin.java @@ -45,7 +45,7 @@ public abstract class ItemStackMixin { } copied.put(key, new AttributeModifier( - modifier.getId(), modifier.getName(), amount, modifier.getOperation() + modifier.getId(), modifier.getName(), amount, modifier.getOperation() )); } else if (modifier.getId().equals(BASE_ATTACK_DAMAGE_UUID) && getItem() instanceof MalumScytheItem) { AttributeInstance instance = player.getAttribute(AttributeRegistry.SCYTHE_PROFICIENCY.get()); @@ -54,7 +54,7 @@ public abstract class ItemStackMixin { } copied.put(key, new AttributeModifier( - modifier.getId(), modifier.getName(), amount, modifier.getOperation() + modifier.getId(), modifier.getName(), amount, modifier.getOperation() )); } else { copied.put(key, modifier); diff --git a/src/main/java/com/sammy/malum/registry/client/ModelRegistry.java b/src/main/java/com/sammy/malum/registry/client/ModelRegistry.java index 2df3169a7..60b21850b 100644 --- a/src/main/java/com/sammy/malum/registry/client/ModelRegistry.java +++ b/src/main/java/com/sammy/malum/registry/client/ModelRegistry.java @@ -2,7 +2,9 @@ import com.sammy.malum.MalumMod; import com.sammy.malum.client.model.*; -import com.sammy.malum.client.model.cosmetic.*; +import com.sammy.malum.client.model.cosmetic.GenericArmorModel; +import com.sammy.malum.client.model.cosmetic.GenericSlimArmorModel; +import com.sammy.malum.client.model.cosmetic.ScarfModel; import com.sammy.malum.client.model.cosmetic.ancient.AncientSoulHunterArmorModel; import com.sammy.malum.client.model.cosmetic.ancient.AncientSoulStainedSteelArmorModel; import com.sammy.malum.client.model.cosmetic.pride.PridewearArmorModel; diff --git a/src/main/java/com/sammy/malum/registry/client/ParticleRegistry.java b/src/main/java/com/sammy/malum/registry/client/ParticleRegistry.java index 10b30e8a2..255e2ab07 100644 --- a/src/main/java/com/sammy/malum/registry/client/ParticleRegistry.java +++ b/src/main/java/com/sammy/malum/registry/client/ParticleRegistry.java @@ -10,8 +10,8 @@ import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.particle.type.*; +import team.lodestar.lodestone.systems.particle.type.LodestoneParticleType; +import team.lodestar.lodestone.systems.particle.type.LodestoneSparkParticleType; @SuppressWarnings("unused") public class ParticleRegistry { diff --git a/src/main/java/com/sammy/malum/registry/common/AttributeRegistry.java b/src/main/java/com/sammy/malum/registry/common/AttributeRegistry.java index 9f8f101cc..148c5106f 100644 --- a/src/main/java/com/sammy/malum/registry/common/AttributeRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/AttributeRegistry.java @@ -23,7 +23,7 @@ public class AttributeRegistry { public static final RegistryObject SOUL_WARD_RECOVERY_SPEED = registerAttribute(ATTRIBUTES, MALUM, "soul_ward_recovery_speed", (id) -> new RangedAttribute(id, 0D, 0.0D, 2048.0D).setSyncable(true)); public static final RegistryObject SOUL_WARD_CAP = registerAttribute(ATTRIBUTES, MALUM, "soul_ward_capacity", (id) -> new RangedAttribute(id, 0D, 0.0D, 2048.0D).setSyncable(true)); - + @SubscribeEvent public static void modifyEntityAttributes(EntityAttributeModificationEvent event) { event.getTypes().forEach(e -> { diff --git a/src/main/java/com/sammy/malum/registry/common/ContainerRegistry.java b/src/main/java/com/sammy/malum/registry/common/ContainerRegistry.java index b3d2192fc..d9858bb70 100644 --- a/src/main/java/com/sammy/malum/registry/common/ContainerRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/ContainerRegistry.java @@ -21,7 +21,7 @@ import static com.sammy.malum.MalumMod.MALUM; -@Mod.EventBusSubscriber(modid= MalumMod.MALUM, value= Dist.CLIENT, bus= Mod.EventBusSubscriber.Bus.MOD) +@Mod.EventBusSubscriber(modid = MalumMod.MALUM, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class ContainerRegistry { public static final DeferredRegister> CONTAINERS = DeferredRegister.create(ForgeRegistries.MENU_TYPES, MALUM); diff --git a/src/main/java/com/sammy/malum/registry/common/PacketRegistry.java b/src/main/java/com/sammy/malum/registry/common/PacketRegistry.java index c931b63dc..75ca6da87 100644 --- a/src/main/java/com/sammy/malum/registry/common/PacketRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/PacketRegistry.java @@ -1,18 +1,26 @@ package com.sammy.malum.registry.common; -import com.sammy.malum.*; -import com.sammy.malum.common.packets.*; -import com.sammy.malum.common.packets.particle.*; -import com.sammy.malum.common.packets.particle.curiosities.altar.*; -import com.sammy.malum.common.packets.particle.curiosities.blight.*; -import com.sammy.malum.common.packets.particle.curiosities.nitrate.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.packets.ParticleEffectPacket; +import com.sammy.malum.common.packets.SyncLivingCapabilityDataPacket; +import com.sammy.malum.common.packets.SyncMalumPlayerCapabilityDataPacket; +import com.sammy.malum.common.packets.VoidRejectionPacket; +import com.sammy.malum.common.packets.particle.SuccessfulSoulHarvestParticlePacket; +import com.sammy.malum.common.packets.particle.curiosities.altar.AltarConsumeParticlePacket; +import com.sammy.malum.common.packets.particle.curiosities.altar.AltarCraftParticlePacket; +import com.sammy.malum.common.packets.particle.curiosities.blight.BlightMistParticlePacket; +import com.sammy.malum.common.packets.particle.curiosities.blight.BlightTransformItemParticlePacket; +import com.sammy.malum.common.packets.particle.curiosities.nitrate.EthericNitrateParticlePacket; +import com.sammy.malum.common.packets.particle.curiosities.nitrate.VividNitrateBounceParticlePacket; import com.sammy.malum.common.packets.particle.curiosities.rite.*; -import com.sammy.malum.common.packets.particle.curiosities.rite.generic.*; -import net.minecraftforge.eventbus.api.*; -import net.minecraftforge.fml.common.*; -import net.minecraftforge.fml.event.lifecycle.*; -import net.minecraftforge.network.*; -import net.minecraftforge.network.simple.*; +import com.sammy.malum.common.packets.particle.curiosities.rite.generic.BlockSparkleParticlePacket; +import com.sammy.malum.common.packets.particle.curiosities.rite.generic.MajorEntityEffectParticlePacket; +import com.sammy.malum.common.packets.particle.curiosities.rite.generic.TotemPoleActivationEffectPacket; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.network.NetworkRegistry; +import net.minecraftforge.network.simple.SimpleChannel; @SuppressWarnings("unused") @Mod.EventBusSubscriber(modid = MalumMod.MALUM, bus = Mod.EventBusSubscriber.Bus.MOD) diff --git a/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java b/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java index b909b2784..9d741e07e 100644 --- a/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/ParticleEffectTypeRegistry.java @@ -1,12 +1,17 @@ package com.sammy.malum.registry.common; -import com.sammy.malum.visual_effects.networked.*; -import com.sammy.malum.visual_effects.networked.altar.*; -import com.sammy.malum.visual_effects.networked.blight.*; -import com.sammy.malum.visual_effects.networked.generic.*; -import com.sammy.malum.visual_effects.networked.weeping_well.*; - -import java.util.*; +import com.sammy.malum.visual_effects.networked.ParticleEffectType; +import com.sammy.malum.visual_effects.networked.SpiritMoteCreationParticleEffect; +import com.sammy.malum.visual_effects.networked.altar.SpiritAltarCraftParticleEffect; +import com.sammy.malum.visual_effects.networked.altar.SpiritAltarEatItemParticleEffect; +import com.sammy.malum.visual_effects.networked.blight.BlightingMistParticleEffect; +import com.sammy.malum.visual_effects.networked.generic.DrippingSmokeParticleEffect; +import com.sammy.malum.visual_effects.networked.generic.HexingSmokeParticleEffect; +import com.sammy.malum.visual_effects.networked.generic.RisingSparklesParticleEffect; +import com.sammy.malum.visual_effects.networked.weeping_well.WeepingWellReactionParticleEffect; + +import java.util.LinkedHashMap; +import java.util.Map; public class ParticleEffectTypeRegistry { diff --git a/src/main/java/com/sammy/malum/registry/common/SoundRegistry.java b/src/main/java/com/sammy/malum/registry/common/SoundRegistry.java index cab7c79e5..ebaf135a5 100644 --- a/src/main/java/com/sammy/malum/registry/common/SoundRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/SoundRegistry.java @@ -42,7 +42,6 @@ public class SoundRegistry { public static final RegistryObject VOID_TRINKET_EQUIP = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("void_trinket_equipped"))); - public static final RegistryObject ARCANE_WHISPERS = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("arcane_whispers"))); public static final RegistryObject SPIRIT_PICKUP = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("spirit_picked_up"))); public static final RegistryObject SOUL_SHATTER = register(SoundEvent.createVariableRangeEvent(MalumMod.malumPath("a_soul_shatters"))); @@ -156,9 +155,9 @@ public class SoundRegistry { public static final SoundType SOULSTONE = new ForgeSoundType(1.0F, 1.0F, SOULSTONE_BREAK, SOULSTONE_STEP, SOULSTONE_PLACE, SOULSTONE_HIT, () -> SoundEvents.STONE_FALL); public static final SoundType DEEPSLATE_SOULSTONE = new ForgeSoundType(1.0F, 1.0F, DEEPSLATE_SOULSTONE_BREAK, DEEPSLATE_SOULSTONE_STEP, DEEPSLATE_SOULSTONE_PLACE, DEEPSLATE_SOULSTONE_HIT, () -> SoundEvents.DEEPSLATE_FALL); public static final SoundType BLAZING_QUARTZ_ORE = new ForgeSoundType(1.0F, 1.0F, BLAZING_QUARTZ_ORE_BREAK, () -> SoundEvents.NETHER_ORE_STEP, BLAZING_QUARTZ_ORE_PLACE, () -> SoundEvents.NETHER_ORE_HIT, () -> SoundEvents.NETHER_GOLD_ORE_FALL); - public static final SoundType NATURAL_QUARTZ = new QuartzSoundType(1.0F, 0.9f, ()->SoundEvents.STONE_BREAK, ()->SoundEvents.STONE_STEP, ()->SoundEvents.STONE_PLACE, ()->SoundEvents.STONE_HIT, ()->SoundEvents.STONE_FALL); - public static final SoundType DEEPSLATE_QUARTZ = new QuartzSoundType(1.0F, 0.9f, ()->SoundEvents.DEEPSLATE_BREAK, ()->SoundEvents.DEEPSLATE_STEP, ()->SoundEvents.DEEPSLATE_PLACE, ()->SoundEvents.DEEPSLATE_HIT, ()->SoundEvents.DEEPSLATE_FALL); - public static final SoundType CTHONIC_GOLD = new RareEarthSoundType(1.0F, 1.15f, SOULSTONE_BREAK, SOULSTONE_STEP, SOULSTONE_PLACE, DEEPSLATE_SOULSTONE_HIT, ()->SoundEvents.DEEPSLATE_FALL); + public static final SoundType NATURAL_QUARTZ = new QuartzSoundType(1.0F, 0.9f, () -> SoundEvents.STONE_BREAK, () -> SoundEvents.STONE_STEP, () -> SoundEvents.STONE_PLACE, () -> SoundEvents.STONE_HIT, () -> SoundEvents.STONE_FALL); + public static final SoundType DEEPSLATE_QUARTZ = new QuartzSoundType(1.0F, 0.9f, () -> SoundEvents.DEEPSLATE_BREAK, () -> SoundEvents.DEEPSLATE_STEP, () -> SoundEvents.DEEPSLATE_PLACE, () -> SoundEvents.DEEPSLATE_HIT, () -> SoundEvents.DEEPSLATE_FALL); + public static final SoundType CTHONIC_GOLD = new RareEarthSoundType(1.0F, 1.15f, SOULSTONE_BREAK, SOULSTONE_STEP, SOULSTONE_PLACE, DEEPSLATE_SOULSTONE_HIT, () -> SoundEvents.DEEPSLATE_FALL); public static final SoundType BRILLIANCE_BLOCK = new ForgeSoundType(1.0F, 1.4f, BRILLIANCE_BLOCK_BREAK, BRILLIANCE_BLOCK_STEP, BRILLIANCE_BLOCK_PLACE, BRILLIANCE_BLOCK_HIT, () -> SoundEvents.NETHER_GOLD_ORE_FALL); public static final SoundType BLAZING_QUARTZ_BLOCK = new ForgeSoundType(1.0F, 1.25f, BLAZING_QUARTZ_BLOCK_BREAK, BLAZING_QUARTZ_BLOCK_STEP, BLAZING_QUARTZ_BLOCK_PLACE, BLAZING_QUARTZ_BLOCK_HIT, () -> SoundEvents.NETHER_GOLD_ORE_FALL); @@ -172,8 +171,8 @@ public class SoundRegistry { public static final SoundType RUNEWOOD_LEAVES = new ForgeSoundType(1.0F, 1.1F, RUNEWOOD_LEAVES_BREAK, RUNEWOOD_LEAVES_STEP, RUNEWOOD_LEAVES_PLACE, RUNEWOOD_LEAVES_HIT, () -> SoundEvents.AZALEA_LEAVES_FALL); - public static final SoundType BLIGHTED_FOLIAGE = new BlightedSoundType(1.0F, 1.0F, ()->SoundEvents.NETHER_WART_BREAK, ()->SoundEvents.STONE_STEP, ()->SoundEvents.NETHER_WART_PLANTED, ()->SoundEvents.STONE_HIT, ()->SoundEvents.STONE_FALL); - public static final SoundType BLIGHTED_EARTH = new BlightedSoundType(1.0F, 1.0F, ()->SoundEvents.NYLIUM_BREAK, ()->SoundEvents.NYLIUM_STEP, ()->SoundEvents.NYLIUM_PLACE, ()->SoundEvents.NYLIUM_HIT, ()->SoundEvents.NYLIUM_FALL); + public static final SoundType BLIGHTED_FOLIAGE = new BlightedSoundType(1.0F, 1.0F, () -> SoundEvents.NETHER_WART_BREAK, () -> SoundEvents.STONE_STEP, () -> SoundEvents.NETHER_WART_PLANTED, () -> SoundEvents.STONE_HIT, () -> SoundEvents.STONE_FALL); + public static final SoundType BLIGHTED_EARTH = new BlightedSoundType(1.0F, 1.0F, () -> SoundEvents.NYLIUM_BREAK, () -> SoundEvents.NYLIUM_STEP, () -> SoundEvents.NYLIUM_PLACE, () -> SoundEvents.NYLIUM_HIT, () -> SoundEvents.NYLIUM_FALL); public static final SoundType SOULWOOD = new BlightedSoundType(1.0F, 1.0F, () -> SoundEvents.WOOD_BREAK, () -> SoundEvents.WOOD_STEP, () -> SoundEvents.WOOD_PLACE, () -> SoundEvents.WOOD_HIT, () -> SoundEvents.WOOD_FALL); public static final SoundType SOULWOOD_LEAVES = new BlightedSoundType(1.0F, 0.9F, SOULWOOD_LEAVES_BREAK, SOULWOOD_LEAVES_STEP, SOULWOOD_LEAVES_PLACE, SOULWOOD_LEAVES_HIT, () -> SoundEvents.AZALEA_LEAVES_FALL); diff --git a/src/main/java/com/sammy/malum/registry/common/SpiritTypeRegistry.java b/src/main/java/com/sammy/malum/registry/common/SpiritTypeRegistry.java index bc165d517..d1c9eace8 100644 --- a/src/main/java/com/sammy/malum/registry/common/SpiritTypeRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/SpiritTypeRegistry.java @@ -1,23 +1,22 @@ package com.sammy.malum.registry.common; -import com.sammy.malum.*; -import com.sammy.malum.core.systems.spirit.*; -import com.sammy.malum.registry.common.block.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.client.renderer.texture.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.client.event.*; -import net.minecraftforge.eventbus.api.*; -import net.minecraftforge.fml.common.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.easing.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.core.systems.spirit.SpiritTypeProperty; +import com.sammy.malum.registry.common.block.BlockRegistry; +import com.sammy.malum.registry.common.item.ItemRegistry; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.common.Mod; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.systems.easing.Easing; import java.awt.*; +import java.util.LinkedHashMap; import java.util.List; -import java.util.*; +import java.util.Map; @SuppressWarnings("unchecked") -@Mod.EventBusSubscriber(modid= MalumMod.MALUM, value= Dist.CLIENT, bus= Mod.EventBusSubscriber.Bus.MOD) +@Mod.EventBusSubscriber(modid = MalumMod.MALUM, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public class SpiritTypeRegistry { public static Map SPIRITS = new LinkedHashMap<>(); diff --git a/src/main/java/com/sammy/malum/registry/common/block/BlockEntityRegistry.java b/src/main/java/com/sammy/malum/registry/common/block/BlockEntityRegistry.java index 792e65983..914f43522 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/BlockEntityRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/block/BlockEntityRegistry.java @@ -2,27 +2,28 @@ import com.sammy.malum.MalumMod; import com.sammy.malum.client.renderer.block.*; -import com.sammy.malum.common.block.ether.EtherBlock; -import com.sammy.malum.common.block.mana_mote.*; -import com.sammy.malum.common.block.storage.pedestal.ItemPedestalBlock; -import com.sammy.malum.common.block.storage.stand.ItemStandBlock; -import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlock; -import com.sammy.malum.common.block.curiosities.totem.TotemPoleBlock; -import com.sammy.malum.common.block.ether.EtherBlockEntity; -import com.sammy.malum.common.block.curiosities.weeping_well.VoidConduitBlockEntity; -import com.sammy.malum.common.block.curiosities.weavers_workbench.WeaversWorkbenchBlockEntity; -import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCatalyzerCoreBlockEntity; -import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCrucibleCoreBlockEntity; import com.sammy.malum.common.block.curiosities.obelisk.BrilliantObeliskBlockEntity; import com.sammy.malum.common.block.curiosities.obelisk.RunewoodObeliskBlockEntity; import com.sammy.malum.common.block.curiosities.spirit_altar.SpiritAltarBlockEntity; -import com.sammy.malum.common.block.storage.pedestal.ItemPedestalBlockEntity; -import com.sammy.malum.common.block.storage.stand.ItemStandBlockEntity; -import com.sammy.malum.common.block.storage.vial.SoulVialBlockEntity; -import com.sammy.malum.common.block.storage.jar.SpiritJarBlockEntity; +import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCatalyzerCoreBlockEntity; +import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCrucibleCoreBlockEntity; import com.sammy.malum.common.block.curiosities.tablet.TwistedTabletBlockEntity; +import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlock; import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlockEntity; +import com.sammy.malum.common.block.curiosities.totem.TotemPoleBlock; import com.sammy.malum.common.block.curiosities.totem.TotemPoleBlockEntity; +import com.sammy.malum.common.block.curiosities.weavers_workbench.WeaversWorkbenchBlockEntity; +import com.sammy.malum.common.block.curiosities.weeping_well.VoidConduitBlockEntity; +import com.sammy.malum.common.block.ether.EtherBlock; +import com.sammy.malum.common.block.ether.EtherBlockEntity; +import com.sammy.malum.common.block.mana_mote.MoteOfManaBlockEntity; +import com.sammy.malum.common.block.mana_mote.SpiritMoteBlock; +import com.sammy.malum.common.block.storage.jar.SpiritJarBlockEntity; +import com.sammy.malum.common.block.storage.pedestal.ItemPedestalBlock; +import com.sammy.malum.common.block.storage.pedestal.ItemPedestalBlockEntity; +import com.sammy.malum.common.block.storage.stand.ItemStandBlock; +import com.sammy.malum.common.block.storage.stand.ItemStandBlockEntity; +import com.sammy.malum.common.block.storage.vial.SoulVialBlockEntity; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraftforge.api.distmarker.Dist; diff --git a/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java b/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java index 712e73b7e..9b38b288b 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java @@ -1,49 +1,71 @@ package com.sammy.malum.registry.common.block; -import com.sammy.malum.*; -import com.sammy.malum.common.block.blight.*; -import com.sammy.malum.common.block.curiosities.obelisk.*; -import com.sammy.malum.common.block.curiosities.spirit_altar.*; -import com.sammy.malum.common.block.curiosities.spirit_crucible.*; -import com.sammy.malum.common.block.curiosities.tablet.*; -import com.sammy.malum.common.block.curiosities.totem.*; -import com.sammy.malum.common.block.curiosities.weavers_workbench.*; -import com.sammy.malum.common.block.curiosities.weeping_well.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.block.blight.BlightedGrassBlock; +import com.sammy.malum.common.block.blight.BlightedSoilBlock; +import com.sammy.malum.common.block.blight.BlightedSoulwoodBlock; +import com.sammy.malum.common.block.curiosities.obelisk.BrillianceObeliskCoreBlock; +import com.sammy.malum.common.block.curiosities.obelisk.ObeliskComponentBlock; +import com.sammy.malum.common.block.curiosities.obelisk.RunewoodObeliskCoreBlock; +import com.sammy.malum.common.block.curiosities.spirit_altar.SpiritAltarBlock; +import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCatalyzerComponentBlock; +import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCatalyzerCoreBlock; +import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCrucibleComponentBlock; +import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCrucibleCoreBlock; +import com.sammy.malum.common.block.curiosities.tablet.TwistedTabletBlock; +import com.sammy.malum.common.block.curiosities.totem.TotemBaseBlock; +import com.sammy.malum.common.block.curiosities.totem.TotemPoleBlock; +import com.sammy.malum.common.block.curiosities.weavers_workbench.WeaversWorkbenchBlock; +import com.sammy.malum.common.block.curiosities.weeping_well.PrimordialSoupBlock; +import com.sammy.malum.common.block.curiosities.weeping_well.VoidConduitBlock; +import com.sammy.malum.common.block.curiosities.weeping_well.WeepingWellBlock; import com.sammy.malum.common.block.ether.*; -import com.sammy.malum.common.block.mana_mote.*; -import com.sammy.malum.common.block.nature.*; -import com.sammy.malum.common.block.nature.soulwood.*; -import com.sammy.malum.common.block.storage.jar.*; -import com.sammy.malum.common.block.storage.pedestal.*; -import com.sammy.malum.common.block.storage.stand.*; -import com.sammy.malum.common.block.storage.vial.*; -import com.sammy.malum.common.block.the_device.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.item.*; -import com.sammy.malum.registry.common.worldgen.*; -import net.minecraft.client.color.block.*; -import net.minecraft.util.*; -import net.minecraft.util.valueproviders.*; +import com.sammy.malum.common.block.mana_mote.SoulstoneBlock; +import com.sammy.malum.common.block.mana_mote.SpiritMoteBlock; +import com.sammy.malum.common.block.nature.MalumLeavesBlock; +import com.sammy.malum.common.block.nature.MalumLogBLock; +import com.sammy.malum.common.block.nature.MalumSaplingBlock; +import com.sammy.malum.common.block.nature.SapFilledLogBlock; +import com.sammy.malum.common.block.nature.soulwood.SapFilledSoulwoodLogBlock; +import com.sammy.malum.common.block.nature.soulwood.SoulwoodBlock; +import com.sammy.malum.common.block.nature.soulwood.SoulwoodGrowthBlock; +import com.sammy.malum.common.block.nature.soulwood.SoulwoodLogBlock; +import com.sammy.malum.common.block.storage.jar.SpiritJarBlock; +import com.sammy.malum.common.block.storage.pedestal.ItemPedestalBlock; +import com.sammy.malum.common.block.storage.pedestal.WoodItemPedestalBlock; +import com.sammy.malum.common.block.storage.stand.ItemStandBlock; +import com.sammy.malum.common.block.storage.vial.SoulVialBlock; +import com.sammy.malum.common.block.the_device.TheDevice; +import com.sammy.malum.common.block.the_device.TheVessel; +import com.sammy.malum.registry.common.SpiritTypeRegistry; +import com.sammy.malum.registry.common.item.ItemRegistry; +import com.sammy.malum.registry.common.worldgen.FeatureRegistry; +import net.minecraft.client.color.block.BlockColors; +import net.minecraft.util.Mth; +import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.level.block.*; -import net.minecraft.world.level.block.entity.*; -import net.minecraft.world.level.material.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.client.event.*; -import net.minecraftforge.eventbus.api.*; -import net.minecraftforge.fml.common.*; -import net.minecraftforge.registries.*; -import team.lodestar.lodestone.systems.block.*; -import team.lodestar.lodestone.systems.block.sign.*; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import team.lodestar.lodestone.systems.block.LodestoneBlockProperties; +import team.lodestar.lodestone.systems.block.LodestoneDirectionalBlock; +import team.lodestar.lodestone.systems.block.LodestoneLogBlock; +import team.lodestar.lodestone.systems.block.sign.LodestoneStandingSignBlock; +import team.lodestar.lodestone.systems.block.sign.LodestoneWallSignBlock; import java.awt.*; -import static com.sammy.malum.MalumMod.*; +import static com.sammy.malum.MalumMod.MALUM; import static com.sammy.malum.registry.common.block.BlockTagRegistry.*; -import static net.minecraft.tags.BlockTags.FENCES; -import static net.minecraft.tags.BlockTags.FENCE_GATES; import static net.minecraft.tags.BlockTags.*; -import static net.minecraft.world.level.block.PressurePlateBlock.Sensitivity.*; -import static net.minecraftforge.common.Tags.Blocks.*; +import static net.minecraft.world.level.block.PressurePlateBlock.Sensitivity.EVERYTHING; +import static net.minecraft.world.level.block.PressurePlateBlock.Sensitivity.MOBS; +import static net.minecraftforge.common.Tags.Blocks.FENCE_GATES_WOODEN; +import static net.minecraftforge.common.Tags.Blocks.STORAGE_BLOCKS; public class BlockRegistry { @@ -320,21 +342,21 @@ public class BlockRegistry { public static final RegistryObject BLOCK_OF_ARCANE_CHARCOAL = BLOCKS.register("block_of_arcane_charcoal", () -> new Block(MalumBlockProperties.ARCANE_CHARCOAL_BLOCK())); - public static final RegistryObject BLAZING_QUARTZ_ORE = BLOCKS.register("blazing_quartz_ore", () -> new OreBlock(MalumBlockProperties.BLAZING_QUARTZ_ORE().setCutoutRenderType().lightLevel((b) -> 6), UniformInt.of(4, 7))); + public static final RegistryObject BLAZING_QUARTZ_ORE = BLOCKS.register("blazing_quartz_ore", () -> new DropExperienceBlock(MalumBlockProperties.BLAZING_QUARTZ_ORE().setCutoutRenderType().lightLevel((b) -> 6), UniformInt.of(4, 7))); public static final RegistryObject BLOCK_OF_BLAZING_QUARTZ = BLOCKS.register("block_of_blazing_quartz", () -> new Block(MalumBlockProperties.BLAZING_QUARTZ_BLOCK().lightLevel((b) -> 14))); - public static final RegistryObject NATURAL_QUARTZ_ORE = BLOCKS.register("natural_quartz_ore", () -> new OreBlock(MalumBlockProperties.NATURAL_QUARTZ_ORE(false).setCutoutRenderType(), UniformInt.of(1, 4))); - public static final RegistryObject DEEPSLATE_QUARTZ_ORE = BLOCKS.register("deepslate_quartz_ore", () -> new OreBlock(MalumBlockProperties.NATURAL_QUARTZ_ORE(true).setCutoutRenderType(), UniformInt.of(2, 5))); + public static final RegistryObject NATURAL_QUARTZ_ORE = BLOCKS.register("natural_quartz_ore", () -> new DropExperienceBlock(MalumBlockProperties.NATURAL_QUARTZ_ORE(false).setCutoutRenderType(), UniformInt.of(1, 4))); + public static final RegistryObject DEEPSLATE_QUARTZ_ORE = BLOCKS.register("deepslate_quartz_ore", () -> new DropExperienceBlock(MalumBlockProperties.NATURAL_QUARTZ_ORE(true).setCutoutRenderType(), UniformInt.of(2, 5))); public static final RegistryObject NATURAL_QUARTZ_CLUSTER = BLOCKS.register("natural_quartz_cluster", () -> new AmethystClusterBlock(6, 3, MalumBlockProperties.NATURAL_QUARTZ_CLUSTER().setCutoutRenderType())); - public static final RegistryObject BLOCK_OF_CTHONIC_GOLD = BLOCKS.register("block_of_cthonic_gold", () -> new OreBlock(MalumBlockProperties.CTHONIC_GOLD_ORE(), UniformInt.of(10, 100))); + public static final RegistryObject BLOCK_OF_CTHONIC_GOLD = BLOCKS.register("block_of_cthonic_gold", () -> new DropExperienceBlock(MalumBlockProperties.CTHONIC_GOLD_ORE(), UniformInt.of(10, 100))); - public static final RegistryObject BRILLIANT_STONE = BLOCKS.register("brilliant_stone", () -> new OreBlock(MalumBlockProperties.BRILLIANCE_ORE(false).setCutoutRenderType(), UniformInt.of(14, 18))); - public static final RegistryObject BRILLIANT_DEEPSLATE = BLOCKS.register("brilliant_deepslate", () -> new OreBlock(MalumBlockProperties.BRILLIANCE_ORE(true).setCutoutRenderType(), UniformInt.of(16, 26))); + public static final RegistryObject BRILLIANT_STONE = BLOCKS.register("brilliant_stone", () -> new DropExperienceBlock(MalumBlockProperties.BRILLIANCE_ORE(false).setCutoutRenderType(), UniformInt.of(14, 18))); + public static final RegistryObject BRILLIANT_DEEPSLATE = BLOCKS.register("brilliant_deepslate", () -> new DropExperienceBlock(MalumBlockProperties.BRILLIANCE_ORE(true).setCutoutRenderType(), UniformInt.of(16, 26))); public static final RegistryObject BLOCK_OF_BRILLIANCE = BLOCKS.register("block_of_brilliance", () -> new Block(MalumBlockProperties.BRILLIANCE_BLOCK())); - public static final RegistryObject SOULSTONE_ORE = BLOCKS.register("soulstone_ore", () -> new OreBlock(MalumBlockProperties.SOULSTONE_ORE(false))); - public static final RegistryObject DEEPSLATE_SOULSTONE_ORE = BLOCKS.register("deepslate_soulstone_ore", () -> new OreBlock(MalumBlockProperties.SOULSTONE_ORE(true))); + public static final RegistryObject SOULSTONE_ORE = BLOCKS.register("soulstone_ore", () -> new DropExperienceBlock(MalumBlockProperties.SOULSTONE_ORE(false))); + public static final RegistryObject DEEPSLATE_SOULSTONE_ORE = BLOCKS.register("deepslate_soulstone_ore", () -> new DropExperienceBlock(MalumBlockProperties.SOULSTONE_ORE(true))); public static final RegistryObject BLOCK_OF_RAW_SOULSTONE = BLOCKS.register("block_of_raw_soulstone", () -> new Block(MalumBlockProperties.SOULSTONE_BLOCK())); public static final RegistryObject BLOCK_OF_SOULSTONE = BLOCKS.register("block_of_soulstone", () -> new SoulstoneBlock(MalumBlockProperties.SOULSTONE_BLOCK())); diff --git a/src/main/java/com/sammy/malum/registry/common/block/BlockTagRegistry.java b/src/main/java/com/sammy/malum/registry/common/block/BlockTagRegistry.java index 255d9d3fa..4d03fc7be 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/BlockTagRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/block/BlockTagRegistry.java @@ -1,8 +1,6 @@ package com.sammy.malum.registry.common.block; import com.sammy.malum.MalumMod; -import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.tags.TagKey; diff --git a/src/main/java/com/sammy/malum/registry/common/block/WoodTypeRegistry.java b/src/main/java/com/sammy/malum/registry/common/block/WoodTypeRegistry.java index 39a8e867b..0e78702d5 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/WoodTypeRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/block/WoodTypeRegistry.java @@ -1,11 +1,6 @@ package com.sammy.malum.registry.common.block; -import com.sammy.malum.MalumMod; import net.minecraft.world.level.block.state.properties.WoodType; -import net.minecraftforge.fml.common.Mod; - -import java.util.ArrayList; -import java.util.List; //@Mod.EventBusSubscriber(modid= MalumMod.MALUM, bus= Mod.EventBusSubscriber.Bus.MOD) public class WoodTypeRegistry { diff --git a/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java b/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java index ab5d7254d..fde32f1b2 100644 --- a/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java @@ -1,54 +1,57 @@ package com.sammy.malum.registry.common.entity; -import com.sammy.malum.*; +import com.sammy.malum.MalumMod; import com.sammy.malum.client.renderer.entity.*; -import com.sammy.malum.common.entity.boomerang.*; -import com.sammy.malum.common.entity.night_terror.*; -import com.sammy.malum.common.entity.nitrate.*; -import com.sammy.malum.common.entity.spirit.*; -import com.sammy.malum.registry.common.item.*; -import net.minecraft.client.renderer.entity.*; -import net.minecraft.world.entity.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.client.event.*; -import net.minecraftforge.eventbus.api.*; -import net.minecraftforge.fml.common.*; -import net.minecraftforge.registries.*; -import team.lodestar.lodestone.systems.entity.*; +import com.sammy.malum.common.entity.boomerang.ScytheBoomerangEntity; +import com.sammy.malum.common.entity.night_terror.NightTerrorSeekerEntity; +import com.sammy.malum.common.entity.nitrate.EthericNitrateEntity; +import com.sammy.malum.common.entity.nitrate.VividNitrateEntity; +import com.sammy.malum.common.entity.spirit.SpiritItemEntity; +import com.sammy.malum.registry.common.item.ItemRegistry; +import net.minecraft.client.renderer.entity.EntityRenderers; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MobCategory; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import team.lodestar.lodestone.systems.entity.LodestoneBoatEntity; -public class EntityRegistry -{ +public class EntityRegistry { public static final DeferredRegister> ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, MalumMod.MALUM); public static final RegistryObject> RUNEWOOD_BOAT = ENTITY_TYPES.register("runewood_boat", - () -> EntityType.Builder.of((t, w)->new LodestoneBoatEntity(t, w, ItemRegistry.RUNEWOOD_BOAT, ItemRegistry.RUNEWOOD_PLANKS), MobCategory.MISC).sized(1.375F, 0.5625F).clientTrackingRange(10) + () -> EntityType.Builder.of((t, w) -> new LodestoneBoatEntity(t, w, ItemRegistry.RUNEWOOD_BOAT, ItemRegistry.RUNEWOOD_PLANKS), MobCategory.MISC).sized(1.375F, 0.5625F).clientTrackingRange(10) .build(MalumMod.malumPath("runewood_boat").toString())); public static final RegistryObject> SOULWOOD_BOAT = ENTITY_TYPES.register("soulwood_boat", - () -> EntityType.Builder.of((t, w)->new LodestoneBoatEntity(t, w, ItemRegistry.SOULWOOD_BOAT, ItemRegistry.SOULWOOD_PLANKS), MobCategory.MISC).sized(1.375F, 0.5625F).clientTrackingRange(10) + () -> EntityType.Builder.of((t, w) -> new LodestoneBoatEntity(t, w, ItemRegistry.SOULWOOD_BOAT, ItemRegistry.SOULWOOD_PLANKS), MobCategory.MISC).sized(1.375F, 0.5625F).clientTrackingRange(10) .build(MalumMod.malumPath("soulwood_boat").toString())); public static final RegistryObject> NATURAL_SPIRIT = ENTITY_TYPES.register("natural_spirit", - () -> EntityType.Builder.of((e, w)->new SpiritItemEntity(w), MobCategory.MISC).sized(0.5F, 0.75F).clientTrackingRange(10) + () -> EntityType.Builder.of((e, w) -> new SpiritItemEntity(w), MobCategory.MISC).sized(0.5F, 0.75F).clientTrackingRange(10) .build(MalumMod.malumPath("natural_spirit").toString())); public static final RegistryObject> ETHERIC_NITRATE = ENTITY_TYPES.register("etheric_nitrate", - () -> EntityType.Builder.of((e, w)->new EthericNitrateEntity(w), MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(20) + () -> EntityType.Builder.of((e, w) -> new EthericNitrateEntity(w), MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(20) .build(MalumMod.malumPath("etheric_nitrate").toString())); public static final RegistryObject> VIVID_NITRATE = ENTITY_TYPES.register("vivid_nitrate", - () -> EntityType.Builder.of((e, w)->new VividNitrateEntity(w), MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(20) + () -> EntityType.Builder.of((e, w) -> new VividNitrateEntity(w), MobCategory.MISC).sized(0.5F, 0.5F).clientTrackingRange(20) .build(MalumMod.malumPath("vivid_nitrate").toString())); public static final RegistryObject> SCYTHE_BOOMERANG = ENTITY_TYPES.register("scythe_boomerang", - () -> EntityType.Builder.of((e,w)->new ScytheBoomerangEntity(w), MobCategory.MISC).sized(2.5F, 0.75F).clientTrackingRange(10) + () -> EntityType.Builder.of((e, w) -> new ScytheBoomerangEntity(w), MobCategory.MISC).sized(2.5F, 0.75F).clientTrackingRange(10) .build(MalumMod.malumPath("scythe_boomerang").toString())); public static final RegistryObject> NIGHT_TERROR = ENTITY_TYPES.register("night_terror", - () -> EntityType.Builder.of((e,w)->new NightTerrorSeekerEntity(w), MobCategory.MISC).sized(2F, 2F).clientTrackingRange(10) + () -> EntityType.Builder.of((e, w) -> new NightTerrorSeekerEntity(w), MobCategory.MISC).sized(2F, 2F).clientTrackingRange(10) .build(MalumMod.malumPath("night_terror").toString())); - @Mod.EventBusSubscriber(modid= MalumMod.MALUM, value= Dist.CLIENT, bus= Mod.EventBusSubscriber.Bus.MOD) + @Mod.EventBusSubscriber(modid = MalumMod.MALUM, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) public static class ClientOnly { @SubscribeEvent public static void bindEntityRenderers(EntityRenderersEvent.RegisterRenderers event) { diff --git a/src/main/java/com/sammy/malum/registry/common/item/ArmorSkinRegistry.java b/src/main/java/com/sammy/malum/registry/common/item/ArmorSkinRegistry.java index 6a2ff28f8..58b7be720 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/ArmorSkinRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/item/ArmorSkinRegistry.java @@ -1,17 +1,24 @@ package com.sammy.malum.registry.common.item; -import com.sammy.malum.*; -import com.sammy.malum.common.item.cosmetic.skins.*; -import com.sammy.malum.common.item.cosmetic.skins.ancient.*; -import com.sammy.malum.common.item.cosmetic.skins.risk_of_rain.*; -import com.sammy.malum.common.item.curiosities.armor.*; -import net.minecraft.world.item.*; -import net.minecraftforge.data.loading.*; -import net.minecraftforge.eventbus.api.*; -import net.minecraftforge.fml.common.*; -import net.minecraftforge.fml.event.lifecycle.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import com.sammy.malum.common.item.cosmetic.skins.PrideArmorSkin; +import com.sammy.malum.common.item.cosmetic.skins.UltrakillArmorSkin; +import com.sammy.malum.common.item.cosmetic.skins.ancient.AncientClothArmorSkin; +import com.sammy.malum.common.item.cosmetic.skins.ancient.AncientMetalArmorSkin; +import com.sammy.malum.common.item.cosmetic.skins.risk_of_rain.CommandoArmorSkin; +import com.sammy.malum.common.item.cosmetic.skins.risk_of_rain.ExecutionerArmorSkin; +import com.sammy.malum.common.item.curiosities.armor.MalumArmorItem; +import net.minecraft.world.item.Item; +import net.minecraftforge.data.loading.DatagenModLoader; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; -import java.util.*; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; @Mod.EventBusSubscriber(modid = MalumMod.MALUM, bus = Mod.EventBusSubscriber.Bus.MOD) public class ArmorSkinRegistry { diff --git a/src/main/java/com/sammy/malum/registry/common/item/ArmorTiers.java b/src/main/java/com/sammy/malum/registry/common/item/ArmorTiers.java index 96a3f2cc0..0ba8dc9de 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/ArmorTiers.java +++ b/src/main/java/com/sammy/malum/registry/common/item/ArmorTiers.java @@ -2,7 +2,6 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; -import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.Item; @@ -11,10 +10,8 @@ import javax.annotation.Nonnull; import java.util.function.Supplier; -public class ArmorTiers -{ - public enum ArmorTierEnum implements ArmorMaterial - { +public class ArmorTiers { + public enum ArmorTierEnum implements ArmorMaterial { SPIRIT_HUNTER("malum:spirit_hunter", 16, new int[]{1, 3, 4, 2}, 15, () -> SoundEvents.ARMOR_EQUIP_LEATHER, ItemRegistry.SPIRIT_FABRIC, 0), SOUL_STAINED_STEEL("malum:soul_stained_steel", 22, new int[]{2, 6, 7, 3}, 11, () -> SoundEvents.ARMOR_EQUIP_IRON, ItemRegistry.SOUL_STAINED_STEEL_INGOT, 2), SOUL_STAINED_STRONGHOLD("malum:soul_stained_stronghold", 36, new int[]{4, 7, 9, 5}, 13, () -> SoundEvents.ARMOR_EQUIP_IRON, ItemRegistry.SOUL_STAINED_STEEL_INGOT, 5); @@ -26,9 +23,8 @@ public enum ArmorTierEnum implements ArmorMaterial private final Supplier repairItem; private final float toughness; private static final int[] MAX_DAMAGE_ARRAY = new int[]{13, 15, 16, 11}; - - ArmorTierEnum(String name, int durabilityMultiplier, int[] damageReduction, int enchantability, Supplier equipSound, Supplier repairItem, float toughness) - { + + ArmorTierEnum(String name, int durabilityMultiplier, int[] damageReduction, int enchantability, Supplier equipSound, Supplier repairItem, float toughness) { this.name = name; this.durabilityMultiplier = durabilityMultiplier; this.damageReduction = damageReduction; @@ -37,59 +33,49 @@ public enum ArmorTierEnum implements ArmorMaterial this.repairItem = repairItem; this.toughness = toughness; } - + @Override - public int getDurabilityForType(ArmorItem.Type slot) - { + public int getDurabilityForType(ArmorItem.Type slot) { return durabilityMultiplier * MAX_DAMAGE_ARRAY[slot.getSlot().getIndex()]; } - + @Override - public int getDefenseForType(ArmorItem.Type slot) - { + public int getDefenseForType(ArmorItem.Type slot) { return damageReduction[slot.getSlot().getIndex()]; } - @Override - public int getEnchantmentValue() - { + public int getEnchantmentValue() { return enchantability; } - + @Nonnull @Override - public SoundEvent getEquipSound() - { + public SoundEvent getEquipSound() { return equipSound.get(); } - + @Nonnull @Override - public Ingredient getRepairIngredient() - { + public Ingredient getRepairIngredient() { return Ingredient.of(repairItem.get()); } - + @Nonnull @Override - public String getName() - { + public String getName() { return name; } - + @Override - public float getToughness() - { + public float getToughness() { return toughness; } - + @Override - public float getKnockbackResistance() - { - if (this.equals(SOUL_STAINED_STRONGHOLD)) - { + public float getKnockbackResistance() { + if (this.equals(SOUL_STAINED_STRONGHOLD)) { return 0.1f; } return 0; diff --git a/src/main/java/com/sammy/malum/registry/common/item/CurioRegistry.java b/src/main/java/com/sammy/malum/registry/common/item/CurioRegistry.java index 75507f290..217d7fe09 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/CurioRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/item/CurioRegistry.java @@ -1,7 +1,8 @@ package com.sammy.malum.registry.common.item; import com.sammy.malum.MalumMod; -import com.sammy.malum.client.renderer.curio.*; +import com.sammy.malum.client.renderer.curio.TokenOfGratitudeRenderer; +import com.sammy.malum.client.renderer.curio.TopHatCurioRenderer; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.InterModComms; @@ -11,23 +12,20 @@ import top.theillusivec4.curios.api.SlotTypeMessage; import top.theillusivec4.curios.api.client.CuriosRendererRegistry; -@Mod.EventBusSubscriber(modid= MalumMod.MALUM, bus= Mod.EventBusSubscriber.Bus.MOD) -public class CurioRegistry -{ +@Mod.EventBusSubscriber(modid = MalumMod.MALUM, bus = Mod.EventBusSubscriber.Bus.MOD) +public class CurioRegistry { @SubscribeEvent - public static void registerCurios(InterModEnqueueEvent event) - { + public static void registerCurios(InterModEnqueueEvent event) { InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("necklace").size(1).cosmetic().build()); InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("ring").size(2).cosmetic().build()); InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("belt").size(1).cosmetic().build()); InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder("charm").size(1).cosmetic().build()); } - @Mod.EventBusSubscriber(modid= MalumMod.MALUM, value = Dist.CLIENT, bus= Mod.EventBusSubscriber.Bus.MOD) - public static class ClientOnly - { + + @Mod.EventBusSubscriber(modid = MalumMod.MALUM, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD) + public static class ClientOnly { @SubscribeEvent - public static void registerCurioRenderers(FMLClientSetupEvent event) - { + public static void registerCurioRenderers(FMLClientSetupEvent event) { CuriosRendererRegistry.register(ItemRegistry.TOKEN_OF_GRATITUDE.get(), TokenOfGratitudeRenderer::new); CuriosRendererRegistry.register(ItemRegistry.TOPHAT.get(), TopHatCurioRenderer::new); } diff --git a/src/main/java/com/sammy/malum/registry/common/item/EnchantmentRegistry.java b/src/main/java/com/sammy/malum/registry/common/item/EnchantmentRegistry.java index 09ffba8f9..361452276 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/EnchantmentRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/item/EnchantmentRegistry.java @@ -12,8 +12,7 @@ import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; -public class EnchantmentRegistry -{ +public class EnchantmentRegistry { public static final DeferredRegister ENCHANTMENTS = DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, MalumMod.MALUM); public static final EnchantmentCategory SOUL_HUNTER_WEAPON = EnchantmentCategory.create(MalumMod.MALUM + ":soul_hunter_only", i -> i.getDefaultInstance().is(ItemTagRegistry.SOUL_HUNTER_WEAPON)); @@ -23,5 +22,5 @@ public class EnchantmentRegistry public static final RegistryObject REBOUND = ENCHANTMENTS.register("rebound", ReboundEnchantment::new); public static final RegistryObject HAUNTED = ENCHANTMENTS.register("haunted", HauntedEnchantment::new); public static final RegistryObject SPIRIT_PLUNDER = ENCHANTMENTS.register("spirit_plunder", SpiritPlunderEnchantment::new); - + } diff --git a/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java b/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java index 16fa1f986..232127344 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/item/ItemRegistry.java @@ -1,61 +1,104 @@ package com.sammy.malum.registry.common.item; -import com.sammy.malum.*; -import com.sammy.malum.common.block.curiosities.obelisk.*; -import com.sammy.malum.common.block.curiosities.spirit_crucible.*; -import com.sammy.malum.common.block.nature.*; -import com.sammy.malum.common.item.*; -import com.sammy.malum.common.item.cosmetic.curios.*; -import com.sammy.malum.common.item.cosmetic.skins.*; -import com.sammy.malum.common.item.cosmetic.weaves.*; -import com.sammy.malum.common.item.curiosities.*; -import com.sammy.malum.common.item.curiosities.armor.*; -import com.sammy.malum.common.item.curiosities.curios.*; -import com.sammy.malum.common.item.curiosities.curios.alchemical.*; -import com.sammy.malum.common.item.curiosities.curios.rotten.*; -import com.sammy.malum.common.item.curiosities.curios.misc.*; -import com.sammy.malum.common.item.curiosities.curios.prospector.*; -import com.sammy.malum.common.item.curiosities.curios.soulward.*; -import com.sammy.malum.common.item.curiosities.curios.spirit.*; -import com.sammy.malum.common.item.curiosities.curios.weeping.*; -import com.sammy.malum.common.item.curiosities.nitrate.*; -import com.sammy.malum.common.item.curiosities.weapons.*; -import com.sammy.malum.common.item.curiosities.weapons.unique.*; -import com.sammy.malum.common.item.ether.*; -import com.sammy.malum.common.item.food.*; -import com.sammy.malum.common.item.impetus.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.block.curiosities.obelisk.BrilliantObeliskBlockEntity; +import com.sammy.malum.common.block.curiosities.obelisk.RunewoodObeliskBlockEntity; +import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCatalyzerCoreBlockEntity; +import com.sammy.malum.common.block.curiosities.spirit_crucible.SpiritCrucibleCoreBlockEntity; +import com.sammy.malum.common.block.nature.MalumLeavesBlock; +import com.sammy.malum.common.item.BrillianceChunkItem; +import com.sammy.malum.common.item.EncyclopediaArcanaItem; +import com.sammy.malum.common.item.cosmetic.curios.CurioTokenOfGratitude; +import com.sammy.malum.common.item.cosmetic.curios.CurioTopHat; +import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; +import com.sammy.malum.common.item.cosmetic.weaves.GenericWeaveItem; +import com.sammy.malum.common.item.cosmetic.weaves.PrideweaveItem; +import com.sammy.malum.common.item.curiosities.SoulStaveItem; +import com.sammy.malum.common.item.curiosities.SpiritPouchItem; +import com.sammy.malum.common.item.curiosities.armor.SoulHunterArmorItem; +import com.sammy.malum.common.item.curiosities.armor.SoulStainedSteelArmorItem; +import com.sammy.malum.common.item.curiosities.curios.CurioGildedBelt; +import com.sammy.malum.common.item.curiosities.curios.CurioGildedRing; +import com.sammy.malum.common.item.curiosities.curios.CurioOrnateNecklace; +import com.sammy.malum.common.item.curiosities.curios.CurioOrnateRing; +import com.sammy.malum.common.item.curiosities.curios.alchemical.CurioAlchemicalRing; +import com.sammy.malum.common.item.curiosities.curios.alchemical.CurioCurativeRing; +import com.sammy.malum.common.item.curiosities.curios.alchemical.CurioRingOfProwess; +import com.sammy.malum.common.item.curiosities.curios.misc.CurioHarmonyNecklace; +import com.sammy.malum.common.item.curiosities.curios.misc.CurioNarrowNecklace; +import com.sammy.malum.common.item.curiosities.curios.misc.CurioWaterNecklace; +import com.sammy.malum.common.item.curiosities.curios.prospector.CurioDemolitionistRing; +import com.sammy.malum.common.item.curiosities.curios.prospector.CurioHoarderRing; +import com.sammy.malum.common.item.curiosities.curios.prospector.CurioProspectorBelt; +import com.sammy.malum.common.item.curiosities.curios.rotten.CurioStarvedBelt; +import com.sammy.malum.common.item.curiosities.curios.rotten.CurioVoraciousRing; +import com.sammy.malum.common.item.curiosities.curios.soulward.CurioMagebaneBelt; +import com.sammy.malum.common.item.curiosities.curios.spirit.CurioArcaneSpoilRing; +import com.sammy.malum.common.item.curiosities.curios.spirit.CurioMirrorNecklace; +import com.sammy.malum.common.item.curiosities.curios.weeping.CurioGrowingFleshRing; +import com.sammy.malum.common.item.curiosities.curios.weeping.CurioGruesomeSatiationRing; +import com.sammy.malum.common.item.curiosities.curios.weeping.CurioHiddenBladeNecklace; +import com.sammy.malum.common.item.curiosities.curios.weeping.CurioWatcherNecklace; +import com.sammy.malum.common.item.curiosities.nitrate.EthericNitrateItem; +import com.sammy.malum.common.item.curiosities.nitrate.VividNitrateItem; +import com.sammy.malum.common.item.curiosities.weapons.MagicScytheItem; +import com.sammy.malum.common.item.curiosities.weapons.MalumScytheItem; +import com.sammy.malum.common.item.curiosities.weapons.unique.MephiticEdgeScytheItem; +import com.sammy.malum.common.item.curiosities.weapons.unique.TyrvingItem; +import com.sammy.malum.common.item.ether.AbstractEtherItem; +import com.sammy.malum.common.item.ether.EtherBrazierItem; +import com.sammy.malum.common.item.ether.EtherItem; +import com.sammy.malum.common.item.ether.EtherTorchItem; +import com.sammy.malum.common.item.food.HolyCaramelItem; +import com.sammy.malum.common.item.food.HolySyrupItem; +import com.sammy.malum.common.item.food.UnholySyrupItem; +import com.sammy.malum.common.item.impetus.CrackedImpetusItem; +import com.sammy.malum.common.item.impetus.ImpetusItem; +import com.sammy.malum.common.item.impetus.NodeItem; import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.compability.farmersdelight.*; -import com.sammy.malum.registry.common.*; -import com.sammy.malum.registry.common.block.*; -import com.sammy.malum.registry.common.entity.*; -import com.sammy.malum.registry.common.item.tabs.*; -import net.minecraft.client.color.item.*; -import net.minecraft.client.renderer.item.*; -import net.minecraft.nbt.*; -import net.minecraft.resources.*; -import net.minecraft.world.effect.*; -import net.minecraft.world.entity.*; -import net.minecraft.world.food.*; +import com.sammy.malum.compability.farmersdelight.FarmersDelightCompat; +import com.sammy.malum.registry.common.SpiritTypeRegistry; +import com.sammy.malum.registry.common.block.BlockRegistry; +import com.sammy.malum.registry.common.entity.EntityRegistry; +import net.minecraft.client.color.item.ItemColors; +import net.minecraft.client.renderer.item.ItemProperties; +import net.minecraft.client.renderer.item.ItemPropertyFunction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.*; -import net.minecraft.world.level.block.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.client.event.*; -import net.minecraftforge.eventbus.api.*; -import net.minecraftforge.fml.common.*; -import net.minecraftforge.fml.event.lifecycle.*; -import net.minecraftforge.registries.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.item.*; +import net.minecraft.world.level.block.ComposterBlock; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterColorHandlersEvent; +import net.minecraftforge.eventbus.api.EventPriority; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.helpers.DataHelper; +import team.lodestar.lodestone.systems.item.LodestoneArmorItem; +import team.lodestar.lodestone.systems.item.LodestoneBoatItem; +import team.lodestar.lodestone.systems.item.LodestoneFuelBlockItem; +import team.lodestar.lodestone.systems.item.LodestoneFuelItem; import team.lodestar.lodestone.systems.item.tools.magic.*; -import team.lodestar.lodestone.systems.multiblock.*; - -import java.util.*; -import java.util.stream.*; - -import static com.sammy.malum.MalumMod.*; -import static com.sammy.malum.registry.common.item.ItemTiers.ItemTierEnum.*; -import static net.minecraft.world.item.Items.*; +import team.lodestar.lodestone.systems.multiblock.MultiBlockItem; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static com.sammy.malum.MalumMod.MALUM; +import static com.sammy.malum.registry.common.item.ItemTiers.ItemTierEnum.SOUL_STAINED_STEEL; +import static com.sammy.malum.registry.common.item.ItemTiers.ItemTierEnum.VOID; +import static net.minecraft.world.item.Items.GLASS_BOTTLE; import static net.minecraft.world.item.Rarity.UNCOMMON; @SuppressWarnings("unused") diff --git a/src/main/java/com/sammy/malum/registry/common/item/ItemTagRegistry.java b/src/main/java/com/sammy/malum/registry/common/item/ItemTagRegistry.java index cbdad8770..d3bfc1366 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/ItemTagRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/item/ItemTagRegistry.java @@ -1,7 +1,6 @@ package com.sammy.malum.registry.common.item; import com.sammy.malum.MalumMod; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; diff --git a/src/main/java/com/sammy/malum/registry/common/item/ItemTiers.java b/src/main/java/com/sammy/malum/registry/common/item/ItemTiers.java index cbef01c00..5d782f5a2 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/ItemTiers.java +++ b/src/main/java/com/sammy/malum/registry/common/item/ItemTiers.java @@ -6,10 +6,8 @@ import java.util.function.Supplier; -public class ItemTiers -{ - public enum ItemTierEnum implements Tier - { +public class ItemTiers { + public enum ItemTierEnum implements Tier { SOUL_STAINED_STEEL(1250, 7.5f, 2.5f, 3, 16, ItemRegistry.SOUL_STAINED_STEEL_INGOT), TYRVING(850, 8f, 1f, 3, 12, ItemRegistry.TWISTED_ROCK), VOID(1750, 8f, 6f, 4, 14, ItemRegistry.TWISTED_ROCK); //TODO: NOT TWISTED ROCK !!! @@ -19,9 +17,8 @@ public enum ItemTierEnum implements Tier private final int harvestLevel; private final int enchantability; private final Supplier repairItem; - - ItemTierEnum(int maxUses, float efficiency, float attackDamage, int harvestLevel, int enchantability, Supplier repairItem) - { + + ItemTierEnum(int maxUses, float efficiency, float attackDamage, int harvestLevel, int enchantability, Supplier repairItem) { this.maxUses = maxUses; this.efficiency = efficiency; this.attackDamage = attackDamage; @@ -29,40 +26,34 @@ public enum ItemTierEnum implements Tier this.enchantability = enchantability; this.repairItem = repairItem; } - + @Override - public int getUses() - { + public int getUses() { return maxUses; } - + @Override - public float getSpeed() - { + public float getSpeed() { return efficiency; } - + @Override - public float getAttackDamageBonus() - { + public float getAttackDamageBonus() { return attackDamage; } - + @Override - public int getLevel() - { + public int getLevel() { return harvestLevel; } - + @Override - public int getEnchantmentValue() - { + public int getEnchantmentValue() { return enchantability; } - + @Override - public Ingredient getRepairIngredient() - { + public Ingredient getRepairIngredient() { return Ingredient.of(repairItem.get()); } } diff --git a/src/main/java/com/sammy/malum/registry/common/item/tabs/CreativeTabRegistry.java b/src/main/java/com/sammy/malum/registry/common/item/tabs/CreativeTabRegistry.java index aecf41ee0..be7630f06 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/tabs/CreativeTabRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/item/tabs/CreativeTabRegistry.java @@ -1,77 +1,15 @@ package com.sammy.malum.registry.common.item.tabs; import com.sammy.malum.MalumMod; -import com.sammy.malum.common.item.BrillianceChunkItem; -import com.sammy.malum.common.item.cosmetic.curios.CurioTokenOfGratitude; -import com.sammy.malum.common.item.cosmetic.curios.CurioTopHat; -import com.sammy.malum.common.item.cosmetic.weaves.GenericWeaveItem; -import com.sammy.malum.common.item.cosmetic.weaves.PrideweaveItem; -import com.sammy.malum.common.item.curiosities.SoulStaveItem; -import com.sammy.malum.common.item.curiosities.SpiritPouchItem; -import com.sammy.malum.common.item.curiosities.armor.SoulHunterArmorItem; -import com.sammy.malum.common.item.curiosities.armor.SoulStainedSteelArmorItem; -import com.sammy.malum.common.item.curiosities.curios.CurioGildedBelt; -import com.sammy.malum.common.item.curiosities.curios.CurioGildedRing; -import com.sammy.malum.common.item.curiosities.curios.CurioOrnateNecklace; -import com.sammy.malum.common.item.curiosities.curios.CurioOrnateRing; -import com.sammy.malum.common.item.curiosities.curios.alchemical.CurioAlchemicalRing; -import com.sammy.malum.common.item.curiosities.curios.alchemical.CurioCurativeRing; -import com.sammy.malum.common.item.curiosities.curios.alchemical.CurioRingOfProwess; -import com.sammy.malum.common.item.curiosities.curios.misc.CurioHarmonyNecklace; -import com.sammy.malum.common.item.curiosities.curios.misc.CurioNarrowNecklace; -import com.sammy.malum.common.item.curiosities.curios.misc.CurioWaterNecklace; -import com.sammy.malum.common.item.curiosities.curios.prospector.CurioDemolitionistRing; -import com.sammy.malum.common.item.curiosities.curios.prospector.CurioHoarderRing; -import com.sammy.malum.common.item.curiosities.curios.prospector.CurioProspectorBelt; -import com.sammy.malum.common.item.curiosities.curios.rotten.CurioStarvedBelt; -import com.sammy.malum.common.item.curiosities.curios.rotten.CurioVoraciousRing; -import com.sammy.malum.common.item.curiosities.curios.soulward.CurioMagebaneBelt; -import com.sammy.malum.common.item.curiosities.curios.spirit.CurioArcaneSpoilRing; -import com.sammy.malum.common.item.curiosities.curios.spirit.CurioMirrorNecklace; -import com.sammy.malum.common.item.curiosities.curios.weeping.CurioGrowingFleshRing; -import com.sammy.malum.common.item.curiosities.curios.weeping.CurioGruesomeSatiationRing; -import com.sammy.malum.common.item.curiosities.curios.weeping.CurioHiddenBladeNecklace; -import com.sammy.malum.common.item.curiosities.curios.weeping.CurioWatcherNecklace; -import com.sammy.malum.common.item.curiosities.nitrate.EthericNitrateItem; -import com.sammy.malum.common.item.curiosities.nitrate.VividNitrateItem; -import com.sammy.malum.common.item.curiosities.weapons.MagicScytheItem; -import com.sammy.malum.common.item.curiosities.weapons.MalumScytheItem; -import com.sammy.malum.common.item.curiosities.weapons.unique.MephiticEdgeScytheItem; -import com.sammy.malum.common.item.curiosities.weapons.unique.TyrvingItem; -import com.sammy.malum.common.item.ether.EtherBrazierItem; -import com.sammy.malum.common.item.ether.EtherItem; -import com.sammy.malum.common.item.ether.EtherTorchItem; -import com.sammy.malum.common.item.food.HolyCaramelItem; -import com.sammy.malum.common.item.food.HolySyrupItem; -import com.sammy.malum.common.item.impetus.CrackedImpetusItem; -import com.sammy.malum.common.item.impetus.ImpetusItem; -import com.sammy.malum.common.item.impetus.NodeItem; -import com.sammy.malum.common.item.spirit.FusedConsciousnessItem; -import com.sammy.malum.common.item.spirit.SpiritShardItem; -import com.sammy.malum.compability.farmersdelight.FarmersDelightCompat; -import com.sammy.malum.registry.common.SpiritTypeRegistry; -import com.sammy.malum.registry.common.block.BlockRegistry; -import com.sammy.malum.registry.common.entity.EntityRegistry; -import com.sammy.malum.registry.common.item.*; +import com.sammy.malum.registry.common.item.ItemRegistry; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.*; +import net.minecraft.world.item.CreativeModeTab; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.RegistryObject; -import team.lodestar.lodestone.systems.item.LodestoneBoatItem; -import team.lodestar.lodestone.systems.item.LodestoneFuelBlockItem; -import team.lodestar.lodestone.systems.item.LodestoneFuelItem; -import team.lodestar.lodestone.systems.item.tools.magic.*; import static com.sammy.malum.registry.common.item.ItemRegistry.*; -import static com.sammy.malum.registry.common.item.ItemTiers.ItemTierEnum.SOUL_STAINED_STEEL; -import static com.sammy.malum.registry.common.item.ItemTiers.ItemTierEnum.VOID; -import static net.minecraft.world.item.Items.GLASS_BOTTLE; -import static net.minecraft.world.item.Rarity.UNCOMMON; public class CreativeTabRegistry { @@ -126,7 +64,7 @@ public class CreativeTabRegistry { //public static final MalumTab VOID = new MalumTab("void_chronicles", ItemRegistry.STRANGE_NUCLEUS); //public static final MalumTab COSMETIC = new MalumTab("cosmetics", ItemRegistry.WEAVERS_WORKBENCH); - public static void populateItemGroups(BuildCreativeModeTabContentsEvent event){ + public static void populateItemGroups(BuildCreativeModeTabContentsEvent event) { if (event.getTabKey() == CONTENT.getKey()) { event.accept(SACRED_SPIRIT); event.accept(WICKED_SPIRIT); @@ -164,7 +102,7 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event){ event.accept(BLOCK_OF_RAW_SOULSTONE); event.accept(PROCESSED_SOULSTONE); event.accept(BLOCK_OF_SOULSTONE); - + event.accept(ETHER); event.accept(ETHER_TORCH); event.accept(TAINTED_ETHER_BRAZIER); @@ -265,9 +203,9 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event){ event.accept(TWISTED_ROCK_TILES_SLAB); event.accept(SMALL_TWISTED_ROCK_BRICKS_SLAB); event.accept(RUNIC_TWISTED_ROCK_BRICKS_SLAB); - event.accept(RUNIC_TWISTED_ROCK_TILES_SLAB ); + event.accept(RUNIC_TWISTED_ROCK_TILES_SLAB); event.accept(RUNIC_SMALL_TWISTED_ROCK_BRICKS_SLAB); - + event.accept(TWISTED_ROCK_STAIRS); event.accept(SMOOTH_TWISTED_ROCK_STAIRS); event.accept(POLISHED_TWISTED_ROCK_STAIRS); @@ -277,18 +215,18 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event){ event.accept(RUNIC_TWISTED_ROCK_BRICKS_STAIRS); event.accept(RUNIC_TWISTED_ROCK_TILES_STAIRS); event.accept(RUNIC_SMALL_TWISTED_ROCK_BRICKS_STAIRS); - + event.accept(TWISTED_ROCK_ITEM_STAND); event.accept(TWISTED_ROCK_ITEM_PEDESTAL); //endregion twisted rock } - - if(event.getTabKey() == NATURE.getKey()) { + + if (event.getTabKey() == NATURE.getKey()) { //region runewood event.accept(HOLY_SAP); event.accept(HOLY_SAPBALL); event.accept(HOLY_SYRUP); - + event.accept(RUNEWOOD_LEAVES); event.accept(RUNEWOOD_SAPLING); @@ -355,7 +293,7 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event){ event.accept(COPPER_NODE); event.accept(CRACKED_GOLD_IMPETUS); event.accept(GOLD_IMPETUS); - event.accept(GOLD_NODE ); + event.accept(GOLD_NODE); event.accept(CRACKED_LEAD_IMPETUS); event.accept(LEAD_IMPETUS); event.accept(LEAD_NODE); @@ -384,7 +322,7 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event){ event.accept(CRACKED_ALCHEMICAL_IMPETUS); event.accept(ALCHEMICAL_IMPETUS); } - + if (event.getTabKey() == CONTENT.getKey()) { event.accept(SPIRIT_POUCH); event.accept(CRUDE_SCYTHE); @@ -395,7 +333,7 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event){ event.accept(SOUL_STAINED_STEEL_AXE); event.accept(SOUL_STAINED_STEEL_SHOVEL); event.accept(SOUL_STAINED_STEEL_HOE); - + event.accept(SOUL_STAINED_STEEL_HELMET); event.accept(SOUL_STAINED_STEEL_CHESTPLATE); @@ -413,28 +351,28 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event){ event.accept(VIVID_NITRATE); event.accept(GILDED_RING); - event.accept(GILDED_BELT ); - event.accept(ORNATE_RING ); + event.accept(GILDED_BELT); + event.accept(ORNATE_RING); event.accept(ORNATE_NECKLACE); - event.accept(RING_OF_ESOTERIC_SPOILS ); + event.accept(RING_OF_ESOTERIC_SPOILS); event.accept(RING_OF_CURATIVE_TALENT); - event.accept(RING_OF_ARCANE_PROWESS ); - event.accept(RING_OF_ALCHEMICAL_MASTERY ); + event.accept(RING_OF_ARCANE_PROWESS); + event.accept(RING_OF_ALCHEMICAL_MASTERY); event.accept(RING_OF_DESPERATE_VORACITY); - event.accept(RING_OF_THE_HOARDER ); - event.accept(RING_OF_THE_DEMOLITIONIST ); + event.accept(RING_OF_THE_HOARDER); + event.accept(RING_OF_THE_DEMOLITIONIST); event.accept(NECKLACE_OF_THE_MYSTIC_MIRROR); event.accept(NECKLACE_OF_TIDAL_AFFINITY); - event.accept(NECKLACE_OF_THE_NARROW_EDGE ); + event.accept(NECKLACE_OF_THE_NARROW_EDGE); event.accept(NECKLACE_OF_BLISSFUL_HARMONY); event.accept(BELT_OF_THE_STARVED); - event.accept(BELT_OF_THE_PROSPECTOR ); - event.accept(BELT_OF_THE_MAGEBANE ); + event.accept(BELT_OF_THE_PROSPECTOR); + event.accept(BELT_OF_THE_MAGEBANE); } - + if (event.getTabKey() == COSMETIC.getKey()) { //region cosmetics event.accept(ESOTERIC_SPOOL); @@ -465,25 +403,25 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event){ event.accept(TOPHAT); } - + if (event.getTabKey() == VOID.getKey()) { event.accept(VOID_SALTS); event.accept(NULL_SLATE); event.accept(STRANGE_NUCLEUS); - event.accept(CRYSTALLIZED_NIHILITY ); + event.accept(CRYSTALLIZED_NIHILITY); event.accept(ANOMALOUS_SNARE); event.accept(FUSED_CONSCIOUSNESS); } - + if (event.getTabKey() == VOID.getKey()) { - event.accept(RING_OF_GROWING_FLESH ); + event.accept(RING_OF_GROWING_FLESH); event.accept(RING_OF_GRUESOME_SATIATION); event.accept(NECKLACE_OF_THE_HIDDEN_BLADE); event.accept(NECKLACE_OF_THE_WATCHER); } - + if (false) { event.accept(MEPHITIC_EDGE); event.accept(SOUL_STAINED_STEEL_KNIFE); diff --git a/src/main/java/com/sammy/malum/registry/common/recipe/RecipeSerializerRegistry.java b/src/main/java/com/sammy/malum/registry/common/recipe/RecipeSerializerRegistry.java index 4d53b7aef..7bddf99b8 100644 --- a/src/main/java/com/sammy/malum/registry/common/recipe/RecipeSerializerRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/recipe/RecipeSerializerRegistry.java @@ -5,11 +5,7 @@ import com.sammy.malum.common.recipe.vanilla.MetalNodeBlastingRecipe; import com.sammy.malum.common.recipe.vanilla.MetalNodeSmeltingRecipe; import com.sammy.malum.common.recipe.vanilla.NodeCookingSerializer; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.RecipeType; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; @@ -18,8 +14,8 @@ public class RecipeSerializerRegistry { public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, MalumMod.MALUM); - public static final RegistryObject> METAL_NODE_BLASTING_SERIALIZER = RECIPE_SERIALIZERS.register(MetalNodeBlastingRecipe.NAME, ()->new NodeCookingSerializer<>(MetalNodeBlastingRecipe::new, 100)); - public static final RegistryObject> METAL_NODE_SMELTING_SERIALIZER = RECIPE_SERIALIZERS.register(MetalNodeSmeltingRecipe.NAME, ()->new NodeCookingSerializer<>(MetalNodeSmeltingRecipe::new, 200)); + public static final RegistryObject> METAL_NODE_BLASTING_SERIALIZER = RECIPE_SERIALIZERS.register(MetalNodeBlastingRecipe.NAME, () -> new NodeCookingSerializer<>(MetalNodeBlastingRecipe::new, 100)); + public static final RegistryObject> METAL_NODE_SMELTING_SERIALIZER = RECIPE_SERIALIZERS.register(MetalNodeSmeltingRecipe.NAME, () -> new NodeCookingSerializer<>(MetalNodeSmeltingRecipe::new, 200)); public static final RegistryObject> INFUSION_RECIPE_SERIALIZER = RECIPE_SERIALIZERS.register(SpiritInfusionRecipe.NAME, SpiritInfusionRecipe.Serializer::new); public static final RegistryObject> VOID_FAVOR_RECIPE_SERIALIZER = RECIPE_SERIALIZERS.register(FavorOfTheVoidRecipe.NAME, FavorOfTheVoidRecipe.Serializer::new); diff --git a/src/main/java/com/sammy/malum/registry/common/recipe/RecipeTypeRegistry.java b/src/main/java/com/sammy/malum/registry/common/recipe/RecipeTypeRegistry.java index e75a93c68..442f4d67c 100644 --- a/src/main/java/com/sammy/malum/registry/common/recipe/RecipeTypeRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/recipe/RecipeTypeRegistry.java @@ -1,29 +1,28 @@ - package com.sammy.malum.registry.common.recipe; +package com.sammy.malum.registry.common.recipe; import com.sammy.malum.MalumMod; import com.sammy.malum.common.recipe.*; -import net.minecraft.core.Registry; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeType; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; - public class RecipeTypeRegistry { +public class RecipeTypeRegistry { - public static final DeferredRegister> RECIPE_TYPES = DeferredRegister.create(ForgeRegistries.RECIPE_TYPES.getRegistryKey(), MalumMod.MALUM); + public static final DeferredRegister> RECIPE_TYPES = DeferredRegister.create(ForgeRegistries.RECIPE_TYPES.getRegistryKey(), MalumMod.MALUM); - public static final RegistryObject> VOID_FAVOR = RECIPE_TYPES.register(FavorOfTheVoidRecipe.NAME, () -> registerRecipeType(FavorOfTheVoidRecipe.NAME)); - public static final RegistryObject> SPIRIT_INFUSION = RECIPE_TYPES.register(SpiritInfusionRecipe.NAME, () -> registerRecipeType(SpiritInfusionRecipe.NAME)); - public static final RegistryObject> SPIRIT_FOCUSING = RECIPE_TYPES.register(SpiritFocusingRecipe.NAME, () -> registerRecipeType(SpiritFocusingRecipe.NAME)); - public static final RegistryObject> SPIRIT_TRANSMUTATION = RECIPE_TYPES.register(SpiritTransmutationRecipe.NAME, () -> registerRecipeType(SpiritTransmutationRecipe.NAME)); - public static final RegistryObject> SPIRIT_REPAIR = RECIPE_TYPES.register(SpiritRepairRecipe.NAME, () -> registerRecipeType(SpiritRepairRecipe.NAME)); + public static final RegistryObject> VOID_FAVOR = RECIPE_TYPES.register(FavorOfTheVoidRecipe.NAME, () -> registerRecipeType(FavorOfTheVoidRecipe.NAME)); + public static final RegistryObject> SPIRIT_INFUSION = RECIPE_TYPES.register(SpiritInfusionRecipe.NAME, () -> registerRecipeType(SpiritInfusionRecipe.NAME)); + public static final RegistryObject> SPIRIT_FOCUSING = RECIPE_TYPES.register(SpiritFocusingRecipe.NAME, () -> registerRecipeType(SpiritFocusingRecipe.NAME)); + public static final RegistryObject> SPIRIT_TRANSMUTATION = RECIPE_TYPES.register(SpiritTransmutationRecipe.NAME, () -> registerRecipeType(SpiritTransmutationRecipe.NAME)); + public static final RegistryObject> SPIRIT_REPAIR = RECIPE_TYPES.register(SpiritRepairRecipe.NAME, () -> registerRecipeType(SpiritRepairRecipe.NAME)); - public static > RecipeType registerRecipeType(final String identifier) { - return new RecipeType<>() { - public String toString() { - return MalumMod.MALUM + ":" + identifier; - } - }; - } - } \ No newline at end of file + public static > RecipeType registerRecipeType(final String identifier) { + return new RecipeType<>() { + public String toString() { + return MalumMod.MALUM + ":" + identifier; + } + }; + } +} \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/registry/common/worldgen/ConfiguredFeatureRegistry.java b/src/main/java/com/sammy/malum/registry/common/worldgen/ConfiguredFeatureRegistry.java new file mode 100644 index 000000000..31965c0f4 --- /dev/null +++ b/src/main/java/com/sammy/malum/registry/common/worldgen/ConfiguredFeatureRegistry.java @@ -0,0 +1,10 @@ +package com.sammy.malum.registry.common.worldgen; + +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; + +public interface ConfiguredFeatureRegistry { + + static void bootstrap(BootstapContext> configuredFeatureBootstapContext) { + } +} diff --git a/src/main/java/com/sammy/malum/registry/common/worldgen/FeatureRegistry.java b/src/main/java/com/sammy/malum/registry/common/worldgen/FeatureRegistry.java index 75d09c210..d311f9db7 100644 --- a/src/main/java/com/sammy/malum/registry/common/worldgen/FeatureRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/worldgen/FeatureRegistry.java @@ -36,19 +36,17 @@ import java.util.List; import static com.sammy.malum.MalumMod.MALUM; -import static net.minecraft.data.worldgen.features.OreFeatures.DEEPSLATE_ORE_REPLACEABLES; -import static net.minecraft.data.worldgen.features.OreFeatures.STONE_ORE_REPLACEABLES; import static net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration.INSTANCE; -@Mod.EventBusSubscriber(modid= MalumMod.MALUM, bus= Mod.EventBusSubscriber.Bus.MOD) +@Mod.EventBusSubscriber(modid = MalumMod.MALUM, bus = Mod.EventBusSubscriber.Bus.MOD) public class FeatureRegistry { - +/* public static final DeferredRegister> FEATURE_TYPES = DeferredRegister.create(ForgeRegistries.FEATURES, MALUM); public static final RegistryObject WEEPING_WELL = FEATURE_TYPES.register("weeping_well", WeepingWellFeature::new); public static final RegistryObject RUNEWOOD_TREE = FEATURE_TYPES.register("runewood_tree", RunewoodTreeFeature::new); public static final RegistryObject SOULWOOD_TREE = FEATURE_TYPES.register("soulwood_tree", SoulwoodTreeFeature::new); - public static final RegistryObject CTHONIC_GOLD_GEODE = FEATURE_TYPES.register("cthonic_gold_geode", ()->new RareEarthsGeode(GeodeConfiguration.CODEC)); + public static final RegistryObject CTHONIC_GOLD_GEODE = FEATURE_TYPES.register("cthonic_gold_geode", () -> new RareEarthsGeode(GeodeConfiguration.CODEC)); public static final class ConfiguredFeatures { @@ -115,5 +113,10 @@ public static final class PlacedFeatures { RarityFilter.onAverageOnceEvery(30), InSquarePlacement.spread(), HeightRangePlacement.uniform(VerticalAnchor.aboveBottom(6), VerticalAnchor.aboveBottom(40)), BiomeFilter.biome(), DimensionPlacementFilter.of(DimensionPlacementFilter.fromStrings(CommonConfig.CTHONIC_GOLD_ALLOWED_DIMENSIONS.getConfigValue()))); + + } + + + */ } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/registry/common/worldgen/PlacedFeatureRegistry.java b/src/main/java/com/sammy/malum/registry/common/worldgen/PlacedFeatureRegistry.java new file mode 100644 index 000000000..de2c1aadd --- /dev/null +++ b/src/main/java/com/sammy/malum/registry/common/worldgen/PlacedFeatureRegistry.java @@ -0,0 +1,9 @@ +package com.sammy.malum.registry.common.worldgen; + +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; + +public interface PlacedFeatureRegistry { + static void bootstrap(BootstapContext placedFeatureBootstapContext) { + } +} diff --git a/src/main/java/com/sammy/malum/visual_effects/ItemCrumbleParticleEffects.java b/src/main/java/com/sammy/malum/visual_effects/ItemCrumbleParticleEffects.java index 8571ac301..ebb0222d0 100644 --- a/src/main/java/com/sammy/malum/visual_effects/ItemCrumbleParticleEffects.java +++ b/src/main/java/com/sammy/malum/visual_effects/ItemCrumbleParticleEffects.java @@ -1,24 +1,22 @@ package com.sammy.malum.visual_effects; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.client.particle.*; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.client.particle.ParticleRenderType; import net.minecraft.util.RandomSource; -import net.minecraft.world.item.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; -import team.lodestar.lodestone.systems.particle.type.*; - -import java.util.*; -import java.util.function.*; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import team.lodestar.lodestone.helpers.RandomHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.LodestoneWorldParticleActor; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.ItemCrumbParticleBuilder; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; + +import java.util.function.Consumer; import static net.minecraft.util.Mth.nextFloat; @@ -32,6 +30,7 @@ public static ParticleEffectSpawner spawnItemCrumbs(Le final ItemCrumbParticleBuilder worldParticleBuilder = makeCrumbles(rand, stack, spinData, lifetime, slowDown); return new ParticleEffectSpawner<>(level, pos, worldParticleBuilder); } + public static ParticleEffectSpawner spawnGlowingItemCrumbs(Level level, Vec3 pos, ItemStack stack, MalumSpiritType spiritType) { var rand = level.getRandom(); diff --git a/src/main/java/com/sammy/malum/visual_effects/ParticleEffectSpawner.java b/src/main/java/com/sammy/malum/visual_effects/ParticleEffectSpawner.java index da5fa8c2a..37379b004 100644 --- a/src/main/java/com/sammy/malum/visual_effects/ParticleEffectSpawner.java +++ b/src/main/java/com/sammy/malum/visual_effects/ParticleEffectSpawner.java @@ -1,12 +1,12 @@ package com.sammy.malum.visual_effects; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.systems.particle.builder.*; +import net.minecraft.world.phys.Vec3; +import team.lodestar.lodestone.systems.particle.builder.AbstractWorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; -import javax.annotation.*; -import java.util.function.*; -import java.util.logging.*; +import javax.annotation.Nullable; +import java.util.function.Consumer; public class ParticleEffectSpawner> { diff --git a/src/main/java/com/sammy/malum/visual_effects/ScreenParticleEffects.java b/src/main/java/com/sammy/malum/visual_effects/ScreenParticleEffects.java index 8014b4d42..7e1859df6 100644 --- a/src/main/java/com/sammy/malum/visual_effects/ScreenParticleEffects.java +++ b/src/main/java/com/sammy/malum/visual_effects/ScreenParticleEffects.java @@ -1,24 +1,18 @@ package com.sammy.malum.visual_effects; -import com.sammy.malum.common.item.ether.*; -import net.minecraft.client.*; -import net.minecraft.util.*; -import net.minecraft.world.item.*; +import net.minecraft.client.Minecraft; +import net.minecraft.util.Mth; import net.minecraft.world.level.Level; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; -import team.lodestar.lodestone.systems.particle.screen.*; -import team.lodestar.lodestone.systems.particle.screen.base.*; +import team.lodestar.lodestone.setup.LodestoneScreenParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.ScreenParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.render_types.LodestoneScreenParticleRenderType; +import team.lodestar.lodestone.systems.particle.screen.ScreenParticleHolder; import java.awt.*; -import java.util.*; -import java.util.logging.*; import static net.minecraft.util.Mth.nextFloat; @@ -53,8 +47,8 @@ public static void spawnSpiritShardScreenParticles(ScreenParticleHolder target, public static void spawnVoidItemScreenParticles(ScreenParticleHolder target, Level level, float intensity, float partialTick) { float colorMultiplier = Mth.nextFloat(level.random, 0.4f, 1.2f); float timeMultiplier = Mth.nextFloat(level.random, 0.9f, 1.4f); - Color color = new Color((int)(31*colorMultiplier), (int)(19*colorMultiplier), (int)(31*colorMultiplier)); - Color endColor = new Color((int)(111*colorMultiplier), (int)(31*colorMultiplier), (int)(121*colorMultiplier)); + Color color = new Color((int) (31 * colorMultiplier), (int) (19 * colorMultiplier), (int) (31 * colorMultiplier)); + Color endColor = new Color((int) (111 * colorMultiplier), (int) (31 * colorMultiplier), (int) (121 * colorMultiplier)); float gameTime = level.getGameTime() + partialTick; var rand = Minecraft.getInstance().level.getRandom(); boolean spinDirection = level.random.nextBoolean(); @@ -64,7 +58,7 @@ public static void spawnVoidItemScreenParticles(ScreenParticleHolder target, Lev .setTransparencyData(GenericParticleData.create(0.1f, 0.5f, 0f).setEasing(Easing.SINE_IN_OUT).build()) .setColorData(ColorParticleData.create(color, endColor).setCoefficient(2f).build()) .setSpinData(spinParticleData) - .setLifetime((int) ((10 + rand.nextInt(10))*timeMultiplier)) + .setLifetime((int) ((10 + rand.nextInt(10)) * timeMultiplier)) .setRandomOffset(0.05f) .setRandomMotion(0.05f, 0.05f) .setRenderType(LodestoneScreenParticleRenderType.LUMITRANSPARENT) @@ -80,7 +74,7 @@ public static void spawnVoidItemScreenParticles(ScreenParticleHolder target, Lev .setRandomMotion(0.4f, 0.4f) .setRenderType(LodestoneScreenParticleRenderType.LUMITRANSPARENT) .spawnOnStack(0, 0) - .setLifetime((int) ((10 + rand.nextInt(2))*timeMultiplier)) + .setLifetime((int) ((10 + rand.nextInt(2)) * timeMultiplier)) .setSpinData(SpinParticleData.create(nextFloat(rand, 0.05f, 0.1f)).build()) .setScaleData(GenericParticleData.create(0.8f + rand.nextFloat() * 0.4f, 0f).build()) .setRandomMotion(0.01f, 0.01f) diff --git a/src/main/java/com/sammy/malum/visual_effects/SparkParticleEffects.java b/src/main/java/com/sammy/malum/visual_effects/SparkParticleEffects.java index c9e0f01b5..56a9441db 100644 --- a/src/main/java/com/sammy/malum/visual_effects/SparkParticleEffects.java +++ b/src/main/java/com/sammy/malum/visual_effects/SparkParticleEffects.java @@ -1,19 +1,19 @@ package com.sammy.malum.visual_effects; -import com.sammy.malum.core.systems.spirit.*; -import com.sammy.malum.registry.client.*; -import net.minecraft.world.level.*; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.registry.client.ParticleRegistry; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import team.lodestar.lodestone.helpers.RandomHelper; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.LodestoneWorldParticleActor; +import team.lodestar.lodestone.systems.particle.builder.SparkParticleBuilder; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; -import java.util.*; -import java.util.function.*; +import java.util.function.Consumer; import static net.minecraft.util.Mth.nextFloat; diff --git a/src/main/java/com/sammy/malum/visual_effects/SpiritAltarParticleEffects.java b/src/main/java/com/sammy/malum/visual_effects/SpiritAltarParticleEffects.java index ca5e93ef6..68551fd3d 100644 --- a/src/main/java/com/sammy/malum/visual_effects/SpiritAltarParticleEffects.java +++ b/src/main/java/com/sammy/malum/visual_effects/SpiritAltarParticleEffects.java @@ -1,26 +1,28 @@ package com.sammy.malum.visual_effects; -import com.sammy.malum.common.block.curiosities.obelisk.*; -import com.sammy.malum.common.block.curiosities.spirit_altar.*; -import com.sammy.malum.common.block.storage.*; -import com.sammy.malum.common.item.spirit.*; -import com.sammy.malum.common.recipe.*; - -import com.sammy.malum.core.systems.spirit.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.core.*; -import net.minecraft.util.*; -import net.minecraft.world.item.*; +import com.sammy.malum.common.block.curiosities.obelisk.RunewoodObeliskBlockEntity; +import com.sammy.malum.common.block.curiosities.spirit_altar.IAltarAccelerator; +import com.sammy.malum.common.block.curiosities.spirit_altar.SpiritAltarBlockEntity; +import com.sammy.malum.common.block.storage.MalumItemHolderBlockEntity; +import com.sammy.malum.common.item.spirit.SpiritShardItem; +import com.sammy.malum.common.recipe.SpiritInfusionRecipe; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.systems.blockentity.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; +import net.minecraft.world.phys.Vec3; +import team.lodestar.lodestone.helpers.DataHelper; +import team.lodestar.lodestone.helpers.RandomHelper; +import team.lodestar.lodestone.systems.blockentity.LodestoneBlockEntityInventory; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.LodestoneWorldParticleActor; +import team.lodestar.lodestone.systems.particle.builder.SparkParticleBuilder; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; -import java.util.*; -import java.util.function.*; +import java.util.function.Consumer; import static com.sammy.malum.visual_effects.SpiritLightSpecs.spiritLightSpecs; @@ -144,6 +146,7 @@ public static void eatItemParticles(SpiritAltarBlockEntity altar, MalumItemHolde crumbles.spawnParticles(); } } + public static void craftItemParticles(SpiritAltarBlockEntity altar, ColorEffectData colorData) { MalumSpiritType activeSpiritType = getCentralSpiritType(altar); if (activeSpiritType == null) { @@ -153,7 +156,7 @@ public static void craftItemParticles(SpiritAltarBlockEntity altar, ColorEffectD long gameTime = level.getGameTime(); var random = level.random; BlockPos altarPos = altar.getBlockPos(); - Vec3 targetPos = altar.getCentralItemOffset().add(altarPos.getX(),altarPos.getY(), altarPos.getZ()); + Vec3 targetPos = altar.getCentralItemOffset().add(altarPos.getX(), altarPos.getY(), altarPos.getZ()); for (int i = 0; i < 2; i++) { MalumSpiritType cyclingSpiritType = colorData.getCyclingColorRecord().spiritType(); @@ -228,6 +231,7 @@ public static void craftItemParticles(SpiritAltarBlockEntity altar, ColorEffectD lightSpecs.spawnParticles(); } } + public static void runewoodObeliskParticles(RunewoodObeliskBlockEntity obelisk, SpiritAltarBlockEntity altar, MalumSpiritType spiritType) { Level level = obelisk.getLevel(); BlockPos obeliskPos = obelisk.getBlockPos(); @@ -237,7 +241,7 @@ public static void runewoodObeliskParticles(RunewoodObeliskBlockEntity obelisk, var random = level.random; long gameTime = level.getGameTime(); BlockPos altarPos = altar.getBlockPos(); - Vec3 targetPos = altar.getCentralItemOffset().add(altarPos.getX(),altarPos.getY(), altarPos.getZ()); + Vec3 targetPos = altar.getCentralItemOffset().add(altarPos.getX(), altarPos.getY(), altarPos.getZ()); Vec3 velocity = targetPos.subtract(startPos).normalize().scale(RandomHelper.randomBetween(random, 0.01f, 0.02f)); double yOffset = Math.sin((gameTime % 360) / 30f) * 0.1f; Vec3 offsetPosition = DataHelper.rotatingRadialOffset(startPos.add(0, yOffset, 0), 0.45f, 0, 1, gameTime, 30); diff --git a/src/main/java/com/sammy/malum/visual_effects/SpiritLightSpecs.java b/src/main/java/com/sammy/malum/visual_effects/SpiritLightSpecs.java index 07548127d..39e967fc2 100644 --- a/src/main/java/com/sammy/malum/visual_effects/SpiritLightSpecs.java +++ b/src/main/java/com/sammy/malum/visual_effects/SpiritLightSpecs.java @@ -1,22 +1,23 @@ package com.sammy.malum.visual_effects; -import com.sammy.malum.core.systems.spirit.*; -import com.sammy.malum.registry.client.*; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import com.sammy.malum.registry.client.ParticleRegistry; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; -import team.lodestar.lodestone.helpers.*; +import team.lodestar.lodestone.helpers.DataHelper; +import team.lodestar.lodestone.helpers.RandomHelper; import team.lodestar.lodestone.setup.LodestoneParticleRegistry; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.LodestoneWorldParticleActor; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; -import team.lodestar.lodestone.systems.particle.type.*; +import team.lodestar.lodestone.systems.particle.type.LodestoneParticleType; -import java.util.*; import java.util.List; -import java.util.function.*; +import java.util.function.Consumer; +import java.util.function.Supplier; import static net.minecraft.util.Mth.nextFloat; @@ -38,11 +39,14 @@ public static void coolLookingShinyThing(Level level, Vec3 pos, MalumSpiritType } public static void rotatingLightSpecs(Level level, Vec3 pos, MalumSpiritType spiritType, float distance, int rotatingSpecs) { - rotatingLightSpecs(level, pos, spiritType, distance, rotatingSpecs, b -> {}); + rotatingLightSpecs(level, pos, spiritType, distance, rotatingSpecs, b -> { + }); } + public static void rotatingLightSpecs(Level level, Vec3 pos, MalumSpiritType spiritType, float distance, int rotatingSpecs, Consumer sharedModifier) { rotatingLightSpecs(level, pos, spiritType, distance, rotatingSpecs, sharedModifier, sharedModifier); } + public static void rotatingLightSpecs(Level level, Vec3 pos, MalumSpiritType spiritType, float distance, int rotatingSpecs, Consumer lightSpecModifier, Consumer bloomModifier) { long gameTime = level.getGameTime(); if (level.getGameTime() % 2L == 0) { diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/ParticleEffectType.java b/src/main/java/com/sammy/malum/visual_effects/networked/ParticleEffectType.java index 038c2bb1f..6f944c709 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/ParticleEffectType.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/ParticleEffectType.java @@ -1,19 +1,20 @@ package com.sammy.malum.visual_effects.networked; -import com.sammy.malum.common.packets.*; - -import com.sammy.malum.registry.common.*; -import com.sammy.malum.visual_effects.networked.data.*; +import com.sammy.malum.common.packets.ParticleEffectPacket; +import com.sammy.malum.registry.common.ParticleEffectTypeRegistry; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import com.sammy.malum.visual_effects.networked.data.NBTEffectData; +import com.sammy.malum.visual_effects.networked.data.PositionEffectData; import net.minecraft.util.RandomSource; -import net.minecraft.world.entity.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; -import net.minecraftforge.network.*; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.Level; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.network.PacketDistributor; -import java.util.*; -import java.util.function.*; +import java.util.function.Supplier; -import static com.sammy.malum.registry.common.PacketRegistry.*; +import static com.sammy.malum.registry.common.PacketRegistry.MALUM_CHANNEL; public abstract class ParticleEffectType { diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/SpiritMoteCreationParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/SpiritMoteCreationParticleEffect.java index b5fa29103..1e1cd8975 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/SpiritMoteCreationParticleEffect.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/SpiritMoteCreationParticleEffect.java @@ -1,20 +1,21 @@ package com.sammy.malum.visual_effects.networked; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.core.*; -import net.minecraft.util.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.function.*; +import java.util.function.Supplier; public class SpiritMoteCreationParticleEffect extends ParticleEffectType { diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/altar/SpiritAltarCraftParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/altar/SpiritAltarCraftParticleEffect.java index f896c73a4..0b89a7c57 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/altar/SpiritAltarCraftParticleEffect.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/altar/SpiritAltarCraftParticleEffect.java @@ -1,13 +1,12 @@ package com.sammy.malum.visual_effects.networked.altar; -import com.sammy.malum.common.block.curiosities.spirit_altar.*; -import com.sammy.malum.visual_effects.*; -import com.sammy.malum.visual_effects.networked.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.world.level.*; -import net.minecraftforge.api.distmarker.*; +import com.sammy.malum.common.block.curiosities.spirit_altar.SpiritAltarBlockEntity; +import com.sammy.malum.visual_effects.SpiritAltarParticleEffects; +import com.sammy.malum.visual_effects.networked.ParticleEffectType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; -import java.util.function.*; +import java.util.function.Supplier; public class SpiritAltarCraftParticleEffect extends ParticleEffectType { diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/altar/SpiritAltarEatItemParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/altar/SpiritAltarEatItemParticleEffect.java index becb70914..f024a627b 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/altar/SpiritAltarEatItemParticleEffect.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/altar/SpiritAltarEatItemParticleEffect.java @@ -1,17 +1,17 @@ package com.sammy.malum.visual_effects.networked.altar; -import com.sammy.malum.common.block.curiosities.spirit_altar.*; -import com.sammy.malum.common.block.storage.*; -import com.sammy.malum.visual_effects.*; -import com.sammy.malum.visual_effects.networked.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.core.*; -import net.minecraft.nbt.*; -import net.minecraft.world.item.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.helpers.*; +import com.sammy.malum.common.block.curiosities.spirit_altar.SpiritAltarBlockEntity; +import com.sammy.malum.common.block.storage.MalumItemHolderBlockEntity; +import com.sammy.malum.visual_effects.SpiritAltarParticleEffects; +import com.sammy.malum.visual_effects.networked.ParticleEffectType; +import com.sammy.malum.visual_effects.networked.data.NBTEffectData; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.helpers.BlockHelper; -import java.util.function.*; +import java.util.function.Supplier; public class SpiritAltarEatItemParticleEffect extends ParticleEffectType { diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/blight/BlightingMistParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/blight/BlightingMistParticleEffect.java index e6c475818..fec8ea8fe 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/blight/BlightingMistParticleEffect.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/blight/BlightingMistParticleEffect.java @@ -1,19 +1,21 @@ package com.sammy.malum.visual_effects.networked.blight; -import com.sammy.malum.visual_effects.networked.*; -import net.minecraft.core.*; -import net.minecraft.util.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; +import com.sammy.malum.visual_effects.networked.ParticleEffectType; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.render_types.LodestoneWorldParticleRenderType; import java.awt.*; -import java.util.function.*; +import java.util.function.Supplier; public class BlightingMistParticleEffect extends ParticleEffectType { @@ -29,13 +31,13 @@ public Supplier get() { for (int i = 0; i < 3; i++) { float multiplier = Mth.nextFloat(level.random, 0.4f, 1f); float timeMultiplier = Mth.nextFloat(level.random, 0.9f, 1.4f); - Color color = new Color((int)(31*multiplier), (int)(19*multiplier), (int)(31*multiplier)); + Color color = new Color((int) (31 * multiplier), (int) (19 * multiplier), (int) (31 * multiplier)); boolean spinDirection = level.random.nextBoolean(); WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) .setTransparencyData(GenericParticleData.create(0.15f, 1f, 0).build()) - .setSpinData(SpinParticleData.create(0.2f*(spinDirection ? 1 : -1)).build()) + .setSpinData(SpinParticleData.create(0.2f * (spinDirection ? 1 : -1)).build()) .setScaleData(GenericParticleData.create(0.15f, 0.2f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) - .setLifetime((int) (45*timeMultiplier)) + .setLifetime((int) (45 * timeMultiplier)) .setColorData(ColorParticleData.create(color, color).build()) .enableNoClip() .setRandomOffset(0.1f, 0f) @@ -45,8 +47,8 @@ public Supplier get() { WorldParticleBuilder.create(LodestoneParticleRegistry.SMOKE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.25f, 0.55f, 0).build()) - .setLifetime((int) (50*timeMultiplier)) - .setSpinData(SpinParticleData.create(0.1f*(spinDirection ? 1 : -1)).build()) + .setLifetime((int) (50 * timeMultiplier)) + .setSpinData(SpinParticleData.create(0.1f * (spinDirection ? 1 : -1)).build()) .setScaleData(GenericParticleData.create(0.35f, 0.4f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(color, color).build()) .setRandomOffset(0.2f, 0) @@ -55,13 +57,13 @@ public Supplier get() { .setRenderType(LodestoneWorldParticleRenderType.LUMITRANSPARENT) .repeatSurroundBlock(level, pos, 2, Direction.UP); - color = new Color((int)(80*multiplier), (int)(40*multiplier), (int)(80*multiplier)); + color = new Color((int) (80 * multiplier), (int) (40 * multiplier), (int) (80 * multiplier)); WorldParticleBuilder.create(LodestoneParticleRegistry.SMOKE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.02f, 0.15f, 0).build()) - .setSpinData(SpinParticleData.create(0.1f*(spinDirection ? 1 : -1)).build()) + .setSpinData(SpinParticleData.create(0.1f * (spinDirection ? 1 : -1)).build()) .setScaleData(GenericParticleData.create(0.35f, 0.4f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(color, color).build()) - .setLifetime((int) (50*timeMultiplier)) + .setLifetime((int) (50 * timeMultiplier)) .setRandomOffset(0.2f, 0) .enableNoClip() .setRandomMotion(0.01f, 0.005f) diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/data/ColorEffectData.java b/src/main/java/com/sammy/malum/visual_effects/networked/data/ColorEffectData.java index a25c55f5c..1dc7aeb31 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/data/ColorEffectData.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/data/ColorEffectData.java @@ -1,16 +1,17 @@ package com.sammy.malum.visual_effects.networked.data; -import com.sammy.malum.*; -import com.sammy.malum.core.helper.*; -import com.sammy.malum.core.systems.recipe.*; -import com.sammy.malum.core.systems.spirit.*; -import net.minecraft.network.*; +import com.sammy.malum.MalumMod; +import com.sammy.malum.core.helper.SpiritHelper; +import com.sammy.malum.core.systems.recipe.SpiritWithCount; +import com.sammy.malum.core.systems.spirit.MalumSpiritType; +import net.minecraft.network.FriendlyByteBuf; -import javax.annotation.*; +import javax.annotation.Nullable; import java.awt.*; -import java.util.*; -import java.util.function.*; -import java.util.stream.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.function.Function; +import java.util.stream.Collectors; public class ColorEffectData { @@ -20,9 +21,11 @@ public class ColorEffectData { public static ColorEffectData fromRecipe(Collection malumSpiritTypes) { return fromSpirits(malumSpiritTypes.stream().map(s -> s.type).collect(Collectors.toList()), ColorRecord::new); } + public static ColorEffectData fromSpirits(Collection malumSpiritTypes) { return fromSpirits(malumSpiritTypes, ColorRecord::new); } + public static ColorEffectData fromSpirits(Collection malumSpiritTypes, Function spiritColorMapper) { return new ColorEffectData(malumSpiritTypes.stream().map(spiritColorMapper).collect(Collectors.toList())); } @@ -119,9 +122,11 @@ public record ColorRecord(Color primaryColor, Color secondaryColor, @Nullable Ma public ColorRecord(Color color) { this(color, color); } + public ColorRecord(MalumSpiritType type) { this(type.getPrimaryColor(), type.getSecondaryColor(), type); } + public ColorRecord(Color primaryColor, Color secondaryColor) { this(primaryColor, secondaryColor, null); } diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/data/NBTEffectData.java b/src/main/java/com/sammy/malum/visual_effects/networked/data/NBTEffectData.java index 114e32985..c8e68600e 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/data/NBTEffectData.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/data/NBTEffectData.java @@ -1,7 +1,7 @@ package com.sammy.malum.visual_effects.networked.data; -import net.minecraft.nbt.*; -import net.minecraft.world.item.*; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; public class NBTEffectData { diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/data/PositionEffectData.java b/src/main/java/com/sammy/malum/visual_effects/networked/data/PositionEffectData.java index d5d7404a8..8a67568d3 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/data/PositionEffectData.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/data/PositionEffectData.java @@ -1,8 +1,8 @@ package com.sammy.malum.visual_effects.networked.data; -import net.minecraft.core.*; -import net.minecraft.network.*; -import net.minecraft.world.entity.*; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.Entity; public class PositionEffectData { @@ -35,6 +35,6 @@ public void encode(FriendlyByteBuf buf) { } public BlockPos getAsBlockPos() { - return new BlockPos((int)posX, (int)posY, (int)posZ); + return new BlockPos((int) posX, (int) posY, (int) posZ); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/generic/DrippingSmokeParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/generic/DrippingSmokeParticleEffect.java index c2a0114bb..cb78c7950 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/generic/DrippingSmokeParticleEffect.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/generic/DrippingSmokeParticleEffect.java @@ -1,26 +1,30 @@ package com.sammy.malum.visual_effects.networked.generic; -import com.sammy.malum.visual_effects.networked.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.util.*; -import net.minecraft.world.phys.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.visual_effects.networked.ParticleEffectType; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.LodestoneWorldParticleActor; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.function.*; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; public class DrippingSmokeParticleEffect extends ParticleEffectType { //Downwards spiraling mist of particles public final float intensity; + public DrippingSmokeParticleEffect(String id, float intensity) { super(id); this.intensity = intensity; @@ -45,7 +49,7 @@ public Supplier get() { int spinOffset = random.nextInt(360); WorldParticleBuilder.create(LodestoneParticleRegistry.SMOKE_PARTICLE) .setTransparencyData(GenericParticleData.create(0, 0.06f, 0).setCoefficient(1.2f).setEasing(Easing.SINE_IN_OUT, Easing.QUAD_IN).build()) - .setSpinData(SpinParticleData.create(0.05f*spinDirection, 0.2f*spinDirection, 0).setSpinOffset(spinOffset).setEasing(Easing.SINE_IN_OUT, Easing.SINE_IN).build()) + .setSpinData(SpinParticleData.create(0.05f * spinDirection, 0.2f * spinDirection, 0).setSpinOffset(spinOffset).setEasing(Easing.SINE_IN_OUT, Easing.SINE_IN).build()) .setScaleData(GenericParticleData.create(0.8f, 0.4f, 0f).setEasing(Easing.QUARTIC_IN_OUT, Easing.QUAD_IN).build()) .setColorData(ColorParticleData.create(primaryColor, secondaryColor).setEasing(Easing.BOUNCE_IN_OUT).build()) .setLifetime((int) (adjustedLifespan * Mth.nextFloat(random, 1.15f, 1.4f))) @@ -61,7 +65,7 @@ public Supplier get() { int spinOffset = random.nextInt(360); WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) .setTransparencyData(GenericParticleData.create(0.02f, 0.14f, 0).setEasing(Easing.SINE_IN_OUT, Easing.EXPO_OUT).build()) - .setSpinData(SpinParticleData.create(0.1f*spinDirection, 0.25f*spinDirection, 0).setSpinOffset(spinOffset).setEasing(Easing.SINE_IN_OUT, Easing.SINE_IN).build()) + .setSpinData(SpinParticleData.create(0.1f * spinDirection, 0.25f * spinDirection, 0).setSpinOffset(spinOffset).setEasing(Easing.SINE_IN_OUT, Easing.SINE_IN).build()) .setScaleData(GenericParticleData.create(0.6f, 0.3f, 0f).setEasing(Easing.SINE_IN_OUT, Easing.EXPO_OUT).build()) .setColorData(ColorParticleData.create(primaryColor, secondaryColor).setEasing(Easing.BOUNCE_IN_OUT).build()) .setLifetime((int) (adjustedLifespan * Mth.nextFloat(random, 0.9f, 1.2f))) diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/generic/HexingSmokeParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/generic/HexingSmokeParticleEffect.java index f44bd240b..0a25ec7cf 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/generic/HexingSmokeParticleEffect.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/generic/HexingSmokeParticleEffect.java @@ -1,20 +1,21 @@ package com.sammy.malum.visual_effects.networked.generic; -import com.sammy.malum.visual_effects.networked.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.util.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.visual_effects.networked.ParticleEffectType; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import net.minecraft.util.Mth; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.function.*; +import java.util.function.Supplier; public class HexingSmokeParticleEffect extends ParticleEffectType { @@ -37,7 +38,7 @@ public Supplier get() { double posX = positionData.posX; double posY = positionData.posY; double posZ = positionData.posZ; - int adjustedLifespan = (int) (20 * (intensity)*0.6f); + int adjustedLifespan = (int) (20 * (intensity) * 0.6f); for (int i = 0; i <= 3; i++) { int spinDirection = (random.nextBoolean() ? 1 : -1); WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) @@ -50,7 +51,7 @@ public Supplier get() { .setRandomOffset(0.2f, 0.2f) .setRandomMotion(0.02f) .addActor(p -> p.setParticleMotion(p.getParticleSpeed().scale(0.95f))) - .repeat(level, posX, posY, posZ, (int) (4*intensity)); + .repeat(level, posX, posY, posZ, (int) (4 * intensity)); } WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) .setTransparencyData(GenericParticleData.create(0.02f, 0.05f, 0).build()) @@ -62,7 +63,7 @@ public Supplier get() { .setRandomOffset(0.05f, 0.05f) .setRandomMotion(0.05f) .addActor(p -> p.setParticleMotion(p.getParticleSpeed().scale(0.5f))) - .repeat(level, posX, posY, posZ, (int) (6*intensity)); + .repeat(level, posX, posY, posZ, (int) (6 * intensity)); WorldParticleBuilder.create(LodestoneParticleRegistry.SMOKE_PARTICLE) .setTransparencyData(GenericParticleData.create(0, 0.05f, 0).build()) .setSpinData(SpinParticleData.create(0.1f, 0.25f, 0).setEasing(Easing.QUINTIC_OUT, Easing.SINE_IN).build()) @@ -73,7 +74,7 @@ public Supplier get() { .setRandomOffset(0.15f, 0.15f) .setRandomMotion(0.015f, 0.015f) .addActor(p -> p.setParticleMotion(p.getParticleSpeed().scale(0.92f))) - .repeat(level, posX, posY, posZ, (int) (10*intensity)); + .repeat(level, posX, posY, posZ, (int) (10 * intensity)); }; } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/generic/RisingSparklesParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/generic/RisingSparklesParticleEffect.java index 1642c0f43..7ee0bfe06 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/generic/RisingSparklesParticleEffect.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/generic/RisingSparklesParticleEffect.java @@ -1,21 +1,22 @@ package com.sammy.malum.visual_effects.networked.generic; -import com.sammy.malum.visual_effects.networked.*; -import com.sammy.malum.visual_effects.networked.data.*; -import net.minecraft.util.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; +import com.sammy.malum.visual_effects.networked.ParticleEffectType; +import com.sammy.malum.visual_effects.networked.data.ColorEffectData; +import net.minecraft.util.Mth; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; import java.awt.*; -import java.util.function.*; +import java.util.function.Supplier; public class RisingSparklesParticleEffect extends ParticleEffectType { diff --git a/src/main/java/com/sammy/malum/visual_effects/networked/weeping_well/WeepingWellReactionParticleEffect.java b/src/main/java/com/sammy/malum/visual_effects/networked/weeping_well/WeepingWellReactionParticleEffect.java index 3c667d03f..12490f9ae 100644 --- a/src/main/java/com/sammy/malum/visual_effects/networked/weeping_well/WeepingWellReactionParticleEffect.java +++ b/src/main/java/com/sammy/malum/visual_effects/networked/weeping_well/WeepingWellReactionParticleEffect.java @@ -1,20 +1,21 @@ package com.sammy.malum.visual_effects.networked.weeping_well; -import com.sammy.malum.visual_effects.networked.*; -import net.minecraft.util.*; -import net.minecraftforge.api.distmarker.*; -import team.lodestar.lodestone.helpers.*; -import team.lodestar.lodestone.setup.*; -import team.lodestar.lodestone.systems.easing.*; -import team.lodestar.lodestone.systems.particle.*; -import team.lodestar.lodestone.systems.particle.builder.*; -import team.lodestar.lodestone.systems.particle.data.*; -import team.lodestar.lodestone.systems.particle.data.color.*; -import team.lodestar.lodestone.systems.particle.data.spin.*; -import team.lodestar.lodestone.systems.particle.render_types.*; +import com.sammy.malum.visual_effects.networked.ParticleEffectType; +import net.minecraft.util.Mth; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import team.lodestar.lodestone.helpers.ColorHelper; +import team.lodestar.lodestone.setup.LodestoneParticleRegistry; +import team.lodestar.lodestone.systems.easing.Easing; +import team.lodestar.lodestone.systems.particle.SimpleParticleOptions; +import team.lodestar.lodestone.systems.particle.builder.WorldParticleBuilder; +import team.lodestar.lodestone.systems.particle.data.GenericParticleData; +import team.lodestar.lodestone.systems.particle.data.color.ColorParticleData; +import team.lodestar.lodestone.systems.particle.data.spin.SpinParticleData; +import team.lodestar.lodestone.systems.particle.render_types.LodestoneWorldParticleRenderType; import java.awt.*; -import java.util.function.*; +import java.util.function.Supplier; public class WeepingWellReactionParticleEffect extends ParticleEffectType { @@ -31,10 +32,10 @@ public Supplier get() { double posZ = positionData.posZ; for (int i = 0; i < 8; i++) { float multiplier = Mth.nextFloat(random, 0.1f, 1.5f); - Color color = new Color((int)(12*multiplier), (int)(4*multiplier), (int)(14*multiplier)); + Color color = new Color((int) (12 * multiplier), (int) (4 * multiplier), (int) (14 * multiplier)); int spinDirection = (random.nextBoolean() ? 1 : -1); int spinOffset = random.nextInt(360); - float motionMultiplier = (float) (1+Math.pow(random.nextFloat()+i*0.2f, 2)); + float motionMultiplier = (float) (1 + Math.pow(random.nextFloat() + i * 0.2f, 2)); float extraMotion = 0.2f * motionMultiplier * ((8 - i) / 8f); WorldParticleBuilder.create(LodestoneParticleRegistry.TWINKLE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.2f, 1f, 0).build()) @@ -55,13 +56,13 @@ public Supplier get() { int spinOffset = random.nextInt(360); for (int i = 0; i < 4; i++) { float multiplier = Mth.nextFloat(random, 0.1f, 1.5f); - Color color = new Color((int)(4*multiplier), (int)(2*multiplier), (int)(4*multiplier)); + Color color = new Color((int) (4 * multiplier), (int) (2 * multiplier), (int) (4 * multiplier)); int spinDirection = (random.nextBoolean() ? 1 : -1); - float scaleMultiplier = (float) (1+Math.pow(random.nextFloat(), 2)); + float scaleMultiplier = (float) (1 + Math.pow(random.nextFloat(), 2)); WorldParticleBuilder.create(LodestoneParticleRegistry.SPARKLE_PARTICLE) .setTransparencyData(GenericParticleData.create(0.7f, 0.5f, 0).setEasing(Easing.SINE_IN, Easing.CIRC_IN).build()) .setSpinData(SpinParticleData.create((0.125f + random.nextFloat() * 0.075f) * spinDirection).setSpinOffset(spinOffset).build()) - .setScaleData(GenericParticleData.create(1.8f*scaleMultiplier, 0.6f, 0).setEasing(Easing.EXPO_OUT, Easing.SINE_IN).build()) + .setScaleData(GenericParticleData.create(1.8f * scaleMultiplier, 0.6f, 0).setEasing(Easing.EXPO_OUT, Easing.SINE_IN).build()) .setColorData(ColorParticleData.create(color.brighter(), color.darker()).build()) .setLifetime(25) .setRandomOffset(0.6f) diff --git a/src/main/resources/data/malum/tags/worldgen/biome/has_structure/weeping_well_biomes.json b/src/main/resources/data/malum/tags/worldgen/biome/has_structure/weeping_well_biomes.json new file mode 100644 index 000000000..ae43694ad --- /dev/null +++ b/src/main/resources/data/malum/tags/worldgen/biome/has_structure/weeping_well_biomes.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "#minecraft:is_overworld" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/configured_feature/ore_blazing_quartz.json b/src/main/resources/data/malum/worldgen/configured_feature/ore_blazing_quartz.json new file mode 100644 index 000000000..3e6f05080 --- /dev/null +++ b/src/main/resources/data/malum/worldgen/configured_feature/ore_blazing_quartz.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 14, + "targets": [ + { + "state": { + "Name": "malum:blazing_quartz_ore" + }, + "target": { + "block": "minecraft:netherrack", + "predicate_type": "minecraft:block_match" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/configured_feature/ore_brilliant.json b/src/main/resources/data/malum/worldgen/configured_feature/ore_brilliant.json new file mode 100644 index 000000000..1db4b0e77 --- /dev/null +++ b/src/main/resources/data/malum/worldgen/configured_feature/ore_brilliant.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 4, + "targets": [ + { + "state": { + "Name": "malum:brilliant_stone" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "malum:brilliant_deepslate" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/configured_feature/ore_natural_quartz.json b/src/main/resources/data/malum/worldgen/configured_feature/ore_natural_quartz.json new file mode 100644 index 000000000..8f3de06d9 --- /dev/null +++ b/src/main/resources/data/malum/worldgen/configured_feature/ore_natural_quartz.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 5, + "targets": [ + { + "state": { + "Name": "malum:natural_quartz_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "malum:deepslate_quartz_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/configured_feature/ore_soulstone_surface.json b/src/main/resources/data/malum/worldgen/configured_feature/ore_soulstone_surface.json new file mode 100644 index 000000000..586aa570c --- /dev/null +++ b/src/main/resources/data/malum/worldgen/configured_feature/ore_soulstone_surface.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 6, + "targets": [ + { + "state": { + "Name": "malum:soulstone_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/configured_feature/ore_soulstone_underground.json b/src/main/resources/data/malum/worldgen/configured_feature/ore_soulstone_underground.json new file mode 100644 index 000000000..350c735be --- /dev/null +++ b/src/main/resources/data/malum/worldgen/configured_feature/ore_soulstone_underground.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 12, + "targets": [ + { + "state": { + "Name": "malum:soulstone_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "malum:deepslate_soulstone_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/placed_feature/ore_blazing_quartz.json b/src/main/resources/data/malum/worldgen/placed_feature/ore_blazing_quartz.json new file mode 100644 index 000000000..d075db778 --- /dev/null +++ b/src/main/resources/data/malum/worldgen/placed_feature/ore_blazing_quartz.json @@ -0,0 +1,27 @@ +{ + "feature": "malum:ore_blazing_quartz", + "placement": [ + { + "type": "minecraft:count", + "count": 16 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "max_inclusive": { + "below_top": 8 + }, + "min_inclusive": { + "above_bottom": 8 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/placed_feature/ore_brilliant.json b/src/main/resources/data/malum/worldgen/placed_feature/ore_brilliant.json new file mode 100644 index 000000000..f5975db0b --- /dev/null +++ b/src/main/resources/data/malum/worldgen/placed_feature/ore_brilliant.json @@ -0,0 +1,27 @@ +{ + "feature": "malum:ore_brilliant", + "placement": [ + { + "count": 3, + "type": "minecraft:count" + }, + { + "type": "minecraft:in_square" + }, + { + "height": { + "min_inclusive": { + "absolute": -64 + }, + "max_inclusive": { + "absolute": 30 + }, + "type": "minecraft:uniform" + }, + "type": "minecraft:height_range" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/placed_feature/ore_natural_quartz.json b/src/main/resources/data/malum/worldgen/placed_feature/ore_natural_quartz.json new file mode 100644 index 000000000..fd2b6ba50 --- /dev/null +++ b/src/main/resources/data/malum/worldgen/placed_feature/ore_natural_quartz.json @@ -0,0 +1,27 @@ +{ + "feature": "malum:ore_natural_quartz", + "placement": [ + { + "count": 2, + "type": "minecraft:count" + }, + { + "type": "minecraft:in_square" + }, + { + "height": { + "min_inclusive": { + "absolute": -64 + }, + "max_inclusive": { + "absolute": 10 + }, + "type": "minecraft:uniform" + }, + "type": "minecraft:height_range" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_lower.json b/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_lower.json new file mode 100644 index 000000000..d07e1b06e --- /dev/null +++ b/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_lower.json @@ -0,0 +1,27 @@ +{ + "feature": "malum:ore_soulstone_underground", + "placement": [ + { + "count": 8, + "type": "minecraft:count" + }, + { + "type": "minecraft:in_square" + }, + { + "height": { + "min_inclusive": { + "absolute": -64 + }, + "max_inclusive": { + "absolute": 30 + }, + "type": "minecraft:uniform" + }, + "type": "minecraft:height_range" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_upper.json b/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_upper.json new file mode 100644 index 000000000..7232d0e00 --- /dev/null +++ b/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_upper.json @@ -0,0 +1,27 @@ +{ + "feature": "malum:ore_soulstone_surface", + "placement": [ + { + "count": 8, + "type": "minecraft:count" + }, + { + "type": "minecraft:in_square" + }, + { + "height": { + "min_inclusive": { + "absolute": 60 + }, + "max_inclusive": { + "absolute": 100 + }, + "type": "minecraft:uniform" + }, + "type": "minecraft:height_range" + }, + { + "type": "minecraft:biome" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/structure/weeping_well.json b/src/main/resources/data/malum/worldgen/structure/weeping_well.json new file mode 100644 index 000000000..8f2c0fd52 --- /dev/null +++ b/src/main/resources/data/malum/worldgen/structure/weeping_well.json @@ -0,0 +1,22 @@ +{ + "type": "malum:weeping_well", + "start_pool": "malum:weeping_well", + "size": 1, + "max_distance_from_center": 10, + "biomes": "#malum:has_structure/weeping_well_biomes", + "step": "underground_structures", + "max_y": -10, + "min_y": -50, + "offset_in_ground": -4, + "use_expansion_hack": false, + "spawn_overrides": { + "monster": { + "bounding_box": "full", + "spawns": [] + }, + "creature": { + "bounding_box": "full", + "spawns": [] + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/structure_set/weeping_well.json b/src/main/resources/data/malum/worldgen/structure_set/weeping_well.json new file mode 100644 index 000000000..9a2137645 --- /dev/null +++ b/src/main/resources/data/malum/worldgen/structure_set/weeping_well.json @@ -0,0 +1,14 @@ +{ + "structures": [ + { + "structure": "malum:weeping_well", + "weight": 1 + } + ], + "placement": { + "type": "minecraft:random_spread", + "salt": 4206969, + "spacing": 12, + "separation": 8 + } +} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/template_pool/weeping_well.json b/src/main/resources/data/malum/worldgen/template_pool/weeping_well.json new file mode 100644 index 000000000..2f6eea1d9 --- /dev/null +++ b/src/main/resources/data/malum/worldgen/template_pool/weeping_well.json @@ -0,0 +1,14 @@ +{ + "fallback": "minecraft:empty", + "elements": [ + { + "weight": 1, + "element": { + "location": "malum:weeping_well", + "processors": "minecraft:empty", + "projection": "rigid", + "element_type": "minecraft:single_pool_element" + } + } + ] +} \ No newline at end of file From 30a78bde22c9b4adefd272cc82af752e31e85f8b Mon Sep 17 00:00:00 2001 From: mrsterner Date: Sat, 28 Oct 2023 17:50:34 +0200 Subject: [PATCH 3/5] fwe --- .gitignore | 2 + gradle.properties | 4 +- ...1.4.21.jar => lodestone-1.20.1-1.4.22.jar} | Bin 580066 -> 580061 bytes run-data/config/fml.toml | 25 + run-data/config/jei/jei-client.ini | 141 + run-data/config/jei/jei-colors.ini | 8 + run-data/config/jei/jei-debug.ini | 12 + run-data/config/jei/jei-mod-id-format.ini | 11 + run-data/config/worldstripper/stripper.json | 50 + src/generated/resources/.cache/cache | 2288 ----------------- .../iridescent_wall_ether_torch.json | 28 +- .../blockstates/natural_quartz_cluster.json | 42 +- .../polished_tainted_rock_slab.json | 6 +- .../polished_tainted_rock_stairs.json | 280 +- .../polished_twisted_rock_slab.json | 6 +- .../polished_twisted_rock_stairs.json | 280 +- .../malum/blockstates/runewood_door.json | 148 +- .../blockstates/runewood_item_stand.json | 42 +- .../blockstates/runewood_panel_slab.json | 6 +- .../blockstates/runewood_panel_stairs.json | 280 +- .../blockstates/runewood_planks_button.json | 124 +- .../blockstates/runewood_planks_fence.json | 36 +- .../runewood_planks_fence_gate.json | 100 +- .../blockstates/runewood_planks_slab.json | 6 +- .../blockstates/runewood_planks_stairs.json | 280 +- .../malum/blockstates/runewood_sign.json | 60 +- .../blockstates/runewood_tiles_slab.json | 6 +- .../blockstates/runewood_tiles_stairs.json | 280 +- .../blockstates/runewood_totem_pole.json | 152 +- .../malum/blockstates/runewood_trapdoor.json | 70 +- .../malum/blockstates/runewood_wall_sign.json | 14 +- .../runic_small_tainted_rock_bricks_slab.json | 6 +- ...unic_small_tainted_rock_bricks_stairs.json | 280 +- .../runic_small_tainted_rock_bricks_wall.json | 78 +- .../runic_small_twisted_rock_bricks_slab.json | 6 +- ...unic_small_twisted_rock_bricks_stairs.json | 280 +- .../runic_small_twisted_rock_bricks_wall.json | 78 +- .../runic_tainted_rock_bricks_slab.json | 6 +- .../runic_tainted_rock_bricks_stairs.json | 280 +- .../runic_tainted_rock_bricks_wall.json | 78 +- .../runic_tainted_rock_tiles_slab.json | 6 +- .../runic_tainted_rock_tiles_stairs.json | 280 +- .../runic_tainted_rock_tiles_wall.json | 78 +- .../runic_twisted_rock_bricks_slab.json | 6 +- .../runic_twisted_rock_bricks_stairs.json | 280 +- .../runic_twisted_rock_bricks_wall.json | 78 +- .../runic_twisted_rock_tiles_slab.json | 6 +- .../runic_twisted_rock_tiles_stairs.json | 280 +- .../runic_twisted_rock_tiles_wall.json | 78 +- .../small_tainted_rock_bricks_slab.json | 6 +- .../small_tainted_rock_bricks_stairs.json | 280 +- .../small_tainted_rock_bricks_wall.json | 78 +- .../small_twisted_rock_bricks_slab.json | 6 +- .../small_twisted_rock_bricks_stairs.json | 280 +- .../small_twisted_rock_bricks_wall.json | 78 +- .../blockstates/smooth_tainted_rock_slab.json | 6 +- .../smooth_tainted_rock_stairs.json | 280 +- .../blockstates/smooth_twisted_rock_slab.json | 6 +- .../smooth_twisted_rock_stairs.json | 280 +- .../blockstates/solid_runewood_trapdoor.json | 70 +- .../blockstates/solid_soulwood_trapdoor.json | 70 +- .../malum/blockstates/soulwood_door.json | 148 +- .../blockstates/soulwood_item_stand.json | 42 +- .../blockstates/soulwood_panel_slab.json | 6 +- .../blockstates/soulwood_panel_stairs.json | 280 +- .../blockstates/soulwood_planks_button.json | 124 +- .../blockstates/soulwood_planks_fence.json | 36 +- .../soulwood_planks_fence_gate.json | 100 +- .../blockstates/soulwood_planks_slab.json | 6 +- .../blockstates/soulwood_planks_stairs.json | 280 +- .../malum/blockstates/soulwood_sign.json | 60 +- .../blockstates/soulwood_tiles_slab.json | 6 +- .../blockstates/soulwood_tiles_stairs.json | 280 +- .../blockstates/soulwood_totem_pole.json | 152 +- .../malum/blockstates/soulwood_trapdoor.json | 70 +- .../malum/blockstates/soulwood_wall_sign.json | 14 +- .../malum/blockstates/spirit_catalyzer.json | 26 +- .../spirit_catalyzer_component.json | 8 +- .../blockstates/tainted_rock_bricks_slab.json | 6 +- .../tainted_rock_bricks_stairs.json | 280 +- .../blockstates/tainted_rock_bricks_wall.json | 78 +- .../blockstates/tainted_rock_button.json | 124 +- .../blockstates/tainted_rock_column_cap.json | 14 +- .../blockstates/tainted_rock_item_stand.json | 42 +- .../malum/blockstates/tainted_rock_slab.json | 6 +- .../blockstates/tainted_rock_stairs.json | 280 +- .../blockstates/tainted_rock_tiles_slab.json | 6 +- .../tainted_rock_tiles_stairs.json | 280 +- .../blockstates/tainted_rock_tiles_wall.json | 78 +- .../malum/blockstates/tainted_rock_wall.json | 78 +- .../blockstates/twisted_rock_bricks_slab.json | 6 +- .../twisted_rock_bricks_stairs.json | 280 +- .../blockstates/twisted_rock_bricks_wall.json | 78 +- .../blockstates/twisted_rock_button.json | 124 +- .../blockstates/twisted_rock_column_cap.json | 14 +- .../blockstates/twisted_rock_item_stand.json | 42 +- .../malum/blockstates/twisted_rock_slab.json | 6 +- .../blockstates/twisted_rock_stairs.json | 280 +- .../blockstates/twisted_rock_tiles_slab.json | 6 +- .../twisted_rock_tiles_stairs.json | 280 +- .../blockstates/twisted_rock_tiles_wall.json | 78 +- .../malum/blockstates/twisted_rock_wall.json | 78 +- .../malum/blockstates/twisted_tablet.json | 42 +- .../vertical_runewood_planks_slab.json | 6 +- .../vertical_runewood_planks_stairs.json | 280 +- .../vertical_soulwood_planks_slab.json | 6 +- .../vertical_soulwood_planks_stairs.json | 280 +- .../malum/blockstates/wall_ether_torch.json | 28 +- .../malum/blockstates/weavers_workbench.json | 8 +- .../malum/blockstates/weeping_well_core.json | 8 +- .../blockstates/weeping_well_corner.json | 8 +- .../malum/blockstates/weeping_well_side.json | 8 +- .../resources/assets/malum/lang/en_us.json | 2 +- .../malum/models/block/blighted_earth.json | 2 +- .../malum/models/block/blighted_soulwood.json | 2 +- .../models/block/cut_runewood_planks.json | 2 +- .../models/block/cut_soulwood_planks.json | 2 +- .../malum/models/block/cut_tainted_rock.json | 2 +- .../malum/models/block/cut_twisted_rock.json | 2 +- .../models/block/exposed_runewood_log.json | 4 +- .../exposed_runewood_log_horizontal.json | 4 +- .../models/block/exposed_soulwood_log.json | 4 +- .../exposed_soulwood_log_horizontal.json | 4 +- .../block/polished_tainted_rock_slab.json | 2 +- .../block/polished_tainted_rock_slab_top.json | 2 +- .../block/polished_tainted_rock_stairs.json | 2 +- .../polished_tainted_rock_stairs_inner.json | 2 +- .../polished_tainted_rock_stairs_outer.json | 2 +- .../block/polished_twisted_rock_slab.json | 2 +- .../block/polished_twisted_rock_slab_top.json | 2 +- .../block/polished_twisted_rock_stairs.json | 2 +- .../polished_twisted_rock_stairs_inner.json | 2 +- .../polished_twisted_rock_stairs_outer.json | 2 +- .../models/block/revealed_runewood_log.json | 4 +- .../revealed_runewood_log_horizontal.json | 4 +- .../models/block/revealed_soulwood_log.json | 4 +- .../revealed_soulwood_log_horizontal.json | 4 +- .../assets/malum/models/block/runewood.json | 4 +- .../malum/models/block/runewood_beam.json | 4 +- .../block/runewood_beam_horizontal.json | 4 +- ...om.json => runewood_door_bottom_left.json} | 2 +- .../block/runewood_door_bottom_left_open.json | 7 + ...e.json => runewood_door_bottom_right.json} | 2 +- .../runewood_door_bottom_right_open.json | 7 + ...r_top.json => runewood_door_top_left.json} | 2 +- .../block/runewood_door_top_left_open.json | 7 + ...inge.json => runewood_door_top_right.json} | 2 +- .../block/runewood_door_top_right_open.json | 7 + .../models/block/runewood_horizontal.json | 4 +- .../models/block/runewood_item_pedestal.json | 4 +- .../models/block/runewood_item_stand.json | 4 +- .../malum/models/block/runewood_log.json | 4 +- .../models/block/runewood_log_horizontal.json | 4 +- .../models/block/runewood_panel_slab.json | 2 +- .../models/block/runewood_panel_slab_top.json | 2 +- .../models/block/runewood_panel_stairs.json | 2 +- .../block/runewood_panel_stairs_inner.json | 2 +- .../block/runewood_panel_stairs_outer.json | 2 +- .../models/block/runewood_planks_slab.json | 2 +- .../block/runewood_planks_slab_top.json | 2 +- .../models/block/runewood_planks_stairs.json | 2 +- .../block/runewood_planks_stairs_inner.json | 2 +- .../block/runewood_planks_stairs_outer.json | 2 +- .../models/block/runewood_tiles_slab.json | 2 +- .../models/block/runewood_tiles_slab_top.json | 2 +- .../models/block/runewood_tiles_stairs.json | 2 +- .../block/runewood_tiles_stairs_inner.json | 2 +- .../block/runewood_tiles_stairs_outer.json | 2 +- .../models/block/runewood_totem_base.json | 6 +- .../block/runewood_totem_pole_aerial.json | 4 +- .../block/runewood_totem_pole_aqueous.json | 4 +- .../block/runewood_totem_pole_arcane.json | 4 +- .../block/runewood_totem_pole_earthen.json | 4 +- .../block/runewood_totem_pole_eldritch.json | 4 +- .../block/runewood_totem_pole_infernal.json | 4 +- .../block/runewood_totem_pole_sacred.json | 4 +- .../block/runewood_totem_pole_wicked.json | 4 +- .../runic_small_tainted_rock_bricks_slab.json | 2 +- ...ic_small_tainted_rock_bricks_slab_top.json | 2 +- ...unic_small_tainted_rock_bricks_stairs.json | 2 +- ...mall_tainted_rock_bricks_stairs_inner.json | 2 +- ...mall_tainted_rock_bricks_stairs_outer.json | 2 +- .../runic_small_twisted_rock_bricks_slab.json | 2 +- ...ic_small_twisted_rock_bricks_slab_top.json | 2 +- ...unic_small_twisted_rock_bricks_stairs.json | 2 +- ...mall_twisted_rock_bricks_stairs_inner.json | 2 +- ...mall_twisted_rock_bricks_stairs_outer.json | 2 +- .../block/runic_tainted_rock_bricks_slab.json | 2 +- .../runic_tainted_rock_bricks_slab_top.json | 2 +- .../runic_tainted_rock_bricks_stairs.json | 2 +- ...unic_tainted_rock_bricks_stairs_inner.json | 2 +- ...unic_tainted_rock_bricks_stairs_outer.json | 2 +- .../block/runic_tainted_rock_tiles_slab.json | 2 +- .../runic_tainted_rock_tiles_slab_top.json | 2 +- .../runic_tainted_rock_tiles_stairs.json | 2 +- ...runic_tainted_rock_tiles_stairs_inner.json | 2 +- ...runic_tainted_rock_tiles_stairs_outer.json | 2 +- .../block/runic_twisted_rock_bricks_slab.json | 2 +- .../runic_twisted_rock_bricks_slab_top.json | 2 +- .../runic_twisted_rock_bricks_stairs.json | 2 +- ...unic_twisted_rock_bricks_stairs_inner.json | 2 +- ...unic_twisted_rock_bricks_stairs_outer.json | 2 +- .../block/runic_twisted_rock_tiles_slab.json | 2 +- .../runic_twisted_rock_tiles_slab_top.json | 2 +- .../runic_twisted_rock_tiles_stairs.json | 2 +- ...runic_twisted_rock_tiles_stairs_inner.json | 2 +- ...runic_twisted_rock_tiles_stairs_outer.json | 2 +- .../block/small_tainted_rock_bricks_slab.json | 2 +- .../small_tainted_rock_bricks_slab_top.json | 2 +- .../small_tainted_rock_bricks_stairs.json | 2 +- ...mall_tainted_rock_bricks_stairs_inner.json | 2 +- ...mall_tainted_rock_bricks_stairs_outer.json | 2 +- .../block/small_twisted_rock_bricks_slab.json | 2 +- .../small_twisted_rock_bricks_slab_top.json | 2 +- .../small_twisted_rock_bricks_stairs.json | 2 +- ...mall_twisted_rock_bricks_stairs_inner.json | 2 +- ...mall_twisted_rock_bricks_stairs_outer.json | 2 +- .../block/smooth_tainted_rock_slab.json | 2 +- .../block/smooth_tainted_rock_slab_top.json | 2 +- .../block/smooth_tainted_rock_stairs.json | 2 +- .../smooth_tainted_rock_stairs_inner.json | 2 +- .../smooth_tainted_rock_stairs_outer.json | 2 +- .../block/smooth_twisted_rock_slab.json | 2 +- .../block/smooth_twisted_rock_slab_top.json | 2 +- .../block/smooth_twisted_rock_stairs.json | 2 +- .../smooth_twisted_rock_stairs_inner.json | 2 +- .../smooth_twisted_rock_stairs_outer.json | 2 +- .../assets/malum/models/block/soulwood.json | 4 +- .../malum/models/block/soulwood_beam.json | 4 +- .../block/soulwood_beam_horizontal.json | 4 +- ...ge.json => soulwood_door_bottom_left.json} | 2 +- .../block/soulwood_door_bottom_left_open.json | 7 + ...e.json => soulwood_door_bottom_right.json} | 2 +- .../soulwood_door_bottom_right_open.json | 7 + ...r_top.json => soulwood_door_top_left.json} | 2 +- .../block/soulwood_door_top_left_open.json | 7 + ...ttom.json => soulwood_door_top_right.json} | 2 +- .../block/soulwood_door_top_right_open.json | 7 + .../models/block/soulwood_horizontal.json | 4 +- .../models/block/soulwood_item_pedestal.json | 4 +- .../models/block/soulwood_item_stand.json | 4 +- .../malum/models/block/soulwood_log.json | 4 +- .../models/block/soulwood_log_horizontal.json | 4 +- .../models/block/soulwood_panel_slab.json | 2 +- .../models/block/soulwood_panel_slab_top.json | 2 +- .../models/block/soulwood_panel_stairs.json | 2 +- .../block/soulwood_panel_stairs_inner.json | 2 +- .../block/soulwood_panel_stairs_outer.json | 2 +- .../models/block/soulwood_planks_slab.json | 2 +- .../block/soulwood_planks_slab_top.json | 2 +- .../models/block/soulwood_planks_stairs.json | 2 +- .../block/soulwood_planks_stairs_inner.json | 2 +- .../block/soulwood_planks_stairs_outer.json | 2 +- .../models/block/soulwood_tiles_slab.json | 2 +- .../models/block/soulwood_tiles_slab_top.json | 2 +- .../models/block/soulwood_tiles_stairs.json | 2 +- .../block/soulwood_tiles_stairs_inner.json | 2 +- .../block/soulwood_tiles_stairs_outer.json | 2 +- .../models/block/soulwood_totem_base.json | 6 +- .../block/soulwood_totem_pole_aerial.json | 4 +- .../block/soulwood_totem_pole_aqueous.json | 4 +- .../block/soulwood_totem_pole_arcane.json | 4 +- .../block/soulwood_totem_pole_earthen.json | 4 +- .../block/soulwood_totem_pole_eldritch.json | 4 +- .../block/soulwood_totem_pole_infernal.json | 4 +- .../block/soulwood_totem_pole_sacred.json | 4 +- .../block/soulwood_totem_pole_wicked.json | 4 +- .../malum/models/block/stripped_runewood.json | 4 +- .../block/stripped_runewood_horizontal.json | 4 +- .../models/block/stripped_runewood_log.json | 4 +- .../stripped_runewood_log_horizontal.json | 4 +- .../malum/models/block/stripped_soulwood.json | 4 +- .../block/stripped_soulwood_horizontal.json | 4 +- .../models/block/stripped_soulwood_log.json | 4 +- .../stripped_soulwood_log_horizontal.json | 4 +- .../block/tainted_rock_bricks_slab.json | 2 +- .../block/tainted_rock_bricks_slab_top.json | 2 +- .../block/tainted_rock_bricks_stairs.json | 2 +- .../tainted_rock_bricks_stairs_inner.json | 2 +- .../tainted_rock_bricks_stairs_outer.json | 2 +- .../models/block/tainted_rock_column.json | 4 +- .../models/block/tainted_rock_column_cap.json | 2 +- .../block/tainted_rock_column_horizontal.json | 4 +- .../block/tainted_rock_item_pedestal.json | 4 +- .../models/block/tainted_rock_item_stand.json | 4 +- .../malum/models/block/tainted_rock_slab.json | 2 +- .../models/block/tainted_rock_slab_top.json | 2 +- .../models/block/tainted_rock_stairs.json | 2 +- .../block/tainted_rock_stairs_inner.json | 2 +- .../block/tainted_rock_stairs_outer.json | 2 +- .../models/block/tainted_rock_tiles_slab.json | 2 +- .../block/tainted_rock_tiles_slab_top.json | 2 +- .../block/tainted_rock_tiles_stairs.json | 2 +- .../tainted_rock_tiles_stairs_inner.json | 2 +- .../tainted_rock_tiles_stairs_outer.json | 2 +- .../block/twisted_rock_bricks_slab.json | 2 +- .../block/twisted_rock_bricks_slab_top.json | 2 +- .../block/twisted_rock_bricks_stairs.json | 2 +- .../twisted_rock_bricks_stairs_inner.json | 2 +- .../twisted_rock_bricks_stairs_outer.json | 2 +- .../models/block/twisted_rock_column.json | 4 +- .../models/block/twisted_rock_column_cap.json | 2 +- .../block/twisted_rock_column_horizontal.json | 4 +- .../block/twisted_rock_item_pedestal.json | 4 +- .../models/block/twisted_rock_item_stand.json | 4 +- .../malum/models/block/twisted_rock_slab.json | 2 +- .../models/block/twisted_rock_slab_top.json | 2 +- .../models/block/twisted_rock_stairs.json | 2 +- .../block/twisted_rock_stairs_inner.json | 2 +- .../block/twisted_rock_stairs_outer.json | 2 +- .../models/block/twisted_rock_tiles_slab.json | 2 +- .../block/twisted_rock_tiles_slab_top.json | 2 +- .../block/twisted_rock_tiles_stairs.json | 2 +- .../twisted_rock_tiles_stairs_inner.json | 2 +- .../twisted_rock_tiles_stairs_outer.json | 2 +- .../block/vertical_runewood_planks_slab.json | 2 +- .../vertical_runewood_planks_slab_top.json | 2 +- .../vertical_runewood_planks_stairs.json | 2 +- ...vertical_runewood_planks_stairs_inner.json | 2 +- ...vertical_runewood_planks_stairs_outer.json | 2 +- .../block/vertical_soulwood_planks_slab.json | 2 +- .../vertical_soulwood_planks_slab_top.json | 2 +- .../vertical_soulwood_planks_stairs.json | 2 +- ...vertical_soulwood_planks_stairs_inner.json | 2 +- ...vertical_soulwood_planks_stairs_outer.json | 2 +- .../malum/models/item/soul_hunter_boots.json | 104 +- .../malum/models/item/soul_hunter_cloak.json | 104 +- .../models/item/soul_hunter_leggings.json | 104 +- .../malum/models/item/soul_hunter_robe.json | 104 +- .../models/item/soul_stained_steel_boots.json | 104 +- .../item/soul_stained_steel_chestplate.json | 104 +- .../item/soul_stained_steel_helmet.json | 104 +- .../item/soul_stained_steel_leggings.json | 104 +- .../tags/blocks/heat_sources.json | 6 - .../tags/blocks/tray_heat_sources.json | 17 - .../tags/items/tools/knives.json | 6 - .../forge/tags/blocks/fence_gates/wooden.json | 7 - .../data/forge/tags/blocks/ores.json | 13 - .../forge/tags/blocks/storage_blocks.json | 20 - .../data/forge/tags/blocks/stripped_logs.json | 11 - .../resources/data/forge/tags/items/gems.json | 10 - .../data/forge/tags/items/gems/quartz.json | 6 - .../data/forge/tags/items/ingots.json | 7 - .../data/forge/tags/items/nuggets.json | 8 - .../data/forge/tags/items/nuggets/copper.json | 6 - .../resources/data/forge/tags/items/ores.json | 13 - .../data/forge/tags/items/ores/quartz.json | 7 - .../data/forge/tags/items/slimeballs.json | 7 - .../data/forge/tags/items/storage_blocks.json | 20 - .../data/forge/tags/items/stripped_logs.json | 11 - .../data/forge/tags/items/tools/knives.json | 6 - .../recipes/aluminum_from_node_blasting.json | 19 +- .../recipes/aluminum_from_node_smelting.json | 19 +- .../recipes/impetus_creation_aluminum.json | 8 +- .../recipes/impetus_creation_lead.json | 8 +- .../recipes/impetus_creation_nickel.json | 8 +- .../recipes/impetus_creation_osmium.json | 8 +- .../recipes/impetus_creation_silver.json | 8 +- .../recipes/impetus_creation_tin.json | 8 +- .../recipes/impetus_creation_uranium.json | 8 +- .../recipes/impetus_creation_zinc.json | 8 +- .../recipes/lead_from_node_blasting.json | 19 +- .../recipes/lead_from_node_smelting.json | 19 +- .../ace_prideweave.json | 21 +- .../agender_prideweave.json | 21 +- .../alchemical_calx_from_block.json | 21 +- .../ancient_weave.json | 21 +- .../arcane_charcoal_fragment.json | 21 +- .../arcane_charcoal_from_block.json | 21 +- .../arcane_charcoal_from_fragment.json | 21 +- .../arcane_charcoal_from_runewood.json | 21 +- .../arcane_charcoal_from_soulwood.json | 21 +- .../aro_prideweave.json | 21 +- .../aroace_prideweave.json | 21 +- .../astral_weave_from_block.json | 21 +- .../bi_prideweave.json | 21 +- .../blazing_quartz_fragment.json | 21 +- .../blazing_quartz_from_blasting.json | 21 +- .../blazing_quartz_from_block.json | 21 +- .../blazing_quartz_from_fragment.json | 21 +- .../blazing_quartz_from_smelting.json | 21 +- .../{decorations => misc}/blazing_torch.json | 21 +- .../{malum_basis_of_magic => misc}/bligh.json | 21 +- .../blighted_gunk_from_mass.json | 21 +- .../block_of_alchemical_calx.json | 21 +- .../block_of_arcane_charcoal.json | 21 +- .../block_of_astral_weave.json | 21 +- .../block_of_blazing_quartz.json | 21 +- .../block_of_brilliance.json | 21 +- .../block_of_cursed_grit.json | 21 +- .../block_of_grim_talc.json | 21 +- .../block_of_hallowed_gold.json | 21 +- .../block_of_hex_ash.json | 21 +- .../block_of_rotting_essence.json | 21 +- .../block_of_soul_stained_steel.json | 21 +- .../block_of_soulstone.json | 21 +- .../recipes/misc/bonemeal_from_grim_talc.json | 21 +- .../misc/brilliance_from_blasting.json | 21 +- .../brilliance_from_block.json | 21 +- .../brilliance_from_crushed_blasting.json | 21 +- .../brilliance_from_crushed_smelting.json | 21 +- .../brilliance_from_deepslate_blasting.json | 21 +- .../brilliance_from_deepslate_smelting.json | 21 +- .../misc/brilliance_from_raw_blasting.json | 21 +- .../misc/brilliance_from_raw_smelting.json | 21 +- .../misc/brilliance_from_smelting.json | 21 +- .../recipes/misc/charcoal_fragment.json | 21 +- .../recipes/misc/charcoal_from_fragment.json | 21 +- .../chiseled_tainted_rock.json | 21 +- ...eled_tainted_rock_bricks_stonecutting.json | 21 +- ..._tainted_rock_bricks_stonecutting_alt.json | 21 +- .../chiseled_twisted_rock.json | 29 +- ...eled_twisted_rock_bricks_stonecutting.json | 29 +- ..._twisted_rock_bricks_stonecutting_alt.json | 29 +- .../recipes/misc/coal_fragment.json | 21 +- .../recipes/misc/coal_from_fragment.json | 21 +- .../misc/copper_from_node_blasting.json | 21 +- .../misc/copper_from_node_smelting.json | 21 +- .../misc/copper_ingot_from_nugget.json | 21 +- .../misc/copper_nugget_from_ingot.json | 21 +- .../cornered_weave.json | 21 +- ...tainted_rock_bricks_slab_stonecutting.json | 21 +- ...ed_small_tainted_rock_bricks_smelting.json | 21 +- ...inted_rock_bricks_stairs_stonecutting.json | 21 +- ..._tainted_rock_bricks_stonecutting_alt.json | 21 +- ...tainted_rock_bricks_wall_stonecutting.json | 21 +- ...twisted_rock_bricks_slab_stonecutting.json | 29 +- ...ed_small_twisted_rock_bricks_smelting.json | 29 +- ...isted_rock_bricks_stairs_stonecutting.json | 29 +- ..._twisted_rock_bricks_stonecutting_alt.json | 29 +- ...twisted_rock_bricks_wall_stonecutting.json | 29 +- ...tainted_rock_bricks_slab_stonecutting.json | 21 +- ...inted_rock_bricks_stairs_stonecutting.json | 21 +- ..._tainted_rock_tiles_slab_stonecutting.json | 21 +- ...ainted_rock_tiles_stairs_stonecutting.json | 21 +- ...acked_tainted_rock_tiles_stonecutting.json | 21 +- ..._tainted_rock_tiles_wall_stonecutting.json | 21 +- ...twisted_rock_bricks_slab_stonecutting.json | 21 +- ...isted_rock_bricks_stairs_stonecutting.json | 21 +- ..._twisted_rock_tiles_slab_stonecutting.json | 21 +- ...wisted_rock_tiles_stairs_stonecutting.json | 21 +- ...acked_twisted_rock_tiles_stonecutting.json | 29 +- ..._twisted_rock_tiles_wall_stonecutting.json | 29 +- .../crude_scythe.json | 21 +- .../cthonic_gold_from_blasting.json | 21 +- .../cthonic_gold_from_smelting.json | 21 +- .../cursed_grit_from_block.json | 21 +- .../cut_runewood_planks.json | 21 +- .../cut_soulwood_planks.json | 21 +- .../cut_tainted_rock.json | 21 +- .../cut_tainted_rock_stonecutting.json | 21 +- .../cut_twisted_rock.json | 29 +- .../cut_twisted_rock_stonecutting.json | 29 +- .../demiboy_prideweave.json | 21 +- .../demigirl_prideweave.json | 21 +- .../dreaded_weave.json | 21 +- .../enby_prideweave.json | 21 +- .../encyclopedia_arcana.json | 21 +- .../experience_bottle_from_brilliance.json | 21 +- .../gay_prideweave.json | 21 +- .../genderfluid_prideweave.json | 21 +- .../genderqueer_prideweave.json | 21 +- .../gilded_belt.json | 21 +- .../gilded_ring.json | 21 +- .../recipes/misc/gold_from_node_blasting.json | 21 +- .../recipes/misc/gold_from_node_smelting.json | 21 +- .../grim_talc_from_block.json | 21 +- .../hallowed_gold_from_block.json | 21 +- .../hallowed_gold_from_nuggets.json | 21 +- .../hallowed_gold_nugget.json | 21 +- .../hex_ash_from_block.json | 21 +- .../holy_sap_from_smelting.json | 21 +- .../holy_sap_from_smoking.json | 21 +- .../holy_sapball.json | 21 +- .../intersex_prideweave.json | 21 +- .../recipes/misc/iron_from_node_blasting.json | 21 +- .../recipes/misc/iron_from_node_smelting.json | 21 +- .../{tools => misc}/lead_from_sapballs.json | 21 +- .../lesbian_prideweave.json | 21 +- .../magma_cream_from_sapballs.json | 21 +- .../mechanical_weave_v1.json | 21 +- .../mechanical_weave_v2.json | 21 +- .../natural_quartz_from_blasting.json | 21 +- ...atural_quartz_from_deepslate_blasting.json | 21 +- ...atural_quartz_from_deepslate_smelting.json | 21 +- .../natural_quartz_from_smelting.json | 21 +- .../netherrack_from_blazing_quartz.json | 21 +- .../ornate_necklace.json | 21 +- .../ornate_ring.json | 21 +- .../pan_prideweave.json | 21 +- .../plural_prideweave.json | 21 +- .../polished_tainted_rock.json | 21 +- .../polished_tainted_rock_slab.json | 21 +- ...lished_tainted_rock_slab_stonecutting.json | 21 +- .../polished_tainted_rock_stairs.json | 21 +- ...shed_tainted_rock_stairs_stonecutting.json | 21 +- .../polished_tainted_rock_stonecutting.json | 21 +- .../polished_twisted_rock.json | 29 +- .../polished_twisted_rock_slab.json | 29 +- ...lished_twisted_rock_slab_stonecutting.json | 21 +- .../polished_twisted_rock_stairs.json | 29 +- ...shed_twisted_rock_stairs_stonecutting.json | 21 +- .../polished_twisted_rock_stonecutting.json | 29 +- .../poly_prideweave.json | 21 +- .../pride_prideweave.json | 21 +- .../raw_soulstone_block.json | 21 +- .../raw_soulstone_from_block.json | 21 +- .../rotting_essence_from_block.json | 21 +- .../runewood.json | 21 +- .../runewood_beam.json | 21 +- .../runewood_boat.json | 21 +- .../runewood_door.json | 21 +- .../runewood_item_pedestal.json | 21 +- .../runewood_item_stand.json | 21 +- .../runewood_panel.json | 21 +- .../runewood_panel_slab.json | 21 +- .../runewood_panel_stairs.json | 21 +- .../runewood_planks.json | 21 +- .../runewood_planks_button.json | 21 +- .../runewood_planks_fence.json | 21 +- .../runewood_planks_fence_gate.json | 21 +- .../runewood_planks_pressure_plate.json | 21 +- .../runewood_planks_slab.json | 21 +- .../runewood_planks_stairs.json | 21 +- .../runewood_sign.json | 21 +- .../runewood_tiles.json | 21 +- .../runewood_tiles_slab.json | 21 +- .../runewood_tiles_stairs.json | 21 +- .../runewood_trapdoor.json | 21 +- .../runewood_trapdoor_from_solid.json | 21 +- .../runic_small_tainted_rock_bricks_slab.json | 21 +- ...unic_small_tainted_rock_bricks_stairs.json | 21 +- .../runic_small_tainted_rock_bricks_wall.json | 21 +- .../runic_small_twisted_rock_bricks_slab.json | 29 +- ...unic_small_twisted_rock_bricks_stairs.json | 29 +- .../runic_small_twisted_rock_bricks_wall.json | 29 +- .../runic_tainted_rock_bricks.json | 21 +- .../runic_tainted_rock_bricks_slab.json | 21 +- .../runic_tainted_rock_bricks_stairs.json | 21 +- .../runic_tainted_rock_bricks_wall.json | 21 +- .../runic_tainted_rock_tiles.json | 21 +- .../runic_tainted_rock_tiles_slab.json | 21 +- .../runic_tainted_rock_tiles_stairs.json | 21 +- .../runic_tainted_rock_tiles_wall.json | 21 +- .../runic_twisted_rock_bricks.json | 29 +- .../runic_twisted_rock_bricks_slab.json | 21 +- .../runic_twisted_rock_bricks_stairs.json | 21 +- .../runic_twisted_rock_bricks_wall.json | 29 +- .../runic_twisted_rock_tiles.json | 29 +- .../runic_twisted_rock_tiles_slab.json | 21 +- .../runic_twisted_rock_tiles_stairs.json | 21 +- .../runic_twisted_rock_tiles_wall.json | 29 +- .../skeleton_skull_from_grim_talc.json | 21 +- .../small_tainted_rock_bricks.json | 21 +- .../small_tainted_rock_bricks_slab.json | 21 +- ...tainted_rock_bricks_slab_stonecutting.json | 21 +- .../small_tainted_rock_bricks_stairs.json | 21 +- ...inted_rock_bricks_stairs_stonecutting.json | 21 +- ...mall_tainted_rock_bricks_stonecutting.json | 21 +- ..._tainted_rock_bricks_stonecutting_alt.json | 21 +- ..._rock_bricks_stonecutting_from_bricks.json | 21 +- ...d_rock_bricks_stonecutting_from_tiles.json | 21 +- .../small_tainted_rock_bricks_wall.json | 21 +- ...tainted_rock_bricks_wall_stonecutting.json | 21 +- .../small_twisted_rock_bricks.json | 29 +- .../small_twisted_rock_bricks_slab.json | 29 +- ...twisted_rock_bricks_slab_stonecutting.json | 29 +- .../small_twisted_rock_bricks_stairs.json | 29 +- ...isted_rock_bricks_stairs_stonecutting.json | 29 +- ...mall_twisted_rock_bricks_stonecutting.json | 29 +- ..._twisted_rock_bricks_stonecutting_alt.json | 29 +- ..._rock_bricks_stonecutting_from_bricks.json | 29 +- ...d_rock_bricks_stonecutting_from_tiles.json | 29 +- .../small_twisted_rock_bricks_wall.json | 29 +- ...twisted_rock_bricks_wall_stonecutting.json | 29 +- .../smooth_tainted_rock.json | 21 +- .../smooth_tainted_rock_slab.json | 21 +- ...smooth_tainted_rock_slab_stonecutting.json | 21 +- .../smooth_tainted_rock_stairs.json | 21 +- ...ooth_tainted_rock_stairs_stonecutting.json | 21 +- .../smooth_tainted_rock_stonecutting.json | 21 +- .../smooth_twisted_rock.json | 29 +- .../smooth_twisted_rock_slab.json | 29 +- ...smooth_twisted_rock_slab_stonecutting.json | 21 +- .../smooth_twisted_rock_stairs.json | 29 +- ...ooth_twisted_rock_stairs_stonecutting.json | 21 +- .../smooth_twisted_rock_stonecutting.json | 29 +- .../solid_runewood_trapdoor.json | 21 +- .../solid_soulwood_trapdoor.json | 21 +- .../soul_stained_steel_axe.json | 21 +- .../soul_stained_steel_from_block.json | 21 +- .../soul_stained_steel_from_nuggets.json | 21 +- .../soul_stained_steel_hoe.json | 21 +- .../soul_stained_steel_nugget.json | 21 +- .../soul_stained_steel_pickaxe.json | 21 +- .../soul_stained_steel_shovel.json | 21 +- .../soul_stained_steel_sword.json | 21 +- .../soulstone_from_blasting.json | 21 +- .../soulstone_from_block.json | 21 +- .../soulstone_from_crushed_blasting.json | 21 +- .../soulstone_from_crushed_smelting.json | 21 +- .../soulstone_from_deepslate_blasting.json | 21 +- .../soulstone_from_deepslate_smelting.json | 21 +- .../soulstone_from_raw_blasting.json | 21 +- .../soulstone_from_raw_smelting.json | 21 +- .../soulstone_from_smelting.json | 21 +- .../soulwood.json | 21 +- .../soulwood_beam.json | 21 +- .../soulwood_boat.json | 21 +- .../soulwood_door.json | 21 +- .../soulwood_item_pedestal.json | 21 +- .../soulwood_item_stand.json | 21 +- .../soulwood_panel.json | 21 +- .../soulwood_panel_slab.json | 21 +- .../soulwood_panel_stairs.json | 21 +- .../soulwood_planks.json | 21 +- .../soulwood_planks_button.json | 21 +- .../soulwood_planks_fence.json | 21 +- .../soulwood_planks_fence_gate.json | 21 +- .../soulwood_planks_pressure_plate.json | 21 +- .../soulwood_planks_slab.json | 21 +- .../soulwood_planks_stairs.json | 21 +- .../soulwood_sign.json | 21 +- .../soulwood_tiles.json | 21 +- .../soulwood_tiles_slab.json | 21 +- .../soulwood_tiles_stairs.json | 21 +- .../soulwood_trapdoor.json | 21 +- .../soulwood_trapdoor_from_solid.json | 21 +- .../spectral_lens.json | 21 +- .../spectral_optic.json | 21 +- .../spirit_altar.json | 21 +- .../spirit_jar.json | 21 +- .../spirit_pouch.json | 21 +- .../sticky_piston_from_sapballs.json | 21 +- .../stripped_runewood.json | 21 +- .../stripped_soulwood.json | 21 +- .../tainted_rock_brick_wall_stonecutting.json | 21 +- .../tainted_rock_bricks.json | 21 +- ...tainted_rock_bricks_from_small_bricks.json | 21 +- .../tainted_rock_bricks_slab.json | 21 +- ...tainted_rock_bricks_slab_stonecutting.json | 21 +- .../tainted_rock_bricks_stairs.json | 21 +- ...inted_rock_bricks_stairs_stonecutting.json | 21 +- .../tainted_rock_bricks_stonecutting.json | 21 +- ...ock_bricks_stonecutting_from_polished.json | 21 +- .../tainted_rock_bricks_wall.json | 21 +- .../tainted_rock_button.json | 21 +- .../tainted_rock_column.json | 21 +- .../tainted_rock_column_cap.json | 21 +- .../tainted_rock_column_cap_stonecutting.json | 21 +- .../tainted_rock_column_from_cap.json | 21 +- .../tainted_rock_column_stonecutting.json | 21 +- .../tainted_rock_item_pedestal.json | 21 +- .../tainted_rock_item_stand.json | 21 +- .../tainted_rock_pressure_plate.json | 21 +- .../tainted_rock_slab.json | 21 +- .../tainted_rock_slab_stonecutting.json | 21 +- .../tainted_rock_stairs.json | 21 +- .../tainted_rock_stairs_stonecutting.json | 21 +- .../tainted_rock_tiles.json | 21 +- .../tainted_rock_tiles_slab.json | 21 +- .../tainted_rock_tiles_slab_stonecutting.json | 21 +- .../tainted_rock_tiles_stairs.json | 21 +- ...ainted_rock_tiles_stairs_stonecutting.json | 21 +- .../tainted_rock_tiles_stonecutting.json | 21 +- ...d_rock_tiles_stonecutting_from_bricks.json | 21 +- ...rock_tiles_stonecutting_from_polished.json | 21 +- .../tainted_rock_tiles_wall.json | 21 +- .../tainted_rock_tiles_wall_stonecutting.json | 21 +- .../tainted_rock_wall.json | 21 +- .../tainted_rock_wall_stonecutting.json | 21 +- .../trans_prideweave.json | 21 +- .../twisted_rock_brick_wall_stonecutting.json | 29 +- .../twisted_rock_bricks.json | 29 +- ...twisted_rock_bricks_from_small_bricks.json | 29 +- .../twisted_rock_bricks_slab.json | 29 +- ...twisted_rock_bricks_slab_stonecutting.json | 29 +- .../twisted_rock_bricks_stairs.json | 29 +- ...isted_rock_bricks_stairs_stonecutting.json | 29 +- .../twisted_rock_bricks_stonecutting.json | 29 +- ...ock_bricks_stonecutting_from_polished.json | 29 +- .../twisted_rock_bricks_wall.json | 29 +- .../twisted_rock_button.json | 21 +- .../twisted_rock_column.json | 29 +- .../twisted_rock_column_cap.json | 29 +- .../twisted_rock_column_cap_stonecutting.json | 29 +- .../twisted_rock_column_from_cap.json | 29 +- .../twisted_rock_column_stonecutting.json | 29 +- .../twisted_rock_item_pedestal.json | 29 +- .../twisted_rock_item_stand.json | 29 +- .../twisted_rock_pressure_plate.json | 21 +- .../twisted_rock_slab.json | 29 +- .../twisted_rock_slab_stonecutting.json | 29 +- .../twisted_rock_stairs.json | 29 +- .../twisted_rock_stairs_stonecutting.json | 29 +- .../twisted_rock_tiles.json | 29 +- .../twisted_rock_tiles_slab.json | 29 +- .../twisted_rock_tiles_slab_stonecutting.json | 29 +- .../twisted_rock_tiles_stairs.json | 29 +- ...wisted_rock_tiles_stairs_stonecutting.json | 29 +- .../twisted_rock_tiles_stonecutting.json | 29 +- ...d_rock_tiles_stonecutting_from_bricks.json | 29 +- ...rock_tiles_stonecutting_from_polished.json | 29 +- .../twisted_rock_tiles_wall.json | 29 +- .../twisted_rock_tiles_wall_stonecutting.json | 29 +- .../twisted_rock_wall.json | 29 +- .../twisted_rock_wall_stonecutting.json | 29 +- .../unholy_sap_from_smelting.json | 29 +- .../unholy_sap_from_smoking.json | 29 +- .../unholy_sapball.json | 29 +- .../vertical_runewood_planks.json | 21 +- .../vertical_runewood_planks_slab.json | 21 +- .../vertical_runewood_planks_stairs.json | 21 +- .../vertical_soulwood_planks.json | 21 +- .../vertical_soulwood_planks_slab.json | 21 +- .../vertical_soulwood_planks_stairs.json | 21 +- .../weavers_workbench.json | 21 +- .../zombie_head_from_grim_talc.json | 21 +- .../recipes/nickel_from_node_blasting.json | 19 +- .../recipes/nickel_from_node_smelting.json | 19 +- .../recipes/node_focusing_aluminum.json | 8 +- .../recipes/node_focusing_lead.json | 8 +- .../recipes/node_focusing_nickel.json | 8 +- .../recipes/node_focusing_osmium.json | 8 +- .../recipes/node_focusing_silver.json | 8 +- .../recipes/node_focusing_tin.json | 8 +- .../recipes/node_focusing_uranium.json | 8 +- .../recipes/node_focusing_zinc.json | 8 +- .../recipes/osmium_from_node_blasting.json | 19 +- .../recipes/osmium_from_node_smelting.json | 19 +- .../recipes/silver_from_node_blasting.json | 19 +- .../recipes/silver_from_node_smelting.json | 19 +- .../recipes/the_device/the_device.json | 21 +- .../recipes/tin_from_node_blasting.json | 19 +- .../recipes/tin_from_node_smelting.json | 19 +- .../recipes/uranium_from_node_blasting.json | 19 +- .../recipes/uranium_from_node_smelting.json | 19 +- .../recipes/zinc_from_node_blasting.json | 19 +- .../recipes/zinc_from_node_smelting.json | 19 +- .../forge/biome_modifier/brilliant_ore.json | 6 + .../biome_modifier/natural_quartz_ore.json | 6 + .../forge/biome_modifier/soulstone_ore.json | 6 + .../blocks/blazing_quartz_ore.json | 11 +- .../loot_tables/blocks/blighted_earth.json | 15 +- .../loot_tables/blocks/blighted_soil.json | 11 +- .../loot_tables/blocks/blighted_soulwood.json | 7 +- .../loot_tables/blocks/blighted_tumor.json | 13 +- .../loot_tables/blocks/blighted_weed.json | 13 +- .../blocks/block_of_alchemical_calx.json | 15 +- .../blocks/block_of_arcane_charcoal.json | 15 +- .../blocks/block_of_astral_weave.json | 15 +- .../blocks/block_of_blazing_quartz.json | 15 +- .../blocks/block_of_brilliance.json | 15 +- .../blocks/block_of_cthonic_gold.json | 7 +- .../blocks/block_of_cursed_grit.json | 15 +- .../blocks/block_of_grim_talc.json | 15 +- .../blocks/block_of_hallowed_gold.json | 15 +- .../loot_tables/blocks/block_of_hex_ash.json | 15 +- .../blocks/block_of_raw_soulstone.json | 15 +- .../blocks/block_of_rotting_essence.json | 15 +- .../blocks/block_of_soul_stained_steel.json | 15 +- .../blocks/block_of_soulstone.json | 15 +- .../blocks/block_of_void_salts.json | 15 +- .../blocks/brilliant_deepslate.json | 11 +- .../loot_tables/blocks/brilliant_obelisk.json | 15 +- .../loot_tables/blocks/brilliant_stone.json | 11 +- .../blocks/chiseled_tainted_rock.json | 15 +- .../blocks/chiseled_twisted_rock.json | 15 +- .../blocks/cut_runewood_planks.json | 15 +- .../blocks/cut_soulwood_planks.json | 15 +- .../loot_tables/blocks/cut_tainted_rock.json | 15 +- .../loot_tables/blocks/cut_twisted_rock.json | 15 +- .../blocks/deepslate_quartz_ore.json | 11 +- .../blocks/deepslate_soulstone_ore.json | 11 +- .../data/malum/loot_tables/blocks/ether.json | 27 +- .../malum/loot_tables/blocks/ether_torch.json | 27 +- .../blocks/exposed_runewood_log.json | 15 +- .../blocks/exposed_soulwood_log.json | 15 +- .../loot_tables/blocks/iridescent_ether.json | 27 +- .../blocks/iridescent_ether_torch.json | 27 +- .../blocks/mass_of_blighted_gunk.json | 15 +- .../blocks/mote_of_aerial_arcana.json | 15 +- .../blocks/mote_of_aqueous_arcana.json | 15 +- .../blocks/mote_of_earthen_arcana.json | 15 +- .../blocks/mote_of_eldritch_arcana.json | 15 +- .../blocks/mote_of_infernal_arcana.json | 15 +- .../blocks/mote_of_raw_arcana.json | 15 +- .../blocks/mote_of_sacred_arcana.json | 15 +- .../blocks/mote_of_wicked_arcana.json | 15 +- .../blocks/natural_quartz_cluster.json | 15 +- .../blocks/natural_quartz_ore.json | 11 +- .../blocks/polished_tainted_rock.json | 15 +- .../blocks/polished_tainted_rock_slab.json | 13 +- .../blocks/polished_tainted_rock_stairs.json | 15 +- .../blocks/polished_twisted_rock.json | 15 +- .../blocks/polished_twisted_rock_slab.json | 13 +- .../blocks/polished_twisted_rock_stairs.json | 15 +- .../loot_tables/blocks/primordial_soup.json | 15 +- .../blocks/revealed_runewood_log.json | 15 +- .../blocks/revealed_soulwood_log.json | 15 +- .../malum/loot_tables/blocks/runewood.json | 15 +- .../loot_tables/blocks/runewood_beam.json | 15 +- .../loot_tables/blocks/runewood_door.json | 17 +- .../blocks/runewood_item_pedestal.json | 15 +- .../blocks/runewood_item_stand.json | 15 +- .../loot_tables/blocks/runewood_leaves.json | 87 +- .../loot_tables/blocks/runewood_log.json | 15 +- .../loot_tables/blocks/runewood_obelisk.json | 15 +- .../loot_tables/blocks/runewood_panel.json | 15 +- .../blocks/runewood_panel_slab.json | 13 +- .../blocks/runewood_panel_stairs.json | 15 +- .../loot_tables/blocks/runewood_planks.json | 15 +- .../blocks/runewood_planks_button.json | 15 +- .../blocks/runewood_planks_fence.json | 15 +- .../blocks/runewood_planks_fence_gate.json | 15 +- .../runewood_planks_pressure_plate.json | 15 +- .../blocks/runewood_planks_slab.json | 13 +- .../blocks/runewood_planks_stairs.json | 15 +- .../loot_tables/blocks/runewood_sapling.json | 15 +- .../loot_tables/blocks/runewood_sign.json | 15 +- .../loot_tables/blocks/runewood_tiles.json | 15 +- .../blocks/runewood_tiles_slab.json | 13 +- .../blocks/runewood_tiles_stairs.json | 15 +- .../blocks/runewood_totem_base.json | 15 +- .../loot_tables/blocks/runewood_trapdoor.json | 15 +- .../blocks/runewood_wall_sign.json | 15 +- .../runic_small_tainted_rock_bricks.json | 15 +- .../runic_small_tainted_rock_bricks_slab.json | 13 +- ...unic_small_tainted_rock_bricks_stairs.json | 15 +- .../runic_small_tainted_rock_bricks_wall.json | 15 +- .../runic_small_twisted_rock_bricks.json | 15 +- .../runic_small_twisted_rock_bricks_slab.json | 13 +- ...unic_small_twisted_rock_bricks_stairs.json | 15 +- .../runic_small_twisted_rock_bricks_wall.json | 15 +- .../blocks/runic_tainted_rock_bricks.json | 15 +- .../runic_tainted_rock_bricks_slab.json | 13 +- .../runic_tainted_rock_bricks_stairs.json | 15 +- .../runic_tainted_rock_bricks_wall.json | 15 +- .../blocks/runic_tainted_rock_tiles.json | 15 +- .../blocks/runic_tainted_rock_tiles_slab.json | 13 +- .../runic_tainted_rock_tiles_stairs.json | 15 +- .../blocks/runic_tainted_rock_tiles_wall.json | 15 +- .../blocks/runic_twisted_rock_bricks.json | 15 +- .../runic_twisted_rock_bricks_slab.json | 13 +- .../runic_twisted_rock_bricks_stairs.json | 15 +- .../runic_twisted_rock_bricks_wall.json | 15 +- .../blocks/runic_twisted_rock_tiles.json | 15 +- .../blocks/runic_twisted_rock_tiles_slab.json | 13 +- .../runic_twisted_rock_tiles_stairs.json | 15 +- .../blocks/runic_twisted_rock_tiles_wall.json | 15 +- .../blocks/small_tainted_rock_bricks.json | 15 +- .../small_tainted_rock_bricks_slab.json | 13 +- .../small_tainted_rock_bricks_stairs.json | 15 +- .../small_tainted_rock_bricks_wall.json | 15 +- .../blocks/small_twisted_rock_bricks.json | 15 +- .../small_twisted_rock_bricks_slab.json | 13 +- .../small_twisted_rock_bricks_stairs.json | 15 +- .../small_twisted_rock_bricks_wall.json | 15 +- .../blocks/smooth_tainted_rock.json | 15 +- .../blocks/smooth_tainted_rock_slab.json | 13 +- .../blocks/smooth_tainted_rock_stairs.json | 15 +- .../blocks/smooth_twisted_rock.json | 15 +- .../blocks/smooth_twisted_rock_slab.json | 13 +- .../blocks/smooth_twisted_rock_stairs.json | 15 +- .../blocks/solid_runewood_trapdoor.json | 15 +- .../blocks/solid_soulwood_trapdoor.json | 15 +- .../malum/loot_tables/blocks/soul_vial.json | 23 +- .../loot_tables/blocks/soulstone_ore.json | 11 +- .../malum/loot_tables/blocks/soulwood.json | 15 +- .../loot_tables/blocks/soulwood_beam.json | 15 +- .../loot_tables/blocks/soulwood_door.json | 17 +- .../loot_tables/blocks/soulwood_growth.json | 15 +- .../blocks/soulwood_item_pedestal.json | 15 +- .../blocks/soulwood_item_stand.json | 15 +- .../loot_tables/blocks/soulwood_leaves.json | 87 +- .../loot_tables/blocks/soulwood_log.json | 15 +- .../loot_tables/blocks/soulwood_panel.json | 15 +- .../blocks/soulwood_panel_slab.json | 13 +- .../blocks/soulwood_panel_stairs.json | 15 +- .../loot_tables/blocks/soulwood_planks.json | 15 +- .../blocks/soulwood_planks_button.json | 15 +- .../blocks/soulwood_planks_fence.json | 15 +- .../blocks/soulwood_planks_fence_gate.json | 15 +- .../soulwood_planks_pressure_plate.json | 15 +- .../blocks/soulwood_planks_slab.json | 13 +- .../blocks/soulwood_planks_stairs.json | 15 +- .../loot_tables/blocks/soulwood_sign.json | 15 +- .../loot_tables/blocks/soulwood_tiles.json | 15 +- .../blocks/soulwood_tiles_slab.json | 13 +- .../blocks/soulwood_tiles_stairs.json | 15 +- .../blocks/soulwood_totem_base.json | 15 +- .../loot_tables/blocks/soulwood_trapdoor.json | 15 +- .../blocks/soulwood_wall_sign.json | 15 +- .../loot_tables/blocks/spirit_altar.json | 15 +- .../loot_tables/blocks/spirit_catalyzer.json | 15 +- .../loot_tables/blocks/spirit_crucible.json | 15 +- .../malum/loot_tables/blocks/spirit_jar.json | 27 +- .../loot_tables/blocks/stripped_runewood.json | 15 +- .../blocks/stripped_runewood_log.json | 15 +- .../loot_tables/blocks/stripped_soulwood.json | 15 +- .../blocks/stripped_soulwood_log.json | 15 +- .../blocks/tainted_ether_brazier.json | 27 +- .../tainted_iridescent_ether_brazier.json | 27 +- .../loot_tables/blocks/tainted_rock.json | 15 +- .../blocks/tainted_rock_bricks.json | 15 +- .../blocks/tainted_rock_bricks_slab.json | 13 +- .../blocks/tainted_rock_bricks_stairs.json | 15 +- .../blocks/tainted_rock_bricks_wall.json | 15 +- .../blocks/tainted_rock_button.json | 15 +- .../blocks/tainted_rock_column.json | 15 +- .../blocks/tainted_rock_column_cap.json | 15 +- .../blocks/tainted_rock_item_pedestal.json | 15 +- .../blocks/tainted_rock_item_stand.json | 15 +- .../blocks/tainted_rock_pressure_plate.json | 15 +- .../loot_tables/blocks/tainted_rock_slab.json | 13 +- .../blocks/tainted_rock_stairs.json | 15 +- .../blocks/tainted_rock_tiles.json | 15 +- .../blocks/tainted_rock_tiles_slab.json | 13 +- .../blocks/tainted_rock_tiles_stairs.json | 15 +- .../blocks/tainted_rock_tiles_wall.json | 15 +- .../loot_tables/blocks/tainted_rock_wall.json | 15 +- .../malum/loot_tables/blocks/the_device.json | 15 +- .../malum/loot_tables/blocks/the_vessel.json | 15 +- .../blocks/twisted_ether_brazier.json | 27 +- .../twisted_iridescent_ether_brazier.json | 27 +- .../loot_tables/blocks/twisted_rock.json | 15 +- .../blocks/twisted_rock_bricks.json | 15 +- .../blocks/twisted_rock_bricks_slab.json | 13 +- .../blocks/twisted_rock_bricks_stairs.json | 15 +- .../blocks/twisted_rock_bricks_wall.json | 15 +- .../blocks/twisted_rock_button.json | 15 +- .../blocks/twisted_rock_column.json | 15 +- .../blocks/twisted_rock_column_cap.json | 15 +- .../blocks/twisted_rock_item_pedestal.json | 15 +- .../blocks/twisted_rock_item_stand.json | 15 +- .../blocks/twisted_rock_pressure_plate.json | 15 +- .../loot_tables/blocks/twisted_rock_slab.json | 13 +- .../blocks/twisted_rock_stairs.json | 15 +- .../blocks/twisted_rock_tiles.json | 15 +- .../blocks/twisted_rock_tiles_slab.json | 13 +- .../blocks/twisted_rock_tiles_stairs.json | 15 +- .../blocks/twisted_rock_tiles_wall.json | 15 +- .../loot_tables/blocks/twisted_rock_wall.json | 15 +- .../loot_tables/blocks/twisted_tablet.json | 15 +- .../blocks/vertical_runewood_planks.json | 15 +- .../blocks/vertical_runewood_planks_slab.json | 13 +- .../vertical_runewood_planks_stairs.json | 15 +- .../blocks/vertical_soulwood_planks.json | 15 +- .../blocks/vertical_soulwood_planks_slab.json | 13 +- .../vertical_soulwood_planks_stairs.json | 15 +- .../loot_tables/blocks/void_conduit.json | 15 +- .../loot_tables/blocks/weavers_workbench.json | 15 +- .../loot_tables/blocks/weeping_well_core.json | 15 +- .../blocks/weeping_well_corner.json | 15 +- .../loot_tables/blocks/weeping_well_side.json | 15 +- .../data/malum/recipes/ace_prideweave.json | 1 + .../malum/recipes/agender_prideweave.json | 1 + .../recipes/alchemical_calx_from_block.json | 5 +- .../recipes/aluminum_from_node_blasting.json | 18 +- .../recipes/aluminum_from_node_smelting.json | 18 +- .../data/malum/recipes/ancient_weave.json | 1 + .../recipes/arcane_charcoal_fragment.json | 5 +- .../recipes/arcane_charcoal_from_block.json | 5 +- .../arcane_charcoal_from_fragment.json | 1 + .../arcane_charcoal_from_runewood.json | 7 +- .../arcane_charcoal_from_soulwood.json | 7 +- .../data/malum/recipes/aro_prideweave.json | 1 + .../data/malum/recipes/aroace_prideweave.json | 1 + .../recipes/astral_weave_from_block.json | 5 +- .../data/malum/recipes/bi_prideweave.json | 1 + .../recipes/blazing_quartz_fragment.json | 5 +- .../recipes/blazing_quartz_from_blasting.json | 7 +- .../recipes/blazing_quartz_from_block.json | 5 +- .../recipes/blazing_quartz_from_fragment.json | 1 + .../recipes/blazing_quartz_from_smelting.json | 7 +- .../data/malum/recipes/blazing_torch.json | 18 +- .../resources/data/malum/recipes/bligh.json | 14 +- .../recipes/blighted_gunk_from_mass.json | 5 +- .../recipes/block_of_alchemical_calx.json | 14 +- .../recipes/block_of_arcane_charcoal.json | 14 +- .../malum/recipes/block_of_astral_weave.json | 14 +- .../recipes/block_of_blazing_quartz.json | 14 +- .../malum/recipes/block_of_brilliance.json | 14 +- .../malum/recipes/block_of_cursed_grit.json | 14 +- .../malum/recipes/block_of_grim_talc.json | 14 +- .../malum/recipes/block_of_hallowed_gold.json | 14 +- .../data/malum/recipes/block_of_hex_ash.json | 14 +- .../recipes/block_of_rotting_essence.json | 14 +- .../recipes/block_of_soul_stained_steel.json | 14 +- .../malum/recipes/block_of_soulstone.json | 14 +- .../recipes/bonemeal_from_grim_talc.json | 5 +- .../recipes/brilliance_from_blasting.json | 10 +- .../malum/recipes/brilliance_from_block.json | 5 +- .../brilliance_from_crushed_blasting.json | 10 +- .../brilliance_from_crushed_smelting.json | 10 +- .../brilliance_from_deepslate_blasting.json | 10 +- .../brilliance_from_deepslate_smelting.json | 10 +- .../recipes/brilliance_from_raw_blasting.json | 10 +- .../recipes/brilliance_from_raw_smelting.json | 10 +- .../recipes/brilliance_from_smelting.json | 10 +- .../data/malum/recipes/charcoal_fragment.json | 5 +- .../malum/recipes/charcoal_from_fragment.json | 1 + .../malum/recipes/chiseled_tainted_rock.json | 12 +- ...eled_tainted_rock_bricks_stonecutting.json | 4 +- ..._tainted_rock_bricks_stonecutting_alt.json | 4 +- .../malum/recipes/chiseled_twisted_rock.json | 12 +- ...eled_twisted_rock_bricks_stonecutting.json | 4 +- ..._twisted_rock_bricks_stonecutting_alt.json | 4 +- .../data/malum/recipes/coal_fragment.json | 5 +- .../malum/recipes/coal_from_fragment.json | 1 + .../recipes/copper_from_node_blasting.json | 10 +- .../recipes/copper_from_node_smelting.json | 10 +- .../recipes/copper_ingot_from_nugget.json | 14 +- .../recipes/copper_nugget_from_ingot.json | 5 +- .../data/malum/recipes/cornered_weave.json | 1 + ...tainted_rock_bricks_slab_stonecutting.json | 4 +- ...ed_small_tainted_rock_bricks_smelting.json | 7 +- ...inted_rock_bricks_stairs_stonecutting.json | 4 +- ..._tainted_rock_bricks_stonecutting_alt.json | 4 +- ...tainted_rock_bricks_wall_stonecutting.json | 4 +- ...twisted_rock_bricks_slab_stonecutting.json | 4 +- ...ed_small_twisted_rock_bricks_smelting.json | 7 +- ...isted_rock_bricks_stairs_stonecutting.json | 4 +- ..._twisted_rock_bricks_stonecutting_alt.json | 4 +- ...twisted_rock_bricks_wall_stonecutting.json | 4 +- ...tainted_rock_bricks_slab_stonecutting.json | 4 +- ...inted_rock_bricks_stairs_stonecutting.json | 4 +- ..._tainted_rock_tiles_slab_stonecutting.json | 4 +- ...ainted_rock_tiles_stairs_stonecutting.json | 4 +- ...acked_tainted_rock_tiles_stonecutting.json | 4 +- ..._tainted_rock_tiles_wall_stonecutting.json | 4 +- ...twisted_rock_bricks_slab_stonecutting.json | 4 +- ...isted_rock_bricks_stairs_stonecutting.json | 4 +- ..._twisted_rock_tiles_slab_stonecutting.json | 4 +- ...wisted_rock_tiles_stairs_stonecutting.json | 4 +- ...acked_twisted_rock_tiles_stonecutting.json | 4 +- ..._twisted_rock_tiles_wall_stonecutting.json | 4 +- .../data/malum/recipes/crude_scythe.json | 20 +- .../recipes/cthonic_gold_from_blasting.json | 7 +- .../recipes/cthonic_gold_from_smelting.json | 7 +- .../malum/recipes/cursed_grit_from_block.json | 5 +- .../malum/recipes/cut_runewood_planks.json | 16 +- .../malum/recipes/cut_soulwood_planks.json | 16 +- .../data/malum/recipes/cut_tainted_rock.json | 16 +- .../cut_tainted_rock_stonecutting.json | 4 +- .../data/malum/recipes/cut_twisted_rock.json | 16 +- .../cut_twisted_rock_stonecutting.json | 4 +- .../malum/recipes/demiboy_prideweave.json | 1 + .../malum/recipes/demigirl_prideweave.json | 1 + .../data/malum/recipes/dreaded_weave.json | 1 + .../data/malum/recipes/enby_prideweave.json | 1 + .../malum/recipes/encyclopedia_arcana.json | 1 + .../experience_bottle_from_brilliance.json | 1 + .../data/malum/recipes/gay_prideweave.json | 1 + .../malum/recipes/genderfluid_prideweave.json | 1 + .../malum/recipes/genderqueer_prideweave.json | 1 + .../data/malum/recipes/gilded_belt.json | 14 +- .../data/malum/recipes/gilded_ring.json | 14 +- .../recipes/gold_from_node_blasting.json | 10 +- .../recipes/gold_from_node_smelting.json | 10 +- .../malum/recipes/grim_talc_from_block.json | 5 +- .../recipes/hallowed_gold_from_block.json | 5 +- .../recipes/hallowed_gold_from_nuggets.json | 14 +- .../malum/recipes/hallowed_gold_nugget.json | 5 +- .../malum/recipes/hex_ash_from_block.json | 5 +- .../malum/recipes/holy_sap_from_smelting.json | 7 +- .../malum/recipes/holy_sap_from_smoking.json | 7 +- .../data/malum/recipes/holy_sapball.json | 5 +- .../recipes/impetus_creation_aluminum.json | 34 +- .../malum/recipes/impetus_creation_lead.json | 34 +- .../recipes/impetus_creation_nickel.json | 34 +- .../recipes/impetus_creation_osmium.json | 34 +- .../recipes/impetus_creation_silver.json | 34 +- .../malum/recipes/impetus_creation_tin.json | 34 +- .../recipes/impetus_creation_uranium.json | 34 +- .../malum/recipes/impetus_creation_zinc.json | 34 +- .../malum/recipes/intersex_prideweave.json | 1 + .../recipes/iron_from_node_blasting.json | 10 +- .../recipes/iron_from_node_smelting.json | 10 +- .../recipes/lead_from_node_blasting.json | 18 +- .../recipes/lead_from_node_smelting.json | 18 +- .../malum/recipes/lead_from_sapballs.json | 24 +- .../malum/recipes/lesbian_prideweave.json | 1 + .../recipes/magma_cream_from_sapballs.json | 1 + .../malum/recipes/mechanical_weave_v1.json | 1 + .../malum/recipes/mechanical_weave_v2.json | 1 + .../recipes/natural_quartz_from_blasting.json | 7 +- ...atural_quartz_from_deepslate_blasting.json | 7 +- ...atural_quartz_from_deepslate_smelting.json | 7 +- .../recipes/natural_quartz_from_smelting.json | 7 +- .../netherrack_from_blazing_quartz.json | 22 +- .../recipes/nickel_from_node_blasting.json | 18 +- .../recipes/nickel_from_node_smelting.json | 18 +- .../malum/recipes/node_focusing_aluminum.json | 16 +- .../malum/recipes/node_focusing_copper.json | 8 +- .../malum/recipes/node_focusing_gold.json | 8 +- .../malum/recipes/node_focusing_iron.json | 8 +- .../malum/recipes/node_focusing_lead.json | 16 +- .../malum/recipes/node_focusing_nickel.json | 16 +- .../malum/recipes/node_focusing_osmium.json | 16 +- .../malum/recipes/node_focusing_silver.json | 16 +- .../data/malum/recipes/node_focusing_tin.json | 16 +- .../malum/recipes/node_focusing_uranium.json | 16 +- .../malum/recipes/node_focusing_zinc.json | 16 +- .../data/malum/recipes/ornate_necklace.json | 14 +- .../data/malum/recipes/ornate_ring.json | 14 +- .../recipes/osmium_from_node_blasting.json | 18 +- .../recipes/osmium_from_node_smelting.json | 18 +- .../data/malum/recipes/pan_prideweave.json | 1 + .../data/malum/recipes/plural_prideweave.json | 1 + .../malum/recipes/polished_tainted_rock.json | 16 +- .../recipes/polished_tainted_rock_slab.json | 14 +- ...lished_tainted_rock_slab_stonecutting.json | 4 +- .../recipes/polished_tainted_rock_stairs.json | 18 +- ...shed_tainted_rock_stairs_stonecutting.json | 4 +- .../polished_tainted_rock_stonecutting.json | 4 +- .../malum/recipes/polished_twisted_rock.json | 16 +- .../recipes/polished_twisted_rock_slab.json | 14 +- ...lished_twisted_rock_slab_stonecutting.json | 4 +- .../recipes/polished_twisted_rock_stairs.json | 18 +- ...shed_twisted_rock_stairs_stonecutting.json | 4 +- .../polished_twisted_rock_stonecutting.json | 4 +- .../data/malum/recipes/poly_prideweave.json | 1 + .../data/malum/recipes/pride_prideweave.json | 1 + .../malum/recipes/raw_soulstone_block.json | 14 +- .../recipes/raw_soulstone_from_block.json | 5 +- .../recipes/rotting_essence_from_block.json | 5 +- .../data/malum/recipes/runewood.json | 16 +- .../data/malum/recipes/runewood_beam.json | 18 +- .../data/malum/recipes/runewood_boat.json | 12 +- .../data/malum/recipes/runewood_door.json | 18 +- .../malum/recipes/runewood_item_pedestal.json | 14 +- .../malum/recipes/runewood_item_stand.json | 16 +- .../data/malum/recipes/runewood_panel.json | 18 +- .../malum/recipes/runewood_panel_slab.json | 14 +- .../malum/recipes/runewood_panel_stairs.json | 18 +- .../data/malum/recipes/runewood_planks.json | 5 +- .../malum/recipes/runewood_planks_button.json | 1 + .../malum/recipes/runewood_planks_fence.json | 16 +- .../recipes/runewood_planks_fence_gate.json | 12 +- .../runewood_planks_pressure_plate.json | 10 +- .../malum/recipes/runewood_planks_slab.json | 14 +- .../malum/recipes/runewood_planks_stairs.json | 18 +- .../data/malum/recipes/runewood_sign.json | 18 +- .../data/malum/recipes/runewood_tiles.json | 18 +- .../malum/recipes/runewood_tiles_slab.json | 14 +- .../malum/recipes/runewood_tiles_stairs.json | 18 +- .../data/malum/recipes/runewood_trapdoor.json | 16 +- .../recipes/runewood_trapdoor_from_solid.json | 1 + .../runic_small_tainted_rock_bricks_slab.json | 14 +- ...unic_small_tainted_rock_bricks_stairs.json | 18 +- .../runic_small_tainted_rock_bricks_wall.json | 16 +- .../runic_small_twisted_rock_bricks_slab.json | 14 +- ...unic_small_twisted_rock_bricks_stairs.json | 18 +- .../runic_small_twisted_rock_bricks_wall.json | 16 +- .../recipes/runic_tainted_rock_bricks.json | 7 +- .../runic_tainted_rock_bricks_slab.json | 14 +- .../runic_tainted_rock_bricks_stairs.json | 18 +- .../runic_tainted_rock_bricks_wall.json | 16 +- .../recipes/runic_tainted_rock_tiles.json | 7 +- .../runic_tainted_rock_tiles_slab.json | 14 +- .../runic_tainted_rock_tiles_stairs.json | 18 +- .../runic_tainted_rock_tiles_wall.json | 16 +- .../recipes/runic_twisted_rock_bricks.json | 7 +- .../runic_twisted_rock_bricks_slab.json | 14 +- .../runic_twisted_rock_bricks_stairs.json | 18 +- .../runic_twisted_rock_bricks_wall.json | 16 +- .../recipes/runic_twisted_rock_tiles.json | 7 +- .../runic_twisted_rock_tiles_slab.json | 14 +- .../runic_twisted_rock_tiles_stairs.json | 18 +- .../runic_twisted_rock_tiles_wall.json | 16 +- .../recipes/silver_from_node_blasting.json | 18 +- .../recipes/silver_from_node_smelting.json | 18 +- .../skeleton_skull_from_grim_talc.json | 16 +- .../recipes/small_tainted_rock_bricks.json | 16 +- .../small_tainted_rock_bricks_slab.json | 14 +- ...tainted_rock_bricks_slab_stonecutting.json | 4 +- .../small_tainted_rock_bricks_stairs.json | 18 +- ...inted_rock_bricks_stairs_stonecutting.json | 4 +- ...mall_tainted_rock_bricks_stonecutting.json | 4 +- ..._tainted_rock_bricks_stonecutting_alt.json | 4 +- ..._rock_bricks_stonecutting_from_bricks.json | 4 +- ...d_rock_bricks_stonecutting_from_tiles.json | 4 +- .../small_tainted_rock_bricks_wall.json | 16 +- ...tainted_rock_bricks_wall_stonecutting.json | 4 +- .../recipes/small_twisted_rock_bricks.json | 16 +- .../small_twisted_rock_bricks_slab.json | 14 +- ...twisted_rock_bricks_slab_stonecutting.json | 4 +- .../small_twisted_rock_bricks_stairs.json | 18 +- ...isted_rock_bricks_stairs_stonecutting.json | 4 +- ...mall_twisted_rock_bricks_stonecutting.json | 4 +- ..._twisted_rock_bricks_stonecutting_alt.json | 4 +- ..._rock_bricks_stonecutting_from_bricks.json | 4 +- ...d_rock_bricks_stonecutting_from_tiles.json | 4 +- .../small_twisted_rock_bricks_wall.json | 16 +- ...twisted_rock_bricks_wall_stonecutting.json | 4 +- .../malum/recipes/smooth_tainted_rock.json | 7 +- .../recipes/smooth_tainted_rock_slab.json | 14 +- ...smooth_tainted_rock_slab_stonecutting.json | 4 +- .../recipes/smooth_tainted_rock_stairs.json | 18 +- ...ooth_tainted_rock_stairs_stonecutting.json | 4 +- .../smooth_tainted_rock_stonecutting.json | 4 +- .../malum/recipes/smooth_twisted_rock.json | 7 +- .../recipes/smooth_twisted_rock_slab.json | 14 +- ...smooth_twisted_rock_slab_stonecutting.json | 4 +- .../recipes/smooth_twisted_rock_stairs.json | 18 +- ...ooth_twisted_rock_stairs_stonecutting.json | 4 +- .../smooth_twisted_rock_stonecutting.json | 4 +- .../recipes/solid_runewood_trapdoor.json | 1 + .../recipes/solid_soulwood_trapdoor.json | 1 + .../malum/recipes/soul_stained_steel_axe.json | 14 +- .../soul_stained_steel_from_block.json | 5 +- .../soul_stained_steel_from_nuggets.json | 14 +- .../malum/recipes/soul_stained_steel_hoe.json | 14 +- .../recipes/soul_stained_steel_nugget.json | 5 +- .../recipes/soul_stained_steel_pickaxe.json | 14 +- .../recipes/soul_stained_steel_shovel.json | 14 +- .../recipes/soul_stained_steel_sword.json | 14 +- .../recipes/soulstone_from_blasting.json | 10 +- .../malum/recipes/soulstone_from_block.json | 5 +- .../soulstone_from_crushed_blasting.json | 10 +- .../soulstone_from_crushed_smelting.json | 10 +- .../soulstone_from_deepslate_blasting.json | 10 +- .../soulstone_from_deepslate_smelting.json | 10 +- .../recipes/soulstone_from_raw_blasting.json | 10 +- .../recipes/soulstone_from_raw_smelting.json | 10 +- .../recipes/soulstone_from_smelting.json | 10 +- .../data/malum/recipes/soulwood.json | 16 +- .../data/malum/recipes/soulwood_beam.json | 18 +- .../data/malum/recipes/soulwood_boat.json | 12 +- .../data/malum/recipes/soulwood_door.json | 18 +- .../malum/recipes/soulwood_item_pedestal.json | 14 +- .../malum/recipes/soulwood_item_stand.json | 16 +- .../data/malum/recipes/soulwood_panel.json | 18 +- .../malum/recipes/soulwood_panel_slab.json | 14 +- .../malum/recipes/soulwood_panel_stairs.json | 18 +- .../data/malum/recipes/soulwood_planks.json | 5 +- .../malum/recipes/soulwood_planks_button.json | 1 + .../malum/recipes/soulwood_planks_fence.json | 16 +- .../recipes/soulwood_planks_fence_gate.json | 12 +- .../soulwood_planks_pressure_plate.json | 10 +- .../malum/recipes/soulwood_planks_slab.json | 14 +- .../malum/recipes/soulwood_planks_stairs.json | 18 +- .../data/malum/recipes/soulwood_sign.json | 18 +- .../data/malum/recipes/soulwood_tiles.json | 18 +- .../malum/recipes/soulwood_tiles_slab.json | 14 +- .../malum/recipes/soulwood_tiles_stairs.json | 18 +- .../data/malum/recipes/soulwood_trapdoor.json | 16 +- .../recipes/soulwood_trapdoor_from_solid.json | 1 + .../data/malum/recipes/spectral_lens.json | 14 +- .../data/malum/recipes/spectral_optic.json | 18 +- .../data/malum/recipes/spirit_altar.json | 22 +- .../spirit_crucible/amethyst_shard.json | 8 +- .../spirit_crucible/blazing_quartz.json | 8 +- .../spirit_crucible/glowstone_dust.json | 8 +- .../recipes/spirit_crucible/gunpowder.json | 8 +- .../spirit_crucible/prismarine_shard.json | 8 +- .../malum/recipes/spirit_crucible/quartz.json | 8 +- .../recipes/spirit_crucible/redstone.json | 8 +- .../alchemical_impetus_restoration.json | 8 +- .../spirit_crucible/repair/copper.json | 8 +- .../spirit_crucible/repair/diamond.json | 8 +- .../recipes/spirit_crucible/repair/flint.json | 8 +- .../recipes/spirit_crucible/repair/gold.json | 8 +- .../recipes/spirit_crucible/repair/iron.json | 8 +- .../repair/metal_impetus_restoration.json | 8 +- .../spirit_crucible/repair/netherite.json | 8 +- .../repair/soul_hunter_armor.json | 8 +- .../repair/soul_stained_steel.json | 8 +- .../repair/special_soul_stained_steel.json | 8 +- .../recipes/spirit_crucible/repair/stone.json | 8 +- .../spirit_crucible/repair/trident.json | 8 +- .../spirit_crucible/repair/tyrving.json | 8 +- .../spirit_crucible/repair/wooden.json | 8 +- .../spirit_infusion/alchemical_calx.json | 10 +- .../spirit_infusion/alchemical_impetus.json | 22 +- .../spirit_infusion/arcane_charcoal.json | 10 +- .../spirit_infusion/belt_of_the_magebane.json | 30 +- .../belt_of_the_prospector.json | 30 +- .../spirit_infusion/belt_of_the_starved.json | 30 +- .../spirit_infusion/brilliant_obelisk.json | 22 +- .../spirit_infusion/copper_impetus.json | 26 +- .../spirit_infusion/corrupted_resonance.json | 30 +- .../recipes/spirit_infusion/cursed_grit.json | 10 +- .../spirit_infusion/esoteric_spool.json | 20 +- .../malum/recipes/spirit_infusion/ether.json | 24 +- .../spirit_infusion/etheric_nitrate.json | 28 +- .../recipes/spirit_infusion/gold_impetus.json | 26 +- .../spirit_infusion/hallowed_gold_ingot.json | 16 +- .../recipes/spirit_infusion/hex_ash.json | 6 +- .../spirit_infusion/iridescent_ether.json | 22 +- .../recipes/spirit_infusion/iron_impetus.json | 26 +- .../necklace_of_blissful_harmony.json | 30 +- .../necklace_of_the_mystic_mirror.json | 26 +- .../necklace_of_the_narrow_edge.json | 22 +- .../necklace_of_tidal_affinity.json | 26 +- .../malum/recipes/spirit_infusion/poppet.json | 24 +- .../ring_of_alchemical_mastery.json | 30 +- .../ring_of_arcane_prowess.json | 22 +- .../ring_of_curative_talent.json | 26 +- .../ring_of_desperate_voracity.json | 30 +- .../ring_of_esoteric_spoils.json | 16 +- .../ring_of_the_demolitionist.json | 26 +- .../spirit_infusion/ring_of_the_hoarder.json | 26 +- .../spirit_infusion/runewood_obelisk.json | 22 +- .../spirit_infusion/runewood_totem_base.json | 24 +- .../spirit_infusion/soul_hunter_boots.json | 30 +- .../spirit_infusion/soul_hunter_cloak.json | 26 +- .../spirit_infusion/soul_hunter_leggings.json | 26 +- .../spirit_infusion/soul_hunter_robe.json | 26 +- .../soul_stained_steel_boots.json | 34 +- .../soul_stained_steel_chestplate.json | 34 +- .../soul_stained_steel_helmet.json | 34 +- .../soul_stained_steel_ingot.json | 16 +- .../soul_stained_steel_leggings.json | 34 +- .../soul_stained_steel_scythe.json | 26 +- .../spirit_infusion/soulwood_totem_base.json | 24 +- .../spirit_infusion/spirit_catalyzer.json | 28 +- .../spirit_infusion/spirit_crucible.json | 26 +- .../spirit_infusion/spirit_fabric.json | 24 +- .../recipes/spirit_infusion/tainted_rock.json | 10 +- .../recipes/spirit_infusion/twisted_rock.json | 10 +- .../spirit_infusion/twisted_tablet.json | 22 +- .../recipes/spirit_infusion/tyrving.json | 34 +- .../spirit_infusion/vivid_nitrate.json | 28 +- .../data/malum/recipes/spirit_jar.json | 20 +- .../data/malum/recipes/spirit_pouch.json | 14 +- .../spirit_transmutation/soulwood/beam.json | 4 +- .../soulwood/cut_planks.json | 4 +- .../spirit_transmutation/soulwood/door.json | 4 +- .../soulwood/exposed_log.json | 4 +- .../spirit_transmutation/soulwood/growth.json | 4 +- .../soulwood/item_pedestal.json | 4 +- .../soulwood/item_stand.json | 4 +- .../spirit_transmutation/soulwood/leaves.json | 4 +- .../spirit_transmutation/soulwood/log.json | 4 +- .../spirit_transmutation/soulwood/panel.json | 4 +- .../soulwood/panel_slab.json | 4 +- .../soulwood/panel_stairs.json | 4 +- .../spirit_transmutation/soulwood/planks.json | 4 +- .../soulwood/planks_button.json | 4 +- .../soulwood/planks_fence.json | 4 +- .../soulwood/planks_fence_gate.json | 4 +- .../soulwood/planks_pressure_plate.json | 4 +- .../soulwood/planks_slab.json | 4 +- .../soulwood/planks_stairs.json | 4 +- .../soulwood/revealed_log.json | 4 +- .../spirit_transmutation/soulwood/sign.json | 4 +- .../soulwood/solid_trapdoor.json | 4 +- .../soulwood/soulwood.json | 4 +- .../soulwood/stripped.json | 4 +- .../soulwood/stripped_log.json | 4 +- .../spirit_transmutation/soulwood/tiles.json | 4 +- .../soulwood/tiles_slab.json | 4 +- .../soulwood/tiles_stairs.json | 4 +- .../soulwood/trapdoor.json | 4 +- .../soulwood/vertical_planks.json | 4 +- .../soulwood/vertical_planks_slab.json | 4 +- .../soulwood/vertical_planks_stairs.json | 4 +- .../recipes/sticky_piston_from_sapballs.json | 12 +- .../data/malum/recipes/stripped_runewood.json | 16 +- .../data/malum/recipes/stripped_soulwood.json | 16 +- .../tainted_rock_brick_wall_stonecutting.json | 4 +- .../malum/recipes/tainted_rock_bricks.json | 16 +- ...tainted_rock_bricks_from_small_bricks.json | 16 +- .../recipes/tainted_rock_bricks_slab.json | 14 +- ...tainted_rock_bricks_slab_stonecutting.json | 4 +- .../recipes/tainted_rock_bricks_stairs.json | 18 +- ...inted_rock_bricks_stairs_stonecutting.json | 4 +- .../tainted_rock_bricks_stonecutting.json | 4 +- ...ock_bricks_stonecutting_from_polished.json | 4 +- .../recipes/tainted_rock_bricks_wall.json | 16 +- .../malum/recipes/tainted_rock_button.json | 1 + .../malum/recipes/tainted_rock_column.json | 16 +- .../recipes/tainted_rock_column_cap.json | 1 + .../tainted_rock_column_cap_stonecutting.json | 4 +- .../recipes/tainted_rock_column_from_cap.json | 1 + .../tainted_rock_column_stonecutting.json | 4 +- .../recipes/tainted_rock_item_pedestal.json | 14 +- .../recipes/tainted_rock_item_stand.json | 16 +- .../recipes/tainted_rock_pressure_plate.json | 10 +- .../data/malum/recipes/tainted_rock_slab.json | 14 +- .../tainted_rock_slab_stonecutting.json | 4 +- .../malum/recipes/tainted_rock_stairs.json | 18 +- .../tainted_rock_stairs_stonecutting.json | 4 +- .../malum/recipes/tainted_rock_tiles.json | 16 +- .../recipes/tainted_rock_tiles_slab.json | 14 +- .../tainted_rock_tiles_slab_stonecutting.json | 4 +- .../recipes/tainted_rock_tiles_stairs.json | 18 +- ...ainted_rock_tiles_stairs_stonecutting.json | 4 +- .../tainted_rock_tiles_stonecutting.json | 4 +- ...d_rock_tiles_stonecutting_from_bricks.json | 4 +- ...rock_tiles_stonecutting_from_polished.json | 4 +- .../recipes/tainted_rock_tiles_wall.json | 16 +- .../tainted_rock_tiles_wall_stonecutting.json | 4 +- .../data/malum/recipes/tainted_rock_wall.json | 16 +- .../tainted_rock_wall_stonecutting.json | 4 +- .../data/malum/recipes/the_device.json | 14 +- .../malum/recipes/tin_from_node_blasting.json | 18 +- .../malum/recipes/tin_from_node_smelting.json | 18 +- .../data/malum/recipes/trans_prideweave.json | 1 + .../twisted_rock_brick_wall_stonecutting.json | 4 +- .../malum/recipes/twisted_rock_bricks.json | 16 +- ...twisted_rock_bricks_from_small_bricks.json | 16 +- .../recipes/twisted_rock_bricks_slab.json | 14 +- ...twisted_rock_bricks_slab_stonecutting.json | 4 +- .../recipes/twisted_rock_bricks_stairs.json | 18 +- ...isted_rock_bricks_stairs_stonecutting.json | 4 +- .../twisted_rock_bricks_stonecutting.json | 4 +- ...ock_bricks_stonecutting_from_polished.json | 4 +- .../recipes/twisted_rock_bricks_wall.json | 16 +- .../malum/recipes/twisted_rock_button.json | 1 + .../malum/recipes/twisted_rock_column.json | 16 +- .../recipes/twisted_rock_column_cap.json | 1 + .../twisted_rock_column_cap_stonecutting.json | 4 +- .../recipes/twisted_rock_column_from_cap.json | 1 + .../twisted_rock_column_stonecutting.json | 4 +- .../recipes/twisted_rock_item_pedestal.json | 14 +- .../recipes/twisted_rock_item_stand.json | 16 +- .../recipes/twisted_rock_pressure_plate.json | 10 +- .../data/malum/recipes/twisted_rock_slab.json | 14 +- .../twisted_rock_slab_stonecutting.json | 4 +- .../malum/recipes/twisted_rock_stairs.json | 18 +- .../twisted_rock_stairs_stonecutting.json | 4 +- .../malum/recipes/twisted_rock_tiles.json | 16 +- .../recipes/twisted_rock_tiles_slab.json | 14 +- .../twisted_rock_tiles_slab_stonecutting.json | 4 +- .../recipes/twisted_rock_tiles_stairs.json | 18 +- ...wisted_rock_tiles_stairs_stonecutting.json | 4 +- .../twisted_rock_tiles_stonecutting.json | 4 +- ...d_rock_tiles_stonecutting_from_bricks.json | 4 +- ...rock_tiles_stonecutting_from_polished.json | 4 +- .../recipes/twisted_rock_tiles_wall.json | 16 +- .../twisted_rock_tiles_wall_stonecutting.json | 4 +- .../data/malum/recipes/twisted_rock_wall.json | 16 +- .../twisted_rock_wall_stonecutting.json | 4 +- .../recipes/unholy_sap_from_smelting.json | 7 +- .../recipes/unholy_sap_from_smoking.json | 7 +- .../data/malum/recipes/unholy_sapball.json | 5 +- .../recipes/uranium_from_node_blasting.json | 18 +- .../recipes/uranium_from_node_smelting.json | 18 +- .../recipes/vertical_runewood_planks.json | 18 +- .../vertical_runewood_planks_slab.json | 14 +- .../vertical_runewood_planks_stairs.json | 18 +- .../recipes/vertical_soulwood_planks.json | 18 +- .../vertical_soulwood_planks_slab.json | 14 +- .../vertical_soulwood_planks_stairs.json | 18 +- .../data/malum/recipes/weavers_workbench.json | 20 +- .../recipes/zinc_from_node_blasting.json | 18 +- .../recipes/zinc_from_node_smelting.json | 18 +- .../recipes/zombie_head_from_grim_talc.json | 16 +- .../malum/tags/blocks/blighted_blocks.json | 8 - .../malum/tags/blocks/blighted_plants.json | 8 - .../data/malum/tags/blocks/endless_flame.json | 4 - .../tags/blocks/greater_aerial_whitelist.json | 4 - .../data/malum/tags/blocks/rite_immune.json | 11 - .../data/malum/tags/blocks/runewood_logs.json | 11 - .../data/malum/tags/blocks/soulwood_logs.json | 11 - .../data/malum/tags/blocks/tainted_rock.json | 55 - .../data/malum/tags/blocks/twisted_rock.json | 50 - .../data/malum/tags/items/gross_foods.json | 7 - .../data/malum/tags/items/metal_nodes.json | 16 - .../tags/items/prospectors_treasure.json | 17 - .../data/malum/tags/items/runewood_logs.json | 11 - .../data/malum/tags/items/sapballs.json | 7 - .../data/malum/tags/items/scythe.json | 8 - .../malum/tags/items/soul_hunter_weapon.json | 15 - .../data/malum/tags/items/soulwood_logs.json | 12 - .../worldgen/biome/has_blazing_quartz.json | 5 + .../tags/worldgen/biome/has_brilliant.json | 5 + .../tags/worldgen/biome/has_soulstone.json | 5 + .../configured_feature/brilliant_ore.json} | 2 +- .../natural_quartz_ore.json} | 4 +- .../configured_feature/soulstone_ore.json} | 2 +- .../placed_feature/ore_brilliant.json} | 22 +- .../placed_feature/ore_natural_quartz.json | 27 + .../placed_feature/ore_soulstone.json | 27 + .../ether_torch_alternative.json | 21 +- .../iridescent_ether_torch_alternative.json | 21 +- .../tainted_ether_brazier.json | 21 +- .../tainted_iridescent_ether_brazier.json | 21 +- .../twisted_ether_brazier.json | 21 +- .../twisted_iridescent_ether_brazier.json | 21 +- .../data/minecraft/recipes/comparator.json | 22 - .../minecraft/recipes/daylight_detector.json | 22 - .../data/minecraft/recipes/diorite.json | 19 - .../recipes/ether_torch_alternative.json | 12 +- .../data/minecraft/recipes/granite.json | 14 - .../iridescent_ether_torch_alternative.json | 12 +- .../data/minecraft/recipes/observer.json | 22 - .../data/minecraft/recipes/quartz_block.json | 15 - .../recipes/tainted_ether_brazier.json | 12 +- .../tainted_iridescent_ether_brazier.json | 12 +- .../recipes/twisted_ether_brazier.json | 12 +- .../twisted_iridescent_ether_brazier.json | 12 +- .../tags/blocks/beacon_base_blocks.json | 11 - .../data/minecraft/tags/blocks/buttons.json | 10 - .../data/minecraft/tags/blocks/doors.json | 7 - .../minecraft/tags/blocks/fence_gates.json | 7 - .../data/minecraft/tags/blocks/fences.json | 7 - .../data/minecraft/tags/blocks/leaves.json | 8 - .../data/minecraft/tags/blocks/logs.json | 17 - .../minecraft/tags/blocks/mineable/axe.json | 82 - .../minecraft/tags/blocks/mineable/hoe.json | 12 - .../tags/blocks/mineable/pickaxe.json | 135 - .../tags/blocks/mineable/shovel.json | 10 - .../data/minecraft/tags/blocks/planks.json | 11 - .../tags/blocks/pressure_plates.json | 9 - .../data/minecraft/tags/blocks/saplings.json | 6 - .../data/minecraft/tags/blocks/signs.json | 9 - .../data/minecraft/tags/blocks/slabs.json | 31 - .../data/minecraft/tags/blocks/stairs.json | 31 - .../minecraft/tags/blocks/standing_signs.json | 7 - .../data/minecraft/tags/blocks/trapdoors.json | 9 - .../minecraft/tags/blocks/wall_signs.json | 7 - .../data/minecraft/tags/blocks/walls.json | 19 - .../minecraft/tags/blocks/wooden_buttons.json | 8 - .../minecraft/tags/blocks/wooden_doors.json | 7 - .../minecraft/tags/blocks/wooden_fences.json | 7 - .../tags/blocks/wooden_pressure_plates.json | 7 - .../minecraft/tags/blocks/wooden_slabs.json | 13 - .../minecraft/tags/blocks/wooden_stairs.json | 13 - .../tags/blocks/wooden_trapdoors.json | 9 - .../data/minecraft/tags/items/anvil.json | 4 - .../data/minecraft/tags/items/beds.json | 4 - .../data/minecraft/tags/items/buttons.json | 10 - .../data/minecraft/tags/items/carpets.json | 4 - .../data/minecraft/tags/items/doors.json | 7 - .../data/minecraft/tags/items/fences.json | 7 - .../data/minecraft/tags/items/flowers.json | 4 - .../data/minecraft/tags/items/gold_ores.json | 4 - .../data/minecraft/tags/items/leaves.json | 8 - .../data/minecraft/tags/items/logs.json | 17 - .../minecraft/tags/items/logs_that_burn.json | 4 - .../data/minecraft/tags/items/planks.json | 11 - .../data/minecraft/tags/items/sand.json | 4 - .../data/minecraft/tags/items/saplings.json | 6 - .../data/minecraft/tags/items/slabs.json | 31 - .../minecraft/tags/items/small_flowers.json | 4 - .../tags/items/soul_fire_base_blocks.json | 4 - .../data/minecraft/tags/items/stairs.json | 31 - .../minecraft/tags/items/stone_bricks.json | 4 - .../minecraft/tags/items/tall_flowers.json | 4 - .../data/minecraft/tags/items/trapdoors.json | 9 - .../data/minecraft/tags/items/walls.json | 19 - .../minecraft/tags/items/wooden_buttons.json | 8 - .../minecraft/tags/items/wooden_doors.json | 7 - .../minecraft/tags/items/wooden_fences.json | 7 - .../tags/items/wooden_pressure_plates.json | 7 - .../minecraft/tags/items/wooden_slabs.json | 13 - .../minecraft/tags/items/wooden_stairs.json | 13 - .../tags/items/wooden_trapdoors.json | 9 - .../data/minecraft/tags/items/wool.json | 4 - src/main/java/com/sammy/malum/MalumMod.java | 20 +- .../curio/TokenOfGratitudeRenderer.java | 2 +- .../screen/codex/ArcanaCodexHelper.java | 10 +- .../WeaversWorkbenchContainerScreen.java | 36 +- .../spirit_altar/SpiritAltarBlockEntity.java | 8 +- .../spirit_crucible/IAccelerationTarget.java | 2 +- .../SpiritCatalyzerCoreBlockEntity.java | 16 +- .../SpiritCrucibleCoreBlockEntity.java | 36 +- .../curiosities/tablet/ITabletTracker.java | 2 +- .../tablet/TwistedTabletBlockEntity.java | 2 +- .../totem/TotemBaseBlockEntity.java | 12 +- .../totem/TotemPoleBlockEntity.java | 36 +- .../WeaversWorkbenchBlockEntity.java | 4 +- .../weeping_well/VoidConduitBlockEntity.java | 18 +- .../common/block/ether/EtherBlockEntity.java | 6 +- .../block/ether/EtherWallTorchBlock.java | 2 +- .../common/block/nature/MalumLeavesBlock.java | 4 +- .../common/block/nature/MalumLogBLock.java | 4 +- .../block/nature/MalumSaplingBlock.java | 10 +- .../block/nature/SapFilledLogBlock.java | 2 +- .../soulwood/SapFilledSoulwoodLogBlock.java | 2 +- .../nature/soulwood/SoulwoodLogBlock.java | 2 +- .../pedestal/ItemPedestalBlockEntity.java | 2 +- .../storage/stand/ItemStandBlockEntity.java | 2 +- .../common/block/the_device/TheDevice.java | 2 +- .../common/block/the_device/TheVessel.java | 2 +- .../enchantment/HauntedEnchantment.java | 2 +- .../enchantment/ReboundEnchantment.java | 2 +- .../boomerang/ScytheBoomerangEntity.java | 2 +- .../night_terror/NightTerrorSeekerEntity.java | 4 +- .../entity/nitrate/EthericNitrateEntity.java | 2 +- .../curios/CurioTokenOfGratitude.java | 4 +- .../armor/SoulHunterArmorItem.java | 4 +- .../armor/SoulStainedSteelArmorItem.java | 6 +- .../curiosities/curios/MalumCurioItem.java | 6 +- .../curios/misc/CurioWaterNecklace.java | 19 +- .../prospector/CurioProspectorBelt.java | 2 +- .../curiosities/weapons/MalumScytheItem.java | 5 +- .../common/spiritrite/WickedRiteType.java | 4 +- .../greater/EldritchEarthenRiteType.java | 2 +- .../greater/EldritchWickedRiteType.java | 8 +- .../common/worldgen/WeepingWellStructure.java | 109 + .../compability/create/CreateCompat.java | 2 +- .../com/sammy/malum/config/CommonConfig.java | 3 + .../malum/core/events/WorldgenEvents.java | 4 +- .../sammy/malum/core/helper/SpiritHelper.java | 3 +- .../com/sammy/malum/data/MalumBiomeTags.java | 29 + .../java/com/sammy/malum/data/MalumLang.java | 10 +- .../com/sammy/malum/data/MalumRecipes.java | 49 +- .../malum/data/MalumWorldgenProvider.java | 57 +- .../data/block/MalumBlockLootTables.java | 12 +- .../malum/data/block/MalumBlockTags.java | 19 +- .../data/item/MalumItemModelSmithTypes.java | 3 +- .../sammy/malum/data/item/MalumItemTags.java | 4 - .../recipe/MalumSpiritFocusingRecipes.java | 5 + .../recipe/MalumSpiritInfusionRecipes.java | 4 + .../MalumSpiritTransmutationRecipes.java | 5 + .../MalumVanillaRecipeReplacements.java | 7 + .../builder/SpiritFocusingRecipeBuilder.java | 3 +- .../builder/SpiritInfusionRecipeBuilder.java | 3 +- .../builder/SpiritRepairRecipeBuilder.java | 5 +- .../builder/VoidFavorRecipeBuilder.java | 3 +- .../MetalNodeCookingRecipeBuilder.java | 3 +- .../StackedMalumCookingRecipeBuilder.java | 32 +- .../vanilla/TheDeviceRecipeBuilder.java | 3 +- .../com/sammy/malum/mixin/ExplosionMixin.java | 13 +- .../com/sammy/malum/mixin/ItemStackMixin.java | 41 +- .../common/block/BlockEntityRegistry.java | 2 +- .../registry/common/block/BlockRegistry.java | 39 +- .../common/block/MalumBlockSetTypes.java | 13 + .../common/block/WoodTypeRegistry.java | 16 +- .../common/entity/EntityRegistry.java | 4 +- .../common/item/tabs/CreativeTabRegistry.java | 34 +- .../common/worldgen/BiomeTagRegistry.java | 12 + .../worldgen/ConfiguredFeatureRegistry.java | 52 +- .../common/worldgen/FeatureRegistry.java | 4 +- .../worldgen/PlacedFeatureRegistry.java | 50 +- .../common/worldgen/StructureRegistry.java | 21 + .../resources/META-INF/accesstransformer.cfg | 4 +- .../malum/models/item/creative_scythe.json | 2 +- .../malum/models/item/crude_scythe.json | 2 +- .../item/soul_stained_steel_scythe.json | 2 +- .../ore_blazing_quartz.json | 18 - .../ore_natural_quartz.json | 27 - .../placed_feature/ore_brilliant.json | 27 - .../placed_feature/ore_natural_quartz.json | 27 - .../placed_feature/ore_soulstone_lower.json | 27 - .../placed_feature/ore_soulstone_upper.json | 27 - 1641 files changed, 16475 insertions(+), 18494 deletions(-) rename lib/{lodestone-1.20.1-1.4.21.jar => lodestone-1.20.1-1.4.22.jar} (86%) create mode 100644 run-data/config/fml.toml create mode 100644 run-data/config/jei/jei-client.ini create mode 100644 run-data/config/jei/jei-colors.ini create mode 100644 run-data/config/jei/jei-debug.ini create mode 100644 run-data/config/jei/jei-mod-id-format.ini create mode 100644 run-data/config/worldstripper/stripper.json delete mode 100644 src/generated/resources/.cache/cache rename src/generated/resources/assets/malum/models/block/{runewood_door_bottom.json => runewood_door_bottom_left.json} (73%) create mode 100644 src/generated/resources/assets/malum/models/block/runewood_door_bottom_left_open.json rename src/generated/resources/assets/malum/models/block/{runewood_door_bottom_hinge.json => runewood_door_bottom_right.json} (73%) create mode 100644 src/generated/resources/assets/malum/models/block/runewood_door_bottom_right_open.json rename src/generated/resources/assets/malum/models/block/{runewood_door_top.json => runewood_door_top_left.json} (74%) create mode 100644 src/generated/resources/assets/malum/models/block/runewood_door_top_left_open.json rename src/generated/resources/assets/malum/models/block/{runewood_door_top_hinge.json => runewood_door_top_right.json} (74%) create mode 100644 src/generated/resources/assets/malum/models/block/runewood_door_top_right_open.json rename src/generated/resources/assets/malum/models/block/{soulwood_door_bottom_hinge.json => soulwood_door_bottom_left.json} (73%) create mode 100644 src/generated/resources/assets/malum/models/block/soulwood_door_bottom_left_open.json rename src/generated/resources/assets/malum/models/block/{soulwood_door_top_hinge.json => soulwood_door_bottom_right.json} (73%) create mode 100644 src/generated/resources/assets/malum/models/block/soulwood_door_bottom_right_open.json rename src/generated/resources/assets/malum/models/block/{soulwood_door_top.json => soulwood_door_top_left.json} (74%) create mode 100644 src/generated/resources/assets/malum/models/block/soulwood_door_top_left_open.json rename src/generated/resources/assets/malum/models/block/{soulwood_door_bottom.json => soulwood_door_top_right.json} (74%) create mode 100644 src/generated/resources/assets/malum/models/block/soulwood_door_top_right_open.json delete mode 100644 src/generated/resources/data/farmersdelight/tags/blocks/heat_sources.json delete mode 100644 src/generated/resources/data/farmersdelight/tags/blocks/tray_heat_sources.json delete mode 100644 src/generated/resources/data/farmersdelight/tags/items/tools/knives.json delete mode 100644 src/generated/resources/data/forge/tags/blocks/fence_gates/wooden.json delete mode 100644 src/generated/resources/data/forge/tags/blocks/ores.json delete mode 100644 src/generated/resources/data/forge/tags/blocks/storage_blocks.json delete mode 100644 src/generated/resources/data/forge/tags/blocks/stripped_logs.json delete mode 100644 src/generated/resources/data/forge/tags/items/gems.json delete mode 100644 src/generated/resources/data/forge/tags/items/gems/quartz.json delete mode 100644 src/generated/resources/data/forge/tags/items/ingots.json delete mode 100644 src/generated/resources/data/forge/tags/items/nuggets.json delete mode 100644 src/generated/resources/data/forge/tags/items/nuggets/copper.json delete mode 100644 src/generated/resources/data/forge/tags/items/ores.json delete mode 100644 src/generated/resources/data/forge/tags/items/ores/quartz.json delete mode 100644 src/generated/resources/data/forge/tags/items/slimeballs.json delete mode 100644 src/generated/resources/data/forge/tags/items/storage_blocks.json delete mode 100644 src/generated/resources/data/forge/tags/items/stripped_logs.json delete mode 100644 src/generated/resources/data/forge/tags/items/tools/knives.json rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/ace_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/agender_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/alchemical_calx_from_block.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/ancient_weave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/arcane_charcoal_fragment.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/arcane_charcoal_from_block.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/arcane_charcoal_from_fragment.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/arcane_charcoal_from_runewood.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/arcane_charcoal_from_soulwood.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/aro_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/aroace_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/astral_weave_from_block.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/bi_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/blazing_quartz_fragment.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/blazing_quartz_from_blasting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/blazing_quartz_from_block.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/blazing_quartz_from_fragment.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/blazing_quartz_from_smelting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{decorations => misc}/blazing_torch.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/bligh.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/blighted_gunk_from_mass.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_alchemical_calx.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_arcane_charcoal.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_astral_weave.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_blazing_quartz.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_brilliance.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_cursed_grit.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_grim_talc.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_hallowed_gold.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_hex_ash.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_rotting_essence.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_soul_stained_steel.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/block_of_soulstone.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/brilliance_from_block.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/chiseled_tainted_rock.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/chiseled_tainted_rock_bricks_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/chiseled_tainted_rock_bricks_stonecutting_alt.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/chiseled_twisted_rock.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/chiseled_twisted_rock_bricks_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/chiseled_twisted_rock_bricks_stonecutting_alt.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/cornered_weave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_tainted_rock_bricks_slab_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_tainted_rock_bricks_smelting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_tainted_rock_bricks_stairs_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_tainted_rock_bricks_stonecutting_alt.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_tainted_rock_bricks_wall_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_twisted_rock_bricks_slab_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_twisted_rock_bricks_smelting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_twisted_rock_bricks_stairs_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_twisted_rock_bricks_stonecutting_alt.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_small_twisted_rock_bricks_wall_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_tainted_rock_bricks_slab_stonecutting.json (80%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_tainted_rock_bricks_stairs_stonecutting.json (80%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_tainted_rock_tiles_slab_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_tainted_rock_tiles_stairs_stonecutting.json (80%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_tainted_rock_tiles_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_tainted_rock_tiles_wall_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_twisted_rock_bricks_slab_stonecutting.json (80%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_twisted_rock_bricks_stairs_stonecutting.json (80%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_twisted_rock_tiles_slab_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_twisted_rock_tiles_stairs_stonecutting.json (80%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_twisted_rock_tiles_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cracked_twisted_rock_tiles_wall_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/crude_scythe.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/cthonic_gold_from_blasting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/cthonic_gold_from_smelting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/cursed_grit_from_block.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/cut_runewood_planks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/cut_soulwood_planks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cut_tainted_rock.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cut_tainted_rock_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cut_twisted_rock.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/cut_twisted_rock_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/demiboy_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/demigirl_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/dreaded_weave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/enby_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/encyclopedia_arcana.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/gay_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/genderfluid_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/genderqueer_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/gilded_belt.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/gilded_ring.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/grim_talc_from_block.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/hallowed_gold_from_block.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/hallowed_gold_from_nuggets.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/hallowed_gold_nugget.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/hex_ash_from_block.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/holy_sap_from_smelting.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/holy_sap_from_smoking.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/holy_sapball.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/intersex_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{tools => misc}/lead_from_sapballs.json (75%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/lesbian_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{brewing => misc}/magma_cream_from_sapballs.json (75%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/mechanical_weave_v1.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/mechanical_weave_v2.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/natural_quartz_from_blasting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/natural_quartz_from_deepslate_blasting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/natural_quartz_from_deepslate_smelting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/natural_quartz_from_smelting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{building_blocks => misc}/netherrack_from_blazing_quartz.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/ornate_necklace.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/ornate_ring.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/pan_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/plural_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_tainted_rock.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_tainted_rock_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_tainted_rock_slab_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_tainted_rock_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_tainted_rock_stairs_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_tainted_rock_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_twisted_rock.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_twisted_rock_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_twisted_rock_slab_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_twisted_rock_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_twisted_rock_stairs_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/polished_twisted_rock_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/poly_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/pride_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/raw_soulstone_block.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/raw_soulstone_from_block.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/rotting_essence_from_block.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood.json (75%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_beam.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_boat.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_door.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_item_pedestal.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_item_stand.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_panel.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_panel_slab.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_panel_stairs.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_planks.json (74%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_planks_button.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_planks_fence.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_planks_fence_gate.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_planks_pressure_plate.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_planks_slab.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_planks_stairs.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_sign.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_tiles.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_tiles_slab.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_tiles_stairs.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_trapdoor.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/runewood_trapdoor_from_solid.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_small_tainted_rock_bricks_slab.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_small_tainted_rock_bricks_stairs.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_small_tainted_rock_bricks_wall.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_small_twisted_rock_bricks_slab.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_small_twisted_rock_bricks_stairs.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_small_twisted_rock_bricks_wall.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_tainted_rock_bricks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_tainted_rock_bricks_slab.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_tainted_rock_bricks_stairs.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_tainted_rock_bricks_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_tainted_rock_tiles.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_tainted_rock_tiles_slab.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_tainted_rock_tiles_stairs.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_tainted_rock_tiles_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_twisted_rock_bricks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_twisted_rock_bricks_slab.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_twisted_rock_bricks_stairs.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_twisted_rock_bricks_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_twisted_rock_tiles.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_twisted_rock_tiles_slab.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_twisted_rock_tiles_stairs.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/runic_twisted_rock_tiles_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{decorations => misc}/skeleton_skull_from_grim_talc.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_slab_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_stairs_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_stonecutting_alt.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_stonecutting_from_bricks.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_stonecutting_from_tiles.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_tainted_rock_bricks_wall_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_slab_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_stairs_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_stonecutting_alt.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_stonecutting_from_bricks.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_stonecutting_from_tiles.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/small_twisted_rock_bricks_wall_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_tainted_rock.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_tainted_rock_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_tainted_rock_slab_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_tainted_rock_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_tainted_rock_stairs_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_tainted_rock_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_twisted_rock.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_twisted_rock_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_twisted_rock_slab_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_twisted_rock_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_twisted_rock_stairs_stonecutting.json (79%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/smooth_twisted_rock_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/solid_runewood_trapdoor.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/solid_soulwood_trapdoor.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soul_stained_steel_axe.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soul_stained_steel_from_block.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soul_stained_steel_from_nuggets.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soul_stained_steel_hoe.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soul_stained_steel_nugget.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soul_stained_steel_pickaxe.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soul_stained_steel_shovel.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soul_stained_steel_sword.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soulstone_from_blasting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soulstone_from_block.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soulstone_from_crushed_blasting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soulstone_from_crushed_smelting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soulstone_from_deepslate_blasting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soulstone_from_deepslate_smelting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soulstone_from_raw_blasting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soulstone_from_raw_smelting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/soulstone_from_smelting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood.json (75%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_beam.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_boat.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_door.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_item_pedestal.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_item_stand.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_panel.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_panel_slab.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_panel_stairs.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_planks.json (74%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_planks_button.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_planks_fence.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_planks_fence_gate.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_planks_pressure_plate.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_planks_slab.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_planks_stairs.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_sign.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_tiles.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_tiles_slab.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_tiles_stairs.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_trapdoor.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/soulwood_trapdoor_from_solid.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/spectral_lens.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/spectral_optic.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/spirit_altar.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/spirit_jar.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_basis_of_magic => misc}/spirit_pouch.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{redstone => misc}/sticky_piston_from_sapballs.json (75%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/stripped_runewood.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/stripped_soulwood.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_brick_wall_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_bricks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_bricks_from_small_bricks.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_bricks_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_bricks_slab_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_bricks_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_bricks_stairs_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_bricks_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_bricks_stonecutting_from_polished.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_bricks_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_button.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_column.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_column_cap.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_column_cap_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_column_from_cap.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_column_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_item_pedestal.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_item_stand.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_pressure_plate.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_slab.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_slab_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_stairs_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles_slab_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles_stairs_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles_stonecutting_from_bricks.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles_stonecutting_from_polished.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_tiles_wall_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_wall.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/tainted_rock_wall_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/trans_prideweave.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_brick_wall_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_bricks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_bricks_from_small_bricks.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_bricks_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_bricks_slab_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_bricks_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_bricks_stairs_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_bricks_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_bricks_stonecutting_from_polished.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_bricks_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_button.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_column.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_column_cap.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_column_cap_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_column_from_cap.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_column_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_item_pedestal.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_item_stand.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_pressure_plate.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_slab.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_slab_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_stairs_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles_slab_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles_stairs_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles_stonecutting_from_bricks.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles_stonecutting_from_polished.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles_wall.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_tiles_wall_stonecutting.json (78%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_wall.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_arcane_construct => misc}/twisted_rock_wall_stonecutting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/unholy_sap_from_smelting.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/unholy_sap_from_smoking.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/unholy_sapball.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/vertical_runewood_planks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/vertical_runewood_planks_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/vertical_runewood_planks_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/vertical_soulwood_planks.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/vertical_soulwood_planks_slab.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_natural_wonders => misc}/vertical_soulwood_planks_stairs.json (77%) rename src/generated/resources/data/malum/advancements/recipes/{malum_cosmetics => misc}/weavers_workbench.json (76%) rename src/generated/resources/data/malum/advancements/recipes/{decorations => misc}/zombie_head_from_grim_talc.json (77%) create mode 100644 src/generated/resources/data/malum/forge/biome_modifier/brilliant_ore.json create mode 100644 src/generated/resources/data/malum/forge/biome_modifier/natural_quartz_ore.json create mode 100644 src/generated/resources/data/malum/forge/biome_modifier/soulstone_ore.json delete mode 100644 src/generated/resources/data/malum/tags/blocks/blighted_blocks.json delete mode 100644 src/generated/resources/data/malum/tags/blocks/blighted_plants.json delete mode 100644 src/generated/resources/data/malum/tags/blocks/endless_flame.json delete mode 100644 src/generated/resources/data/malum/tags/blocks/greater_aerial_whitelist.json delete mode 100644 src/generated/resources/data/malum/tags/blocks/rite_immune.json delete mode 100644 src/generated/resources/data/malum/tags/blocks/runewood_logs.json delete mode 100644 src/generated/resources/data/malum/tags/blocks/soulwood_logs.json delete mode 100644 src/generated/resources/data/malum/tags/blocks/tainted_rock.json delete mode 100644 src/generated/resources/data/malum/tags/blocks/twisted_rock.json delete mode 100644 src/generated/resources/data/malum/tags/items/gross_foods.json delete mode 100644 src/generated/resources/data/malum/tags/items/metal_nodes.json delete mode 100644 src/generated/resources/data/malum/tags/items/prospectors_treasure.json delete mode 100644 src/generated/resources/data/malum/tags/items/runewood_logs.json delete mode 100644 src/generated/resources/data/malum/tags/items/sapballs.json delete mode 100644 src/generated/resources/data/malum/tags/items/scythe.json delete mode 100644 src/generated/resources/data/malum/tags/items/soul_hunter_weapon.json delete mode 100644 src/generated/resources/data/malum/tags/items/soulwood_logs.json create mode 100644 src/generated/resources/data/malum/tags/worldgen/biome/has_blazing_quartz.json create mode 100644 src/generated/resources/data/malum/tags/worldgen/biome/has_brilliant.json create mode 100644 src/generated/resources/data/malum/tags/worldgen/biome/has_soulstone.json rename src/{main/resources/data/malum/worldgen/configured_feature/ore_brilliant.json => generated/resources/data/malum/worldgen/configured_feature/brilliant_ore.json} (97%) rename src/{main/resources/data/malum/worldgen/configured_feature/ore_soulstone_surface.json => generated/resources/data/malum/worldgen/configured_feature/natural_quartz_ore.json} (82%) rename src/{main/resources/data/malum/worldgen/configured_feature/ore_soulstone_underground.json => generated/resources/data/malum/worldgen/configured_feature/soulstone_ore.json} (97%) rename src/{main/resources/data/malum/worldgen/placed_feature/ore_blazing_quartz.json => generated/resources/data/malum/worldgen/placed_feature/ore_brilliant.json} (71%) create mode 100644 src/generated/resources/data/malum/worldgen/placed_feature/ore_natural_quartz.json create mode 100644 src/generated/resources/data/malum/worldgen/placed_feature/ore_soulstone.json rename src/generated/resources/data/minecraft/advancements/recipes/{malum_basis_of_magic => }/ether_torch_alternative.json (77%) rename src/generated/resources/data/minecraft/advancements/recipes/{malum_basis_of_magic => }/iridescent_ether_torch_alternative.json (77%) rename src/generated/resources/data/minecraft/advancements/recipes/{malum_basis_of_magic => }/tainted_ether_brazier.json (76%) rename src/generated/resources/data/minecraft/advancements/recipes/{malum_basis_of_magic => }/tainted_iridescent_ether_brazier.json (77%) rename src/generated/resources/data/minecraft/advancements/recipes/{malum_basis_of_magic => }/twisted_ether_brazier.json (76%) rename src/generated/resources/data/minecraft/advancements/recipes/{malum_basis_of_magic => }/twisted_iridescent_ether_brazier.json (77%) delete mode 100644 src/generated/resources/data/minecraft/recipes/comparator.json delete mode 100644 src/generated/resources/data/minecraft/recipes/daylight_detector.json delete mode 100644 src/generated/resources/data/minecraft/recipes/diorite.json delete mode 100644 src/generated/resources/data/minecraft/recipes/granite.json delete mode 100644 src/generated/resources/data/minecraft/recipes/observer.json delete mode 100644 src/generated/resources/data/minecraft/recipes/quartz_block.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/beacon_base_blocks.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/buttons.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/doors.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/fence_gates.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/fences.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/leaves.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/logs.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/mineable/hoe.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/mineable/shovel.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/planks.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/saplings.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/signs.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/slabs.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/stairs.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/standing_signs.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/trapdoors.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/wall_signs.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/walls.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json delete mode 100644 src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/anvil.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/beds.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/buttons.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/carpets.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/doors.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/fences.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/flowers.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/gold_ores.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/leaves.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/logs.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/logs_that_burn.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/planks.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/sand.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/saplings.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/slabs.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/small_flowers.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/soul_fire_base_blocks.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/stairs.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/stone_bricks.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/tall_flowers.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/trapdoors.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/walls.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/wooden_buttons.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/wooden_doors.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/wooden_fences.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/wooden_slabs.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/wooden_stairs.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json delete mode 100644 src/generated/resources/data/minecraft/tags/items/wool.json create mode 100644 src/main/java/com/sammy/malum/common/worldgen/WeepingWellStructure.java create mode 100644 src/main/java/com/sammy/malum/data/MalumBiomeTags.java create mode 100644 src/main/java/com/sammy/malum/registry/common/block/MalumBlockSetTypes.java create mode 100644 src/main/java/com/sammy/malum/registry/common/worldgen/BiomeTagRegistry.java create mode 100644 src/main/java/com/sammy/malum/registry/common/worldgen/StructureRegistry.java delete mode 100644 src/main/resources/data/malum/worldgen/configured_feature/ore_blazing_quartz.json delete mode 100644 src/main/resources/data/malum/worldgen/configured_feature/ore_natural_quartz.json delete mode 100644 src/main/resources/data/malum/worldgen/placed_feature/ore_brilliant.json delete mode 100644 src/main/resources/data/malum/worldgen/placed_feature/ore_natural_quartz.json delete mode 100644 src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_lower.json delete mode 100644 src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_upper.json diff --git a/.gitignore b/.gitignore index 12f864471..a6b5af566 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ run # Files from Forge MDK forge*changelog.txt +/run-data/logs/ +/src/generated/resources/.cache/ diff --git a/gradle.properties b/gradle.properties index 6c667295a..463337bc9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -35,6 +35,6 @@ modAuthors=Sammy Semicolon # The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list. modDescription=A dark magic mod focused on soul and spirit magic. # Mod Dependency Versions -lodestoneVersion=1.4.20 +lodestoneVersion=1.4.22 jeiVersion=15.2.0.22 -curiosVersion=5.2.0-beta.3+1.20.1 \ No newline at end of file +curiosVersion=5.4.0+1.20.1 \ No newline at end of file diff --git a/lib/lodestone-1.20.1-1.4.21.jar b/lib/lodestone-1.20.1-1.4.22.jar similarity index 86% rename from lib/lodestone-1.20.1-1.4.21.jar rename to lib/lodestone-1.20.1-1.4.22.jar index 3ed24c70247093421d7312007ac61b9900fbcdf9..27c15939afc93afc69c6e6ec77fc85d88a4aee2c 100644 GIT binary patch delta 26311 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 R=USliHyN3vD;~VO{{tHI;z9rb delta 26260 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 provider = event.getLookupProvider(); ExistingFileHelper helper = event.getExistingFileHelper(); - BlockTagsProvider blockTagsProvider = new MalumBlockTags(output, provider, helper); + MalumItemModels itemModelsProvider = new MalumItemModels(output, helper); - MalumItemTags itemTagsProvider = new MalumItemTags(output, provider, blockTagsProvider.contentsGetter(), helper); + MalumBlockStates blockStateProvider = new MalumBlockStates(output, helper, itemModelsProvider); - MalumLang langProvider = new MalumLang(generator); + MalumLang langProvider = new MalumLang(output); MalumBlockLootTables lootTablesProvider = new MalumBlockLootTables(output); MalumRecipes recipeProvider = new MalumRecipes(output); MalumVanillaRecipeReplacements vanillaRecipeReplacementsProvider = new MalumVanillaRecipeReplacements(output); @@ -103,14 +110,16 @@ public static void gatherData(GatherDataEvent event) { MalumSpiritTransmutationRecipes spiritTransmutationRecipesProvider = new MalumSpiritTransmutationRecipes(output); MalumVoidFavorRecipes voidFavorRecipesProvider = new MalumVoidFavorRecipes(output); MalumWorldgenProvider worldgenProvider = new MalumWorldgenProvider(output, provider); + MalumBlockTags blockTagsProvider = new MalumBlockTags(output, provider, helper); + MalumBiomeTags malumBiomeTags = new MalumBiomeTags(output, provider, helper); generator.addProvider(event.includeClient(), blockStateProvider); generator.addProvider(event.includeClient(), itemModelsProvider); generator.addProvider(event.includeClient(), langProvider); - generator.addProvider(event.includeServer(), blockTagsProvider); + //TODO generator.addProvider(event.includeServer(), blockTagsProvider); generator.addProvider(event.includeServer(), lootTablesProvider); - generator.addProvider(event.includeServer(), itemTagsProvider); + //TODO generator.addProvider(event.includeServer(), new MalumItemTags(output, provider, blockTagsProvider.contentsGetter(), helper)); generator.addProvider(event.includeServer(), recipeProvider); generator.addProvider(event.includeServer(), vanillaRecipeReplacementsProvider); @@ -120,6 +129,7 @@ public static void gatherData(GatherDataEvent event) { generator.addProvider(event.includeServer(), voidFavorRecipesProvider); generator.addProvider(event.includeServer(), worldgenProvider); + generator.addProvider(event.includeServer(), malumBiomeTags); } } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/renderer/curio/TokenOfGratitudeRenderer.java b/src/main/java/com/sammy/malum/client/renderer/curio/TokenOfGratitudeRenderer.java index 4351c280a..1db3c8f88 100644 --- a/src/main/java/com/sammy/malum/client/renderer/curio/TokenOfGratitudeRenderer.java +++ b/src/main/java/com/sammy/malum/client/renderer/curio/TokenOfGratitudeRenderer.java @@ -123,7 +123,7 @@ public static void renderScarf(AbstractClientPlayer playerEntity, ResourceLocati ModelRegistry.SCARF.copyFromDefault(humanoidModel); } } - ModelRegistry.SCARF.setupAnim(playerEntity, playerEntity.animationPosition, playerEntity.animationSpeed, playerEntity.tickCount + pticks, netHeadYaw, netHeadPitch); + ModelRegistry.SCARF.setupAnim(playerEntity, playerEntity.walkAnimation.position(), playerEntity.walkAnimation.speed(), playerEntity.tickCount + pticks, netHeadYaw, netHeadPitch); ModelRegistry.SCARF.renderToBuffer(poseStack, vertexconsumer, light, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/client/screen/codex/ArcanaCodexHelper.java b/src/main/java/com/sammy/malum/client/screen/codex/ArcanaCodexHelper.java index 1dd1ab735..64a5a7476 100644 --- a/src/main/java/com/sammy/malum/client/screen/codex/ArcanaCodexHelper.java +++ b/src/main/java/com/sammy/malum/client/screen/codex/ArcanaCodexHelper.java @@ -384,12 +384,12 @@ private static void renderRawText(GuiGraphics guiGraphics, String text, int x, i int g = (int) Mth.lerp(glow, 44, 39); int b = (int) Mth.lerp(glow, 191, 228); - guiGraphics.drawString(font, text, x - 1, y, color(96, 255, 210, 243)); - guiGraphics.drawString(font, text, x + 1, y, color(128, 240, 131, 232)); - guiGraphics.drawString(font, text, x, y - 1, color(128, 255, 183, 236)); - guiGraphics.drawString(font, text, x, y + 1, color(96, 236, 110, 226)); + guiGraphics.drawString(font, text, x - 0.5f, y, color(96, 255, 210, 243), false); + guiGraphics.drawString(font, text, x + 0.5f, y, color(128, 240, 131, 232), false); + guiGraphics.drawString(font, text, x, y - 0.5f, color(128, 255, 183, 236), false); + guiGraphics.drawString(font, text, x, y + 0.5f, color(96, 236, 110, 226), false); - guiGraphics.drawString(font, text, x, y, color(255, r, g, b)); + guiGraphics.drawString(font, text, x, y, color(255, r, g, b), false); } public static float getTextGlow(float offset) { diff --git a/src/main/java/com/sammy/malum/client/screen/container/WeaversWorkbenchContainerScreen.java b/src/main/java/com/sammy/malum/client/screen/container/WeaversWorkbenchContainerScreen.java index 7a7dee42c..e276fda61 100644 --- a/src/main/java/com/sammy/malum/client/screen/container/WeaversWorkbenchContainerScreen.java +++ b/src/main/java/com/sammy/malum/client/screen/container/WeaversWorkbenchContainerScreen.java @@ -8,6 +8,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.screens.inventory.InventoryScreen; +import net.minecraft.client.gui.screens.inventory.SmithingScreen; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; @@ -28,7 +30,7 @@ public class WeaversWorkbenchContainerScreen extends AbstractContainerScreen { - public static final Quaternionf ROTATION = new Quaternionf(0.43633232F, 0.0F, 3.1415927F, 0); + public static final Quaternionf ROTATION = (new Quaternionf()).rotationXYZ(0.43633232F, 0.0F, (float)Math.PI); private static final ResourceLocation TEXTURE = MalumMod.malumPath("textures/gui/weavers_workbench.png"); private final WeaversWorkbenchContainer weaversWorkbenchContainer; @@ -67,7 +69,8 @@ protected void renderBg(GuiGraphics pGuiGraphics, float pPartialTick, int pMouse } cachedOutput = output; - drawEntity(pGuiGraphics.pose(), this.leftPos + 141, this.topPos + 65, 25, ROTATION, null, this.armorStand); + InventoryScreen.renderEntityInInventory(pGuiGraphics, this.leftPos + 141, this.topPos + 65, 25, ROTATION, null, this.armorStand); + //drawEntity(pGuiGraphics.pose(), this.leftPos + 141, this.topPos + 65, 25, ROTATION, null, this.armorStand); } protected void setupArmorStand() { @@ -98,34 +101,5 @@ private void dressUpStand(ItemStack stack) { } } } - - public static void drawEntity(PoseStack matrices, int x, int y, int size, Quaternionf matrixMultiplier, @Nullable Quaternionf rotation, LivingEntity entity) { - PoseStack matrixStack = RenderSystem.getModelViewStack(); - matrixStack.pushPose(); - matrixStack.translate(0.0, 0.0, 1000.0); - RenderSystem.applyModelViewMatrix(); - matrices.pushPose(); - matrices.translate(x, y, -950.0); - matrices.mulPoseMatrix((new Matrix4f()).scaling((float) size, (float) size, (float) (-size))); - matrices.mulPose(matrixMultiplier); - Lighting.setupForEntityInInventory(); - EntityRenderDispatcher entityRenderDispatcher = Minecraft.getInstance().getEntityRenderDispatcher(); - if (rotation != null) { - rotation.conjugate(); - entityRenderDispatcher.overrideCameraOrientation(rotation); - } - - entityRenderDispatcher.setRenderShadow(false); - MultiBufferSource.BufferSource immediate = Minecraft.getInstance().renderBuffers().bufferSource(); - RenderSystem.runAsFancy(() -> { - entityRenderDispatcher.render(entity, 0.0, 0.0, 0.0, 0.0F, 1.0F, matrices, immediate, 15728880); - }); - immediate.endBatch(); - entityRenderDispatcher.setRenderShadow(true); - matrices.popPose(); - Lighting.setupForFlatItems(); - matrixStack.popPose(); - RenderSystem.applyModelViewMatrix(); - } } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlockEntity.java index 77e1f5111..4edeb7b9b 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_altar/SpiritAltarBlockEntity.java @@ -154,7 +154,7 @@ public void load(CompoundTag compound) { int amount = compound.getInt("acceleratorAmount"); for (int i = 0; i < amount; i++) { BlockPos pos = BlockHelper.loadBlockPos(compound, "" + i); - if (level != null && level().getBlockEntity(pos) instanceof IAltarAccelerator accelerator) { + if (level != null && level.getBlockEntity(pos) instanceof IAltarAccelerator accelerator) { acceleratorPositions.add(pos); accelerators.add(accelerator); } @@ -270,7 +270,7 @@ public boolean consume() { requestedItem = recipe.extraItems.get(extras); matches = requestedItem.matches(providedStack); if (matches) { - level().playSound(null, provider.getAccessPointBlockPos(), SoundRegistry.ALTAR_CONSUME.get(), SoundSource.BLOCKS, 1, 0.9f + level().random.nextFloat() * 0.2f); + level.playSound(null, provider.getAccessPointBlockPos(), SoundRegistry.ALTAR_CONSUME.get(), SoundSource.BLOCKS, 1, 0.9f + level.random.nextFloat() * 0.2f); ParticleEffectTypeRegistry.SPIRIT_ALTAR_EATS_ITEM.createPositionedEffect(level, new PositionEffectData(worldPosition), ColorEffectData.fromRecipe(recipe.spirits), SpiritAltarEatItemParticleEffect.createData(provider.getAccessPointBlockPos(), providedStack)); extrasInventory.insertItem(level, providedStack.split(requestedItem.count)); inventoryForAltar.updateData(); @@ -305,8 +305,8 @@ public void craft() { ParticleEffectTypeRegistry.SPIRIT_ALTAR_CRAFTS.createPositionedEffect(level, new PositionEffectData(worldPosition), ColorEffectData.fromRecipe(recipe.spirits)); progress *= 0.75f; extrasInventory.clear(); - level().playSound(null, worldPosition, SoundRegistry.ALTAR_CRAFT.get(), SoundSource.BLOCKS, 1, 0.9f + level().random.nextFloat() * 0.2f); - level().addFreshEntity(new ItemEntity(level, itemPos.x, itemPos.y, itemPos.z, outputStack)); + level.playSound(null, worldPosition, SoundRegistry.ALTAR_CRAFT.get(), SoundSource.BLOCKS, 1, 0.9f + level.random.nextFloat() * 0.2f); + level.addFreshEntity(new ItemEntity(level, itemPos.x, itemPos.y, itemPos.z, outputStack)); init(); recalibrateAccelerators(); BlockHelper.updateAndNotifyState(level, worldPosition); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/IAccelerationTarget.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/IAccelerationTarget.java index ba73498c3..7ae87a71b 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/IAccelerationTarget.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/IAccelerationTarget.java @@ -64,7 +64,7 @@ default void loadAcceleratorData(Level level, CompoundTag compound) { int amount = acceleratorTag.getInt("amount"); for (int i = 0; i < amount; i++) { BlockPos pos = BlockHelper.loadBlockPos(acceleratorTag, "accelerator_" + i + "_"); - if (level != null && level().getBlockEntity(pos) instanceof ICrucibleAccelerator accelerator) { + if (level != null && level.getBlockEntity(pos) instanceof ICrucibleAccelerator accelerator) { getAccelerators().add(accelerator); } else if (level != null) { continue; diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerCoreBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerCoreBlockEntity.java index 656616857..086006406 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerCoreBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCatalyzerCoreBlockEntity.java @@ -131,15 +131,15 @@ public void updateBurnTicks() { public void addParticles(Color color, Color endColor, float alpha, BlockPos targetPos, Vec3 targetItemPos) { if (burnTicks > 0) { Vec3 startPos = getItemPos(this); - float random = level().random.nextFloat() * 0.04f; + float random = level.random.nextFloat() * 0.04f; Vec3 velocity = startPos.subtract(targetItemPos.add(random, random, random)).normalize().scale(-0.08f); WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) .setTransparencyData(GenericParticleData.create(alpha * 5f, 0f).setCoefficient(0.5f).build()) - .setScaleData(GenericParticleData.create(0.15f + level().random.nextFloat() * 0.15f, 0).build()) - .setSpinData(SpinParticleData.create(0.1f + level().random.nextFloat() * 0.05f).setSpinOffset((0.075f * level().getGameTime() % 6.28f)).build()) + .setScaleData(GenericParticleData.create(0.15f + level.random.nextFloat() * 0.15f, 0).build()) + .setSpinData(SpinParticleData.create(0.1f + level.random.nextFloat() * 0.05f).setSpinOffset((0.075f * level.getGameTime() % 6.28f)).build()) .setColorData(ColorParticleData.create(color.brighter(), endColor).setCoefficient(0.75f).build()) - .setLifetime((int) (10 + level().random.nextInt(8) + Math.sin((0.2 * level().getGameTime()) % 6.28f))) + .setLifetime((int) (10 + level.random.nextInt(8) + Math.sin((0.2 * level.getGameTime()) % 6.28f))) .setRandomOffset(0.05) .setMotion(velocity.x, velocity.y, velocity.z) .enableNoClip() @@ -147,21 +147,21 @@ public void addParticles(Color color, Color endColor, float alpha, BlockPos targ WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) .setTransparencyData(GenericParticleData.create(alpha * 3, 0f).build()) - .setScaleData(GenericParticleData.create(0.2f + level().random.nextFloat() * 0.15f, 0).build()) + .setScaleData(GenericParticleData.create(0.2f + level.random.nextFloat() * 0.15f, 0).build()) .setColorData(ColorParticleData.create(color, endColor).build()) .setLifetime(15) .setRandomOffset(0.05) - .setSpinData(SpinParticleData.create(0).setSpinOffset((0.15f * level().getGameTime()) % 6.28f).build()) + .setSpinData(SpinParticleData.create(0).setSpinOffset((0.15f * level.getGameTime()) % 6.28f).build()) .enableNoClip() .repeat(level, startPos.x, startPos.y, startPos.z, 1); WorldParticleBuilder.create(LodestoneParticleRegistry.STAR_PARTICLE) .setTransparencyData(GenericParticleData.create(alpha * 3, 0f).build()) - .setScaleData(GenericParticleData.create(0.45f + level().random.nextFloat() * 0.15f, 0).build()) + .setScaleData(GenericParticleData.create(0.45f + level.random.nextFloat() * 0.15f, 0).build()) .setColorData(ColorParticleData.create(color, endColor).build()) .setLifetime(15) .setRandomOffset(0.05) - .setSpinData(SpinParticleData.create(0).setSpinOffset((0.075f * level().getGameTime()) % 6.28f).build()) + .setSpinData(SpinParticleData.create(0).setSpinOffset((0.075f * level.getGameTime()) % 6.28f).build()) .enableNoClip() .repeat(level, startPos.x, startPos.y, startPos.z, 1); } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlockEntity.java index c86ecfb7f..858946667 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/spirit_crucible/SpiritCrucibleCoreBlockEntity.java @@ -269,8 +269,8 @@ public void tick() { if (queuedCracks > 0) { crackTimer++; if (crackTimer % 7 == 0) { - float pitch = 0.95f + (crackTimer - 8) * 0.015f + level().random.nextFloat() * 0.05f; - level().playSound(null, worldPosition, SoundRegistry.IMPETUS_CRACK.get(), SoundSource.BLOCKS, 0.7f, pitch); + float pitch = 0.95f + (crackTimer - 8) * 0.015f + level.random.nextFloat() * 0.05f; + level.playSound(null, worldPosition, SoundRegistry.IMPETUS_CRACK.get(), SoundSource.BLOCKS, 0.7f, pitch); queuedCracks--; if (queuedCracks == 0) { crackTimer = 0; @@ -347,9 +347,9 @@ public void repair() { inventory.setStackInSlot(0, result); if (repairRecipe.repairMaterial.getItem() instanceof SpiritShardItem spiritShardItem) { - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new AltarConsumeParticlePacket(repairMaterial, List.of(spiritShardItem.type.identifier), providedItemPos.x, providedItemPos.y, providedItemPos.z, itemPos.x, itemPos.y, itemPos.z)); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new AltarConsumeParticlePacket(repairMaterial, List.of(spiritShardItem.type.identifier), providedItemPos.x, providedItemPos.y, providedItemPos.z, itemPos.x, itemPos.y, itemPos.z)); } else { - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new AltarConsumeParticlePacket(repairMaterial, repairRecipe.spirits.stream().map(s -> s.type.identifier).collect(Collectors.toList()), providedItemPos.x, providedItemPos.y, providedItemPos.z, itemPos.x, itemPos.y, itemPos.z)); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new AltarConsumeParticlePacket(repairMaterial, repairRecipe.spirits.stream().map(s -> s.type.identifier).collect(Collectors.toList()), providedItemPos.x, providedItemPos.y, providedItemPos.z, itemPos.x, itemPos.y, itemPos.z)); } repairMaterial.shrink(repairRecipe.repairMaterial.getCount()); @@ -367,9 +367,9 @@ public void repair() { spiritInventory.updateData(); if (!repairRecipe.spirits.isEmpty()) { - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new AltarCraftParticlePacket(repairRecipe.spirits.stream().map(s -> s.type.identifier).collect(Collectors.toList()), itemPos)); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new AltarCraftParticlePacket(repairRecipe.spirits.stream().map(s -> s.type.identifier).collect(Collectors.toList()), itemPos)); } else if (repairRecipe.repairMaterial.getItem() instanceof SpiritShardItem spiritShardItem) { - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new AltarCraftParticlePacket(List.of(spiritShardItem.type.identifier), itemPos)); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new AltarCraftParticlePacket(List.of(spiritShardItem.type.identifier), itemPos)); } repairRecipe = SpiritRepairRecipe.getRecipe(level, damagedItem, repairMaterial, spiritInventory.nonEmptyItemStacks); fetchTablets(level, worldPosition.above()); @@ -393,7 +393,7 @@ public void craft() { } } queuedCracks = durabilityCost; - boolean success = stack.hurt(durabilityCost, level().random, null); + boolean success = stack.hurt(durabilityCost, level.random, null); if (success && stack.getItem() instanceof ImpetusItem impetusItem) { inventory.setStackInSlot(0, impetusItem.getCrackedVariant().getDefaultInstance()); } @@ -408,14 +408,14 @@ public void craft() { } } spiritInventory.updateData(); - level().addFreshEntity(new ItemEntity(level, itemPos.x, itemPos.y, itemPos.z, outputStack)); - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new AltarCraftParticlePacket(focusingRecipe.spirits.stream().map(s -> s.type.identifier).collect(Collectors.toList()), itemPos)); + level.addFreshEntity(new ItemEntity(level, itemPos.x, itemPos.y, itemPos.z, outputStack)); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new AltarCraftParticlePacket(focusingRecipe.spirits.stream().map(s -> s.type.identifier).collect(Collectors.toList()), itemPos)); focusingRecipe = SpiritFocusingRecipe.getRecipe(level, stack, spiritInventory.nonEmptyItemStacks); finishRecipe(); } public void finishRecipe() { - level().playSound(null, worldPosition, SoundRegistry.CRUCIBLE_CRAFT.get(), SoundSource.BLOCKS, 1, 0.75f + level().random.nextFloat() * 0.5f); + level.playSound(null, worldPosition, SoundRegistry.CRUCIBLE_CRAFT.get(), SoundSource.BLOCKS, 1, 0.75f + level.random.nextFloat() * 0.5f); progress = 0; recalibrateAccelerators(level, worldPosition); BlockHelper.updateAndNotifyState(level, worldPosition); @@ -493,8 +493,8 @@ public void passiveParticles() { WorldParticleBuilder.create(LodestoneParticleRegistry.STAR_PARTICLE) .setTransparencyData(GenericParticleData.create(0.24f / colors.size(), 0f).build()) - .setScaleData(GenericParticleData.create(0.45f + level().random.nextFloat() * 0.15f, 0).build()) - .setSpinData(SpinParticleData.create(0).setSpinOffset((0.075f * level().getGameTime()) % 6.28f).build()) + .setScaleData(GenericParticleData.create(0.45f + level.random.nextFloat() * 0.15f, 0).build()) + .setSpinData(SpinParticleData.create(0).setSpinOffset((0.075f * level.getGameTime()) % 6.28f).build()) .setColorData(ColorParticleData.create(color, endColor).build()) .setLifetime(15) .setRandomOffset(0.05) @@ -503,9 +503,9 @@ public void passiveParticles() { WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) .setTransparencyData(GenericParticleData.create(0.4f / colors.size(), 0f).setCoefficient(0.5f).build()) - .setScaleData(GenericParticleData.create(0.2f + level().random.nextFloat() * 0.15f, 0).build()) - .setLifetime((int) (10 + level().random.nextInt(8) + Math.sin((0.5 * level().getGameTime()) % 6.28f))) - .setSpinData(SpinParticleData.create(0.1f + level().random.nextFloat() * 0.05f).setSpinOffset((0.075f * level().getGameTime() % 6.28f)).build()) + .setScaleData(GenericParticleData.create(0.2f + level.random.nextFloat() * 0.15f, 0).build()) + .setLifetime((int) (10 + level.random.nextInt(8) + Math.sin((0.5 * level.getGameTime()) % 6.28f))) + .setSpinData(SpinParticleData.create(0.1f + level.random.nextFloat() * 0.05f).setSpinOffset((0.075f * level.getGameTime() % 6.28f)).build()) .setColorData(ColorParticleData.create(color.brighter(), endColor).setCoefficient(0.75f).build()) .setRandomOffset(0.05) .setMotion(velocity.x, velocity.y, velocity.z) @@ -555,8 +555,8 @@ public void focusingParticles(Vec3 itemPos) { WorldParticleBuilder.create(LodestoneParticleRegistry.WISP_PARTICLE) .setTransparencyData(GenericParticleData.create(0.12f / spiritInventory.nonEmptyItemAmount, 0f).build()) - .setSpinData(SpinParticleData.create(0).setSpinOffset((0.075f * level().getGameTime() % 6.28f)).build()) - .setScaleData(GenericParticleData.create(0.2f + level().random.nextFloat() * 0.1f, 0).build()) + .setSpinData(SpinParticleData.create(0).setSpinOffset((0.075f * level.getGameTime() % 6.28f)).build()) + .setScaleData(GenericParticleData.create(0.2f + level.random.nextFloat() * 0.1f, 0).build()) .setColorData(ColorParticleData.create(color, endColor).build()) .setLifetime(25) .setRandomOffset(0.05) @@ -571,7 +571,7 @@ public void focusingParticles(Vec3 itemPos) { public void starParticles(Vec3 itemPos, Color color, Color endColor) { WorldParticleBuilder.create(LodestoneParticleRegistry.STAR_PARTICLE) .setTransparencyData(GenericParticleData.create(0.07f / spiritInventory.nonEmptyItemAmount, 0.16f / spiritInventory.nonEmptyItemAmount, 0f).setEasing(Easing.SINE_IN, Easing.SINE_OUT).build()) - .setScaleData(GenericParticleData.create(0.2f, 0.45f + level().random.nextFloat() * 0.1f, 0).setEasing(Easing.QUINTIC_IN, Easing.CUBIC_IN_OUT).build()) + .setScaleData(GenericParticleData.create(0.2f, 0.45f + level.random.nextFloat() * 0.1f, 0).setEasing(Easing.QUINTIC_IN, Easing.CUBIC_IN_OUT).build()) .setSpinData(SpinParticleData.create(0, 0.2f, 0).setEasing(Easing.CUBIC_IN, Easing.EXPO_IN).build()) .setColorData(ColorParticleData.create(color, endColor).setEasing(Easing.BOUNCE_IN_OUT).setCoefficient(0.5f).build()) .setLifetime(25) diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/tablet/ITabletTracker.java b/src/main/java/com/sammy/malum/common/block/curiosities/tablet/ITabletTracker.java index 2ad260854..c752fb65c 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/tablet/ITabletTracker.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/tablet/ITabletTracker.java @@ -68,7 +68,7 @@ default void loadTwistedTabletData(Level level, CompoundTag compound) { int amount = twistedTabletTag.getInt("amount"); for (int i = 0; i < amount; i++) { BlockPos pos = BlockHelper.loadBlockPos(twistedTabletTag, "tablet_" + i); - if (level != null && level().getBlockEntity(pos) instanceof TwistedTabletBlockEntity tabletBlockEntity) { + if (level != null && level.getBlockEntity(pos) instanceof TwistedTabletBlockEntity tabletBlockEntity) { getTabletPositions().add(pos); getTablets().add(tabletBlockEntity); } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/tablet/TwistedTabletBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/tablet/TwistedTabletBlockEntity.java index b2cf1c731..2bf155cad 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/tablet/TwistedTabletBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/tablet/TwistedTabletBlockEntity.java @@ -17,7 +17,7 @@ public TwistedTabletBlockEntity(BlockPos pos, BlockState state) { @Override public Vec3 getItemOffset(float partialTicks) { Direction direction = getBlockState().getValue(BlockStateProperties.FACING); - float gameTime = level().getGameTime() + partialTicks; + float gameTime = level.getGameTime() + partialTicks; float xOffset = direction.getStepX() * 0.25f; float yOffset = direction.getStepY() * 0.4f + (inventory.getStackInSlot(0).getItem() instanceof SpiritShardItem ? (float) Math.sin((gameTime % 360) / 20f) * 0.05f : 0); float zOffset = direction.getStepY() * 0.25f; diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlockEntity.java index f418377e0..910e0ff55 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemBaseBlockEntity.java @@ -101,8 +101,8 @@ public void onBreak(@Nullable Player player) { } }); if (height > 1) { - level().playSound(null, worldPosition, SoundRegistry.TOTEM_CHARGE.get(), SoundSource.BLOCKS, 1, 0.5f); - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new SpiritRiteActivationEffectPacket(spirits.stream().map(s -> s.identifier).toList(), worldPosition.above())); + level.playSound(null, worldPosition, SoundRegistry.TOTEM_CHARGE.get(), SoundSource.BLOCKS, 1, 0.5f); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new SpiritRiteActivationEffectPacket(spirits.stream().map(s -> s.identifier).toList(), worldPosition.above())); } } } @@ -205,8 +205,8 @@ public void addPole(TotemPoleBlockEntity pole) { } public void completeRite(MalumRiteType rite) { - level().playSound(null, worldPosition, SoundRegistry.TOTEM_ACTIVATED.get(), SoundSource.BLOCKS, 1, 0.75f + height * 0.1f); - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new SpiritRiteActivationEffectPacket(spirits.stream().map(s -> s.identifier).collect(Collectors.toCollection(ArrayList::new)), worldPosition.above())); + level.playSound(null, worldPosition, SoundRegistry.TOTEM_ACTIVATED.get(), SoundSource.BLOCKS, 1, 0.75f + height * 0.1f); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new SpiritRiteActivationEffectPacket(spirits.stream().map(s -> s.identifier).collect(Collectors.toCollection(ArrayList::new)), worldPosition.above())); poles.forEach(p -> { if (level.getBlockEntity(p) instanceof TotemPoleBlockEntity pole) { pole.riteComplete(); @@ -247,8 +247,8 @@ public void startRite() { public void endRite() { if (height > 1) { - level().playSound(null, worldPosition, SoundRegistry.TOTEM_CANCELLED.get(), SoundSource.BLOCKS, 1, 1); - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new SpiritRiteActivationEffectPacket(spirits.stream().map(s -> s.identifier).collect(Collectors.toCollection(ArrayList::new)), worldPosition.above())); + level.playSound(null, worldPosition, SoundRegistry.TOTEM_CANCELLED.get(), SoundSource.BLOCKS, 1, 1); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new SpiritRiteActivationEffectPacket(spirits.stream().map(s -> s.identifier).collect(Collectors.toCollection(ArrayList::new)), worldPosition.above())); } resetRite(); } diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java index 39dc0d8ea..571ccb412 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/totem/TotemPoleBlockEntity.java @@ -77,11 +77,11 @@ public InteractionResult onUse(Player player, InteractionHand hand) { } haunted = true; desiredColor = 20; - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); - level().playSound(null, worldPosition, SoundRegistry.TOTEM_ENGRAVE.get(), SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); - level().playSound(null, worldPosition, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1, 1); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); + level.playSound(null, worldPosition, SoundRegistry.TOTEM_ENGRAVE.get(), SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); + level.playSound(null, worldPosition, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1, 1); if (corrupted) { - level().playSound(null, worldPosition, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); + level.playSound(null, worldPosition, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); } BlockHelper.updateState(level, worldPosition); return InteractionResult.SUCCESS; @@ -93,10 +93,10 @@ public InteractionResult onUse(Player player, InteractionHand hand) { } desiredColor = 0; haunted = false; - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); - level().playSound(null, worldPosition, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1, 1); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); + level.playSound(null, worldPosition, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1, 1); if (corrupted) { - level().playSound(null, worldPosition, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); + level.playSound(null, worldPosition, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); } BlockHelper.updateState(level, worldPosition); return InteractionResult.SUCCESS; @@ -105,11 +105,11 @@ public InteractionResult onUse(Player player, InteractionHand hand) { if (level.isClientSide) { return InteractionResult.SUCCESS; } - level().setBlockAndUpdate(worldPosition, logBlock.defaultBlockState()); - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); - level().playSound(null, worldPosition, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1, 1); + level.setBlockAndUpdate(worldPosition, logBlock.defaultBlockState()); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); + level.playSound(null, worldPosition, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1, 1); if (corrupted) { - level().playSound(null, worldPosition, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); + level.playSound(null, worldPosition, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); } onBreak(null); return InteractionResult.SUCCESS; @@ -178,7 +178,7 @@ public void tick() { public Set getFilters() { Set standBlockEntities = Sets.newHashSet(); for (Direction value : Direction.values()) { - BlockEntity blockEntity = level().getBlockEntity(worldPosition.relative(value)); + BlockEntity blockEntity = level.getBlockEntity(worldPosition.relative(value)); if (blockEntity instanceof ItemStandBlockEntity standBlockEntity) { standBlockEntities.add(standBlockEntity); } @@ -187,17 +187,17 @@ public Set getFilters() { } public void create(MalumSpiritType type) { - level().playSound(null, worldPosition, SoundRegistry.TOTEM_ENGRAVE.get(), SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); - level().playSound(null, worldPosition, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); + level.playSound(null, worldPosition, SoundRegistry.TOTEM_ENGRAVE.get(), SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); + level.playSound(null, worldPosition, SoundEvents.AXE_STRIP, SoundSource.BLOCKS, 1, Mth.nextFloat(level.random, 0.9f, 1.1f)); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); this.type = type; this.currentColor = 10; BlockHelper.updateState(level, worldPosition); } public void riteStarting(TotemBaseBlockEntity totemBase, int height) { - level().playSound(null, worldPosition, SoundRegistry.TOTEM_CHARGE.get(), SoundSource.BLOCKS, 1, 0.9f + 0.2f * height); - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); + level.playSound(null, worldPosition, SoundRegistry.TOTEM_CHARGE.get(), SoundSource.BLOCKS, 1, 0.9f + 0.2f * height); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(worldPosition)), new TotemPoleActivationEffectPacket(type.getPrimaryColor(), worldPosition)); this.desiredColor = 10; this.baseLevel = worldPosition.getY() - height; this.totemBase = totemBase; @@ -235,7 +235,7 @@ public void filterParticles(ItemStandBlockEntity itemStandBlockEntity) { Vec3 itemPos = itemStandBlockEntity.getItemPos(); WorldParticleBuilder.create(LodestoneParticleRegistry.STAR_PARTICLE) .setTransparencyData(GenericParticleData.create(0.04f, 0.1f, 0f).build()) - .setScaleData(GenericParticleData.create(0.5f, 1f + level().random.nextFloat() * 0.1f, 0).setEasing(Easing.QUINTIC_IN, Easing.CUBIC_IN_OUT).build()) + .setScaleData(GenericParticleData.create(0.5f, 1f + level.random.nextFloat() * 0.1f, 0).setEasing(Easing.QUINTIC_IN, Easing.CUBIC_IN_OUT).build()) .setSpinData(SpinParticleData.create(0, 0.2f, 0).setSpinOffset((level.getGameTime() * 0.02f) % 360).setEasing(Easing.CUBIC_IN, Easing.EXPO_IN).build()) .setColorData(ColorParticleData.create(type.getPrimaryColor(), type.getSecondaryColor()).setEasing(Easing.BOUNCE_IN_OUT).setCoefficient(0.5f).build()) .setLifetime(25) diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchBlockEntity.java index 0396ed21c..b1d9b11ce 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/weavers_workbench/WeaversWorkbenchBlockEntity.java @@ -63,8 +63,8 @@ public LazyOptional getCapability(@NotNull Capability cap) { public void onCraft() { if (!level.isClientSide) { Vec3 itemPos = getItemPos(); - MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(getBlockPos())), new BlightTransformItemParticlePacket(List.of(ARCANE_SPIRIT.identifier), itemPos)); - level().playSound(null, getBlockPos(), SoundRegistry.ALTERATION_PLINTH_ALTERS.get(), SoundSource.BLOCKS, 1, 0.9f + level().random.nextFloat() * 0.25f); + MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(getBlockPos())), new BlightTransformItemParticlePacket(List.of(ARCANE_SPIRIT.identifier), itemPos)); + level.playSound(null, getBlockPos(), SoundRegistry.ALTERATION_PLINTH_ALTERS.get(), SoundSource.BLOCKS, 1, 0.9f + level.random.nextFloat() * 0.25f); } itemHandler.getStackInSlot(0).shrink(1); itemHandler.getStackInSlot(1).shrink(1); diff --git a/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/VoidConduitBlockEntity.java b/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/VoidConduitBlockEntity.java index e6f88161a..882faa528 100644 --- a/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/VoidConduitBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/curiosities/weeping_well/VoidConduitBlockEntity.java @@ -81,10 +81,10 @@ public void tick() { super.tick(); if (level instanceof ServerLevel serverLevel) { if (serverLevel.getGameTime() % 100L == 0) { - level().playSound(null, worldPosition, SoundRegistry.UNCANNY_VALLEY.get(), SoundSource.HOSTILE, 1f, Mth.nextFloat(level.getRandom(), 0.55f, 1.75f)); + level.playSound(null, worldPosition, SoundRegistry.UNCANNY_VALLEY.get(), SoundSource.HOSTILE, 1f, Mth.nextFloat(level.getRandom(), 0.55f, 1.75f)); } if (serverLevel.getGameTime() % 20L == 0) { - level().playSound(null, worldPosition, SoundRegistry.VOID_HEARTBEAT.get(), SoundSource.HOSTILE, 1.5f, Mth.nextFloat(level.getRandom(), 0.95f, 1.15f)); + level.playSound(null, worldPosition, SoundRegistry.VOID_HEARTBEAT.get(), SoundSource.HOSTILE, 1.5f, Mth.nextFloat(level.getRandom(), 0.95f, 1.15f)); } if (serverLevel.getGameTime() % 40L == 0) { List items = serverLevel.getEntitiesOfClass( @@ -110,8 +110,8 @@ public void tick() { if (stack.getItem().equals(ItemRegistry.BLIGHTED_GUNK.get())) { resultingProgress = 72 + streak / 4; streak++; - level().playSound(null, worldPosition, SoundRegistry.HUNGRY_BELT_FEEDS.get(), SoundSource.PLAYERS, 0.7f, 0.6f + level().random.nextFloat() * 0.3f + streak * 0.05f); - level().playSound(null, worldPosition, SoundEvents.GENERIC_EAT, SoundSource.PLAYERS, 0.7f, 0.6f + level().random.nextFloat() * 0.2f + streak * 0.05f); + level.playSound(null, worldPosition, SoundRegistry.HUNGRY_BELT_FEEDS.get(), SoundSource.PLAYERS, 0.7f, 0.6f + level.random.nextFloat() * 0.3f + streak * 0.05f); + level.playSound(null, worldPosition, SoundEvents.GENERIC_EAT, SoundSource.PLAYERS, 0.7f, 0.6f + level.random.nextFloat() * 0.2f + streak * 0.05f); } else { FavorOfTheVoidRecipe recipe = FavorOfTheVoidRecipe.getRecipe(level, stack); float pitch = Mth.nextFloat(level.getRandom(), 0.85f, 1.35f) + streak * 0.1f; @@ -124,15 +124,15 @@ public void tick() { outputStack.setTag(recipe.output.getTag()); ItemEntity entity = new ItemEntity(level, worldPosition.getX() + 0.5f, worldPosition.getY() + 0.5f, worldPosition.getZ() + 0.5f, outputStack); entity.setDeltaMovement(0, 0.65f, 0.15f); - level().addFreshEntity(entity); + level.addFreshEntity(entity); amount -= count; } - level().playSound(null, worldPosition, SoundRegistry.VOID_TRANSMUTATION.get(), SoundSource.HOSTILE, 2f, pitch); + level.playSound(null, worldPosition, SoundRegistry.VOID_TRANSMUTATION.get(), SoundSource.HOSTILE, 2f, pitch); } else { ItemEntity entity = new ItemEntity(level, worldPosition.getX() + 0.5f, worldPosition.getY() + 0.5f, worldPosition.getZ() + 0.5f, stack); entity.setDeltaMovement(0, 0.65f, 0.15f); - level().addFreshEntity(entity); - level().playSound(null, worldPosition, SoundRegistry.VOID_REJECTION.get(), SoundSource.HOSTILE, 2f, pitch); + level.addFreshEntity(entity); + level.playSound(null, worldPosition, SoundRegistry.VOID_REJECTION.get(), SoundSource.HOSTILE, 2f, pitch); } } progress = resultingProgress; @@ -164,7 +164,7 @@ public static void spawnParticles(Level level, BlockPos blockPos) { .setSpinData(SpinParticleData.create(0.1f, 0.4f, 0).setEasing(Easing.SINE_IN, Easing.SINE_OUT).build()) .setScaleData(GenericParticleData.create(0f, 0.9f, 0.5f).setEasing(Easing.SINE_IN, Easing.SINE_OUT).build()) .setColorData(ColorParticleData.create(color, endColor).setCoefficient(0.5f).build()) - .addMotion(0, level().random.nextFloat() * 0.01f, 0) + .addMotion(0, level.random.nextFloat() * 0.01f, 0) .setRandomOffset(3f, 0.02f) .enableNoClip() .setDiscardFunction(SimpleParticleOptions.ParticleDiscardFunctionType.ENDING_CURVE_INVISIBLE) diff --git a/src/main/java/com/sammy/malum/common/block/ether/EtherBlockEntity.java b/src/main/java/com/sammy/malum/common/block/ether/EtherBlockEntity.java index 4501e1814..d990a9949 100644 --- a/src/main/java/com/sammy/malum/common/block/ether/EtherBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/ether/EtherBlockEntity.java @@ -113,9 +113,9 @@ public void tick() { double x = worldPosition.getX() + 0.5; double y = worldPosition.getY() + 0.6; double z = worldPosition.getZ() + 0.5; - int lifeTime = 14 + level().random.nextInt(4); - float scale = 0.17f + level().random.nextFloat() * 0.03f; - float velocity = 0.04f + level().random.nextFloat() * 0.02f; + int lifeTime = 14 + level.random.nextInt(4); + float scale = 0.17f + level.random.nextFloat() * 0.03f; + float velocity = 0.04f + level.random.nextFloat() * 0.02f; if (block instanceof EtherWallTorchBlock) { Direction direction = getBlockState().getValue(WallTorchBlock.FACING); diff --git a/src/main/java/com/sammy/malum/common/block/ether/EtherWallTorchBlock.java b/src/main/java/com/sammy/malum/common/block/ether/EtherWallTorchBlock.java index 57057de24..c071cca73 100644 --- a/src/main/java/com/sammy/malum/common/block/ether/EtherWallTorchBlock.java +++ b/src/main/java/com/sammy/malum/common/block/ether/EtherWallTorchBlock.java @@ -56,7 +56,7 @@ public static VoxelShape getShapeForState(BlockState state) { public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { Direction direction = state.getValue(HORIZONTAL_FACING); BlockPos blockpos = pos.relative(direction.getOpposite()); - BlockState blockstate = level().getBlockState(blockpos); + BlockState blockstate = level.getBlockState(blockpos); return blockstate.isFaceSturdy(level, blockpos, direction); } diff --git a/src/main/java/com/sammy/malum/common/block/nature/MalumLeavesBlock.java b/src/main/java/com/sammy/malum/common/block/nature/MalumLeavesBlock.java index 1c2d835aa..3bda57a1d 100644 --- a/src/main/java/com/sammy/malum/common/block/nature/MalumLeavesBlock.java +++ b/src/main/java/com/sammy/malum/common/block/nature/MalumLeavesBlock.java @@ -34,7 +34,7 @@ public MalumLeavesBlock(Properties properties, Color maxColor, Color minColor) { @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { - builder.add(DISTANCE, PERSISTENT, COLOR); + builder.add(DISTANCE, PERSISTENT, COLOR, WATERLOGGED); } public BlockState getStateForPlacement(BlockPlaceContext context) { @@ -44,7 +44,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) { @Override public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) { if (player.getItemInHand(handIn).getItem().equals(ItemRegistry.INFERNAL_SPIRIT.get())) { - level().setBlockAndUpdate(pos, state.setValue(COLOR, (state.getValue(COLOR) + 1) % 5)); + level.setBlockAndUpdate(pos, state.setValue(COLOR, (state.getValue(COLOR) + 1) % 5)); player.swing(handIn); player.playSound(SoundEvents.BLAZE_SHOOT, 1F, 1.5f + RANDOM.nextFloat() * 0.5f); return InteractionResult.SUCCESS; diff --git a/src/main/java/com/sammy/malum/common/block/nature/MalumLogBLock.java b/src/main/java/com/sammy/malum/common/block/nature/MalumLogBLock.java index 54affc170..c75ed960e 100644 --- a/src/main/java/com/sammy/malum/common/block/nature/MalumLogBLock.java +++ b/src/main/java/com/sammy/malum/common/block/nature/MalumLogBLock.java @@ -43,14 +43,14 @@ public InteractionResult use(BlockState state, Level level, BlockPos pos, Player } public boolean createTotemPole(Level level, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit, ItemStack stack, SpiritShardItem spirit) { - level().setBlockAndUpdate(pos, spirit.type.getTotemPoleBlockState(isCorrupt, hit)); + level.setBlockAndUpdate(pos, spirit.type.getTotemPoleBlockState(isCorrupt, hit)); if (level.getBlockEntity(pos) instanceof TotemPoleBlockEntity blockEntity) { blockEntity.create(spirit.type); } if (!player.isCreative()) { stack.shrink(1); } - level().levelEvent(2001, pos, Block.getId(level.getBlockState(pos))); + level.levelEvent(2001, pos, Block.getId(level.getBlockState(pos))); player.swing(handIn, true); return true; } diff --git a/src/main/java/com/sammy/malum/common/block/nature/MalumSaplingBlock.java b/src/main/java/com/sammy/malum/common/block/nature/MalumSaplingBlock.java index d3b63c123..f374b1ef0 100644 --- a/src/main/java/com/sammy/malum/common/block/nature/MalumSaplingBlock.java +++ b/src/main/java/com/sammy/malum/common/block/nature/MalumSaplingBlock.java @@ -1,14 +1,17 @@ package com.sammy.malum.common.block.nature; import com.sammy.malum.registry.common.block.BlockTagRegistry; +import com.sammy.malum.registry.common.worldgen.ConfiguredFeatureRegistry; import com.sammy.malum.registry.common.worldgen.FeatureRegistry; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.SaplingBlock; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraftforge.event.ForgeEventFactory; @@ -38,9 +41,10 @@ public void advanceTree(ServerLevel level, BlockPos pos, BlockState state, Rando if (state.getValue(STAGE) == 0) { level.setBlock(pos, state.cycle(STAGE), 4); } else { - if (!ForgeEventFactory.blockGrowFeature(level, rand, pos, Holder.direct(FeatureRegistry.ConfiguredFeatures.RUNEWOOD_TREE_FEATURE.get())).getResult().equals(Event.Result.DENY)) { - return; - } + // Holder> holder = level.registryAccess().registryOrThrow(Registries.CONFIGURED_FEATURE).getHolder(ConfiguredFeatureRegistry.RUNEWOOD_TREE_CONFIGURED_FEATURE).orElse(null); + // if (!ForgeEventFactory.blockGrowFeature(level, rand, pos, holder).getResult().equals(Event.Result.DENY)) { + // return; + // }TODO tree.get().place(NoneFeatureConfiguration.INSTANCE, level, level.getChunkSource().getGenerator(), rand, pos); } } diff --git a/src/main/java/com/sammy/malum/common/block/nature/SapFilledLogBlock.java b/src/main/java/com/sammy/malum/common/block/nature/SapFilledLogBlock.java index 595e4deeb..da4364aa0 100644 --- a/src/main/java/com/sammy/malum/common/block/nature/SapFilledLogBlock.java +++ b/src/main/java/com/sammy/malum/common/block/nature/SapFilledLogBlock.java @@ -52,7 +52,7 @@ public InteractionResult use(BlockState state, Level level, BlockPos pos, Player } public void collectSap(Level level, BlockPos pos, Player player) { - level().playSound(player, player.getX(), player.getY(), player.getZ(), SoundEvents.BOTTLE_FILL, SoundSource.NEUTRAL, 1.0F, 1.0F); + level.playSound(player, player.getX(), player.getY(), player.getZ(), SoundEvents.BOTTLE_FILL, SoundSource.NEUTRAL, 1.0F, 1.0F); ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(sap.get())); if (level.random.nextBoolean()) { BlockHelper.setBlockStateWithExistingProperties(level, pos, drained.get().defaultBlockState(), 3); diff --git a/src/main/java/com/sammy/malum/common/block/nature/soulwood/SapFilledSoulwoodLogBlock.java b/src/main/java/com/sammy/malum/common/block/nature/soulwood/SapFilledSoulwoodLogBlock.java index 24bfbf126..23165ae49 100644 --- a/src/main/java/com/sammy/malum/common/block/nature/soulwood/SapFilledSoulwoodLogBlock.java +++ b/src/main/java/com/sammy/malum/common/block/nature/soulwood/SapFilledSoulwoodLogBlock.java @@ -19,7 +19,7 @@ public SapFilledSoulwoodLogBlock(Properties properties, Supplier drained, @Override public void collectSap(Level level, BlockPos pos, Player player) { - level().playSound(null, pos, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); + level.playSound(null, pos, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); super.collectSap(level, pos, player); } } diff --git a/src/main/java/com/sammy/malum/common/block/nature/soulwood/SoulwoodLogBlock.java b/src/main/java/com/sammy/malum/common/block/nature/soulwood/SoulwoodLogBlock.java index 7d5e3a305..212a8c49b 100644 --- a/src/main/java/com/sammy/malum/common/block/nature/soulwood/SoulwoodLogBlock.java +++ b/src/main/java/com/sammy/malum/common/block/nature/soulwood/SoulwoodLogBlock.java @@ -40,7 +40,7 @@ public BlockState getToolModifiedState(BlockState state, UseOnContext context, T public boolean createTotemPole(Level level, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit, ItemStack stack, SpiritShardItem spirit) { boolean success = super.createTotemPole(level, pos, player, handIn, hit, stack, spirit); if (success) { - level().playSound(null, pos, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); + level.playSound(null, pos, SoundRegistry.MAJOR_BLIGHT_MOTIF.get(), SoundSource.BLOCKS, 1, 1); } return success; } diff --git a/src/main/java/com/sammy/malum/common/block/storage/pedestal/ItemPedestalBlockEntity.java b/src/main/java/com/sammy/malum/common/block/storage/pedestal/ItemPedestalBlockEntity.java index fd45d59df..eed46c705 100644 --- a/src/main/java/com/sammy/malum/common/block/storage/pedestal/ItemPedestalBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/storage/pedestal/ItemPedestalBlockEntity.java @@ -23,7 +23,7 @@ public ItemPedestalBlockEntity(BlockPos pos, BlockState state) { @Override public Vec3 getItemOffset(float partialTicks) { if (inventory.getStackInSlot(0).getItem() instanceof SpiritShardItem) { - float gameTime = level().getGameTime() + partialTicks; + float gameTime = level.getGameTime() + partialTicks; return PEDESTAL_ITEM_OFFSET.add(0, (float) Math.sin((gameTime % 360) / 20f) * 0.05f, 0); } return PEDESTAL_ITEM_OFFSET; diff --git a/src/main/java/com/sammy/malum/common/block/storage/stand/ItemStandBlockEntity.java b/src/main/java/com/sammy/malum/common/block/storage/stand/ItemStandBlockEntity.java index 710e9536a..cebd11713 100644 --- a/src/main/java/com/sammy/malum/common/block/storage/stand/ItemStandBlockEntity.java +++ b/src/main/java/com/sammy/malum/common/block/storage/stand/ItemStandBlockEntity.java @@ -29,7 +29,7 @@ public ItemStandBlockEntity(BlockPos pos, BlockState state) { @Override public Vec3 getItemOffset(float partialTicks) { Direction direction = getBlockState().getValue(BlockStateProperties.FACING); - float gameTime = level().getGameTime() + partialTicks; + float gameTime = level.getGameTime() + partialTicks; float xOffset = direction.getStepX() * 0.25f; float yOffset = direction.getStepY() * 0.1f + (inventory.getStackInSlot(0).getItem() instanceof SpiritShardItem ? (float) Math.sin((gameTime % 360) / 20f) * 0.05f : 0); float zOffset = direction.getStepZ() * 0.25f; diff --git a/src/main/java/com/sammy/malum/common/block/the_device/TheDevice.java b/src/main/java/com/sammy/malum/common/block/the_device/TheDevice.java index ceca7747f..0cee8d783 100644 --- a/src/main/java/com/sammy/malum/common/block/the_device/TheDevice.java +++ b/src/main/java/com/sammy/malum/common/block/the_device/TheDevice.java @@ -59,6 +59,6 @@ public void playSound(Level level, BlockPos pos) { if (level instanceof ServerLevel serverLevel) { LodestonePacketRegistry.LODESTONE_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> serverLevel.getChunkAt(pos)), new PositionedScreenshakePacket(40, BlockHelper.fromBlockPos(pos), 4f, 10f, Easing.EXPO_OUT).setIntensity(4f, 0)); } - level().playSound(null, pos, SoundRegistry.THE_DEEP_BECKONS.get(), SoundSource.BLOCKS, 1, 1); + level.playSound(null, pos, SoundRegistry.THE_DEEP_BECKONS.get(), SoundSource.BLOCKS, 1, 1); } } diff --git a/src/main/java/com/sammy/malum/common/block/the_device/TheVessel.java b/src/main/java/com/sammy/malum/common/block/the_device/TheVessel.java index 9d4069186..5d02be85e 100644 --- a/src/main/java/com/sammy/malum/common/block/the_device/TheVessel.java +++ b/src/main/java/com/sammy/malum/common/block/the_device/TheVessel.java @@ -11,6 +11,6 @@ public TheVessel(Properties p_49795_) { } public void playSound(Level level, BlockPos pos) { - level().playSound(null, pos, SoundRegistry.THE_HEAVENS_SIGN.get(), SoundSource.BLOCKS, 1, 1); + level.playSound(null, pos, SoundRegistry.THE_HEAVENS_SIGN.get(), SoundSource.BLOCKS, 1, 1); } } diff --git a/src/main/java/com/sammy/malum/common/enchantment/HauntedEnchantment.java b/src/main/java/com/sammy/malum/common/enchantment/HauntedEnchantment.java index b6a4f7fc2..9e66a07f9 100644 --- a/src/main/java/com/sammy/malum/common/enchantment/HauntedEnchantment.java +++ b/src/main/java/com/sammy/malum/common/enchantment/HauntedEnchantment.java @@ -17,7 +17,7 @@ public void doPostAttack(LivingEntity user, Entity target, int level) { if (target instanceof LivingEntity entity) { if (entity.isAlive()) { entity.invulnerableTime = 0; - entity.hurt(DamageSourceRegistry.causeVoodooDamage(user), level + 1); + entity.hurt(DamageSourceRegistry.create(user.level(), DamageSourceRegistry.VOODOO, user), level + 1); } } super.doPostAttack(user, target, level); diff --git a/src/main/java/com/sammy/malum/common/enchantment/ReboundEnchantment.java b/src/main/java/com/sammy/malum/common/enchantment/ReboundEnchantment.java index 337127954..278338d03 100644 --- a/src/main/java/com/sammy/malum/common/enchantment/ReboundEnchantment.java +++ b/src/main/java/com/sammy/malum/common/enchantment/ReboundEnchantment.java @@ -42,7 +42,7 @@ public static void onRightClickItem(PlayerInteractEvent.RightClickItem event) { entity.setItem(stack); entity.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, (float) (1.5F + player.getAttributeValue(AttributeRegistry.SCYTHE_PROFICIENCY.get()) * 0.125f), 0F); - level().addFreshEntity(entity); + level.addFreshEntity(entity); } player.awardStat(Stats.ITEM_USED.get(stack.getItem())); } diff --git a/src/main/java/com/sammy/malum/common/entity/boomerang/ScytheBoomerangEntity.java b/src/main/java/com/sammy/malum/common/entity/boomerang/ScytheBoomerangEntity.java index b61290931..f7d364755 100644 --- a/src/main/java/com/sammy/malum/common/entity/boomerang/ScytheBoomerangEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/boomerang/ScytheBoomerangEntity.java @@ -126,7 +126,7 @@ protected void onHitEntity(EntityHitResult result) { if (magicDamage > 0) { if (livingentity.isAlive()) { livingentity.invulnerableTime = 0; - livingentity.hurt(DamageSourceRegistry.causeVoodooDamage(scytheOwner), magicDamage); + livingentity.hurt(DamageSourceRegistry.create(level(), DamageSourceRegistry.VOODOO, scytheOwner), magicDamage); } } diff --git a/src/main/java/com/sammy/malum/common/entity/night_terror/NightTerrorSeekerEntity.java b/src/main/java/com/sammy/malum/common/entity/night_terror/NightTerrorSeekerEntity.java index 02e6ae471..85b04a62b 100644 --- a/src/main/java/com/sammy/malum/common/entity/night_terror/NightTerrorSeekerEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/night_terror/NightTerrorSeekerEntity.java @@ -110,12 +110,12 @@ protected void onHitEntity(EntityHitResult result) { if (level().isClientSide) { return; } - DamageSource source = DamageSourceRegistry.causeVoodooDamage(scytheOwner); + DamageSource source = DamageSourceRegistry.create(level(), DamageSourceRegistry.VOODOO, scytheOwner); target.hurt(source, magicDamage); if (age < fadeoutStart) { fadeoutStart += 4; } - target.level().playSound(null, target.getX(), target.getY(), target.getZ(), SoundRegistry.SCYTHE_CUT.get(), target.getSoundSource(), 1.0F, 0.9f + target.level.random.nextFloat() * 0.2f); + target.level().playSound(null, target.getX(), target.getY(), target.getZ(), SoundRegistry.SCYTHE_CUT.get(), target.getSoundSource(), 1.0F, 0.9f + target.level().random.nextFloat() * 0.2f); } super.onHitEntity(result); } diff --git a/src/main/java/com/sammy/malum/common/entity/nitrate/EthericNitrateEntity.java b/src/main/java/com/sammy/malum/common/entity/nitrate/EthericNitrateEntity.java index 0834af522..a8180f589 100644 --- a/src/main/java/com/sammy/malum/common/entity/nitrate/EthericNitrateEntity.java +++ b/src/main/java/com/sammy/malum/common/entity/nitrate/EthericNitrateEntity.java @@ -41,7 +41,7 @@ public EthericNitrateEntity(LivingEntity owner, Level level) { @Override public void onExplode() { - if (level instanceof ServerLevel) { + if (level() instanceof ServerLevel) { MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level().getChunkAt(blockPosition())), new EthericNitrateParticlePacket(getX(), getY(), getZ())); } } diff --git a/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTokenOfGratitude.java b/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTokenOfGratitude.java index 9a93db11c..9bf71c77a 100644 --- a/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTokenOfGratitude.java +++ b/src/main/java/com/sammy/malum/common/item/cosmetic/curios/CurioTokenOfGratitude.java @@ -54,9 +54,9 @@ public void curioTick(SlotContext slotContext, ItemStack stack) { if (slotContext.entity() instanceof Player player) { if (player.getUUID().equals(SAMMY) || player.getUUID().equals(LOFI) || player.getUUID().equals(CREECHURE)) { int interval = player.isCrouching() ? 10 : 4000; - if (player.getLevel().getGameTime() % interval == 0) { + if (player.level().getGameTime() % interval == 0) { SoundEvent soundEvent = player.getRandom().nextInt(8) == 0 ? SoundEvents.CAT_PURREOW : SoundEvents.CAT_PURR; - player.level.playSound(player, player.blockPosition(), soundEvent, SoundSource.PLAYERS, 1, 1); + player.level().playSound(player, player.blockPosition(), soundEvent, SoundSource.PLAYERS, 1, 1); } } } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java index e2aa48de7..cceb96b06 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulHunterArmorItem.java @@ -30,10 +30,10 @@ public SoulHunterArmorItem(ArmorItem.Type slot, Properties builder) { } @Override - public ImmutableMultimap.Builder createExtraAttributes(EquipmentSlot slot) { + public ImmutableMultimap.Builder createExtraAttributes(ArmorItem.Type slot) { ImmutableMultimap.Builder builder = new ImmutableMultimap.Builder<>(); - UUID uuid = ARMOR_MODIFIER_UUID_PER_TYPE.get(slot.getIndex()); + UUID uuid = ARMOR_MODIFIER_UUID_PER_TYPE.get(slot); builder.put(LodestoneAttributeRegistry.MAGIC_PROFICIENCY.get(), new AttributeModifier(uuid, "Magic Proficiency", 2f, AttributeModifier.Operation.ADDITION)); return builder; } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java index 3c749a313..9764b0fd8 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/armor/SoulStainedSteelArmorItem.java @@ -30,9 +30,9 @@ public SoulStainedSteelArmorItem(ArmorItem.Type slot, Properties builder) { } @Override - public ImmutableMultimap.Builder createExtraAttributes(EquipmentSlot slot) { + public ImmutableMultimap.Builder createExtraAttributes(ArmorItem.Type slot) { ImmutableMultimap.Builder builder = new ImmutableMultimap.Builder<>(); - UUID uuid = ARMOR_MODIFIER_UUID_PER_TYPE.get(slot.getIndex()); + UUID uuid = ARMOR_MODIFIER_UUID_PER_TYPE.get(slot); builder.put(AttributeRegistry.SOUL_WARD_CAP.get(), new AttributeModifier(uuid, "Soul Ward Cap", 3f, AttributeModifier.Operation.ADDITION)); return builder; } @@ -64,7 +64,7 @@ public LodestoneArmorModel getHumanoidArmorModel(LivingEntity entity, ItemStack } model.slot = armorSlot; model.copyFromDefault(_default); - model.setupAnim(entity, entity.animationPosition, entity.animationSpeed, entity.tickCount + pticks, netHeadYaw, netHeadPitch); + model.setupAnim(entity, entity.walkAnimation.position(), entity.walkAnimation.speed(), entity.tickCount + pticks, netHeadYaw, netHeadPitch); return model; } }); diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/MalumCurioItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/MalumCurioItem.java index 12d37198d..cea200798 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/MalumCurioItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/MalumCurioItem.java @@ -58,8 +58,8 @@ public final Multimap getAttributeModifiers(SlotCo } @Override - public void playRightClickEquipSound(LivingEntity livingEntity, ItemStack stack) { - livingEntity.level().playSound(null, livingEntity.blockPosition(), type.sound.get(), SoundSource.PLAYERS, 1.0f, 1.0f); + public void onEquipFromUse(SlotContext slotContext, ItemStack stack) { + slotContext.entity().level().playSound(null, slotContext.entity().blockPosition(), type.sound.get(), SoundSource.PLAYERS, 1.0f, 1.0f); } @Override @@ -72,7 +72,7 @@ public boolean isBookEnchantable(ItemStack stack, ItemStack book) { } @Override - public boolean canRightClickEquip(ItemStack stack) { + public boolean canEquipFromUse(SlotContext slotContext, ItemStack stack) { return true; } diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioWaterNecklace.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioWaterNecklace.java index 7729009b6..83edda30c 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioWaterNecklace.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/misc/CurioWaterNecklace.java @@ -37,13 +37,20 @@ public double getAmount() { } @Override - public void curioTick(String identifier, int index, LivingEntity livingEntity, ItemStack stack) { + public void curioTick(SlotContext slotContext, ItemStack stack) { + LivingEntity livingEntity = slotContext.entity(); if (livingEntity.level().getGameTime() % 40L == 0 && livingEntity.isSwimming()) { AttributeInstance attribute = livingEntity.getAttribute(ForgeMod.SWIM_SPEED.get()); if (attribute != null) { attribute.setDirty(); } } + + if (livingEntity.level().getGameTime() % 20L == 0) { + if (livingEntity.hasEffect(MobEffects.CONDUIT_POWER)) { + livingEntity.heal(2); + } + } } @Override @@ -52,14 +59,4 @@ public void takeDamageEvent(LivingHurtEvent event, LivingEntity attacker, Living event.setAmount(event.getAmount() * 0.5f); } } - - @Override - public void curioTick(SlotContext slotContext, ItemStack stack) { - LivingEntity entity = slotContext.entity(); - if (entity.level.getGameTime() % 20L == 0) { - if (entity.hasEffect(MobEffects.CONDUIT_POWER)) { - entity.heal(2); - } - } - } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioProspectorBelt.java b/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioProspectorBelt.java index 7a182ff34..13b4788ca 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioProspectorBelt.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/curios/prospector/CurioProspectorBelt.java @@ -31,7 +31,7 @@ public static void processExplosion(ExplosionEvent.Detonate event) { public static LootParams.Builder applyFortune(Entity source, LootParams.Builder builder) { if (source instanceof LivingEntity livingEntity) { if (CurioHelper.hasCurioEquipped(livingEntity, ItemRegistry.BELT_OF_THE_PROSPECTOR.get())) { - int fortuneBonus = 3 + CuriosApi.getCuriosHelper().getCuriosHandler(livingEntity).map(h -> h.getFortuneLevel(null)).orElse(0); + int fortuneBonus = 3 + CuriosApi.getCuriosInventory(livingEntity).map(h -> h.getFortuneLevel(null)).orElse(0); ItemStack diamondPickaxe = new ItemStack(Items.DIAMOND_PICKAXE); diamondPickaxe.enchant(Enchantments.BLOCK_FORTUNE, fortuneBonus); return builder.withParameter(LootContextParams.TOOL, diamondPickaxe); diff --git a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MalumScytheItem.java b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MalumScytheItem.java index 59e8405fd..93ecef33b 100644 --- a/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MalumScytheItem.java +++ b/src/main/java/com/sammy/malum/common/item/curiosities/weapons/MalumScytheItem.java @@ -12,6 +12,7 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -44,7 +45,7 @@ public void hurtEvent(LivingHurtEvent event, LivingEntity attacker, LivingEntity attacker.level().playSound(null, target.getX(), target.getY(), target.getZ(), sound, attacker.getSoundSource(), 1, 1); } - if (!canSweep || event.getSource().isMagic() || event.getSource().getMsgId().equals(DamageSourceRegistry.SCYTHE_SWEEP_IDENTIFIER)) { + if (!canSweep || event.getSource().is(DamageTypes.MAGIC) || event.getSource().getMsgId().equals(DamageSourceRegistry.SCYTHE_SWEEP_IDENTIFIER)) { return; } int level = EnchantmentHelper.getEnchantmentLevel(Enchantments.SWEEPING_EDGE, attacker); @@ -52,7 +53,7 @@ public void hurtEvent(LivingHurtEvent event, LivingEntity attacker, LivingEntity target.level().getEntities(attacker, target.getBoundingBox().inflate(1 + level * 0.25f)).forEach(e -> { if (e instanceof LivingEntity livingEntity) { if (livingEntity.isAlive()) { - livingEntity.hurt((DamageSourceRegistry.causeScytheSweepDamage(attacker)), damage); + livingEntity.hurt((DamageSourceRegistry.create(attacker.level(), DamageSourceRegistry.SCYTHE_SWEEP, attacker)), damage); livingEntity.knockback(0.4F, Mth.sin(attacker.getYRot() * ((float) Math.PI / 180F)), (-Mth.cos(attacker.getYRot() * ((float) Math.PI / 180F)))); } } diff --git a/src/main/java/com/sammy/malum/common/spiritrite/WickedRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/WickedRiteType.java index e7c519c3e..4171e6ace 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/WickedRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/WickedRiteType.java @@ -27,9 +27,9 @@ public MalumRiteEffect getNaturalRiteEffect() { @Override public void riteEffect(TotemBaseBlockEntity totemBase) { getNearbyEntities(totemBase, LivingEntity.class, e -> !(e instanceof Player)).forEach(e -> { - if (e.getHealth() > 2.5f && !e.isInvulnerableTo(DamageSourceRegistry.VOODOO)) { + if (e.getHealth() > 2.5f && !e.isInvulnerableTo(DamageSourceRegistry.create(e.level(), DamageSourceRegistry.VOODOO))) { ParticleEffectTypeRegistry.HEXING_SMOKE.createEntityEffect(e, new ColorEffectData(WICKED_SPIRIT.getPrimaryColor())); - e.hurt(DamageSourceRegistry.VOODOO, 2); + e.hurt(DamageSourceRegistry.create(e.level(), DamageSourceRegistry.VOODOO), 2); } }); } diff --git a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchEarthenRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchEarthenRiteType.java index 9c2d90a80..60a0674cd 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchEarthenRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchEarthenRiteType.java @@ -38,7 +38,7 @@ public void riteEffect(TotemBaseBlockEntity totemBase) { if (canBreak) { level.destroyBlock(p, true); if (state.getBlock() instanceof InfestedBlock infestedBlock && level instanceof ServerLevel serverLevel) { - infestedBlock.spawnAfterBreak(state, serverLevel, p, ItemStack.EMPTY); + infestedBlock.spawnAfterBreak(state, serverLevel, p, ItemStack.EMPTY, true); } MALUM_CHANNEL.send(PacketDistributor.TRACKING_CHUNK.with(() -> level.getChunkAt(p)), new BlockSparkleParticlePacket(EARTHEN_SPIRIT.getPrimaryColor(), p)); } diff --git a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchWickedRiteType.java b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchWickedRiteType.java index 7d84aec67..fd2b97a63 100644 --- a/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchWickedRiteType.java +++ b/src/main/java/com/sammy/malum/common/spiritrite/greater/EldritchWickedRiteType.java @@ -28,9 +28,9 @@ public MalumRiteEffect getNaturalRiteEffect() { @Override public void riteEffect(TotemBaseBlockEntity totemBase) { getNearbyEntities(totemBase, LivingEntity.class, e -> !(e instanceof Player)).forEach(e -> { - if (e.getHealth() <= 2.5f && !e.isInvulnerableTo(DamageSourceRegistry.VOODOO)) { + if (e.getHealth() <= 2.5f && !e.isInvulnerableTo(DamageSourceRegistry.create(e.level(), DamageSourceRegistry.VOODOO))) { MALUM_CHANNEL.send(PacketDistributor.TRACKING_ENTITY.with(() -> e), new MajorEntityEffectParticlePacket(getEffectSpirit().getPrimaryColor(), e.getX(), e.getY() + e.getBbHeight() / 2f, e.getZ())); - e.hurt(DamageSourceRegistry.VOODOO, 10f); + e.hurt(DamageSourceRegistry.create(e.level(), DamageSourceRegistry.VOODOO), 10f); } }); } @@ -42,14 +42,14 @@ public MalumRiteEffect getCorruptedEffect() { return new EntityAffectingRiteEffect() { @Override public void riteEffect(TotemBaseBlockEntity totemBase) { - final List nearbyEntities = getNearbyEntities(totemBase, Animal.class, e -> e.getAge() > 0 && !e.isInvulnerableTo(DamageSourceRegistry.VOODOO)).collect(Collectors.toList()); + final List nearbyEntities = getNearbyEntities(totemBase, Animal.class, e -> e.getAge() > 0 && !e.isInvulnerableTo(DamageSourceRegistry.create(e.level(), DamageSourceRegistry.VOODOO))).collect(Collectors.toList()); if (nearbyEntities.size() < 30) { return; } int maxKills = nearbyEntities.size() - 30; nearbyEntities.removeIf(Animal::isInLove); for (Animal entity : nearbyEntities) { - entity.hurt(DamageSourceRegistry.VOODOO, entity.getMaxHealth()); + entity.hurt(DamageSourceRegistry.create(entity.level(), DamageSourceRegistry.VOODOO), entity.getMaxHealth()); MALUM_CHANNEL.send(PacketDistributor.TRACKING_ENTITY.with(() -> entity), new MajorEntityEffectParticlePacket(WICKED_SPIRIT.getPrimaryColor(), entity.getX(), entity.getY() + entity.getBbHeight() / 2f, entity.getZ())); if (maxKills-- <= 0) { return; diff --git a/src/main/java/com/sammy/malum/common/worldgen/WeepingWellStructure.java b/src/main/java/com/sammy/malum/common/worldgen/WeepingWellStructure.java new file mode 100644 index 000000000..19b8c40f5 --- /dev/null +++ b/src/main/java/com/sammy/malum/common/worldgen/WeepingWellStructure.java @@ -0,0 +1,109 @@ +package com.sammy.malum.common.worldgen; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.sammy.malum.registry.common.worldgen.StructureRegistry; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.NoiseColumn; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.levelgen.structure.pools.JigsawPlacement; +import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool; +import org.intellij.lang.annotations.Identifier; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class WeepingWellStructure extends Structure { + public static final Codec CODEC = RecordCodecBuilder.mapCodec(instance -> + instance.group(WeepingWellStructure.settingsCodec(instance), + StructureTemplatePool.CODEC.fieldOf("start_pool").forGetter(structure -> structure.startPool), + ResourceLocation.CODEC.optionalFieldOf("start_jigsaw_name").forGetter(structure -> structure.startJigsawName), + Codec.INT.fieldOf("size").forGetter(provider -> provider.size), + Codec.INT.fieldOf("min_y").forGetter(provider -> provider.min), + Codec.INT.fieldOf("max_y").forGetter(provider -> provider.max), + Codec.INT.fieldOf("offset_in_ground").forGetter(provider -> provider.offsetInGround), + Codec.intRange(1, 128).fieldOf("max_distance_from_center").forGetter(structure -> structure.maxDistanceFromCenter) + ).apply(instance, WeepingWellStructure::new)).codec(); + + private final Holder startPool; + private final Optional startJigsawName; + private final int size; + private final int min; + private final int max; + private final int offsetInGround; + private final int maxDistanceFromCenter; + + public WeepingWellStructure(Structure.StructureSettings config, Holder startPool, Optional startJigsawName, int size, int min, int max, int offsetInGround, int maxDistanceFromCenter) { + super(config); + this.startPool = startPool; + this.startJigsawName = startJigsawName; + this.size = size; + this.min = min; + this.max = max; + this.offsetInGround = offsetInGround; + this.maxDistanceFromCenter = maxDistanceFromCenter; + } + + @Override + protected Optional findGenerationPoint(GenerationContext pContext) { + BlockPos blockPos = new BlockPos(pContext.chunkPos().getMinBlockX(), 0, pContext.chunkPos().getMinBlockZ()); + BlockPos validPos = new BlockPos(blockPos.getX(), getValidY(pContext.chunkGenerator().getBaseColumn(blockPos.getX(), blockPos.getZ(), pContext.heightAccessor(), pContext.randomState())), blockPos.getZ()); + if (validPos.getY() != min - 1 && isSufficientlyFlat(pContext, validPos, 3)) { + return JigsawPlacement.addPieces(pContext, this.startPool, this.startJigsawName, this.size, validPos.below(-offsetInGround), false, Optional.empty(), this.maxDistanceFromCenter); + } + return Optional.empty(); + } + + public boolean isSufficientlyFlat(GenerationContext context, BlockPos origin, int check) { + List blockPosList = new ArrayList<>(); + for(int x = -check; x < check; x++){ + for(int z = -check; z < check; z++){ + blockPosList.add(origin.offset(x, 0, z)); + } + } + int count = 0; + for(BlockPos pos : blockPosList){ + NoiseColumn blockView = context.chunkGenerator().getBaseColumn(pos.getX(), pos.getZ(), context.heightAccessor(), context.randomState()); + if(blockView.getBlock(pos.getY()).isAir() && !blockView.getBlock(pos.below().getY()).isAir()){ + count++; + } + } + return count >= check * check * 2; + } + + public int getValidY(NoiseColumn sample){ + int maxLength = 0; + int currentLength = 0; + int maxIndex = min - 1; + for (int i = min; i < max; i += size) { + if (sample.getBlock(i).isAir()) { + // check if there are at least size more true values + int j = i + 1; + while (j < max && sample.getBlock(j).isAir()) { + j++; + } + int sequenceLength = j - i; + if (sequenceLength >= size) { + currentLength += sequenceLength; + if (currentLength > maxLength) { + maxLength = currentLength; + maxIndex = i; + } + i = j - 1; // skip the sequence we just found + } + } else { + currentLength = 0; + } + } + return maxIndex; + } + + @Override + public StructureType type() { + return StructureRegistry.WEEPING_WELL.get(); + } +} diff --git a/src/main/java/com/sammy/malum/compability/create/CreateCompat.java b/src/main/java/com/sammy/malum/compability/create/CreateCompat.java index f029730eb..ac7c5a7f9 100644 --- a/src/main/java/com/sammy/malum/compability/create/CreateCompat.java +++ b/src/main/java/com/sammy/malum/compability/create/CreateCompat.java @@ -25,7 +25,7 @@ public static void convertCaramelToMagicDamage(LivingHurtEvent event) { if (event.getSource().getDirectEntity() instanceof PotatoProjectileEntity potatoProjectile) { LivingEntity target = event.getEntity(); ItemStack item = potatoProjectile.getItem(); - DamageSource damageSource = event.getSource().getEntity() instanceof Player player ? DamageSourceRegistry.causeVoodooDamage(player) : DamageSourceRegistry.VOODOO; + DamageSource damageSource = event.getSource().getEntity() instanceof Player player ? DamageSourceRegistry.create(player.level(), DamageSourceRegistry.VOODOO, player) : DamageSourceRegistry.create(target.level(), DamageSourceRegistry.VOODOO); if (item.getItem().equals(UNHOLY_CARAMEL.get()) || item.getItem().equals(HOLY_CARAMEL.get())) { event.setCanceled(true); target.invulnerableTime = 0; diff --git a/src/main/java/com/sammy/malum/config/CommonConfig.java b/src/main/java/com/sammy/malum/config/CommonConfig.java index 36eba6142..6727e68ca 100644 --- a/src/main/java/com/sammy/malum/config/CommonConfig.java +++ b/src/main/java/com/sammy/malum/config/CommonConfig.java @@ -12,6 +12,7 @@ public class CommonConfig extends LodestoneConfig { //worldgen + /*TODO public static ConfigValueHolder GENERATE_RUNEWOOD_TREES = new ConfigValueHolder<>(MALUM, "common/worldgen/runewood", (builder -> builder.comment("Should runewood trees naturally generate?") .define("generateRunewood", true))); @@ -120,6 +121,8 @@ public class CommonConfig extends LodestoneConfig { builder.comment("Which dimensions can cthonic gold generate in?") .defineList("cthonicGoldDimensions", new ArrayList<>(List.of("minecraft:overworld")), s -> s instanceof String)); + + */ public static ConfigValueHolder ULTIMATE_REBOUND = new ConfigValueHolder<>(MALUM, "common/item/rebound", (builder -> builder.comment("If set to true, you may put rebound on any weapon in the game.") .define("enableUltimateRebound", false))); diff --git a/src/main/java/com/sammy/malum/core/events/WorldgenEvents.java b/src/main/java/com/sammy/malum/core/events/WorldgenEvents.java index d255e3a5f..cfa59ca9d 100644 --- a/src/main/java/com/sammy/malum/core/events/WorldgenEvents.java +++ b/src/main/java/com/sammy/malum/core/events/WorldgenEvents.java @@ -9,7 +9,7 @@ @Mod.EventBusSubscriber public class WorldgenEvents { - +/* @SubscribeEvent public static void addFeatures(BiomeLoadingEvent event) { if (event.getCategory().equals(Biome.BiomeCategory.PLAINS) || event.getCategory().equals(Biome.BiomeCategory.EXTREME_HILLS)) { @@ -53,4 +53,6 @@ public static void addFeatures(BiomeLoadingEvent event) { event.getGeneration().addFeature(GenerationStep.Decoration.LOCAL_MODIFICATIONS, FeatureRegistry.PlacedFeatures.CTHONIC_GOLD_GEODE_FEATURE); } } + + */ } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/core/helper/SpiritHelper.java b/src/main/java/com/sammy/malum/core/helper/SpiritHelper.java index 0b89234ae..74de4914b 100644 --- a/src/main/java/com/sammy/malum/core/helper/SpiritHelper.java +++ b/src/main/java/com/sammy/malum/core/helper/SpiritHelper.java @@ -21,6 +21,7 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; +import net.minecraftforge.registries.ForgeRegistries; import team.lodestar.lodestone.helpers.ItemHelper; import javax.annotation.Nullable; @@ -134,7 +135,7 @@ public static MalumSpiritType getSpiritType(String spirit) { } public static MalumEntitySpiritData getEntitySpiritData(LivingEntity entity) { - ResourceLocation key = entity.getType().getRegistryName(); + ResourceLocation key = ForgeRegistries.ENTITY_TYPES.getKey(entity.getType()); if (SpiritDataReloadListener.HAS_NO_DATA.contains(key)) return null; diff --git a/src/main/java/com/sammy/malum/data/MalumBiomeTags.java b/src/main/java/com/sammy/malum/data/MalumBiomeTags.java new file mode 100644 index 000000000..d8b993bd3 --- /dev/null +++ b/src/main/java/com/sammy/malum/data/MalumBiomeTags.java @@ -0,0 +1,29 @@ +package com.sammy.malum.data; + +import com.sammy.malum.MalumMod; +import com.sammy.malum.registry.common.worldgen.BiomeTagRegistry; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.BiomeTagsProvider; +import net.minecraft.tags.BiomeTags; +import net.minecraftforge.common.Tags; +import net.minecraftforge.common.data.ExistingFileHelper; +import org.jetbrains.annotations.Nullable; + +import java.util.concurrent.CompletableFuture; + +public class MalumBiomeTags extends BiomeTagsProvider { + + public MalumBiomeTags(PackOutput pOutput, CompletableFuture pProvider, @Nullable ExistingFileHelper existingFileHelper) { + super(pOutput, pProvider, MalumMod.MALUM, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider pProvider) { + //super.addTags(pProvider); + tag(BiomeTagRegistry.HAS_SOULSTONE).addTag(BiomeTags.IS_OVERWORLD); + tag(BiomeTagRegistry.HAS_BRILLIANT).addTag(BiomeTags.IS_OVERWORLD); + tag(BiomeTagRegistry.HAS_BLAZING_QUARTZ).addTag(BiomeTags.IS_NETHER); + } +} diff --git a/src/main/java/com/sammy/malum/data/MalumLang.java b/src/main/java/com/sammy/malum/data/MalumLang.java index 1d957a91d..bc660ba5e 100644 --- a/src/main/java/com/sammy/malum/data/MalumLang.java +++ b/src/main/java/com/sammy/malum/data/MalumLang.java @@ -13,6 +13,7 @@ import com.sammy.malum.registry.common.SpiritTypeRegistry; import com.sammy.malum.registry.common.block.BlockRegistry; import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.EntityType; @@ -25,6 +26,7 @@ import net.minecraft.world.level.block.WallSignBlock; import net.minecraft.world.level.block.WallTorchBlock; import net.minecraftforge.common.data.LanguageProvider; +import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import team.lodestar.lodestone.helpers.DataHelper; @@ -43,7 +45,7 @@ import static com.sammy.malum.registry.common.item.ItemRegistry.ITEMS; public class MalumLang extends LanguageProvider { - public MalumLang(DataGenerator gen) { + public MalumLang(PackOutput gen) { super(gen, MalumMod.MALUM, "en_us"); } @@ -99,17 +101,17 @@ protected void addTranslations() { effects.forEach(e -> { String alteredPath = e.getId().getPath().replaceFirst("s_", "'s_"); String name = DataHelper.toTitleCase(alteredPath, "_"); - add("effect.malum." + e.get().getRegistryName().getPath(), name); + add("effect.malum." + ForgeRegistries.MOB_EFFECTS.getKey(e.get()).getPath(), name); }); attributes.forEach(a -> { String name = DataHelper.toTitleCase(a.getId().getPath(), "_"); - add("attribute.name.malum." + a.get().getRegistryName().getPath(), name); + add("attribute.name.malum." + ForgeRegistries.ATTRIBUTES.getKey(a.get()).getPath(), name); }); entities.forEach(e -> { String name = DataHelper.toTitleCase(e.getId().getPath(), "_"); - add("entity.malum." + e.get().getRegistryName().getPath(), name); + add("entity.malum." + ForgeRegistries.ENTITY_TYPES.getKey(e.get()).getPath(), name); }); rites.forEach(r -> { diff --git a/src/main/java/com/sammy/malum/data/MalumRecipes.java b/src/main/java/com/sammy/malum/data/MalumRecipes.java index 2e4b77d4c..e17fe9e8c 100644 --- a/src/main/java/com/sammy/malum/data/MalumRecipes.java +++ b/src/main/java/com/sammy/malum/data/MalumRecipes.java @@ -47,6 +47,11 @@ public MalumRecipes(PackOutput pOutput) { super(pOutput); } + @Override + public String getName() { + return "Malum Recipe Provider"; + } + @Override protected void buildRecipes(Consumer consumer) { //KEY ITEMS @@ -73,14 +78,14 @@ protected void buildRecipes(Consumer consumer) { shapeless(RecipeCategory.MISC, ItemRegistry.HALLOWED_GOLD_INGOT.get(), 9).requires(ItemRegistry.BLOCK_OF_HALLOWED_GOLD.get()).unlockedBy("has_hallowed_gold", has(ItemRegistry.HALLOWED_GOLD_INGOT.get())).save(consumer, malumPath("hallowed_gold_from_block")); //NODES - smeltingWithCount(Ingredient.of(ItemRegistry.IRON_NODE.get()), Items.IRON_NUGGET, 6, 0.25f, 200).unlockedBy("has_impetus", has(ItemRegistry.IRON_IMPETUS.get())).save(consumer, malumPath("iron_from_node_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.IRON_NODE.get()), Items.IRON_NUGGET, 6, 0.25f, 100).unlockedBy("has_impetus", has(ItemRegistry.IRON_IMPETUS.get())).save(consumer, malumPath("iron_from_node_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.IRON_NODE.get()), RecipeCategory.MISC, Items.IRON_NUGGET, 6, 0.25f, 200).unlockedBy("has_impetus", has(ItemRegistry.IRON_IMPETUS.get())).save(consumer, malumPath("iron_from_node_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.IRON_NODE.get()), RecipeCategory.MISC,Items.IRON_NUGGET, 6, 0.25f, 100).unlockedBy("has_impetus", has(ItemRegistry.IRON_IMPETUS.get())).save(consumer, malumPath("iron_from_node_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.GOLD_NODE.get()), Items.GOLD_NUGGET, 6, 0.25f, 200).unlockedBy("has_impetus", has(ItemRegistry.GOLD_IMPETUS.get())).save(consumer, malumPath("gold_from_node_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.GOLD_NODE.get()), Items.GOLD_NUGGET, 6, 0.25f, 100).unlockedBy("has_impetus", has(ItemRegistry.GOLD_IMPETUS.get())).save(consumer, malumPath("gold_from_node_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.GOLD_NODE.get()), RecipeCategory.MISC,Items.GOLD_NUGGET, 6, 0.25f, 200).unlockedBy("has_impetus", has(ItemRegistry.GOLD_IMPETUS.get())).save(consumer, malumPath("gold_from_node_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.GOLD_NODE.get()), RecipeCategory.MISC,Items.GOLD_NUGGET, 6, 0.25f, 100).unlockedBy("has_impetus", has(ItemRegistry.GOLD_IMPETUS.get())).save(consumer, malumPath("gold_from_node_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.COPPER_NODE.get()), ItemRegistry.COPPER_NUGGET.get(), 6, 0.25f, 200).unlockedBy("has_impetus", has(ItemRegistry.COPPER_IMPETUS.get())).save(consumer, malumPath("copper_from_node_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.COPPER_NODE.get()), ItemRegistry.COPPER_NUGGET.get(), 6, 0.25f, 100).unlockedBy("has_impetus", has(ItemRegistry.COPPER_IMPETUS.get())).save(consumer, malumPath("copper_from_node_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.COPPER_NODE.get()), RecipeCategory.MISC,ItemRegistry.COPPER_NUGGET.get(), 6, 0.25f, 200).unlockedBy("has_impetus", has(ItemRegistry.COPPER_IMPETUS.get())).save(consumer, malumPath("copper_from_node_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.COPPER_NODE.get()), RecipeCategory.MISC,ItemRegistry.COPPER_NUGGET.get(), 6, 0.25f, 100).unlockedBy("has_impetus", has(ItemRegistry.COPPER_IMPETUS.get())).save(consumer, malumPath("copper_from_node_blasting")); nodeSmelting(consumer, ItemRegistry.LEAD_IMPETUS, ItemRegistry.LEAD_NODE, NUGGETS_LEAD); nodeSmelting(consumer, ItemRegistry.SILVER_IMPETUS, ItemRegistry.SILVER_NODE, NUGGETS_SILVER); @@ -124,25 +129,25 @@ protected void buildRecipes(Consumer consumer) { blasting(Ingredient.of(ItemRegistry.NATURAL_QUARTZ_ORE.get()), RecipeCategory.MISC, ItemRegistry.NATURAL_QUARTZ.get(), 0.25f, 100).unlockedBy("has_natural_quartz", has(ItemRegistry.NATURAL_QUARTZ.get())).save(consumer, malumPath("natural_quartz_from_blasting")); smelting(Ingredient.of(ItemRegistry.DEEPSLATE_QUARTZ_ORE.get()), RecipeCategory.MISC, ItemRegistry.NATURAL_QUARTZ.get(), 0.25f, 200).unlockedBy("has_natural_quartz", has(ItemRegistry.NATURAL_QUARTZ.get())).save(consumer, malumPath("natural_quartz_from_deepslate_smelting")); blasting(Ingredient.of(ItemRegistry.DEEPSLATE_QUARTZ_ORE.get()), RecipeCategory.MISC, ItemRegistry.NATURAL_QUARTZ.get(), 0.25f, 100).unlockedBy("has_natural_quartz", has(ItemRegistry.NATURAL_QUARTZ.get())).save(consumer, malumPath("natural_quartz_from_deepslate_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.BRILLIANT_STONE.get()), ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 200).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.BRILLIANT_STONE.get()), ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 100).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.BRILLIANT_DEEPSLATE.get()), ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 200).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_deepslate_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.BRILLIANT_DEEPSLATE.get()), ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 100).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_deepslate_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.SOULSTONE_ORE.get()), ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 200).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.SOULSTONE_ORE.get()), ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 100).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.DEEPSLATE_SOULSTONE_ORE.get()), ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 200).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_deepslate_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.DEEPSLATE_SOULSTONE_ORE.get()), ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 100).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_deepslate_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.BRILLIANT_STONE.get()), RecipeCategory.MISC, ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 200).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.BRILLIANT_STONE.get()), RecipeCategory.MISC, ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 100).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.BRILLIANT_DEEPSLATE.get()), RecipeCategory.MISC, ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 200).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_deepslate_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.BRILLIANT_DEEPSLATE.get()), RecipeCategory.MISC, ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 100).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_deepslate_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.SOULSTONE_ORE.get()), RecipeCategory.MISC, ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 200).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.SOULSTONE_ORE.get()), RecipeCategory.MISC, ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 100).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.DEEPSLATE_SOULSTONE_ORE.get()), RecipeCategory.MISC, ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 200).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_deepslate_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.DEEPSLATE_SOULSTONE_ORE.get()), RecipeCategory.MISC, ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 100).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_deepslate_blasting")); smelting(Ingredient.of(ItemRegistry.BLOCK_OF_CTHONIC_GOLD.get()), RecipeCategory.MISC, ItemRegistry.CTHONIC_GOLD.get(), 2.0f, 200).unlockedBy("has_cthonic_gold", has(ItemRegistry.CTHONIC_GOLD.get())).save(consumer, malumPath("cthonic_gold_from_smelting")); blasting(Ingredient.of(ItemRegistry.BLOCK_OF_CTHONIC_GOLD.get()), RecipeCategory.MISC, ItemRegistry.CTHONIC_GOLD.get(), 2.0f, 100).unlockedBy("has_cthonic_gold", has(ItemRegistry.CTHONIC_GOLD.get())).save(consumer, malumPath("cthonic_gold_from_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.CLUSTER_OF_BRILLIANCE.get()), ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 200).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_raw_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.CLUSTER_OF_BRILLIANCE.get()), ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 100).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_raw_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.CRUSHED_BRILLIANCE.get()), ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 200).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_crushed_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.CRUSHED_BRILLIANCE.get()), ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 100).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_crushed_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.RAW_SOULSTONE.get()), ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 200).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_raw_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.RAW_SOULSTONE.get()), ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 100).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_raw_blasting")); - smeltingWithCount(Ingredient.of(ItemRegistry.CRUSHED_SOULSTONE.get()), ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 200).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_crushed_smelting")); - blastingWithCount(Ingredient.of(ItemRegistry.CRUSHED_SOULSTONE.get()), ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 100).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_crushed_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.CLUSTER_OF_BRILLIANCE.get()), RecipeCategory.MISC, ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 200).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_raw_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.CLUSTER_OF_BRILLIANCE.get()), RecipeCategory.MISC, ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 100).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_raw_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.CRUSHED_BRILLIANCE.get()), RecipeCategory.MISC, ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 200).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_crushed_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.CRUSHED_BRILLIANCE.get()), RecipeCategory.MISC, ItemRegistry.CHUNK_OF_BRILLIANCE.get(), 2, 1, 100).unlockedBy("has_brilliance", has(ItemRegistry.CLUSTER_OF_BRILLIANCE.get())).save(consumer, malumPath("brilliance_from_crushed_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.RAW_SOULSTONE.get()), RecipeCategory.MISC, ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 200).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_raw_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.RAW_SOULSTONE.get()), RecipeCategory.MISC, ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 100).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_raw_blasting")); + smeltingWithCount(Ingredient.of(ItemRegistry.CRUSHED_SOULSTONE.get()), RecipeCategory.MISC, ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 200).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_crushed_smelting")); + blastingWithCount(Ingredient.of(ItemRegistry.CRUSHED_SOULSTONE.get()), RecipeCategory.MISC, ItemRegistry.PROCESSED_SOULSTONE.get(), 2, 0.25f, 100).unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("soulstone_from_crushed_blasting")); //RAW ORE BLOCKS shaped(RecipeCategory.MISC, ItemRegistry.BLOCK_OF_RAW_SOULSTONE.get()).define('#', ItemRegistry.RAW_SOULSTONE.get()).pattern("###").pattern("###").pattern("###").unlockedBy("has_soulstone", has(ItemRegistry.RAW_SOULSTONE.get())).save(consumer, malumPath("raw_soulstone_block")); diff --git a/src/main/java/com/sammy/malum/data/MalumWorldgenProvider.java b/src/main/java/com/sammy/malum/data/MalumWorldgenProvider.java index 7f0eb20a8..92f0087dc 100644 --- a/src/main/java/com/sammy/malum/data/MalumWorldgenProvider.java +++ b/src/main/java/com/sammy/malum/data/MalumWorldgenProvider.java @@ -1,24 +1,77 @@ package com.sammy.malum.data; import com.sammy.malum.MalumMod; +import com.sammy.malum.registry.common.worldgen.BiomeTagRegistry; import com.sammy.malum.registry.common.worldgen.ConfiguredFeatureRegistry; +import com.sammy.malum.registry.common.worldgen.FeatureRegistry; import com.sammy.malum.registry.common.worldgen.PlacedFeatureRegistry; +import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; +import net.minecraft.core.HolderSet; import net.minecraft.core.RegistrySetBuilder; import net.minecraft.core.registries.Registries; import net.minecraft.data.PackOutput; +import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.common.world.ForgeBiomeModifiers; +import net.minecraftforge.registries.ForgeRegistries; +import java.util.ArrayList; +import java.util.List; import java.util.Set; import java.util.concurrent.CompletableFuture; +import java.util.function.Supplier; public class MalumWorldgenProvider extends DatapackBuiltinEntriesProvider { public MalumWorldgenProvider(PackOutput output, CompletableFuture registries) { - super(output, registries, Set.of(MalumMod.MALUM)); + super(output, registries, BUILDER, Set.of(MalumMod.MALUM)); } private static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() .add(Registries.CONFIGURED_FEATURE, ConfiguredFeatureRegistry::bootstrap) - .add(Registries.PLACED_FEATURE, PlacedFeatureRegistry::bootstrap); + .add(Registries.PLACED_FEATURE, PlacedFeatureRegistry::bootstrap) + .add(ForgeRegistries.Keys.BIOME_MODIFIERS, BiomeModification::bootstrap); + + private static class BiomeModification { + public static void bootstrap(BootstapContext context) { + register(context, "soulstone_ore", () -> + addFeatureModifier(context, + getPlacedHolderSet(context, PlacedFeatureRegistry.ORE_SOULSTONE), + BiomeTagRegistry.HAS_SOULSTONE, GenerationStep.Decoration.UNDERGROUND_ORES)); + + register(context, "brilliant_ore", () -> + addFeatureModifier(context, + getPlacedHolderSet(context, PlacedFeatureRegistry.ORE_BRILLIANT), + BiomeTagRegistry.HAS_BRILLIANT, GenerationStep.Decoration.UNDERGROUND_ORES)); + + register(context, "natural_quartz_ore", () -> + addFeatureModifier(context, + getPlacedHolderSet(context, PlacedFeatureRegistry.ORE_NATURAL_QUARTZ), + BiomeTagRegistry.HAS_SOULSTONE, GenerationStep.Decoration.UNDERGROUND_ORES)); + + } + + public static HolderSet getPlacedHolderSet(BootstapContext context, ResourceKey... placedFeatures) { + List> holders = new ArrayList<>(); + for (ResourceKey feature : placedFeatures) { + holders.add(context.lookup(Registries.PLACED_FEATURE).getOrThrow(feature)); + } + return HolderSet.direct(holders); + } + + private static ForgeBiomeModifiers.AddFeaturesBiomeModifier addFeatureModifier(BootstapContext context, HolderSet placedSet, TagKey biomeTag, GenerationStep.Decoration decoration) { + return new ForgeBiomeModifiers.AddFeaturesBiomeModifier(context.lookup(Registries.BIOME).getOrThrow(biomeTag), placedSet, decoration); + } + + private static void register(BootstapContext context, String name, Supplier modifier) { + context.register(ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, MalumMod.malumPath(name)), modifier.get()); + } + } } diff --git a/src/main/java/com/sammy/malum/data/block/MalumBlockLootTables.java b/src/main/java/com/sammy/malum/data/block/MalumBlockLootTables.java index 2dbf8a6d3..4df5a1b1b 100644 --- a/src/main/java/com/sammy/malum/data/block/MalumBlockLootTables.java +++ b/src/main/java/com/sammy/malum/data/block/MalumBlockLootTables.java @@ -2,6 +2,7 @@ import com.google.common.collect.ImmutableSet; import com.mojang.datafixers.util.Pair; +import com.sammy.malum.MalumMod; import com.sammy.malum.common.block.ether.EtherBlock; import com.sammy.malum.common.block.storage.jar.SpiritJarBlock; import com.sammy.malum.common.block.storage.vial.SoulVialBlock; @@ -41,14 +42,12 @@ import net.minecraftforge.registries.RegistryObject; import team.lodestar.lodestone.systems.block.LodestoneBlockProperties; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; +import java.util.stream.Collectors; import java.util.stream.Stream; import static com.sammy.malum.registry.common.block.BlockRegistry.BLOCKS; @@ -80,6 +79,11 @@ protected BlocksLoot() { super(Set.of(), FeatureFlags.REGISTRY.allFlags()); } + @Override + protected Iterable getKnownBlocks() { + return BlockRegistry.BLOCKS.getEntries().stream().map(Supplier::get).collect(Collectors.toList()); + } + @Override protected void generate() { Set> blocks = new HashSet<>(BLOCKS.getEntries()); diff --git a/src/main/java/com/sammy/malum/data/block/MalumBlockTags.java b/src/main/java/com/sammy/malum/data/block/MalumBlockTags.java index 26b42f34c..b2140217b 100644 --- a/src/main/java/com/sammy/malum/data/block/MalumBlockTags.java +++ b/src/main/java/com/sammy/malum/data/block/MalumBlockTags.java @@ -25,9 +25,14 @@ public MalumBlockTags(PackOutput output, CompletableFuture> blocks = new HashSet<>(BLOCKS.getEntries()); tag(BlockTagRegistry.RITE_IMMUNE).addTags(BlockTagRegistry.TAINTED_ROCK, BlockTagRegistry.TWISTED_ROCK); @@ -38,16 +43,6 @@ protected void addTags() { addTagsFromBlockProperties(blocks.stream().map(RegistryObject::get).collect(Collectors.toList())); } - @Override - public String getName() { - return "Malum Block Tags"; - } - - @Override - protected void addTags(HolderLookup.Provider pProvider) { - addTags(); - } - @Nonnull private Block[] getModBlocks(Predicate predicate) { List ret = new ArrayList<>(Collections.emptyList()); diff --git a/src/main/java/com/sammy/malum/data/item/MalumItemModelSmithTypes.java b/src/main/java/com/sammy/malum/data/item/MalumItemModelSmithTypes.java index e1208a7cd..0f798fca0 100644 --- a/src/main/java/com/sammy/malum/data/item/MalumItemModelSmithTypes.java +++ b/src/main/java/com/sammy/malum/data/item/MalumItemModelSmithTypes.java @@ -3,6 +3,7 @@ import com.sammy.malum.common.item.cosmetic.skins.ArmorSkin; import com.sammy.malum.registry.common.item.ArmorSkinRegistry; import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; import team.lodestar.lodestone.helpers.DataHelper; import team.lodestar.lodestone.systems.datagen.itemsmith.ItemModelSmith; import team.lodestar.lodestone.systems.item.LodestoneArmorItem; @@ -77,7 +78,7 @@ public class MalumItemModelSmithTypes { } String itemSuffix = datagenData.getSuffix((LodestoneArmorItem) item); ResourceLocation itemTexturePath = new ResourceLocation(datagenData.itemTexturePrefix + itemSuffix); - provider.getBuilder(item.getRegistryName().getPath()).override() + provider.getBuilder(ForgeRegistries.ITEMS.getKey(item).getPath()).override() .predicate(new ResourceLocation(ArmorSkin.MALUM_SKIN_TAG), value) .model(provider.withExistingParent(entry.getKey() + "_" + itemSuffix, GENERATED).texture("layer0", itemTexturePath)) .end(); diff --git a/src/main/java/com/sammy/malum/data/item/MalumItemTags.java b/src/main/java/com/sammy/malum/data/item/MalumItemTags.java index 64c397b45..452b12377 100644 --- a/src/main/java/com/sammy/malum/data/item/MalumItemTags.java +++ b/src/main/java/com/sammy/malum/data/item/MalumItemTags.java @@ -37,10 +37,6 @@ public String getName() { @Override protected void addTags(HolderLookup.Provider pProvider) { - addTags(); - } - - protected void addTags() { tag(Tags.Items.GEMS).add(PROCESSED_SOULSTONE.get(), BLAZING_QUARTZ.get()); this.copy(BlockTags.WOOL, net.minecraft.tags.ItemTags.WOOL); diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritFocusingRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritFocusingRecipes.java index 3e6f16ac8..0f1c33b10 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritFocusingRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritFocusingRecipes.java @@ -30,6 +30,11 @@ public MalumSpiritFocusingRecipes(PackOutput generatorIn) { super(generatorIn); } + @Override + public String getName() { + return "Malum Spirit Crucible Recipe Provider"; + } + @Override protected void buildRecipes(Consumer consumer) { int metalDuration = 900; diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java index 0a56fab63..688db1798 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritInfusionRecipes.java @@ -28,6 +28,10 @@ public MalumSpiritInfusionRecipes(PackOutput generatorIn) { super(generatorIn); } + @Override + public String getName() { + return "Malum Spirit Infusion Recipe Provider"; + } @Override protected void buildRecipes(Consumer consumer) { diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritTransmutationRecipes.java b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritTransmutationRecipes.java index 66790a444..e2d1fc9bb 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumSpiritTransmutationRecipes.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumSpiritTransmutationRecipes.java @@ -19,6 +19,11 @@ public MalumSpiritTransmutationRecipes(PackOutput generatorIn) { super(generatorIn); } + @Override + public String getName() { + return "Malum Block Transmutation Recipe Provider"; + } + private static final List, RegistryObject>> SOULWOOD_TRANSMUTATIONS = List.of( new Pair<>(RUNEWOOD_SAPLING, SOULWOOD_GROWTH), new Pair<>(RUNEWOOD_LEAVES, SOULWOOD_LEAVES), diff --git a/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipeReplacements.java b/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipeReplacements.java index 077ac3ae2..3e0351071 100644 --- a/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipeReplacements.java +++ b/src/main/java/com/sammy/malum/data/recipe/MalumVanillaRecipeReplacements.java @@ -18,6 +18,7 @@ import java.util.*; import java.util.function.Consumer; + public class MalumVanillaRecipeReplacements extends RecipeProvider { private final Map> replacements = new HashMap<>(); @@ -27,6 +28,12 @@ public MalumVanillaRecipeReplacements(PackOutput pOutput) { super(pOutput); } + + @Override + public String getName() { + return "Malum Void Favor Recipe Provider"; + } + @Override protected void buildRecipes(Consumer pWriter) { replace(Items.QUARTZ, Tags.Items.GEMS_QUARTZ); diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritFocusingRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritFocusingRecipeBuilder.java index e0ade0a07..a2a7984ca 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritFocusingRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritFocusingRecipeBuilder.java @@ -14,6 +14,7 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.ItemLike; +import net.minecraftforge.registries.ForgeRegistries; import javax.annotation.Nullable; import java.util.List; @@ -47,7 +48,7 @@ public void build(Consumer consumerIn, String recipeName) { } public void build(Consumer consumerIn) { - build(consumerIn, output.getItem().getRegistryName().getPath()); + build(consumerIn, ForgeRegistries.ITEMS.getKey(output.getItem()).getPath()); } public void build(Consumer consumerIn, ResourceLocation id) { diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritInfusionRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritInfusionRecipeBuilder.java index 420d16ad1..283c78392 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritInfusionRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritInfusionRecipeBuilder.java @@ -15,6 +15,7 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.ItemLike; +import net.minecraftforge.registries.ForgeRegistries; import team.lodestar.lodestone.systems.recipe.IngredientWithCount; import javax.annotation.Nullable; @@ -66,7 +67,7 @@ public void build(Consumer consumerIn, String recipeName) { } public void build(Consumer consumerIn) { - build(consumerIn, output.getItem().getRegistryName().getPath()); + build(consumerIn, ForgeRegistries.ITEMS.getKey(output.getItem()).getPath()); } public void build(Consumer consumerIn, ResourceLocation id) { diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritRepairRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritRepairRecipeBuilder.java index 3c059649c..2ddd2b5f0 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/SpiritRepairRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/SpiritRepairRecipeBuilder.java @@ -11,6 +11,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.registries.ForgeRegistries; import team.lodestar.lodestone.systems.recipe.IngredientWithCount; import javax.annotation.Nullable; @@ -62,7 +63,7 @@ public void build(Consumer consumerIn, ResourceLocation id) { } public void build(Consumer consumerIn) { - build(consumerIn, inputs.get(0).getRegistryName().getPath()); + build(consumerIn, ForgeRegistries.ITEMS.getKey(inputs.get(0)).getPath()); } public class Result implements FinishedRecipe { @@ -76,7 +77,7 @@ public Result(ResourceLocation id) { public void serializeRecipeData(JsonObject json) { JsonArray inputsJson = new JsonArray(); for (Item item : inputs) { - inputsJson.add(item.getRegistryName().toString()); + inputsJson.add(ForgeRegistries.ITEMS.getKey(item).toString()); } JsonArray spiritsJson = new JsonArray(); for (SpiritWithCount spirit : spirits) { diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/VoidFavorRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/VoidFavorRecipeBuilder.java index e2f064c32..a664ea52b 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/VoidFavorRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/VoidFavorRecipeBuilder.java @@ -10,6 +10,7 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.ItemLike; +import net.minecraftforge.registries.ForgeRegistries; import javax.annotation.Nullable; import java.util.function.Consumer; @@ -41,7 +42,7 @@ public void build(Consumer consumerIn, String recipeName) { } public void build(Consumer consumerIn) { - build(consumerIn, output.getItem().getRegistryName().getPath()); + build(consumerIn, ForgeRegistries.ITEMS.getKey(output.getItem()).getPath()); } public void build(Consumer consumerIn, ResourceLocation id) { diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/MetalNodeCookingRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/MetalNodeCookingRecipeBuilder.java index 4c4c1cb3d..baccfd676 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/MetalNodeCookingRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/MetalNodeCookingRecipeBuilder.java @@ -9,6 +9,7 @@ import net.minecraft.world.item.crafting.AbstractCookingRecipe; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraftforge.registries.ForgeRegistries; import team.lodestar.lodestone.systems.recipe.IngredientWithCount; import javax.annotation.Nullable; @@ -55,7 +56,7 @@ public void build(Consumer consumerIn, String recipeName) { } public void build(Consumer consumerIn) { - build(consumerIn, result.getStack().getItem().getRegistryName().getPath()); + build(consumerIn, ForgeRegistries.ITEMS.getKey(result.getStack().getItem()).getPath()); } public void build(Consumer consumerIn, ResourceLocation id) { diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/StackedMalumCookingRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/StackedMalumCookingRecipeBuilder.java index 538b89f25..4d14f703a 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/StackedMalumCookingRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/StackedMalumCookingRecipeBuilder.java @@ -9,6 +9,7 @@ import net.minecraft.core.Registry; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeCategory; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.item.crafting.AbstractCookingRecipe; @@ -16,11 +17,13 @@ import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.SimpleCookingSerializer; import net.minecraft.world.level.ItemLike; +import net.minecraftforge.registries.ForgeRegistries; import javax.annotation.Nullable; import java.util.function.Consumer; public class StackedMalumCookingRecipeBuilder implements RecipeBuilder { + private final RecipeCategory category; private final Item result; private final int resultCount; private final Ingredient ingredient; @@ -29,9 +32,10 @@ public class StackedMalumCookingRecipeBuilder implements RecipeBuilder { private final Advancement.Builder advancement = Advancement.Builder.advancement(); @Nullable private String group; - private final SimpleCookingSerializer serializer; + private final RecipeSerializer serializer; - private StackedMalumCookingRecipeBuilder(ItemLike pResult, int resultCount, Ingredient pIngredient, float pExperience, int pCookingTime, SimpleCookingSerializer pSerializer) { + private StackedMalumCookingRecipeBuilder(RecipeCategory pCategory, ItemLike pResult, int resultCount, Ingredient pIngredient, float pExperience, int pCookingTime, RecipeSerializer pSerializer) { + this.category = pCategory; this.result = pResult.asItem(); this.resultCount = resultCount; this.ingredient = pIngredient; @@ -40,24 +44,24 @@ private StackedMalumCookingRecipeBuilder(ItemLike pResult, int resultCount, Ingr this.serializer = pSerializer; } - public static StackedMalumCookingRecipeBuilder cookingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime, SimpleCookingSerializer pSerializer) { - return new StackedMalumCookingRecipeBuilder(pResult, resultCount, pIngredient, pExperience, pCookingTime, pSerializer); + public static StackedMalumCookingRecipeBuilder cookingWithCount(Ingredient pIngredient, RecipeCategory pCategory, ItemLike pResult, int resultCount, float pExperience, int pCookingTime, RecipeSerializer pSerializer) { + return new StackedMalumCookingRecipeBuilder(pCategory, pResult, resultCount, pIngredient, pExperience, pCookingTime, pSerializer); } - public static StackedMalumCookingRecipeBuilder campfireCookingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { - return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.CAMPFIRE_COOKING_RECIPE); + public static StackedMalumCookingRecipeBuilder campfireCookingWithCount(Ingredient pIngredient, RecipeCategory pCategory, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { + return cookingWithCount(pIngredient, pCategory, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.CAMPFIRE_COOKING_RECIPE); } - public static StackedMalumCookingRecipeBuilder blastingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { - return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.BLASTING_RECIPE); + public static StackedMalumCookingRecipeBuilder blastingWithCount(Ingredient pIngredient, RecipeCategory pCategory, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { + return cookingWithCount(pIngredient, pCategory, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.BLASTING_RECIPE); } - public static StackedMalumCookingRecipeBuilder smeltingWithCount(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { - return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.SMELTING_RECIPE); + public static StackedMalumCookingRecipeBuilder smeltingWithCount(Ingredient pIngredient, RecipeCategory pCategory, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { + return cookingWithCount(pIngredient, pCategory, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.SMELTING_RECIPE); } - public static StackedMalumCookingRecipeBuilder smoking(Ingredient pIngredient, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { - return cookingWithCount(pIngredient, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.SMOKING_RECIPE); + public static StackedMalumCookingRecipeBuilder smoking(Ingredient pIngredient, RecipeCategory pCategory, ItemLike pResult, int resultCount, float pExperience, int pCookingTime) { + return cookingWithCount(pIngredient, pCategory, pResult, resultCount, pExperience, pCookingTime, RecipeSerializer.SMOKING_RECIPE); } public StackedMalumCookingRecipeBuilder unlockedBy(String pCriterionName, CriterionTriggerInstance pCriterionTrigger) { @@ -77,7 +81,7 @@ public Item getResult() { public void save(Consumer pFinishedRecipeConsumer, ResourceLocation pRecipeId) { this.ensureValid(pRecipeId); this.advancement.parent(new ResourceLocation("recipes/root")).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(pRecipeId)).rewards(AdvancementRewards.Builder.recipe(pRecipeId)).requirements(RequirementsStrategy.OR); - pFinishedRecipeConsumer.accept(new StackedMalumCookingRecipeBuilder.Result(pRecipeId, this.group == null ? "" : this.group, this.ingredient, this.result, this.resultCount, this.experience, this.cookingTime, this.advancement, new ResourceLocation(pRecipeId.getNamespace(), "recipes/" + this.result.getItemCategory().getRecipeFolderName() + "/" + pRecipeId.getPath()), this.serializer)); + pFinishedRecipeConsumer.accept(new StackedMalumCookingRecipeBuilder.Result(pRecipeId, this.group == null ? "" : this.group, this.ingredient, this.result, this.resultCount, this.experience, this.cookingTime, this.advancement, new ResourceLocation(pRecipeId.getNamespace(), "recipes/" + this.category.getFolderName() + "/" + pRecipeId.getPath()), this.serializer)); } private void ensureValid(ResourceLocation pId) { @@ -117,7 +121,7 @@ public void serializeRecipeData(JsonObject pJson) { } pJson.add("ingredient", this.ingredient.toJson()); JsonObject object = new JsonObject(); - object.addProperty("item", Registry.ITEM.getKey(this.result).toString()); + object.addProperty("item", ForgeRegistries.ITEMS.getKey(this.result).toString()); object.addProperty("count", this.resultCount); pJson.add("result", object); pJson.addProperty("experience", this.experience); diff --git a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/TheDeviceRecipeBuilder.java b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/TheDeviceRecipeBuilder.java index 77e4e8026..f02388352 100644 --- a/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/TheDeviceRecipeBuilder.java +++ b/src/main/java/com/sammy/malum/data/recipe/builder/vanilla/TheDeviceRecipeBuilder.java @@ -14,6 +14,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.ItemLike; @@ -90,7 +91,7 @@ public Item getResult() { public void save(Consumer pFinishedRecipeConsumer, ResourceLocation pRecipeId) { this.ensureValid(pRecipeId); this.advancement.parent(new ResourceLocation("recipes/root")).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(pRecipeId)).rewards(AdvancementRewards.Builder.recipe(pRecipeId)).requirements(RequirementsStrategy.OR); - pFinishedRecipeConsumer.accept(new ShapedRecipeBuilder.Result(pRecipeId, this.result, this.count, this.group == null ? "" : this.group, this.rows, this.key, this.advancement, new ResourceLocation(pRecipeId.getNamespace(), "recipes/the_device/" + pRecipeId.getPath()))); + pFinishedRecipeConsumer.accept(new ShapedRecipeBuilder.Result(pRecipeId, this.result, this.count, this.group == null ? "" : this.group, CraftingBookCategory.MISC, this.rows, this.key, this.advancement, new ResourceLocation(pRecipeId.getNamespace(), "recipes/the_device/" + pRecipeId.getPath()), false)); } private void ensureValid(ResourceLocation pId) { diff --git a/src/main/java/com/sammy/malum/mixin/ExplosionMixin.java b/src/main/java/com/sammy/malum/mixin/ExplosionMixin.java index 9b427c5f6..e62574a1b 100644 --- a/src/main/java/com/sammy/malum/mixin/ExplosionMixin.java +++ b/src/main/java/com/sammy/malum/mixin/ExplosionMixin.java @@ -28,28 +28,27 @@ public abstract class ExplosionMixin { @Unique ItemStack malum$droppedItem; - @Shadow - @Nullable - public abstract LivingEntity getSourceMob(); @Mutable @Shadow @Final private float radius; + @Shadow @Nullable public abstract LivingEntity getIndirectSourceEntity(); + @ModifyArg(method = "finalizeExplosion", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/BlockState;getDrops(Lnet/minecraft/world/level/storage/loot/LootParams$Builder;)Ljava/util/List;")) private LootParams.Builder malum$getBlockDrops(LootParams.Builder builder) { - return CurioProspectorBelt.applyFortune(getSourceMob(), builder); + return CurioProspectorBelt.applyFortune(getIndirectSourceEntity(), builder); } @Inject(method = "(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/damagesource/DamageSource;Lnet/minecraft/world/level/ExplosionDamageCalculator;DDDFZLnet/minecraft/world/level/Explosion$BlockInteraction;)V", at = @At(value = "RETURN")) private void malum$modifyExplosionStats(Level pLevel, Entity pSource, DamageSource pDamageSource, ExplosionDamageCalculator pDamageCalculator, double pToBlowX, double pToBlowY, double pToBlowZ, float pRadius, boolean pFire, Explosion.BlockInteraction pBlockInteraction, CallbackInfo ci) { - radius = CurioDemolitionistRing.increaseExplosionRadius(getSourceMob(), radius); + radius = CurioDemolitionistRing.increaseExplosionRadius(getIndirectSourceEntity(), radius); } @Inject(method = "finalizeExplosion", at = @At(value = "HEAD")) private void malum$finalizeExplosion(boolean pSpawnParticles, CallbackInfo ci) { - malum$hasHoarderRing = CurioHoarderRing.hasHoarderRing(getSourceMob()); + malum$hasHoarderRing = CurioHoarderRing.hasHoarderRing(getIndirectSourceEntity()); } @ModifyArg(method = "finalizeExplosion", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/Block;popResource(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/item/ItemStack;)V"), index = 2) @@ -59,6 +58,6 @@ public abstract class ExplosionMixin { @ModifyArg(method = "finalizeExplosion", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/Block;popResource(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/item/ItemStack;)V"), index = 1) private BlockPos malum$popResource(BlockPos value) { - return CurioHoarderRing.getExplosionPos(malum$hasHoarderRing, value, getSourceMob(), malum$droppedItem); + return CurioHoarderRing.getExplosionPos(malum$hasHoarderRing, value, getIndirectSourceEntity(), malum$droppedItem); } } \ No newline at end of file diff --git a/src/main/java/com/sammy/malum/mixin/ItemStackMixin.java b/src/main/java/com/sammy/malum/mixin/ItemStackMixin.java index fdb9b4b0d..d067ef6cf 100644 --- a/src/main/java/com/sammy/malum/mixin/ItemStackMixin.java +++ b/src/main/java/com/sammy/malum/mixin/ItemStackMixin.java @@ -38,27 +38,32 @@ public abstract class ItemStackMixin { Attribute key = entry.getKey(); AttributeModifier modifier = entry.getValue(); double amount = modifier.getAmount(); - if (modifier.getId().equals(LodestoneAttributeRegistry.UUIDS.get(LodestoneAttributeRegistry.MAGIC_DAMAGE))) { - int enchantmentLevel = EnchantmentHelper.getItemEnchantmentLevel(EnchantmentRegistry.HAUNTED.get(), (ItemStack) (Object) this); - if (enchantmentLevel > 0) { - amount += enchantmentLevel; - } - copied.put(key, new AttributeModifier( - modifier.getId(), modifier.getName(), amount, modifier.getOperation() - )); - } else if (modifier.getId().equals(BASE_ATTACK_DAMAGE_UUID) && getItem() instanceof MalumScytheItem) { - AttributeInstance instance = player.getAttribute(AttributeRegistry.SCYTHE_PROFICIENCY.get()); - if (instance != null && instance.getValue() > 0) { - amount += instance.getValue() * 0.5f; - } + if (modifier.getId() != null) { + if (modifier.getId().equals(LodestoneAttributeRegistry.UUIDS.get(LodestoneAttributeRegistry.MAGIC_DAMAGE))) { + int enchantmentLevel = EnchantmentHelper.getItemEnchantmentLevel(EnchantmentRegistry.HAUNTED.get(), (ItemStack) (Object) this); + if (enchantmentLevel > 0) { + amount += enchantmentLevel; + } + + copied.put(key, new AttributeModifier( + modifier.getId(), modifier.getName(), amount, modifier.getOperation() + )); + } else if (modifier.getId().equals(BASE_ATTACK_DAMAGE_UUID) && getItem() instanceof MalumScytheItem) { + AttributeInstance instance = player.getAttribute(AttributeRegistry.SCYTHE_PROFICIENCY.get()); + if (instance != null && instance.getValue() > 0) { + amount += instance.getValue() * 0.5f; + } - copied.put(key, new AttributeModifier( - modifier.getId(), modifier.getName(), amount, modifier.getOperation() - )); - } else { - copied.put(key, modifier); + copied.put(key, new AttributeModifier( + modifier.getId(), modifier.getName(), amount, modifier.getOperation() + )); + } else { + copied.put(key, modifier); + } } + + } return copied; diff --git a/src/main/java/com/sammy/malum/registry/common/block/BlockEntityRegistry.java b/src/main/java/com/sammy/malum/registry/common/block/BlockEntityRegistry.java index 914f43522..9fb787ba2 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/BlockEntityRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/block/BlockEntityRegistry.java @@ -71,7 +71,7 @@ public static Block[] getBlocks(Class... blockClasses) { Collection> blocks = BlockRegistry.BLOCKS.getEntries(); List matchingBlocks = new ArrayList<>(); for (RegistryObject registryObject : blocks) { - if (Arrays.stream(blockClasses).anyMatch(b -> b.isInstance(registryObject.get()))) { + if (registryObject.isPresent() && Arrays.stream(blockClasses).anyMatch(b -> b.isInstance(registryObject.get()))) { matchingBlocks.add(registryObject.get()); } } diff --git a/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java b/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java index 9b38b288b..b6876006d 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/block/BlockRegistry.java @@ -45,7 +45,10 @@ import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.properties.BlockSetType; +import net.minecraft.world.level.block.state.properties.WoodType; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.RegisterColorHandlersEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.DeferredRegister; @@ -144,8 +147,8 @@ public class BlockRegistry { public static final RegistryObject RUNIC_TAINTED_ROCK_TILES_STAIRS = BLOCKS.register("runic_tainted_rock_tiles_stairs", () -> new StairBlock(() -> TAINTED_ROCK.get().defaultBlockState(), MalumBlockProperties.TAINTED_ROCK().addTags(STAIRS))); public static final RegistryObject RUNIC_SMALL_TAINTED_ROCK_BRICKS_STAIRS = BLOCKS.register("runic_small_tainted_rock_bricks_stairs", () -> new StairBlock(() -> TAINTED_ROCK.get().defaultBlockState(), MalumBlockProperties.TAINTED_ROCK().addTags(STAIRS))); - public static final RegistryObject TAINTED_ROCK_BUTTON = BLOCKS.register("tainted_rock_button", () -> new StoneButtonBlock(MalumBlockProperties.TAINTED_ROCK().addTag(BUTTONS))); - public static final RegistryObject TAINTED_ROCK_PRESSURE_PLATE = BLOCKS.register("tainted_rock_pressure_plate", () -> new PressurePlateBlock(MOBS, MalumBlockProperties.TAINTED_ROCK().addTag(PRESSURE_PLATES))); + public static final RegistryObject TAINTED_ROCK_BUTTON = BLOCKS.register("tainted_rock_button", () -> new ButtonBlock(MalumBlockProperties.TAINTED_ROCK().addTag(BUTTONS), BlockSetType.STONE, 20, false)); + public static final RegistryObject TAINTED_ROCK_PRESSURE_PLATE = BLOCKS.register("tainted_rock_pressure_plate", () -> new PressurePlateBlock(MOBS, MalumBlockProperties.TAINTED_ROCK().addTag(PRESSURE_PLATES), BlockSetType.STONE)); public static final RegistryObject TAINTED_ROCK_WALL = BLOCKS.register("tainted_rock_wall", () -> new WallBlock(MalumBlockProperties.TAINTED_ROCK().addTag(WALLS))); public static final RegistryObject TAINTED_ROCK_BRICKS_WALL = BLOCKS.register("tainted_rock_bricks_wall", () -> new WallBlock(MalumBlockProperties.TAINTED_ROCK().addTag(WALLS))); @@ -196,8 +199,8 @@ public class BlockRegistry { public static final RegistryObject RUNIC_TWISTED_ROCK_TILES_STAIRS = BLOCKS.register("runic_twisted_rock_tiles_stairs", () -> new StairBlock(() -> TWISTED_ROCK.get().defaultBlockState(), MalumBlockProperties.TWISTED_ROCK().addTags(STAIRS))); public static final RegistryObject RUNIC_SMALL_TWISTED_ROCK_BRICKS_STAIRS = BLOCKS.register("runic_small_twisted_rock_bricks_stairs", () -> new StairBlock(() -> TWISTED_ROCK.get().defaultBlockState(), MalumBlockProperties.TWISTED_ROCK().addTags(STAIRS))); - public static final RegistryObject TWISTED_ROCK_BUTTON = BLOCKS.register("twisted_rock_button", () -> new StoneButtonBlock(MalumBlockProperties.TWISTED_ROCK().addTag(BUTTONS))); - public static final RegistryObject TWISTED_ROCK_PRESSURE_PLATE = BLOCKS.register("twisted_rock_pressure_plate", () -> new PressurePlateBlock(MOBS, MalumBlockProperties.TWISTED_ROCK().addTag(PRESSURE_PLATES))); + public static final RegistryObject TWISTED_ROCK_BUTTON = BLOCKS.register("twisted_rock_button", () -> new ButtonBlock(MalumBlockProperties.TWISTED_ROCK().addTag(BUTTONS), BlockSetType.STONE, 20, false)); + public static final RegistryObject TWISTED_ROCK_PRESSURE_PLATE = BLOCKS.register("twisted_rock_pressure_plate", () -> new PressurePlateBlock(MOBS, MalumBlockProperties.TWISTED_ROCK().addTag(PRESSURE_PLATES), BlockSetType.STONE)); public static final RegistryObject TWISTED_ROCK_WALL = BLOCKS.register("twisted_rock_wall", () -> new WallBlock(MalumBlockProperties.TWISTED_ROCK().addTag(WALLS))); public static final RegistryObject TWISTED_ROCK_BRICKS_WALL = BLOCKS.register("twisted_rock_bricks_wall", () -> new WallBlock(MalumBlockProperties.TWISTED_ROCK().addTag(WALLS))); @@ -242,15 +245,15 @@ public class BlockRegistry { public static final RegistryObject CUT_RUNEWOOD_PLANKS = BLOCKS.register("cut_runewood_planks", () -> new Block(MalumBlockProperties.RUNEWOOD().addTags(PLANKS))); public static final RegistryObject RUNEWOOD_BEAM = BLOCKS.register("runewood_beam", () -> new RotatedPillarBlock(MalumBlockProperties.RUNEWOOD())); - public static final RegistryObject RUNEWOOD_DOOR = BLOCKS.register("runewood_door", () -> new DoorBlock(MalumBlockProperties.RUNEWOOD().addTags(DOORS, WOODEN_DOORS).setCutoutRenderType().noOcclusion())); - public static final RegistryObject RUNEWOOD_TRAPDOOR = BLOCKS.register("runewood_trapdoor", () -> new TrapDoorBlock(MalumBlockProperties.RUNEWOOD().addTags(TRAPDOORS, WOODEN_TRAPDOORS).setCutoutRenderType().noOcclusion())); - public static final RegistryObject SOLID_RUNEWOOD_TRAPDOOR = BLOCKS.register("solid_runewood_trapdoor", () -> new TrapDoorBlock(MalumBlockProperties.RUNEWOOD().addTags(TRAPDOORS, WOODEN_TRAPDOORS).noOcclusion())); + public static final RegistryObject RUNEWOOD_DOOR = BLOCKS.register("runewood_door", () -> new DoorBlock(MalumBlockProperties.RUNEWOOD().addTags(DOORS, WOODEN_DOORS).setCutoutRenderType().noOcclusion(), MalumBlockSetTypes.RUNEWOOD)); + public static final RegistryObject RUNEWOOD_TRAPDOOR = BLOCKS.register("runewood_trapdoor", () -> new TrapDoorBlock(MalumBlockProperties.RUNEWOOD().addTags(TRAPDOORS, WOODEN_TRAPDOORS).setCutoutRenderType().noOcclusion(), MalumBlockSetTypes.RUNEWOOD)); + public static final RegistryObject SOLID_RUNEWOOD_TRAPDOOR = BLOCKS.register("solid_runewood_trapdoor", () -> new TrapDoorBlock(MalumBlockProperties.RUNEWOOD().addTags(TRAPDOORS, WOODEN_TRAPDOORS).noOcclusion(), MalumBlockSetTypes.RUNEWOOD)); - public static final RegistryObject RUNEWOOD_BUTTON = BLOCKS.register("runewood_planks_button", () -> new WoodButtonBlock(MalumBlockProperties.RUNEWOOD().addTags(BUTTONS, WOODEN_BUTTONS).addTags(BUTTONS, WOODEN_BUTTONS))); - public static final RegistryObject RUNEWOOD_PRESSURE_PLATE = BLOCKS.register("runewood_planks_pressure_plate", () -> new PressurePlateBlock(EVERYTHING, MalumBlockProperties.RUNEWOOD().addTags(PRESSURE_PLATES, WOODEN_PRESSURE_PLATES))); + public static final RegistryObject RUNEWOOD_BUTTON = BLOCKS.register("runewood_planks_button", () -> new ButtonBlock(MalumBlockProperties.RUNEWOOD().addTags(BUTTONS, WOODEN_BUTTONS).addTags(BUTTONS, WOODEN_BUTTONS), MalumBlockSetTypes.RUNEWOOD, 20, true)); + public static final RegistryObject RUNEWOOD_PRESSURE_PLATE = BLOCKS.register("runewood_planks_pressure_plate", () -> new PressurePlateBlock(EVERYTHING, MalumBlockProperties.RUNEWOOD().addTags(PRESSURE_PLATES, WOODEN_PRESSURE_PLATES), MalumBlockSetTypes.RUNEWOOD)); public static final RegistryObject RUNEWOOD_FENCE = BLOCKS.register("runewood_planks_fence", () -> new FenceBlock(MalumBlockProperties.RUNEWOOD().addTags(FENCES, WOODEN_FENCES))); - public static final RegistryObject RUNEWOOD_FENCE_GATE = BLOCKS.register("runewood_planks_fence_gate", () -> new FenceGateBlock(MalumBlockProperties.RUNEWOOD().addTags(FENCE_GATES, FENCE_GATES_WOODEN))); + public static final RegistryObject RUNEWOOD_FENCE_GATE = BLOCKS.register("runewood_planks_fence_gate", () -> new FenceGateBlock(MalumBlockProperties.RUNEWOOD().addTags(FENCE_GATES, FENCE_GATES_WOODEN), WoodTypeRegistry.RUNEWOOD)); public static final RegistryObject RUNEWOOD_ITEM_STAND = BLOCKS.register("runewood_item_stand", () -> new ItemStandBlock<>(MalumBlockProperties.RUNEWOOD().noOcclusion()).setBlockEntity(BlockEntityRegistry.ITEM_STAND)); public static final RegistryObject RUNEWOOD_ITEM_PEDESTAL = BLOCKS.register("runewood_item_pedestal", () -> new WoodItemPedestalBlock<>(MalumBlockProperties.RUNEWOOD().noOcclusion()).setBlockEntity(BlockEntityRegistry.ITEM_PEDESTAL)); @@ -290,15 +293,15 @@ public class BlockRegistry { public static final RegistryObject CUT_SOULWOOD_PLANKS = BLOCKS.register("cut_soulwood_planks", () -> new Block(MalumBlockProperties.SOULWOOD().addTags(PLANKS))); public static final RegistryObject SOULWOOD_BEAM = BLOCKS.register("soulwood_beam", () -> new RotatedPillarBlock(MalumBlockProperties.SOULWOOD())); - public static final RegistryObject SOULWOOD_DOOR = BLOCKS.register("soulwood_door", () -> new DoorBlock(MalumBlockProperties.SOULWOOD().addTags(DOORS, WOODEN_DOORS).setCutoutRenderType().noOcclusion())); - public static final RegistryObject SOULWOOD_TRAPDOOR = BLOCKS.register("soulwood_trapdoor", () -> new TrapDoorBlock(MalumBlockProperties.SOULWOOD().addTags(TRAPDOORS, WOODEN_TRAPDOORS).setCutoutRenderType().noOcclusion())); - public static final RegistryObject SOLID_SOULWOOD_TRAPDOOR = BLOCKS.register("solid_soulwood_trapdoor", () -> new TrapDoorBlock(MalumBlockProperties.SOULWOOD().addTags(TRAPDOORS, WOODEN_TRAPDOORS).noOcclusion())); + public static final RegistryObject SOULWOOD_DOOR = BLOCKS.register("soulwood_door", () -> new DoorBlock(MalumBlockProperties.SOULWOOD().addTags(DOORS, WOODEN_DOORS).setCutoutRenderType().noOcclusion(), MalumBlockSetTypes.SOULWOOD)); + public static final RegistryObject SOULWOOD_TRAPDOOR = BLOCKS.register("soulwood_trapdoor", () -> new TrapDoorBlock(MalumBlockProperties.SOULWOOD().addTags(TRAPDOORS, WOODEN_TRAPDOORS).setCutoutRenderType().noOcclusion(), MalumBlockSetTypes.SOULWOOD)); + public static final RegistryObject SOLID_SOULWOOD_TRAPDOOR = BLOCKS.register("solid_soulwood_trapdoor", () -> new TrapDoorBlock(MalumBlockProperties.SOULWOOD().addTags(TRAPDOORS, WOODEN_TRAPDOORS).noOcclusion(), MalumBlockSetTypes.SOULWOOD)); - public static final RegistryObject SOULWOOD_BUTTON = BLOCKS.register("soulwood_planks_button", () -> new WoodButtonBlock(MalumBlockProperties.SOULWOOD().addTags(BUTTONS, WOODEN_BUTTONS))); - public static final RegistryObject SOULWOOD_PRESSURE_PLATE = BLOCKS.register("soulwood_planks_pressure_plate", () -> new PressurePlateBlock(EVERYTHING, MalumBlockProperties.SOULWOOD().addTags(PRESSURE_PLATES, WOODEN_PRESSURE_PLATES))); + public static final RegistryObject SOULWOOD_BUTTON = BLOCKS.register("soulwood_planks_button", () -> new ButtonBlock(MalumBlockProperties.SOULWOOD().addTags(BUTTONS, WOODEN_BUTTONS), MalumBlockSetTypes.SOULWOOD, 20, true)); + public static final RegistryObject SOULWOOD_PRESSURE_PLATE = BLOCKS.register("soulwood_planks_pressure_plate", () -> new PressurePlateBlock(EVERYTHING, MalumBlockProperties.SOULWOOD().addTags(PRESSURE_PLATES, WOODEN_PRESSURE_PLATES), MalumBlockSetTypes.SOULWOOD)); public static final RegistryObject SOULWOOD_FENCE = BLOCKS.register("soulwood_planks_fence", () -> new FenceBlock(MalumBlockProperties.SOULWOOD().addTags(FENCES, WOODEN_FENCES))); - public static final RegistryObject SOULWOOD_FENCE_GATE = BLOCKS.register("soulwood_planks_fence_gate", () -> new FenceGateBlock(MalumBlockProperties.SOULWOOD().addTags(FENCE_GATES, FENCE_GATES_WOODEN))); + public static final RegistryObject SOULWOOD_FENCE_GATE = BLOCKS.register("soulwood_planks_fence_gate", () -> new FenceGateBlock(MalumBlockProperties.SOULWOOD().addTags(FENCE_GATES, FENCE_GATES_WOODEN), WoodTypeRegistry.SOULWOOD)); public static final RegistryObject SOULWOOD_ITEM_STAND = BLOCKS.register("soulwood_item_stand", () -> new ItemStandBlock<>(MalumBlockProperties.SOULWOOD().noOcclusion()).setBlockEntity(BlockEntityRegistry.ITEM_STAND)); public static final RegistryObject SOULWOOD_ITEM_PEDESTAL = BLOCKS.register("soulwood_item_pedestal", () -> new WoodItemPedestalBlock<>(MalumBlockProperties.SOULWOOD().noOcclusion()).setBlockEntity(BlockEntityRegistry.ITEM_PEDESTAL)); @@ -363,7 +366,7 @@ public class BlockRegistry { public static final RegistryObject BLOCK_OF_HALLOWED_GOLD = BLOCKS.register("block_of_hallowed_gold", () -> new Block(MalumBlockProperties.HALLOWED_GOLD())); public static final RegistryObject BLOCK_OF_SOUL_STAINED_STEEL = BLOCKS.register("block_of_soul_stained_steel", () -> new Block(MalumBlockProperties.SOUL_STAINED_STEEL_BLOCK())); - public static final RegistryObject BLOCK_OF_ROTTING_ESSENCE = BLOCKS.register("block_of_rotting_essence", () -> new Block(new LodestoneBlockProperties(Material.STONE, MaterialColor.COLOR_RED).needsPickaxe().addTags(STORAGE_BLOCKS).strength(1F, 6.0F).sound(SoundType.CORAL_BLOCK))); + public static final RegistryObject BLOCK_OF_ROTTING_ESSENCE = BLOCKS.register("block_of_rotting_essence", () -> new Block(new LodestoneBlockProperties().needsPickaxe().addTags(STORAGE_BLOCKS).strength(1F, 6.0F).sound(SoundType.CORAL_BLOCK))); public static final RegistryObject BLOCK_OF_GRIM_TALC = BLOCKS.register("block_of_grim_talc", () -> new Block(LodestoneBlockProperties.copy(Blocks.BONE_BLOCK).needsPickaxe().addTags(STORAGE_BLOCKS))); public static final RegistryObject BLOCK_OF_ALCHEMICAL_CALX = BLOCKS.register("block_of_alchemical_calx", () -> new Block(LodestoneBlockProperties.copy(Blocks.CALCITE).needsPickaxe().addTags(STORAGE_BLOCKS))); public static final RegistryObject BLOCK_OF_ASTRAL_WEAVE = BLOCKS.register("block_of_astral_weave", () -> new Block(LodestoneBlockProperties.copy(Blocks.LIGHT_BLUE_WOOL).needsPickaxe().needsHoe().addTags(STORAGE_BLOCKS))); @@ -379,7 +382,7 @@ public class BlockRegistry { public static class ClientOnly { @SubscribeEvent - public static void setBlockColors(ColorHandlerEvent.Block event) { + public static void setBlockColors(RegisterColorHandlersEvent.Block event) { BlockColors blockColors = event.getBlockColors(); blockColors.register((s, l, p, c) -> { BlockEntity blockEntity = l.getBlockEntity(p); diff --git a/src/main/java/com/sammy/malum/registry/common/block/MalumBlockSetTypes.java b/src/main/java/com/sammy/malum/registry/common/block/MalumBlockSetTypes.java new file mode 100644 index 000000000..19bbdb3ac --- /dev/null +++ b/src/main/java/com/sammy/malum/registry/common/block/MalumBlockSetTypes.java @@ -0,0 +1,13 @@ +package com.sammy.malum.registry.common.block; + +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.properties.BlockSetType; + +public class MalumBlockSetTypes { + public static final BlockSetType RUNEWOOD = BlockSetType.register(new BlockSetType("runewood")); + public static final BlockSetType SOULWOOD = BlockSetType.register(new BlockSetType("soulwood")); + public static final BlockSetType TAINTED_ROCK = BlockSetType.register(new BlockSetType("tainted_rock", true, SoundType.STONE, SoundEvents.IRON_DOOR_CLOSE, SoundEvents.IRON_DOOR_OPEN, SoundEvents.IRON_TRAPDOOR_CLOSE, SoundEvents.IRON_TRAPDOOR_OPEN, SoundEvents.STONE_PRESSURE_PLATE_CLICK_OFF, SoundEvents.STONE_PRESSURE_PLATE_CLICK_ON, SoundEvents.STONE_BUTTON_CLICK_OFF, SoundEvents.STONE_BUTTON_CLICK_ON)); + public static final BlockSetType TWISTED_ROCK = BlockSetType.register(new BlockSetType("twisted_rock", true, SoundType.STONE, SoundEvents.IRON_DOOR_CLOSE, SoundEvents.IRON_DOOR_OPEN, SoundEvents.IRON_TRAPDOOR_CLOSE, SoundEvents.IRON_TRAPDOOR_OPEN, SoundEvents.STONE_PRESSURE_PLATE_CLICK_OFF, SoundEvents.STONE_PRESSURE_PLATE_CLICK_ON, SoundEvents.STONE_BUTTON_CLICK_OFF, SoundEvents.STONE_BUTTON_CLICK_ON)); + +} diff --git a/src/main/java/com/sammy/malum/registry/common/block/WoodTypeRegistry.java b/src/main/java/com/sammy/malum/registry/common/block/WoodTypeRegistry.java index 0e78702d5..9e4fa5093 100644 --- a/src/main/java/com/sammy/malum/registry/common/block/WoodTypeRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/block/WoodTypeRegistry.java @@ -1,22 +1,20 @@ package com.sammy.malum.registry.common.block; +import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.block.state.properties.WoodType; +import java.util.ArrayList; +import java.util.List; + //@Mod.EventBusSubscriber(modid= MalumMod.MALUM, bus= Mod.EventBusSubscriber.Bus.MOD) public class WoodTypeRegistry { - //public static List WOOD_TYPES = new ArrayList<>(); + public static List WOOD_TYPES = new ArrayList<>(); //public static final WoodType RUNEWOOD = WoodType.register(new MalumWoodType("runewood")); //public static final WoodType SOULWOOD = WoodType.register(new MalumWoodType("soulwood")); public static final WoodType RUNEWOOD = WoodType.register(new WoodType("runewood", MalumBlockSetTypes.RUNEWOOD)); public static final WoodType SOULWOOD = WoodType.register(new WoodType("soulwood", MalumBlockSetTypes.SOULWOOD)); - /* - static class MalumWoodType extends WoodType { - public MalumWoodType(String nameIn) { - super("malum:" + nameIn); - WOOD_TYPES.add(this); - } - } - */ + + } diff --git a/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java b/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java index fde32f1b2..8bd086af1 100644 --- a/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/entity/EntityRegistry.java @@ -55,8 +55,8 @@ public class EntityRegistry { public static class ClientOnly { @SubscribeEvent public static void bindEntityRenderers(EntityRenderersEvent.RegisterRenderers event) { - EntityRenderers.register(EntityRegistry.RUNEWOOD_BOAT.get(), (manager) -> new MalumBoatRenderer(manager, "runewood")); - EntityRenderers.register(EntityRegistry.SOULWOOD_BOAT.get(), (manager) -> new MalumBoatRenderer(manager, "soulwood")); + EntityRenderers.register(EntityRegistry.RUNEWOOD_BOAT.get(), (manager) -> new MalumBoatRenderer(manager, "runewood", false));//TODO add hasChest true too + EntityRenderers.register(EntityRegistry.SOULWOOD_BOAT.get(), (manager) -> new MalumBoatRenderer(manager, "soulwood", false)); EntityRenderers.register(EntityRegistry.NATURAL_SPIRIT.get(), FloatingItemEntityRenderer::new); EntityRenderers.register(EntityRegistry.SCYTHE_BOOMERANG.get(), ScytheBoomerangEntityRenderer::new); diff --git a/src/main/java/com/sammy/malum/registry/common/item/tabs/CreativeTabRegistry.java b/src/main/java/com/sammy/malum/registry/common/item/tabs/CreativeTabRegistry.java index be7630f06..cd2bc14c2 100644 --- a/src/main/java/com/sammy/malum/registry/common/item/tabs/CreativeTabRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/item/tabs/CreativeTabRegistry.java @@ -15,55 +15,48 @@ public class CreativeTabRegistry { public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MalumMod.MALUM); - public static final RegistryObject CONTENT = CREATIVE_MODE_TABS.register(MalumMod.MALUM, + public static final RegistryObject CONTENT = CREATIVE_MODE_TABS.register(MalumMod.MALUM + ".content", () -> CreativeModeTab.builder() - .title(Component.translatable("itemGroup." + MalumMod.MALUM + ".basis_of_magic")) + .title(Component.translatable("itemGroup." + MalumMod.MALUM + "_basis_of_magic")) .icon(() -> ItemRegistry.SPIRIT_ALTAR.get().getDefaultInstance()) .displayItems((parameters, output) -> output.accept(ItemRegistry.SPIRIT_ALTAR.get())).build() ); - public static final RegistryObject BUILDING = CREATIVE_MODE_TABS.register(MalumMod.MALUM, + public static final RegistryObject BUILDING = CREATIVE_MODE_TABS.register(MalumMod.MALUM + ".building", () -> CreativeModeTab.builder() - .title(Component.translatable("itemGroup." + MalumMod.MALUM + ".arcane_construct")) + .title(Component.translatable("itemGroup." + MalumMod.MALUM + "_arcane_construct")) .icon(() -> ItemRegistry.TAINTED_ROCK.get().getDefaultInstance()) .displayItems((parameters, output) -> output.accept(ItemRegistry.TAINTED_ROCK.get())).build() ); - public static final RegistryObject NATURE = CREATIVE_MODE_TABS.register(MalumMod.MALUM, + public static final RegistryObject NATURE = CREATIVE_MODE_TABS.register(MalumMod.MALUM + ".nature", () -> CreativeModeTab.builder() - .title(Component.translatable("itemGroup." + MalumMod.MALUM + ".natural_wonders")) + .title(Component.translatable("itemGroup." + MalumMod.MALUM + "_natural_wonders")) .icon(() -> ItemRegistry.RUNEWOOD_SAPLING.get().getDefaultInstance()) .displayItems((parameters, output) -> output.accept(ItemRegistry.RUNEWOOD_SAPLING.get())).build() ); - public static final RegistryObject METALLURGY = CREATIVE_MODE_TABS.register(MalumMod.MALUM, + public static final RegistryObject METALLURGY = CREATIVE_MODE_TABS.register(MalumMod.MALUM + ".metallurgy", () -> CreativeModeTab.builder() - .title(Component.translatable("itemGroup." + MalumMod.MALUM + ".metallurgic_magics")) + .title(Component.translatable("itemGroup." + MalumMod.MALUM + "_metallurgic_magics")) .icon(() -> ItemRegistry.ALCHEMICAL_IMPETUS.get().getDefaultInstance()) .displayItems((parameters, output) -> output.accept(ItemRegistry.ALCHEMICAL_IMPETUS.get())).build() ); - public static final RegistryObject VOID = CREATIVE_MODE_TABS.register(MalumMod.MALUM, + public static final RegistryObject VOID = CREATIVE_MODE_TABS.register(MalumMod.MALUM + ".void", () -> CreativeModeTab.builder() - .title(Component.translatable("itemGroup." + MalumMod.MALUM + ".void_chronicles")) + .title(Component.translatable("itemGroup." + MalumMod.MALUM + "_void_chronicles")) .icon(() -> ItemRegistry.STRANGE_NUCLEUS.get().getDefaultInstance()) .displayItems((parameters, output) -> output.accept(ItemRegistry.STRANGE_NUCLEUS.get())).build() ); - public static final RegistryObject COSMETIC = CREATIVE_MODE_TABS.register(MalumMod.MALUM, + public static final RegistryObject COSMETIC = CREATIVE_MODE_TABS.register(MalumMod.MALUM + ".cosmetic", () -> CreativeModeTab.builder() - .title(Component.translatable("itemGroup." + MalumMod.MALUM + ".cosmetics")) + .title(Component.translatable("itemGroup." + MalumMod.MALUM + "_cosmetics")) .icon(() -> ItemRegistry.WEAVERS_WORKBENCH.get().getDefaultInstance()) .displayItems((parameters, output) -> output.accept(ItemRegistry.WEAVERS_WORKBENCH.get())).build() ); - //public static final MalumTab CONTENT = new MalumTab("basis_of_magic", ItemRegistry.SPIRIT_ALTAR); - //public static final MalumTab BUILDING = new MalumTab("arcane_construct", ItemRegistry.TAINTED_ROCK); - //public static final MalumTab NATURE = new MalumTab("natural_wonders", ItemRegistry.RUNEWOOD_SAPLING); - //public static final MalumTab METALLURGY = new MalumTab("metallurgic_magics", ItemRegistry.ALCHEMICAL_IMPETUS); - //public static final MalumTab VOID = new MalumTab("void_chronicles", ItemRegistry.STRANGE_NUCLEUS); - //public static final MalumTab COSMETIC = new MalumTab("cosmetics", ItemRegistry.WEAVERS_WORKBENCH); - public static void populateItemGroups(BuildCreativeModeTabContentsEvent event) { if (event.getTabKey() == CONTENT.getKey()) { event.accept(SACRED_SPIRIT); @@ -284,7 +277,7 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event) { //endregion } - if (event.getTabKey() == METALLURGY.getKey()) {//TODO separate NODE and IMPEDUS + if (event.getTabKey() == METALLURGY.getKey()) { event.accept(CRACKED_IRON_IMPETUS); event.accept(IRON_IMPETUS); event.accept(IRON_NODE); @@ -324,6 +317,7 @@ public static void populateItemGroups(BuildCreativeModeTabContentsEvent event) { } if (event.getTabKey() == CONTENT.getKey()) { + event.accept(ENCYCLOPEDIA_ARCANA); event.accept(SPIRIT_POUCH); event.accept(CRUDE_SCYTHE); event.accept(SOUL_STAINED_STEEL_SCYTHE); diff --git a/src/main/java/com/sammy/malum/registry/common/worldgen/BiomeTagRegistry.java b/src/main/java/com/sammy/malum/registry/common/worldgen/BiomeTagRegistry.java new file mode 100644 index 000000000..b768a33cd --- /dev/null +++ b/src/main/java/com/sammy/malum/registry/common/worldgen/BiomeTagRegistry.java @@ -0,0 +1,12 @@ +package com.sammy.malum.registry.common.worldgen; + +import com.sammy.malum.MalumMod; +import net.minecraft.core.registries.Registries; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.biome.Biome; + +public class BiomeTagRegistry { + public static final TagKey HAS_SOULSTONE = TagKey.create(Registries.BIOME, MalumMod.malumPath("has_soulstone")); + public static final TagKey HAS_BRILLIANT = TagKey.create(Registries.BIOME, MalumMod.malumPath("has_brilliant")); + public static final TagKey HAS_BLAZING_QUARTZ = TagKey.create(Registries.BIOME, MalumMod.malumPath("has_blazing_quartz")); +} diff --git a/src/main/java/com/sammy/malum/registry/common/worldgen/ConfiguredFeatureRegistry.java b/src/main/java/com/sammy/malum/registry/common/worldgen/ConfiguredFeatureRegistry.java index 31965c0f4..aaf861017 100644 --- a/src/main/java/com/sammy/malum/registry/common/worldgen/ConfiguredFeatureRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/worldgen/ConfiguredFeatureRegistry.java @@ -1,10 +1,58 @@ package com.sammy.malum.registry.common.worldgen; +import com.sammy.malum.MalumMod; +import com.sammy.malum.registry.common.block.BlockRegistry; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstapContext; +import net.minecraft.data.worldgen.features.FeatureUtils; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.BlockTags; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration; +import net.minecraft.world.level.levelgen.feature.configurations.RandomFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest; +import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest; -public interface ConfiguredFeatureRegistry { +import java.util.List; +import java.util.function.Supplier; - static void bootstrap(BootstapContext> configuredFeatureBootstapContext) { + +public class ConfiguredFeatureRegistry { + + public static final ResourceKey> CONFIGURED_SOULSTONE_ORE = ResourceKey.create(Registries.CONFIGURED_FEATURE, MalumMod.malumPath("soulstone_ore")); + public static final ResourceKey> CONFIGURED_BRILLIANT_ORE = ResourceKey.create(Registries.CONFIGURED_FEATURE, MalumMod.malumPath("brilliant_ore")); + public static final ResourceKey> CONFIGURED_NATURAL_QUARTZ_ORE = ResourceKey.create(Registries.CONFIGURED_FEATURE, MalumMod.malumPath("natural_quartz_ore")); + + + private static final RuleTest STONE_ORE_REPLACEABLES = new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES); + private static final RuleTest DEEPSLATE_ORE_REPLACEABLES = new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES); + + public static final List SOULSTONE_TARGET_LIST = List.of( + OreConfiguration.target(STONE_ORE_REPLACEABLES, BlockRegistry.SOULSTONE_ORE.get().defaultBlockState()), + OreConfiguration.target(DEEPSLATE_ORE_REPLACEABLES, BlockRegistry.DEEPSLATE_SOULSTONE_ORE.get().defaultBlockState())); + + public static final List BRILLIANT_TARGET_LIST = List.of( + OreConfiguration.target(STONE_ORE_REPLACEABLES, BlockRegistry.BRILLIANT_STONE.get().defaultBlockState()), + OreConfiguration.target(DEEPSLATE_ORE_REPLACEABLES, BlockRegistry.BRILLIANT_DEEPSLATE.get().defaultBlockState())); + + public static final List NATURAL_QUARTZ_TARGET_LIST = List.of( + OreConfiguration.target(STONE_ORE_REPLACEABLES, BlockRegistry.NATURAL_QUARTZ_ORE.get().defaultBlockState()), + OreConfiguration.target(DEEPSLATE_ORE_REPLACEABLES, BlockRegistry.DEEPSLATE_QUARTZ_ORE.get().defaultBlockState())); + + public static void bootstrap(BootstapContext> context) { + register(context, ConfiguredFeatureRegistry.CONFIGURED_SOULSTONE_ORE, () -> addOreConfig(SOULSTONE_TARGET_LIST, 30)); + register(context, ConfiguredFeatureRegistry.CONFIGURED_BRILLIANT_ORE, () -> addOreConfig(BRILLIANT_TARGET_LIST, 30)); + register(context, ConfiguredFeatureRegistry.CONFIGURED_NATURAL_QUARTZ_ORE, () -> addOreConfig(NATURAL_QUARTZ_TARGET_LIST, 30)); + } + + private static ConfiguredFeature addOreConfig(List targetList, int veinSize) { + return new ConfiguredFeature<>(Feature.ORE, new OreConfiguration(targetList, veinSize)); + } + + private static void register(BootstapContext> context, ResourceKey> featureKey, Supplier> feature) { + context.register(featureKey, feature.get()); } } diff --git a/src/main/java/com/sammy/malum/registry/common/worldgen/FeatureRegistry.java b/src/main/java/com/sammy/malum/registry/common/worldgen/FeatureRegistry.java index d311f9db7..551e0b3c8 100644 --- a/src/main/java/com/sammy/malum/registry/common/worldgen/FeatureRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/worldgen/FeatureRegistry.java @@ -40,7 +40,7 @@ @Mod.EventBusSubscriber(modid = MalumMod.MALUM, bus = Mod.EventBusSubscriber.Bus.MOD) public class FeatureRegistry { -/* + public static final DeferredRegister> FEATURE_TYPES = DeferredRegister.create(ForgeRegistries.FEATURES, MALUM); public static final RegistryObject WEEPING_WELL = FEATURE_TYPES.register("weeping_well", WeepingWellFeature::new); @@ -48,7 +48,7 @@ public class FeatureRegistry { public static final RegistryObject SOULWOOD_TREE = FEATURE_TYPES.register("soulwood_tree", SoulwoodTreeFeature::new); public static final RegistryObject CTHONIC_GOLD_GEODE = FEATURE_TYPES.register("cthonic_gold_geode", () -> new RareEarthsGeode(GeodeConfiguration.CODEC)); - +/* public static final class ConfiguredFeatures { public static final Holder> RUNEWOOD_TREE_FEATURE = FeatureUtils.register("runewood_tree", FeatureRegistry.RUNEWOOD_TREE.get(), INSTANCE); diff --git a/src/main/java/com/sammy/malum/registry/common/worldgen/PlacedFeatureRegistry.java b/src/main/java/com/sammy/malum/registry/common/worldgen/PlacedFeatureRegistry.java index de2c1aadd..1c692f4ae 100644 --- a/src/main/java/com/sammy/malum/registry/common/worldgen/PlacedFeatureRegistry.java +++ b/src/main/java/com/sammy/malum/registry/common/worldgen/PlacedFeatureRegistry.java @@ -1,9 +1,53 @@ package com.sammy.malum.registry.common.worldgen; +import com.sammy.malum.MalumMod; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; import net.minecraft.data.worldgen.BootstapContext; -import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.levelgen.VerticalAnchor; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.placement.*; -public interface PlacedFeatureRegistry { - static void bootstrap(BootstapContext placedFeatureBootstapContext) { +import java.util.List; + +public class PlacedFeatureRegistry { + + public static final ResourceKey ORE_SOULSTONE = ResourceKey.create(Registries.PLACED_FEATURE, MalumMod.malumPath("ore_soulstone")); + + public static final ResourceKey ORE_BRILLIANT = ResourceKey.create(Registries.PLACED_FEATURE, MalumMod.malumPath("ore_brilliant")); + public static final ResourceKey ORE_NATURAL_QUARTZ = ResourceKey.create(Registries.PLACED_FEATURE, MalumMod.malumPath("ore_natural_quartz")); + //TODO public static final ResourceKey ORE_BLAZING_QUARTZ = ResourceKey.create(Registries.PLACED_FEATURE, MalumMod.malumPath("ore_blazing_quartz")); + + /*TODO + public static final ResourceKey GEODE_NATURAL_QUARTZ_UPPER = ResourceKey.create(Registries.PLACED_FEATURE, MalumMod.malumPath("geode_quartz_upper")); + public static final ResourceKey GEODE_NATURAL_QUARTZ_LOWER = ResourceKey.create(Registries.PLACED_FEATURE, MalumMod.malumPath("geode_quartz_lower")); + + public static final ResourceKey GEODE_CTHONIC_GOLD_FEATURE = ResourceKey.create(Registries.PLACED_FEATURE, MalumMod.malumPath("geode_rare_earth")); + + */ + + public static void bootstrap(BootstapContext context) { + register(context, PlacedFeatureRegistry.ORE_SOULSTONE, addOreFeature(context.lookup(Registries.CONFIGURED_FEATURE) + .get(ConfiguredFeatureRegistry.CONFIGURED_SOULSTONE_ORE).orElseThrow(), -16, 112, 16)); + + register(context, PlacedFeatureRegistry.ORE_BRILLIANT, addOreFeature(context.lookup(Registries.CONFIGURED_FEATURE) + .get(ConfiguredFeatureRegistry.CONFIGURED_BRILLIANT_ORE).orElseThrow(), -16, 112, 16)); + + register(context, PlacedFeatureRegistry.ORE_NATURAL_QUARTZ, addOreFeature(context.lookup(Registries.CONFIGURED_FEATURE) + .get(ConfiguredFeatureRegistry.CONFIGURED_NATURAL_QUARTZ_ORE).orElseThrow(), -16, 112, 16)); + + } + + private static PlacedFeature addOreFeature(Holder> configureFeature, int minHeight, int maxHeight, int count) { + return addFeaturePlacement(configureFeature, HeightRangePlacement.triangle(VerticalAnchor.absolute(minHeight), VerticalAnchor.absolute(maxHeight)), CountPlacement.of(count), InSquarePlacement.spread(), BiomeFilter.biome()); + } + + private static PlacedFeature addFeaturePlacement(Holder> configureFeature, PlacementModifier... placementModifiers) { + return new PlacedFeature(configureFeature, List.of(placementModifiers)); + } + + private static void register(BootstapContext context, ResourceKey featureKey, PlacedFeature feature) { + context.register(featureKey, feature); } } diff --git a/src/main/java/com/sammy/malum/registry/common/worldgen/StructureRegistry.java b/src/main/java/com/sammy/malum/registry/common/worldgen/StructureRegistry.java new file mode 100644 index 000000000..748446fdf --- /dev/null +++ b/src/main/java/com/sammy/malum/registry/common/worldgen/StructureRegistry.java @@ -0,0 +1,21 @@ +package com.sammy.malum.registry.common.worldgen; + +import com.mojang.serialization.Codec; +import com.sammy.malum.MalumMod; +import com.sammy.malum.common.worldgen.WeepingWellStructure; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.level.levelgen.structure.Structure; +import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; + +public class StructureRegistry { + public static final DeferredRegister> STRUCTURES = DeferredRegister.create(Registries.STRUCTURE_TYPE, MalumMod.MALUM); + + public static final RegistryObject> WEEPING_WELL = STRUCTURES.register("weeping_well", () -> explicitStructureTypeTyping(WeepingWellStructure.CODEC)); + + private static StructureType explicitStructureTypeTyping(Codec structureCodec) { + return () -> structureCodec; + } +} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 33d2883d5..9fecf2d20 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -130,4 +130,6 @@ public net.minecraft.world.entity.decoration.ArmorStand m_31675_(Z)V # setShowAr public net.minecraft.world.item.ArmorItem f_265987_ -public net.minecraft.world.item.ArmorItem f_265987_ # ARMOR_MODIFIER_UUID_PER_TYPE \ No newline at end of file +public net.minecraft.world.item.ArmorItem f_265987_ # ARMOR_MODIFIER_UUID_PER_TYPE + +public-f net.minecraft.data.recipes.RecipeProvider m_6055_()Ljava/lang/String; # getName \ No newline at end of file diff --git a/src/main/resources/assets/malum/models/item/creative_scythe.json b/src/main/resources/assets/malum/models/item/creative_scythe.json index 3092e6690..a2621dc5f 100644 --- a/src/main/resources/assets/malum/models/item/creative_scythe.json +++ b/src/main/resources/assets/malum/models/item/creative_scythe.json @@ -1,6 +1,6 @@ { "parent": "item/handheld", - "loader": "forge:separate-perspective", + "loader": "forge:separate_transforms", "base": { "parent": "malum:item/creative_scythe_handheld" }, diff --git a/src/main/resources/assets/malum/models/item/crude_scythe.json b/src/main/resources/assets/malum/models/item/crude_scythe.json index f2ac259f0..8b37d75dc 100644 --- a/src/main/resources/assets/malum/models/item/crude_scythe.json +++ b/src/main/resources/assets/malum/models/item/crude_scythe.json @@ -1,6 +1,6 @@ { "parent": "item/handheld", - "loader": "forge:separate-perspective", + "loader": "forge:separate_transforms", "base": { "parent": "malum:item/crude_scythe_handheld" }, diff --git a/src/main/resources/assets/malum/models/item/soul_stained_steel_scythe.json b/src/main/resources/assets/malum/models/item/soul_stained_steel_scythe.json index 62bae9bda..99b2be176 100644 --- a/src/main/resources/assets/malum/models/item/soul_stained_steel_scythe.json +++ b/src/main/resources/assets/malum/models/item/soul_stained_steel_scythe.json @@ -1,6 +1,6 @@ { "parent": "item/handheld", - "loader": "forge:separate-perspective", + "loader": "forge:separate_transforms", "base": { "parent": "malum:item/soul_stained_steel_scythe_handheld" }, diff --git a/src/main/resources/data/malum/worldgen/configured_feature/ore_blazing_quartz.json b/src/main/resources/data/malum/worldgen/configured_feature/ore_blazing_quartz.json deleted file mode 100644 index 3e6f05080..000000000 --- a/src/main/resources/data/malum/worldgen/configured_feature/ore_blazing_quartz.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:ore", - "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 14, - "targets": [ - { - "state": { - "Name": "malum:blazing_quartz_ore" - }, - "target": { - "block": "minecraft:netherrack", - "predicate_type": "minecraft:block_match" - } - } - ] - } -} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/configured_feature/ore_natural_quartz.json b/src/main/resources/data/malum/worldgen/configured_feature/ore_natural_quartz.json deleted file mode 100644 index 8f3de06d9..000000000 --- a/src/main/resources/data/malum/worldgen/configured_feature/ore_natural_quartz.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:ore", - "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 5, - "targets": [ - { - "state": { - "Name": "malum:natural_quartz_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:stone_ore_replaceables" - } - }, - { - "state": { - "Name": "malum:deepslate_quartz_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:deepslate_ore_replaceables" - } - } - ] - } -} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/placed_feature/ore_brilliant.json b/src/main/resources/data/malum/worldgen/placed_feature/ore_brilliant.json deleted file mode 100644 index f5975db0b..000000000 --- a/src/main/resources/data/malum/worldgen/placed_feature/ore_brilliant.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "feature": "malum:ore_brilliant", - "placement": [ - { - "count": 3, - "type": "minecraft:count" - }, - { - "type": "minecraft:in_square" - }, - { - "height": { - "min_inclusive": { - "absolute": -64 - }, - "max_inclusive": { - "absolute": 30 - }, - "type": "minecraft:uniform" - }, - "type": "minecraft:height_range" - }, - { - "type": "minecraft:biome" - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/placed_feature/ore_natural_quartz.json b/src/main/resources/data/malum/worldgen/placed_feature/ore_natural_quartz.json deleted file mode 100644 index fd2b6ba50..000000000 --- a/src/main/resources/data/malum/worldgen/placed_feature/ore_natural_quartz.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "feature": "malum:ore_natural_quartz", - "placement": [ - { - "count": 2, - "type": "minecraft:count" - }, - { - "type": "minecraft:in_square" - }, - { - "height": { - "min_inclusive": { - "absolute": -64 - }, - "max_inclusive": { - "absolute": 10 - }, - "type": "minecraft:uniform" - }, - "type": "minecraft:height_range" - }, - { - "type": "minecraft:biome" - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_lower.json b/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_lower.json deleted file mode 100644 index d07e1b06e..000000000 --- a/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_lower.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "feature": "malum:ore_soulstone_underground", - "placement": [ - { - "count": 8, - "type": "minecraft:count" - }, - { - "type": "minecraft:in_square" - }, - { - "height": { - "min_inclusive": { - "absolute": -64 - }, - "max_inclusive": { - "absolute": 30 - }, - "type": "minecraft:uniform" - }, - "type": "minecraft:height_range" - }, - { - "type": "minecraft:biome" - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_upper.json b/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_upper.json deleted file mode 100644 index 7232d0e00..000000000 --- a/src/main/resources/data/malum/worldgen/placed_feature/ore_soulstone_upper.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "feature": "malum:ore_soulstone_surface", - "placement": [ - { - "count": 8, - "type": "minecraft:count" - }, - { - "type": "minecraft:in_square" - }, - { - "height": { - "min_inclusive": { - "absolute": 60 - }, - "max_inclusive": { - "absolute": 100 - }, - "type": "minecraft:uniform" - }, - "type": "minecraft:height_range" - }, - { - "type": "minecraft:biome" - } - ] -} \ No newline at end of file From c1511369a0a94ba1642ab3951fcd96b985543678 Mon Sep 17 00:00:00 2001 From: mrsterner Date: Sat, 28 Oct 2023 18:56:48 +0200 Subject: [PATCH 4/5] datagen crash --- lib/lodestone-1.20.1-1.4.18.jar | Bin 580048 -> 0 bytes lib/lodestone-1.20.1-1.4.19.jar | Bin 580066 -> 0 bytes lib/lodestone-1.20.1-1.4.20.jar | Bin 580062 -> 0 bytes .../natural_quartz_ore.json | 9 ++++ .../configured_feature/runewood_tree.json | 4 ++ .../configured_feature/soulwood_tree.json | 4 ++ src/main/java/com/sammy/malum/MalumMod.java | 34 +++++---------- .../com/sammy/malum/config/CommonConfig.java | 4 +- .../com/sammy/malum/data/MalumBiomeTags.java | 1 + .../malum/data/MalumWorldgenProvider.java | 5 +++ .../common/worldgen/BiomeTagRegistry.java | 1 + .../worldgen/ConfiguredFeatureRegistry.java | 26 +++++++---- .../common/worldgen/FeatureRegistry.java | 1 - .../worldgen/PlacedFeatureRegistry.java | 41 ++++++++++++------ 14 files changed, 82 insertions(+), 48 deletions(-) delete mode 100644 lib/lodestone-1.20.1-1.4.18.jar delete mode 100644 lib/lodestone-1.20.1-1.4.19.jar delete mode 100644 lib/lodestone-1.20.1-1.4.20.jar create mode 100644 src/generated/resources/data/malum/worldgen/configured_feature/runewood_tree.json create mode 100644 src/generated/resources/data/malum/worldgen/configured_feature/soulwood_tree.json diff --git a/lib/lodestone-1.20.1-1.4.18.jar b/lib/lodestone-1.20.1-1.4.18.jar deleted file mode 100644 index e89924c429a9325a33a4612ae4637cc5192ae471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580048 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

?zB;GaO1-tEK_5YA9**>ZB+ckf0+EFfLRoypU~5 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

    3RBbj453=yBpOpEme)PB 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

E3ew>i4Fycho;e6b_=?yWl>>mLDn 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%0ARUIkZIb31XKoEcnu$G;C~%4M(r#iFq~ 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 TgcG+lzSoGq2}LrRQF8tVjhpq` diff --git a/lib/lodestone-1.20.1-1.4.19.jar b/lib/lodestone-1.20.1-1.4.19.jar deleted file mode 100644 index 380b50b94d776fc5adb07ead567a89da791db4f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 580066 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 I&Pg^W2-cuNT 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