Initial commit

This commit is contained in:
craisinlord committed 2026-06-22 14:47:55 -05:00
commit cd0af5a1d3
2557 files changed
+271980

No files matched your search

+106
View File
@@ -0,0 +1,106 @@
plugins {
id "com.github.johnrengelman.shadow" version "7.1.2"
}
architectury {
platformSetupLoomIde()
neoForge()
}
loom {
neoForge {
runs {
all {}
data {
data()
programArgs("--all", "--mod", "integrated_cobblemon")
programArgs("--existing", project(":common").file("src/main/resources").absolutePath)
programArgs("--output", project(":common").file("src/main/generated/resources").absolutePath)
all {}
}
}
}
}
configurations {
common
shadowCommon // Don't use shadow from the shadow plugin because we don't want IDEA to index this.
compileClasspath.extendsFrom common
runtimeClasspath.extendsFrom common
developmentForge.extendsFrom common
}
dependencies {
neoForge "net.neoforged:neoforge:${rootProject.neoforge_version}"
modLocalRuntime("curse.maven:intapi-${project.intapi_curseforge_id}:${project.intapi_curseforge_file_id_neoforge}")
implementation "software.bernie.geckolib:geckolib-neoforge-${minecraft_version}:${geckolib_version}"
compileOnly(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")))
modLocalRuntime(files(rootProject.file("infinite_dimensions_jars/infinity-2.7.1+1.21.1-neoforge.jar")))
modLocalRuntime("com.telepathicgrunt:CommandStructures-Neoforge:${project.commandstructures_neoforge}")
modLocalRuntime("com.telepathicgrunt:StructureVoidToggle-Neoforge:${project.structurevoidtoggle_neoforge}")
// modLocalRuntime("curse.maven:idas-${idas_curseforge_id}:${idas_curseforge_file_id}")
// modLocalRuntime("curse.maven:jei-${jei_curseforge_id}:${jei_curseforge_file_id}")
// modLocalRuntime("curse.maven:create-${create_curseforge_id}:${create_curseforge_file_id}")
// modLocalRuntime("curse.maven:theoneprobe-${top_curseforge_id}:${top_curseforge_file_id}")
// modLocalRuntime("curse.maven:worldedit-${worldedit_curseforge_id}:${worldedit_curseforge_file_id}")
// modLocalRuntime("curse.maven:alexsmobs-${alexsmobs_curseforge_id}:${alexsmobs_curseforge_file_id}")
// modLocalRuntime("curse.maven:citadel-${citadel_curseforge_id}:${citadel_curseforge_file_id}")
// modLocalRuntime("curse.maven:rs-${rs_curseforge_id}:${rs_curseforge_file_id}")
// modLocalRuntime("curse.maven:biomesoplenty-${bop_curseforge_id}:${bop_curseforge_file_id}")
// modLocalRuntime("curse.maven:tb-${tb_curseforge_id}:${tb_curseforge_file_id}")
// modLocalRuntime("curse.maven:quark-${quark_curseforge_id}:${quark_curseforge_file_id}")
// modLocalRuntime("curse.maven:zeta-${zeta_curseforge_id}:${zeta_curseforge_file_id}")
//
// modLocalRuntime("curse.maven:sup-${sup_curseforge_id}:${sup_curseforge_file_id}")
// modLocalRuntime("curse.maven:midnight-${midnight_curseforge_id}:${midnight_curseforge_file_id}")
// modLocalRuntime("curse.maven:waystones-${waystones_curseforge_id}:${waystones_curseforge_file_id}")
// modLocalRuntime("curse.maven:balm-${balm_curseforge_id}:${balm_curseforge_file_id}")
// implementation("curse.maven:if-${if_curseforge_id}:${if_curseforge_file_id}")
// modLocalRuntime("curse.maven:citadel-${citadel_curseforge_id}:${citadel_curseforge_file_id}")
common(project(path: ":common", configuration: "namedElements")) { transitive false }
shadowCommon(project(path: ":common", configuration: "transformProductionNeoForge")) { transitive = false }
// implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-common:${rootProject.mixin_extras}"))
// implementation(include("com.github.llamalad7.mixinextras:mixinextras-forge:${rootProject.mixin_extras}"))
}
processResources {
inputs.property "version", project.version
filesMatching("META-INF/neoforge.mods.toml") {
expand "version": project.version
}
}
shadowJar {
exclude "fabric.mod.json"
exclude "architectury.common.json"
configurations = [project.configurations.shadowCommon]
archiveClassifier.set("dev-shadow")
}
remapJar {
input.set shadowJar.archiveFile
dependsOn shadowJar
archiveClassifier.set(null)
}
jar {
archiveClassifier.set("dev")
}
sourcesJar {
def commonSources = project(":common").sourcesJar
dependsOn commonSources
from commonSources.archiveFile.map { zipTree(it) }
}
components.java {
withVariantsFromConfiguration(project.configurations.shadowRuntimeElements) {
skip()
}
}
+1
View File
@@ -0,0 +1 @@
loom.platform=neoforge
@@ -0,0 +1,291 @@
package com.craisinlord.antarchy.neoforge;
import com.craisinlord.antarchy.config.AntarchySettings;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.event.config.ModConfigEvent;
public final class AntarchyConfigModuleNeoforge {
private AntarchyConfigModuleNeoforge() {}
public static void init(ModContainer modContainer) {
modContainer.registerConfig(ModConfig.Type.COMMON, AntarchyMobsConfig.SPEC, "antarchy/antarchy_mobs.toml");
modContainer.registerConfig(ModConfig.Type.COMMON, AntarchyToolsConfig.SPEC, "antarchy/antarchy_tools.toml");
modContainer.registerConfig(ModConfig.Type.COMMON, AntarchyMiscConfig.SPEC, "antarchy/antarchy_misc.toml");
AntarchyNeoforge.modEventBusTempHolder.addListener(AntarchyConfigModuleNeoforge::onConfigChange);
}
private static void onConfigChange(ModConfigEvent event) {
if (event instanceof ModConfigEvent.Reloading) {
return;
}
var spec = event.getConfig().getSpec();
if (spec == AntarchyMobsConfig.SPEC) {
bakeMobsConfig();
return;
}
if (spec == AntarchyToolsConfig.SPEC) {
bakeToolsConfig();
return;
}
if (spec == AntarchyMiscConfig.SPEC) {
bakeMiscConfig();
}
}
private static void bakeMobsConfig() {
AntarchySettings.setAntsStealFromChests(AntarchyMobsConfig.antsStealFromChests());
AntarchySettings.setBrownAntRequiresReagent(AntarchyMobsConfig.brownAntRequiresReagent());
AntarchySettings.setBrownAntHealth(AntarchyMobsConfig.brownAntHealth());
AntarchySettings.setBrownAntMovementSpeed(AntarchyMobsConfig.brownAntMovementSpeed());
AntarchySettings.setBrownAntAttackDamage(AntarchyMobsConfig.brownAntAttackDamage());
AntarchySettings.setBrownAntDestinationDimension(AntarchyMobsConfig.brownAntDestinationDimension());
AntarchySettings.setRedAntRequiresReagent(AntarchyMobsConfig.redAntRequiresReagent());
AntarchySettings.setRedAntHealth(AntarchyMobsConfig.redAntHealth());
AntarchySettings.setRedAntMovementSpeed(AntarchyMobsConfig.redAntMovementSpeed());
AntarchySettings.setRedAntAttackDamage(AntarchyMobsConfig.redAntAttackDamage());
AntarchySettings.setRedAntDestinationDimension(AntarchyMobsConfig.redAntDestinationDimension());
AntarchySettings.setRainbowAntRequiresReagent(AntarchyMobsConfig.rainbowAntRequiresReagent());
AntarchySettings.setRainbowAntHealth(AntarchyMobsConfig.rainbowAntHealth());
AntarchySettings.setRainbowAntMovementSpeed(AntarchyMobsConfig.rainbowAntMovementSpeed());
AntarchySettings.setRainbowAntAttackDamage(AntarchyMobsConfig.rainbowAntAttackDamage());
AntarchySettings.setRainbowAntNonInfinityFallbackDimension(AntarchyMobsConfig.rainbowAntNonInfinityFallbackDimension());
AntarchySettings.setTermiteRequiresReagent(AntarchyMobsConfig.termiteRequiresReagent());
AntarchySettings.setTermiteHealth(AntarchyMobsConfig.termiteHealth());
AntarchySettings.setTermiteMovementSpeed(AntarchyMobsConfig.termiteMovementSpeed());
AntarchySettings.setTermiteAttackDamage(AntarchyMobsConfig.termiteAttackDamage());
AntarchySettings.setTermiteDestinationDimension(AntarchyMobsConfig.termiteDestinationDimension());
AntarchySettings.setEasterBunnyEnabled(AntarchyMobsConfig.easterBunnyEnabled());
AntarchySettings.setEasterBunnyNaturalSpawnChancePercent(AntarchyMobsConfig.easterBunnyNaturalSpawnChancePercent());
AntarchySettings.setWaspHealth(AntarchyMobsConfig.waspHealth());
AntarchySettings.setWaspAttackDamage(AntarchyMobsConfig.waspAttackDamage());
AntarchySettings.setWaspMovementSpeed(AntarchyMobsConfig.waspMovementSpeed());
AntarchySettings.setBomberHealth(AntarchyMobsConfig.bomberHealth());
AntarchySettings.setBomberAttackDamage(AntarchyMobsConfig.bomberAttackDamage());
AntarchySettings.setBomberExplosionDamage(AntarchyMobsConfig.bomberExplosionDamage());
AntarchySettings.setBomberExplosionRadius(AntarchyMobsConfig.bomberExplosionRadius());
AntarchySettings.setKrakenHealth(AntarchyMobsConfig.krakenHealth());
AntarchySettings.setKrakenAttackDamage(AntarchyMobsConfig.krakenAttackDamage());
AntarchySettings.setKrakenProjectileDamageTakenMultiplier(AntarchyMobsConfig.krakenProjectileDamageTakenMultiplier());
AntarchySettings.setKrakenSquidSpawnEnabled(AntarchyMobsConfig.krakenSquidSpawnEnabled());
AntarchySettings.setKrakenMassSpawnEnabled(AntarchyMobsConfig.krakenMassSpawnEnabled());
AntarchySettings.setBrutalflyHealth(AntarchyMobsConfig.brutalflyHealth());
AntarchySettings.setBrutalflySwipeDamage(AntarchyMobsConfig.brutalflySwipeDamage());
AntarchySettings.setBrutalflySpitDamage(AntarchyMobsConfig.brutalflySpitDamage());
AntarchySettings.setMantisHealth(AntarchyMobsConfig.mantisHealth());
AntarchySettings.setMantisAttackDamage(AntarchyMobsConfig.mantisAttackDamage());
AntarchySettings.setMantisMovementSpeed(AntarchyMobsConfig.mantisMovementSpeed());
AntarchySettings.setMantisFlyingSpeed(AntarchyMobsConfig.mantisFlyingSpeed());
AntarchySettings.setMantisIgnoreLightLevel(AntarchyMobsConfig.mantisIgnoreLightLevel());
AntarchySettings.setTriffidHealth(AntarchyMobsConfig.triffidHealth());
AntarchySettings.setTriffidAttackDamage(AntarchyMobsConfig.triffidAttackDamage());
AntarchySettings.setTriffidGrabDamage(AntarchyMobsConfig.triffidGrabDamage());
AntarchySettings.setCaterpillarPupationTimeSeconds(AntarchyMobsConfig.caterpillarPupationTimeSeconds());
AntarchySettings.setReverieHealth(AntarchyMobsConfig.reverieHealth());
AntarchySettings.setReverieInterestRadius(AntarchyMobsConfig.reverieInterestRadius());
AntarchySettings.setReverieAbandonPlayerDistance(AntarchyMobsConfig.reverieAbandonPlayerDistance());
AntarchySettings.setReverieNoticeDurationTicks(AntarchyMobsConfig.reverieNoticeDurationTicks());
AntarchySettings.setReverieInterestDurationTicks(AntarchyMobsConfig.reverieInterestDurationTicks());
AntarchySettings.setReverieRebindCooldownTicks(AntarchyMobsConfig.reverieRebindCooldownTicks());
AntarchySettings.setReverieDamageReactionDurationTicks(AntarchyMobsConfig.reverieDamageReactionDurationTicks());
AntarchySettings.setReverieDangerousFallDistance(AntarchyMobsConfig.reverieDangerousFallDistance());
AntarchySettings.setReverieDangerousFallSpeed(AntarchyMobsConfig.reverieDangerousFallSpeed());
AntarchySettings.setReverieWarningThreatRadius(AntarchyMobsConfig.reverieWarningThreatRadius());
AntarchySettings.setReverieWarningThreatVerticalRange(AntarchyMobsConfig.reverieWarningThreatVerticalRange());
AntarchySettings.setReverieDuplicationCooldownTicks(AntarchyMobsConfig.reverieDuplicationCooldownTicks());
AntarchySettings.setBasiliskPetrifyingGazeEnabled(AntarchyMobsConfig.basiliskPetrifyingGazeEnabled());
AntarchySettings.setBasiliskSpawnMaxLightLevel(AntarchyMobsConfig.basiliskSpawnMaxLightLevel());
AntarchySettings.setLucidAttackRange(AntarchyMobsConfig.lucidAttackRange());
AntarchySettings.setLucidPearlInvertedDurationSeconds(AntarchyMobsConfig.lucidPearlInvertedDurationSeconds());
AntarchySettings.setDreadHallucinationSoundsEnabled(AntarchyMobsConfig.dreadHallucinationSoundsEnabled());
AntarchySettings.setDreadHallucinationSoundMinInterval(AntarchyMobsConfig.dreadHallucinationSoundMinInterval());
AntarchySettings.setDreadHallucinationSoundMaxInterval(AntarchyMobsConfig.dreadHallucinationSoundMaxInterval());
AntarchySettings.setDreadHallucinationMobsEnabled(AntarchyMobsConfig.dreadHallucinationMobsEnabled());
AntarchySettings.setDreadHallucinationMobMinInterval(AntarchyMobsConfig.dreadHallucinationMobMinInterval());
AntarchySettings.setDreadHallucinationMobMaxInterval(AntarchyMobsConfig.dreadHallucinationMobMaxInterval());
}
private static void bakeToolsConfig() {
AntarchySettings.setBasiliskDaggerAttackDamage(AntarchyToolsConfig.basiliskDaggerAttackDamage());
AntarchySettings.setBasiliskDaggerAttackSpeed(AntarchyToolsConfig.basiliskDaggerAttackSpeed());
AntarchySettings.setBasiliskDaggerPoisonDurationTicks(AntarchyToolsConfig.basiliskDaggerPoisonDurationTicks());
AntarchySettings.setBasiliskDaggerPoisonAmplifier(AntarchyToolsConfig.basiliskDaggerPoisonAmplifier());
AntarchySettings.setUltimateSwordAttackDamage(AntarchyToolsConfig.ultimateSwordAttackDamage());
AntarchySettings.setUltimateSwordAttackSpeed(AntarchyToolsConfig.ultimateSwordAttackSpeed());
AntarchySettings.setUltimatePickaxeAttackDamage(AntarchyToolsConfig.ultimatePickaxeAttackDamage());
AntarchySettings.setUltimatePickaxeAttackSpeed(AntarchyToolsConfig.ultimatePickaxeAttackSpeed());
AntarchySettings.setUltimateAxeAttackDamage(AntarchyToolsConfig.ultimateAxeAttackDamage());
AntarchySettings.setUltimateAxeAttackSpeed(AntarchyToolsConfig.ultimateAxeAttackSpeed());
AntarchySettings.setUltimateShovelAttackDamage(AntarchyToolsConfig.ultimateShovelAttackDamage());
AntarchySettings.setUltimateShovelAttackSpeed(AntarchyToolsConfig.ultimateShovelAttackSpeed());
AntarchySettings.setUltimateHoeAttackDamage(AntarchyToolsConfig.ultimateHoeAttackDamage());
AntarchySettings.setUltimateHoeAttackSpeed(AntarchyToolsConfig.ultimateHoeAttackSpeed());
AntarchySettings.setUltimateToolEnchantability(AntarchyToolsConfig.ultimateToolEnchantability());
AntarchySettings.setUltimateToolsThreeByThreeEnabled(AntarchyToolsConfig.ultimateToolsThreeByThreeEnabled());
AntarchySettings.setUltimateBowAttackDamage(AntarchyToolsConfig.ultimateBowAttackDamage());
AntarchySettings.setUltimateBowPlayerHeal(AntarchyToolsConfig.ultimateBowPlayerHeal());
AntarchySettings.setUltimateBowDrawSpeedMultiplier(AntarchyToolsConfig.ultimateBowDrawSpeedMultiplier());
AntarchySettings.setUltimateBowComesEnchantedWithFlame(AntarchyToolsConfig.ultimateBowComesEnchantedWithFlame());
AntarchySettings.setUltimateBowEnchantability(AntarchyToolsConfig.ultimateBowEnchantability());
AntarchySettings.setUltimateCrossbowAttackDamage(AntarchyToolsConfig.ultimateCrossbowAttackDamage());
AntarchySettings.setUltimateCrossbowChargeSpeedMultiplier(AntarchyToolsConfig.ultimateCrossbowChargeSpeedMultiplier());
AntarchySettings.setUltimateCrossbowEnchantability(AntarchyToolsConfig.ultimateCrossbowEnchantability());
AntarchySettings.setUltimateMaceDamageMultiplier(AntarchyToolsConfig.ultimateMaceDamageMultiplier());
AntarchySettings.setUltimateMaceAttackSpeed(AntarchyToolsConfig.ultimateMaceAttackSpeed());
AntarchySettings.setUltimateMaceEnchantability(AntarchyToolsConfig.ultimateMaceEnchantability());
AntarchySettings.setUltimateArmorComesEnchanted(AntarchyToolsConfig.ultimateArmorComesEnchanted());
AntarchySettings.setUltimateArmorEnchantability(AntarchyToolsConfig.ultimateArmorEnchantability());
AntarchySettings.setUltimateHelmetArmorValue(AntarchyToolsConfig.ultimateHelmetArmorValue());
AntarchySettings.setUltimateChestplateArmorValue(AntarchyToolsConfig.ultimateChestplateArmorValue());
AntarchySettings.setUltimateLeggingsArmorValue(AntarchyToolsConfig.ultimateLeggingsArmorValue());
AntarchySettings.setUltimateBootsArmorValue(AntarchyToolsConfig.ultimateBootsArmorValue());
AntarchySettings.setUltimateHelmetArmorToughness(AntarchyToolsConfig.ultimateHelmetArmorToughness());
AntarchySettings.setUltimateChestplateArmorToughness(AntarchyToolsConfig.ultimateChestplateArmorToughness());
AntarchySettings.setUltimateLeggingsArmorToughness(AntarchyToolsConfig.ultimateLeggingsArmorToughness());
AntarchySettings.setUltimateBootsArmorToughness(AntarchyToolsConfig.ultimateBootsArmorToughness());
AntarchySettings.setUltimateArmorKnockbackResistance(AntarchyToolsConfig.ultimateArmorKnockbackResistance());
AntarchySettings.setBattleAxeAttackDamage(AntarchyToolsConfig.battleAxeAttackDamage());
AntarchySettings.setBattleAxeAttackSpeed(AntarchyToolsConfig.battleAxeAttackSpeed());
AntarchySettings.setBigBerthaAttackDamage(AntarchyToolsConfig.bigBerthaAttackDamage());
AntarchySettings.setBigBerthaReachBonus(AntarchyToolsConfig.bigBerthaReachBonus());
AntarchySettings.setBigBerthaAttackSpeed(AntarchyToolsConfig.bigBerthaAttackSpeed());
AntarchySettings.setBigBerthaBasiliskParalyzeDurationTicks(AntarchyToolsConfig.bigBerthaBasiliskParalyzeDurationTicks());
AntarchySettings.setBigBerthaKrakenSlowTicks(AntarchyToolsConfig.bigBerthaKrakenSlowTicks());
AntarchySettings.setBigBerthaBasiliskCooldownSeconds(AntarchyToolsConfig.bigBerthaBasiliskCooldownSeconds());
AntarchySettings.setBigBerthaLucidInvertedDurationSeconds(AntarchyToolsConfig.bigBerthaLucidInvertedDurationSeconds());
AntarchySettings.setBigBerthaLucidInvertedDamageBonusPercent(AntarchyToolsConfig.bigBerthaLucidInvertedDamageBonusPercent());
AntarchySettings.setScorpionWhipBaseDamage(AntarchyToolsConfig.scorpionWhipBaseDamage());
AntarchySettings.setScorpionWhipReachBonus(AntarchyToolsConfig.scorpionWhipReachBonus());
AntarchySettings.setScorpionWhipPoisonDurationTicks(AntarchyToolsConfig.scorpionWhipPoisonDurationTicks());
AntarchySettings.setScorpionWhipTetherMaxRange(AntarchyToolsConfig.scorpionWhipTetherMaxRange());
AntarchySettings.setScorpionWhipReelCooldownTicks(AntarchyToolsConfig.scorpionWhipReelCooldownTicks());
AntarchySettings.setScorpionWhipSnapBonusDamage(AntarchyToolsConfig.scorpionWhipSnapBonusDamage());
AntarchySettings.setScorpionWhipSnapCooldownTicks(AntarchyToolsConfig.scorpionWhipSnapCooldownTicks());
AntarchySettings.setScorpionWhipPullStrength(AntarchyToolsConfig.scorpionWhipPullStrength());
AntarchySettings.setScorpionWhipHeavyPullMultiplier(AntarchyToolsConfig.scorpionWhipHeavyPullMultiplier());
AntarchySettings.setScorpionWhipSelfPullMultiplier(AntarchyToolsConfig.scorpionWhipSelfPullMultiplier());
AntarchySettings.setBloodCrystalKatanaAttackDamage(AntarchyToolsConfig.bloodCrystalKatanaAttackDamage());
AntarchySettings.setBloodCrystalKatanaLaunchStrength(AntarchyToolsConfig.bloodCrystalKatanaLaunchStrength());
AntarchySettings.setBloodCrystalKatanaTrailDurationTicks(AntarchyToolsConfig.bloodCrystalKatanaTrailDurationTicks());
AntarchySettings.setNightmareHelmetArmorValue(AntarchyToolsConfig.nightmareHelmetArmorValue());
AntarchySettings.setNightmareChestplateArmorValue(AntarchyToolsConfig.nightmareChestplateArmorValue());
AntarchySettings.setNightmareLeggingsArmorValue(AntarchyToolsConfig.nightmareLeggingsArmorValue());
AntarchySettings.setNightmareBootsArmorValue(AntarchyToolsConfig.nightmareBootsArmorValue());
AntarchySettings.setNightmareHelmetArmorToughness(AntarchyToolsConfig.nightmareHelmetArmorToughness());
AntarchySettings.setNightmareChestplateArmorToughness(AntarchyToolsConfig.nightmareChestplateArmorToughness());
AntarchySettings.setNightmareLeggingsArmorToughness(AntarchyToolsConfig.nightmareLeggingsArmorToughness());
AntarchySettings.setNightmareBootsArmorToughness(AntarchyToolsConfig.nightmareBootsArmorToughness());
AntarchySettings.setNightmareArmorKnockbackResistance(AntarchyToolsConfig.nightmareArmorKnockbackResistance());
AntarchySettings.setNightmareArmorDreadAuraRangePerPiece(AntarchyToolsConfig.nightmareArmorDreadAuraRangePerPiece());
AntarchySettings.setNightmareSwordBaseDamage(AntarchyToolsConfig.nightmareSwordBaseDamage());
AntarchySettings.setNightmareSwordAttackSpeed(AntarchyToolsConfig.nightmareSwordAttackSpeed());
AntarchySettings.setNightmareSwordScalingFactor(AntarchyToolsConfig.nightmareSwordScalingFactor());
AntarchySettings.setFallenKingCrownArmorValue(AntarchyToolsConfig.fallenKingCrownArmorValue());
AntarchySettings.setFallenKingCrownArmorToughness(AntarchyToolsConfig.fallenKingCrownArmorToughness());
AntarchySettings.setSquidzookaCooldownSeconds(AntarchyToolsConfig.squidzookaCooldownSeconds());
AntarchySettings.setSquidzookaLaunchVelocity(AntarchyToolsConfig.squidzookaLaunchVelocity());
AntarchySettings.setSizeChangingRaysEnabled(AntarchyToolsConfig.sizeChangingRaysEnabled());
AntarchySettings.setSizeRayCooldownSeconds(AntarchyToolsConfig.sizeRayCooldownSeconds());
AntarchySettings.setSizeRayMinScale(AntarchyToolsConfig.sizeRayMinScale());
AntarchySettings.setSizeRayMaxScale(AntarchyToolsConfig.sizeRayMaxScale());
AntarchySettings.setSizeRayDeltaPerHit(AntarchyToolsConfig.sizeRayDeltaPerHit());
AntarchySettings.setShrinkingPotionDelta(AntarchyToolsConfig.shrinkingPotionDelta());
AntarchySettings.setGrowthPotionDelta(AntarchyToolsConfig.growthPotionDelta());
AntarchySettings.setInvertProjectilesFromInvertedPlayers(AntarchyToolsConfig.invertProjectilesFromInvertedPlayers());
AntarchySettings.setGravityGunEnabled(AntarchyToolsConfig.gravityGunEnabled());
AntarchySettings.setGravityGunBlocksEnabled(AntarchyToolsConfig.gravityGunBlocksEnabled());
AntarchySettings.setGravityGunEntitiesEnabled(AntarchyToolsConfig.gravityGunEntitiesEnabled());
AntarchySettings.setGravityGunRange(AntarchyToolsConfig.gravityGunRange());
AntarchySettings.setGravityGunThrowStrength(AntarchyToolsConfig.gravityGunThrowStrength());
AntarchySettings.setGravityGunBlastStrength(AntarchyToolsConfig.gravityGunBlastStrength());
AntarchySettings.setGravityGunCooldownSeconds(AntarchyToolsConfig.gravityGunCooldownSeconds());
AntarchySettings.setGravityGunMaxHoldDistance(AntarchyToolsConfig.gravityGunMaxHoldDistance());
AntarchySettings.setDuctTapeRepairPercentPerUse(AntarchyToolsConfig.ductTapeRepairPercentPerUse());
AntarchySettings.setPotentNyxiteInvertedDurationSeconds(AntarchyToolsConfig.potentNyxiteInvertedDurationSeconds());
AntarchySettings.setCorneaEarNightVisionSeconds(AntarchyToolsConfig.corneaEarNightVisionSeconds());
AntarchySettings.setAntDanceRadius(AntarchyMobsConfig.antDanceRadius());
AntarchySettings.setMogglesVisionRadius(AntarchyToolsConfig.mogglesVisionRadius());
AntarchySettings.setMogglesVisionMaxLight(AntarchyToolsConfig.mogglesVisionMaxLight());
AntarchySettings.setMogglesVisionAlpha(AntarchyToolsConfig.mogglesVisionAlpha());
}
private static void bakeMiscConfig() {
AntarchySettings.setRainbowAntsLeadToInfinityDimensions(AntarchyMiscConfig.rainbowAntsLeadToInfinityDimensions());
AntarchySettings.setDisableInfinityBookPortalCreation(AntarchyMiscConfig.disableInfinityBookPortalCreation());
AntarchySettings.setHushweedSporeLifetimeSeconds(AntarchyMiscConfig.hushweedSporeLifetimeSeconds());
AntarchySettings.setDiamondMinecartEnabled(AntarchyMiscConfig.diamondMinecartEnabled());
AntarchySettings.setDiamondMinecartPlacesRails(AntarchyMiscConfig.diamondMinecartPlacesRails());
AntarchySettings.setDiamondMinecartCruiseSpeed(AntarchyMiscConfig.diamondMinecartCruiseSpeed());
AntarchySettings.setDiamondMinecartMaxSpeed(AntarchyMiscConfig.diamondMinecartMaxSpeed());
AntarchySettings.setDiamondMinecartAcceleration(AntarchyMiscConfig.diamondMinecartAcceleration());
AntarchySettings.setDiamondMinecartDeceleration(AntarchyMiscConfig.diamondMinecartDeceleration());
AntarchySettings.setDiamondMinecartCoastDeceleration(AntarchyMiscConfig.diamondMinecartCoastDeceleration());
AntarchySettings.setDiamondMinecartMobDamageEnabled(AntarchyMiscConfig.diamondMinecartMobDamageEnabled());
AntarchySettings.setDiamondMinecartMaxMobDamage(AntarchyMiscConfig.diamondMinecartMaxMobDamage());
// Misc
AntarchySettings.setElythiaFireflyParticlesEnabled(AntarchyMiscConfig.elythiaFireflyParticlesEnabled());
AntarchySettings.setDreamSandEnabled(AntarchyMiscConfig.dreamSandEnabled());
AntarchySettings.setDreamSandJumpVelocityMultiplier(AntarchyMiscConfig.dreamSandJumpVelocityMultiplier());
AntarchySettings.setDreamSandGravityMultiplier(AntarchyMiscConfig.dreamSandGravityMultiplier());
AntarchySettings.setDreamSandFallDamageMultiplier(AntarchyMiscConfig.dreamSandFallDamageMultiplier());
AntarchySettings.setDreamSandEffectDurationSeconds(AntarchyMiscConfig.dreamSandEffectDurationSeconds());
AntarchySettings.setIchorWitherEnabled(AntarchyMiscConfig.ichorWitherEnabled());
AntarchySettings.setDuplicatorTreeEnabled(AntarchyMiscConfig.duplicatorTreeEnabled());
AntarchySettings.setGlowingTorchflowers(AntarchyMiscConfig.glowingTorchflowers());
AntarchySettings.setGlowVinesUnderLeaves(AntarchyMiscConfig.glowVinesUnderLeaves());
AntarchySettings.setEntitySpecificFireOverlayEnabled(AntarchyMiscConfig.entitySpecificFireOverlayEnabled());
AntarchySettings.setBloodCrystalArmorShieldRechargeTicks(AntarchyToolsConfig.bloodCrystalArmorShieldRechargeTicks());
AntarchySettings.setBloodCrystalAppleShieldCount(AntarchyToolsConfig.bloodCrystalAppleShieldCount());
AntarchySettings.setBloodCrystalAppleDurationTicks(AntarchyToolsConfig.bloodCrystalAppleDurationTicks());
AntarchySettings.setBloodCrystalAppleShieldRechargeTicks(AntarchyToolsConfig.bloodCrystalAppleShieldRechargeTicks());
AntarchySettings.setBloodCrystalHardMaxShields(AntarchyToolsConfig.bloodCrystalHardMaxShields());
AntarchySettings.setBloodCrystalHelmetDefense(AntarchyToolsConfig.bloodCrystalHelmetDefense());
AntarchySettings.setBloodCrystalChestplateDefense(AntarchyToolsConfig.bloodCrystalChestplateDefense());
AntarchySettings.setBloodCrystalLeggingsDefense(AntarchyToolsConfig.bloodCrystalLeggingsDefense());
AntarchySettings.setBloodCrystalBootsDefense(AntarchyToolsConfig.bloodCrystalBootsDefense());
AntarchySettings.setBloodCrystalArmorToughness(AntarchyToolsConfig.bloodCrystalArmorToughness());
AntarchySettings.setBloodCrystalHelmetDurability(AntarchyToolsConfig.bloodCrystalHelmetDurability());
AntarchySettings.setBloodCrystalChestplateDurability(AntarchyToolsConfig.bloodCrystalChestplateDurability());
AntarchySettings.setBloodCrystalLeggingsDurability(AntarchyToolsConfig.bloodCrystalLeggingsDurability());
AntarchySettings.setBloodCrystalBootsDurability(AntarchyToolsConfig.bloodCrystalBootsDurability());
}
}
@@ -0,0 +1,160 @@
package com.craisinlord.antarchy.neoforge;
import net.neoforged.neoforge.common.ModConfigSpec;
public final class AntarchyMiscConfig {
public static final ModConfigSpec SPEC;
// Elythia
private static final ModConfigSpec.BooleanValue ELYTHIA_FIREFLY_PARTICLES_ENABLED;
// Dream Sand
private static final ModConfigSpec.BooleanValue DREAM_SAND_ENABLED;
private static final ModConfigSpec.DoubleValue DREAM_SAND_JUMP_VELOCITY_MULTIPLIER;
private static final ModConfigSpec.DoubleValue DREAM_SAND_GRAVITY_MULTIPLIER;
private static final ModConfigSpec.DoubleValue DREAM_SAND_FALL_DAMAGE_MULTIPLIER;
private static final ModConfigSpec.DoubleValue DREAM_SAND_EFFECT_DURATION_SECONDS;
// Ichor
private static final ModConfigSpec.BooleanValue ICHOR_WITHER_ENABLED;
// Hushweed
private static final ModConfigSpec.DoubleValue HUSHWEED_SPORE_LIFETIME_SECONDS;
// Infinite Dimensions
private static final ModConfigSpec.BooleanValue DISABLE_INFINITY_BOOK_PORTAL_CREATION;
private static final ModConfigSpec.BooleanValue RAINBOW_ANTS_LEAD_TO_INFINITY_DIMENSIONS;
// Diamond Minecart
private static final ModConfigSpec.BooleanValue DIAMOND_MINECART_ENABLED;
private static final ModConfigSpec.BooleanValue DIAMOND_MINECART_PLACES_RAILS;
private static final ModConfigSpec.DoubleValue DIAMOND_MINECART_CRUISE_SPEED;
private static final ModConfigSpec.DoubleValue DIAMOND_MINECART_MAX_SPEED;
private static final ModConfigSpec.DoubleValue DIAMOND_MINECART_ACCELERATION;
private static final ModConfigSpec.DoubleValue DIAMOND_MINECART_DECELERATION;
private static final ModConfigSpec.DoubleValue DIAMOND_MINECART_COAST_DECELERATION;
private static final ModConfigSpec.BooleanValue DIAMOND_MINECART_MOB_DAMAGE_ENABLED;
private static final ModConfigSpec.DoubleValue DIAMOND_MINECART_MAX_MOB_DAMAGE;
// World / misc toggles
private static final ModConfigSpec.BooleanValue DUPLICATOR_TREE_ENABLED;
private static final ModConfigSpec.BooleanValue GLOWING_TORCHFLOWERS;
private static final ModConfigSpec.BooleanValue GLOW_VINES_UNDER_LEAVES;
private static final ModConfigSpec.BooleanValue ENTITY_SPECIFIC_FIRE_OVERLAY_ENABLED;
static {
ModConfigSpec.Builder b = new ModConfigSpec.Builder();
// Elythia
b.push("elythia");
ELYTHIA_FIREFLY_PARTICLES_ENABLED = b
.comment("Whether firefly ambient particles appear at night in the Elythia dimension.")
.define("fireflyParticlesEnabled", true);
b.pop();
// Dream Sand
b.push("dreamSand");
DREAM_SAND_ENABLED = b.comment("If true, jumping from dream sand applies temporary low gravity until solid ground is touched.").define("enabled", true);
DREAM_SAND_JUMP_VELOCITY_MULTIPLIER = b.comment("Multiplier applied to upward jump velocity when leaving dream sand.") .defineInRange("jumpVelocityMultiplier", 1.3D, 0.0D, 16.0D);
DREAM_SAND_GRAVITY_MULTIPLIER = b.comment("Multiplier applied to downward velocity while low gravity is active.") .defineInRange("gravityMultiplier", 0.45D, 0.0D, 1.0D);
DREAM_SAND_FALL_DAMAGE_MULTIPLIER = b.comment("Multiplier applied to fall damage during the low-gravity phase.") .defineInRange("fallDamageMultiplier", 0.35D, 0.0D, 1.0D);
DREAM_SAND_EFFECT_DURATION_SECONDS = b.comment("Seconds the low-gravity effect remains active after leaving dream sand.") .defineInRange("effectDurationSeconds", 7.0D, 0.0D, 60.0D);
b.pop();
// Ichor
b.push("ichor");
ICHOR_WITHER_ENABLED = b
.comment("If true, players submerged in ichor receive a Wither effect.")
.define("witherEnabled", true);
b.pop();
// Hushweed
b.push("hushweed");
HUSHWEED_SPORE_LIFETIME_SECONDS = b
.comment("How long (in seconds) a Hushweed spore projectile stays alive before disappearing.")
.defineInRange("sporeLifetimeSeconds", 5.0D, 0.1D, 120.0D);
b.pop();
// Infinity Dimensions
b.push("infinityDimensions");
DISABLE_INFINITY_BOOK_PORTAL_CREATION = b
.comment("If true, book and quills cannot be thrown into nether portals to create random dimensions.")
.define("disableInfinityBookPortalCreation", false);
RAINBOW_ANTS_LEAD_TO_INFINITY_DIMENSIONS = b
.comment(
"Whether rainbow ants open randomly generated Infinity dimensions.",
"Only works if the Infinite Dimensions mod is installed."
)
.define("rainbowAntsLeadToInfinityDimensions", net.neoforged.fml.ModList.get().isLoaded("infinity"));
b.pop();
// Diamond Minecart
b.push("diamondMinecart");
DIAMOND_MINECART_ENABLED = b.comment("Master toggle. If false, acts like a regular minecart.") .define("enabled", true);
DIAMOND_MINECART_PLACES_RAILS = b.comment("Whether the cart automatically places rails from the rider's inventory.") .define("placesRails", true);
DIAMOND_MINECART_CRUISE_SPEED = b.comment("Cruise speed in blocks/tick while ridden (even without holding W).") .defineInRange("cruiseSpeed", 0.6D, 0.05D, 2.0D);
DIAMOND_MINECART_MAX_SPEED = b.comment("Maximum boosted speed in blocks/tick when W is held. Vanilla cap is 0.4.") .defineInRange("maxSpeed", 1.0D, 0.05D, 2.0D);
DIAMOND_MINECART_ACCELERATION = b.comment("Speed gained per tick while accelerating.") .defineInRange("acceleration", 0.03D, 0.001D, 0.5D);
DIAMOND_MINECART_DECELERATION = b.comment("Speed lost per tick while S is held (active braking).") .defineInRange("deceleration", 0.04D, 0.001D, 0.5D);
DIAMOND_MINECART_COAST_DECELERATION = b.comment("Speed lost per tick when neither W nor S is held (coasting friction).") .defineInRange("coastDeceleration", 0.01D, 0.001D, 0.5D);
DIAMOND_MINECART_MOB_DAMAGE_ENABLED = b.comment("Whether the cart deals damage to mobs it collides with at speed.") .define("mobDamageEnabled", true);
DIAMOND_MINECART_MAX_MOB_DAMAGE = b.comment("Maximum damage dealt at full speed. Scales linearly with current speed.") .defineInRange("maxMobDamage", 8.0D, 0.0D, 200.0D);
b.pop();
// World / visual toggles
b.push("world");
DUPLICATOR_TREE_ENABLED = b.comment("If false, duplicator trees do not generate and duplicator saplings produce nothing.").define("duplicatorTreeEnabled", true);
GLOWING_TORCHFLOWERS = b.comment("Whether fully-grown torchflower blocks emit light.") .define("glowingTorchflowers", true);
GLOW_VINES_UNDER_LEAVES = b.comment("Whether glow vines can be placed and survive when attached under leaf blocks.") .define("glowVinesUnderLeaves", true);
ENTITY_SPECIFIC_FIRE_OVERLAY_ENABLED = b.comment("If true, burning entities use soul fire / dream fire overlays where appropriate.") .define("entitySpecificFireOverlayEnabled", true);
b.pop();
SPEC = b.build();
}
private AntarchyMiscConfig() {}
static boolean elythiaFireflyParticlesEnabled() { return ELYTHIA_FIREFLY_PARTICLES_ENABLED.get(); }
static boolean dreamSandEnabled() { return DREAM_SAND_ENABLED.get(); }
static double dreamSandJumpVelocityMultiplier() { return DREAM_SAND_JUMP_VELOCITY_MULTIPLIER.get(); }
static double dreamSandGravityMultiplier() { return DREAM_SAND_GRAVITY_MULTIPLIER.get(); }
static double dreamSandFallDamageMultiplier() { return DREAM_SAND_FALL_DAMAGE_MULTIPLIER.get(); }
static double dreamSandEffectDurationSeconds() { return DREAM_SAND_EFFECT_DURATION_SECONDS.get(); }
static boolean ichorWitherEnabled() { return ICHOR_WITHER_ENABLED.get(); }
static boolean duplicatorTreeEnabled() { return DUPLICATOR_TREE_ENABLED.get(); }
static boolean glowingTorchflowers() { return GLOWING_TORCHFLOWERS.get(); }
static boolean glowVinesUnderLeaves() { return GLOW_VINES_UNDER_LEAVES.get(); }
static boolean entitySpecificFireOverlayEnabled() { return ENTITY_SPECIFIC_FIRE_OVERLAY_ENABLED.get(); }
static double hushweedSporeLifetimeSeconds() { return HUSHWEED_SPORE_LIFETIME_SECONDS.get(); }
static boolean disableInfinityBookPortalCreation() { return DISABLE_INFINITY_BOOK_PORTAL_CREATION.get(); }
static boolean rainbowAntsLeadToInfinityDimensions() { return RAINBOW_ANTS_LEAD_TO_INFINITY_DIMENSIONS.get(); }
static boolean diamondMinecartEnabled() { return DIAMOND_MINECART_ENABLED.get(); }
static boolean diamondMinecartPlacesRails() { return DIAMOND_MINECART_PLACES_RAILS.get(); }
static double diamondMinecartCruiseSpeed() { return DIAMOND_MINECART_CRUISE_SPEED.get(); }
static double diamondMinecartMaxSpeed() { return DIAMOND_MINECART_MAX_SPEED.get(); }
static double diamondMinecartAcceleration() { return DIAMOND_MINECART_ACCELERATION.get(); }
static double diamondMinecartDeceleration() { return DIAMOND_MINECART_DECELERATION.get(); }
static double diamondMinecartCoastDeceleration() { return DIAMOND_MINECART_COAST_DECELERATION.get(); }
static boolean diamondMinecartMobDamageEnabled() { return DIAMOND_MINECART_MOB_DAMAGE_ENABLED.get(); }
static double diamondMinecartMaxMobDamage() { return DIAMOND_MINECART_MAX_MOB_DAMAGE.get(); }
}
@@ -0,0 +1,465 @@
package com.craisinlord.antarchy.neoforge;
import net.neoforged.neoforge.common.ModConfigSpec;
public final class AntarchyMobsConfig {
public static final ModConfigSpec SPEC;
// -------------------------------------------------------------------------
// Ants
// -------------------------------------------------------------------------
private static final ModConfigSpec.BooleanValue ANTS_STEAL_FROM_CHESTS;
private static final ModConfigSpec.BooleanValue BROWN_ANT_REQUIRES_REAGENT;
private static final ModConfigSpec.DoubleValue BROWN_ANT_HEALTH;
private static final ModConfigSpec.DoubleValue BROWN_ANT_MOVEMENT_SPEED;
private static final ModConfigSpec.DoubleValue BROWN_ANT_ATTACK_DAMAGE;
private static final ModConfigSpec.ConfigValue<String> BROWN_ANT_DESTINATION_DIMENSION;
private static final ModConfigSpec.BooleanValue RED_ANT_REQUIRES_REAGENT;
private static final ModConfigSpec.DoubleValue RED_ANT_HEALTH;
private static final ModConfigSpec.DoubleValue RED_ANT_MOVEMENT_SPEED;
private static final ModConfigSpec.DoubleValue RED_ANT_ATTACK_DAMAGE;
private static final ModConfigSpec.ConfigValue<String> RED_ANT_DESTINATION_DIMENSION;
private static final ModConfigSpec.BooleanValue RAINBOW_ANT_REQUIRES_REAGENT;
private static final ModConfigSpec.DoubleValue RAINBOW_ANT_HEALTH;
private static final ModConfigSpec.DoubleValue RAINBOW_ANT_MOVEMENT_SPEED;
private static final ModConfigSpec.DoubleValue RAINBOW_ANT_ATTACK_DAMAGE;
private static final ModConfigSpec.ConfigValue<String> RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION;
private static final ModConfigSpec.BooleanValue TERMITE_REQUIRES_REAGENT;
private static final ModConfigSpec.DoubleValue TERMITE_HEALTH;
private static final ModConfigSpec.DoubleValue TERMITE_MOVEMENT_SPEED;
private static final ModConfigSpec.DoubleValue TERMITE_ATTACK_DAMAGE;
private static final ModConfigSpec.ConfigValue<String> TERMITE_DESTINATION_DIMENSION;
// -------------------------------------------------------------------------
// Easter Bunny
// -------------------------------------------------------------------------
private static final ModConfigSpec.BooleanValue EASTER_BUNNY_ENABLED;
private static final ModConfigSpec.IntValue EASTER_BUNNY_NATURAL_SPAWN_CHANCE_PERCENT;
// -------------------------------------------------------------------------
// Wasp
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue WASP_HEALTH;
private static final ModConfigSpec.DoubleValue WASP_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue WASP_MOVEMENT_SPEED;
// -------------------------------------------------------------------------
// Bomber
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue BOMBER_HEALTH;
private static final ModConfigSpec.DoubleValue BOMBER_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue BOMBER_EXPLOSION_DAMAGE;
private static final ModConfigSpec.DoubleValue BOMBER_EXPLOSION_RADIUS;
// -------------------------------------------------------------------------
// Kraken
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue KRAKEN_HEALTH;
private static final ModConfigSpec.DoubleValue KRAKEN_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue KRAKEN_PROJECTILE_DAMAGE_TAKEN_MULTIPLIER;
private static final ModConfigSpec.BooleanValue KRAKEN_SQUID_SPAWN_ENABLED;
private static final ModConfigSpec.BooleanValue KRAKEN_MASS_SPAWN_ENABLED;
// -------------------------------------------------------------------------
// Brutalfly
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue BRUTALFLY_HEALTH;
private static final ModConfigSpec.DoubleValue BRUTALFLY_SWIPE_DAMAGE;
private static final ModConfigSpec.DoubleValue BRUTALFLY_SPIT_DAMAGE;
// -------------------------------------------------------------------------
// Mantis
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue MANTIS_HEALTH;
private static final ModConfigSpec.DoubleValue MANTIS_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue MANTIS_MOVEMENT_SPEED;
private static final ModConfigSpec.DoubleValue MANTIS_FLYING_SPEED;
private static final ModConfigSpec.BooleanValue MANTIS_IGNORE_LIGHT_LEVEL;
// -------------------------------------------------------------------------
// Triffid
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue TRIFFID_HEALTH;
private static final ModConfigSpec.DoubleValue TRIFFID_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue TRIFFID_GRAB_DAMAGE;
// -------------------------------------------------------------------------
// Caterpillar
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue CATERPILLAR_PUPATION_TIME_SECONDS;
// -------------------------------------------------------------------------
// Ant Dance
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue ANT_DANCE_RADIUS;
// -------------------------------------------------------------------------
// Reverie
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue REVERIE_HEALTH;
private static final ModConfigSpec.DoubleValue REVERIE_INTEREST_RADIUS;
private static final ModConfigSpec.DoubleValue REVERIE_ABANDON_PLAYER_DISTANCE;
private static final ModConfigSpec.IntValue REVERIE_NOTICE_DURATION_TICKS;
private static final ModConfigSpec.IntValue REVERIE_INTEREST_DURATION_TICKS;
private static final ModConfigSpec.IntValue REVERIE_REBIND_COOLDOWN_TICKS;
private static final ModConfigSpec.IntValue REVERIE_DAMAGE_REACTION_DURATION_TICKS;
private static final ModConfigSpec.DoubleValue REVERIE_DANGEROUS_FALL_DISTANCE;
private static final ModConfigSpec.DoubleValue REVERIE_DANGEROUS_FALL_SPEED;
private static final ModConfigSpec.DoubleValue REVERIE_WARNING_THREAT_RADIUS;
private static final ModConfigSpec.DoubleValue REVERIE_WARNING_THREAT_VERTICAL_RANGE;
private static final ModConfigSpec.IntValue REVERIE_DUPLICATION_COOLDOWN_TICKS;
// -------------------------------------------------------------------------
// Basilisk
// -------------------------------------------------------------------------
private static final ModConfigSpec.BooleanValue BASILISK_PETRIFYING_GAZE_ENABLED;
private static final ModConfigSpec.IntValue BASILISK_SPAWN_MAX_LIGHT_LEVEL;
// -------------------------------------------------------------------------
// Lucid
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue LUCID_ATTACK_RANGE;
private static final ModConfigSpec.DoubleValue LUCID_PEARL_INVERTED_DURATION_SECONDS;
// -------------------------------------------------------------------------
// Dread effect
// -------------------------------------------------------------------------
private static final ModConfigSpec.BooleanValue DREAD_HALLUCINATION_SOUNDS_ENABLED;
private static final ModConfigSpec.DoubleValue DREAD_HALLUCINATION_SOUND_MIN_INTERVAL;
private static final ModConfigSpec.DoubleValue DREAD_HALLUCINATION_SOUND_MAX_INTERVAL;
private static final ModConfigSpec.BooleanValue DREAD_HALLUCINATION_MOBS_ENABLED;
private static final ModConfigSpec.DoubleValue DREAD_HALLUCINATION_MOB_MIN_INTERVAL;
private static final ModConfigSpec.DoubleValue DREAD_HALLUCINATION_MOB_MAX_INTERVAL;
static {
ModConfigSpec.Builder b = new ModConfigSpec.Builder();
// Ants (shared)
ANTS_STEAL_FROM_CHESTS = b
.comment("Whether ants will steal edible items from nearby chest inventories.")
.define("antsStealFromChests", true);
b.push("brownAnt");
BROWN_ANT_REQUIRES_REAGENT = b
.comment(
"If true, brown ants must be activated once with a reagent before they teleport.",
"Reagent tag: data/antarchy/tags/item/brown_ant_activation_items.json",
"Breeding foods tag: data/antarchy/tags/item/brown_ant_breeding_foods.json"
)
.define("requiresReagent", false);
BROWN_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D);
BROWN_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D);
BROWN_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D);
BROWN_ANT_DESTINATION_DIMENSION = b
.comment("Dimension id brown ants teleport players to.")
.define("destinationDimension", "antarchy:elythia", AntarchyMobsConfig::isValidDimensionId);
b.pop();
b.push("redAnt");
RED_ANT_REQUIRES_REAGENT = b
.comment(
"If true, red ants must be activated once with a reagent before they teleport.",
"Reagent tag: data/antarchy/tags/item/red_ant_activation_items.json",
"Breeding foods tag: data/antarchy/tags/item/red_ant_breeding_foods.json"
)
.define("requiresReagent", false);
RED_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D);
RED_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.30D, 0.0D, 10.0D);
RED_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 3.0D, 0.0D, 1024.0D);
RED_ANT_DESTINATION_DIMENSION = b
.comment("Dimension id red ants teleport players to.")
.define("destinationDimension", "antarchy:thoraxis", AntarchyMobsConfig::isValidDimensionId);
b.pop();
b.push("rainbowAnt");
RAINBOW_ANT_REQUIRES_REAGENT = b
.comment(
"If true, rainbow ants must be activated with a reagent before opening an Infinity destination.",
"Reagent tag: data/antarchy/tags/item/rainbow_ant_activation_items.json",
"Breeding foods tag: data/antarchy/tags/item/rainbow_ant_breeding_foods.json"
)
.define("requiresReagent", true);
RAINBOW_ANT_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D);
RAINBOW_ANT_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D);
RAINBOW_ANT_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D);
RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION = b
.comment("Dimension used by rainbow ants when Infinity behavior is disabled.")
.define("nonInfinityFallbackDimension", "antarchy:elythia", AntarchyMobsConfig::isValidDimensionId);
b.pop();
b.push("termite");
TERMITE_REQUIRES_REAGENT = b
.comment(
"If true, termites must be activated once with a reagent before they teleport.",
"Reagent tag: data/antarchy/tags/item/termite_activation_items.json",
"Breeding foods tag: data/antarchy/tags/item/termite_breeding_foods.json"
)
.define("requiresReagent", false);
TERMITE_HEALTH = b.comment("Base max health.") .defineInRange("health", 5.0D, 0.1D, 1024.0D);
TERMITE_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.28D, 0.0D, 10.0D);
TERMITE_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 1.0D, 0.0D, 1024.0D);
TERMITE_DESTINATION_DIMENSION = b
.comment("Dimension id termites teleport players to.")
.define("destinationDimension", "antarchy:cavaryn", AntarchyMobsConfig::isValidDimensionId);
b.pop();
// Easter Bunny
b.push("easterBunny");
EASTER_BUNNY_ENABLED = b
.comment(
"If false, Easter Bunnies stop laying spawn eggs.",
"Blacklist tag: data/antarchy/tags/item/easter_bunny_spawn_egg_blacklist.json"
)
.define("enabled", true);
EASTER_BUNNY_NATURAL_SPAWN_CHANCE_PERCENT = b
.comment(
"Percent chance a naturally spawned rabbit is replaced by an Easter Bunny.",
"Only applies to natural and chunk-generation spawns, not breeding."
)
.defineInRange("naturalSpawnChancePercent", 1, 0, 100);
b.pop();
// Wasp
b.push("wasp");
WASP_HEALTH = b.comment("Base max health.") .defineInRange("health", 16.0D, 1.0D, 32768.0D);
WASP_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 4.0D, 0.0D, 1024.0D);
WASP_MOVEMENT_SPEED = b.comment("Base wasp speed used for both flying and movement. Vanilla bee default is 0.3, so 0.39 is 30% faster.").defineInRange("movementSpeed", 0.39D, 0.0D, 10.0D);
b.pop();
// Bomber
b.push("bomber");
BOMBER_HEALTH = b.comment("Base max health.") .defineInRange("health", 10.0D, 1.0D, 32768.0D);
BOMBER_ATTACK_DAMAGE = b.comment("Direct damage dealt on contact before detonation.") .defineInRange("attackDamage", 4.0D, 0.0D, 1024.0D);
BOMBER_EXPLOSION_DAMAGE = b.comment("Extra damage dealt at the center of the explosion.") .defineInRange("explosionDamage", 8.0D, 0.0D, 1024.0D);
BOMBER_EXPLOSION_RADIUS = b.comment("Explosion radius when a bomber detonates. TNT uses 4.0.").defineInRange("explosionRadius", 4.0D, 0.0D, 128.0D);
b.pop();
// Kraken
b.push("kraken");
KRAKEN_HEALTH = b.comment("Base max health.") .defineInRange("health", 750.0D, 1.0D, 32768.0D);
KRAKEN_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 45.0D, 0.0D, 1024.0D);
KRAKEN_PROJECTILE_DAMAGE_TAKEN_MULTIPLIER = b.comment("Damage multiplier from projectiles. 0.5 means 50% damage.") .defineInRange("projectileDamageTakenMultiplier", 0.5D, 0.0D, 10.0D);
KRAKEN_SQUID_SPAWN_ENABLED = b.comment("If true, killing a Missile Squid has a 1/100 chance to spawn a single Kraken nearby.") .define("squidSpawnEnabled", true);
KRAKEN_MASS_SPAWN_ENABLED = b.comment("If true, killing a Missile Squid has a 1/100 chance to spawn 10 Krakens. Independent from the single spawn.").define("massSpawnEnabled", true);
b.pop();
// Brutalfly
b.push("brutalfly");
BRUTALFLY_HEALTH = b.comment("Base max health.") .defineInRange("health", 200.0D, 1.0D, 32768.0D);
BRUTALFLY_SWIPE_DAMAGE = b.comment("Damage dealt by a claw swipe.") .defineInRange("swipeDamage", 15.0D, 0.0D, 1024.0D);
BRUTALFLY_SPIT_DAMAGE = b.comment("Direct hit damage from a spit orb before lingering effect.").defineInRange("spitDamage", 5.0D, 0.0D, 1024.0D);
b.pop();
// Mantis
b.push("mantis");
MANTIS_HEALTH = b.comment("Base max health.") .defineInRange("health", 50.0D, 1.0D, 32768.0D);
MANTIS_ATTACK_DAMAGE = b.comment("Base attack damage.") .defineInRange("attackDamage", 9.0D, 0.0D, 1024.0D);
MANTIS_MOVEMENT_SPEED = b.comment("Base movement speed.") .defineInRange("movementSpeed", 0.42D, 0.0D, 10.0D);
MANTIS_FLYING_SPEED = b.comment("Base flying speed.") .defineInRange("flyingSpeed", 0.77D, 0.0D, 10.0D);
MANTIS_IGNORE_LIGHT_LEVEL = b.comment("If false, mantises only spawn naturally in darkness (standard monster rules). If true, light level is ignored.").define("ignoreLightLevel", false);
b.pop();
// Triffid
b.push("triffid");
TRIFFID_HEALTH = b.comment("Base max health.") .defineInRange("health", 80.0D, 1.0D, 32768.0D);
TRIFFID_ATTACK_DAMAGE = b.comment("Damage dealt by the sweep attack.") .defineInRange("attackDamage", 10.0D, 0.0D, 1024.0D);
TRIFFID_GRAB_DAMAGE = b.comment("Damage dealt by the grab attack.") .defineInRange("grabDamage", 15.0D, 0.0D, 1024.0D);
b.pop();
// Caterpillar
b.push("caterpillar");
CATERPILLAR_PUPATION_TIME_SECONDS = b
.comment("Time in seconds before a caterpillar emerges from its chrysalis.")
.defineInRange("pupationTimeSeconds", 600.0D, 1.0D, 3600.0D);
b.pop();
// Ant Dance
b.push("antDance");
ANT_DANCE_RADIUS = b
.comment("Radius in blocks where ants will dance around a playing jukebox.")
.defineInRange("radius", 5.0D, 1.0D, 32.0D);
b.pop();
// Reverie
b.push("reverie");
REVERIE_HEALTH = b.comment("Base max health.") .defineInRange("health", 20.0D, 1.0D, 1024.0D);
REVERIE_INTEREST_RADIUS = b.comment("How far the Reverie notices and starts following a player.") .defineInRange("interestRadius", 16.0D, 1.0D, 64.0D);
REVERIE_ABANDON_PLAYER_DISTANCE = b.comment("Distance where the Reverie gives up and returns to ambient wandering.") .defineInRange("abandonPlayerDistance", 24.0D, 1.0D, 96.0D);
REVERIE_NOTICE_DURATION_TICKS = b.comment("Ticks the Reverie watches a player before becoming bound.") .defineInRange("noticeDurationTicks", 20, 1, 200);
REVERIE_INTEREST_DURATION_TICKS = b.comment("Ticks the Reverie stays interested after a color/state change.") .defineInRange("interestDurationTicks", 360, 20, 7200);
REVERIE_REBIND_COOLDOWN_TICKS = b.comment("Ticks the Reverie waits after unbinding before it can bind again.") .defineInRange("rebindCooldownTicks", 100, 0, 24000);
REVERIE_DAMAGE_REACTION_DURATION_TICKS = b.comment("Ticks the Reverie stays in its hurt warning reaction after being damaged.") .defineInRange("damageReactionDurationTicks", 40, 1, 400);
REVERIE_DANGEROUS_FALL_DISTANCE = b.comment("Minimum fall distance before the Reverie considers its player in danger. Vanilla fall damage starts at 3.").defineInRange("dangerousFallDistance", 3.0D, 0.0D, 64.0D);
REVERIE_DANGEROUS_FALL_SPEED = b.comment("Minimum vertical speed before a dangerous fall triggers purple protection.") .defineInRange("dangerousFallSpeed", 0.18D, 0.0D, 4.0D);
REVERIE_WARNING_THREAT_RADIUS = b.comment("Horizontal scan radius for hostiles that trigger red warning mode.") .defineInRange("warningThreatRadius", 10.0D, 1.0D, 64.0D);
REVERIE_WARNING_THREAT_VERTICAL_RANGE = b.comment("Vertical scan range for hostiles that trigger red warning mode.") .defineInRange("warningThreatVerticalRange", 5.0D, 1.0D, 32.0D);
REVERIE_DUPLICATION_COOLDOWN_TICKS = b.comment("Cooldown in ticks before Blood Crystal can duplicate the Reverie again.") .defineInRange("duplicationCooldownTicks", 6000, 20, 24000);
b.pop();
// Basilisk
b.push("basilisk");
BASILISK_PETRIFYING_GAZE_ENABLED = b
.comment("If false, the Basilisk will not use its petrifying gaze and will never apply the Paralyzed effect.")
.define("petrifyingGazeEnabled", true);
BASILISK_SPAWN_MAX_LIGHT_LEVEL = b
.comment("Maximum local raw light level where basilisk natural spawning is allowed.")
.defineInRange("spawnMaxLightLevel", 5, 0, 15);
b.pop();
// Lucid
b.push("lucid");
LUCID_ATTACK_RANGE = b
.comment("Attack range in blocks. The Lucid fires its gravity blast when a target enters this radius.")
.defineInRange("attackRange", 9.0D, 1.0D, 32.0D);
LUCID_PEARL_INVERTED_DURATION_SECONDS = b
.comment("How long the Inverted effect from a Lucid pearl lasts, in seconds.")
.defineInRange("pearlInvertedDurationSeconds", 6.0D, 0.0D, 3600.0D);
b.pop();
// Dread effect
b.push("dread");
b.push("hallucinationSounds");
DREAD_HALLUCINATION_SOUNDS_ENABLED = b.comment("If false, the Dread effect will not play random hallucination sounds. Sound pool tag: data/antarchy/tags/sound_event/dread_hallucination_sounds.json").define("enabled", true);
DREAD_HALLUCINATION_SOUND_MIN_INTERVAL = b.comment("Minimum seconds between hallucination sound triggers.").defineInRange("minIntervalSeconds", 3.0D, 0.1D, 300.0D);
DREAD_HALLUCINATION_SOUND_MAX_INTERVAL = b.comment("Maximum seconds between hallucination sound triggers.").defineInRange("maxIntervalSeconds", 10.0D, 0.1D, 300.0D);
b.pop();
b.push("hallucinationMobs");
DREAD_HALLUCINATION_MOBS_ENABLED = b.comment("If false, the Dread effect will not render apparitions.").define("enabled", true);
DREAD_HALLUCINATION_MOB_MIN_INTERVAL = b.comment("Minimum seconds between apparition spawns.").defineInRange("minIntervalSeconds", 6.0D, 0.1D, 300.0D);
DREAD_HALLUCINATION_MOB_MAX_INTERVAL = b.comment("Maximum seconds between apparition spawns.").defineInRange("maxIntervalSeconds", 16.0D, 0.1D, 300.0D);
b.pop();
b.pop(); // dread
SPEC = b.build();
}
private AntarchyMobsConfig() {}
private static boolean isValidDimensionId(Object value) {
return value instanceof String s && net.minecraft.resources.ResourceLocation.tryParse(s) != null;
}
static boolean antsStealFromChests() { return ANTS_STEAL_FROM_CHESTS.get(); }
static boolean brownAntRequiresReagent() { return BROWN_ANT_REQUIRES_REAGENT.get(); }
static double brownAntHealth() { return BROWN_ANT_HEALTH.get(); }
static double brownAntMovementSpeed() { return BROWN_ANT_MOVEMENT_SPEED.get(); }
static double brownAntAttackDamage() { return BROWN_ANT_ATTACK_DAMAGE.get(); }
static String brownAntDestinationDimension() { return BROWN_ANT_DESTINATION_DIMENSION.get(); }
static boolean redAntRequiresReagent() { return RED_ANT_REQUIRES_REAGENT.get(); }
static double redAntHealth() { return RED_ANT_HEALTH.get(); }
static double redAntMovementSpeed() { return RED_ANT_MOVEMENT_SPEED.get(); }
static double redAntAttackDamage() { return RED_ANT_ATTACK_DAMAGE.get(); }
static String redAntDestinationDimension() { return RED_ANT_DESTINATION_DIMENSION.get(); }
static boolean rainbowAntRequiresReagent() { return RAINBOW_ANT_REQUIRES_REAGENT.get(); }
static double rainbowAntHealth() { return RAINBOW_ANT_HEALTH.get(); }
static double rainbowAntMovementSpeed() { return RAINBOW_ANT_MOVEMENT_SPEED.get(); }
static double rainbowAntAttackDamage() { return RAINBOW_ANT_ATTACK_DAMAGE.get(); }
static String rainbowAntNonInfinityFallbackDimension() { return RAINBOW_ANT_NON_INFINITY_FALLBACK_DIMENSION.get(); }
static boolean termiteRequiresReagent() { return TERMITE_REQUIRES_REAGENT.get(); }
static double termiteHealth() { return TERMITE_HEALTH.get(); }
static double termiteMovementSpeed() { return TERMITE_MOVEMENT_SPEED.get(); }
static double termiteAttackDamage() { return TERMITE_ATTACK_DAMAGE.get(); }
static String termiteDestinationDimension() { return TERMITE_DESTINATION_DIMENSION.get(); }
static boolean easterBunnyEnabled() { return EASTER_BUNNY_ENABLED.get(); }
static int easterBunnyNaturalSpawnChancePercent() { return EASTER_BUNNY_NATURAL_SPAWN_CHANCE_PERCENT.get(); }
static double waspHealth() { return WASP_HEALTH.get(); }
static double waspAttackDamage() { return WASP_ATTACK_DAMAGE.get(); }
static double waspMovementSpeed() { return WASP_MOVEMENT_SPEED.get(); }
static double bomberHealth() { return BOMBER_HEALTH.get(); }
static double bomberAttackDamage() { return BOMBER_ATTACK_DAMAGE.get(); }
static double bomberExplosionDamage() { return BOMBER_EXPLOSION_DAMAGE.get(); }
static double bomberExplosionRadius() { return BOMBER_EXPLOSION_RADIUS.get(); }
static double krakenHealth() { return KRAKEN_HEALTH.get(); }
static double krakenAttackDamage() { return KRAKEN_ATTACK_DAMAGE.get(); }
static double krakenProjectileDamageTakenMultiplier() { return KRAKEN_PROJECTILE_DAMAGE_TAKEN_MULTIPLIER.get(); }
static boolean krakenSquidSpawnEnabled() { return KRAKEN_SQUID_SPAWN_ENABLED.get(); }
static boolean krakenMassSpawnEnabled() { return KRAKEN_MASS_SPAWN_ENABLED.get(); }
static double brutalflyHealth() { return BRUTALFLY_HEALTH.get(); }
static double brutalflySwipeDamage() { return BRUTALFLY_SWIPE_DAMAGE.get(); }
static double brutalflySpitDamage() { return BRUTALFLY_SPIT_DAMAGE.get(); }
static double mantisHealth() { return MANTIS_HEALTH.get(); }
static double mantisAttackDamage() { return MANTIS_ATTACK_DAMAGE.get(); }
static double mantisMovementSpeed() { return MANTIS_MOVEMENT_SPEED.get(); }
static double mantisFlyingSpeed() { return MANTIS_FLYING_SPEED.get(); }
static boolean mantisIgnoreLightLevel() { return MANTIS_IGNORE_LIGHT_LEVEL.get(); }
static double triffidHealth() { return TRIFFID_HEALTH.get(); }
static double triffidAttackDamage() { return TRIFFID_ATTACK_DAMAGE.get(); }
static double triffidGrabDamage() { return TRIFFID_GRAB_DAMAGE.get(); }
static double caterpillarPupationTimeSeconds() { return CATERPILLAR_PUPATION_TIME_SECONDS.get(); }
static double antDanceRadius() { return ANT_DANCE_RADIUS.get(); }
static double reverieHealth() { return REVERIE_HEALTH.get(); }
static double reverieInterestRadius() { return REVERIE_INTEREST_RADIUS.get(); }
static double reverieAbandonPlayerDistance() { return REVERIE_ABANDON_PLAYER_DISTANCE.get(); }
static int reverieNoticeDurationTicks() { return REVERIE_NOTICE_DURATION_TICKS.get(); }
static int reverieInterestDurationTicks() { return REVERIE_INTEREST_DURATION_TICKS.get(); }
static int reverieRebindCooldownTicks() { return REVERIE_REBIND_COOLDOWN_TICKS.get(); }
static int reverieDamageReactionDurationTicks() { return REVERIE_DAMAGE_REACTION_DURATION_TICKS.get(); }
static double reverieDangerousFallDistance() { return REVERIE_DANGEROUS_FALL_DISTANCE.get(); }
static double reverieDangerousFallSpeed() { return REVERIE_DANGEROUS_FALL_SPEED.get(); }
static double reverieWarningThreatRadius() { return REVERIE_WARNING_THREAT_RADIUS.get(); }
static double reverieWarningThreatVerticalRange() { return REVERIE_WARNING_THREAT_VERTICAL_RANGE.get(); }
static int reverieDuplicationCooldownTicks() { return REVERIE_DUPLICATION_COOLDOWN_TICKS.get(); }
static boolean basiliskPetrifyingGazeEnabled() { return BASILISK_PETRIFYING_GAZE_ENABLED.get(); }
static int basiliskSpawnMaxLightLevel() { return BASILISK_SPAWN_MAX_LIGHT_LEVEL.get(); }
static double lucidAttackRange() { return LUCID_ATTACK_RANGE.get(); }
static double lucidPearlInvertedDurationSeconds() { return LUCID_PEARL_INVERTED_DURATION_SECONDS.get(); }
static boolean dreadHallucinationSoundsEnabled() { return DREAD_HALLUCINATION_SOUNDS_ENABLED.get(); }
static double dreadHallucinationSoundMinInterval() { return DREAD_HALLUCINATION_SOUND_MIN_INTERVAL.get(); }
static double dreadHallucinationSoundMaxInterval() { return DREAD_HALLUCINATION_SOUND_MAX_INTERVAL.get(); }
static boolean dreadHallucinationMobsEnabled() { return DREAD_HALLUCINATION_MOBS_ENABLED.get(); }
static double dreadHallucinationMobMinInterval() { return DREAD_HALLUCINATION_MOB_MIN_INTERVAL.get(); }
static double dreadHallucinationMobMaxInterval() { return DREAD_HALLUCINATION_MOB_MAX_INTERVAL.get(); }
}
@@ -0,0 +1,44 @@
package com.craisinlord.antarchy.neoforge;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType;
import net.minecraft.sounds.SoundEvents;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.common.SoundActions;
import net.neoforged.neoforge.fluids.FluidType;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.NeoForgeRegistries;
public final class AntarchyNeoForgeFluidTypes {
private static final DeferredRegister<FluidType> FLUID_TYPES =
DeferredRegister.create(NeoForgeRegistries.Keys.FLUID_TYPES, Antarchy.MODID);
public static final DeferredHolder<FluidType, FluidType> ANTIWATER_TYPE = FLUID_TYPES.register("antiwater",
() -> new AntiwaterFluidType(FluidType.Properties.create()
.descriptionId("block.antarchy.antiwater")
.fallDistanceModifier(0.0F)
.canSwim(true)
.supportsBoating(true)
.sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL)
.sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY)
.density(1000)
.viscosity(1000)));
public static final DeferredHolder<FluidType, FluidType> ICHOR_TYPE = FLUID_TYPES.register("ichor",
() -> new FluidType(FluidType.Properties.create()
.descriptionId("block.antarchy.ichor")
.fallDistanceModifier(0.0F)
.supportsBoating(true)
.sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL)
.sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY)
.density(1200)
.viscosity(1400)));
private AntarchyNeoForgeFluidTypes() {
}
public static void register(IEventBus modEventBus) {
FLUID_TYPES.register(modEventBus);
}
}
@@ -0,0 +1,39 @@
package com.craisinlord.antarchy.neoforge;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.neoforge.registry.*;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.ModList;
import net.neoforged.fml.common.Mod;
@Mod(Antarchy.MODID)
public class AntarchyNeoforge {
public static final boolean CREATE_LOADED = isModLoaded("create");
public static IEventBus modEventBusTempHolder = null;
public AntarchyNeoforge(IEventBus modEventBus, ModContainer modContainer) {
modEventBusTempHolder = modEventBus;
AntarchyConfigModuleNeoforge.init(modContainer);
AntarchyNeoForgeEvents.register(modEventBus);
AntarchyNeoforgeSounds.register(modEventBus);
AntarchyNeoforgeEntites.register(modEventBus);
AntarchyNeoforgeBlocks.register(modEventBus);
AntarchyNeoforgeItems.register(modEventBus);
AntarchyNeoforgeMisc.register(modEventBus);
AntarchyNeoforgeSpawnPlacements.register(modEventBus);
AntarchyNeoforgeCreativeModeTabs.register(modEventBus);
AntarchyNeoforgeEntityAttributes.register(modEventBus);
AntarchyNeoforgePayloadHandlers.register(modEventBus);
Antarchy.init();
}
private static boolean isModLoaded(String modId) {
try {
return ModList.get().isLoaded(modId);
} catch (Throwable ignored) {
return false;
}
}
}
@@ -0,0 +1,587 @@
package com.craisinlord.antarchy.neoforge;
import net.neoforged.neoforge.common.ModConfigSpec;
public final class AntarchyToolsConfig {
public static final ModConfigSpec SPEC;
// -------------------------------------------------------------------------
// Basilisk Dagger
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue BASILISK_DAGGER_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue BASILISK_DAGGER_ATTACK_SPEED;
private static final ModConfigSpec.IntValue BASILISK_DAGGER_POISON_DURATION_TICKS;
private static final ModConfigSpec.IntValue BASILISK_DAGGER_POISON_AMPLIFIER;
// -------------------------------------------------------------------------
// Ultimate Tools
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue ULTIMATE_SWORD_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue ULTIMATE_SWORD_ATTACK_SPEED;
private static final ModConfigSpec.DoubleValue ULTIMATE_PICKAXE_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue ULTIMATE_PICKAXE_ATTACK_SPEED;
private static final ModConfigSpec.DoubleValue ULTIMATE_AXE_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue ULTIMATE_AXE_ATTACK_SPEED;
private static final ModConfigSpec.DoubleValue ULTIMATE_SHOVEL_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue ULTIMATE_SHOVEL_ATTACK_SPEED;
private static final ModConfigSpec.DoubleValue ULTIMATE_HOE_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue ULTIMATE_HOE_ATTACK_SPEED;
private static final ModConfigSpec.IntValue ULTIMATE_TOOL_ENCHANTABILITY;
private static final ModConfigSpec.BooleanValue ULTIMATE_TOOLS_THREE_BY_THREE_ENABLED;
// -------------------------------------------------------------------------
// Ultimate Bow
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue ULTIMATE_BOW_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue ULTIMATE_BOW_PLAYER_HEAL;
private static final ModConfigSpec.DoubleValue ULTIMATE_BOW_DRAW_SPEED_MULTIPLIER;
private static final ModConfigSpec.BooleanValue ULTIMATE_BOW_COMES_ENCHANTED_WITH_FLAME;
private static final ModConfigSpec.IntValue ULTIMATE_BOW_ENCHANTABILITY;
// -------------------------------------------------------------------------
// Ultimate Crossbow
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue ULTIMATE_CROSSBOW_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue ULTIMATE_CROSSBOW_CHARGE_SPEED_MULTIPLIER;
private static final ModConfigSpec.IntValue ULTIMATE_CROSSBOW_ENCHANTABILITY;
// -------------------------------------------------------------------------
// Ultimate Mace
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue ULTIMATE_MACE_DAMAGE_MULTIPLIER;
private static final ModConfigSpec.DoubleValue ULTIMATE_MACE_ATTACK_SPEED;
private static final ModConfigSpec.IntValue ULTIMATE_MACE_ENCHANTABILITY;
// -------------------------------------------------------------------------
// Ultimate Armor
// -------------------------------------------------------------------------
private static final ModConfigSpec.BooleanValue ULTIMATE_ARMOR_COMES_ENCHANTED;
private static final ModConfigSpec.IntValue ULTIMATE_ARMOR_ENCHANTABILITY;
private static final ModConfigSpec.IntValue ULTIMATE_HELMET_ARMOR_VALUE;
private static final ModConfigSpec.IntValue ULTIMATE_CHESTPLATE_ARMOR_VALUE;
private static final ModConfigSpec.IntValue ULTIMATE_LEGGINGS_ARMOR_VALUE;
private static final ModConfigSpec.IntValue ULTIMATE_BOOTS_ARMOR_VALUE;
private static final ModConfigSpec.DoubleValue ULTIMATE_HELMET_ARMOR_TOUGHNESS;
private static final ModConfigSpec.DoubleValue ULTIMATE_CHESTPLATE_ARMOR_TOUGHNESS;
private static final ModConfigSpec.DoubleValue ULTIMATE_LEGGINGS_ARMOR_TOUGHNESS;
private static final ModConfigSpec.DoubleValue ULTIMATE_BOOTS_ARMOR_TOUGHNESS;
private static final ModConfigSpec.DoubleValue ULTIMATE_ARMOR_KNOCKBACK_RESISTANCE;
// -------------------------------------------------------------------------
// Battle Axe
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue BATTLE_AXE_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue BATTLE_AXE_ATTACK_SPEED;
// -------------------------------------------------------------------------
// Big Bertha
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue BIG_BERTHA_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue BIG_BERTHA_REACH_BONUS;
private static final ModConfigSpec.DoubleValue BIG_BERTHA_ATTACK_SPEED;
private static final ModConfigSpec.IntValue BIG_BERTHA_BASILISK_PARALYZE_DURATION_TICKS;
private static final ModConfigSpec.IntValue BIG_BERTHA_KRAKEN_SLOW_TICKS;
private static final ModConfigSpec.DoubleValue BIG_BERTHA_BASILISK_COOLDOWN_SECONDS;
private static final ModConfigSpec.DoubleValue BIG_BERTHA_LUCID_INVERTED_DURATION_SECONDS;
private static final ModConfigSpec.DoubleValue BIG_BERTHA_LUCID_INVERTED_DAMAGE_BONUS_PERCENT;
private static final ModConfigSpec.DoubleValue SCORPION_WHIP_BASE_DAMAGE;
private static final ModConfigSpec.DoubleValue SCORPION_WHIP_REACH_BONUS;
private static final ModConfigSpec.IntValue SCORPION_WHIP_POISON_DURATION_TICKS;
private static final ModConfigSpec.DoubleValue SCORPION_WHIP_TETHER_MAX_RANGE;
private static final ModConfigSpec.IntValue SCORPION_WHIP_REEL_COOLDOWN_TICKS;
private static final ModConfigSpec.DoubleValue SCORPION_WHIP_SNAP_BONUS_DAMAGE;
private static final ModConfigSpec.IntValue SCORPION_WHIP_SNAP_COOLDOWN_TICKS;
private static final ModConfigSpec.DoubleValue SCORPION_WHIP_PULL_STRENGTH;
private static final ModConfigSpec.DoubleValue SCORPION_WHIP_HEAVY_PULL_MULTIPLIER;
private static final ModConfigSpec.DoubleValue SCORPION_WHIP_SELF_PULL_MULTIPLIER;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_KATANA_ATTACK_DAMAGE;
private static final ModConfigSpec.DoubleValue BLOOD_CRYSTAL_KATANA_LAUNCH_STRENGTH;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_KATANA_TRAIL_DURATION_TICKS;
// -------------------------------------------------------------------------
// Nightmare Gear
// -------------------------------------------------------------------------
private static final ModConfigSpec.IntValue NIGHTMARE_HELMET_ARMOR_VALUE;
private static final ModConfigSpec.IntValue NIGHTMARE_CHESTPLATE_ARMOR_VALUE;
private static final ModConfigSpec.IntValue NIGHTMARE_LEGGINGS_ARMOR_VALUE;
private static final ModConfigSpec.IntValue NIGHTMARE_BOOTS_ARMOR_VALUE;
private static final ModConfigSpec.DoubleValue NIGHTMARE_HELMET_ARMOR_TOUGHNESS;
private static final ModConfigSpec.DoubleValue NIGHTMARE_CHESTPLATE_ARMOR_TOUGHNESS;
private static final ModConfigSpec.DoubleValue NIGHTMARE_LEGGINGS_ARMOR_TOUGHNESS;
private static final ModConfigSpec.DoubleValue NIGHTMARE_BOOTS_ARMOR_TOUGHNESS;
private static final ModConfigSpec.DoubleValue NIGHTMARE_ARMOR_KNOCKBACK_RESISTANCE;
private static final ModConfigSpec.DoubleValue NIGHTMARE_ARMOR_DREAD_AURA_RANGE_PER_PIECE;
private static final ModConfigSpec.DoubleValue NIGHTMARE_SWORD_BASE_DAMAGE;
private static final ModConfigSpec.DoubleValue NIGHTMARE_SWORD_ATTACK_SPEED;
private static final ModConfigSpec.DoubleValue NIGHTMARE_SWORD_SCALING_FACTOR;
// -------------------------------------------------------------------------
// Fallen King's Crown
// -------------------------------------------------------------------------
private static final ModConfigSpec.IntValue FALLEN_KING_CROWN_ARMOR_VALUE;
private static final ModConfigSpec.DoubleValue FALLEN_KING_CROWN_ARMOR_TOUGHNESS;
// -------------------------------------------------------------------------
// Blood Crystal Armor
// -------------------------------------------------------------------------
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_ARMOR_SHIELD_RECHARGE_TICKS;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_APPLE_SHIELD_COUNT;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_APPLE_DURATION_TICKS;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_APPLE_SHIELD_RECHARGE_TICKS;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_HARD_MAX_SHIELDS;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_HELMET_DEFENSE;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_CHESTPLATE_DEFENSE;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_LEGGINGS_DEFENSE;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_BOOTS_DEFENSE;
private static final ModConfigSpec.DoubleValue BLOOD_CRYSTAL_ARMOR_TOUGHNESS;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_HELMET_DURABILITY;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_CHESTPLATE_DURABILITY;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_LEGGINGS_DURABILITY;
private static final ModConfigSpec.IntValue BLOOD_CRYSTAL_BOOTS_DURABILITY;
// -------------------------------------------------------------------------
// Squidzooka
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue SQUIDZOOKA_COOLDOWN_SECONDS;
private static final ModConfigSpec.DoubleValue SQUIDZOOKA_LAUNCH_VELOCITY;
// -------------------------------------------------------------------------
// Size Rays
// -------------------------------------------------------------------------
private static final ModConfigSpec.BooleanValue SIZE_CHANGING_RAYS_ENABLED;
private static final ModConfigSpec.DoubleValue SIZE_RAY_COOLDOWN_SECONDS;
private static final ModConfigSpec.DoubleValue SIZE_RAY_MIN_SCALE;
private static final ModConfigSpec.DoubleValue SIZE_RAY_MAX_SCALE;
private static final ModConfigSpec.DoubleValue SIZE_RAY_DELTA_PER_HIT;
private static final ModConfigSpec.DoubleValue SHRINKING_POTION_DELTA;
private static final ModConfigSpec.DoubleValue GROWTH_POTION_DELTA;
// -------------------------------------------------------------------------
// Gravity Gun
// -------------------------------------------------------------------------
private static final ModConfigSpec.BooleanValue GRAVITY_GUN_ENABLED;
private static final ModConfigSpec.BooleanValue GRAVITY_GUN_BLOCKS_ENABLED;
private static final ModConfigSpec.BooleanValue GRAVITY_GUN_ENTITIES_ENABLED;
private static final ModConfigSpec.DoubleValue GRAVITY_GUN_RANGE;
private static final ModConfigSpec.DoubleValue GRAVITY_GUN_THROW_STRENGTH;
private static final ModConfigSpec.DoubleValue GRAVITY_GUN_BLAST_STRENGTH;
private static final ModConfigSpec.DoubleValue GRAVITY_GUN_COOLDOWN_SECONDS;
private static final ModConfigSpec.DoubleValue GRAVITY_GUN_MAX_HOLD_DISTANCE;
// -------------------------------------------------------------------------
// Miscellaneous items / consumables
// -------------------------------------------------------------------------
private static final ModConfigSpec.DoubleValue DUCT_TAPE_REPAIR_PERCENT_PER_USE;
private static final ModConfigSpec.DoubleValue POTENT_NYXITE_INVERTED_DURATION_SECONDS;
private static final ModConfigSpec.BooleanValue INVERT_PROJECTILES_FROM_INVERTED_PLAYERS;
private static final ModConfigSpec.IntValue CORNEA_EAR_NIGHT_VISION_SECONDS;
// -------------------------------------------------------------------------
// Moggles
// -------------------------------------------------------------------------
private static final ModConfigSpec.IntValue MOGGLES_VISION_RADIUS;
private static final ModConfigSpec.IntValue MOGGLES_VISION_MAX_LIGHT;
private static final ModConfigSpec.DoubleValue MOGGLES_VISION_ALPHA;
static {
ModConfigSpec.Builder b = new ModConfigSpec.Builder();
// Basilisk Dagger
b.push("basiliskDagger");
BASILISK_DAGGER_ATTACK_DAMAGE = b.comment("Attack damage.") .defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D);
BASILISK_DAGGER_ATTACK_SPEED = b.comment("Attack speed.") .defineInRange("attackSpeed", -1.8D, -10.0D, 10.0D);
BASILISK_DAGGER_POISON_DURATION_TICKS = b.comment("Poison duration applied on hit.") .defineInRange("poisonDurationTicks", 200, 0, 20000);
BASILISK_DAGGER_POISON_AMPLIFIER = b.comment("Poison level applied on hit (0 = I).") .defineInRange("poisonAmplifier", 2, 0, 10);
b.pop();
// Ultimate Tools
b.push("ultimateTools");
ULTIMATE_SWORD_ATTACK_DAMAGE = b.comment("Attack damage of the Ultimate Sword.") .defineInRange("swordAttackDamage", 30.0D, 0.0D, 1024.0D);
ULTIMATE_SWORD_ATTACK_SPEED = b.comment("Attack speed of the Ultimate Sword.") .defineInRange("swordAttackSpeed", -2.4D, -10.0D, 10.0D);
ULTIMATE_PICKAXE_ATTACK_DAMAGE = b.comment("Attack damage of the Ultimate Pickaxe.") .defineInRange("pickaxeAttackDamage", 22.0D, 0.0D, 1024.0D);
ULTIMATE_PICKAXE_ATTACK_SPEED = b.comment("Attack speed of the Ultimate Pickaxe.") .defineInRange("pickaxeAttackSpeed", -2.8D, -10.0D, 10.0D);
ULTIMATE_AXE_ATTACK_DAMAGE = b.comment("Attack damage of the Ultimate Axe.") .defineInRange("axeAttackDamage", 38.0D, 0.0D, 1024.0D);
ULTIMATE_AXE_ATTACK_SPEED = b.comment("Attack speed of the Ultimate Axe.") .defineInRange("axeAttackSpeed", -3.0D, -10.0D, 10.0D);
ULTIMATE_SHOVEL_ATTACK_DAMAGE = b.comment("Attack damage of the Ultimate Shovel.") .defineInRange("shovelAttackDamage", 24.0D, 0.0D, 1024.0D);
ULTIMATE_SHOVEL_ATTACK_SPEED = b.comment("Attack speed of the Ultimate Shovel.") .defineInRange("shovelAttackSpeed", -3.0D, -10.0D, 10.0D);
ULTIMATE_HOE_ATTACK_DAMAGE = b.comment("Attack damage of the Ultimate Hoe.") .defineInRange("hoeAttackDamage", 8.0D, 0.0D, 1024.0D);
ULTIMATE_HOE_ATTACK_SPEED = b.comment("Attack speed of the Ultimate Hoe.") .defineInRange("hoeAttackSpeed", 0.0D, -10.0D, 10.0D);
ULTIMATE_TOOL_ENCHANTABILITY = b.comment("Enchantability for all Ultimate tools.") .defineInRange("toolEnchantability", 25, 0, 100);
ULTIMATE_TOOLS_THREE_BY_THREE_ENABLED = b
.comment("If false, Ultimate pickaxe, axe, shovel, and hoe lose their 3x3 mining mode and tooltip.")
.define("threeByThreeEnabled", true);
b.pop();
// Ultimate Bow
b.push("ultimateBow");
ULTIMATE_BOW_ATTACK_DAMAGE = b.comment("Damage dealt to non-player targets.") .defineInRange("attackDamage", 18.0D, 0.0D, 1024.0D);
ULTIMATE_BOW_PLAYER_HEAL = b.comment("Health restored to players hit by arrows from this bow.") .defineInRange("playerHeal", 8.0D, 0.0D, 1024.0D);
ULTIMATE_BOW_DRAW_SPEED_MULTIPLIER = b.comment("Draw speed relative to a normal bow. 2.5 = 2.5x as fast.") .defineInRange("drawSpeedMultiplier", 2.5D, 0.1D, 16.0D);
ULTIMATE_BOW_COMES_ENCHANTED_WITH_FLAME = b.comment("If true, Ultimate Bows are automatically given and keep the Flame enchant.") .define("comesEnchantedWithFlame", true);
ULTIMATE_BOW_ENCHANTABILITY = b.comment("Enchantability of the Ultimate Bow.") .defineInRange("enchantability", 20, 0, 100);
b.pop();
// Ultimate Crossbow
b.push("ultimateCrossbow");
ULTIMATE_CROSSBOW_ATTACK_DAMAGE = b.comment("Damage dealt by projectiles fired from the Ultimate Crossbow.").defineInRange("attackDamage", 8.0D, 0.0D, 1024.0D);
ULTIMATE_CROSSBOW_CHARGE_SPEED_MULTIPLIER = b
.comment(
"Charge speed relative to a normal crossbow. Below 1.0 is slower.",
"Default 0.25 means 4x slower (16-arrow full load ~5 s). Quick Charge still applies."
)
.defineInRange("chargeSpeedMultiplier", 0.25D, 0.01D, 16.0D);
ULTIMATE_CROSSBOW_ENCHANTABILITY = b.comment("Enchantability of the Ultimate Crossbow.").defineInRange("enchantability", 20, 0, 100);
b.pop();
// Ultimate Mace
b.push("ultimateMace");
ULTIMATE_MACE_DAMAGE_MULTIPLIER = b.comment("Multiplier on both base damage and smash bonus. 1.5 = 50% stronger than a normal mace.").defineInRange("damageMultiplier", 1.5D, 0.1D, 16.0D);
ULTIMATE_MACE_ATTACK_SPEED = b.comment("Attack speed of the Ultimate Mace.") .defineInRange("attackSpeed", -3.4D, -10.0D, 10.0D);
ULTIMATE_MACE_ENCHANTABILITY = b.comment("Enchantability of the Ultimate Mace.") .defineInRange("enchantability", 20, 0, 100);
b.pop();
// Ultimate Armor
b.push("ultimateArmor");
ULTIMATE_ARMOR_COMES_ENCHANTED = b.comment("If true, newly crafted Ultimate Armor has Protection, Fire Protection, Projectile Protection, and Blast Protection.").define("comesEnchanted", true);
ULTIMATE_ARMOR_ENCHANTABILITY = b.comment("Enchantability for all Ultimate Armor pieces.") .defineInRange("enchantability", 10, 0, 100);
ULTIMATE_HELMET_ARMOR_VALUE = b.comment("Armor points of the Ultimate Helmet.") .defineInRange("helmetArmor", 4, 0, 100);
ULTIMATE_CHESTPLATE_ARMOR_VALUE = b.comment("Armor points of the Ultimate Chestplate.") .defineInRange("chestplateArmor", 9, 0, 100);
ULTIMATE_LEGGINGS_ARMOR_VALUE = b.comment("Armor points of the Ultimate Leggings.") .defineInRange("leggingsArmor", 7, 0, 100);
ULTIMATE_BOOTS_ARMOR_VALUE = b.comment("Armor points of the Ultimate Boots.") .defineInRange("bootsArmor", 4, 0, 100);
ULTIMATE_HELMET_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Ultimate Helmet.") .defineInRange("helmetToughness", 3.0D, 0.0D, 100.0D);
ULTIMATE_CHESTPLATE_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Ultimate Chestplate.") .defineInRange("chestplateToughness", 3.0D, 0.0D, 100.0D);
ULTIMATE_LEGGINGS_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Ultimate Leggings.") .defineInRange("leggingsToughness", 3.0D, 0.0D, 100.0D);
ULTIMATE_BOOTS_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Ultimate Boots.") .defineInRange("bootsToughness", 3.0D, 0.0D, 100.0D);
ULTIMATE_ARMOR_KNOCKBACK_RESISTANCE = b.comment("Knockback resistance granted by each Ultimate Armor piece.") .defineInRange("knockbackResistance", 0.1D, 0.0D, 1.0D);
b.pop();
// Battle Axe
b.push("battleAxe");
BATTLE_AXE_ATTACK_DAMAGE = b.comment("Attack damage of the Battle Axe.").defineInRange("attackDamage", 44.0D, 0.0D, 4096.0D);
BATTLE_AXE_ATTACK_SPEED = b.comment("Attack speed of the Battle Axe.") .defineInRange("attackSpeed", -3.1D, -10.0D, 10.0D);
b.pop();
// Big Bertha
b.push("bigBertha");
BIG_BERTHA_ATTACK_DAMAGE = b.comment("Attack damage of Big Bertha.") .defineInRange("attackDamage", 55.0D, 0.0D, 4096.0D);
BIG_BERTHA_REACH_BONUS = b.comment("Extra attack range in blocks while held in main hand.") .defineInRange("reachBonus", 3.0D, 0.0D, 32.0D);
BIG_BERTHA_ATTACK_SPEED = b.comment("Attack speed of Big Bertha.") .defineInRange("attackSpeed", -3.0D, -10.0D, 10.0D);
BIG_BERTHA_BASILISK_PARALYZE_DURATION_TICKS = b.comment("Paralyze duration used by Basilisk mode.") .defineInRange("basiliskParalyzeDurationTicks", 80, 0, 20000);
BIG_BERTHA_KRAKEN_SLOW_TICKS = b.comment("Slow duration used by Kraken mode.") .defineInRange("krakenSlowTicks", 80, 0, 20000);
BIG_BERTHA_BASILISK_COOLDOWN_SECONDS = b.comment("Cooldown in seconds after using Basilisk mode's right-click paralyze.") .defineInRange("basiliskModeCooldownSeconds", 7.0D, 0.0D, 3600.0D);
BIG_BERTHA_LUCID_INVERTED_DURATION_SECONDS = b.comment("How long Lucid mode's inversion lasts on a target, in seconds.") .defineInRange("lucidModeInvertedDurationSeconds", 3.0D, 0.0D, 3600.0D);
BIG_BERTHA_LUCID_INVERTED_DAMAGE_BONUS_PERCENT = b.comment("Bonus damage percent from Lucid mode while the wielder is inverted.") .defineInRange("lucidModeInvertedDamageBonusPercent", 25.0D, 0.0D, 1000.0D);
b.pop();
b.push("scorpionWhip");
SCORPION_WHIP_BASE_DAMAGE = b.comment("Base lash damage of the Scorpion Stinger Whip.").defineInRange("baseDamage", 10.0D, 0.0D, 4096.0D);
SCORPION_WHIP_REACH_BONUS = b.comment("Extra entity interaction range in blocks while held in main hand.").defineInRange("reachBonus", 5.0D, 0.0D, 32.0D);
SCORPION_WHIP_POISON_DURATION_TICKS = b.comment("Poison duration applied on lash.").defineInRange("poisonDurationTicks", 100, 0, 20000);
SCORPION_WHIP_TETHER_MAX_RANGE = b.comment("Maximum tether distance before it breaks.").defineInRange("tetherMaxRange", 10.0D, 0.0D, 128.0D);
SCORPION_WHIP_REEL_COOLDOWN_TICKS = b.comment("Cooldown in ticks between reel pulls.").defineInRange("reelCooldownTicks", 10, 0, 20000);
SCORPION_WHIP_SNAP_BONUS_DAMAGE = b.comment("Bonus damage dealt when snapping the tether free.").defineInRange("snapBonusDamage", 6.0D, 0.0D, 4096.0D);
SCORPION_WHIP_SNAP_COOLDOWN_TICKS = b.comment("Cooldown in ticks after a snap release.").defineInRange("snapCooldownTicks", 30, 0, 20000);
SCORPION_WHIP_PULL_STRENGTH = b.comment("Pull strength applied to normal tethered targets.").defineInRange("pullStrength", 0.75D, 0.0D, 8.0D);
SCORPION_WHIP_HEAVY_PULL_MULTIPLIER = b.comment("Reduced pull strength applied to heavy targets.").defineInRange("heavyPullMultiplier", 0.25D, 0.0D, 8.0D);
SCORPION_WHIP_SELF_PULL_MULTIPLIER = b.comment("Self-pull strength toward heavy tethered targets.").defineInRange("selfPullMultiplier", 0.45D, 0.0D, 8.0D);
b.pop();
b.push("bloodCrystalKatana");
BLOOD_CRYSTAL_KATANA_ATTACK_DAMAGE = b.comment("Attack damage of the Blood Crystal Katana.").defineInRange("attackDamage", 7, 0, 1024);
BLOOD_CRYSTAL_KATANA_LAUNCH_STRENGTH = b.comment("Forward launch strength applied to the wielder when the katana hits.").defineInRange("launchStrength", 1.1D, 0.0D, 8.0D);
BLOOD_CRYSTAL_KATANA_TRAIL_DURATION_TICKS = b.comment("How long the crimson trail lingers after a katana hit, in ticks.").defineInRange("trailDurationTicks", 12, 0, 200);
b.pop();
// Nightmare Gear
b.push("nightmareArmor");
NIGHTMARE_HELMET_ARMOR_VALUE = b.comment("Armor points of the Nightmare Helmet. (Netherite default: 3)") .defineInRange("helmetArmor", 3, 0, 100);
NIGHTMARE_CHESTPLATE_ARMOR_VALUE = b.comment("Armor points of the Nightmare Chestplate. (Netherite default: 8)") .defineInRange("chestplateArmor", 8, 0, 100);
NIGHTMARE_LEGGINGS_ARMOR_VALUE = b.comment("Armor points of the Nightmare Leggings. (Netherite default: 6)") .defineInRange("leggingsArmor", 6, 0, 100);
NIGHTMARE_BOOTS_ARMOR_VALUE = b.comment("Armor points of the Nightmare Boots. (Netherite default: 3)") .defineInRange("bootsArmor", 3, 0, 100);
NIGHTMARE_HELMET_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Nightmare Helmet.") .defineInRange("helmetToughness", 3.0D, 0.0D, 100.0D);
NIGHTMARE_CHESTPLATE_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Nightmare Chestplate.") .defineInRange("chestplateToughness", 3.0D, 0.0D, 100.0D);
NIGHTMARE_LEGGINGS_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Nightmare Leggings.") .defineInRange("leggingsToughness", 3.0D, 0.0D, 100.0D);
NIGHTMARE_BOOTS_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Nightmare Boots.") .defineInRange("bootsToughness", 3.0D, 0.0D, 100.0D);
NIGHTMARE_ARMOR_KNOCKBACK_RESISTANCE = b.comment("Knockback resistance granted by each Nightmare Armor piece.") .defineInRange("knockbackResistance", 0.1D, 0.0D, 1.0D);
NIGHTMARE_ARMOR_DREAD_AURA_RANGE_PER_PIECE = b
.comment(
"Dread Aura radius added per Nightmare Armor piece worn.",
"Full set (4 pieces) gives 5.0 blocks by default."
)
.defineInRange("dreadAuraRangePerPiece", 1.25D, 0.0D, 64.0D);
b.pop();
b.push("nightmareSword");
NIGHTMARE_SWORD_BASE_DAMAGE = b
.comment(
"Base attack damage. Also the minimum damage at full health.",
"Formula: damage = baseDamage * (1 + missingHealthFraction * scalingFactor)"
)
.defineInRange("baseDamage", 30.0D, 0.0D, 1024.0D);
NIGHTMARE_SWORD_ATTACK_SPEED = b.comment("Attack speed of the Nightmare Sword.").defineInRange("attackSpeed", -2.4D, -10.0D, 10.0D);
NIGHTMARE_SWORD_SCALING_FACTOR = b
.comment(
"How much damage scales with missing health.",
"At 1.0 and 0 HP remaining: damage doubles. At full health: always baseDamage."
)
.defineInRange("scalingFactor", 1.0D, 0.0D, 100.0D);
b.pop();
b.push("fallenKingCrown");
FALLEN_KING_CROWN_ARMOR_VALUE = b.comment("Armor value of the Fallen King's Crown. Default: 2 (gold helmet).").defineInRange("armorValue", 2, 0, 100);
FALLEN_KING_CROWN_ARMOR_TOUGHNESS = b.comment("Armor toughness of the Fallen King's Crown. Default: 0.0 (gold helmet).").defineInRange("armorToughness", 0.0D, 0.0D, 100.0D);
b.pop();
// Blood Crystal Armor
b.push("bloodCrystalArmor");
BLOOD_CRYSTAL_ARMOR_SHIELD_RECHARGE_TICKS = b.comment("Ticks (20/s) for each armor Bloodglass Shield to recharge after shattering. Default: 600 (30s).").defineInRange("armorShieldRechargeTicks", 600, 1, 72000);
BLOOD_CRYSTAL_APPLE_SHIELD_COUNT = b.comment("Number of Bloodglass Shields granted by a Blood Crystal Apple (Bloodglass Ward level). Default: 2.").defineInRange("appleShieldCount", 2, 1, 8);
BLOOD_CRYSTAL_APPLE_DURATION_TICKS = b.comment("Duration in ticks of the Bloodglass Ward effect from a Blood Crystal Apple. Default: 2400 (120s).").defineInRange("appleDurationTicks", 2400, 1, 144000);
BLOOD_CRYSTAL_APPLE_SHIELD_RECHARGE_TICKS = b.comment("Ticks for each apple Bloodglass Shield to recharge while Bloodglass Ward is active. Default: 600 (30s).").defineInRange("appleShieldRechargeTicks", 600, 1, 72000);
BLOOD_CRYSTAL_HARD_MAX_SHIELDS = b.comment("Hard cap on total Bloodglass Shields from all sources combined. Default: 8.").defineInRange("hardMaxShields", 8, 1, 20);
BLOOD_CRYSTAL_HELMET_DEFENSE = b.comment("Armor defense value for Blood Crystal Helmet. Default: 2 (iron).").defineInRange("helmetDefense", 2, 0, 30);
BLOOD_CRYSTAL_CHESTPLATE_DEFENSE = b.comment("Armor defense value for Blood Crystal Chestplate. Default: 6 (iron).").defineInRange("chestplateDefense", 6, 0, 30);
BLOOD_CRYSTAL_LEGGINGS_DEFENSE = b.comment("Armor defense value for Blood Crystal Leggings. Default: 5 (iron).").defineInRange("leggingsDefense", 5, 0, 30);
BLOOD_CRYSTAL_BOOTS_DEFENSE = b.comment("Armor defense value for Blood Crystal Boots. Default: 2 (iron).").defineInRange("bootsDefense", 2, 0, 30);
BLOOD_CRYSTAL_ARMOR_TOUGHNESS = b.comment("Armor toughness for all Blood Crystal armor pieces. Default: 0.0 (iron).").defineInRange("armorToughness", 0.0, 0.0, 20.0);
BLOOD_CRYSTAL_HELMET_DURABILITY = b.comment("Max durability of Blood Crystal Helmet. Default: 77 (gold).").defineInRange("helmetDurability", 77, 1, 2000);
BLOOD_CRYSTAL_CHESTPLATE_DURABILITY = b.comment("Max durability of Blood Crystal Chestplate. Default: 112 (gold).").defineInRange("chestplateDurability", 112, 1, 2000);
BLOOD_CRYSTAL_LEGGINGS_DURABILITY = b.comment("Max durability of Blood Crystal Leggings. Default: 105 (gold).").defineInRange("leggingsDurability", 105, 1, 2000);
BLOOD_CRYSTAL_BOOTS_DURABILITY = b.comment("Max durability of Blood Crystal Boots. Default: 91 (gold).").defineInRange("bootsDurability", 91, 1, 2000);
b.pop();
// Squidzooka
b.push("squidzooka");
SQUIDZOOKA_COOLDOWN_SECONDS = b.comment("Cooldown in seconds after firing. Set to 0 to disable.").defineInRange("cooldownSeconds", 1.0D, 0.0D, 3600.0D);
SQUIDZOOKA_LAUNCH_VELOCITY = b.comment("Initial launch velocity applied to the Missile Squid.") .defineInRange("launchVelocity", 2.1D, 0.1D, 20.0D);
b.pop();
// Size Rays
b.push("sizeRays");
SIZE_CHANGING_RAYS_ENABLED = b
.comment(
"If false, shrink and grow rays cannot be fired by players or dispensers.",
"Immune entities tag: data/antarchy/tags/entity_types/size_changing_immune.json"
)
.define("enabled", true);
SIZE_RAY_COOLDOWN_SECONDS = b.comment("Cooldown in seconds after firing. Set to 0 to disable.") .defineInRange("cooldownSeconds", 1.0D, 0.0D, 3600.0D);
SIZE_RAY_MIN_SCALE = b.comment("Minimum entity scale the shrink ray can reach. 1.0 is normal size.") .defineInRange("minScale", 0.1D, 0.01D, 64.0D);
SIZE_RAY_MAX_SCALE = b.comment("Maximum entity scale the growth ray can reach. 1.0 is normal size.") .defineInRange("maxScale", 5.0D, 0.01D, 64.0D);
SIZE_RAY_DELTA_PER_HIT = b.comment("Scale delta per projectile hit. 0.25 changes scale by 25% of normal per hit.") .defineInRange("deltaPerHit", 0.25D, 0.001D, 64.0D);
SHRINKING_POTION_DELTA = b.comment("Scale delta per level of Shrinking Potion. Level II applies double this value.") .defineInRange("shrinkingPotionDelta", 0.3D, 0.001D, 64.0D);
GROWTH_POTION_DELTA = b.comment("Scale delta per level of Growth Potion. Level II applies double this value.") .defineInRange("growthPotionDelta", 0.5D, 0.001D, 64.0D);
b.pop();
// Gravity
b.push("gravity");
INVERT_PROJECTILES_FROM_INVERTED_PLAYERS = b
.comment(
"If true, projectiles fired by inverted players keep their inverted launch and gravity.",
"Affects bows, crossbows, throwables, and firework boosts."
)
.define("invertProjectilesFromInvertedPlayers", false);
b.pop();
// Gravity Gun
b.push("gravityGun");
GRAVITY_GUN_ENABLED = b.comment("Master toggle for the Gravity Gun.") .define("enabled", true);
GRAVITY_GUN_BLOCKS_ENABLED = b.comment("If false, the Gravity Gun cannot grab blocks.") .define("blocksEnabled", true);
GRAVITY_GUN_ENTITIES_ENABLED = b.comment("If false, the Gravity Gun cannot grab entities.") .define("entitiesEnabled", true);
GRAVITY_GUN_RANGE = b.comment("Search range for a target in blocks.") .defineInRange("range", 16.0D, 1.0D, 64.0D);
GRAVITY_GUN_THROW_STRENGTH = b.comment("Velocity multiplier when throwing a held target.") .defineInRange("throwStrength", 1.8D, 0.1D, 10.0D);
GRAVITY_GUN_BLAST_STRENGTH = b.comment("Velocity multiplier for the push blast.") .defineInRange("blastStrength", 1.4D, 0.1D, 10.0D);
GRAVITY_GUN_COOLDOWN_SECONDS = b.comment("Cooldown in seconds after any Gravity Gun action.") .defineInRange("cooldownSeconds", 0.35D, 0.0D, 10.0D);
GRAVITY_GUN_MAX_HOLD_DISTANCE = b.comment("Maximum distance a held target can be pushed from the player, in blocks.") .defineInRange("maxHoldDistance", 10.0D, 1.5D, 64.0D);
b.pop();
// Miscellaneous items / consumables
b.push("ductTape");
DUCT_TAPE_REPAIR_PERCENT_PER_USE = b
.comment("Fraction of max durability repaired per use. 0.25 = 25% per application.")
.defineInRange("repairPercentPerUse", 0.25D, 0.0D, 1.0D);
b.pop();
b.push("potentNyxite");
POTENT_NYXITE_INVERTED_DURATION_SECONDS = b
.comment("How long the Inverted effect from Potent Nyxite eruptions lasts, in seconds.")
.defineInRange("invertedDurationSeconds", 10.0D, 0.0D, 3600.0D);
b.pop();
b.push("corneaEar");
CORNEA_EAR_NIGHT_VISION_SECONDS = b
.comment("How long Cornea Ear grants Night Vision after being eaten, in seconds.")
.defineInRange("nightVisionSeconds", 15, 0, 600);
b.pop();
b.push("moggles");
MOGGLES_VISION_RADIUS = b.comment("Radius in blocks of the see-through effect (cube side = 2r+1).").defineInRange("visionRadius", 2, 1, 16);
MOGGLES_VISION_MAX_LIGHT = b.comment("Maximum block light level where Moggles vision activates.") .defineInRange("visionMaxLight", 7, 0, 15);
MOGGLES_VISION_ALPHA = b.comment("Alpha of blocks made visible by Moggles. 0 = invisible, 1 = opaque.").defineInRange("visionAlpha", 0.35D, 0.05D, 1.0D);
b.pop();
SPEC = b.build();
}
private AntarchyToolsConfig() {}
static double basiliskDaggerAttackDamage() { return BASILISK_DAGGER_ATTACK_DAMAGE.get(); }
static double basiliskDaggerAttackSpeed() { return BASILISK_DAGGER_ATTACK_SPEED.get(); }
static int basiliskDaggerPoisonDurationTicks() { return BASILISK_DAGGER_POISON_DURATION_TICKS.get(); }
static int basiliskDaggerPoisonAmplifier() { return BASILISK_DAGGER_POISON_AMPLIFIER.get(); }
static double ultimateSwordAttackDamage() { return ULTIMATE_SWORD_ATTACK_DAMAGE.get(); }
static double ultimateSwordAttackSpeed() { return ULTIMATE_SWORD_ATTACK_SPEED.get(); }
static double ultimatePickaxeAttackDamage() { return ULTIMATE_PICKAXE_ATTACK_DAMAGE.get(); }
static double ultimatePickaxeAttackSpeed() { return ULTIMATE_PICKAXE_ATTACK_SPEED.get(); }
static double ultimateAxeAttackDamage() { return ULTIMATE_AXE_ATTACK_DAMAGE.get(); }
static double ultimateAxeAttackSpeed() { return ULTIMATE_AXE_ATTACK_SPEED.get(); }
static double ultimateShovelAttackDamage() { return ULTIMATE_SHOVEL_ATTACK_DAMAGE.get(); }
static double ultimateShovelAttackSpeed() { return ULTIMATE_SHOVEL_ATTACK_SPEED.get(); }
static double ultimateHoeAttackDamage() { return ULTIMATE_HOE_ATTACK_DAMAGE.get(); }
static double ultimateHoeAttackSpeed() { return ULTIMATE_HOE_ATTACK_SPEED.get(); }
static int ultimateToolEnchantability() { return ULTIMATE_TOOL_ENCHANTABILITY.get(); }
static boolean ultimateToolsThreeByThreeEnabled() { return ULTIMATE_TOOLS_THREE_BY_THREE_ENABLED.get(); }
static double ultimateBowAttackDamage() { return ULTIMATE_BOW_ATTACK_DAMAGE.get(); }
static double ultimateBowPlayerHeal() { return ULTIMATE_BOW_PLAYER_HEAL.get(); }
static double ultimateBowDrawSpeedMultiplier() { return ULTIMATE_BOW_DRAW_SPEED_MULTIPLIER.get(); }
static boolean ultimateBowComesEnchantedWithFlame() { return ULTIMATE_BOW_COMES_ENCHANTED_WITH_FLAME.get(); }
static int ultimateBowEnchantability() { return ULTIMATE_BOW_ENCHANTABILITY.get(); }
static double ultimateCrossbowAttackDamage() { return ULTIMATE_CROSSBOW_ATTACK_DAMAGE.get(); }
static double ultimateCrossbowChargeSpeedMultiplier() { return ULTIMATE_CROSSBOW_CHARGE_SPEED_MULTIPLIER.get(); }
static int ultimateCrossbowEnchantability() { return ULTIMATE_CROSSBOW_ENCHANTABILITY.get(); }
static double ultimateMaceDamageMultiplier() { return ULTIMATE_MACE_DAMAGE_MULTIPLIER.get(); }
static double ultimateMaceAttackSpeed() { return ULTIMATE_MACE_ATTACK_SPEED.get(); }
static int ultimateMaceEnchantability() { return ULTIMATE_MACE_ENCHANTABILITY.get(); }
static boolean ultimateArmorComesEnchanted() { return ULTIMATE_ARMOR_COMES_ENCHANTED.get(); }
static int ultimateArmorEnchantability() { return ULTIMATE_ARMOR_ENCHANTABILITY.get(); }
static int ultimateHelmetArmorValue() { return ULTIMATE_HELMET_ARMOR_VALUE.get(); }
static int ultimateChestplateArmorValue() { return ULTIMATE_CHESTPLATE_ARMOR_VALUE.get(); }
static int ultimateLeggingsArmorValue() { return ULTIMATE_LEGGINGS_ARMOR_VALUE.get(); }
static int ultimateBootsArmorValue() { return ULTIMATE_BOOTS_ARMOR_VALUE.get(); }
static double ultimateHelmetArmorToughness() { return ULTIMATE_HELMET_ARMOR_TOUGHNESS.get(); }
static double ultimateChestplateArmorToughness() { return ULTIMATE_CHESTPLATE_ARMOR_TOUGHNESS.get(); }
static double ultimateLeggingsArmorToughness() { return ULTIMATE_LEGGINGS_ARMOR_TOUGHNESS.get(); }
static double ultimateBootsArmorToughness() { return ULTIMATE_BOOTS_ARMOR_TOUGHNESS.get(); }
static double ultimateArmorKnockbackResistance() { return ULTIMATE_ARMOR_KNOCKBACK_RESISTANCE.get(); }
static double battleAxeAttackDamage() { return BATTLE_AXE_ATTACK_DAMAGE.get(); }
static double battleAxeAttackSpeed() { return BATTLE_AXE_ATTACK_SPEED.get(); }
static double bigBerthaAttackDamage() { return BIG_BERTHA_ATTACK_DAMAGE.get(); }
static double bigBerthaReachBonus() { return BIG_BERTHA_REACH_BONUS.get(); }
static double bigBerthaAttackSpeed() { return BIG_BERTHA_ATTACK_SPEED.get(); }
static int bigBerthaBasiliskParalyzeDurationTicks() { return BIG_BERTHA_BASILISK_PARALYZE_DURATION_TICKS.get(); }
static int bigBerthaKrakenSlowTicks() { return BIG_BERTHA_KRAKEN_SLOW_TICKS.get(); }
static double bigBerthaBasiliskCooldownSeconds() { return BIG_BERTHA_BASILISK_COOLDOWN_SECONDS.get(); }
static double bigBerthaLucidInvertedDurationSeconds() { return BIG_BERTHA_LUCID_INVERTED_DURATION_SECONDS.get(); }
static double bigBerthaLucidInvertedDamageBonusPercent(){ return BIG_BERTHA_LUCID_INVERTED_DAMAGE_BONUS_PERCENT.get(); }
static double scorpionWhipBaseDamage() { return SCORPION_WHIP_BASE_DAMAGE.get(); }
static double scorpionWhipReachBonus() { return SCORPION_WHIP_REACH_BONUS.get(); }
static int scorpionWhipPoisonDurationTicks() { return SCORPION_WHIP_POISON_DURATION_TICKS.get(); }
static double scorpionWhipTetherMaxRange() { return SCORPION_WHIP_TETHER_MAX_RANGE.get(); }
static int scorpionWhipReelCooldownTicks() { return SCORPION_WHIP_REEL_COOLDOWN_TICKS.get(); }
static double scorpionWhipSnapBonusDamage() { return SCORPION_WHIP_SNAP_BONUS_DAMAGE.get(); }
static int scorpionWhipSnapCooldownTicks() { return SCORPION_WHIP_SNAP_COOLDOWN_TICKS.get(); }
static double scorpionWhipPullStrength() { return SCORPION_WHIP_PULL_STRENGTH.get(); }
static double scorpionWhipHeavyPullMultiplier() { return SCORPION_WHIP_HEAVY_PULL_MULTIPLIER.get(); }
static double scorpionWhipSelfPullMultiplier() { return SCORPION_WHIP_SELF_PULL_MULTIPLIER.get(); }
static int bloodCrystalKatanaAttackDamage() { return BLOOD_CRYSTAL_KATANA_ATTACK_DAMAGE.get(); }
static double bloodCrystalKatanaLaunchStrength() { return BLOOD_CRYSTAL_KATANA_LAUNCH_STRENGTH.get(); }
static int bloodCrystalKatanaTrailDurationTicks() { return BLOOD_CRYSTAL_KATANA_TRAIL_DURATION_TICKS.get(); }
static int nightmareHelmetArmorValue() { return NIGHTMARE_HELMET_ARMOR_VALUE.get(); }
static int nightmareChestplateArmorValue() { return NIGHTMARE_CHESTPLATE_ARMOR_VALUE.get(); }
static int nightmareLeggingsArmorValue() { return NIGHTMARE_LEGGINGS_ARMOR_VALUE.get(); }
static int nightmareBootsArmorValue() { return NIGHTMARE_BOOTS_ARMOR_VALUE.get(); }
static double nightmareHelmetArmorToughness() { return NIGHTMARE_HELMET_ARMOR_TOUGHNESS.get(); }
static double nightmareChestplateArmorToughness() { return NIGHTMARE_CHESTPLATE_ARMOR_TOUGHNESS.get(); }
static double nightmareLeggingsArmorToughness() { return NIGHTMARE_LEGGINGS_ARMOR_TOUGHNESS.get(); }
static double nightmareBootsArmorToughness() { return NIGHTMARE_BOOTS_ARMOR_TOUGHNESS.get(); }
static double nightmareArmorKnockbackResistance() { return NIGHTMARE_ARMOR_KNOCKBACK_RESISTANCE.get(); }
static double nightmareArmorDreadAuraRangePerPiece() { return NIGHTMARE_ARMOR_DREAD_AURA_RANGE_PER_PIECE.get(); }
static double nightmareSwordBaseDamage() { return NIGHTMARE_SWORD_BASE_DAMAGE.get(); }
static double nightmareSwordAttackSpeed() { return NIGHTMARE_SWORD_ATTACK_SPEED.get(); }
static double nightmareSwordScalingFactor() { return NIGHTMARE_SWORD_SCALING_FACTOR.get(); }
static int fallenKingCrownArmorValue() { return FALLEN_KING_CROWN_ARMOR_VALUE.get(); }
static double fallenKingCrownArmorToughness() { return FALLEN_KING_CROWN_ARMOR_TOUGHNESS.get(); }
static int bloodCrystalArmorShieldRechargeTicks() { return BLOOD_CRYSTAL_ARMOR_SHIELD_RECHARGE_TICKS.get(); }
static int bloodCrystalAppleShieldCount() { return BLOOD_CRYSTAL_APPLE_SHIELD_COUNT.get(); }
static int bloodCrystalAppleDurationTicks() { return BLOOD_CRYSTAL_APPLE_DURATION_TICKS.get(); }
static int bloodCrystalAppleShieldRechargeTicks() { return BLOOD_CRYSTAL_APPLE_SHIELD_RECHARGE_TICKS.get(); }
static int bloodCrystalHardMaxShields() { return BLOOD_CRYSTAL_HARD_MAX_SHIELDS.get(); }
static int bloodCrystalHelmetDefense() { return BLOOD_CRYSTAL_HELMET_DEFENSE.get(); }
static int bloodCrystalChestplateDefense() { return BLOOD_CRYSTAL_CHESTPLATE_DEFENSE.get(); }
static int bloodCrystalLeggingsDefense() { return BLOOD_CRYSTAL_LEGGINGS_DEFENSE.get(); }
static int bloodCrystalBootsDefense() { return BLOOD_CRYSTAL_BOOTS_DEFENSE.get(); }
static double bloodCrystalArmorToughness() { return BLOOD_CRYSTAL_ARMOR_TOUGHNESS.get(); }
static int bloodCrystalHelmetDurability() { return BLOOD_CRYSTAL_HELMET_DURABILITY.get(); }
static int bloodCrystalChestplateDurability() { return BLOOD_CRYSTAL_CHESTPLATE_DURABILITY.get(); }
static int bloodCrystalLeggingsDurability() { return BLOOD_CRYSTAL_LEGGINGS_DURABILITY.get(); }
static int bloodCrystalBootsDurability() { return BLOOD_CRYSTAL_BOOTS_DURABILITY.get(); }
static double squidzookaCooldownSeconds() { return SQUIDZOOKA_COOLDOWN_SECONDS.get(); }
static double squidzookaLaunchVelocity() { return SQUIDZOOKA_LAUNCH_VELOCITY.get(); }
static boolean sizeChangingRaysEnabled() { return SIZE_CHANGING_RAYS_ENABLED.get(); }
static double sizeRayCooldownSeconds() { return SIZE_RAY_COOLDOWN_SECONDS.get(); }
static double sizeRayMinScale() { return SIZE_RAY_MIN_SCALE.get(); }
static double sizeRayMaxScale() { return SIZE_RAY_MAX_SCALE.get(); }
static double sizeRayDeltaPerHit() { return SIZE_RAY_DELTA_PER_HIT.get(); }
static double shrinkingPotionDelta() { return SHRINKING_POTION_DELTA.get(); }
static double growthPotionDelta() { return GROWTH_POTION_DELTA.get(); }
static boolean invertProjectilesFromInvertedPlayers() { return INVERT_PROJECTILES_FROM_INVERTED_PLAYERS.get(); }
static boolean gravityGunEnabled() { return GRAVITY_GUN_ENABLED.get(); }
static boolean gravityGunBlocksEnabled() { return GRAVITY_GUN_BLOCKS_ENABLED.get(); }
static boolean gravityGunEntitiesEnabled() { return GRAVITY_GUN_ENTITIES_ENABLED.get(); }
static double gravityGunRange() { return GRAVITY_GUN_RANGE.get(); }
static double gravityGunThrowStrength() { return GRAVITY_GUN_THROW_STRENGTH.get(); }
static double gravityGunBlastStrength() { return GRAVITY_GUN_BLAST_STRENGTH.get(); }
static double gravityGunCooldownSeconds() { return GRAVITY_GUN_COOLDOWN_SECONDS.get(); }
static double gravityGunMaxHoldDistance() { return GRAVITY_GUN_MAX_HOLD_DISTANCE.get(); }
static double ductTapeRepairPercentPerUse() { return DUCT_TAPE_REPAIR_PERCENT_PER_USE.get(); }
static double potentNyxiteInvertedDurationSeconds() { return POTENT_NYXITE_INVERTED_DURATION_SECONDS.get(); }
static int corneaEarNightVisionSeconds() { return CORNEA_EAR_NIGHT_VISION_SECONDS.get(); }
static int mogglesVisionRadius() { return MOGGLES_VISION_RADIUS.get(); }
static int mogglesVisionMaxLight() { return MOGGLES_VISION_MAX_LIGHT.get(); }
static float mogglesVisionAlpha() { return MOGGLES_VISION_ALPHA.get().floatValue(); }
}
@@ -0,0 +1,34 @@
package com.craisinlord.antarchy.neoforge;
import com.craisinlord.antarchy.compat.infinity.InfinityCompatBridge;
import net.lerariemann.infinity.util.InfinityMethods;
import net.lerariemann.infinity.util.teleport.WarpLogic;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.RandomSource;
public final class NeoForgeInfinityCompat implements InfinityCompatBridge {
@Override
public boolean isAvailable() {
return true;
}
@Override
public ResourceLocation getRandomDimensionId(RandomSource random) {
try {
return InfinityMethods.getRandomId(random);
} catch (Throwable throwable) {
return null;
}
}
@Override
public boolean requestWarp(ServerPlayer player, ResourceLocation dimensionId) {
try {
WarpLogic.requestWarp(player, dimensionId, false);
return true;
} catch (Throwable throwable) {
return false;
}
}
}
@@ -0,0 +1,16 @@
package com.craisinlord.antarchy.neoforge;
import com.craisinlord.antarchy.Antarchy;
import net.minecraft.world.level.block.state.properties.BlockSetType;
import net.minecraft.world.level.block.state.properties.WoodType;
public final class OuranwoodWoodTypes {
public static final WoodType OURANWOOD = register("ouranwood");
private OuranwoodWoodTypes() {
}
private static WoodType register(String name) {
return WoodType.register(new WoodType(Antarchy.MODID + ":" + name, BlockSetType.JUNGLE));
}
}
@@ -0,0 +1,30 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.client.KeyMapping;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;
import net.neoforged.neoforge.client.settings.KeyConflictContext;
@EventBusSubscriber(modid = Antarchy.MODID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public final class AntarchyKeyBindings {
public static final String CATEGORY = "key.categories.antarchy";
public static final KeyMapping BRUTALFLY_FLAP = new KeyMapping(
"key.antarchy.brutalfly_flap",
KeyConflictContext.IN_GAME,
InputConstants.Type.KEYSYM,
InputConstants.KEY_LSHIFT,
CATEGORY
);
private AntarchyKeyBindings() {}
@SubscribeEvent
public static void onRegisterKeyMappings(RegisterKeyMappingsEvent event) {
event.register(BRUTALFLY_FLAP);
}
}
@@ -0,0 +1,457 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.client.hud.BloodglassHudRenderer;
import com.craisinlord.antarchy.content.client.particle.*;
import com.craisinlord.antarchy.content.client.renderer.*;
import com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeBlocks;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeEntites;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeItems;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
import com.mojang.blaze3d.shaders.FogShape;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.BoatModel;
import net.minecraft.client.model.ChestBoatModel;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.client.resources.PlayerSkin;
import net.minecraft.client.renderer.entity.ThrownItemRenderer;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import software.bernie.geckolib.renderer.GeoEntityRenderer;
import net.minecraft.client.Camera;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.BiomeColors;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.CampfireRenderer;
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.item.CrossbowItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.component.ChargedProjectiles;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.FoliageColor;
import net.minecraft.world.level.material.FluidState;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent;
import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent;
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;
import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions;
import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent;
import net.neoforged.neoforge.client.model.DynamicFluidContainerModel;
import org.joml.Vector3f;
import software.bernie.geckolib.animatable.GeoAnimatable;
import software.bernie.geckolib.animatable.client.GeoRenderProvider;
@EventBusSubscriber(modid = Antarchy.MODID, bus = EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public final class AntarchyNeoForgeClient {
private static final ResourceLocation DR_TRAYAURUS_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png");
private static final ResourceLocation OURANWOOD_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/boat/ouranwood.png");
private static final ResourceLocation OURANWOOD_CHEST_BOAT_TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/chest_boat/ouranwood.png");
private static final ResourceLocation WATER_STILL = ResourceLocation.withDefaultNamespace("block/water_still");
private static final ResourceLocation WATER_FLOW = ResourceLocation.withDefaultNamespace("block/water_flow");
private static final ResourceLocation WATER_OVERLAY = ResourceLocation.withDefaultNamespace("block/water_overlay");
private static final ResourceLocation UNDERWATER_OVERLAY = ResourceLocation.withDefaultNamespace("textures/misc/underwater.png");
private static final ResourceLocation ANTIWATER_STILL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_still");
private static final ResourceLocation ANTIWATER_FLOW = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_flow");
private AntarchyNeoForgeClient() {
}
@SubscribeEvent
public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerBlockEntityRenderer(AntarchyNeoforgeBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), CampfireRenderer::new);
event.registerEntityRenderer(AntarchyNeoforgeEntites.EASTER_BUNNY.get(), context -> withParalyzedGeoLayer(new EasterBunnyRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.FLYING_SQUIRREL.get(), context -> withParalyzedGeoLayer(new FlyingSquirrelRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.CATERPILLAR.get(), context -> withParalyzedGeoLayer(new CaterpillarRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.BUTTERFLY.get(), context -> withParalyzedGeoLayer(new ButterflyRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.REVERIE.get(), context -> withParalyzedGeoLayer(new ReverieRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.BRUTALFLY.get(), context -> withParalyzedGeoLayer(new BrutalflyRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.RED_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.BROWN_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.RAINBOW_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.MOLEWORM.get(), context -> withParalyzedGeoLayer(new MolewormRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.MANTIS.get(), context -> withParalyzedGeoLayer(new MantisRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.MOLEVORE.get(), context -> withParalyzedGeoLayer(new MolevoreRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.TRIFFID.get(), context -> withParalyzedGeoLayer(new TriffidRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_BOAT_TEXTURE, false));
event.registerEntityRenderer(AntarchyNeoforgeEntites.OURANWOOD_CHEST_BOAT_ENTITY.get(), context -> new OuranwoodBoatRenderer<>(context, OURANWOOD_CHEST_BOAT_TEXTURE, true));
event.registerEntityRenderer(AntarchyNeoforgeEntites.APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.GOLDEN_APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.ENCHANTED_GOLDEN_APPLE_COW.get(), context -> withParalyzedGeoLayer(new AppleCowRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.DIAMOND_MINECART.get(), DiamondMinecartRenderer::new);
event.registerEntityRenderer(AntarchyNeoforgeEntites.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, DR_TRAYAURUS_TEXTURE));
event.registerEntityRenderer(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), context -> withParalyzedGeoLayer(new CloudSharkRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.KRAKEN.get(), context -> withParalyzedGeoLayer(new KrakenRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), context -> withParalyzedGeoLayer(new MissileSquidRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE.get(), context -> withParalyzedGeoLayer(new NightmareRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID.get(), context -> withParalyzedGeoLayer(new LucidRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.WASP.get(), context -> withParalyzedGeoLayer(new WaspRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.BOMBER.get(), context -> withParalyzedGeoLayer(new BomberRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.BASILISK.get(), context -> withParalyzedGeoLayer(new BasiliskRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new);
event.registerEntityRenderer(AntarchyNeoforgeEntites.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new);
event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID_BOLT.get(), LucidBoltRenderer::new);
event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID_PEARL_PROJECTILE.get(), ThrownItemRenderer::new);
event.registerEntityRenderer(AntarchyNeoforgeEntites.HUSH_PROJECTILE.get(), HushProjectileRenderer::new);
event.registerEntityRenderer(AntarchyNeoforgeEntites.BRUTALFLY_ORB.get(), BrutalflyOrbRenderer::new);
event.registerEntityRenderer(AntarchyNeoforgeEntites.UPWARD_FALLING_BLOCK.get(), com.craisinlord.antarchy.content.client.renderer.UpwardFallingBlockRenderer::new);
event.registerEntityRenderer(AntarchyNeoforgeEntites.SCORPION.get(), context -> withParalyzedGeoLayer(new ScorpionRenderer(context)));
event.registerEntityRenderer(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), context -> withParalyzedGeoLayer(new EmperorScorpionRenderer(context)));
}
@SubscribeEvent
@SuppressWarnings({"unchecked", "rawtypes"})
public static void addRenderLayers(EntityRenderersEvent.AddLayers event) {
for (PlayerSkin.Model skin : event.getSkins()) {
LivingEntityRenderer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> renderer =
(LivingEntityRenderer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>>) event.getSkin(skin);
if (renderer != null) {
renderer.addLayer(new ParalyzedStonePlayerLayer(renderer));
renderer.addLayer(new BrutalflyElytraLayer(renderer));
renderer.addLayer(new FallenKingCrownLayer(renderer));
}
}
BuiltInRegistries.ENTITY_TYPE.forEach(entityType -> addParalyzedLayerToEntity(event, entityType));
}
@SubscribeEvent
public static void registerLayerDefinitions(EntityRenderersEvent.RegisterLayerDefinitions event) {
event.registerLayerDefinition(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel);
event.registerLayerDefinition(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel);
}
@SuppressWarnings({"rawtypes", "unchecked"})
private static <E extends Entity> void addParalyzedLayerToEntity(EntityRenderersEvent.AddLayers event, EntityType<E> entityType) {
if (entityType == EntityType.PLAYER) {
return;
}
var renderer = event.getRenderer(entityType);
if (renderer == null) {
return;
}
if (!(renderer instanceof LivingEntityRenderer<?, ?> livingRenderer)) {
return;
}
if (renderer instanceof GeoEntityRenderer<?>) {
return;
}
((LivingEntityRenderer) livingRenderer).addLayer(new ParalyzedStoneLivingLayer<>(livingRenderer));
}
private static <T extends LivingEntity & GeoAnimatable> GeoEntityRenderer<T> withParalyzedGeoLayer(GeoEntityRenderer<T> renderer) {
renderer.addRenderLayer(new ParalyzedStoneGeoLayer<>(renderer));
return renderer;
}
@SubscribeEvent
public static void registerBlockColors(RegisterColorHandlersEvent.Block event) {
event.register(
(state, level, pos, tintIndex) -> level != null && pos != null
? BiomeColors.getAverageFoliageColor(level, pos)
: FoliageColor.getDefaultColor(),
AntarchyNeoforgeBlocks.OURANWOOD_LEAVES.get()
);
event.register(
(state, level, pos, tintIndex) -> 0xFF4A0000,
AntarchyNeoforgeBlocks.ANTIWATER_BLOCK.get()
);
}
@SubscribeEvent
public static void registerItemColors(RegisterColorHandlersEvent.Item event) {
event.register(
(stack, tintIndex) -> FoliageColor.getDefaultColor(),
AntarchyNeoforgeItems.OURANWOOD_LEAVES_ITEM.get()
);
event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.ICHOR_BUCKET.get());
event.register(new DynamicFluidContainerModel.Colors(), AntarchyNeoforgeItems.ANTIWATER_BUCKET.get());
}
@SubscribeEvent
public static void registerParticleProviders(RegisterParticleProvidersEvent event) {
event.registerSpriteSet(AntarchyNeoforgeMisc.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new);
event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new);
event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true));
event.registerSpecial(AntarchyNeoforgeMisc.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider());
event.registerSpecial(AntarchyNeoforgeMisc.HYPNOTIC_GAS_CLOUD_DOWN.get(), new HypnoticGasCloudParticle.Provider(true));
event.registerSpriteSet(AntarchyNeoforgeMisc.INVERTED_GEYSER_BASE.get(), InvertedGeyserBaseParticle.Provider::new);
event.registerSpriteSet(AntarchyNeoforgeMisc.INVERTED_GEYSER_PLUME.get(), InvertedGeyserPlumeParticle.Provider::new);
event.registerSpriteSet(AntarchyNeoforgeMisc.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new);
event.registerSpecial(AntarchyNeoforgeMisc.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider());
event.registerSpriteSet(AntarchyNeoforgeMisc.FIREFLY.get(), FireflyParticle.Provider::new);
}
@SubscribeEvent
public static void registerGuiLayers(RegisterGuiLayersEvent event) {
event.registerAboveAll(
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "dread_darkness"),
(guiGraphics, partialTick) -> DreadHudRenderer.render(guiGraphics)
);
event.registerAboveAll(
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "paralyzed_stone"),
(guiGraphics, partialTick) -> ParalyzedHudRenderer.render(guiGraphics)
);
event.registerAboveAll(
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "brutalfly_elytra"),
(guiGraphics, partialTick) -> BrutalflyElytraHudRenderer.render(guiGraphics)
);
event.registerAboveAll(
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bloodglass_hearts"),
(guiGraphics, partialTick) -> BloodglassHudRenderer.render(guiGraphics)
);
event.registerAboveAll(
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "triffid_goo"),
(guiGraphics, partialTick) -> TriffidGooHudRenderer.render(guiGraphics)
);
}
@SubscribeEvent
public static void registerClientExtensions(RegisterClientExtensionsEvent event) {
Antarchy.LOGGER.info("[Antiwater] Registering antiwater client fluid textures still={} flow={}", ANTIWATER_STILL, ANTIWATER_FLOW);
event.registerFluidType(new IClientFluidTypeExtensions() {
@Override
public ResourceLocation getStillTexture() {
return ANTIWATER_STILL;
}
@Override
public ResourceLocation getFlowingTexture() {
return ANTIWATER_FLOW;
}
@Override
public ResourceLocation getOverlayTexture() {
return WATER_OVERLAY;
}
@Override
public ResourceLocation getRenderOverlayTexture(Minecraft mc) {
return UNDERWATER_OVERLAY;
}
@Override
public int getTintColor() {
return 0xFF2A0306;
}
@Override
public int getTintColor(FluidState state, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos) {
return 0xFF2A0306;
}
@Override
public Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) {
return new Vector3f(0.16F, 0.02F, 0.03F);
}
@Override
public void modifyFogRender(Camera camera, net.minecraft.client.renderer.FogRenderer.FogMode mode, float renderDistance, float partialTick, float nearDistance, float farDistance, FogShape shape) {
RenderSystem.setShaderFogStart(0.5F);
RenderSystem.setShaderFogEnd(Math.min(farDistance, 10.0F));
RenderSystem.setShaderFogShape(FogShape.CYLINDER);
}
}, AntarchyNeoForgeFluidTypes.ICHOR_TYPE.get());
event.registerFluidType(new IClientFluidTypeExtensions() {
@Override
public ResourceLocation getStillTexture() {
return WATER_STILL;
}
@Override
public ResourceLocation getFlowingTexture() {
return WATER_FLOW;
}
@Override
public ResourceLocation getOverlayTexture() {
return WATER_OVERLAY;
}
@Override
public ResourceLocation getRenderOverlayTexture(Minecraft mc) {
return UNDERWATER_OVERLAY;
}
@Override
public int getTintColor() {
return 0xFFFF1A1A;
}
@Override
public int getTintColor(FluidState state, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos) {
return 0xFFFF1A1A;
}
@Override
public boolean renderFluid(FluidState fluidState, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos, VertexConsumer vertexConsumer, net.minecraft.world.level.block.state.BlockState blockState) {
var sprites = net.neoforged.neoforge.client.textures.FluidSpriteCache.getFluidSprites(getter, pos, fluidState);
int tint = net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions.of(fluidState).getTintColor(fluidState, getter, pos);
AntiwaterFluidRenderer.render(getter, pos, vertexConsumer, blockState, fluidState, sprites[0], sprites[1], sprites[2], tint);
return true;
}
@Override
public Vector3f modifyFogColor(Camera camera, float partialTick, ClientLevel level, int renderDistance, float darkenWorldAmount, Vector3f fluidFogColor) {
return new Vector3f(0.52F, 0.06F, 0.06F);
}
@Override
public void modifyFogRender(Camera camera, net.minecraft.client.renderer.FogRenderer.FogMode mode, float renderDistance, float partialTick, float nearDistance, float farDistance, FogShape shape) {
RenderSystem.setShaderFogStart(0.5F);
RenderSystem.setShaderFogEnd(Math.min(farDistance, 12.0F));
RenderSystem.setShaderFogShape(FogShape.CYLINDER);
}
}, AntarchyNeoForgeFluidTypes.ANTIWATER_TYPE.get());
registerGeoItemExtensionSizeRay(event, AntarchyNeoforgeItems.SHRINK_RAY.get());
registerGeoItemExtensionSizeRay(event, AntarchyNeoforgeItems.GROWTH_RAY.get());
registerGeoItemExtension(event, AntarchyNeoforgeItems.GRAVITY_GUN.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD);
registerGeoItemExtension(event, AntarchyNeoforgeItems.SQUIDZOOKA.get(), HumanoidModel.ArmPose.CROSSBOW_HOLD);
registerGeoItemExtension(event, AntarchyNeoforgeItems.BATTLE_AXE.get());
registerGeoItemExtension(event, AntarchyNeoforgeItems.BIG_BERTHA.get());
}
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) {
event.enqueueWork(() -> {
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_LEAVES.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_DOOR.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_TRAPDOOR.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TORCHFLOWER_BUSH.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.HUSHWEED.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORNEA_STALK.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.BLOOD_CRYSTAL_CRYSTAL.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_TORCH.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_WALL_TORCH.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_LANTERN.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_CAMPFIRE.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_FIRE.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.URANIUM_DOOR.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TITANIUM_DOOR.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.URANIUM_TRAPDOOR.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TITANIUM_TRAPDOOR.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.URANIUM_BARS.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TITANIUM_BARS.get(), RenderType.cutout());
ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CLOUD_BLOCK.get(), RenderType.translucent());
registerUltimateBowProperties();
registerUltimateCrossbowProperties();
});
}
private static void registerUltimateBowProperties() {
ItemProperties.register(
AntarchyNeoforgeItems.ULTIMATE_BOW.get(),
ResourceLocation.withDefaultNamespace("pull"),
(stack, level, entity, seed) -> {
if (entity == null || entity.getUseItem() != stack) {
return 0.0F;
}
return (stack.getItem().getUseDuration(stack, entity) - entity.getUseItemRemainingTicks()) / 20.0F;
}
);
ItemProperties.register(
AntarchyNeoforgeItems.ULTIMATE_BOW.get(),
ResourceLocation.withDefaultNamespace("pulling"),
(stack, level, entity, seed) ->
entity != null && entity.isUsingItem() && entity.getUseItem() == stack ? 1.0F : 0.0F
);
}
private static void registerUltimateCrossbowProperties() {
ItemProperties.register(
AntarchyNeoforgeItems.ULTIMATE_CROSSBOW.get(),
ResourceLocation.withDefaultNamespace("pull"),
(stack, level, entity, seed) -> {
if (entity == null || CrossbowItem.isCharged(stack) || entity.getUseItem() != stack) {
return 0.0F;
}
float adjustedChargeDuration = Math.max(1.0F, stack.getItem().getUseDuration(stack, entity) - 3.0F);
return Mth.clamp((stack.getItem().getUseDuration(stack, entity) - entity.getUseItemRemainingTicks()) / adjustedChargeDuration, 0.0F, 1.0F);
}
);
ItemProperties.register(
AntarchyNeoforgeItems.ULTIMATE_CROSSBOW.get(),
ResourceLocation.withDefaultNamespace("pulling"),
(stack, level, entity, seed) ->
entity != null && entity.isUsingItem() && entity.getUseItem() == stack && !CrossbowItem.isCharged(stack) ? 1.0F : 0.0F
);
ItemProperties.register(
AntarchyNeoforgeItems.ULTIMATE_CROSSBOW.get(),
ResourceLocation.withDefaultNamespace("charged"),
(stack, level, entity, seed) -> CrossbowItem.isCharged(stack) ? 1.0F : 0.0F
);
ItemProperties.register(
AntarchyNeoforgeItems.ULTIMATE_CROSSBOW.get(),
ResourceLocation.withDefaultNamespace("firework"),
(stack, level, entity, seed) -> CrossbowItem.isCharged(stack) && ChargedProjectiles.of(stack).contains(Items.FIREWORK_ROCKET) ? 1.0F : 0.0F
);
}
private static void registerGeoItemExtension(RegisterClientExtensionsEvent event, Item item) {
registerGeoItemExtension(event, item, null);
}
private static void registerGeoItemExtension(RegisterClientExtensionsEvent event, Item item, HumanoidModel.ArmPose armPose) {
event.registerItem(new IClientItemExtensions() {
@Override
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
return GeoRenderProvider.of(item).getGeoItemRenderer();
}
@Override
public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, net.minecraft.world.InteractionHand hand, net.minecraft.world.item.ItemStack itemStack) {
return armPose;
}
}, item);
}
private static void registerGeoItemExtensionSizeRay(RegisterClientExtensionsEvent event, Item item) {
event.registerItem(new IClientItemExtensions() {
@Override
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
return GeoRenderProvider.of(item).getGeoItemRenderer();
}
@Override
public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, net.minecraft.world.InteractionHand hand, net.minecraft.world.item.ItemStack itemStack) {
if (entityLiving.isUsingItem() && entityLiving.getUsedItemHand() == hand) {
return HumanoidModel.ArmPose.CROSSBOW_HOLD;
}
return null;
}
}, item);
}
}
@@ -0,0 +1,213 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.client.BloodCrystalKatanaTrailClientState;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.BufferUploader;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.MeshData;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.vertex.VertexFormat;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
import org.joml.Matrix4f;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.GAME)
public final class BloodCrystalKatanaTrailHandler {
private static final int MAX_TRAIL_POINTS = 16;
private static final int POINT_LIFETIME_TICKS = 10;
private static final double MIN_DISTANCE_BETWEEN_POINTS = 0.05D;
private static final float CORE_WIDTH = 0.06F;
private static final float GLOW_WIDTH = 0.16F;
private static final Map<Integer, ArrayDeque<TrailPoint>> TRAILS = new HashMap<>();
private BloodCrystalKatanaTrailHandler() {}
private static final class TrailPoint {
private final Vec3 position;
private int age;
private TrailPoint(Vec3 position) {
this.position = position;
}
private float alpha() {
return 1.0F - ((float) age / POINT_LIFETIME_TICKS);
}
private boolean expired() {
return age >= POINT_LIFETIME_TICKS || alpha() <= 0.01F;
}
}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
Minecraft mc = Minecraft.getInstance();
if (mc.level == null) {
TRAILS.clear();
BloodCrystalKatanaTrailClientState.clear();
return;
}
if (mc.isPaused()) {
return;
}
BloodCrystalKatanaTrailClientState.tick();
Set<Integer> activeIds = new HashSet<>();
for (Entity entity : mc.level.entitiesForRendering()) {
int remaining = BloodCrystalKatanaTrailClientState.getRemainingTicks(entity.getId());
if (remaining <= 0) {
continue;
}
activeIds.add(entity.getId());
Vec3 position = entity.position().add(0.0D, entity.getBbHeight() * 0.45D, 0.0D);
ArrayDeque<TrailPoint> points = TRAILS.computeIfAbsent(entity.getId(), id -> new ArrayDeque<>());
if (points.isEmpty() || points.peekFirst().position.distanceToSqr(position) >= MIN_DISTANCE_BETWEEN_POINTS * MIN_DISTANCE_BETWEEN_POINTS) {
points.addFirst(new TrailPoint(position));
while (points.size() > MAX_TRAIL_POINTS) {
points.pollLast();
}
}
}
TRAILS.keySet().removeIf(id -> !activeIds.contains(id));
for (ArrayDeque<TrailPoint> points : TRAILS.values()) {
Iterator<TrailPoint> iterator = points.iterator();
while (iterator.hasNext()) {
TrailPoint point = iterator.next();
point.age++;
if (point.expired()) {
iterator.remove();
}
}
}
TRAILS.values().removeIf(ArrayDeque::isEmpty);
}
@SubscribeEvent
public static void onRenderLevelStage(RenderLevelStageEvent event) {
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES || TRAILS.isEmpty()) {
return;
}
Minecraft mc = Minecraft.getInstance();
if (mc.level == null) {
return;
}
Camera camera = event.getCamera();
Vec3 cameraPos = camera.getPosition();
Matrix4f matrix = event.getPoseStack().last().pose();
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.depthMask(false);
RenderSystem.disableCull();
RenderSystem.setShader(GameRenderer::getPositionColorShader);
Tesselator tesselator = Tesselator.getInstance();
List<List<TrailPoint>> snapshots = new ArrayList<>(TRAILS.size());
for (ArrayDeque<TrailPoint> deque : TRAILS.values()) {
if (deque.size() >= 2) {
snapshots.add(new ArrayList<>(deque));
}
}
if (snapshots.isEmpty()) {
RenderSystem.enableCull();
RenderSystem.depthMask(true);
RenderSystem.disableBlend();
return;
}
BufferBuilder glowBuffer = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
for (List<TrailPoint> points : snapshots) {
buildTrail(glowBuffer, matrix, points, cameraPos, GLOW_WIDTH, 0.95F, 0.14F, 0.18F, 0.38F);
}
MeshData glowMesh = glowBuffer.build();
if (glowMesh != null) {
BufferUploader.drawWithShader(glowMesh);
}
BufferBuilder coreBuffer = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
for (List<TrailPoint> points : snapshots) {
buildTrail(coreBuffer, matrix, points, cameraPos, CORE_WIDTH, 1.0F, 0.32F, 0.36F, 0.92F);
}
MeshData coreMesh = coreBuffer.build();
if (coreMesh != null) {
BufferUploader.drawWithShader(coreMesh);
}
RenderSystem.enableCull();
RenderSystem.depthMask(true);
RenderSystem.disableBlend();
}
private static void buildTrail(BufferBuilder builder, Matrix4f matrix, List<TrailPoint> points, Vec3 cameraPos,
float width, float red, float green, float blue, float alphaScale) {
for (int i = 0; i < points.size() - 1; i++) {
TrailPoint newer = points.get(i);
TrailPoint older = points.get(i + 1);
Vec3 side = cameraFacingRight(newer.position, older.position, cameraPos);
if (side == null) {
continue;
}
float nearAlpha = newer.alpha() * alphaScale;
float farAlpha = older.alpha() * alphaScale * 0.85F;
Vec3 nearOffset = side.scale(width);
Vec3 farOffset = side.scale(width);
Vec3 nearPos = newer.position.subtract(cameraPos);
Vec3 farPos = older.position.subtract(cameraPos);
builder.addVertex(matrix, (float) (nearPos.x + nearOffset.x), (float) (nearPos.y + nearOffset.y), (float) (nearPos.z + nearOffset.z)).setColor(red, green, blue, nearAlpha);
builder.addVertex(matrix, (float) (nearPos.x - nearOffset.x), (float) (nearPos.y - nearOffset.y), (float) (nearPos.z - nearOffset.z)).setColor(red, green, blue, nearAlpha);
builder.addVertex(matrix, (float) (farPos.x - farOffset.x), (float) (farPos.y - farOffset.y), (float) (farPos.z - farOffset.z)).setColor(red, green, blue, farAlpha);
builder.addVertex(matrix, (float) (farPos.x + farOffset.x), (float) (farPos.y + farOffset.y), (float) (farPos.z + farOffset.z)).setColor(red, green, blue, farAlpha);
}
}
private static Vec3 cameraFacingRight(Vec3 current, Vec3 next, Vec3 cameraPos) {
Vec3 segmentDirection = next.subtract(current);
if (segmentDirection.lengthSqr() < 1.0E-8D) {
return null;
}
segmentDirection = segmentDirection.normalize();
Vec3 midpoint = current.add(next).scale(0.5D);
Vec3 cameraDirection = cameraPos.subtract(midpoint);
if (cameraDirection.lengthSqr() < 1.0E-8D) {
return null;
}
cameraDirection = cameraDirection.normalize();
Vec3 side = segmentDirection.cross(cameraDirection);
if (side.lengthSqr() < 1.0E-8D) {
side = segmentDirection.cross(new Vec3(0.0D, 1.0D, 0.0D));
if (side.lengthSqr() < 1.0E-8D) {
return null;
}
}
return side.normalize();
}
}
@@ -0,0 +1,85 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState;
import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper;
import com.craisinlord.antarchy.content.item.BrutalflyElytraItem;
import com.craisinlord.antarchy.content.network.BrutalflyElytraFlapPayload;
import net.minecraft.client.Minecraft;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import net.neoforged.neoforge.client.event.RenderGuiLayerEvent;
import net.neoforged.neoforge.client.gui.VanillaGuiLayers;
import net.neoforged.neoforge.network.PacketDistributor;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class BrutalflyElytraClientHandler {
private static final Logger LOGGER = LoggerFactory.getLogger("Antarchy/BrutalflyElytra");
private static boolean lastJumpDown;
private static int chargeTicks;
static {
BrutalflyElytraItem.FLAP_KEY_NAME = () -> AntarchyKeyBindings.BRUTALFLY_FLAP.getTranslatedKeyMessage();
}
private BrutalflyElytraClientHandler() {
}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
BrutalflyElytraClientState.tick();
Minecraft minecraft = Minecraft.getInstance();
if (minecraft.player == null || minecraft.level == null || minecraft.screen != null) {
reset();
return;
}
if (!BrutalflyElytraItem.isWearingBrutalflyElytra(minecraft.player) || !minecraft.player.isFallFlying()) {
reset();
return;
}
boolean sneakDown = AntarchyKeyBindings.BRUTALFLY_FLAP.isDown();
boolean wasSneakDown = lastJumpDown;
lastJumpDown = sneakDown;
if (sneakDown) {
chargeTicks = Math.min(chargeTicks + 1, BrutalflyElytraFlightHelper.FLAP_CHARGE_TICKS_MAX);
return;
}
if (wasSneakDown && chargeTicks > 0) {
PacketDistributor.sendToServer(new BrutalflyElytraFlapPayload(chargeTicks));
}
chargeTicks = 0;
}
private static void reset() {
lastJumpDown = false;
chargeTicks = 0;
}
@SubscribeEvent
public static void onRenderGuiLayer(RenderGuiLayerEvent.Pre event) {
Minecraft minecraft = Minecraft.getInstance();
if (minecraft.player == null || !BrutalflyElytraItem.isWearingBrutalflyElytra(minecraft.player) || !minecraft.player.isFallFlying()) {
return;
}
if (event.getName().equals(VanillaGuiLayers.EXPERIENCE_BAR) || event.getName().equals(VanillaGuiLayers.EXPERIENCE_LEVEL)) {
event.setCanceled(true);
}
}
public static boolean isCharging() {
return chargeTicks > 0 && lastJumpDown;
}
public static int getChargeTicks() {
return chargeTicks;
}
}
@@ -0,0 +1,46 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper;
import com.craisinlord.antarchy.content.item.BrutalflyElytraItem;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
public final class BrutalflyElytraHudRenderer {
private static final ResourceLocation JUMP_BAR_BACKGROUND = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_background.png");
private static final ResourceLocation JUMP_BAR_PROGRESS = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_progress.png");
private static final int BAR_WIDTH = 182;
private static final int BAR_HEIGHT = 5;
private BrutalflyElytraHudRenderer() {
}
public static void render(GuiGraphics guiGraphics) {
Minecraft minecraft = Minecraft.getInstance();
Player player = minecraft.player;
if (player == null || minecraft.screen != null || player.isDeadOrDying()) {
return;
}
if (!BrutalflyElytraItem.isWearingBrutalflyElytra(player) || !player.isFallFlying()) {
return;
}
int width = minecraft.getWindow().getGuiScaledWidth();
int height = minecraft.getWindow().getGuiScaledHeight();
int x0 = width / 2 - BAR_WIDTH / 2;
int y0 = height - 29;
guiGraphics.blit(JUMP_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT);
int chargeTicks = BrutalflyElytraClientHandler.getChargeTicks();
float chargeRatio = Mth.clamp(chargeTicks / (float) BrutalflyElytraFlightHelper.FLAP_CHARGE_TICKS_MAX, 0.0F, 1.0F);
int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH);
if (filledWidth > 0) {
guiGraphics.setColor(1.0F, 1.0F, 1.0F, 0.35F + chargeRatio * 0.65F);
guiGraphics.blit(JUMP_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT);
guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F);
}
}
}
@@ -0,0 +1,49 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity;
import com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload;
import net.minecraft.client.Minecraft;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import net.neoforged.neoforge.network.PacketDistributor;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class DiamondMinecartClientHandler {
private DiamondMinecartClientHandler() {
}
private static byte lastFlags = 0;
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
Minecraft mc = Minecraft.getInstance();
if (!AntarchySettings.diamondMinecartEnabled()) return;
if (mc.player == null || mc.level == null) return;
if (!(mc.player.getVehicle() instanceof DiamondMinecartEntity)) return;
if (mc.screen != null) {
if (lastFlags != 0) {
PacketDistributor.sendToServer(new DiamondMinecartInputPayload((byte) 0));
lastFlags = 0;
}
return;
}
byte flags = 0;
if (mc.options.keyUp.isDown()) flags |= DiamondMinecartInputPayload.FLAG_FORWARD;
if (mc.options.keyDown.isDown()) flags |= DiamondMinecartInputPayload.FLAG_BACK;
if (mc.options.keyLeft.isDown()) flags |= DiamondMinecartInputPayload.FLAG_LEFT;
if (mc.options.keyRight.isDown()) flags |= DiamondMinecartInputPayload.FLAG_RIGHT;
if (flags != lastFlags) {
PacketDistributor.sendToServer(new DiamondMinecartInputPayload(flags));
lastFlags = flags;
}
}
}
@@ -0,0 +1,390 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.AntarchyTags;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeSounds;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.DeathScreen;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
import java.util.Random;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class DreadClientHandler {
private static final int FOOTSTEP_MIN_INTERVAL_TICKS = 10;
private static final int FOOTSTEP_MAX_INTERVAL_TICKS = 22;
private static final int APPARITION_MIN_DURATION_TICKS = 16;
private static final int APPARITION_MAX_DURATION_TICKS = 34;
private static final int LUNGE_MIN_DURATION_TICKS = 10;
private static final int LUNGE_MAX_DURATION_TICKS = 16;
private static int nextSoundTick = 0;
private static int nextApparitionTick = 0;
private static int nextFootstepTick = 0;
private static final List<ApparitionEntry> ACTIVE_APPARITIONS = new ArrayList<>();
private static final Random RANDOM = new Random();
private DreadClientHandler() {
}
private enum ApparitionType {
PERIPHERAL_SILHOUETTE,
CROSSING_SHADOW,
LUNGE_FLASH
}
private static final class ApparitionEntry {
private final ApparitionType type;
private final float scale;
private final int lifetime;
private final int baseColor;
private float xNorm;
private float yNorm;
private float xVelocity;
private float yVelocity;
private int age;
private ApparitionEntry(ApparitionType type, float xNorm, float yNorm, float xVelocity, float yVelocity, float scale, int lifetime, int baseColor) {
this.type = type;
this.xNorm = xNorm;
this.yNorm = yNorm;
this.xVelocity = xVelocity;
this.yVelocity = yVelocity;
this.scale = scale;
this.lifetime = lifetime;
this.baseColor = baseColor;
}
private void tick() {
this.age++;
this.xNorm += this.xVelocity;
this.yNorm += this.yVelocity;
}
private boolean expired() {
return this.age >= this.lifetime;
}
private float alpha() {
float progress = this.lifetime <= 0 ? 1.0F : (float) this.age / (float) this.lifetime;
return Mth.clamp(Mth.sin(progress * (float) Math.PI), 0.0F, 1.0F);
}
}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
Minecraft mc = Minecraft.getInstance();
if (mc.level == null || mc.player == null) {
resetState();
return;
}
if (mc.isPaused()) {
return;
}
Player player = mc.player;
if (!player.isAlive() || player.isRemoved() || player.deathTime > 0 || player.isDeadOrDying() || mc.screen instanceof DeathScreen) {
resetState();
return;
}
tickApparitions();
if (!player.hasEffect(AntarchyNeoforgeMisc.DREAD)) {
resetState();
return;
}
if (AntarchySettings.dreadHallucinationSoundsEnabled()) {
nextSoundTick--;
if (nextSoundTick <= 0) {
playHallucinationSound(mc, player);
nextSoundTick = randomIntervalTicks(
AntarchySettings.dreadHallucinationSoundMinInterval(),
AntarchySettings.dreadHallucinationSoundMaxInterval()
);
}
} else {
nextSoundTick = 0;
}
nextFootstepTick--;
if (nextFootstepTick <= 0) {
if (player.onGround() && player.getDeltaMovement().horizontalDistanceSqr() > 0.0025D) {
playFootstepSound(mc, player);
nextFootstepTick = randomTickInterval(FOOTSTEP_MIN_INTERVAL_TICKS, FOOTSTEP_MAX_INTERVAL_TICKS);
} else {
nextFootstepTick = 4;
}
}
if (AntarchySettings.dreadHallucinationMobsEnabled()) {
nextApparitionTick--;
if (nextApparitionTick <= 0) {
spawnApparition(mc, player);
nextApparitionTick = randomIntervalTicks(
AntarchySettings.dreadHallucinationMobMinInterval(),
AntarchySettings.dreadHallucinationMobMaxInterval()
);
}
} else {
nextApparitionTick = 0;
ACTIVE_APPARITIONS.clear();
}
}
public static void render(GuiGraphics guiGraphics) {
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
if (player == null || !player.hasEffect(AntarchyNeoforgeMisc.DREAD) || ACTIVE_APPARITIONS.isEmpty()) {
return;
}
int width = mc.getWindow().getGuiScaledWidth();
int height = mc.getWindow().getGuiScaledHeight();
for (ApparitionEntry entry : ACTIVE_APPARITIONS) {
float alpha = entry.alpha();
if (alpha <= 0.01F) {
continue;
}
switch (entry.type) {
case PERIPHERAL_SILHOUETTE -> renderPeripheralSilhouette(guiGraphics, width, height, entry, alpha);
case CROSSING_SHADOW -> renderCrossingShadow(guiGraphics, width, height, entry, alpha);
case LUNGE_FLASH -> renderLungeFlash(guiGraphics, width, height, entry, alpha);
}
}
}
private static void tickApparitions() {
Iterator<ApparitionEntry> iterator = ACTIVE_APPARITIONS.iterator();
while (iterator.hasNext()) {
ApparitionEntry entry = iterator.next();
entry.tick();
if (entry.expired()) {
iterator.remove();
}
}
}
private static void playHallucinationSound(Minecraft mc, Player player) {
Optional<HolderSet.Named<SoundEvent>> tagOpt =
BuiltInRegistries.SOUND_EVENT.getTag(AntarchyTags.SoundEvents.DREAD_HALLUCINATION_SOUNDS);
if (tagOpt.isEmpty()) {
return;
}
List<Holder<SoundEvent>> sounds = tagOpt.get().stream().toList();
if (sounds.isEmpty()) {
return;
}
SoundEvent soundEvent = sounds.get(RANDOM.nextInt(sounds.size())).value();
Vec3 look = player.getLookAngle();
double baseAngle = Math.atan2(-look.x, -look.z);
double spread = (RANDOM.nextDouble() - 0.5D) * Math.PI;
double angle = baseAngle + spread;
double distance = 10.0D + RANDOM.nextDouble() * 15.0D;
double soundX = player.getX() + Math.sin(angle) * distance;
double soundY = player.getY() + RANDOM.nextDouble() * 4.0D - 1.0D;
double soundZ = player.getZ() + Math.cos(angle) * distance;
mc.level.playLocalSound(
soundX,
soundY,
soundZ,
soundEvent,
SoundSource.HOSTILE,
1.0F,
0.85F + RANDOM.nextFloat() * 0.3F,
false
);
}
private static void spawnApparition(Minecraft mc, Player player) {
double roll = RANDOM.nextDouble();
if (roll < 0.5D) {
spawnPeripheralSilhouette();
return;
}
if (roll < 0.82D) {
spawnCrossingShadow();
return;
}
spawnLungeFlash(mc, player);
}
private static void spawnPeripheralSilhouette() {
boolean leftSide = RANDOM.nextBoolean();
float xNorm = leftSide ? 0.08F + RANDOM.nextFloat() * 0.08F : 0.84F + RANDOM.nextFloat() * 0.08F;
float yNorm = 0.48F + (RANDOM.nextFloat() - 0.5F) * 0.26F;
float scale = 0.85F + RANDOM.nextFloat() * 0.4F;
int lifetime = randomTickInterval(APPARITION_MIN_DURATION_TICKS, APPARITION_MAX_DURATION_TICKS);
ACTIVE_APPARITIONS.add(new ApparitionEntry(
ApparitionType.PERIPHERAL_SILHOUETTE,
xNorm,
yNorm,
leftSide ? -0.0015F : 0.0015F,
0.0F,
scale,
lifetime,
0x160000
));
}
private static void spawnCrossingShadow() {
boolean leftToRight = RANDOM.nextBoolean();
float xNorm = leftToRight ? -0.18F : 1.18F;
float yNorm = 0.38F + RANDOM.nextFloat() * 0.36F;
float velocity = leftToRight ? 0.04F + RANDOM.nextFloat() * 0.015F : -(0.04F + RANDOM.nextFloat() * 0.015F);
float scale = 0.9F + RANDOM.nextFloat() * 0.45F;
int lifetime = randomTickInterval(APPARITION_MIN_DURATION_TICKS, APPARITION_MAX_DURATION_TICKS);
ACTIVE_APPARITIONS.add(new ApparitionEntry(
ApparitionType.CROSSING_SHADOW,
xNorm,
yNorm,
velocity,
0.0F,
scale,
lifetime,
0x1A0000
));
}
private static void spawnLungeFlash(Minecraft mc, Player player) {
float xNorm = 0.5F + (RANDOM.nextBoolean() ? -1.0F : 1.0F) * (0.12F + RANDOM.nextFloat() * 0.12F);
float yNorm = 0.58F + (RANDOM.nextFloat() - 0.5F) * 0.12F;
float scale = 0.95F + RANDOM.nextFloat() * 0.35F;
int lifetime = randomTickInterval(LUNGE_MIN_DURATION_TICKS, LUNGE_MAX_DURATION_TICKS);
ACTIVE_APPARITIONS.add(new ApparitionEntry(
ApparitionType.LUNGE_FLASH,
xNorm,
yNorm,
0.0F,
-0.002F,
scale,
lifetime,
0x2A0000
));
mc.level.playLocalSound(
player.getX(),
player.getY() + 1.0D,
player.getZ(),
AntarchyNeoforgeSounds.NIGHTMARE_BITE.get(),
SoundSource.HOSTILE,
0.4F,
0.88F + RANDOM.nextFloat() * 0.12F,
false
);
}
private static void playFootstepSound(Minecraft mc, Player player) {
double soundX = player.getX() + (RANDOM.nextDouble() - 0.5D) * 1.2D;
double soundY = player.getY() - 0.95D;
double soundZ = player.getZ() + (RANDOM.nextDouble() - 0.5D) * 1.2D;
mc.level.playLocalSound(
soundX,
soundY,
soundZ,
SoundEvents.SILVERFISH_STEP,
SoundSource.HOSTILE,
0.45F,
0.85F + RANDOM.nextFloat() * 0.25F,
false
);
}
private static void renderPeripheralSilhouette(GuiGraphics guiGraphics, int width, int height, ApparitionEntry entry, float alpha) {
int centerX = Math.round(entry.xNorm * width);
int baseY = Math.round(entry.yNorm * height);
int bodyWidth = Math.round(width * 0.045F * entry.scale);
int bodyHeight = Math.round(height * 0.24F * entry.scale);
int headSize = Math.round(bodyWidth * 0.78F);
int x0 = centerX - bodyWidth / 2;
int y0 = baseY - bodyHeight / 2;
int outerColor = alphaColor(entry.baseColor, alpha * 0.8F);
int innerColor = alphaColor(0x5A0000, alpha * 0.22F);
guiGraphics.fill(x0, y0, x0 + bodyWidth, y0 + bodyHeight, outerColor);
guiGraphics.fill(x0 - headSize / 2 + bodyWidth / 2, y0 - headSize / 2, x0 + bodyWidth / 2 + headSize / 2, y0 + headSize / 2, outerColor);
guiGraphics.fill(x0 + bodyWidth / 6, y0 + bodyHeight / 6, x0 + bodyWidth - bodyWidth / 6, y0 + bodyHeight - bodyHeight / 7, innerColor);
}
private static void renderCrossingShadow(GuiGraphics guiGraphics, int width, int height, ApparitionEntry entry, float alpha) {
int centerX = Math.round(entry.xNorm * width);
int centerY = Math.round(entry.yNorm * height);
int shadowWidth = Math.round(width * 0.22F * entry.scale);
int shadowHeight = Math.round(height * 0.035F * entry.scale);
int outerColor = alphaColor(entry.baseColor, alpha * 0.65F);
int innerColor = alphaColor(0x340000, alpha * 0.28F);
guiGraphics.fill(centerX - shadowWidth / 2, centerY - shadowHeight / 2, centerX + shadowWidth / 2, centerY + shadowHeight / 2, outerColor);
guiGraphics.fill(centerX - shadowWidth / 3, centerY - shadowHeight, centerX + shadowWidth / 3, centerY + shadowHeight, innerColor);
}
private static void renderLungeFlash(GuiGraphics guiGraphics, int width, int height, ApparitionEntry entry, float alpha) {
int centerX = Math.round(entry.xNorm * width);
int centerY = Math.round(entry.yNorm * height);
int faceWidth = Math.round(width * 0.11F * entry.scale);
int faceHeight = Math.round(height * 0.12F * entry.scale);
int shadowColor = alphaColor(entry.baseColor, alpha * 0.82F);
int glowColor = alphaColor(0x4A0000, alpha * 0.25F);
int eyeColor = alphaColor(0xB02020, alpha * 0.8F);
guiGraphics.fill(centerX - faceWidth / 2, centerY - faceHeight / 2, centerX + faceWidth / 2, centerY + faceHeight / 2, shadowColor);
guiGraphics.fill(centerX - faceWidth, centerY - faceHeight / 3, centerX + faceWidth, centerY + faceHeight, glowColor);
int eyeWidth = Math.max(2, faceWidth / 7);
int eyeHeight = Math.max(2, faceHeight / 12);
int eyeY = centerY - faceHeight / 8;
int eyeOffset = faceWidth / 4;
guiGraphics.fill(centerX - eyeOffset - eyeWidth, eyeY, centerX - eyeOffset + eyeWidth, eyeY + eyeHeight, eyeColor);
guiGraphics.fill(centerX + eyeOffset - eyeWidth, eyeY, centerX + eyeOffset + eyeWidth, eyeY + eyeHeight, eyeColor);
}
private static void resetState() {
ACTIVE_APPARITIONS.clear();
nextSoundTick = 0;
nextApparitionTick = 0;
nextFootstepTick = 0;
}
private static int randomIntervalTicks(double minSeconds, double maxSeconds) {
double seconds = minSeconds + RANDOM.nextDouble() * Math.max(0.0D, maxSeconds - minSeconds);
return Math.max(1, (int) (seconds * 20.0D));
}
private static int randomTickInterval(int minTicks, int maxTicks) {
return minTicks + RANDOM.nextInt(Math.max(1, maxTicks - minTicks + 1));
}
private static int alphaColor(int rgb, float alpha) {
int alphaByte = Mth.clamp((int) (alpha * 255.0F), 0, 255);
return (alphaByte << 24) | rgb;
}
}
@@ -0,0 +1,28 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
public final class DreadHudRenderer {
private DreadHudRenderer() {
}
public static void render(GuiGraphics guiGraphics) {
Minecraft minecraft = Minecraft.getInstance();
Player player = minecraft.player;
if (player == null || minecraft.screen != null || player.isDeadOrDying() || !player.hasEffect(AntarchyNeoforgeMisc.DREAD)) {
return;
}
float pulse = Math.max(0.0F, Mth.sin(player.tickCount * ((float) Math.PI * 2.0F / 80.0F)));
int alpha = Mth.clamp(18 + Mth.floor(pulse * 64.0F), 0, 255);
int color = (alpha << 24) | 0x120000;
int width = minecraft.getWindow().getGuiScaledWidth();
int height = minecraft.getWindow().getGuiScaledHeight();
guiGraphics.fill(0, 0, width, height, color);
DreadClientHandler.render(guiGraphics);
}
}
@@ -0,0 +1,38 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.block.DuctTapeBlock;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.MovementInputUpdateEvent;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class DuctTapeClientHandler {
private DuctTapeClientHandler() {
}
@SubscribeEvent
public static void onMovementInputUpdate(MovementInputUpdateEvent event) {
if (!(event.getEntity() instanceof LocalPlayer player)) {
return;
}
Minecraft mc = Minecraft.getInstance();
if (mc.level == null || (!player.isNoGravity() && !DuctTapeBlock.isTouchingTape(mc.level, player))) {
return;
}
var input = event.getInput();
input.left = false;
input.right = false;
input.up = false;
input.down = false;
input.leftImpulse = 0.0F;
input.forwardImpulse = 0.0F;
input.jumping = false;
input.shiftKeyDown = false;
}
}
@@ -0,0 +1,87 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.AntarchySoundEvents;
import com.craisinlord.antarchy.content.client.renderer.ElythiaSkyRenderer;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.core.BlockPos;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.player.Player;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class ElythiaFireflyManager {
private static final long NIGHT_START = 13000L;
private static final long NIGHT_END = 23000L;
private static final int SPAWN_INTERVAL = 3;
private static final int SPAWN_RADIUS_H = 20;
private static final int SPAWN_Y_MIN = -2;
private static final int SPAWN_Y_MAX = 10;
private static final int SOUND_INTERVAL_MIN = 250;
private static final int SOUND_INTERVAL_MAX = 450;
private static int nextSoundTick = SOUND_INTERVAL_MIN;
private ElythiaFireflyManager() {}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
Minecraft mc = Minecraft.getInstance();
ClientLevel level = mc.level;
if (level == null || mc.player == null) return;
if (mc.isPaused()) return;
if (!ElythiaSkyRenderer.shouldRender(level)) return;
long dayTime = level.getDayTime() % 24000L;
if (dayTime < NIGHT_START || dayTime > NIGHT_END) return;
long gameTime = level.getGameTime();
if (AntarchySettings.elythiaFireflyParticlesEnabled()) {
if (gameTime % SPAWN_INTERVAL == 0) {
Player player = mc.player;
int px = (int) player.getX();
int py = (int) player.getY();
int pz = (int) player.getZ();
int attempts = 1 + level.random.nextInt(3);
for (int i = 0; i < attempts; i++) {
int ox = level.random.nextInt(SPAWN_RADIUS_H * 2 + 1) - SPAWN_RADIUS_H;
int oy = SPAWN_Y_MIN + level.random.nextInt(SPAWN_Y_MAX - SPAWN_Y_MIN + 1);
int oz = level.random.nextInt(SPAWN_RADIUS_H * 2 + 1) - SPAWN_RADIUS_H;
BlockPos candidate = new BlockPos(px + ox, py + oy, pz + oz);
if (!level.getBlockState(candidate).isAir()) continue;
level.addParticle(
AntarchyNeoforgeMisc.FIREFLY.get(),
candidate.getX() + level.random.nextDouble(),
candidate.getY() + level.random.nextDouble(),
candidate.getZ() + level.random.nextDouble(),
0.0, 0.0, 0.0
);
}
}
}
nextSoundTick--;
if (nextSoundTick <= 0) {
nextSoundTick = SOUND_INTERVAL_MIN + level.random.nextInt(SOUND_INTERVAL_MAX - SOUND_INTERVAL_MIN + 1);
Player player = mc.player;
level.playLocalSound(
player.getX(), player.getY(), player.getZ(),
AntarchySoundEvents.ELYTHIA_FIREFLY_AMBIENT.get(),
SoundSource.AMBIENT,
0.6f + level.random.nextFloat() * 0.3f,
0.9f + level.random.nextFloat() * 0.2f,
false
);
}
}
}
@@ -0,0 +1,61 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeItems;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
import net.minecraft.client.renderer.entity.RenderLayerParent;
import net.minecraft.client.renderer.entity.layers.RenderLayer;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
public final class FallenKingCrownLayer extends RenderLayer<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> {
private static final ModelResourceLocation WORN_MODEL = ModelResourceLocation.inventory(
net.minecraft.resources.ResourceLocation.fromNamespaceAndPath("antarchy", "fallen_king_crown_worn")
);
private final ItemRenderer itemRenderer;
public FallenKingCrownLayer(RenderLayerParent<AbstractClientPlayer, PlayerModel<AbstractClientPlayer>> renderer) {
super(renderer);
this.itemRenderer = Minecraft.getInstance().getItemRenderer();
}
@Override
public void render(
PoseStack poseStack,
MultiBufferSource buffer,
int packedLight,
AbstractClientPlayer player,
float limbSwing,
float limbSwingAmount,
float partialTick,
float ageInTicks,
float netHeadYaw,
float headPitch
) {
ItemStack headStack = player.getItemBySlot(EquipmentSlot.HEAD);
if (!headStack.is(AntarchyNeoforgeItems.FALLEN_KING_CROWN.get()) || player.isInvisible()) {
return;
}
poseStack.pushPose();
this.getParentModel().head.translateAndRotate(poseStack);
this.itemRenderer.render(
headStack,
ItemDisplayContext.HEAD,
false,
poseStack,
buffer,
packedLight,
LivingEntityRenderer.getOverlayCoords(player, 0.0F),
Minecraft.getInstance().getModelManager().getModel(WORN_MODEL)
);
poseStack.popPose();
}
}
@@ -0,0 +1,63 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.item.GravityGunItem;
import com.craisinlord.antarchy.content.network.GravityGunPrimaryPayload;
import com.craisinlord.antarchy.content.network.GravityGunScrollPayload;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.util.Mth;
import org.lwjgl.glfw.GLFW;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.InputEvent;
import net.neoforged.neoforge.network.PacketDistributor;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class GravityGunClientHandler {
private static final double SCROLL_STEP_DISTANCE = 0.75D;
private GravityGunClientHandler() {
}
@SubscribeEvent
public static void onMouseButton(InputEvent.MouseButton.Pre event) {
Minecraft mc = Minecraft.getInstance();
if (mc.player == null || mc.level == null || mc.screen != null || !AntarchySettings.gravityGunEnabled()) {
return;
}
if (event.getButton() != GLFW.GLFW_MOUSE_BUTTON_LEFT || event.getAction() != GLFW.GLFW_PRESS) {
return;
}
if (!(mc.player.getMainHandItem().getItem() instanceof GravityGunItem)) {
return;
}
PacketDistributor.sendToServer(new GravityGunPrimaryPayload());
event.setCanceled(true);
}
@SubscribeEvent
public static void onMouseScroll(InputEvent.MouseScrollingEvent event) {
Minecraft mc = Minecraft.getInstance();
if (mc.player == null || mc.level == null || mc.screen != null || !Screen.hasControlDown() || !AntarchySettings.gravityGunEnabled()) {
return;
}
if (!(mc.player.getMainHandItem().getItem() instanceof GravityGunItem) || !GravityGunItem.hasHeldTarget(mc.player.getMainHandItem())) {
return;
}
double scrollAmount = Mth.clamp(event.getScrollDeltaY(), -1.0D, 1.0D);
if (Math.abs(scrollAmount) < 1.0E-4D) {
return;
}
PacketDistributor.sendToServer(new GravityGunScrollPayload(scrollAmount * SCROLL_STEP_DISTANCE));
event.setCanceled(true);
}
}
@@ -0,0 +1,77 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions;
import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.particle.NoRenderParticle;
import net.minecraft.client.particle.Particle;
import net.minecraft.client.particle.ParticleProvider;
public final class InvertedGeyserEruptionParticle extends NoRenderParticle {
private final int fluidBlocks;
private final double motionX;
private final double motionY;
private final double motionZ;
private final InvertedGeyserParticleOptions plumeParticle;
private final InvertedGeyserBaseParticleOptions baseParticle;
private final InvertedGeyserBaseParticleOptions poofParticle;
protected InvertedGeyserEruptionParticle(
ClientLevel level,
double x,
double y,
double z,
double xd,
double yd,
double zd,
InvertedGeyserParticleOptions options
) {
super(level, x, y, z);
this.motionX = xd;
this.motionY = yd;
this.motionZ = zd;
this.fluidBlocks = options.fluidBlocks();
this.lifetime = 20;
this.plumeParticle = new InvertedGeyserParticleOptions(AntarchyNeoforgeMisc.INVERTED_GEYSER_PLUME.get(), this.fluidBlocks, options.direction());
this.baseParticle = new InvertedGeyserBaseParticleOptions(AntarchyNeoforgeMisc.INVERTED_GEYSER_BASE.get(), this.fluidBlocks, 1.5F, options.direction());
this.poofParticle = new InvertedGeyserBaseParticleOptions(AntarchyNeoforgeMisc.INVERTED_GEYSER_POOF.get(), this.fluidBlocks, 2.0F, options.direction());
}
@Override
public void tick() {
super.tick();
if (this.age % 2 == 0) {
for (int i = 0; i < 2; i++) {
this.level.addParticle(this.baseParticle, this.x, this.y, this.z, this.motionX, this.motionY, this.motionZ);
}
}
for (int i = 0; i < this.fluidBlocks + 2; i++) {
this.level.addParticle(this.plumeParticle, this.x, this.y, this.z, this.motionX, this.motionY, this.motionZ);
}
if (this.age % 10 == 0) {
for (int i = 0; i < 20; i++) {
this.level.addParticle(this.poofParticle, this.x, this.y, this.z, this.motionX, this.motionY, this.motionZ);
}
}
}
public static final class Provider implements ParticleProvider<InvertedGeyserParticleOptions> {
@Override
public Particle createParticle(
InvertedGeyserParticleOptions options,
ClientLevel level,
double x,
double y,
double z,
double xd,
double yd,
double zd
) {
return new InvertedGeyserEruptionParticle(level, x, y, z, xd, yd, zd, options);
}
}
}
@@ -0,0 +1,290 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.entity.lucid.LucidEntity;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeSounds;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.DeathScreen;
import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance;
import net.minecraft.client.resources.sounds.SoundInstance;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.RandomSource;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class LucidSoundHandler {
private static final double START_SCAN_RADIUS = 96.0D;
private static final int ANIM_ATTACK = 2;
private static final int ANIM_DEATH = 3;
private static final Map<UUID, LucidLoopSet> ACTIVE_LOOPS = new HashMap<>();
private LucidSoundHandler() {
}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
Minecraft mc = Minecraft.getInstance();
if (mc.level == null || mc.player == null || mc.isPaused()) {
resetAll(mc);
return;
}
if (!mc.player.isAlive() || mc.player.isRemoved() || mc.player.isDeadOrDying() || mc.screen instanceof DeathScreen) {
resetAll(mc);
return;
}
pruneStaleLoops(mc);
refreshNearbyLucids(mc);
}
private static void refreshNearbyLucids(Minecraft mc) {
List<LucidEntity> lucids = mc.level.getEntitiesOfClass(
LucidEntity.class,
mc.player.getBoundingBox().inflate(START_SCAN_RADIUS)
);
for (LucidEntity lucid : lucids) {
if (!lucid.shouldPlayAmbientLoop()) {
continue;
}
LucidLoopSet set = ACTIVE_LOOPS.get(lucid.getUUID());
if (set == null) {
set = new LucidLoopSet(lucid);
ACTIVE_LOOPS.put(lucid.getUUID(), set);
set.start(mc);
continue;
}
set.refresh(mc, lucid);
}
}
private static void pruneStaleLoops(Minecraft mc) {
Iterator<Map.Entry<UUID, LucidLoopSet>> iterator = ACTIVE_LOOPS.entrySet().iterator();
while (iterator.hasNext()) {
LucidLoopSet set = iterator.next().getValue();
if (!set.isValid()) {
set.stop(mc);
iterator.remove();
continue;
}
if (!set.entity.shouldPlayAmbientLoop()) {
set.stop(mc);
iterator.remove();
}
}
}
private static void resetAll(Minecraft mc) {
for (LucidLoopSet set : ACTIVE_LOOPS.values()) {
set.stop(mc);
}
ACTIVE_LOOPS.clear();
}
private static final class LucidLoopSet {
private LucidEntity entity;
@Nullable private LucidLoopSound ambient;
@Nullable private LucidLoopSound flying;
private int lastAnimationState = -1;
private LucidLoopSet(LucidEntity entity) {
this.entity = entity;
}
private boolean isValid() {
return this.entity != null && this.entity.isAlive() && !this.entity.isRemoved();
}
private void start(Minecraft mc) {
this.playAttackSoundIfNeeded(mc, this.entity);
if (this.ambient == null || !mc.getSoundManager().isActive(this.ambient)) {
this.ambient = new LucidLoopSound(
this.entity,
AntarchyNeoforgeSounds.LUCID_AMBIENT.get(),
SoundSource.HOSTILE,
0.14F,
0.97F,
true
);
mc.getSoundManager().play(this.ambient);
}
if (this.entity.shouldPlayFlyingLoop() && (this.flying == null || !mc.getSoundManager().isActive(this.flying))) {
this.flying = new LucidLoopSound(
this.entity,
AntarchyNeoforgeSounds.LUCID_FLYING.get(),
SoundSource.HOSTILE,
0.18F,
1.0F,
false
);
mc.getSoundManager().play(this.flying);
}
}
private void refresh(Minecraft mc, LucidEntity entity) {
this.entity = entity;
this.playAttackSoundIfNeeded(mc, entity);
if (this.ambient == null || !mc.getSoundManager().isActive(this.ambient)) {
this.ambient = new LucidLoopSound(
entity,
AntarchyNeoforgeSounds.LUCID_AMBIENT.get(),
SoundSource.HOSTILE,
0.14F,
0.97F,
true
);
mc.getSoundManager().play(this.ambient);
} else {
this.ambient.setEntity(entity);
}
if (entity.shouldPlayFlyingLoop()) {
if (this.flying == null || !mc.getSoundManager().isActive(this.flying)) {
this.flying = new LucidLoopSound(
entity,
AntarchyNeoforgeSounds.LUCID_FLYING.get(),
SoundSource.HOSTILE,
0.18F,
1.0F,
false
);
mc.getSoundManager().play(this.flying);
} else {
this.flying.setEntity(entity);
}
} else if (this.flying != null) {
mc.getSoundManager().stop(this.flying);
this.flying = null;
}
}
private void stop(Minecraft mc) {
if (this.ambient != null) {
mc.getSoundManager().stop(this.ambient);
this.ambient = null;
}
if (this.flying != null) {
mc.getSoundManager().stop(this.flying);
this.flying = null;
}
this.lastAnimationState = -1;
}
private void playAttackSoundIfNeeded(Minecraft mc, LucidEntity entity) {
int currentState = entity.getAnimationState();
if (currentState == ANIM_ATTACK && this.lastAnimationState != ANIM_ATTACK) {
mc.getSoundManager().play(new LucidOneShotSound(
entity,
AntarchyNeoforgeSounds.LUCID_ATTACK.get(),
SoundSource.HOSTILE,
1.0F,
1.02F + entity.getRandom().nextFloat() * 0.08F
));
}
this.lastAnimationState = currentState;
}
}
private static final class LucidLoopSound extends AbstractTickableSoundInstance {
private LucidEntity entity;
private final boolean ambient;
private LucidLoopSound(LucidEntity entity, SoundEvent soundEvent, SoundSource source,
float volume, float pitch, boolean ambient) {
super(soundEvent, source, RandomSource.create());
this.entity = entity;
this.ambient = ambient;
this.looping = true;
this.delay = 0;
this.relative = false;
this.attenuation = SoundInstance.Attenuation.LINEAR;
this.volume = volume;
this.pitch = pitch;
this.x = entity.getX();
this.y = entity.getY();
this.z = entity.getZ();
}
private void setEntity(LucidEntity entity) {
this.entity = entity;
}
@Override
public void tick() {
if (this.entity == null
|| this.entity.isRemoved()
|| this.entity.isDeadOrDying()
|| this.entity.getAnimationState() == 3
|| !this.entity.shouldPlayAmbientLoop()) {
this.stop();
return;
}
if (!this.ambient && !this.entity.shouldPlayFlyingLoop()) {
this.stop();
return;
}
this.x = this.entity.getX();
this.y = this.entity.getY();
this.z = this.entity.getZ();
}
@Override
public boolean canStartSilent() {
return true;
}
}
private static final class LucidOneShotSound extends AbstractTickableSoundInstance {
private LucidEntity entity;
private LucidOneShotSound(LucidEntity entity, SoundEvent soundEvent, SoundSource source,
float volume, float pitch) {
super(soundEvent, source, RandomSource.create());
this.entity = entity;
this.looping = false;
this.delay = 0;
this.relative = false;
this.attenuation = SoundInstance.Attenuation.LINEAR;
this.volume = volume;
this.pitch = pitch;
this.x = entity.getX();
this.y = entity.getY();
this.z = entity.getZ();
}
@Override
public void tick() {
if (this.entity == null
|| this.entity.isRemoved()
|| this.entity.isDeadOrDying()
|| this.entity.getAnimationState() == ANIM_DEATH) {
this.stop();
return;
}
this.x = this.entity.getX();
this.y = this.entity.getY();
this.z = this.entity.getZ();
}
}
}
@@ -0,0 +1,62 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.item.MogglesCaveDetector;
import com.craisinlord.antarchy.content.item.MogglesLogic;
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
@EventBusSubscriber(modid = Antarchy.MODID, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT)
public final class MogglesClientRenderer {
private MogglesClientRenderer() {}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
Level level = mc.level;
if (player == null || level == null) return;
if (!MogglesLogic.isWearingMoggles(player) || level.canSeeSky(player.blockPosition())) {
MogglesCaveDetector.clear();
return;
}
// Run cave BFS (internally rate-limited to every 40 ticks).
MogglesCaveDetector.tick(player, level);
BlockPos target = MogglesCaveDetector.getCaveTarget();
if (target == null) return;
// Spawn particle trail toward the cave every 2 ticks.
if (level.getGameTime() % 2 != 0) return;
Vec3 eye = player.getEyePosition();
Vec3 end = Vec3.atCenterOf(target);
double totalDist = eye.distanceTo(end);
if (totalDist < 1.5) return;
Vec3 dir = end.subtract(eye).normalize();
// Place up to 5 particles spaced evenly between 1.5 m ahead and the target.
int steps = Math.min(5, (int) (totalDist / 1.5));
double spacing = (totalDist - 1.5) / Math.max(steps, 1);
for (int i = 0; i < steps; i++) {
double t = 1.5 + i * spacing;
Vec3 p = eye.add(dir.scale(t));
Vec3 vel = dir.scale(0.04);
level.addParticle(ParticleTypes.END_ROD,
p.x, p.y, p.z,
vel.x, vel.y, vel.z);
}
}
}
@@ -0,0 +1,52 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity;
import net.minecraft.client.Minecraft;
import net.minecraft.util.Mth;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ViewportEvent;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class NightmareCameraShakeHandler {
private static final double MAX_SHAKE_RANGE = 32.0D;
private NightmareCameraShakeHandler() {
}
@SubscribeEvent
public static void onComputeCameraAngles(ViewportEvent.ComputeCameraAngles event) {
Minecraft minecraft = Minecraft.getInstance();
if (minecraft.level == null || minecraft.player == null) {
return;
}
Vec3 cameraPos = event.getCamera().getPosition();
float shakeStrength = 0.0F;
for (NightmareEntity nightmare : minecraft.level.getEntitiesOfClass(
NightmareEntity.class,
minecraft.player.getBoundingBox().inflate(MAX_SHAKE_RANGE),
nightmare -> nightmare.isAlive() && nightmare.isRoaring()
)) {
double distance = Math.sqrt(cameraPos.distanceToSqr(nightmare.position().add(0.0D, nightmare.getBbHeight() * 0.5D, 0.0D)));
if (distance > MAX_SHAKE_RANGE) {
continue;
}
shakeStrength += (float) ((1.0D - distance / MAX_SHAKE_RANGE) * 1.35D);
}
if (shakeStrength <= 0.0F) {
return;
}
float time = (float) (minecraft.player.tickCount + event.getPartialTick());
event.setYaw(event.getYaw() + Mth.sin(time * 1.85F) * shakeStrength * 1.8F);
event.setPitch(event.getPitch() + Mth.cos(time * 2.15F) * shakeStrength * 1.45F);
event.setRoll(event.getRoll() + Mth.sin(time * 2.65F) * shakeStrength * 1.05F);
}
}
@@ -0,0 +1,94 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.core.particles.BlockParticleOption;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import net.neoforged.neoforge.client.event.MovementInputUpdateEvent;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class ParalyzedClientHandler {
private static final int PARTICLE_INTERVAL = 3;
private static final int PARTICLES_PER_ENTITY = 4;
private static final double PARTICLE_RADIUS = 24.0;
private ParalyzedClientHandler() {
}
@SubscribeEvent
public static void onMovementInputUpdate(MovementInputUpdateEvent event) {
if (!event.getEntity().hasEffect(AntarchyNeoforgeMisc.PARALYZED)) {
return;
}
var input = event.getInput();
input.left = false;
input.right = false;
input.up = false;
input.down = false;
input.leftImpulse = 0.0F;
input.forwardImpulse = 0.0F;
input.jumping = false;
}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
Minecraft mc = Minecraft.getInstance();
if (mc.player == null || mc.level == null) {
return;
}
Player player = mc.player;
if (player.hasEffect(AntarchyNeoforgeMisc.PARALYZED)) {
while (mc.options.keyAttack.consumeClick()) { }
while (mc.options.keyUse.consumeClick()) { }
}
if (player.tickCount % PARTICLE_INTERVAL != 0) {
return;
}
ClientLevel level = mc.level;
level.getEntitiesOfClass(
LivingEntity.class,
player.getBoundingBox().inflate(PARTICLE_RADIUS),
entity -> entity != player
&& entity.isAlive()
&& entity.hasEffect(AntarchyNeoforgeMisc.PARALYZED)
).forEach(entity -> spawnStoneParticles(level, entity));
}
private static void spawnStoneParticles(ClientLevel level, LivingEntity entity) {
BlockState stone = Blocks.STONE.defaultBlockState();
BlockParticleOption particle = new BlockParticleOption(ParticleTypes.BLOCK, stone);
float w = entity.getBbWidth();
float h = entity.getBbHeight();
for (int i = 0; i < PARTICLES_PER_ENTITY; i++) {
double px = entity.getX() + (Math.random() - 0.5) * w;
double py = entity.getY() + Math.random() * h;
double pz = entity.getZ() + (Math.random() - 0.5) * w;
double vx = (Math.random() - 0.5) * 0.08;
double vy = Math.random() * 0.06;
double vz = (Math.random() - 0.5) * 0.08;
level.addParticle(particle, px, py, pz, vx, vy, vz);
}
}
}
@@ -0,0 +1,44 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.util.Mth;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.player.Player;
public final class ParalyzedHudRenderer {
private ParalyzedHudRenderer() {
}
public static void render(GuiGraphics guiGraphics) {
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
if (player == null || player.isDeadOrDying()) {
return;
}
MobEffectInstance effect = player.getEffect(AntarchyNeoforgeMisc.PARALYZED);
if (effect == null) {
return;
}
int duration = effect.getDuration();
float fade = effect.isInfiniteDuration()
? 1.0F
: Math.min(1.0F, Math.max(duration, 20) / 20.0F);
float pulse = 0.85F + 0.15F * Mth.sin(player.tickCount * ((float) Math.PI * 2.0F / 120.0F));
int alpha = Mth.clamp((int) (fade * pulse * 0xC0), 0, 0xFF);
int width = mc.getWindow().getGuiScaledWidth();
int height = mc.getWindow().getGuiScaledHeight();
int color = (alpha << 24) | 0x303030;
guiGraphics.fill(0, 0, width, height, color);
int innerAlpha = Mth.clamp(alpha / 3, 0, 0xFF);
int innerColor = (innerAlpha << 24) | 0x606060;
int margin = Math.min(width, height) / 6;
guiGraphics.fill(margin, margin, width - margin, height - margin, innerColor);
}
}
@@ -0,0 +1,17 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import software.bernie.geckolib.event.GeoRenderEvent;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class ParalyzedStoneRenderHandler {
private ParalyzedStoneRenderHandler() {
}
@SubscribeEvent
public static void onCompileGeoEntityLayers(GeoRenderEvent.Entity.CompileRenderLayers event) {
}
}
@@ -0,0 +1,285 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.entity.ReverieEntity;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.BufferUploader;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.MeshData;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
import org.joml.Matrix4f;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.GAME)
public final class ReverieTrailHandler {
private static final int MAX_TRAIL_POINTS = 20;
private static final int IDLE_LIFETIME_TICKS = 8;
private static final int NORMAL_LIFETIME_TICKS = 14;
private static final int DASH_LIFETIME_TICKS = 22;
private static final float CORE_LINE_WIDTH = 0.035f;
private static final float GLOW_LINE_WIDTH = 0.10f;
private static final double MIN_DISTANCE_BETWEEN_POINTS = 0.05;
private static final double DASH_DISTANCE_THRESHOLD = 0.35;
private static final Map<Integer, ArrayDeque<TrailPoint>> TRAILS = new HashMap<>();
private ReverieTrailHandler() {}
private static final class TrailPoint {
final Vec3 pos;
final ReverieEntity.Mood mood;
int age;
final int lifetime;
TrailPoint(Vec3 pos, ReverieEntity.Mood mood, int lifetime) {
this.pos = pos;
this.mood = mood;
this.age = 0;
this.lifetime = lifetime;
}
float progress() {
return lifetime <= 0 ? 1f : (float) age / (float) lifetime;
}
boolean expired() {
return age >= lifetime;
}
}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
Minecraft mc = Minecraft.getInstance();
if (mc.level == null) {
TRAILS.clear();
return;
}
if (mc.isPaused()) return;
Set<Integer> activeIds = new HashSet<>();
for (Entity entity : mc.level.entitiesForRendering()) {
if (!(entity instanceof ReverieEntity reverie)) continue;
int id = reverie.getId();
activeIds.add(id);
ReverieEntity.Mood mood = reverie.getMood();
Vec3 pos = reverie.position().add(0.0, reverie.getBbHeight() * 0.5, 0.0);
ArrayDeque<TrailPoint> points = TRAILS.computeIfAbsent(id, k -> new ArrayDeque<>());
if (points.isEmpty()) {
points.addFirst(new TrailPoint(pos, mood, lifetimeFor(mood, false)));
} else {
Vec3 lastPos = points.peekFirst().pos;
double distSq = pos.distanceToSqr(lastPos);
if (distSq >= MIN_DISTANCE_BETWEEN_POINTS * MIN_DISTANCE_BETWEEN_POINTS) {
boolean isDash = distSq >= DASH_DISTANCE_THRESHOLD * DASH_DISTANCE_THRESHOLD;
points.addFirst(new TrailPoint(pos, mood, lifetimeFor(mood, isDash)));
while (points.size() > MAX_TRAIL_POINTS) {
points.pollLast();
}
}
}
Iterator<TrailPoint> it = points.iterator();
while (it.hasNext()) {
TrailPoint p = it.next();
p.age++;
if (p.expired()) it.remove();
}
}
TRAILS.keySet().removeIf(id -> !activeIds.contains(id));
}
private static int lifetimeFor(ReverieEntity.Mood mood, boolean isDash) {
if (isDash || mood == ReverieEntity.Mood.PURPLE) return DASH_LIFETIME_TICKS;
if (mood == ReverieEntity.Mood.WHITE) return IDLE_LIFETIME_TICKS;
return NORMAL_LIFETIME_TICKS;
}
@SubscribeEvent
public static void onRenderLevelStage(RenderLevelStageEvent event) {
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES) return;
if (TRAILS.isEmpty()) return;
Minecraft mc = Minecraft.getInstance();
if (mc.level == null) return;
Camera camera = event.getCamera();
Vec3 camPos = camera.getPosition();
Matrix4f mat = event.getPoseStack().last().pose();
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.depthMask(false);
RenderSystem.disableCull();
RenderSystem.setShader(GameRenderer::getPositionColorShader);
Tesselator tesselator = Tesselator.getInstance();
List<List<TrailPoint>> snapshots = new ArrayList<>(TRAILS.size());
for (ArrayDeque<TrailPoint> deque : TRAILS.values()) {
if (deque.size() >= 2) snapshots.add(new ArrayList<>(deque));
}
if (snapshots.isEmpty()) {
RenderSystem.enableCull();
RenderSystem.depthMask(true);
RenderSystem.disableBlend();
return;
}
BufferBuilder glowBuf = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
for (List<TrailPoint> points : snapshots) {
buildPass(glowBuf, mat, points, camPos, true);
}
MeshData glowMesh = glowBuf.build();
if (glowMesh != null) {
BufferUploader.drawWithShader(glowMesh);
}
BufferBuilder coreBuf = tesselator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
for (List<TrailPoint> points : snapshots) {
buildPass(coreBuf, mat, points, camPos, false);
}
MeshData coreMesh = coreBuf.build();
if (coreMesh != null) {
BufferUploader.drawWithShader(coreMesh);
}
RenderSystem.enableCull();
RenderSystem.depthMask(true);
RenderSystem.disableBlend();
}
private static void buildPass(BufferBuilder buf, Matrix4f mat, List<TrailPoint> points, Vec3 camPos, boolean glow) {
int n = points.size();
for (int i = 0; i < n - 1; i++) {
TrailPoint newer = points.get(i);
TrailPoint older = points.get(i + 1);
float alphaNearer = (glow ? glowAlpha(newer.mood) : coreAlpha(newer.mood)) * indexAlpha(i, n) * (1f - newer.progress());
float alphaFarther = (glow ? glowAlpha(older.mood) : coreAlpha(older.mood)) * indexAlpha(i + 1, n) * (1f - older.progress());
if (alphaNearer < 0.005f && alphaFarther < 0.005f) continue;
Vec3 right = cameraFacingRight(newer.pos, older.pos, camPos);
if (right == null) continue;
float halfWidth = glow ? glowHalfWidth(newer.mood) : coreHalfWidth(newer.mood);
right = right.scale(halfWidth);
float[] cn = color(newer.mood);
float[] co = color(older.mood);
Vec3 na = newer.pos.subtract(camPos);
Vec3 nb = older.pos.subtract(camPos);
buf.addVertex(mat, (float)(na.x + right.x), (float)(na.y + right.y), (float)(na.z + right.z)).setColor(cn[0], cn[1], cn[2], alphaNearer);
buf.addVertex(mat, (float)(na.x - right.x), (float)(na.y - right.y), (float)(na.z - right.z)).setColor(cn[0], cn[1], cn[2], alphaNearer);
buf.addVertex(mat, (float)(nb.x - right.x), (float)(nb.y - right.y), (float)(nb.z - right.z)).setColor(co[0], co[1], co[2], alphaFarther);
buf.addVertex(mat, (float)(nb.x + right.x), (float)(nb.y + right.y), (float)(nb.z + right.z)).setColor(co[0], co[1], co[2], alphaFarther);
}
}
private static Vec3 cameraFacingRight(Vec3 a, Vec3 b, Vec3 camPos) {
Vec3 segDir = b.subtract(a);
if (segDir.lengthSqr() < 1e-12) return null;
segDir = segDir.normalize();
Vec3 mid = a.add(b).scale(0.5);
Vec3 toCamera = camPos.subtract(mid);
if (toCamera.lengthSqr() < 1e-12) return null;
toCamera = toCamera.normalize();
Vec3 right = segDir.cross(toCamera);
if (right.lengthSqr() < 1e-10) {
right = segDir.cross(new Vec3(0.0, 1.0, 0.0));
if (right.lengthSqr() < 1e-10) return null;
}
return right.normalize();
}
private static float indexAlpha(int i, int n) {
if (n <= 1) return 1f;
return 1f - (float) i / (float) (n - 1);
}
private static final float[] COLOR_WHITE = { 1.0f, 1.0f, 1.0f };
private static final float[] COLOR_YELLOW = { 1.0f, 0.85f, 0.1f };
private static final float[] COLOR_RED = { 1.0f, 0.1f, 0.05f };
private static final float[] COLOR_PURPLE = { 0.7f, 0.1f, 1.0f };
private static final float[] COLOR_BLUE = { 0.1f, 0.5f, 1.0f };
private static float[] color(ReverieEntity.Mood mood) {
return switch (mood) {
case WHITE -> COLOR_WHITE;
case YELLOW -> COLOR_YELLOW;
case RED -> COLOR_RED;
case PURPLE -> COLOR_PURPLE;
case BLUE -> COLOR_BLUE;
};
}
private static float glowAlpha(ReverieEntity.Mood mood) {
return switch (mood) {
case WHITE -> 0.15f;
case YELLOW -> 0.30f;
case RED -> 0.55f;
case PURPLE -> 0.65f;
case BLUE -> 0.35f;
};
}
private static float coreAlpha(ReverieEntity.Mood mood) {
return switch (mood) {
case WHITE -> 0.35f;
case YELLOW -> 0.55f;
case RED -> 0.85f;
case PURPLE -> 0.95f;
case BLUE -> 0.60f;
};
}
private static float glowHalfWidth(ReverieEntity.Mood mood) {
float base = GLOW_LINE_WIDTH * 0.5f;
return switch (mood) {
case WHITE -> base * 0.60f;
case YELLOW -> base * 0.80f;
case RED -> base * 1.00f;
case PURPLE -> base * 1.25f;
case BLUE -> base * 0.90f;
};
}
private static float coreHalfWidth(ReverieEntity.Mood mood) {
float base = CORE_LINE_WIDTH * 0.5f;
return switch (mood) {
case WHITE -> base * 0.60f;
case YELLOW -> base * 0.80f;
case RED -> base * 1.20f;
case PURPLE -> base * 1.50f;
case BLUE -> base * 1.00f;
};
}
}
@@ -0,0 +1,152 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.client.ScorpionWhipTetherClientState;
import com.craisinlord.antarchy.content.item.ScorpionWhipItem;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.BufferUploader;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.MeshData;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.vertex.VertexFormat;
import java.util.Map;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import net.neoforged.neoforge.client.event.RenderLevelStageEvent;
import org.joml.Matrix4f;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.GAME)
public final class ScorpionWhipTetherRenderHandler {
private ScorpionWhipTetherRenderHandler() {
}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
Minecraft minecraft = Minecraft.getInstance();
if (minecraft.level == null) {
ScorpionWhipTetherClientState.clear();
}
}
@SubscribeEvent
public static void onRenderLevelStage(RenderLevelStageEvent event) {
if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_PARTICLES) {
return;
}
Minecraft minecraft = Minecraft.getInstance();
if (minecraft.level == null) {
return;
}
Map<Integer, Integer> tethers = ScorpionWhipTetherClientState.snapshot();
if (tethers.isEmpty()) {
return;
}
Camera camera = event.getCamera();
Vec3 cameraPos = camera.getPosition();
Matrix4f pose = event.getPoseStack().last().pose();
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
RenderSystem.depthMask(false);
RenderSystem.disableCull();
RenderSystem.setShader(GameRenderer::getPositionColorShader);
BufferBuilder buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
for (Map.Entry<Integer, Integer> entry : tethers.entrySet()) {
Entity source = minecraft.level.getEntity(entry.getKey());
Entity target = minecraft.level.getEntity(entry.getValue());
if (!(source instanceof Player player) || target == null || target.isRemoved()) {
continue;
}
buildTether(
buffer,
pose,
tetherStart(player, event.getPartialTick().getGameTimeDeltaPartialTick(false)),
target.position().add(0.0D, target.getBbHeight() * 0.5D, 0.0D),
cameraPos
);
}
MeshData mesh = buffer.build();
if (mesh != null) {
BufferUploader.drawWithShader(mesh);
}
RenderSystem.enableCull();
RenderSystem.depthMask(true);
RenderSystem.disableBlend();
}
private static Vec3 tetherStart(Player player, float partialTick) {
Vec3 start = player.getEyePosition(partialTick).add(0.0D, -0.45D, 0.0D);
boolean mainHandWhip = player.getMainHandItem().getItem() instanceof ScorpionWhipItem;
boolean offHandWhip = player.getOffhandItem().getItem() instanceof ScorpionWhipItem;
if (!mainHandWhip && !offHandWhip) {
return start;
}
boolean useMainHand = mainHandWhip || !offHandWhip;
HumanoidArm arm = useMainHand ? player.getMainArm() : player.getMainArm().getOpposite();
float bodyYaw = Mth.rotLerp(partialTick, player.yBodyRotO, player.yBodyRot);
double radians = Math.toRadians(bodyYaw + 90.0F);
double side = arm == HumanoidArm.RIGHT ? -0.28D : 0.28D;
return start.add(Math.cos(radians) * side, -0.12D, Math.sin(radians) * side);
}
private static void buildTether(BufferBuilder buffer, Matrix4f pose, Vec3 start, Vec3 end, Vec3 cameraPos) {
Vec3 delta = end.subtract(start);
double length = delta.length();
if (length < 0.001D) {
return;
}
Vec3 forward = delta.scale(1.0D / length);
Vec3 right = forward.cross(new Vec3(0.0D, 1.0D, 0.0D));
if (right.lengthSqr() < 1.0E-6D) {
right = forward.cross(new Vec3(1.0D, 0.0D, 0.0D));
}
right = right.normalize();
int segments = Math.max(16, Mth.ceil(length * 8.0D));
for (int i = 0; i < segments; i++) {
double t0 = (double) i / (double) segments;
double t1 = (double) (i + 1) / (double) segments;
Vec3 p0 = ropePoint(start, delta, t0, length);
Vec3 p1 = ropePoint(start, delta, t1, length);
float width = 0.045F;
Vec3 offset = right.scale(width);
Vec3 a = p0.subtract(cameraPos);
Vec3 b = p1.subtract(cameraPos);
float shade = i % 2 == 0 ? 0.82F : 0.62F;
float red = 0.36F * shade;
float green = 0.20F * shade;
float blue = 0.11F * shade;
buffer.addVertex(pose, (float) (a.x + offset.x), (float) (a.y + offset.y), (float) (a.z + offset.z)).setColor(red, green, blue, 1.0F);
buffer.addVertex(pose, (float) (a.x - offset.x), (float) (a.y - offset.y), (float) (a.z - offset.z)).setColor(red, green, blue, 1.0F);
buffer.addVertex(pose, (float) (b.x - offset.x), (float) (b.y - offset.y), (float) (b.z - offset.z)).setColor(red, green, blue, 1.0F);
buffer.addVertex(pose, (float) (b.x + offset.x), (float) (b.y + offset.y), (float) (b.z + offset.z)).setColor(red, green, blue, 1.0F);
}
}
private static Vec3 ropePoint(Vec3 start, Vec3 delta, double t, double length) {
double sag = Math.sin(t * Math.PI) * Math.min(0.45D, length * 0.07D);
return start.add(delta.scale(t)).add(0.0D, -sag, 0.0D);
}
}
@@ -0,0 +1,17 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ViewportEvent;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class ThoraxisGravityCameraHandler {
private ThoraxisGravityCameraHandler() {
}
@SubscribeEvent
public static void onComputeCameraAngles(ViewportEvent.ComputeCameraAngles event) {
}
}
@@ -0,0 +1,45 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeBlocks;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.block.Block;
public final class TriffidGooHudRenderer {
private TriffidGooHudRenderer() {
}
private static float fadeProgress = 0f;
private static final float FADE_SPEED = 0.05f;
private static final int MAX_ALPHA = 0x55;
public static void render(GuiGraphics guiGraphics) {
Minecraft minecraft = Minecraft.getInstance();
Player player = minecraft.player;
if (player == null || player.isDeadOrDying()) {
fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED);
if (fadeProgress <= 0f) return;
} else {
Block goo = AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get();
BlockPos feet = player.blockPosition();
boolean inGoo = player.level().getBlockState(feet).is(goo)
|| player.level().getBlockState(feet.above()).is(goo);
if (inGoo) {
fadeProgress = Math.min(1f, fadeProgress + FADE_SPEED);
} else {
fadeProgress = Math.max(0f, fadeProgress - FADE_SPEED);
}
if (fadeProgress <= 0f || minecraft.screen != null) return;
}
int alpha = Mth.floor(MAX_ALPHA * fadeProgress);
int color = (alpha << 24) | 0x003300;
int width = minecraft.getWindow().getGuiScaledWidth();
int height = minecraft.getWindow().getGuiScaledHeight();
guiGraphics.fill(0, 0, width, height, color);
}
}
@@ -0,0 +1,119 @@
package com.craisinlord.antarchy.neoforge.client;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.entity.WaspEntity;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeSounds;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.sounds.AbstractTickableSoundInstance;
import net.minecraft.client.resources.sounds.SoundInstance;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.RandomSource;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import org.jetbrains.annotations.Nullable;
@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT)
public final class WaspSoundHandler {
private static final double START_SCAN_RADIUS = 96.0D;
private static final Map<UUID, WaspLoopSound> ACTIVE_LOOPS = new HashMap<>();
private WaspSoundHandler() {
}
@SubscribeEvent
public static void onClientTick(ClientTickEvent.Post event) {
// Ambient buzzing now comes from the wasp entity itself.
}
private static void refreshNearbyWasps(Minecraft mc) {
for (WaspEntity wasp : mc.level.getEntitiesOfClass(WaspEntity.class, mc.player.getBoundingBox().inflate(START_SCAN_RADIUS))) {
WaspLoopSound loopSound = ACTIVE_LOOPS.get(wasp.getUUID());
if (loopSound == null || !mc.getSoundManager().isActive(loopSound)) {
loopSound = new WaspLoopSound(
wasp,
AntarchyNeoforgeSounds.WASP_IDLE.get(),
SoundSource.HOSTILE,
0.12F,
1.0F
);
ACTIVE_LOOPS.put(wasp.getUUID(), loopSound);
mc.getSoundManager().play(loopSound);
} else {
loopSound.setEntity(wasp);
}
}
}
private static void pruneStaleLoops(Minecraft mc) {
Iterator<Map.Entry<UUID, WaspLoopSound>> iterator = ACTIVE_LOOPS.entrySet().iterator();
while (iterator.hasNext()) {
WaspLoopSound loopSound = iterator.next().getValue();
if (!loopSound.isValid()) {
loopSound.stop(mc);
iterator.remove();
}
}
}
private static void resetAll(Minecraft mc) {
for (WaspLoopSound loopSound : ACTIVE_LOOPS.values()) {
loopSound.stop(mc);
}
ACTIVE_LOOPS.clear();
}
private static final class WaspLoopSound extends AbstractTickableSoundInstance {
@Nullable
private WaspEntity entity;
private WaspLoopSound(WaspEntity entity, SoundEvent soundEvent, SoundSource source, float volume, float pitch) {
super(soundEvent, source, RandomSource.create());
this.entity = entity;
this.looping = true;
this.delay = 0;
this.relative = false;
this.attenuation = SoundInstance.Attenuation.LINEAR;
this.volume = volume;
this.pitch = pitch;
this.x = entity.getX();
this.y = entity.getY();
this.z = entity.getZ();
}
private void setEntity(WaspEntity entity) {
this.entity = entity;
}
private boolean isValid() {
return this.entity != null && this.entity.isAlive() && !this.entity.isRemoved();
}
private void stop(Minecraft mc) {
mc.getSoundManager().stop(this);
}
@Override
public void tick() {
if (this.entity == null || this.entity.isRemoved() || this.entity.isDeadOrDying() || !this.entity.isAlive()) {
this.stop();
return;
}
this.x = this.entity.getX();
this.y = this.entity.getY();
this.z = this.entity.getZ();
}
@Override
public boolean canStartSilent() {
return true;
}
}
}
@@ -0,0 +1,460 @@
package com.craisinlord.antarchy.neoforge.content.fluid;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeBlocks;
import java.util.HashSet;
import java.util.Set;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.LiquidBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.phys.Vec3;
import net.neoforged.neoforge.common.NeoForgeMod;
import net.neoforged.neoforge.event.EventHooks;
import net.neoforged.neoforge.fluids.BaseFlowingFluid;
public abstract class AntiwaterFluid extends BaseFlowingFluid {
private static final int MAX_HORIZONTAL_SPREAD_AMOUNT = 5;
private static final int MAX_VERTICAL_FLOW_AMOUNT = 7;
protected AntiwaterFluid(Properties properties) {
super(properties);
}
@Override
protected BlockState createLegacyBlock(FluidState state) {
return AntarchyNeoforgeBlocks.ANTIWATER_BLOCK.get()
.defaultBlockState()
.setValue(LiquidBlock.LEVEL, getLegacyLevel(state));
}
@Override
public Vec3 getFlow(BlockGetter level, BlockPos pos, FluidState state) {
double flowX = 0.0D;
double flowZ = 0.0D;
for (Direction direction : Direction.Plane.HORIZONTAL) {
BlockPos neighborPos = pos.relative(direction);
FluidState neighborFluid = level.getFluidState(neighborPos);
int neighborAmount = this.isSame(neighborFluid.getType()) ? neighborFluid.getAmount() : 0;
int currentAmount = state.getAmount();
int delta = neighborAmount - currentAmount;
if (delta != 0) {
flowX += direction.getStepX() * delta;
flowZ += direction.getStepZ() * delta;
}
}
Vec3 flow = new Vec3(flowX, 1.0D, flowZ);
return flow.lengthSqr() < 1.0E-6D ? new Vec3(0.0D, 1.0D, 0.0D) : flow.normalize();
}
@Override
protected boolean canConvertToSource(Level level) {
return false;
}
@Override
public int getTickDelay(LevelReader level) {
return 5;
}
@Override
protected int getSpreadDelay(Level level, BlockPos pos, FluidState currentState, FluidState newState) {
return this.getTickDelay(level);
}
@Override
protected boolean canBeReplacedWith(FluidState state, BlockGetter level, BlockPos pos, Fluid fluid, Direction direction) {
return direction != Direction.DOWN && !this.isSame(fluid);
}
@Override
protected boolean canSpreadTo(
BlockGetter level,
BlockPos fromPos,
BlockState fromState,
Direction direction,
BlockPos toPos,
BlockState toState,
FluidState toFluidState,
Fluid fluid
) {
if (direction == Direction.DOWN) {
return false;
}
return super.canSpreadTo(level, fromPos, fromState, direction, toPos, toState, toFluidState, fluid);
}
@Override
protected FluidState getNewLiquid(Level level, BlockPos pos, BlockState blockState) {
FluidState currentState = blockState.getFluidState();
if (!currentState.isSource() && !this.isFlowingStateValid(level, pos, currentState)) {
return Fluids.EMPTY.defaultFluidState();
}
if (this.canCreateSourceAt(level, pos)) {
return this.getSource(false);
}
if (this.isValidVerticalSupport(level, pos)) {
return this.getFlowing(MAX_VERTICAL_FLOW_AMOUNT, false);
}
int bestNeighborAmount = this.getBestHorizontalNeighborAmount(level, pos);
if (bestNeighborAmount > 1) {
return this.getFlowing(bestNeighborAmount - 1, false);
}
return net.minecraft.world.level.material.Fluids.EMPTY.defaultFluidState();
}
/*
@Override
protected void spread(Level level, BlockPos pos, FluidState state) {
if (state.isEmpty()) {
return;
}
if (!state.isSource() && !this.isFlowingStateValid(level, pos, state)) {
level.setBlockAndUpdate(pos, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState());
this.scheduleCleanup(level, pos);
return;
}
BlockState blockState = level.getBlockState(pos);
int nextAmount = state.getAmount() - 1;
BlockPos abovePos = pos.above();
BlockState aboveState = level.getBlockState(abovePos);
FluidState aboveFluid = level.getFluidState(abovePos);
if (!aboveState.isSolid() && !aboveFluid.getType().isSame(this)) {
FluidState upwardState = this.getFlowing(8, false);
if (this.canSpreadTo(level, pos, blockState, Direction.UP, abovePos, aboveState, aboveFluid, upwardState.getType())) {
this.spreadTo(level, abovePos, aboveState, Direction.UP, upwardState);
}
}
if (!this.canHangAt(level, pos)) {
return;
}
if (nextAmount <= 0) {
return;
}
for (Direction direction : Direction.Plane.HORIZONTAL) {
BlockPos targetPos = pos.relative(direction);
BlockState targetState = level.getBlockState(targetPos);
FluidState targetFluid = targetState.getFluidState();
if (!this.canSpreadHorizontallyInto(level, targetPos)) {
continue;
}
FluidState horizontalState = this.getFlowing(Math.min(nextAmount, MAX_HORIZONTAL_SPREAD_AMOUNT), false);
if (!this.canSpreadTo(level, pos, blockState, direction, targetPos, targetState, targetFluid, horizontalState.getType())) {
continue;
}
this.spreadTo(level, targetPos, targetState, direction, horizontalState);
}
}
*/
@Override
protected void spread(Level level, BlockPos pos, FluidState state) {
if (state.isEmpty()) {
return;
}
if (!state.isSource() && !this.isFlowingStateValid(level, pos, state)) {
level.setBlockAndUpdate(pos, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState());
this.scheduleCleanup(level, pos);
return;
}
BlockState blockState = level.getBlockState(pos);
this.spreadUpward(level, pos, state, blockState);
if (!this.canHangAt(level, pos)) {
return;
}
int nextAmount = state.getAmount() - 1;
if (nextAmount <= 0) {
return;
}
this.spreadHorizontally(level, pos, blockState, nextAmount);
}
@Override
protected int getSlopeFindDistance(LevelReader level) {
return 4;
}
@Override
public void tick(Level level, BlockPos pos, FluidState state) {
if (!state.isSource() && !this.isFlowingStateValid(level, pos, state)) {
level.setBlockAndUpdate(pos, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState());
this.scheduleDependentCleanup(level, pos);
return;
}
super.tick(level, pos, state);
}
private boolean hasCeiling(Level level, BlockPos pos) {
return level.getBlockState(pos.above()).isSolid();
}
private boolean canHangAt(Level level, BlockPos pos) {
return this.hasCeiling(level, pos);
}
private boolean hasHorizontalSupport(Level level, BlockPos pos) {
FluidState state = level.getFluidState(pos);
if (!this.isAntiwater(state)) {
return false;
}
int currentAmount = state.getAmount();
for (Direction direction : Direction.Plane.HORIZONTAL) {
FluidState neighbor = level.getFluidState(pos.relative(direction));
if (!this.isAntiwater(neighbor)) {
continue;
}
if (this.getHorizontalSpreadAmount(neighbor) > currentAmount) {
return true;
}
}
return false;
}
private boolean canSpreadHorizontallyInto(Level level, BlockPos pos) {
return true;
}
private int getBestHorizontalNeighborAmount(Level level, BlockPos pos) {
int bestAmount = 0;
for (Direction direction : Direction.Plane.HORIZONTAL) {
BlockPos neighborPos = pos.relative(direction);
FluidState neighborFluid = level.getFluidState(neighborPos);
if (neighborFluid.isEmpty() || !neighborFluid.getType().isSame(this)) {
continue;
}
if (!this.hasSourceConnection(level, neighborPos, neighborFluid, new HashSet<>())) {
continue;
}
bestAmount = Math.max(bestAmount, this.getHorizontalSpreadAmount(neighborFluid));
}
return bestAmount;
}
private int getHorizontalSpreadAmount(FluidState state) {
if (state.isSource() || this.isValidVerticalSupportState(state)) {
return MAX_HORIZONTAL_SPREAD_AMOUNT + 1;
}
return state.getAmount();
}
private boolean isValidVerticalSupportState(FluidState state) {
return this.isAntiwater(state) && !state.isSource() && state.getAmount() >= MAX_VERTICAL_FLOW_AMOUNT;
}
private boolean isFlowingStateValid(Level level, BlockPos pos, FluidState state) {
return state.isSource()
|| this.hasImmediateVerticalSupport(level, pos)
|| this.hasHorizontalSupport(level, pos);
}
private boolean canCreateSourceAt(Level level, BlockPos pos) {
if (!this.canHangAt(level, pos)) {
return false;
}
int sourceNeighbors = 0;
for (Direction direction : Direction.Plane.HORIZONTAL) {
FluidState neighbor = level.getFluidState(pos.relative(direction));
if (this.isAntiwater(neighbor) && neighbor.isSource()) {
sourceNeighbors++;
if (sourceNeighbors >= 2) {
return true;
}
}
}
return false;
}
private boolean isValidVerticalSupport(Level level, BlockPos pos) {
return this.hasImmediateVerticalSupport(level, pos);
}
private boolean isAntiwater(FluidState state) {
return !state.isEmpty() && state.getType().isSame(this);
}
private boolean hasImmediateVerticalSupport(Level level, BlockPos pos) {
FluidState below = level.getFluidState(pos.below());
return this.isAntiwater(below);
}
private void spreadUpward(Level level, BlockPos pos, FluidState state, BlockState blockState) {
BlockPos abovePos = pos.above();
BlockState aboveState = level.getBlockState(abovePos);
FluidState aboveFluid = level.getFluidState(abovePos);
// Antiwater flowing into water solidifies rather than displacing it
if (aboveFluid.getFluidType() == NeoForgeMod.WATER_TYPE.value()) {
BlockState result = state.isSource()
? AntarchyNeoforgeBlocks.ANTIMETAL.get().defaultBlockState()
: AntarchyNeoforgeBlocks.NYXITE.get().defaultBlockState();
level.setBlockAndUpdate(pos, EventHooks.fireFluidPlaceBlockEvent(level, pos, pos, result));
level.levelEvent(1501, pos, 0);
return;
}
FluidState upwardState = this.getFlowing(MAX_VERTICAL_FLOW_AMOUNT, false);
if (!this.canSpreadTo(level, pos, blockState, Direction.UP, abovePos, aboveState, aboveFluid, upwardState.getType())) {
return;
}
if (aboveFluid.getType().isSame(this) && aboveFluid.getAmount() >= upwardState.getAmount()) {
return;
}
this.spreadTo(level, abovePos, aboveState, Direction.UP, upwardState);
}
private void spreadHorizontally(Level level, BlockPos pos, BlockState blockState, int nextAmount) {
FluidState horizontalState = this.getFlowing(Math.min(nextAmount, MAX_HORIZONTAL_SPREAD_AMOUNT), false);
for (Direction direction : Direction.Plane.HORIZONTAL) {
BlockPos targetPos = pos.relative(direction);
BlockState targetState = level.getBlockState(targetPos);
FluidState targetFluid = targetState.getFluidState();
if (!this.canSpreadHorizontallyInto(level, targetPos)) {
continue;
}
if (targetFluid.getType().isSame(this) && targetFluid.getAmount() >= horizontalState.getAmount()) {
continue;
}
if (!this.canSpreadTo(level, pos, blockState, direction, targetPos, targetState, targetFluid, horizontalState.getType())) {
continue;
}
this.spreadTo(level, targetPos, targetState, direction, horizontalState);
}
}
private boolean hasSourceConnection(Level level, BlockPos pos, FluidState state, Set<BlockPos> visited) {
if (!this.isAntiwater(state)) {
return false;
}
if (state.isSource()) {
return true;
}
if (!visited.add(pos)) {
return false;
}
FluidState below = level.getFluidState(pos.below());
if (this.hasSourceConnection(level, pos.below(), below, visited)) {
return true;
}
int currentAmount = state.getAmount();
for (Direction direction : Direction.Plane.HORIZONTAL) {
BlockPos neighborPos = pos.relative(direction);
FluidState neighbor = level.getFluidState(neighborPos);
if (!this.isAntiwater(neighbor)) {
continue;
}
if (this.getHorizontalSpreadAmount(neighbor) <= currentAmount) {
continue;
}
if (this.hasSourceConnection(level, neighborPos, neighbor, visited)) {
return true;
}
}
return false;
}
private void scheduleCleanup(Level level, BlockPos pos) {
int tickDelay = this.getTickDelay(level);
level.scheduleTick(pos, this, tickDelay);
level.scheduleTick(pos.above(), this, tickDelay);
level.scheduleTick(pos.below(), this, tickDelay);
for (Direction direction : Direction.Plane.HORIZONTAL) {
level.scheduleTick(pos.relative(direction), this, tickDelay);
}
}
private void scheduleDependentCleanup(Level level, BlockPos pos) {
int tickDelay = this.getTickDelay(level);
level.scheduleTick(pos.above(), this, tickDelay);
for (Direction direction : Direction.Plane.HORIZONTAL) {
level.scheduleTick(pos.relative(direction), this, tickDelay);
}
}
public static final class Source extends AntiwaterFluid {
public Source(Properties properties) {
super(properties);
}
@Override
public int getAmount(FluidState state) {
return 8;
}
@Override
public boolean isSource(FluidState state) {
return true;
}
}
public static final class Flowing extends AntiwaterFluid {
public Flowing(Properties properties) {
super(properties);
this.registerDefaultState(this.getStateDefinition().any().setValue(LEVEL, 7));
}
@Override
protected void createFluidStateDefinition(net.minecraft.world.level.block.state.StateDefinition.Builder<Fluid, FluidState> builder) {
super.createFluidStateDefinition(builder);
builder.add(LEVEL);
}
@Override
public int getAmount(FluidState state) {
return state.getValue(LEVEL);
}
@Override
public boolean isSource(FluidState state) {
return false;
}
}
}
@@ -0,0 +1,76 @@
package com.craisinlord.antarchy.neoforge.content.fluid;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityRotationUtil;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.MoverType;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.phys.Vec3;
import net.neoforged.neoforge.fluids.FluidType;
public class AntiwaterFluidType extends FluidType {
public AntiwaterFluidType(Properties properties) {
super(properties);
}
@Override
public boolean move(FluidState state, LivingEntity entity, Vec3 movementVector, double gravity) {
double prevY = entity.getY();
float swimSpeed = entity.isSprinting() ? 0.026F : 0.02F;
entity.moveRelative(swimSpeed, movementVector);
entity.move(MoverType.SELF, entity.getDeltaMovement());
Vec3 motion = entity.getDeltaMovement();
if (entity.horizontalCollision && entity.onClimbable()) {
motion = new Vec3(motion.x, 0.2, motion.z);
}
AntarchyGravityDirection gravityDirection = AntarchyGravityApi.getGravityDirection(entity);
Vec3 worldMotion = gravityDirection.isInverted()
? AntarchyGravityRotationUtil.vecPlayerToWorld(motion, gravityDirection)
: motion;
double drag = entity.isSwimming() ? 0.9 : 0.8;
worldMotion = worldMotion.scale(drag);
boolean isFlying = entity instanceof Player p && p.getAbilities().flying;
if (!isFlying) {
worldMotion = worldMotion.add(0.0D, 0.005D, 0.0D);
}
entity.setDeltaMovement(
gravityDirection.isInverted()
? AntarchyGravityRotationUtil.vecWorldToPlayer(worldMotion, gravityDirection)
: worldMotion
);
if (entity.horizontalCollision && entity.isFree(
worldMotion.x,
worldMotion.y + 0.6 - entity.getY() + prevY,
worldMotion.z)) {
Vec3 boostedWorldMotion = new Vec3(worldMotion.x, 0.3D, worldMotion.z);
entity.setDeltaMovement(
gravityDirection.isInverted()
? AntarchyGravityRotationUtil.vecWorldToPlayer(boostedWorldMotion, gravityDirection)
: boostedWorldMotion
);
}
return true;
}
@Override
public void setItemMovement(ItemEntity entity) {
Vec3 vec3 = entity.getDeltaMovement();
entity.setDeltaMovement(
vec3.x * 0.99,
vec3.y + (vec3.y < 0.06 ? 5.0E-4 : 0.0),
vec3.z * 0.99
);
}
}
@@ -0,0 +1,195 @@
package com.craisinlord.antarchy.neoforge.entity.multipart;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework;
import com.craisinlord.antarchy.content.entity.multipart.MultipartPartAccess;
import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityDimensions;
import net.minecraft.world.entity.OwnableEntity;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.phys.Vec3;
import net.neoforged.neoforge.entity.PartEntity;
import org.jetbrains.annotations.Nullable;
public class MultipartPartEntity extends PartEntity<Entity> implements OwnableEntity, MultipartPartAccess {
private final MultipartEntityOwner owner;
private final int partIndex;
private final MultipartPartDefinition definition;
public MultipartPartEntity(Entity parent, MultipartEntityOwner owner, int partIndex, MultipartPartDefinition definition) {
super(parent);
this.owner = owner;
this.partIndex = partIndex;
this.definition = definition;
this.setNoGravity(true);
this.refreshDimensions();
this.antarchy$syncFromParent();
}
public int getPartIndex() {
return this.partIndex;
}
public String getPartName() {
return this.definition.name();
}
public float getDamageMultiplier() {
return this.definition.damageMultiplier();
}
public MultipartPartDefinition getPartDefinition() {
return this.definition;
}
@Override
public @Nullable java.util.UUID getOwnerUUID() {
Entity parent = this.getParent();
return parent instanceof OwnableEntity ownable ? ownable.getOwnerUUID() : null;
}
@Override
public EntityDimensions getDimensions(Pose pose) {
return EntityDimensions.scalable(this.definition.width(), this.definition.height());
}
@Override
public void antarchy$syncFromParent() {
Entity parent = this.getParent();
if (parent == null || parent.isRemoved()) {
return;
}
double oldX = this.getX();
double oldY = this.getY();
double oldZ = this.getZ();
double yawRadians = Math.toRadians(parent.getYRot());
Vec3 forward = new Vec3(-Math.sin(yawRadians), 0.0D, Math.cos(yawRadians));
Vec3 right = new Vec3(forward.z, 0.0D, -forward.x);
Vec3 position = new Vec3(
parent.getX() + forward.x * this.definition.forwardOffset() + right.x * this.definition.lateralOffset(),
parent.getY() + this.definition.yOffset(),
parent.getZ() + forward.z * this.definition.forwardOffset() + right.z * this.definition.lateralOffset()
);
this.setPos(position.x, position.y, position.z);
this.setRot(parent.getYRot(), parent.getXRot());
this.xo = oldX;
this.yo = oldY;
this.zo = oldZ;
this.xOld = oldX;
this.yOld = oldY;
this.zOld = oldZ;
}
@Override
public boolean is(Entity entity) {
return entity == this || entity == this.getParent();
}
@Override
public boolean isPickable() {
return true;
}
@Override
public boolean isAttackable() {
return true;
}
@Override
public boolean isPushable() {
return false;
}
@Override
public boolean canBeCollidedWith() {
// Always true so player melee raycasts (ProjectileUtil.getEntityHitResult) can find this part.
// Physical push is prevented separately via isPushable()=false and canCollideWith()=false.
return !this.isRemoved();
}
@Override
public boolean canCollideWith(Entity entity) {
if (!this.definition.collisionEnabled()) {
return false;
}
Entity parent = this.getParent();
if (entity == parent) {
return false;
}
if (entity instanceof PartEntity<?> otherPart && otherPart.getParent() == parent) {
return false;
}
return entity.canBeCollidedWith() && !this.isPassengerOfSameVehicle(entity);
}
@Override
public boolean shouldBeSaved() {
return false;
}
@Override
public ItemStack getPickResult() {
Entity parent = this.getParent();
return parent == null ? ItemStack.EMPTY : parent.getPickResult();
}
@Override
public boolean hurt(DamageSource source, float amount) {
Entity parent = this.getParent();
if (parent == null || parent.isRemoved()) {
return false;
}
if (this.level().isClientSide()) {
if (source.getEntity() instanceof Player) {
MultipartFramework.sendMultipartAttack(parent.getUUID(), this.partIndex, amount * this.definition.damageMultiplier());
}
return true;
}
return this.owner.antarchy$hurtMultipartPart(this, source, amount * this.definition.damageMultiplier());
}
@Override
public boolean isInvulnerableTo(DamageSource source) {
return false;
}
@Override
public InteractionResult interactAt(Player player, Vec3 vec, InteractionHand hand) {
Entity parent = this.getParent();
if (parent == null || parent.isRemoved()) {
return InteractionResult.PASS;
}
if (this.level().isClientSide()) {
MultipartFramework.sendMultipartInteract(parent.getUUID(), this.partIndex, hand.ordinal());
return InteractionResult.SUCCESS;
}
return this.owner.antarchy$interactMultipartPart(this, player, vec, hand);
}
@Override
protected void defineSynchedData(net.minecraft.network.syncher.SynchedEntityData.Builder builder) {
}
@Override
protected void readAdditionalSaveData(CompoundTag tag) {
}
@Override
protected void addAdditionalSaveData(CompoundTag tag) {
}
}
@@ -0,0 +1,64 @@
package com.craisinlord.antarchy.neoforge.entity.multipart;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import com.craisinlord.antarchy.neoforge.mixins.level.ClientLevelPartEntitiesAccessor;
import com.craisinlord.antarchy.neoforge.mixins.level.ServerLevelPartEntitiesAccessor;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.Level;
import net.neoforged.neoforge.entity.PartEntity;
public final class MultipartPartLevelRegistry {
private MultipartPartLevelRegistry() {
}
public static void register(MultipartEntityOwner owner) {
Entity[] parts = owner.antarchy$getMultipartParts();
if (parts == null) {
return;
}
Int2ObjectMap<PartEntity<?>> registry = getRegistry(((Entity) owner).level());
if (registry == null) {
return;
}
for (Entity part : parts) {
if (part instanceof PartEntity<?> partEntity) {
registry.put(partEntity.getId(), partEntity);
}
}
}
public static void unregister(MultipartEntityOwner owner) {
Entity[] parts = owner.antarchy$getMultipartParts();
if (parts == null) {
return;
}
Int2ObjectMap<PartEntity<?>> registry = getRegistry(((Entity) owner).level());
if (registry == null) {
return;
}
for (Entity part : parts) {
if (part instanceof PartEntity<?> partEntity) {
registry.remove(partEntity.getId());
}
}
}
private static Int2ObjectMap<PartEntity<?>> getRegistry(Level level) {
if (level instanceof ServerLevel serverLevel) {
return ((ServerLevelPartEntitiesAccessor) serverLevel).antarchy$getPartEntities();
}
if (level instanceof ClientLevel clientLevel) {
return ((ClientLevelPartEntitiesAccessor) clientLevel).antarchy$getPartEntities();
}
return null;
}
}
@@ -0,0 +1,24 @@
package com.craisinlord.antarchy.neoforge.mixins.compat;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(targets = "dev.ryanhcode.sable.physics.impl.rapier.collider.PhysicsColliderBlockGetter", remap = false)
public class SablePhysicsColliderBlockGetterMixin {
@Shadow
private BlockState state;
@Inject(method = "getFluidState", at = @At("HEAD"), cancellable = true, remap = false)
private void antarchy$nullSafeFluidState(BlockPos pos, CallbackInfoReturnable<FluidState> cir) {
if (this.state == null) {
cir.setReturnValue(Fluids.EMPTY.defaultFluidState());
}
}
}
@@ -0,0 +1,56 @@
package com.craisinlord.antarchy.neoforge.mixins.entity;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import net.minecraft.world.entity.Entity;
import net.neoforged.neoforge.entity.PartEntity;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
@Mixin(Entity.class)
/*
* Exposes multipart child lookup from base entities.
*/
public abstract class MultipartEntityBridgeMixin {
@Unique
private Entity[] antarchy$multipartSourceParts;
@Unique
private PartEntity<?>[] antarchy$multipartBridgeParts;
public boolean isMultipartEntity() {
return (Object) this instanceof MultipartEntityOwner;
}
@Nullable
public PartEntity<?>[] getParts() {
if (!((Object) this instanceof MultipartEntityOwner owner)) {
return null;
}
Entity[] parts = owner.antarchy$getMultipartParts();
if (parts == null) {
parts = owner.antarchy$createMultipartParts();
owner.antarchy$setMultipartParts(parts);
owner.antarchy$syncMultipartParts();
}
if (parts.length == 0) {
return new PartEntity<?>[0];
}
if (this.antarchy$multipartSourceParts != parts || this.antarchy$multipartBridgeParts == null || this.antarchy$multipartBridgeParts.length != parts.length) {
PartEntity<?>[] bridgedParts = new PartEntity<?>[parts.length];
for (int i = 0; i < parts.length; i++) {
if (!(parts[i] instanceof PartEntity<?> part)) {
throw new IllegalStateException("Multipart owner returned a non-PartEntity child: " + parts[i]);
}
bridgedParts[i] = part;
}
this.antarchy$multipartSourceParts = parts;
this.antarchy$multipartBridgeParts = bridgedParts;
}
return this.antarchy$multipartBridgeParts;
}
}
@@ -0,0 +1,34 @@
package com.craisinlord.antarchy.neoforge.mixins.entity;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import com.craisinlord.antarchy.neoforge.entity.multipart.MultipartPartLevelRegistry;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.entity.EntityInLevelCallback;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Entity.class)
/*
* Keeps multipart child entities registered in NeoForge levels.
*/
public abstract class MultipartEntityLevelRegistryMixin {
@Inject(method = "setLevelCallback", at = @At("TAIL"))
private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) {
if ((Object) this instanceof MultipartEntityOwner owner
&& entityInLevelCallback != EntityInLevelCallback.NULL) {
if (owner.antarchy$getMultipartParts() == null) {
owner.antarchy$spawnMultipartParts();
}
MultipartPartLevelRegistry.register(owner);
}
}
@Inject(method = "setRemoved", at = @At("HEAD"))
private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) {
if ((Object) this instanceof MultipartEntityOwner owner) {
MultipartPartLevelRegistry.unregister(owner);
}
}
}
@@ -0,0 +1,25 @@
package com.craisinlord.antarchy.neoforge.mixins.entity;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
import net.minecraft.world.entity.Mob;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Mob.class)
/*
* Stops mob AI movement while paralyzed.
*/
public abstract class ParalyzedMobFreezeMixin {
@Inject(method = "serverAiStep", at = @At("HEAD"))
private void antarchy$freezeAiWhileParalyzed(CallbackInfo ci) {
Mob mob = (Mob) (Object) this;
if (!mob.hasEffect(AntarchyNeoforgeMisc.PARALYZED)) {
return;
}
mob.getNavigation().stop();
mob.setJumping(false);
}
}
@@ -0,0 +1,43 @@
package com.craisinlord.antarchy.neoforge.mixins.infinity;
import com.craisinlord.antarchy.config.AntarchySettings;
import net.minecraft.core.BlockPos;
import net.minecraft.core.component.DataComponents;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.lerariemann.infinity.util.teleport.PortalCreator;
import net.minecraft.server.level.ServerLevel;
@Mixin(value = PortalCreator.class, remap = false)
/*
* Blocks Infinity portal creation when the config says no
*/
public interface PortalCreatorMixin {
@Inject(
method = "tryCreatePortalFromItem(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/item/ItemEntity;)V",
at = @At("HEAD"),
cancellable = true,
remap = false
)
private static void antarchy$blockInfinityBookActivation(ServerLevel level, BlockPos pos, ItemEntity itemEntity, CallbackInfo ci) {
if (!AntarchySettings.disableInfinityBookPortalCreation()) {
return;
}
if (itemEntity.isRemoved()) {
return;
}
ItemStack stack = itemEntity.getItem();
if (!stack.has(DataComponents.WRITABLE_BOOK_CONTENT) && !stack.has(DataComponents.WRITTEN_BOOK_CONTENT)) {
return;
}
ci.cancel();
}
}
@@ -0,0 +1,37 @@
package com.craisinlord.antarchy.neoforge.mixins.infinity;
import net.lerariemann.infinity.dimensions.features.fluid_springs.RandomSpring;
import net.lerariemann.infinity.util.core.ConfigType;
import net.lerariemann.infinity.util.core.RandomProvider;
import net.minecraft.nbt.CompoundTag;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import java.util.Random;
@Mixin(value = RandomSpring.class, remap = false)
/*
* Skips bad fluid picks for Infinity random springs.
*/
public abstract class RandomSpringMixin {
@Redirect(
method = "feature()Lnet/minecraft/nbt/CompoundTag;",
at = @At(
value = "INVOKE",
target = "Lnet/lerariemann/infinity/util/core/RandomProvider;randomName(Ljava/util/Random;Lnet/lerariemann/infinity/util/core/ConfigType;)Ljava/lang/String;"
),
remap = false
)
private String antarchy$useFluidIdForSpring(RandomProvider provider, Random random, ConfigType configType) {
if (configType != ConfigType.FLUIDS) {
return provider.randomName(random, configType);
}
CompoundTag fluidTag = provider.randomElement(random, configType);
String fluidId = fluidTag.getString("fluidName");
if (!fluidId.isEmpty()) {
return fluidId;
}
return fluidTag.getString("Name");
}
}
@@ -0,0 +1,85 @@
package com.craisinlord.antarchy.neoforge.mixins.item;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc;
import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.phys.BlockHitResult;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(BucketItem.class)
public abstract class BucketItemThoraxisWaterMixin {
private static final ResourceLocation THORAXIS_DIMENSION_ID =
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "thoraxis");
@Shadow
@Final
public Fluid content;
@Shadow
protected abstract void playEmptySound(@Nullable Player player, LevelAccessor level, BlockPos pos);
@Inject(
method = "emptyContents(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/phys/BlockHitResult;Lnet/minecraft/world/item/ItemStack;)Z",
at = @At(
value = "INVOKE",
target = "Lnet/neoforged/neoforge/fluids/FluidType;isVaporizedOnPlacement(Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/neoforged/neoforge/fluids/FluidStack;)Z"
),
cancellable = true
)
private void antarchy$replaceWaterVaporizeCheckWithAntiwater(
@Nullable Player player,
Level level,
BlockPos pos,
@Nullable BlockHitResult hitResult,
@Nullable ItemStack container,
CallbackInfoReturnable<Boolean> cir
) {
if (this.content != Fluids.WATER) {
return;
}
if (!level.dimension().location().equals(THORAXIS_DIMENSION_ID)) {
return;
}
if (container == null) {
return;
}
BlockState state = level.getBlockState(pos);
boolean canReplace = state.canBeReplaced(this.content);
if (!state.isAir() && !canReplace && !state.getFluidState().isSource()) {
cir.setReturnValue(false);
return;
}
if (!level.isClientSide) {
if (canReplace && !state.liquid()) {
level.destroyBlock(pos, true);
}
}
boolean placed = level.setBlock(pos, AntarchyNeoforgeMisc.ANTIWATER.get().defaultFluidState().createLegacyBlock(), 11);
if (placed || state.getFluidState().isSource()) {
this.playEmptySound(player, level, pos);
cir.setReturnValue(true);
return;
}
cir.setReturnValue(false);
}
}
@@ -0,0 +1,16 @@
package com.craisinlord.antarchy.neoforge.mixins.level;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.client.multiplayer.ClientLevel;
import net.neoforged.neoforge.entity.PartEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(ClientLevel.class)
/*
* Accessor for client part-entity storage.
*/
public interface ClientLevelPartEntitiesAccessor {
@Accessor("partEntities")
Int2ObjectMap<PartEntity<?>> antarchy$getPartEntities();
}
@@ -0,0 +1,16 @@
package com.craisinlord.antarchy.neoforge.mixins.level;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.server.level.ServerLevel;
import net.neoforged.neoforge.entity.PartEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(ServerLevel.class)
/*
* Accessor for server part-entity storage.
*/
public interface ServerLevelPartEntitiesAccessor {
@Accessor("dragonParts")
Int2ObjectMap<PartEntity<?>> antarchy$getPartEntities();
}
@@ -0,0 +1,121 @@
package com.craisinlord.antarchy.neoforge.network;
import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
import com.craisinlord.antarchy.content.item.GravityGunItem;
import com.craisinlord.antarchy.content.network.GravityGunPrimaryPayload;
import com.craisinlord.antarchy.content.network.GravityGunScrollPayload;
import com.craisinlord.antarchy.content.network.GravityStatePayload;
import net.minecraft.world.entity.Entity;
import net.minecraft.server.level.ServerPlayer;
import net.neoforged.neoforge.network.PacketDistributor;
import net.neoforged.neoforge.network.handling.IPayloadContext;
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
public final class AntarchyGravityNetworking {
private AntarchyGravityNetworking() {
}
public static void register(PayloadRegistrar registrar) {
registrar.playToClient(
GravityStatePayload.TYPE,
GravityStatePayload.STREAM_CODEC,
AntarchyGravityNetworking::handleGravityState
).playToServer(
GravityGunPrimaryPayload.TYPE,
GravityGunPrimaryPayload.STREAM_CODEC,
AntarchyGravityNetworking::handleGravityGunPrimary
).playToServer(
GravityGunScrollPayload.TYPE,
GravityGunScrollPayload.STREAM_CODEC,
AntarchyGravityNetworking::handleGravityGunScroll
).playToServer(
com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload.TYPE,
com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload.STREAM_CODEC,
AntarchyGravityNetworking::handleDiamondMinecartInput
);
}
public static void syncToPlayer(ServerPlayer target, Entity entity) {
GravityStatePayload payload = new GravityStatePayload(
entity.getId(),
AntarchyGravityApi.getGravityDirection(entity),
AntarchyGravityApi.getPrevGravityDirection(entity),
AntarchyGravityApi.isGravityForced(entity),
AntarchyGravityApi.getTransitionDuration(entity),
AntarchyGravityApi.getTransitionRemaining(entity)
);
PacketDistributor.sendToPlayer(target, payload);
}
public static void syncEntity(Entity entity) {
GravityStatePayload payload = new GravityStatePayload(
entity.getId(),
AntarchyGravityApi.getGravityDirection(entity),
AntarchyGravityApi.getPrevGravityDirection(entity),
AntarchyGravityApi.isGravityForced(entity),
AntarchyGravityApi.getTransitionDuration(entity),
AntarchyGravityApi.getTransitionRemaining(entity)
);
PacketDistributor.sendToPlayersTrackingEntityAndSelf(entity, payload);
}
private static void handleGravityState(GravityStatePayload payload, IPayloadContext context) {
context.enqueueWork(() -> {
Entity entity = context.player().level().getEntity(payload.entityId());
// On relog the local player entity may not yet be in the level's entity lookup,
// so fall back to context.player() to ensure the local player always gets synced.
if (entity == null && context.player().getId() == payload.entityId()) {
entity = context.player();
}
if (entity == null) {
return;
}
AntarchyGravityApi.applySyncedState(
entity,
payload.direction(),
payload.previousDirection(),
payload.forced(),
payload.transitionDuration(),
payload.transitionRemaining()
);
});
}
private static void handleGravityGunScroll(GravityGunScrollPayload payload, IPayloadContext context) {
context.enqueueWork(() -> {
if (!(context.player() instanceof ServerPlayer serverPlayer)) {
return;
}
if (!(serverPlayer.getMainHandItem().getItem() instanceof GravityGunItem)) {
return;
}
GravityGunItem.adjustHeldDistance(serverPlayer.getMainHandItem(), payload.distanceDelta());
});
}
private static void handleDiamondMinecartInput(com.craisinlord.antarchy.content.network.DiamondMinecartInputPayload payload, IPayloadContext context) {
context.enqueueWork(() -> {
if (!(context.player() instanceof ServerPlayer serverPlayer)) return;
if (!(serverPlayer.getVehicle() instanceof DiamondMinecartEntity cart)) return;
cart.onInputReceived(payload.inputFlags());
});
}
private static void handleGravityGunPrimary(GravityGunPrimaryPayload payload, IPayloadContext context) {
context.enqueueWork(() -> {
if (!(context.player() instanceof ServerPlayer serverPlayer)) {
return;
}
if (!(serverPlayer.getMainHandItem().getItem() instanceof GravityGunItem gravityGunItem)) {
return;
}
gravityGunItem.firePrimary(serverPlayer.serverLevel(), serverPlayer, serverPlayer.getMainHandItem());
});
}
}
@@ -0,0 +1,94 @@
package com.craisinlord.antarchy.neoforge.network;
import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper;
import com.craisinlord.antarchy.content.item.BrutalflyElytraItem;
import com.craisinlord.antarchy.content.network.BrutalflyElytraAnimationPayload;
import com.craisinlord.antarchy.content.network.BrutalflyElytraFlapPayload;
import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState;
import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.phys.Vec3;
import net.neoforged.neoforge.network.PacketDistributor;
import net.neoforged.neoforge.network.handling.IPayloadContext;
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
public final class BrutalflyElytraNetworking {
private BrutalflyElytraNetworking() {
}
public static void register(PayloadRegistrar registrar) {
registrar.playToServer(
BrutalflyElytraFlapPayload.TYPE,
BrutalflyElytraFlapPayload.STREAM_CODEC,
BrutalflyElytraNetworking::handleFlap
).playToClient(
BrutalflyElytraAnimationPayload.TYPE,
BrutalflyElytraAnimationPayload.STREAM_CODEC,
BrutalflyElytraNetworking::handleAnimation
);
}
private static void handleFlap(com.craisinlord.antarchy.content.network.BrutalflyElytraFlapPayload payload, IPayloadContext context) {
context.enqueueWork(() -> {
if (!(context.player() instanceof ServerPlayer serverPlayer)) {
return;
}
ItemStack chestStack = serverPlayer.getItemBySlot(EquipmentSlot.CHEST);
if (!(chestStack.getItem() instanceof BrutalflyElytraItem)) {
return;
}
if (serverPlayer.isSpectator() || !serverPlayer.isFallFlying() || serverPlayer.isPassenger()) {
return;
}
if (serverPlayer.getCooldowns().isOnCooldown(chestStack.getItem())) {
return;
}
BrutalflyElytraFlightHelper.FlapTier tier = BrutalflyElytraFlightHelper.resolveFlapTier(payload.chargeTicks());
if (tier == BrutalflyElytraFlightHelper.FlapTier.FAIL) {
return;
}
float lift = BrutalflyElytraFlightHelper.liftFor(tier);
float forwardBoost = BrutalflyElytraFlightHelper.forwardBoostFor(tier);
Vec3 look = serverPlayer.getLookAngle();
Vec3 boost = new Vec3(look.x * forwardBoost, lift, look.z * forwardBoost);
serverPlayer.setDeltaMovement(serverPlayer.getDeltaMovement().add(boost));
serverPlayer.hasImpulse = true;
serverPlayer.hurtMarked = true;
serverPlayer.resetFallDistance();
serverPlayer.connection.send(new ClientboundSetEntityMotionPacket(serverPlayer));
chestStack.hurtAndBreak(1, serverPlayer, EquipmentSlot.CHEST);
serverPlayer.getCooldowns().addCooldown(chestStack.getItem(), BrutalflyElytraFlightHelper.FLAP_COOLDOWN_TICKS);
serverPlayer.level().playSound(
null,
serverPlayer.blockPosition(),
SoundEvents.PHANTOM_FLAP,
SoundSource.PLAYERS,
0.9F,
tier == BrutalflyElytraFlightHelper.FlapTier.PERFECT ? 0.8F : tier == BrutalflyElytraFlightHelper.FlapTier.GOOD ? 0.95F : 1.1F
);
PacketDistributor.sendToPlayersTrackingEntityAndSelf(
serverPlayer,
new BrutalflyElytraAnimationPayload(
serverPlayer.getId(),
BrutalflyElytraFlightHelper.animationTicksFor(tier),
lift
)
);
});
}
private static void handleAnimation(BrutalflyElytraAnimationPayload payload, IPayloadContext context) {
context.enqueueWork(() -> BrutalflyElytraClientState.trigger(
payload.entityId(),
payload.durationTicks(),
payload.strength()
));
}
}
@@ -0,0 +1,96 @@
package com.craisinlord.antarchy.neoforge.network;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload;
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.neoforged.neoforge.network.handling.IPayloadContext;
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
public final class MultipartNetworking {
private MultipartNetworking() {
}
public static void register(PayloadRegistrar registrar) {
registrar.playToServer(
MultipartAttackPayload.TYPE,
MultipartAttackPayload.STREAM_CODEC,
MultipartNetworking::handleAttack
).playToServer(
MultipartInteractPayload.TYPE,
MultipartInteractPayload.STREAM_CODEC,
MultipartNetworking::handleInteract
);
}
private static void handleAttack(MultipartAttackPayload payload, IPayloadContext context) {
context.enqueueWork(() -> {
if (!(context.player() instanceof ServerPlayer serverPlayer)) {
return;
}
Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId());
if (!(entity instanceof MultipartEntityOwner owner)) {
return;
}
Entity[] parts = owner.antarchy$getMultipartParts();
if (parts == null) {
parts = owner.antarchy$createMultipartParts();
owner.antarchy$setMultipartParts(parts);
owner.antarchy$syncMultipartParts();
}
if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) {
return;
}
Entity part = parts[payload.partIndex()];
if (part == null || part.isRemoved()) {
return;
}
if (serverPlayer.distanceToSqr(part) > 10000.0D) {
return;
}
DamageSource source = serverPlayer.level().damageSources().playerAttack(serverPlayer);
owner.antarchy$hurtMultipartPart(part, source, payload.damage());
});
}
private static void handleInteract(MultipartInteractPayload payload, IPayloadContext context) {
context.enqueueWork(() -> {
if (!(context.player() instanceof ServerPlayer serverPlayer)) {
return;
}
Entity entity = serverPlayer.serverLevel().getEntity(payload.parentId());
if (!(entity instanceof MultipartEntityOwner owner)) {
return;
}
Entity[] parts = owner.antarchy$getMultipartParts();
if (parts == null) {
parts = owner.antarchy$createMultipartParts();
owner.antarchy$setMultipartParts(parts);
owner.antarchy$syncMultipartParts();
}
if (payload.partIndex() < 0 || payload.partIndex() >= parts.length) {
return;
}
Entity part = parts[payload.partIndex()];
if (part == null || part.isRemoved()) {
return;
}
InteractionHand hand = payload.handId() == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND;
owner.antarchy$interactMultipartPart(part, serverPlayer, part.position(), hand);
});
}
}
@@ -0,0 +1,62 @@
package com.craisinlord.antarchy.neoforge.network;
import com.craisinlord.antarchy.content.client.ThoraxisWeatherClientState;
import com.craisinlord.antarchy.content.weather.ThoraxisWeatherKind;
import com.craisinlord.antarchy.content.weather.ThoraxisWeatherSnapshot;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.neoforged.neoforge.network.PacketDistributor;
import net.neoforged.neoforge.network.handling.IPayloadContext;
import net.neoforged.neoforge.network.registration.PayloadRegistrar;
public final class ThoraxisWeatherNetworking {
private ThoraxisWeatherNetworking() {
}
public static void register(PayloadRegistrar registrar) {
registrar.playToClient(
com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload.TYPE,
com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload.STREAM_CODEC,
ThoraxisWeatherNetworking::handleWeatherPayload
);
}
public static void syncLevel(ServerLevel level, ThoraxisWeatherSnapshot snapshot) {
com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload payload = new com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload(
snapshot.dimension(),
snapshot.kind(),
snapshot.expiresAt(),
snapshot.anchor().getX(),
snapshot.anchor().getY(),
snapshot.anchor().getZ()
);
for (ServerPlayer player : level.players()) {
PacketDistributor.sendToPlayer(player, payload);
}
}
public static void syncPlayer(ServerPlayer player, ThoraxisWeatherSnapshot snapshot) {
com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload payload = new com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload(
snapshot.dimension(),
snapshot.kind(),
snapshot.expiresAt(),
snapshot.anchor().getX(),
snapshot.anchor().getY(),
snapshot.anchor().getZ()
);
PacketDistributor.sendToPlayer(player, payload);
}
private static void handleWeatherPayload(com.craisinlord.antarchy.content.network.ThoraxisWeatherPayload payload, IPayloadContext context) {
context.enqueueWork(() -> ThoraxisWeatherClientState.apply(
ResourceLocation.parse(payload.dimensionId()),
ThoraxisWeatherKind.byId(payload.weatherId()),
payload.expiresAt(),
payload.anchorX(),
payload.anchorY(),
payload.anchorZ()
));
}
}
@@ -0,0 +1,392 @@
package com.craisinlord.antarchy.neoforge.registry;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.block.*;
import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity;
import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity;
import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity;
import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity;
import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity;
import com.craisinlord.antarchy.neoforge.OuranwoodWoodTypes;
import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType;
import com.mojang.serialization.MapCodec;
import net.minecraft.core.Direction;
import net.minecraft.core.registries.Registries;
import net.minecraft.util.valueproviders.UniformInt;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.block.*;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockSetType;
import net.minecraft.world.level.block.state.properties.WoodType;
import net.minecraft.world.level.material.FlowingFluid;
import net.minecraft.world.level.material.FluidState;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.fluids.BaseFlowingFluid;
import net.neoforged.neoforge.registries.DeferredBlock;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
public final class AntarchyNeoforgeBlocks {
private static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(Antarchy.MODID);
private static final DeferredRegister<BlockEntityType<?>> BLOCK_ENTITY_TYPES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, Antarchy.MODID);
public static final DeferredBlock<DuplicatorLogBlock> DUPLICATOR_LOG = BLOCKS.register("duplicator_log",
() -> new DuplicatorLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_LOG).randomTicks()));
public static final DeferredBlock<OuranwoodLogBlock> OURANWOOD_LOG = BLOCKS.register("ouranwood_log",
() -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG)));
public static final DeferredBlock<OuranwoodLogBlock> OURANWOOD_WOOD = BLOCKS.register("ouranwood_wood",
() -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD)));
public static final DeferredBlock<OuranwoodLogBlock> MOSSY_OURANWOOD_LOG = BLOCKS.register("mossy_ouranwood_log",
() -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LOG)));
public static final DeferredBlock<OuranwoodLogBlock> MOSSY_OURANWOOD_WOOD = BLOCKS.register("mossy_ouranwood_wood",
() -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WOOD)));
public static final DeferredBlock<OuranwoodLogBlock> STRIPPED_OURANWOOD_LOG = BLOCKS.register("stripped_ouranwood_log",
() -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_LOG)));
public static final DeferredBlock<OuranwoodLogBlock> STRIPPED_OURANWOOD_WOOD = BLOCKS.register("stripped_ouranwood_wood",
() -> new OuranwoodLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.STRIPPED_JUNGLE_WOOD)));
public static final DeferredBlock<Block> OURANWOOD_PLANKS = BLOCKS.register("ouranwood_planks",
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PLANKS)));
public static final DeferredBlock<StairBlock> OURANWOOD_STAIRS = BLOCKS.register("ouranwood_stairs",
() -> new StairBlock(OURANWOOD_PLANKS.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_STAIRS)));
public static final DeferredBlock<SlabBlock> OURANWOOD_SLAB = BLOCKS.register("ouranwood_slab",
() -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SLAB)));
public static final DeferredBlock<FenceBlock> OURANWOOD_FENCE = BLOCKS.register("ouranwood_fence",
() -> new FenceBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE)));
public static final DeferredBlock<FenceGateBlock> OURANWOOD_FENCE_GATE = BLOCKS.register("ouranwood_fence_gate",
() -> new FenceGateBlock(WoodType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_FENCE_GATE)));
public static final DeferredBlock<DoorBlock> OURANWOOD_DOOR = BLOCKS.register("ouranwood_door",
() -> new DoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_DOOR)));
public static final DeferredBlock<TrapDoorBlock> OURANWOOD_TRAPDOOR = BLOCKS.register("ouranwood_trapdoor",
() -> new TrapDoorBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_TRAPDOOR)));
public static final DeferredBlock<PressurePlateBlock> OURANWOOD_PRESSURE_PLATE = BLOCKS.register("ouranwood_pressure_plate",
() -> new PressurePlateBlock(BlockSetType.JUNGLE, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_PRESSURE_PLATE)));
public static final DeferredBlock<ButtonBlock> OURANWOOD_BUTTON = BLOCKS.register("ouranwood_button",
() -> new ButtonBlock(BlockSetType.JUNGLE, 30, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_BUTTON)));
public static final DeferredBlock<OuranwoodLeavesBlock> OURANWOOD_LEAVES = BLOCKS.register("ouranwood_leaves",
() -> new OuranwoodLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks()));
public static final DeferredBlock<OuranwoodAcornBlock> OURANWOOD_ACORN_BLOCK = BLOCKS.register("ouranwood_acorn",
() -> new OuranwoodAcornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission()));
public static final DeferredBlock<MilkweedBlock> ORANGE_MILKWEED = BLOCKS.register("orange_milkweed",
() -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY)));
public static final DeferredBlock<MilkweedBlock> PINK_MILKWEED = BLOCKS.register("pink_milkweed",
() -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY)));
public static final DeferredBlock<TorchflowerBushBlock> TORCHFLOWER_BUSH = BLOCKS.register("torchflower_bush",
() -> new TorchflowerBushBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY)
.lightLevel(state -> AntarchySettings.glowingTorchflowers() ? 15 : 0)));
public static final DeferredBlock<StandingSignBlock> OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign",
() -> new StandingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN)));
public static final DeferredBlock<WallSignBlock> OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign",
() -> new WallSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_SIGN)));
public static final DeferredBlock<CeilingHangingSignBlock> OURANWOOD_HANGING_SIGN = BLOCKS.register("ouranwood_hanging_sign",
() -> new CeilingHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_HANGING_SIGN)));
public static final DeferredBlock<WallHangingSignBlock> OURANWOOD_WALL_HANGING_SIGN = BLOCKS.register("ouranwood_wall_hanging_sign",
() -> new WallHangingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_WALL_HANGING_SIGN)));
public static final DeferredBlock<DuplicatorSaplingBlock> DUPLICATOR_SAPLING = BLOCKS.register("duplicator_sapling",
() -> new DuplicatorSaplingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission()));
public static final DeferredBlock<DuctTapeBlock> DUCT_TAPE = BLOCKS.register("duct_tape",
() -> new DuctTapeBlock(BlockBehaviour.Properties.of()
.strength(0.2F)
.sound(SoundType.WOOL)
.noOcclusion()
.replaceable()));
public static final DeferredBlock<InfestedRootedDirtBlock> INFESTED_ROOTED_DIRT = BLOCKS.register("infested_rooted_dirt",
() -> new InfestedRootedDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.ROOTED_DIRT).randomTicks()));
public static final DeferredBlock<InfestedCoarseDirtBlock> INFESTED_COARSE_DIRT = BLOCKS.register("infested_coarse_dirt",
() -> new InfestedCoarseDirtBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).randomTicks()));
public static final DeferredBlock<Block> NYXITE = BLOCKS.register("nyxite",
() -> new Block(nyxiteProperties()));
public static final DeferredBlock<Block> POLISHED_NYXITE = BLOCKS.register("polished_nyxite",
() -> new Block(nyxiteProperties()));
public static final DeferredBlock<Block> CHISELED_NYXITE = BLOCKS.register("chiseled_nyxite",
() -> new Block(nyxiteProperties()));
public static final DeferredBlock<Block> NYXITE_BRICKS = BLOCKS.register("nyxite_bricks",
() -> new Block(nyxiteProperties()));
public static final DeferredBlock<StairBlock> NYXITE_STAIRS = BLOCKS.register("nyxite_stairs",
() -> new StairBlock(NYXITE.get().defaultBlockState(), nyxiteProperties()));
public static final DeferredBlock<SlabBlock> NYXITE_SLAB = BLOCKS.register("nyxite_slab",
() -> new SlabBlock(nyxiteProperties()));
public static final DeferredBlock<WallBlock> NYXITE_WALL = BLOCKS.register("nyxite_wall",
() -> new WallBlock(nyxiteProperties()));
public static final DeferredBlock<StairBlock> POLISHED_NYXITE_STAIRS = BLOCKS.register("polished_nyxite_stairs",
() -> new StairBlock(POLISHED_NYXITE.get().defaultBlockState(), nyxiteProperties()));
public static final DeferredBlock<SlabBlock> POLISHED_NYXITE_SLAB = BLOCKS.register("polished_nyxite_slab",
() -> new SlabBlock(nyxiteProperties()));
public static final DeferredBlock<WallBlock> POLISHED_NYXITE_WALL = BLOCKS.register("polished_nyxite_wall",
() -> new WallBlock(nyxiteProperties()));
public static final DeferredBlock<StairBlock> NYXITE_BRICK_STAIRS = BLOCKS.register("nyxite_brick_stairs",
() -> new StairBlock(NYXITE_BRICKS.get().defaultBlockState(), nyxiteProperties()));
public static final DeferredBlock<SlabBlock> NYXITE_BRICK_SLAB = BLOCKS.register("nyxite_brick_slab",
() -> new SlabBlock(nyxiteProperties()));
public static final DeferredBlock<WallBlock> NYXITE_BRICK_WALL = BLOCKS.register("nyxite_brick_wall",
() -> new WallBlock(nyxiteProperties()));
public static final DeferredBlock<com.craisinlord.antarchy.content.block.TriffidGooBlock> TRIFFID_GOO_BLOCK = BLOCKS.register("triffid_goo_block",
() -> new com.craisinlord.antarchy.content.block.TriffidGooBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SLIME_BLOCK).noOcclusion().isViewBlocking((s, l, p) -> false).isSuffocating((s, l, p) -> false)));
public static final DeferredBlock<com.craisinlord.antarchy.content.block.CloudBlock> CLOUD_BLOCK = BLOCKS.register("cloud_block",
() -> new com.craisinlord.antarchy.content.block.CloudBlock(
AntarchyNeoforgeItems::cloudBucketItem,
BlockBehaviour.Properties.ofFullCopy(Blocks.POWDER_SNOW).noLootTable().noOcclusion()
));
public static final DeferredBlock<Block> PALE_NYXITE = BLOCKS.register("pale_nyxite",
() -> new Block(nyxiteProperties()));
public static final DeferredBlock<NyxiteSpikeBlock> NYXITE_SPIKE = BLOCKS.register("nyxite_spike",
() -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE)));
public static final DeferredBlock<PotentNyxiteBlock> POTENT_NYXITE = BLOCKS.register("potent_nyxite",
() -> new PotentNyxiteBlock(
AntarchyNeoforgeItems::potentNyxiteBlockEntityType,
BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK).lightLevel(state -> 3)
));
public static final DeferredBlock<UmbralMossBlock> UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block",
() -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK)));
public static final DeferredBlock<UmbralMossCarpetBlock> UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet",
() -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion()));
public static final DeferredBlock<DreamTorchBlock> DREAM_TORCH = BLOCKS.register("dream_torch",
() -> new DreamTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH)));
public static final DeferredBlock<DreamWallTorchBlock> DREAM_WALL_TORCH = BLOCKS.register("dream_wall_torch",
() -> new DreamWallTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_WALL_TORCH)));
public static final DeferredBlock<LanternBlock> DREAM_LANTERN = BLOCKS.register("dream_lantern",
() -> new LanternBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_LANTERN)));
public static final DeferredBlock<DreamCampfireBlock> DREAM_CAMPFIRE = BLOCKS.register("dream_campfire",
() -> new DreamCampfireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_CAMPFIRE)));
public static final DeferredBlock<DreamFireBlock> DREAM_FIRE = BLOCKS.register("dream_fire",
() -> new DreamFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE)));
public static final DeferredBlock<DreamCeilingFireBlock> DREAM_CEILING_FIRE = BLOCKS.register("dream_fire_ceiling",
() -> new DreamCeilingFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE)));
public static final DeferredBlock<BedBugEggBlock> BED_BUG_EGG = BLOCKS.register("bed_bug_egg",
() -> new BedBugEggBlock(BlockBehaviour.Properties.of()
.strength(0.15F)
.sound(SoundType.METAL)
.randomTicks()
.noOcclusion()
.noCollission()
.replaceable()));
public static final DeferredBlock<WaspNestBlock> WASP_NEST = BLOCKS.register("wasp_nest",
() -> new WaspNestBlock(AntarchyNeoforgeItems::waspNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.BEE_NEST)));
public static final DeferredBlock<com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock> OURANWOOD_SQUIRREL_NEST = BLOCKS.register("ouranwood_squirrel_nest",
() -> new com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).noLootTable()));
public static final DeferredBlock<HushweedBlock> HUSHWEED = BLOCKS.register("hushweed",
() -> new HushweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AZALEA).noCollission().noOcclusion()));
public static final DeferredBlock<LiquidBlock> ICHOR_BLOCK = BLOCKS.register("ichor",
() -> new LiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.ICHOR.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable()));
public static final DeferredBlock<LiquidBlock> ANTIWATER_BLOCK = BLOCKS.register("antiwater",
() -> new com.craisinlord.antarchy.content.fluid.AntiwaterLiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.ANTIWATER.get(),
BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable()));
public static final DeferredBlock<AntNestBlock> RED_ANT_NEST = BLOCKS.register("red_ant_nest",
() -> new AntNestBlock(
AntarchyNeoforgeEntites.RED_ANT,
AntarchyNeoforgeItems::antNestBlockEntityType,
true,
BlockBehaviour.Properties.ofFullCopy(Blocks.MAGMA_BLOCK).lightLevel(state -> 3).noLootTable()
));
public static final DeferredBlock<AntNestBlock> BROWN_ANT_NEST = BLOCKS.register("brown_ant_nest",
() -> new AntNestBlock(AntarchyNeoforgeEntites.BROWN_ANT, AntarchyNeoforgeItems::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable()));
public static final DeferredBlock<AntNestBlock> RAINBOW_ANT_NEST = BLOCKS.register("rainbow_ant_nest",
() -> new AntNestBlock(AntarchyNeoforgeEntites.RAINBOW_ANT, AntarchyNeoforgeItems::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable()));
public static final DeferredBlock<Block> URANIUM_ORE = BLOCKS.register("uranium_ore",
() -> createOre(Blocks.EMERALD_ORE, 4, 8));
public static final DeferredBlock<Block> DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore",
() -> createOre(Blocks.DEEPSLATE_EMERALD_ORE, 4, 8));
public static final DeferredBlock<Block> TITANIUM_ORE = BLOCKS.register("titanium_ore",
() -> createOre(Blocks.DIAMOND_ORE, 4, 8));
public static final DeferredBlock<Block> DEEPSLATE_TITANIUM_ORE = BLOCKS.register("deepslate_titanium_ore",
() -> createOre(Blocks.DEEPSLATE_DIAMOND_ORE, 4, 8));
public static final DeferredBlock<Block> URANIUM_BLOCK = BLOCKS.register("uranium_block",
() -> createStorageBlock(Blocks.EMERALD_BLOCK));
public static final DeferredBlock<Block> TITANIUM_BLOCK = BLOCKS.register("titanium_block",
() -> createStorageBlock(Blocks.DIAMOND_BLOCK));
public static final DeferredBlock<Block> RAW_URANIUM_BLOCK = BLOCKS.register("raw_uranium_block",
() -> createRawStorageBlock(Blocks.RAW_GOLD_BLOCK));
public static final DeferredBlock<Block> RAW_TITANIUM_BLOCK = BLOCKS.register("raw_titanium_block",
() -> createRawStorageBlock(Blocks.RAW_IRON_BLOCK));
public static final DeferredBlock<Block> CUT_URANIUM = BLOCKS.register("cut_uranium",
() -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER));
public static final DeferredBlock<Block> CUT_TITANIUM = BLOCKS.register("cut_titanium",
() -> createHorizontalFacingStorageBlock(Blocks.CUT_COPPER));
public static final DeferredBlock<SlabBlock> CUT_URANIUM_SLAB = BLOCKS.register("cut_uranium_slab",
() -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB)));
public static final DeferredBlock<SlabBlock> CUT_TITANIUM_SLAB = BLOCKS.register("cut_titanium_slab",
() -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_SLAB)));
public static final DeferredBlock<StairBlock> CUT_URANIUM_STAIRS = BLOCKS.register("cut_uranium_stairs",
() -> new StairBlock(CUT_URANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS)));
public static final DeferredBlock<StairBlock> CUT_TITANIUM_STAIRS = BLOCKS.register("cut_titanium_stairs",
() -> new StairBlock(CUT_TITANIUM.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_COPPER_STAIRS)));
public static final DeferredBlock<Block> CHISELED_URANIUM = BLOCKS.register("chiseled_uranium",
() -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER));
public static final DeferredBlock<Block> CHISELED_TITANIUM = BLOCKS.register("chiseled_titanium",
() -> createHorizontalFacingStorageBlock(Blocks.CHISELED_COPPER));
public static final DeferredBlock<SignalSavingBulbBlock> URANIUM_BULB = BLOCKS.register("uranium_bulb",
() -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB)));
public static final DeferredBlock<SignalSavingBulbBlock> TITANIUM_BULB = BLOCKS.register("titanium_bulb",
() -> new SignalSavingBulbBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COPPER_BULB)));
public static final DeferredBlock<DoorBlock> URANIUM_DOOR = BLOCKS.register("uranium_door",
() -> new DoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR)));
public static final DeferredBlock<DoorBlock> TITANIUM_DOOR = BLOCKS.register("titanium_door",
() -> new DoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_DOOR)));
public static final DeferredBlock<TrapDoorBlock> URANIUM_TRAPDOOR = BLOCKS.register("uranium_trapdoor",
() -> new TrapDoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR)));
public static final DeferredBlock<TrapDoorBlock> TITANIUM_TRAPDOOR = BLOCKS.register("titanium_trapdoor",
() -> new TrapDoorBlock(BlockSetType.IRON, BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_TRAPDOOR)));
public static final DeferredBlock<IronBarsBlock> URANIUM_BARS = BLOCKS.register("uranium_bars",
() -> new IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS)));
public static final DeferredBlock<IronBarsBlock> TITANIUM_BARS = BLOCKS.register("titanium_bars",
() -> new IronBarsBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BARS)));
public static final DeferredBlock<RotatedPillarBlock> ANTIMETAL = BLOCKS.register("antimetal",
() -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BASALT)));
public static final DeferredBlock<RotatedPillarBlock> POLISHED_ANTIMETAL = BLOCKS.register("polished_antimetal",
() -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POLISHED_BASALT)));
public static final DeferredBlock<com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock> ANTIMETAL_SCAFFOLDING = BLOCKS.register("antimetal_scaffolding",
() -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING)));
public static final DeferredBlock<CorneaStalkBlock> CORNEA_STALK = BLOCKS.register("cornea_stalk",
() -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks()));
public static final DeferredBlock<AmethystClusterBlock> SMALL_BLOOD_CRYSTAL_BUD = BLOCKS.register("small_blood_crystal_bud",
() -> new AmethystClusterBlock(3.0F, 4.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.SMALL_AMETHYST_BUD)));
public static final DeferredBlock<AmethystClusterBlock> MEDIUM_BLOOD_CRYSTAL_BUD = BLOCKS.register("medium_blood_crystal_bud",
() -> new AmethystClusterBlock(4.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.MEDIUM_AMETHYST_BUD)));
public static final DeferredBlock<AmethystClusterBlock> LARGE_BLOOD_CRYSTAL_BUD = BLOCKS.register("large_blood_crystal_bud",
() -> new AmethystClusterBlock(5.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.LARGE_AMETHYST_BUD)));
public static final DeferredBlock<Block> BUDDING_BLOOD_CRYSTAL = BLOCKS.register("budding_blood_crystal",
() -> new BuddingBloodCrystalBlock(
BlockBehaviour.Properties.ofFullCopy(Blocks.BUDDING_AMETHYST),
AntarchyNeoforgeBlocks::smallBloodCrystalBudBlock,
AntarchyNeoforgeBlocks::mediumBloodCrystalBudBlock,
AntarchyNeoforgeBlocks::largeBloodCrystalBudBlock,
AntarchyNeoforgeBlocks::bloodCrystalCrystalBlock
));
public static final DeferredBlock<Block> BLOOD_CRYSTAL = BLOCKS.register("blood_crystal_block",
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK)));
public static final DeferredBlock<AmethystClusterBlock> BLOOD_CRYSTAL_CRYSTAL = BLOCKS.register("blood_crystal_cluster",
() -> new AmethystClusterBlock(7.0F, 3.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_CLUSTER)));
public static final DeferredBlock<Block> DREAM_SAND = BLOCKS.register("dream_sand",
() -> new DreamSandBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND)));
public static final DeferredBlock<Block> DREAM_SANDSTONE = BLOCKS.register("dream_sandstone",
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE)));
public static final DeferredBlock<Block> CHISELED_DREAM_SANDSTONE = BLOCKS.register("chiseled_dream_sandstone",
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CHISELED_SANDSTONE)));
public static final DeferredBlock<Block> CUT_DREAM_SANDSTONE = BLOCKS.register("cut_dream_sandstone",
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE)));
public static final DeferredBlock<Block> SMOOTH_DREAM_SANDSTONE = BLOCKS.register("smooth_dream_sandstone",
() -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE)));
public static final DeferredBlock<StairBlock> DREAM_SANDSTONE_STAIRS = BLOCKS.register("dream_sandstone_stairs",
() -> new StairBlock(DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_STAIRS)));
public static final DeferredBlock<SlabBlock> DREAM_SANDSTONE_SLAB = BLOCKS.register("dream_sandstone_slab",
() -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_SLAB)));
public static final DeferredBlock<WallBlock> DREAM_SANDSTONE_WALL = BLOCKS.register("dream_sandstone_wall",
() -> new WallBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SANDSTONE_WALL)));
public static final DeferredBlock<StairBlock> SMOOTH_DREAM_SANDSTONE_STAIRS = BLOCKS.register("smooth_dream_sandstone_stairs",
() -> new StairBlock(SMOOTH_DREAM_SANDSTONE.get().defaultBlockState(), BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_STAIRS)));
public static final DeferredBlock<SlabBlock> SMOOTH_DREAM_SANDSTONE_SLAB = BLOCKS.register("smooth_dream_sandstone_slab",
() -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SMOOTH_SANDSTONE_SLAB)));
public static final DeferredBlock<SlabBlock> CUT_DREAM_SANDSTONE_SLAB = BLOCKS.register("cut_dream_sandstone_slab",
() -> new SlabBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.CUT_SANDSTONE_SLAB)));
// Block entity types
public static final DeferredHolder<BlockEntityType<?>, BlockEntityType<AntNestBlockEntity>> ANT_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("ant_nest",
() -> BlockEntityType.Builder.of(
AntNestBlockEntity::new,
RED_ANT_NEST.get(),
BROWN_ANT_NEST.get(),
RAINBOW_ANT_NEST.get()
).build(null));
public static final DeferredHolder<BlockEntityType<?>, BlockEntityType<DreamCampfireBlockEntity>> DREAM_CAMPFIRE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dream_campfire",
() -> BlockEntityType.Builder.of(
DreamCampfireBlockEntity::new,
DREAM_CAMPFIRE.get()
).build(null));
public static final DeferredHolder<BlockEntityType<?>, BlockEntityType<WaspNestBlockEntity>> WASP_NEST_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("wasp_nest",
() -> BlockEntityType.Builder.of(
WaspNestBlockEntity::new,
WASP_NEST.get()
).build(null));
public static final DeferredHolder<BlockEntityType<?>, BlockEntityType<HushweedBlockEntity>> HUSHWEED_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("hushweed",
() -> BlockEntityType.Builder.of(
HushweedBlockEntity::new,
HUSHWEED.get()
).build(null));
public static final DeferredHolder<BlockEntityType<?>, BlockEntityType<PotentNyxiteBlockEntity>> POTENT_NYXITE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("potent_nyxite",
() -> BlockEntityType.Builder.of(
(pos, state) -> new PotentNyxiteBlockEntity(pos, state, AntarchyNeoforgeItems::potentNyxiteBlockEntityType),
POTENT_NYXITE.get()
).build(null));
private AntarchyNeoforgeBlocks() {}
public static void register(IEventBus modEventBus) {
BLOCKS.register(modEventBus);
BLOCK_ENTITY_TYPES.register(modEventBus);
}
static BlockBehaviour.Properties nyxiteProperties() {
return BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK);
}
private static Block createOre(Block copyFrom, int minExperience, int maxExperience) {
return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops());
}
static Block createStorageBlock(Block copyFrom) {
return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops());
}
static Block createHorizontalFacingStorageBlock(Block copyFrom) {
return new SimpleHorizontalFacingBlock(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops());
}
static Block createRawStorageBlock(Block copyFrom) {
return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom)
.strength(3.5F, 6.0F)
.requiresCorrectToolForDrops());
}
private static Block smallBloodCrystalBudBlock() {
return SMALL_BLOOD_CRYSTAL_BUD.get();
}
private static Block mediumBloodCrystalBudBlock() {
return MEDIUM_BLOOD_CRYSTAL_BUD.get();
}
private static Block largeBloodCrystalBudBlock() {
return LARGE_BLOOD_CRYSTAL_BUD.get();
}
private static Block bloodCrystalCrystalBlock() {
return BLOOD_CRYSTAL_CRYSTAL.get();
}
private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock {
private static final MapCodec<SimpleHorizontalFacingBlock> CODEC = simpleCodec(SimpleHorizontalFacingBlock::new);
private SimpleHorizontalFacingBlock(BlockBehaviour.Properties properties) {
super(properties);
registerDefaultState(stateDefinition.any().setValue(FACING, Direction.NORTH));
}
@Override
protected MapCodec<? extends HorizontalDirectionalBlock> codec() {
return CODEC;
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(FACING);
}
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
return defaultBlockState().setValue(FACING, context.getHorizontalDirection().getOpposite());
}
@Override
protected BlockState rotate(BlockState state, Rotation rotation) {
return state.setValue(FACING, rotation.rotate(state.getValue(FACING)));
}
@Override
protected BlockState mirror(BlockState state, Mirror mirror) {
return state.rotate(mirror.getRotation(state.getValue(FACING)));
}
}
}
@@ -0,0 +1,400 @@
package com.craisinlord.antarchy.neoforge.registry;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.item.*;
import net.minecraft.world.item.alchemy.PotionContents;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import java.util.Comparator;
public class AntarchyNeoforgeCreativeModeTabs {
private AntarchyNeoforgeCreativeModeTabs() {}
private static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Antarchy.MODID);
public static void register(IEventBus modEventBus) {
CREATIVE_MODE_TABS.register(modEventBus);
modEventBus.addListener(AntarchyNeoforgeCreativeModeTabs::buildCreativeTabs);
}
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> ANTARCHY_TAB = CREATIVE_MODE_TABS.register("antarchy",
() -> CreativeModeTab.builder()
.title(net.minecraft.network.chat.Component.translatable("itemGroup.antarchy.antarchy"))
.icon(() -> new ItemStack(AntarchyNeoforgeItems.BIG_BERTHA.get()))
.displayItems((parameters, output) -> {})
.build());
static void buildCreativeTabs(BuildCreativeModeTabContentsEvent event) {
if (event.getTabKey() == ANTARCHY_TAB.getKey()) {
java.util.ArrayList<Item> sortedItems = new java.util.ArrayList<>();
for (var holder : AntarchyNeoforgeItems.ITEMS.getEntries()) {
Item item = holder.get();
if (item != Items.AIR) sortedItems.add(item);
}
sortedItems.sort(Comparator
.<Item>comparingInt(AntarchyNeoforgeCreativeModeTabs::creativeTabGroup)
.thenComparing(item -> BuiltInRegistries.ITEM.getKey(item).getPath()));
int n = sortedItems.size();
for (int i = Math.max(0, n - 20); i < n; i++) {
Item it = sortedItems.get(i);
}
sortedItems.forEach(event::accept);
}
if (event.getTabKey() == CreativeModeTabs.SPAWN_EGGS) {
event.accept(AntarchyNeoforgeItems.EASTER_BUNNY_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.FLYING_SQUIRREL_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.CATERPILLAR_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.BUTTERFLY_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.REVERIE_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.BRUTALFLY_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.RED_ANT_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.BROWN_ANT_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.RAINBOW_ANT_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.MOLEWORM_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.MANTIS_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.MOLEVORE_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.TRIFFID_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.APPLE_COW_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.GOLDEN_APPLE_COW_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.ENCHANTED_GOLDEN_APPLE_COW_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.DR_TRAYAURUS_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.WASP_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.BOMBER_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.CLOUD_SHARK_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.KRAKEN_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.MISSILE_SQUID_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.NIGHTMARE_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.BED_BUG_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.LUCID_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.SCORPION_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.BASILISK_SPAWN_EGG.get());
event.accept(AntarchyNeoforgeItems.EMPEROR_SCORPION_SPAWN_EGG.get());
}
if (event.getTabKey() == CreativeModeTabs.NATURAL_BLOCKS) {
event.accept(AntarchyNeoforgeItems.OURANWOOD_LEAVES_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_ACORN.get());
event.accept(AntarchyNeoforgeItems.DUPLICATOR_LOG_ITEM.get());
event.accept(AntarchyNeoforgeItems.DUPLICATOR_SAPLING_ITEM.get());
event.accept(AntarchyNeoforgeItems.ORANGE_MILKWEED_ITEM.get());
event.accept(AntarchyNeoforgeItems.PINK_MILKWEED_ITEM.get());
event.accept(AntarchyNeoforgeItems.TORCHFLOWER_BUSH_ITEM.get());
event.accept(AntarchyNeoforgeItems.HUSHWEED_ITEM.get());
event.accept(AntarchyNeoforgeItems.INFESTED_ROOTED_DIRT_ITEM.get());
event.accept(AntarchyNeoforgeItems.INFESTED_COARSE_DIRT_ITEM.get());
event.accept(AntarchyNeoforgeItems.TRIFFID_GOO_BLOCK_ITEM.get());
event.accept(AntarchyNeoforgeItems.BED_BUG_EGG_ITEM.get());
event.accept(AntarchyNeoforgeItems.WASP_NEST_ITEM.get());
event.accept(AntarchyNeoforgeItems.RED_ANT_NEST_ITEM.get());
event.accept(AntarchyNeoforgeItems.BROWN_ANT_NEST_ITEM.get());
event.accept(AntarchyNeoforgeItems.RAINBOW_ANT_NEST_ITEM.get());
event.accept(AntarchyNeoforgeItems.URANIUM_ORE_ITEM.get());
event.accept(AntarchyNeoforgeItems.DEEPSLATE_URANIUM_ORE_ITEM.get());
event.accept(AntarchyNeoforgeItems.TITANIUM_ORE_ITEM.get());
event.accept(AntarchyNeoforgeItems.DEEPSLATE_TITANIUM_ORE_ITEM.get());
}
if (event.getTabKey() == CreativeModeTabs.TOOLS_AND_UTILITIES) {
event.insertAfter(new ItemStack(Items.SHEARS), new ItemStack(AntarchyNeoforgeItems.DUCT_TAPE_ITEM.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS);
event.insertAfter(new ItemStack(Items.MINECART), new ItemStack(AntarchyNeoforgeItems.DIAMOND_MINECART_ITEM.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS);
event.accept(AntarchyNeoforgeItems.ICHOR_BUCKET.get());
event.accept(AntarchyNeoforgeItems.ANTIWATER_BUCKET.get());
event.accept(AntarchyNeoforgeItems.CLOUD_BUCKET.get());
event.accept(AntarchyNeoforgeItems.REVERIE_BOTTLE.get());
event.accept(AntarchyNeoforgeItems.ULTIMATE_PICKAXE.get());
event.accept(AntarchyNeoforgeItems.ULTIMATE_AXE.get());
event.accept(AntarchyNeoforgeItems.ULTIMATE_SHOVEL.get());
event.accept(AntarchyNeoforgeItems.ULTIMATE_HOE.get());
}
if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) {
event.accept(AntarchyNeoforgeItems.RAW_URANIUM_SCRAP.get());
event.accept(AntarchyNeoforgeItems.RAW_TITANIUM_SCRAP.get());
event.accept(AntarchyNeoforgeItems.RAW_URANIUM.get());
event.accept(AntarchyNeoforgeItems.RAW_TITANIUM.get());
event.accept(AntarchyNeoforgeItems.URANIUM_NUGGET.get());
event.accept(AntarchyNeoforgeItems.TITANIUM_NUGGET.get());
event.accept(AntarchyNeoforgeItems.URANIUM_INGOT.get());
event.accept(AntarchyNeoforgeItems.TITANIUM_INGOT.get());
event.accept(AntarchyNeoforgeItems.CLOUD_SHARK_FIN.get());
event.accept(AntarchyNeoforgeItems.CLOUD_SHARK_FIN_SOUP.get());
event.accept(AntarchyNeoforgeItems.BASILISK_FANG.get());
event.accept(AntarchyNeoforgeItems.NIGHTMARE_SCALE.get());
event.accept(AntarchyNeoforgeItems.MOLEVORE_NOSE.get());
event.accept(AntarchyNeoforgeItems.MOLEWORM_ITEM.get());
event.accept(AntarchyNeoforgeItems.MUD_PIE.get());
event.accept(AntarchyNeoforgeItems.LUCID_EYE.get());
event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_SHARD.get());
event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_APPLE.get());
event.accept(AntarchyNeoforgeItems.MANTIS_CLAW.get());
event.accept(AntarchyNeoforgeItems.BRUTALFLY_WING.get());
event.accept(AntarchyNeoforgeItems.PRIMORDIAL_SCUTE.get());
event.accept(AntarchyNeoforgeItems.TRIFFID_GOO.get());
event.accept(AntarchyNeoforgeItems.VORTEX_EYE.get());
event.accept(AntarchyNeoforgeItems.EMPEROR_SCORPION_STINGER.get());
event.accept(AntarchyNeoforgeItems.KRAKEN_TOOTH.get());
event.accept(AntarchyNeoforgeItems.JUMPY_BUG_LEG.get());
event.accept(AntarchyNeoforgeItems.CORNEA_EAR.get());
event.accept(AntarchyNeoforgeItems.RAINBOW_SUGAR.get());
event.accept(AntarchyNeoforgeItems.BIG_BERTHA_BLADE.get());
event.accept(AntarchyNeoforgeItems.BIG_BERTHA_HANDLE.get());
event.accept(AntarchyNeoforgeItems.BIG_BERTHA_HILT.get());
}
if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) {
event.accept(AntarchyNeoforgeItems.OURANWOOD_LOG_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_WOOD_ITEM.get());
event.accept(AntarchyNeoforgeItems.MOSSY_OURANWOOD_LOG_ITEM.get());
event.accept(AntarchyNeoforgeItems.MOSSY_OURANWOOD_WOOD_ITEM.get());
event.accept(AntarchyNeoforgeItems.STRIPPED_OURANWOOD_LOG_ITEM.get());
event.accept(AntarchyNeoforgeItems.STRIPPED_OURANWOOD_WOOD_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_PLANKS_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_STAIRS_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_SLAB_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_FENCE_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_FENCE_GATE_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_BOAT.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_CHEST_BOAT.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_DOOR_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_TRAPDOOR_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_PRESSURE_PLATE_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_BUTTON_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_SIGN_ITEM.get());
event.accept(AntarchyNeoforgeItems.OURANWOOD_HANGING_SIGN_ITEM.get());
event.accept(AntarchyNeoforgeItems.NYXITE_ITEM.get());
event.accept(AntarchyNeoforgeItems.NYXITE_STAIRS_ITEM.get());
event.accept(AntarchyNeoforgeItems.NYXITE_SLAB_ITEM.get());
event.accept(AntarchyNeoforgeItems.NYXITE_WALL_ITEM.get());
event.accept(AntarchyNeoforgeItems.POLISHED_NYXITE_ITEM.get());
event.accept(AntarchyNeoforgeItems.POLISHED_NYXITE_STAIRS_ITEM.get());
event.accept(AntarchyNeoforgeItems.POLISHED_NYXITE_SLAB_ITEM.get());
event.accept(AntarchyNeoforgeItems.POLISHED_NYXITE_WALL_ITEM.get());
event.accept(AntarchyNeoforgeItems.NYXITE_BRICKS_ITEM.get());
event.accept(AntarchyNeoforgeItems.NYXITE_BRICK_STAIRS_ITEM.get());
event.accept(AntarchyNeoforgeItems.NYXITE_BRICK_SLAB_ITEM.get());
event.accept(AntarchyNeoforgeItems.NYXITE_BRICK_WALL_ITEM.get());
event.accept(AntarchyNeoforgeItems.CHISELED_NYXITE_ITEM.get());
event.accept(AntarchyNeoforgeItems.PALE_NYXITE_ITEM.get());
event.accept(AntarchyNeoforgeItems.NYXITE_SPIKE_ITEM.get());
event.accept(AntarchyNeoforgeItems.POTENT_NYXITE_ITEM.get());
event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_BLOCK_ITEM.get());
event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_CARPET_ITEM.get());
event.accept(AntarchyNeoforgeItems.ANTIMETAL_ITEM.get());
event.accept(AntarchyNeoforgeItems.POLISHED_ANTIMETAL_ITEM.get());
event.accept(AntarchyNeoforgeItems.ANTIMETAL_SCAFFOLDING_ITEM.get());
event.accept(AntarchyNeoforgeItems.DREAM_TORCH_ITEM.get());
event.accept(AntarchyNeoforgeItems.DREAM_LANTERN_ITEM.get());
event.accept(AntarchyNeoforgeItems.DREAM_CAMPFIRE_ITEM.get());
event.accept(AntarchyNeoforgeItems.DREAM_SAND_ITEM.get());
event.accept(AntarchyNeoforgeItems.DREAM_SANDSTONE_ITEM.get());
event.accept(AntarchyNeoforgeItems.CHISELED_DREAM_SANDSTONE_ITEM.get());
event.accept(AntarchyNeoforgeItems.CUT_DREAM_SANDSTONE_ITEM.get());
event.accept(AntarchyNeoforgeItems.SMOOTH_DREAM_SANDSTONE_ITEM.get());
event.accept(AntarchyNeoforgeItems.DREAM_SANDSTONE_STAIRS_ITEM.get());
event.accept(AntarchyNeoforgeItems.DREAM_SANDSTONE_SLAB_ITEM.get());
event.accept(AntarchyNeoforgeItems.DREAM_SANDSTONE_WALL_ITEM.get());
event.accept(AntarchyNeoforgeItems.SMOOTH_DREAM_SANDSTONE_STAIRS_ITEM.get());
event.accept(AntarchyNeoforgeItems.SMOOTH_DREAM_SANDSTONE_SLAB_ITEM.get());
event.accept(AntarchyNeoforgeItems.CUT_DREAM_SANDSTONE_SLAB_ITEM.get());
event.accept(AntarchyNeoforgeItems.BUDDING_BLOOD_CRYSTAL_ITEM.get());
event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_ITEM.get());
event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_CRYSTAL_ITEM.get());
event.accept(AntarchyNeoforgeItems.SMALL_BLOOD_CRYSTAL_BUD_ITEM.get());
event.accept(AntarchyNeoforgeItems.MEDIUM_BLOOD_CRYSTAL_BUD_ITEM.get());
event.accept(AntarchyNeoforgeItems.LARGE_BLOOD_CRYSTAL_BUD_ITEM.get());
event.accept(AntarchyNeoforgeItems.URANIUM_BLOCK_ITEM.get());
event.accept(AntarchyNeoforgeItems.RAW_URANIUM_BLOCK_ITEM.get());
event.accept(AntarchyNeoforgeItems.CUT_URANIUM_ITEM.get());
event.accept(AntarchyNeoforgeItems.CUT_URANIUM_STAIRS_ITEM.get());
event.accept(AntarchyNeoforgeItems.CUT_URANIUM_SLAB_ITEM.get());
event.accept(AntarchyNeoforgeItems.CHISELED_URANIUM_ITEM.get());
event.accept(AntarchyNeoforgeItems.URANIUM_DOOR_ITEM.get());
event.accept(AntarchyNeoforgeItems.URANIUM_TRAPDOOR_ITEM.get());
event.accept(AntarchyNeoforgeItems.URANIUM_BARS_ITEM.get());
event.accept(AntarchyNeoforgeItems.URANIUM_BULB_ITEM.get());
event.accept(AntarchyNeoforgeItems.TITANIUM_BLOCK_ITEM.get());
event.accept(AntarchyNeoforgeItems.RAW_TITANIUM_BLOCK_ITEM.get());
event.accept(AntarchyNeoforgeItems.CUT_TITANIUM_ITEM.get());
event.accept(AntarchyNeoforgeItems.CUT_TITANIUM_STAIRS_ITEM.get());
event.accept(AntarchyNeoforgeItems.CUT_TITANIUM_SLAB_ITEM.get());
event.accept(AntarchyNeoforgeItems.CHISELED_TITANIUM_ITEM.get());
event.accept(AntarchyNeoforgeItems.TITANIUM_DOOR_ITEM.get());
event.accept(AntarchyNeoforgeItems.TITANIUM_TRAPDOOR_ITEM.get());
event.accept(AntarchyNeoforgeItems.TITANIUM_BARS_ITEM.get());
event.accept(AntarchyNeoforgeItems.TITANIUM_BULB_ITEM.get());
}
if (event.getTabKey() == CreativeModeTabs.COMBAT) {
event.accept(AntarchyNeoforgeItems.BATTLE_AXE.get());
event.accept(AntarchyNeoforgeItems.BIG_BERTHA.get());
event.accept(AntarchyNeoforgeItems.BASILISK_DAGGER.get());
event.accept(UltimateGearHelper.createUltimateArmorStack(AntarchyNeoforgeItems.ULTIMATE_HELMET.get(), event.getParameters().holders()));
event.accept(UltimateGearHelper.createUltimateArmorStack(AntarchyNeoforgeItems.ULTIMATE_CHESTPLATE.get(), event.getParameters().holders()));
event.accept(UltimateGearHelper.createUltimateArmorStack(AntarchyNeoforgeItems.ULTIMATE_LEGGINGS.get(), event.getParameters().holders()));
event.accept(UltimateGearHelper.createUltimateArmorStack(AntarchyNeoforgeItems.ULTIMATE_BOOTS.get(), event.getParameters().holders()));
event.accept(AntarchyNeoforgeItems.ULTIMATE_SWORD.get());
event.accept(UltimateGearHelper.createUltimateBowStack(AntarchyNeoforgeItems.ULTIMATE_BOW.get(), event.getParameters().holders()));
event.accept(AntarchyNeoforgeItems.ULTIMATE_CROSSBOW.get());
event.accept(AntarchyNeoforgeItems.SQUIDZOOKA.get());
event.accept(AntarchyNeoforgeItems.SHRINK_RAY.get());
event.accept(AntarchyNeoforgeItems.GROWTH_RAY.get());
event.accept(AntarchyNeoforgeItems.GRAVITY_GUN.get());
event.accept(AntarchyNeoforgeItems.LUCID_PEARL.get());
event.accept(AntarchyNeoforgeItems.NIGHTMARE_HELMET.get());
event.accept(AntarchyNeoforgeItems.NIGHTMARE_CHESTPLATE.get());
event.accept(AntarchyNeoforgeItems.NIGHTMARE_LEGGINGS.get());
event.accept(AntarchyNeoforgeItems.NIGHTMARE_BOOTS.get());
event.accept(AntarchyNeoforgeItems.NIGHTMARE_SWORD.get());
event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_KATANA.get());
event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_HELMET.get());
event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_CHESTPLATE.get());
event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_LEGGINGS.get());
event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_BOOTS.get());
event.accept(AntarchyNeoforgeItems.MOGGLES.get());
event.accept(AntarchyNeoforgeItems.SCORPION_WHIP.get());
event.accept(AntarchyNeoforgeItems.FALLEN_KING_CROWN.get());
event.accept(AntarchyNeoforgeItems.BRUTALFLY_ELYTRA.get());
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.SHRINKING));
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.STRONG_SHRINKING));
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.EXTREME_SHRINKING));
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.PARALYSIS));
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.LONG_PARALYSIS));
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.HASTE));
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.STRONG_HASTE));
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.GROWING));
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.STRONG_GROWING));
event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.EXTREME_GROWING));
}
}
private static int creativeTabGroup(net.minecraft.world.item.Item item) {
String path = BuiltInRegistries.ITEM.getKey(item).getPath();
return switch (path) {
// 0 - Ouranwood blocks
case "ouranwood_log", "ouranwood_wood", "mossy_ouranwood_log", "mossy_ouranwood_wood",
"stripped_ouranwood_log", "stripped_ouranwood_wood", "duplicator_log",
"ouranwood_planks", "ouranwood_stairs", "ouranwood_slab",
"ouranwood_fence", "ouranwood_fence_gate",
"ouranwood_door", "ouranwood_trapdoor",
"ouranwood_pressure_plate", "ouranwood_button",
"ouranwood_sign", "ouranwood_hanging_sign",
"ouranwood_boat", "ouranwood_chest_boat" -> 0;
// 1 - Nyxite blocks
case "nyxite", "polished_nyxite", "chiseled_nyxite", "nyxite_bricks",
"nyxite_stairs", "nyxite_slab", "nyxite_wall",
"polished_nyxite_stairs", "polished_nyxite_slab", "polished_nyxite_wall",
"nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall",
"pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1;
// 2 - Antimetal blocks
case "antimetal", "polished_antimetal" -> 2;
// 3 - Dream sand and blocks
case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone",
"cut_dream_sandstone", "smooth_dream_sandstone",
"dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall",
"smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab",
"cut_dream_sandstone_slab" -> 3;
// 4 - Umbral moss
case "umbral_moss_block", "umbral_moss_carpet" -> 4;
// 5 - All ores + metal storage/decorative blocks
case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore",
"uranium_block", "titanium_block",
"cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab",
"cut_uranium_stairs", "cut_titanium_stairs",
"chiseled_uranium", "chiseled_titanium",
"uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor",
"uranium_bars", "titanium_bars", "uranium_bulb", "titanium_bulb" -> 5;
// 6 - Raw ores
case "raw_uranium", "raw_titanium", "raw_uranium_scrap", "raw_titanium_scrap",
"raw_uranium_block", "raw_titanium_block" -> 6;
// 7 - Blood crystal blocks (not the shard ingredient)
case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud",
"large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster" -> 7;
// 8 - Ouranwood leaves
case "ouranwood_leaves" -> 8;
// 9 - Saplings / seeds
case "duplicator_sapling", "ouranwood_acorn" -> 9;
// 10 - Plants and flowers
case "orange_milkweed", "pink_milkweed", "torchflower_bush", "hushweed",
"triffid_goo_block", "wasp_nest",
"red_ant_nest", "brown_ant_nest", "rainbow_ant_nest" -> 10;
// 11 - Dream lighting
case "dream_torch", "dream_lantern", "dream_campfire" -> 11;
// 12 - Antimetal scaffolding
case "antimetal_scaffolding" -> 12;
// 13 - Infested blocks
case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg" -> 13;
// 14 - Tools
case "ultimate_pickaxe", "ultimate_axe", "ultimate_shovel", "ultimate_hoe",
"duct_tape", "diamond_minecart", "gravity_sculk_sensor" -> 14;
// 15 - Liquid buckets
case "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 15;
// 16 - Misc wearables / gadgets
case "moggles", "brutalfly_elytra", "fallen_king_crown" -> 16;
// 17 - Weapons
case "battle_axe", "basilisk_dagger", "squidzooka", "shrink_ray", "growth_ray",
"gravity_gun", "nightmare_sword", "lucid_pearl", "scorpion_whip", "blood_crystal_katana",
"big_bertha", "big_bertha_blade", "big_bertha_handle", "big_bertha_hilt",
"ultimate_sword", "ultimate_mace" -> 17;
// 18 - Armor sets
case "blood_crystal_helmet", "blood_crystal_chestplate",
"blood_crystal_leggings", "blood_crystal_boots",
"nightmare_helmet", "nightmare_chestplate",
"nightmare_leggings", "nightmare_boots",
"ultimate_helmet", "ultimate_chestplate",
"ultimate_leggings", "ultimate_boots" -> 18;
// 19 - Ranged weapons
case "ultimate_bow", "ultimate_crossbow" -> 19;
// 20 - Foods
case "cloud_shark_fin_soup", "mud_pie", "rainbow_sugar",
"blood_crystal_apple" -> 20;
// 21 - Crafting ingredients
case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth",
"emperor_scorpion_stinger", "nightmare_scale", "molevore_nose",
"moleworm", "uranium_nugget", "titanium_nugget",
"uranium_ingot", "titanium_ingot", "lucid_eye",
"mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear",
"primordial_scute", "triffid_goo", "vortex_eye" -> 21;
// 22 - Arrows (reserved for future arrow types)
// 23 - Potions
case "reverie_bottle" -> 23;
// 24 - Spawn eggs
default -> {
if (!path.endsWith("_spawn_egg")) {
org.slf4j.LoggerFactory.getLogger("Antarchy/CreativeTab").warn("Unmatched creative tab item: '{}'", path);
}
yield path.endsWith("_spawn_egg") ? 24 : 99;
}
};
}
}
@@ -0,0 +1,270 @@
package com.craisinlord.antarchy.neoforge.registry;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow;
import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow;
import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow;
import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.HoneyedAppleCow;
import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity;
import com.craisinlord.antarchy.content.entity.BedBugEntity;
import com.craisinlord.antarchy.content.entity.BomberEntity;
import com.craisinlord.antarchy.content.entity.ButterflyEntity;
import com.craisinlord.antarchy.content.entity.CaterpillarEntity;
import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity;
import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity;
import com.craisinlord.antarchy.content.entity.EasterBunnyEntity;
import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity;
import com.craisinlord.antarchy.content.entity.HushProjectileEntity;
import com.craisinlord.antarchy.content.entity.MantisEntity;
import com.craisinlord.antarchy.content.entity.MissileSquidEntity;
import com.craisinlord.antarchy.content.entity.MolevoreEntity;
import com.craisinlord.antarchy.content.entity.MolewormEntity;
import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity;
import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity;
import com.craisinlord.antarchy.content.entity.ReverieEntity;
import com.craisinlord.antarchy.content.entity.ScorpionEntity;
import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity;
import com.craisinlord.antarchy.content.entity.TriffidEntity;
import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity;
import com.craisinlord.antarchy.content.entity.WaspEntity;
import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity;
import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity;
import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity;
import com.craisinlord.antarchy.content.entity.ant.RedAntEntity;
import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity;
import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity;
import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity;
import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity;
import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity;
import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity;
import com.craisinlord.antarchy.content.entity.lucid.LucidEntity;
import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity;
import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.entity.animal.Cow;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.fml.ModList;
import net.neoforged.neoforge.registries.DeferredRegister;
public final class AntarchyNeoforgeEntites {
private static final DeferredRegister<EntityType<?>> ENTITY_TYPES = DeferredRegister.create(Registries.ENTITY_TYPE, Antarchy.MODID);
public static final boolean CREATE_LOADED = isModLoaded("create");
private static boolean isModLoaded(String modId) {
try {
return ModList.get().isLoaded(modId);
} catch (Throwable ignored) {
return false;
}
}
public static final DeferredHolder<EntityType<?>, EntityType<RedAntEntity>> RED_ANT = ENTITY_TYPES.register("red_ant",
() -> buildAntType(RedAntEntity::new, MobCategory.CREATURE, "red_ant"));
public static final DeferredHolder<EntityType<?>, EntityType<BrownAntEntity>> BROWN_ANT = ENTITY_TYPES.register("brown_ant",
() -> buildAntType(BrownAntEntity::new, MobCategory.CREATURE, "brown_ant"));
public static final DeferredHolder<EntityType<?>, EntityType<RainbowAntEntity>> RAINBOW_ANT = ENTITY_TYPES.register("rainbow_ant",
() -> buildAntType(RainbowAntEntity::new, MobCategory.CREATURE, "rainbow_ant"));
public static final DeferredHolder<EntityType<?>, EntityType<MolewormEntity>> MOLEWORM = ENTITY_TYPES.register("moleworm",
() -> EntityType.Builder.of(MolewormEntity::new, MobCategory.MONSTER)
.sized(0.4F, 0.3F)
.clientTrackingRange(8)
.build("moleworm"));
public static final DeferredHolder<EntityType<?>, EntityType<MantisEntity>> MANTIS = ENTITY_TYPES.register("mantis",
() -> EntityType.Builder.of(MantisEntity::new, MobCategory.MONSTER)
.sized(3.125F, 2.5F)
.clientTrackingRange(8)
.build("mantis"));
public static final DeferredHolder<EntityType<?>, EntityType<OuranwoodBoatEntity>> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat",
() -> EntityType.Builder.<OuranwoodBoatEntity>of(OuranwoodBoatEntity::new, MobCategory.MISC)
.sized(1.375F, 0.5625F)
.clientTrackingRange(10)
.updateInterval(10)
.build("ouranwood_boat"));
public static final DeferredHolder<EntityType<?>, EntityType<OuranwoodChestBoatEntity>> OURANWOOD_CHEST_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_chest_boat",
() -> EntityType.Builder.<OuranwoodChestBoatEntity>of(OuranwoodChestBoatEntity::new, MobCategory.MISC)
.sized(1.375F, 0.5625F)
.clientTrackingRange(10)
.updateInterval(10)
.build("ouranwood_chest_boat"));
public static final DeferredHolder<EntityType<?>, EntityType<MolevoreEntity>> MOLEVORE = ENTITY_TYPES.register("molevore",
() -> EntityType.Builder.of(MolevoreEntity::new, MobCategory.MONSTER)
.sized(1.95F, 1.1F)
.clientTrackingRange(10)
.build("molevore"));
public static final DeferredHolder<EntityType<?>, EntityType<TriffidEntity>> TRIFFID = ENTITY_TYPES.register("triffid",
() -> EntityType.Builder.of(TriffidEntity::new, MobCategory.MONSTER)
.sized(2.0F, 5.0F)
.clientTrackingRange(10)
.build("triffid"));
public static final DeferredHolder<EntityType<?>, EntityType<BedBugEntity>> BED_BUG = ENTITY_TYPES.register("bed_bug",
() -> EntityType.Builder.of(BedBugEntity::new, MobCategory.CREATURE)
.sized(1.15F, 0.8F)
.clientTrackingRange(8)
.build("bed_bug"));
public static final DeferredHolder<EntityType<?>, EntityType<WaspEntity>> WASP = ENTITY_TYPES.register("wasp",
() -> EntityType.Builder.of(WaspEntity::new, MobCategory.MONSTER)
.sized(0.8625F, 1.365F)
.clientTrackingRange(8)
.build("wasp"));
public static final DeferredHolder<EntityType<?>, EntityType<BomberEntity>> BOMBER = ENTITY_TYPES.register("bomber",
() -> EntityType.Builder.of(BomberEntity::new, MobCategory.MONSTER)
.sized(0.55F, 0.75F)
.clientTrackingRange(8)
.build("bomber"));
public static final DeferredHolder<EntityType<?>, EntityType<SizeRayProjectileEntity>> SHRINK_RAY_PROJECTILE = ENTITY_TYPES.register("shrink_ray_projectile",
() -> EntityType.Builder.<SizeRayProjectileEntity>of(SizeRayProjectileEntity::createShrink, MobCategory.MISC)
.sized(0.5F, 0.5F)
.clientTrackingRange(8)
.updateInterval(1)
.build("shrink_ray_projectile"));
public static final DeferredHolder<EntityType<?>, EntityType<SizeRayProjectileEntity>> GROWTH_RAY_PROJECTILE = ENTITY_TYPES.register("growth_ray_projectile",
() -> EntityType.Builder.<SizeRayProjectileEntity>of(SizeRayProjectileEntity::createGrowth, MobCategory.MISC)
.sized(0.5F, 0.5F)
.clientTrackingRange(8)
.updateInterval(1)
.build("growth_ray_projectile"));
public static final DeferredHolder<EntityType<?>, EntityType<DiamondMinecartEntity>> DIAMOND_MINECART = ENTITY_TYPES.register("diamond_minecart",
() -> EntityType.Builder.<DiamondMinecartEntity>of((entityType, level) -> new DiamondMinecartEntity(entityType, level, AntarchyNeoforgeItems.diamondMinecartItem()), MobCategory.MISC)
.sized(0.98F, 0.7F)
.clientTrackingRange(8)
.build("diamond_minecart"));
public static final DeferredHolder<EntityType<?>, EntityType<EasterBunnyEntity>> EASTER_BUNNY = ENTITY_TYPES.register("easter_bunny",
() -> EntityType.Builder.of(EasterBunnyEntity::new, MobCategory.CREATURE)
.sized(0.5F, 1.0F)
.clientTrackingRange(8)
.build("easter_bunny"));
public static final DeferredHolder<EntityType<?>, EntityType<FlyingSquirrelEntity>> FLYING_SQUIRREL = ENTITY_TYPES.register("flying_squirrel",
() -> EntityType.Builder.of(FlyingSquirrelEntity::new, MobCategory.CREATURE)
.sized(0.6F, 0.7F)
.clientTrackingRange(8)
.build("flying_squirrel"));
public static final DeferredHolder<EntityType<?>, EntityType<CaterpillarEntity>> CATERPILLAR = ENTITY_TYPES.register("caterpillar",
() -> EntityType.Builder.of(CaterpillarEntity::new, MobCategory.CREATURE)
.sized(0.8775F, 0.585F)
.clientTrackingRange(8)
.build("caterpillar"));
public static final DeferredHolder<EntityType<?>, EntityType<ButterflyEntity>> BUTTERFLY = ENTITY_TYPES.register("butterfly",
() -> EntityType.Builder.of(ButterflyEntity::new, MobCategory.AMBIENT)
.sized(1.125F, 1.375F)
.clientTrackingRange(8)
.build("butterfly"));
public static final DeferredHolder<EntityType<?>, EntityType<ReverieEntity>> REVERIE = ENTITY_TYPES.register("reverie",
() -> EntityType.Builder.of(ReverieEntity::new, MobCategory.AMBIENT)
.sized(0.7F, 0.7F)
.clientTrackingRange(8)
.build("reverie"));
public static final DeferredHolder<EntityType<?>, EntityType<BrutalflyEntity>> BRUTALFLY = ENTITY_TYPES.register("brutalfly",
() -> EntityType.Builder.of(BrutalflyEntity::new, MobCategory.MONSTER)
.sized(2.4F, 2.1F)
.clientTrackingRange(12)
.build("brutalfly"));
public static final DeferredHolder<EntityType<?>, EntityType<AppleCow>> APPLE_COW = ENTITY_TYPES.register("apple_cow",
() -> buildCowType(AppleCow::new, "apple_cow"));
public static final DeferredHolder<EntityType<?>, EntityType<GoldenAppleCow>> GOLDEN_APPLE_COW = ENTITY_TYPES.register("golden_apple_cow",
() -> buildCowType(GoldenAppleCow::new, "golden_apple_cow"));
public static final DeferredHolder<EntityType<?>, EntityType<EnchantedGoldenAppleCow>> ENCHANTED_GOLDEN_APPLE_COW = ENTITY_TYPES.register("enchanted_golden_apple_cow",
() -> buildCowType(EnchantedGoldenAppleCow::new, "enchanted_golden_apple_cow"));
public static final DeferredHolder<EntityType<?>, EntityType<HoneyedAppleCow>> HONEYED_APPLE_COW = CREATE_LOADED
? ENTITY_TYPES.register("honeyed_apple_cow", () -> buildCowType(HoneyedAppleCow::new, "honeyed_apple_cow"))
: null;
public static final DeferredHolder<EntityType<?>, EntityType<DrTrayaurusEntity>> DR_TRAYAURUS = ENTITY_TYPES.register("dr_trayaurus",
() -> EntityType.Builder.of(DrTrayaurusEntity::new, MobCategory.MISC)
.sized(0.6F, 1.95F)
.clientTrackingRange(10)
.build("dr_trayaurus"));
public static final DeferredHolder<EntityType<?>, EntityType<CloudSharkEntity>> CLOUD_SHARK = ENTITY_TYPES.register("cloud_shark",
() -> EntityType.Builder.of(CloudSharkEntity::new, MobCategory.MONSTER)
.sized(2.4F, 0.9F)
.clientTrackingRange(10)
.build("cloud_shark"));
public static final DeferredHolder<EntityType<?>, EntityType<KrakenEntity>> KRAKEN = ENTITY_TYPES.register("kraken",
() -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER)
.sized(5.2F, 9.8F)
.clientTrackingRange(12)
.build("kraken"));
public static final DeferredHolder<EntityType<?>, EntityType<MissileSquidEntity>> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid",
() -> EntityType.Builder.of(MissileSquidEntity::new, MobCategory.MONSTER)
.sized(1.62F, 3.18F)
.clientTrackingRange(10)
.build("missile_squid"));
public static final DeferredHolder<EntityType<?>, EntityType<NightmareEntity>> NIGHTMARE = ENTITY_TYPES.register("nightmare",
() -> EntityType.Builder.of(NightmareEntity::new, MobCategory.MONSTER)
.sized(3.2F, 3.8F)
.clientTrackingRange(12)
.build("nightmare"));
public static final DeferredHolder<EntityType<?>, EntityType<LucidEntity>> LUCID = ENTITY_TYPES.register("lucid",
() -> EntityType.Builder.of(LucidEntity::new, MobCategory.MONSTER)
.sized(2.0F, 2.0F)
.clientTrackingRange(10)
.build("lucid"));
public static final DeferredHolder<EntityType<?>, EntityType<LucidBoltEntity>> LUCID_BOLT = ENTITY_TYPES.register("lucid_bolt",
() -> EntityType.Builder.<LucidBoltEntity>of(LucidBoltEntity::new, MobCategory.MISC)
.sized(0.3F, 0.3F)
.clientTrackingRange(8)
.updateInterval(1)
.build("lucid_bolt"));
public static final DeferredHolder<EntityType<?>, EntityType<ScorpionEntity>> SCORPION = ENTITY_TYPES.register("scorpion",
() -> EntityType.Builder.of(ScorpionEntity::new, MobCategory.MONSTER)
.sized(1.5F, 1.0F)
.clientTrackingRange(8)
.build("scorpion"));
public static final DeferredHolder<EntityType<?>, EntityType<BasiliskEntity>> BASILISK = ENTITY_TYPES.register("basilisk",
() -> EntityType.Builder.of(BasiliskEntity::new, MobCategory.MONSTER)
.sized(2.0F, 3.5F)
.clientTrackingRange(14)
.build("basilisk"));
public static final DeferredHolder<EntityType<?>, EntityType<EmperorScorpionEntity>> EMPEROR_SCORPION = ENTITY_TYPES.register("emperor_scorpion",
() -> EntityType.Builder.of(EmperorScorpionEntity::new, MobCategory.MONSTER)
.sized(4.05F, 1.35F)
.clientTrackingRange(10)
.build("emperor_scorpion"));
public static final DeferredHolder<EntityType<?>, EntityType<LucidEyeProjectileEntity>> LUCID_PEARL_PROJECTILE = ENTITY_TYPES.register("lucid_pearl_projectile",
() -> EntityType.Builder.<LucidEyeProjectileEntity>of(LucidEyeProjectileEntity::new, MobCategory.MISC)
.sized(0.25F, 0.25F)
.clientTrackingRange(8)
.updateInterval(1)
.build("lucid_pearl_projectile"));
public static final DeferredHolder<EntityType<?>, EntityType<HushProjectileEntity>> HUSH_PROJECTILE = ENTITY_TYPES.register("hush_projectile",
() -> EntityType.Builder.<HushProjectileEntity>of(HushProjectileEntity::new, MobCategory.MISC)
.sized(0.35F, 0.35F)
.clientTrackingRange(8)
.updateInterval(1)
.build("hush_projectile"));
public static final DeferredHolder<EntityType<?>, EntityType<BrutalflyOrbEntity>> BRUTALFLY_ORB = ENTITY_TYPES.register("brutalfly_orb",
() -> EntityType.Builder.<BrutalflyOrbEntity>of(BrutalflyOrbEntity::new, MobCategory.MISC)
.sized(0.75F, 0.75F)
.clientTrackingRange(10)
.updateInterval(1)
.build("brutalfly_orb"));
public static final DeferredHolder<EntityType<?>, EntityType<UpwardFallingBlockEntity>> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block",
() -> EntityType.Builder.<UpwardFallingBlockEntity>of(
UpwardFallingBlockEntity::new, MobCategory.MISC)
.sized(0.98F, 0.98F)
.clientTrackingRange(10)
.updateInterval(1)
.build("upward_falling_block"));
private AntarchyNeoforgeEntites() {}
public static void register(IEventBus modEventBus) {
ENTITY_TYPES.register(modEventBus);
}
static <T extends BaseAntEntity> EntityType<T> buildAntType(EntityType.EntityFactory<T> factory, MobCategory category, String name) {
return EntityType.Builder.of(factory, category)
.sized(0.6375F, 0.2125F)
.clientTrackingRange(8)
.build(name);
}
static <T extends Cow> EntityType<T> buildCowType(EntityType.EntityFactory<T> factory, String name) {
return EntityType.Builder.of(factory, MobCategory.CREATURE)
.sized(0.9F, 1.4F)
.clientTrackingRange(10)
.build(name);
}
}
@@ -0,0 +1,73 @@
package com.craisinlord.antarchy.neoforge.registry;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.entity.*;
import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity;
import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity;
import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity;
import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity;
import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity;
import com.craisinlord.antarchy.content.entity.lucid.LucidEntity;
import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.animal.Cow;
import net.minecraft.world.entity.animal.Rabbit;
import net.minecraft.world.entity.npc.Villager;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent;
public class AntarchyNeoforgeEntityAttributes {
private AntarchyNeoforgeEntityAttributes() {}
public static void register(IEventBus modEventBus) {
modEventBus.addListener(AntarchyNeoforgeEntityAttributes::registerEntityAttributes);
}
static void registerEntityAttributes(EntityAttributeCreationEvent event) {
AttributeSupplier rabbitAttributes = Rabbit.createAttributes().build();
event.put(AntarchyNeoforgeEntites.EASTER_BUNNY.get(), rabbitAttributes);
event.put(AntarchyNeoforgeEntites.FLYING_SQUIRREL.get(), FlyingSquirrelEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.CATERPILLAR.get(), CaterpillarEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.BUTTERFLY.get(), ButterflyEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.REVERIE.get(), ReverieEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.BRUTALFLY.get(), BrutalflyEntity.createAttributes().build());
AttributeSupplier cowAttributes = Cow.createAttributes().build();
event.put(AntarchyNeoforgeEntites.APPLE_COW.get(), cowAttributes);
event.put(AntarchyNeoforgeEntites.GOLDEN_APPLE_COW.get(), cowAttributes);
event.put(AntarchyNeoforgeEntites.ENCHANTED_GOLDEN_APPLE_COW.get(), cowAttributes);
event.put(AntarchyNeoforgeEntites.DR_TRAYAURUS.get(), Villager.createAttributes().build());
event.put(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.KRAKEN.get(), KrakenEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.NIGHTMARE.get(), NightmareEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.BED_BUG.get(), BedBugEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.WASP.get(), WaspEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.BOMBER.get(), BomberEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.MANTIS.get(), MantisEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.TRIFFID.get(), TriffidEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.LUCID.get(), LucidEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.SCORPION.get(), ScorpionEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.BASILISK.get(), BasiliskEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build());
AttributeSupplier redAntAttributes = buildAntAttributes(AntarchySettings.redAntHealth(), AntarchySettings.redAntMovementSpeed(), AntarchySettings.redAntAttackDamage()).build();
AttributeSupplier brownAntAttributes = buildAntAttributes(AntarchySettings.brownAntHealth(), AntarchySettings.brownAntMovementSpeed(), AntarchySettings.brownAntAttackDamage()).build();
AttributeSupplier rainbowAntAttributes = buildAntAttributes(AntarchySettings.rainbowAntHealth(), AntarchySettings.rainbowAntMovementSpeed(), AntarchySettings.rainbowAntAttackDamage()).build();
AttributeSupplier termiteAttributes = buildAntAttributes(AntarchySettings.termiteHealth(), AntarchySettings.termiteMovementSpeed(), AntarchySettings.termiteAttackDamage()).build();
event.put(AntarchyNeoforgeEntites.RED_ANT.get(), redAntAttributes);
event.put(AntarchyNeoforgeEntites.BROWN_ANT.get(), brownAntAttributes);
event.put(AntarchyNeoforgeEntites.RAINBOW_ANT.get(), rainbowAntAttributes);
event.put(AntarchyNeoforgeEntites.MOLEWORM.get(), MolewormEntity.createAttributes().build());
event.put(AntarchyNeoforgeEntites.MOLEVORE.get(), MolevoreEntity.createAttributes().build());
}
private static AttributeSupplier.Builder buildAntAttributes(double health, double speed, double attackDamage) {
return net.minecraft.world.entity.Mob.createMobAttributes()
.add(Attributes.MAX_HEALTH, health)
.add(Attributes.MOVEMENT_SPEED, speed)
.add(Attributes.ATTACK_DAMAGE, attackDamage);
}
}
@@ -0,0 +1,583 @@
package com.craisinlord.antarchy.neoforge.registry;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.config.AntarchySettings;
import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity;
import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity;
import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity;
import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity;
import com.craisinlord.antarchy.content.item.*;
import com.craisinlord.antarchy.content.item.BloodCrystalArmorItem;
import com.craisinlord.antarchy.content.item.BloodCrystalAppleItem;
import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem;
import com.craisinlord.antarchy.content.item.BloodCrystalShardItem;
import com.craisinlord.antarchy.content.item.ultimate.*;
import com.craisinlord.antarchy.content.item.NightmareArmorItem;
import com.craisinlord.antarchy.content.item.NightmareSwordItem;
import com.craisinlord.antarchy.content.item.LucidEyeItem;
import com.craisinlord.antarchy.content.item.LucidPearlItem;
import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem;
import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem;
import com.craisinlord.antarchy.content.item.RainbowSugarItem;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
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.item.crafting.Ingredient;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.common.DeferredSpawnEggItem;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredItem;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.minecraft.sounds.SoundEvents;
import java.util.Collection;
import java.util.EnumMap;
import java.util.List;
public final class AntarchyNeoforgeItems {
static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Antarchy.MODID);
private static final DeferredRegister<ArmorMaterial> ARMOR_MATERIALS = DeferredRegister.create(Registries.ARMOR_MATERIAL, Antarchy.MODID);
// Tier constants
public static final Tier ULTIMATE_TIER = new SimpleToolTier(
3072,
10.5F,
0.0F,
Tiers.NETHERITE.getIncorrectBlocksForDrops(),
25,
AntarchyNeoforgeItems::ultimateRepairIngredient
);
public static final Tier BLOOD_CRYSTAL_KATANA_TIER = new SimpleToolTier(
1200,
8.0F,
0.0F,
Tiers.DIAMOND.getIncorrectBlocksForDrops(),
18,
AntarchyNeoforgeItems::bloodCrystalRepairIngredient
);
public static final DeferredItem<Item> NIGHTMARE_SCALE = ITEMS.registerSimpleItem("nightmare_scale", new Item.Properties().rarity(Rarity.RARE).fireResistant());
private static final DeferredHolder<ArmorMaterial, ArmorMaterial> ULTIMATE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("ultimate",
() -> new ArmorMaterial(
createUltimateArmorDefense(),
10,
SoundEvents.ARMOR_EQUIP_DIAMOND,
AntarchyNeoforgeItems::ultimateRepairIngredient,
List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ultimate_armor"))),
2.0F,
(float) AntarchySettings.ultimateArmorKnockbackResistance()
));
private static final DeferredHolder<ArmorMaterial, ArmorMaterial> NIGHTMARE_ARMOR_MATERIAL = ARMOR_MATERIALS.register("nightmare",
() -> new ArmorMaterial(
createNightmareArmorDefense(),
10,
SoundEvents.ARMOR_EQUIP_NETHERITE,
() -> Ingredient.of(NIGHTMARE_SCALE.get()),
List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "nightmare_armor"))),
3.0F,
(float) AntarchySettings.nightmareArmorKnockbackResistance()
));
private static final DeferredHolder<ArmorMaterial, ArmorMaterial> BLOOD_CRYSTAL_ARMOR_MATERIAL = ARMOR_MATERIALS.register("blood_crystal",
() -> new ArmorMaterial(
createBloodCrystalArmorDefense(),
30,
SoundEvents.ARMOR_EQUIP_DIAMOND,
AntarchyNeoforgeItems::bloodCrystalRepairIngredient,
List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal"))),
0.0F,
0.0F
));
private static final DeferredHolder<ArmorMaterial, ArmorMaterial> MOGGLES_ARMOR_MATERIAL = ARMOR_MATERIALS.register("moggles",
() -> new ArmorMaterial(
createMogglesArmorDefense(),
12,
SoundEvents.ARMOR_EQUIP_GOLD,
() -> Ingredient.of(Items.GOLD_INGOT),
List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moggles"))),
0.0F,
0.0F
));
private static final DeferredHolder<ArmorMaterial, ArmorMaterial> FALLEN_KING_CROWN_ARMOR_MATERIAL = ARMOR_MATERIALS.register("fallen_king_crown",
() -> new ArmorMaterial(
createFallenKingCrownDefense(),
25,
SoundEvents.ARMOR_EQUIP_GOLD,
() -> Ingredient.of(Items.GOLD_INGOT),
List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "fallen_king_crown"))),
0.0F,
0.0F
));
// Block items
public static final DeferredItem<net.minecraft.world.item.BlockItem> DUPLICATOR_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DUPLICATOR_LOG);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_LOG);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_WOOD);
public static final DeferredItem<net.minecraft.world.item.BlockItem> MOSSY_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_LOG);
public static final DeferredItem<net.minecraft.world.item.BlockItem> MOSSY_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD);
public static final DeferredItem<net.minecraft.world.item.BlockItem> STRIPPED_OURANWOOD_LOG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_OURANWOOD_LOG);
public static final DeferredItem<net.minecraft.world.item.BlockItem> STRIPPED_OURANWOOD_WOOD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.STRIPPED_OURANWOOD_WOOD);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_PLANKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_PLANKS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_STAIRS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_SLAB);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_FENCE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_FENCE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_FENCE_GATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_FENCE_GATE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_DOOR);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_TRAPDOOR);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_PRESSURE_PLATE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_PRESSURE_PLATE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_BUTTON);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_LEAVES);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK);
public static final DeferredItem<net.minecraft.world.item.BlockItem> ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ORANGE_MILKWEED);
public static final DeferredItem<net.minecraft.world.item.BlockItem> PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PINK_MILKWEED);
public static final DeferredItem<net.minecraft.world.item.BlockItem> TORCHFLOWER_BUSH_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TORCHFLOWER_BUSH);
public static final DeferredItem<net.minecraft.world.item.SignItem> OURANWOOD_SIGN_ITEM = ITEMS.register("ouranwood_sign",
() -> new net.minecraft.world.item.SignItem(new Item.Properties().stacksTo(16), AntarchyNeoforgeBlocks.OURANWOOD_SIGN.get(), AntarchyNeoforgeBlocks.OURANWOOD_WALL_SIGN.get()));
public static final DeferredItem<net.minecraft.world.item.HangingSignItem> OURANWOOD_HANGING_SIGN_ITEM = ITEMS.register("ouranwood_hanging_sign",
() -> new net.minecraft.world.item.HangingSignItem(AntarchyNeoforgeBlocks.OURANWOOD_HANGING_SIGN.get(), AntarchyNeoforgeBlocks.OURANWOOD_WALL_HANGING_SIGN.get(), new Item.Properties().stacksTo(16)));
public static final DeferredItem<Item> OURANWOOD_BOAT = ITEMS.register("ouranwood_boat",
() -> new OuranwoodBoatOnlyItem(AntarchyNeoforgeEntites.OURANWOOD_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1)));
public static final DeferredItem<Item> OURANWOOD_CHEST_BOAT = ITEMS.register("ouranwood_chest_boat",
() -> new OuranwoodChestBoatItem(AntarchyNeoforgeEntites.OURANWOOD_CHEST_BOAT_ENTITY.get(), new Item.Properties().stacksTo(1)));
public static final DeferredItem<net.minecraft.world.item.BlockItem> DUPLICATOR_SAPLING_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING);
public static final DeferredItem<net.minecraft.world.item.BlockItem> RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RED_ANT_NEST);
public static final DeferredItem<net.minecraft.world.item.BlockItem> BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROWN_ANT_NEST);
public static final DeferredItem<net.minecraft.world.item.BlockItem> RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RAINBOW_ANT_NEST);
public static final DeferredItem<net.minecraft.world.item.BlockItem> URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_ORE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEEPSLATE_URANIUM_ORE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_ORE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DEEPSLATE_TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEEPSLATE_TITANIUM_ORE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_BLOCK);
public static final DeferredItem<net.minecraft.world.item.BlockItem> TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_BLOCK);
public static final DeferredItem<net.minecraft.world.item.BlockItem> RAW_URANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RAW_URANIUM_BLOCK);
public static final DeferredItem<net.minecraft.world.item.BlockItem> RAW_TITANIUM_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RAW_TITANIUM_BLOCK);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CUT_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_URANIUM);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CUT_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_TITANIUM);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CUT_URANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_URANIUM_SLAB);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CUT_TITANIUM_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_TITANIUM_SLAB);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CUT_URANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_URANIUM_STAIRS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CUT_TITANIUM_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_TITANIUM_STAIRS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CHISELED_URANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_URANIUM);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CHISELED_TITANIUM_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_TITANIUM);
public static final DeferredItem<net.minecraft.world.item.BlockItem> URANIUM_BULB_ITEM = ITEMS.register("uranium_bulb",
() -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyNeoforgeBlocks.URANIUM_BULB.get(), new Item.Properties()));
public static final DeferredItem<net.minecraft.world.item.BlockItem> TITANIUM_BULB_ITEM = ITEMS.register("titanium_bulb",
() -> new com.craisinlord.antarchy.content.item.SignalSavingBulbItem(AntarchyNeoforgeBlocks.TITANIUM_BULB.get(), new Item.Properties()));
public static final DeferredItem<net.minecraft.world.item.BlockItem> URANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_DOOR);
public static final DeferredItem<net.minecraft.world.item.BlockItem> TITANIUM_DOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_DOOR);
public static final DeferredItem<net.minecraft.world.item.BlockItem> URANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_TRAPDOOR);
public static final DeferredItem<net.minecraft.world.item.BlockItem> TITANIUM_TRAPDOOR_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_TRAPDOOR);
public static final DeferredItem<net.minecraft.world.item.BlockItem> URANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_BARS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> TITANIUM_BARS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_BARS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> ANTIMETAL_ITEM = ITEMS.register("antimetal",
() -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.ANTIMETAL.get(), new Item.Properties()));
public static final DeferredItem<net.minecraft.world.item.BlockItem> POLISHED_ANTIMETAL_ITEM = ITEMS.register("polished_antimetal",
() -> new AntimetalBlockItem(AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL.get(), new Item.Properties()));
public static final DeferredItem<net.minecraft.world.item.BlockItem> ANTIMETAL_SCAFFOLDING_ITEM = ITEMS.register("antimetal_scaffolding",
() -> new AntimetalScaffoldingItem(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), new Item.Properties()));
public static final DeferredItem<net.minecraft.world.item.BlockItem> SMALL_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMALL_BLOOD_CRYSTAL_BUD);
public static final DeferredItem<net.minecraft.world.item.BlockItem> MEDIUM_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MEDIUM_BLOOD_CRYSTAL_BUD);
public static final DeferredItem<net.minecraft.world.item.BlockItem> LARGE_BLOOD_CRYSTAL_BUD_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LARGE_BLOOD_CRYSTAL_BUD);
public static final DeferredItem<net.minecraft.world.item.BlockItem> BUDDING_BLOOD_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BUDDING_BLOOD_CRYSTAL);
public static final DeferredItem<net.minecraft.world.item.BlockItem> BLOOD_CRYSTAL_ITEM = ITEMS.register("blood_crystal_block",
() -> new net.minecraft.world.item.BlockItem(AntarchyNeoforgeBlocks.BLOOD_CRYSTAL.get(), new Item.Properties()));
public static final DeferredItem<net.minecraft.world.item.BlockItem> BLOOD_CRYSTAL_CRYSTAL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BLOOD_CRYSTAL_CRYSTAL);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DREAM_SAND_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_SAND);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_SANDSTONE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CHISELED_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_DREAM_SANDSTONE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CUT_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_DREAM_SANDSTONE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> SMOOTH_DREAM_SANDSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMOOTH_DREAM_SANDSTONE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_SANDSTONE_STAIRS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_SANDSTONE_SLAB);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DREAM_SANDSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_SANDSTONE_WALL);
public static final DeferredItem<net.minecraft.world.item.BlockItem> SMOOTH_DREAM_SANDSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMOOTH_DREAM_SANDSTONE_STAIRS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> SMOOTH_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SMOOTH_DREAM_SANDSTONE_SLAB);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CUT_DREAM_SANDSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CUT_DREAM_SANDSTONE_SLAB);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DUCT_TAPE_ITEM = ITEMS.register("duct_tape",
() -> new DuctTapeBlockItem(AntarchyNeoforgeBlocks.DUCT_TAPE.get(), new Item.Properties().stacksTo(1)));
public static final DeferredItem<net.minecraft.world.item.BlockItem> INFESTED_ROOTED_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.INFESTED_ROOTED_DIRT);
public static final DeferredItem<net.minecraft.world.item.BlockItem> INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.INFESTED_COARSE_DIRT);
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_NYXITE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICKS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_STAIRS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_SLAB);
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_WALL);
public static final DeferredItem<net.minecraft.world.item.BlockItem> POLISHED_NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE_STAIRS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> POLISHED_NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE_SLAB);
public static final DeferredItem<net.minecraft.world.item.BlockItem> POLISHED_NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE_WALL);
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICK_STAIRS);
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICK_SLAB);
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICK_WALL);
public static final DeferredItem<net.minecraft.world.item.BlockItem> TRIFFID_GOO_BLOCK_ITEM = ITEMS.register("triffid_goo_block",
() -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties()));
public static final DeferredItem<net.minecraft.world.item.BlockItem> PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PALE_NYXITE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_SPIKE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POTENT_NYXITE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK);
public static final DeferredItem<net.minecraft.world.item.BlockItem> UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET);
public static final DeferredItem<StandingAndWallBlockItem> DREAM_TORCH_ITEM = ITEMS.register("dream_torch",
() -> new StandingAndWallBlockItem(AntarchyNeoforgeBlocks.DREAM_TORCH.get(), AntarchyNeoforgeBlocks.DREAM_WALL_TORCH.get(), new Item.Properties(), net.minecraft.core.Direction.UP));
public static final DeferredItem<net.minecraft.world.item.BlockItem> DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_LANTERN);
public static final DeferredItem<net.minecraft.world.item.BlockItem> DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_CAMPFIRE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BED_BUG_EGG);
public static final DeferredItem<net.minecraft.world.item.BlockItem> WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.WASP_NEST);
public static final DeferredItem<net.minecraft.world.item.BlockItem> HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.HUSHWEED);
public static final DeferredItem<BucketItem> ICHOR_BUCKET = ITEMS.register("ichor_bucket",
() -> new BucketItem(AntarchyNeoforgeMisc.ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1)));
public static final DeferredItem<BucketItem> ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket",
() -> new BucketItem(AntarchyNeoforgeMisc.ANTIWATER.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1)));
public static final DeferredItem<com.craisinlord.antarchy.content.item.CloudBucketItem> CLOUD_BUCKET = ITEMS.register("cloud_bucket",
() -> new com.craisinlord.antarchy.content.item.CloudBucketItem(AntarchyNeoforgeBlocks.CLOUD_BLOCK.get(), new Item.Properties().craftRemainder(Items.BUCKET)));
public static final DeferredItem<BloodCrystalShardItem> BLOOD_CRYSTAL_SHARD = ITEMS.register("blood_crystal_shard",
() -> new BloodCrystalShardItem(new Item.Properties()));
public static final DeferredItem<Item> BLOOD_CRYSTAL_APPLE = ITEMS.register("blood_crystal_apple",
() -> new BloodCrystalAppleItem(new Item.Properties()
.rarity(Rarity.RARE)
.food(new FoodProperties.Builder()
.nutrition(4)
.saturationModifier(1.2f)
.effect(() -> new MobEffectInstance(net.minecraft.world.effect.MobEffects.REGENERATION, 100, 1), 1.0f)
.alwaysEdible()
.build())));
public static final DeferredItem<BloodCrystalArmorItem> BLOOD_CRYSTAL_HELMET = ITEMS.register("blood_crystal_helmet",
() -> new BloodCrystalArmorItem(BLOOD_CRYSTAL_ARMOR_MATERIAL, ArmorItem.Type.HELMET, new Item.Properties().rarity(Rarity.RARE)));
public static final DeferredItem<BloodCrystalArmorItem> BLOOD_CRYSTAL_CHESTPLATE = ITEMS.register("blood_crystal_chestplate",
() -> new BloodCrystalArmorItem(BLOOD_CRYSTAL_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, new Item.Properties().rarity(Rarity.RARE)));
public static final DeferredItem<BloodCrystalArmorItem> BLOOD_CRYSTAL_LEGGINGS = ITEMS.register("blood_crystal_leggings",
() -> new BloodCrystalArmorItem(BLOOD_CRYSTAL_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS, new Item.Properties().rarity(Rarity.RARE)));
public static final DeferredItem<BloodCrystalArmorItem> BLOOD_CRYSTAL_BOOTS = ITEMS.register("blood_crystal_boots",
() -> new BloodCrystalArmorItem(BLOOD_CRYSTAL_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().rarity(Rarity.RARE)));
public static final DeferredItem<BloodCrystalKatanaItem> BLOOD_CRYSTAL_KATANA = ITEMS.register("blood_crystal_katana",
() -> new BloodCrystalKatanaItem(
BLOOD_CRYSTAL_KATANA_TIER,
new Item.Properties().stacksTo(1).durability(1200).rarity(Rarity.RARE),
AntarchySettings.bloodCrystalKatanaAttackDamage(),
-2.2F
));
public static final DeferredItem<Item> MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<Item> JUMPY_BUG_LEG = ITEMS.register("jumpy_bug_leg",
() -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON)));
public static final DeferredItem<Item> BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<BrutalflyElytraItem> BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra",
() -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480)));
public static final DeferredItem<Item> CORNEA_EAR = ITEMS.register("cornea_ear",
() -> new CorneaEarItem(new Item.Properties()
.rarity(Rarity.UNCOMMON)
.food(new FoodProperties.Builder()
.nutrition(2)
.saturationModifier(0.4F)
.build())));
public static final DeferredItem<Item> PRIMORDIAL_SCUTE = ITEMS.register("primordial_scute",
() -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON)));
public static final DeferredItem<Item> TRIFFID_GOO = ITEMS.registerSimpleItem("triffid_goo",
new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<Item> VORTEX_EYE = ITEMS.register("vortex_eye",
() -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE)));
public static final DeferredItem<Item> RAW_URANIUM_SCRAP = ITEMS.registerSimpleItem("raw_uranium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<Item> RAW_TITANIUM_SCRAP = ITEMS.registerSimpleItem("raw_titanium_scrap", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<Item> RAW_URANIUM = ITEMS.registerSimpleItem("raw_uranium", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<Item> RAW_TITANIUM = ITEMS.registerSimpleItem("raw_titanium", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<Item> MUD_PIE = ITEMS.register("mud_pie",
() -> new Item(new Item.Properties()
.food(new FoodProperties.Builder()
.nutrition(10)
.saturationModifier(0.9F)
.effect(() -> new MobEffectInstance(MobEffects.CONFUSION, 200), 1.0F)
.build())));
public static final DeferredItem<RainbowSugarItem> RAINBOW_SUGAR = ITEMS.register("rainbow_sugar",
() -> new RainbowSugarItem(new Item.Properties()
.rarity(Rarity.UNCOMMON)
.food(new FoodProperties.Builder().nutrition(1).saturationModifier(0.0F).alwaysEdible().build())));
public static final DeferredItem<Item> URANIUM_NUGGET = ITEMS.registerSimpleItem("uranium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<Item> TITANIUM_NUGGET = ITEMS.registerSimpleItem("titanium_nugget", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<Item> URANIUM_INGOT = ITEMS.registerSimpleItem("uranium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant());
public static final DeferredItem<Item> TITANIUM_INGOT = ITEMS.registerSimpleItem("titanium_ingot", new Item.Properties().rarity(Rarity.UNCOMMON).fireResistant());
public static final DeferredItem<Item> MOLEVORE_NOSE = ITEMS.registerSimpleItem("molevore_nose", new Item.Properties().rarity(Rarity.RARE));
public static final DeferredItem<Item> MOLEWORM_ITEM = ITEMS.register("moleworm",
() -> new Item(new Item.Properties()
.food(new FoodProperties.Builder()
.nutrition(1)
.saturationModifier(0.0F)
.effect(() -> new MobEffectInstance(MobEffects.HUNGER, 600), 0.8F)
.build())));
public static final DeferredItem<Item> CLOUD_SHARK_FIN = ITEMS.registerSimpleItem("cloud_shark_fin", new Item.Properties().rarity(Rarity.UNCOMMON));
public static final DeferredItem<CloudSharkFinSoupItem> CLOUD_SHARK_FIN_SOUP = ITEMS.register("cloud_shark_fin_soup",
() -> new CloudSharkFinSoupItem(new Item.Properties()
.stacksTo(1)
.craftRemainder(Items.BOWL)
.food(new FoodProperties.Builder()
.nutrition(10)
.saturationModifier(0.8F)
.effect(() -> new MobEffectInstance(MobEffects.DAMAGE_BOOST, 600, 0), 1.0F)
.effect(() -> new MobEffectInstance(MobEffects.SLOW_FALLING, 600, 0), 1.0F)
.build())));
public static final DeferredItem<Item> KRAKEN_TOOTH = ITEMS.register("kraken_tooth",
() -> new Item(new Item.Properties().rarity(Rarity.RARE)));
public static final DeferredItem<Item> BASILISK_FANG = ITEMS.registerSimpleItem("basilisk_fang", new Item.Properties().rarity(Rarity.RARE));
public static final DeferredItem<BasiliskDaggerItem> BASILISK_DAGGER = ITEMS.register("basilisk_dagger",
() -> new BasiliskDaggerItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE), 4, -1.8F));
public static final DeferredItem<Item> EMPEROR_SCORPION_STINGER = ITEMS.registerSimpleItem("emperor_scorpion_stinger", new Item.Properties().rarity(Rarity.RARE));
public static final DeferredItem<ScorpionWhipItem> SCORPION_WHIP = ITEMS.register("scorpion_whip",
() -> new ScorpionWhipItem(Tiers.IRON, new Item.Properties().rarity(Rarity.RARE).durability(384)));
public static final DeferredItem<MogglesItem> MOGGLES = ITEMS.register("moggles",
() -> new MogglesItem(MOGGLES_ARMOR_MATERIAL, new Item.Properties().rarity(Rarity.RARE).stacksTo(1)));
public static final DeferredItem<com.craisinlord.antarchy.content.item.FallenKingCrownItem> FALLEN_KING_CROWN = ITEMS.register("fallen_king_crown",
() -> new com.craisinlord.antarchy.content.item.FallenKingCrownItem(
FALLEN_KING_CROWN_ARMOR_MATERIAL,
new Item.Properties().rarity(Rarity.RARE)
));
public static final DeferredItem<ArmorItem> ULTIMATE_HELMET = ITEMS.register("ultimate_helmet",
() -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.HELMET,
new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.HELMET.getDurability(41))));
public static final DeferredItem<ArmorItem> ULTIMATE_CHESTPLATE = ITEMS.register("ultimate_chestplate",
() -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE,
new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.CHESTPLATE.getDurability(41))));
public static final DeferredItem<ArmorItem> ULTIMATE_LEGGINGS = ITEMS.register("ultimate_leggings",
() -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS,
new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.LEGGINGS.getDurability(41))));
public static final DeferredItem<ArmorItem> ULTIMATE_BOOTS = ITEMS.register("ultimate_boots",
() -> new UltimateArmorItem(ULTIMATE_ARMOR_MATERIAL, ArmorItem.Type.BOOTS,
new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(41))));
public static final DeferredItem<UltimateSwordItem> ULTIMATE_SWORD = ITEMS.register("ultimate_sword",
() -> new UltimateSwordItem(ULTIMATE_TIER,
new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(),
AntarchySettings::ultimateSwordAttackDamage, -2.4F));
public static final DeferredItem<UltimatePickaxeItem> ULTIMATE_PICKAXE = ITEMS.register("ultimate_pickaxe",
() -> new UltimatePickaxeItem(ULTIMATE_TIER,
new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(),
AntarchySettings::ultimatePickaxeAttackDamage, -2.8F));
public static final DeferredItem<UltimateAxeItem> ULTIMATE_AXE = ITEMS.register("ultimate_axe",
() -> new UltimateAxeItem(ULTIMATE_TIER,
new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(),
AntarchySettings::ultimateAxeAttackDamage, -3.0F));
public static final DeferredItem<UtlimateShovelItem> ULTIMATE_SHOVEL = ITEMS.register("ultimate_shovel",
() -> new UtlimateShovelItem(ULTIMATE_TIER,
new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(),
AntarchySettings::ultimateShovelAttackDamage, -3.0F));
public static final DeferredItem<UltimateHoeItem> ULTIMATE_HOE = ITEMS.register("ultimate_hoe",
() -> new UltimateHoeItem(ULTIMATE_TIER,
new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(),
AntarchySettings::ultimateHoeAttackDamage, 0.0F));
public static final DeferredItem<UltimateBowItem> ULTIMATE_BOW = ITEMS.register("ultimate_bow",
() -> new UltimateBowItem(new Item.Properties().stacksTo(1).durability(768).rarity(Rarity.EPIC).fireResistant()));
public static final DeferredItem<UltimateCrossbowItem> ULTIMATE_CROSSBOW = ITEMS.register("ultimate_crossbow",
() -> new UltimateCrossbowItem(new Item.Properties().stacksTo(1).durability(1024).rarity(Rarity.EPIC).fireResistant()));
public static final DeferredItem<NightmareArmorItem> NIGHTMARE_HELMET = ITEMS.register("nightmare_helmet",
() -> new NightmareArmorItem(NIGHTMARE_ARMOR_MATERIAL, ArmorItem.Type.HELMET,
new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.HELMET.getDurability(41))));
public static final DeferredItem<NightmareArmorItem> NIGHTMARE_CHESTPLATE = ITEMS.register("nightmare_chestplate",
() -> new NightmareArmorItem(NIGHTMARE_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE,
new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.CHESTPLATE.getDurability(41))));
public static final DeferredItem<NightmareArmorItem> NIGHTMARE_LEGGINGS = ITEMS.register("nightmare_leggings",
() -> new NightmareArmorItem(NIGHTMARE_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS,
new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.LEGGINGS.getDurability(41))));
public static final DeferredItem<NightmareArmorItem> NIGHTMARE_BOOTS = ITEMS.register("nightmare_boots",
() -> new NightmareArmorItem(NIGHTMARE_ARMOR_MATERIAL, ArmorItem.Type.BOOTS,
new Item.Properties().rarity(Rarity.EPIC).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(41))));
public static final DeferredItem<NightmareSwordItem> NIGHTMARE_SWORD = ITEMS.register("nightmare_sword",
() -> new NightmareSwordItem(ULTIMATE_TIER,
new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant(), -2.4F));
public static final DeferredItem<SizeRayItem> SHRINK_RAY = ITEMS.register("shrink_ray",
() -> new SizeRayItem(
new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(),
AntarchyNeoforgeEntites.SHRINK_RAY_PROJECTILE,
SizeRayProjectileEntity.SizeRayType.SHRINK,
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/shrink_ray.geo.json"),
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/models/item/shrink_ray.png"),
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/shrink_ray.animation.json"),
"shrink_ray_active"
));
public static final DeferredItem<SizeRayItem> GROWTH_RAY = ITEMS.register("growth_ray",
() -> new SizeRayItem(
new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant(),
AntarchyNeoforgeEntites.GROWTH_RAY_PROJECTILE,
SizeRayProjectileEntity.SizeRayType.GROWTH,
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/growth_ray.geo.json"),
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/models/item/growth_ray.png"),
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/growth_ray.animation.json"),
"growth_ray_active"
));
public static final DeferredItem<GravityGunItem> GRAVITY_GUN = ITEMS.register("gravity_gun",
() -> new GravityGunItem(new Item.Properties().stacksTo(1).durability(512).rarity(Rarity.RARE).fireResistant()));
public static final DeferredItem<SquidzookaItem> SQUIDZOOKA = ITEMS.register("squidzooka",
() -> new SquidzookaItem(new Item.Properties().stacksTo(1).durability(384).rarity(Rarity.RARE)));
public static final DeferredItem<BattleAxeItem> BATTLE_AXE = ITEMS.register("battle_axe",
() -> new BattleAxeItem(Tiers.NETHERITE,
new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant(),
AntarchySettings::battleAxeAttackDamage, -3.1F));
public static final DeferredItem<DiamondMinecartItem> DIAMOND_MINECART_ITEM = ITEMS.register("diamond_minecart",
() -> new DiamondMinecartItem(AntarchyNeoforgeEntites.DIAMOND_MINECART, new Item.Properties().stacksTo(1).rarity(Rarity.RARE)));
public static final DeferredItem<ReverieBottleItem> REVERIE_BOTTLE = ITEMS.register("reverie_bottle",
() -> new ReverieBottleItem(new Item.Properties().stacksTo(1).rarity(Rarity.RARE)));
public static final DeferredItem<Item> BIG_BERTHA_BLADE = ITEMS.registerSimpleItem("big_bertha_blade",
new Item.Properties().rarity(Rarity.EPIC).fireResistant());
public static final DeferredItem<Item> BIG_BERTHA_HANDLE = ITEMS.registerSimpleItem("big_bertha_handle",
new Item.Properties().rarity(Rarity.EPIC).fireResistant());
public static final DeferredItem<Item> BIG_BERTHA_HILT = ITEMS.registerSimpleItem("big_bertha_hilt",
new Item.Properties().rarity(Rarity.EPIC).fireResistant());
public static final DeferredItem<BigBerthaItem> BIG_BERTHA = ITEMS.register("big_bertha",
() -> new BigBerthaItem(Tiers.NETHERITE,
new Item.Properties().stacksTo(1).rarity(Rarity.EPIC).fireResistant()));
// Spawn eggs
public static final DeferredItem<DeferredSpawnEggItem> EASTER_BUNNY_SPAWN_EGG = ITEMS.register("easter_bunny_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.EASTER_BUNNY, 0xFFF2B2, 0xFF85B5, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> FLYING_SQUIRREL_SPAWN_EGG = ITEMS.register("flying_squirrel_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.FLYING_SQUIRREL, 0x7D6649, 0xDCC59C, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.CATERPILLAR, 0xA8D96A, 0xF4E04D, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BUTTERFLY, 0x111111, 0xFF7A00, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> REVERIE_SPAWN_EGG = ITEMS.register("reverie_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BRUTALFLY, 0x4A2214, 0xFF8A1D, new Item.Properties().rarity(Rarity.EPIC)));
public static final DeferredItem<DeferredSpawnEggItem> RED_ANT_SPAWN_EGG = ITEMS.register("red_ant_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.RED_ANT, 0xA31818, 0x2B0909, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> BROWN_ANT_SPAWN_EGG = ITEMS.register("brown_ant_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BROWN_ANT, 0x6A4320, 0x26160A, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MANTIS, 0xF8F8F2, 0x63B44A, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> MOLEVORE_SPAWN_EGG = ITEMS.register("molevore_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEVORE, 0x3E2E24, 0xB67B4F, new Item.Properties().rarity(Rarity.UNCOMMON)));
public static final DeferredItem<DeferredSpawnEggItem> TRIFFID_SPAWN_EGG = ITEMS.register("triffid_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.TRIFFID, 0x4C8F3A, 0xFF2FB3, new Item.Properties().rarity(Rarity.UNCOMMON)));
public static final DeferredItem<DeferredSpawnEggItem> APPLE_COW_SPAWN_EGG = ITEMS.register("apple_cow_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.APPLE_COW, 0xFF1A1A, 0x32FF32, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("golden_apple_cow_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.GOLDEN_APPLE_COW, 0xFFE14A, 0x32FF32, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> ENCHANTED_GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("enchanted_golden_apple_cow_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.ENCHANTED_GOLDEN_APPLE_COW, 0x7040B6, 0xFFE14A, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> DR_TRAYAURUS_SPAWN_EGG = ITEMS.register("dr_trayaurus_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.DR_TRAYAURUS, 0xB7A27B, 0x4A3D29, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> WASP_SPAWN_EGG = ITEMS.register("wasp_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.WASP, 0x111111, 0xF1D800, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC)));
public static final DeferredItem<DeferredSpawnEggItem> MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MISSILE_SQUID, 0xD88FA7, 0x8D5269, new Item.Properties().rarity(Rarity.UNCOMMON)));
public static final DeferredItem<DeferredSpawnEggItem> NIGHTMARE_SPAWN_EGG = ITEMS.register("nightmare_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.NIGHTMARE, 0x22121C, 0xB51B2D, new Item.Properties().rarity(Rarity.RARE)));
public static final DeferredItem<DeferredSpawnEggItem> BED_BUG_SPAWN_EGG = ITEMS.register("bed_bug_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BED_BUG, 0x3B2218, 0x611111, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> LUCID_SPAWN_EGG = ITEMS.register("lucid_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.LUCID, 0xE53935, 0xF4D03F, new Item.Properties().rarity(Rarity.RARE)));
public static final DeferredItem<DeferredSpawnEggItem> SCORPION_SPAWN_EGG = ITEMS.register("scorpion_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.SCORPION, 0xA8D8FF, 0xE04B5A, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> BASILISK_SPAWN_EGG = ITEMS.register("basilisk_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BASILISK, 0x4A7C40, 0xD4A040, new Item.Properties()));
public static final DeferredItem<DeferredSpawnEggItem> EMPEROR_SCORPION_SPAWN_EGG = ITEMS.register("emperor_scorpion_spawn_egg",
() -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.EMPEROR_SCORPION, 0x1A1A0A, 0x8B2200, new Item.Properties()));
public static final DeferredItem<LucidEyeItem> LUCID_EYE = ITEMS.register("lucid_eye",
() -> new LucidEyeItem(new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON)));
public static final DeferredItem<LucidPearlItem> LUCID_PEARL = ITEMS.register("lucid_pearl",
() -> new LucidPearlItem(
new Item.Properties().stacksTo(16).rarity(Rarity.UNCOMMON),
AntarchyNeoforgeEntites.LUCID_PEARL_PROJECTILE
));
private AntarchyNeoforgeItems() {}
public static Collection<DeferredHolder<Item,? extends Item>> getItemEntries() {
return ITEMS.getEntries();
}
public static void register(IEventBus modEventBus) {
ITEMS.register(modEventBus);
ARMOR_MATERIALS.register(modEventBus);
}
static Item cloudBucketItem() {
return CLOUD_BUCKET.get();
}
static Item diamondMinecartItem() {
return DIAMOND_MINECART_ITEM.get();
}
static BlockEntityType<PotentNyxiteBlockEntity> potentNyxiteBlockEntityType() {
return AntarchyNeoforgeBlocks.POTENT_NYXITE_BLOCK_ENTITY.get();
}
static BlockEntityType<AntNestBlockEntity> antNestBlockEntityType() {
return AntarchyNeoforgeBlocks.ANT_NEST_BLOCK_ENTITY.get();
}
static BlockEntityType<WaspNestBlockEntity> waspNestBlockEntityType() {
return AntarchyNeoforgeBlocks.WASP_NEST_BLOCK_ENTITY.get();
}
static Ingredient ultimateRepairIngredient() {
return Ingredient.of(TITANIUM_INGOT.get());
}
static Ingredient bloodCrystalRepairIngredient() {
return Ingredient.of(BuiltInRegistries.ITEM.getOptional(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "blood_crystal_shard"))
.orElse(Items.AIR));
}
private static EnumMap<ArmorItem.Type, Integer> createUltimateArmorDefense() {
EnumMap<ArmorItem.Type, Integer> defense = new EnumMap<>(ArmorItem.Type.class);
defense.put(ArmorItem.Type.BOOTS, 6);
defense.put(ArmorItem.Type.LEGGINGS, 12);
defense.put(ArmorItem.Type.CHESTPLATE, 16);
defense.put(ArmorItem.Type.HELMET, 6);
defense.put(ArmorItem.Type.BODY, 16);
return defense;
}
private static EnumMap<ArmorItem.Type, Integer> createNightmareArmorDefense() {
EnumMap<ArmorItem.Type, Integer> defense = new EnumMap<>(ArmorItem.Type.class);
defense.put(ArmorItem.Type.BOOTS, 4);
defense.put(ArmorItem.Type.LEGGINGS, 9);
defense.put(ArmorItem.Type.CHESTPLATE, 11);
defense.put(ArmorItem.Type.HELMET, 4);
defense.put(ArmorItem.Type.BODY, 11);
return defense;
}
private static EnumMap<ArmorItem.Type, Integer> createBloodCrystalArmorDefense() {
EnumMap<ArmorItem.Type, Integer> defense = new EnumMap<>(ArmorItem.Type.class);
defense.put(ArmorItem.Type.BOOTS, 2);
defense.put(ArmorItem.Type.LEGGINGS, 5);
defense.put(ArmorItem.Type.CHESTPLATE, 6);
defense.put(ArmorItem.Type.HELMET, 2);
defense.put(ArmorItem.Type.BODY, 6);
return defense;
}
private static EnumMap<ArmorItem.Type, Integer> createMogglesArmorDefense() {
EnumMap<ArmorItem.Type, Integer> defense = new EnumMap<>(ArmorItem.Type.class);
defense.put(ArmorItem.Type.BOOTS, 0);
defense.put(ArmorItem.Type.LEGGINGS, 0);
defense.put(ArmorItem.Type.CHESTPLATE, 0);
defense.put(ArmorItem.Type.HELMET, 2);
defense.put(ArmorItem.Type.BODY, 2);
return defense;
}
private static EnumMap<ArmorItem.Type, Integer> createFallenKingCrownDefense() {
EnumMap<ArmorItem.Type, Integer> defense = new EnumMap<>(ArmorItem.Type.class);
defense.put(ArmorItem.Type.BOOTS, 0);
defense.put(ArmorItem.Type.LEGGINGS, 0);
defense.put(ArmorItem.Type.CHESTPLATE, 0);
defense.put(ArmorItem.Type.HELMET, 2);
defense.put(ArmorItem.Type.BODY, 2);
return defense;
}
}
@@ -0,0 +1,294 @@
package com.craisinlord.antarchy.neoforge.registry;
import com.craisinlord.antarchy.Antarchy;
import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions;
import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions;
import com.craisinlord.antarchy.content.effect.DreadMobEffect;
import com.craisinlord.antarchy.content.effect.GrowthMobEffect;
import com.craisinlord.antarchy.content.effect.InvertedMobEffect;
import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect;
import com.craisinlord.antarchy.content.effect.ShrinkMobEffect;
import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature;
import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature;
import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature;
import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature;
import com.craisinlord.antarchy.content.worldgen.elythia.*;
import com.craisinlord.antarchy.content.worldgen.thoraxis.*;
import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluid;
import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType;
import com.mojang.serialization.MapCodec;
import net.minecraft.advancements.critereon.EntitySubPredicate;
import net.minecraft.core.particles.ParticleType;
import net.minecraft.core.particles.SimpleParticleType;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.damagesource.DamageType;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.item.alchemy.Potion;
import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.levelgen.DensityFunction;
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.SimpleBlockConfiguration;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.tags.TagKey;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.common.SoundActions;
import net.neoforged.neoforge.fluids.BaseFlowingFluid;
import net.neoforged.neoforge.fluids.FluidType;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import net.neoforged.neoforge.registries.NeoForgeRegistries;
import net.minecraft.sounds.SoundEvents;
import java.util.function.Function;
public final class AntarchyNeoforgeMisc {
private static final DeferredRegister<MobEffect> MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, Antarchy.MODID);
private static final DeferredRegister<Potion> POTIONS = DeferredRegister.create(Registries.POTION, Antarchy.MODID);
private static final DeferredRegister<FluidType> FLUID_TYPES = DeferredRegister.create(NeoForgeRegistries.Keys.FLUID_TYPES, Antarchy.MODID);
private static final DeferredRegister<Fluid> FLUIDS = DeferredRegister.create(Registries.FLUID, Antarchy.MODID);
private static final DeferredRegister<ParticleType<?>> PARTICLE_TYPES = DeferredRegister.create(Registries.PARTICLE_TYPE, Antarchy.MODID);
private static final DeferredRegister<Feature<?>> FEATURES = DeferredRegister.create(Registries.FEATURE, Antarchy.MODID);
private static final DeferredRegister<MapCodec<? extends BiomeSource>> BIOME_SOURCES = DeferredRegister.create(Registries.BIOME_SOURCE, Antarchy.MODID);
private static final DeferredRegister<MapCodec<? extends DensityFunction>> DENSITY_FUNCTION_TYPES = DeferredRegister.create(Registries.DENSITY_FUNCTION_TYPE, Antarchy.MODID);
private static final DeferredRegister<MapCodec<? extends EntitySubPredicate>> ENTITY_SUB_PREDICATES = DeferredRegister.create(Registries.ENTITY_SUB_PREDICATE_TYPE, Antarchy.MODID);
private static final DeferredRegister<Attribute> ATTRIBUTES = DeferredRegister.create(Registries.ATTRIBUTE, Antarchy.MODID);
// Attributes
public static final DeferredHolder<Attribute, Attribute> DOUBLE_DAMAGE_CHANCE = ATTRIBUTES.register(
"double_damage_chance",
() -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.double_damage_chance", 0.0, 0.0, 1.0).setSyncable(true)
);
public static final DeferredHolder<Attribute, Attribute> BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register(
"bloodglass_max_hearts",
() -> new net.minecraft.world.entity.ai.attributes.RangedAttribute("attribute.antarchy.bloodglass_max_hearts", 0.0, 0.0, 8.0).setSyncable(true)
);
// Mob effects
public static final DeferredHolder<MobEffect, DreadMobEffect> DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new);
public static final DeferredHolder<MobEffect, ParalyzedMobEffect> PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new);
public static final DeferredHolder<MobEffect, InvertedMobEffect> INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new);
public static final DeferredHolder<MobEffect, com.craisinlord.antarchy.content.effect.BloodglassWardEffect> BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new);
public static final DeferredHolder<MobEffect, ShrinkMobEffect> SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new);
public static final DeferredHolder<MobEffect, GrowthMobEffect> GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new);
// Potions
public static final DeferredHolder<Potion, Potion> INVERSION = POTIONS.register("inversion",
() -> new Potion(new MobEffectInstance(INVERTED, 600)));
public static final DeferredHolder<Potion, Potion> LONG_INVERSION = POTIONS.register("long_inversion",
() -> new Potion("inversion", new MobEffectInstance(INVERTED, 2400)));
public static final DeferredHolder<Potion, Potion> PARALYSIS = POTIONS.register("paralysis",
() -> new Potion(new MobEffectInstance(PARALYZED, 200)));
public static final DeferredHolder<Potion, Potion> LONG_PARALYSIS = POTIONS.register("long_paralysis",
() -> new Potion("paralysis", new MobEffectInstance(PARALYZED, 400)));
public static final DeferredHolder<Potion, Potion> HASTE = POTIONS.register("haste",
() -> new Potion(new MobEffectInstance(MobEffects.DIG_SPEED, 1200, 0)));
public static final DeferredHolder<Potion, Potion> STRONG_HASTE = POTIONS.register("strong_haste",
() -> new Potion("haste", new MobEffectInstance(MobEffects.DIG_SPEED, 600, 1)));
public static final DeferredHolder<Potion, Potion> SHRINKING = POTIONS.register("shrinking",
() -> new Potion(new MobEffectInstance(SHRINKING_EFFECT, 1200, 0)));
public static final DeferredHolder<Potion, Potion> STRONG_SHRINKING = POTIONS.register("strong_shrinking",
() -> new Potion("shrinking", new MobEffectInstance(SHRINKING_EFFECT, 900, 1)));
public static final DeferredHolder<Potion, Potion> EXTREME_SHRINKING = POTIONS.register("extreme_shrinking",
() -> new Potion("shrinking", new MobEffectInstance(SHRINKING_EFFECT, 600, 2)));
public static final DeferredHolder<Potion, Potion> GROWING = POTIONS.register("growing",
() -> new Potion(new MobEffectInstance(GROWTH_EFFECT, 1200, 0)));
public static final DeferredHolder<Potion, Potion> STRONG_GROWING = POTIONS.register("strong_growing",
() -> new Potion("growing", new MobEffectInstance(GROWTH_EFFECT, 900, 1)));
public static final DeferredHolder<Potion, Potion> EXTREME_GROWING = POTIONS.register("extreme_growing",
() -> new Potion("growing", new MobEffectInstance(GROWTH_EFFECT, 600, 2)));
// Fluid types
public static final DeferredHolder<FluidType, FluidType> ICHOR_TYPE = FLUID_TYPES.register("ichor",
() -> new FluidType(FluidType.Properties.create()
.descriptionId("block.antarchy.ichor")
.fallDistanceModifier(0.0F)
.supportsBoating(true)
.sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL)
.sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY)
.density(1200)
.viscosity(1400)));
public static final DeferredHolder<FluidType, FluidType> ANTIWATER_TYPE = FLUID_TYPES.register("antiwater",
() -> new AntiwaterFluidType(FluidType.Properties.create()
.descriptionId("block.antarchy.antiwater")
.fallDistanceModifier(0.0F)
.canSwim(true)
.supportsBoating(true)
.sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL)
.sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY)
.density(1000)
.viscosity(1000)));
// Fluids
public static final DeferredHolder<Fluid, Fluid> ICHOR = FLUIDS.register("ichor",
() -> new BaseFlowingFluid.Source(ichorProperties()));
public static final DeferredHolder<Fluid, Fluid> FLOWING_ICHOR = FLUIDS.register("flowing_ichor",
() -> new BaseFlowingFluid.Flowing(ichorProperties()));
public static final DeferredHolder<Fluid, Fluid> ANTIWATER = FLUIDS.register("antiwater",
() -> new AntiwaterFluid.Source(antiwaterProperties()));
public static final DeferredHolder<Fluid, Fluid> FLOWING_ANTIWATER = FLUIDS.register("flowing_antiwater",
() -> new AntiwaterFluid.Flowing(antiwaterProperties()));
// Particle types
public static final DeferredHolder<ParticleType<?>, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame",
() -> new SimpleParticleType(true));
public static final DeferredHolder<ParticleType<?>, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas",
() -> new SimpleParticleType(true));
public static final DeferredHolder<ParticleType<?>, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud",
() -> new SimpleParticleType(true));
public static final DeferredHolder<ParticleType<?>, SimpleParticleType> HYPNOTIC_GAS_DOWN = PARTICLE_TYPES.register("hypnotic_gas_down",
() -> new SimpleParticleType(true));
public static final DeferredHolder<ParticleType<?>, SimpleParticleType> HYPNOTIC_GAS_CLOUD_DOWN = PARTICLE_TYPES.register("hypnotic_gas_cloud_down",
() -> new SimpleParticleType(true));
public static final DeferredHolder<ParticleType<?>, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly",
() -> new SimpleParticleType(true));
public static final DeferredHolder<ParticleType<?>, ParticleType<InvertedGeyserBaseParticleOptions>> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base",
() -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec));
public static final DeferredHolder<ParticleType<?>, ParticleType<InvertedGeyserParticleOptions>> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume",
() -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec));
public static final DeferredHolder<ParticleType<?>, ParticleType<InvertedGeyserBaseParticleOptions>> INVERTED_GEYSER_POOF = PARTICLE_TYPES.register("inverted_geyser_poof",
() -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec));
public static final DeferredHolder<ParticleType<?>, ParticleType<InvertedGeyserParticleOptions>> INVERTED_GEYSER_ERUPTION = PARTICLE_TYPES.register("inverted_geyser_eruption",
() -> particleType(InvertedGeyserParticleOptions::codec, InvertedGeyserParticleOptions::streamCodec));
// Features
public static final DeferredHolder<Feature<?>, RedAntNestFeature> RED_ANT_NEST_FEATURE = FEATURES.register("red_ant_nest",
() -> new RedAntNestFeature(SimpleBlockConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, BrownAntNestFeature> BROWN_ANT_NEST_FEATURE = FEATURES.register("brown_ant_nest",
() -> new BrownAntNestFeature(SimpleBlockConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, RainbowAntNestFeature> RAINBOW_ANT_NEST_FEATURE = FEATURES.register("rainbow_ant_nest",
() -> new RainbowAntNestFeature(SimpleBlockConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, TermiteNestFeature> TERMITE_NEST_FEATURE = FEATURES.register("termite_nest",
() -> new TermiteNestFeature(SimpleBlockConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, OuranwoodTreeFeature> OURANWOOD_LARGE_TREE = FEATURES.register("ouranwood_large_tree",
() -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, OuranwoodTreeFeature> OURANWOOD_YOUNG_TREE = FEATURES.register("ouranwood_young_tree",
() -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, OuranwoodTreeFeature> OURANWOOD_MEDIUM_TREE = FEATURES.register("ouranwood_medium_tree",
() -> new OuranwoodTreeFeature(OuranwoodTreeConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, OuranwoodCocoonTreeFeature> OURANWOOD_COCOON_TREE = FEATURES.register("ouranwood_cocoon_tree",
() -> new OuranwoodCocoonTreeFeature(OuranwoodTreeConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ElythiaFloraFeature> ELYTHIA_FOREST_FLORA = FEATURES.register("elythia_forest_flora",
() -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FOREST));
public static final DeferredHolder<Feature<?>, ElythiaFloraFeature> ELYTHIA_MEADOW_FLORA = FEATURES.register("elythia_meadow_flora",
() -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.MEADOW));
public static final DeferredHolder<Feature<?>, ElythiaFloraFeature> FLOWER_FOREST_MILKWEED = FEATURES.register("flower_forest_milkweed",
() -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.FLOWER_FOREST_MILKWEED));
public static final DeferredHolder<Feature<?>, ElythiaFloraFeature> ELYTHIA_BUTTERFLY_FIELDS_FLORA = FEATURES.register("butterfly_fields_flora",
() -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.BUTTERFLY_FIELDS));
public static final DeferredHolder<Feature<?>, ElythiaFloraFeature> ELYTHIA_TORCHFLOWER_FIELDS_FLORA = FEATURES.register("elythia_torchflower_fields_flora",
() -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.TORCHFLOWER_FIELDS));
public static final DeferredHolder<Feature<?>, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover",
() -> new ElythiaSurfaceCoverFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ElythiaUndergroundFeature> ELYTHIA_UNDERGROUND = FEATURES.register("elythia_underground",
() -> new ElythiaUndergroundFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, BrutalflyCocoonFeature> BRUTALFLY_COCOON = FEATURES.register("brutalfly_cocoon",
() -> new BrutalflyCocoonFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, MolewormTunnelsFeature> ELYTHIA_MOLEWORM_TUNNELS = FEATURES.register("elythia_moleworm_tunnels",
() -> new MolewormTunnelsFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, MolewormCaveEntranceFeature> ELYTHIA_MOLEWORM_CAVE_ENTRANCES = FEATURES.register("elythia_moleworm_cave_entrances",
() -> new MolewormCaveEntranceFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, MolewormWarrensFeature> ELYTHIA_MOLEWORM_WARRENS = FEATURES.register("elythia_moleworm_warrens",
() -> new MolewormWarrensFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, MolewormSurfaceMoundsFeature> ELYTHIA_MOLEWORM_SURFACE_MOUNDS = FEATURES.register("elythia_moleworm_surface_mounds",
() -> new MolewormSurfaceMoundsFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, TriffidPatchFeature> TRIFFID_PATCH = FEATURES.register("triffid_patch",
() -> new TriffidPatchFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ElythiaPondFeature> ELYTHIA_POND = FEATURES.register("elythia_pond",
() -> new ElythiaPondFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ElythiaTuffBoulderFeature> ELYTHIA_TUFF_BOULDER = FEATURES.register("elythia_tuff_boulder",
() -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder",
() -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure",
() -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns",
() -> new ThoraxisRibColumnsFeature(ThoraxisRibColumnsConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ThoraxisSpikeFeature> THORAXIS_SPIKE = FEATURES.register("thoraxis_spike",
() -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes",
() -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, AntiwaterSpringsFeature> ANTIWATER_SPRINGS = FEATURES.register("antiwater_springs",
() -> new AntiwaterSpringsFeature(AntiwaterSpringsConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, PotentNyxiteFeature> POTENT_NYXITE_FEATURE = FEATURES.register("potent_nyxite",
() -> new PotentNyxiteFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ThoraxisBloodCrystalFeature> THORAXIS_BLOOD_CRYSTAL_SPIRES = FEATURES.register("thoraxis_blood_crystal_spires",
() -> new ThoraxisBloodCrystalFeature(ThoraxisBloodCrystalConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, CloudSeaCalciteFeature> CLOUD_SEA_CALCITE_BANKS = FEATURES.register("cloud_sea_calcite_banks",
() -> new CloudSeaCalciteFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, BedBugNestFeature> BED_BUG_NEST = FEATURES.register("bed_bug_nest",
() -> new BedBugNestFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, BedBugSurfaceClusterFeature> BED_BUG_SURFACE_CLUSTER = FEATURES.register("bed_bug_surface_cluster",
() -> new BedBugSurfaceClusterFeature(NoneFeatureConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ThoraxisAntiwaterPoolFeature> THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool",
() -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, LucidAntiwaterPoolFeature> LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool",
() -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC));
public static final DeferredHolder<Feature<?>, ThoraxisDuneFeature> THORAXIS_DUNE = FEATURES.register("thoraxis_dune",
() -> new ThoraxisDuneFeature(ThoraxisDuneConfiguration.CODEC));
// Biome sources
public static final DeferredHolder<MapCodec<? extends BiomeSource>, MapCodec<ElythiaBiomeSource>> ELYTHIA_BIOME_SOURCE = BIOME_SOURCES.register("elythia_biome_source",
() -> ElythiaBiomeSource.CODEC);
public static final DeferredHolder<MapCodec<? extends BiomeSource>, MapCodec<ThoraxisBiomeSource>> THORAXIS_BIOME_SOURCE = BIOME_SOURCES.register("thoraxis_biome_source",
() -> ThoraxisBiomeSource.CODEC);
// Density function
public static final DeferredHolder<MapCodec<? extends DensityFunction>, MapCodec<ElythiaRiverCarveFunction>> ELYTHIA_RIVER_CARVE = DENSITY_FUNCTION_TYPES.register("elythia_river_carve",
() -> ElythiaRiverCarveFunction.CODEC);
private AntarchyNeoforgeMisc() {}
public static void register(IEventBus modEventBus) {
MOB_EFFECTS.register(modEventBus);
POTIONS.register(modEventBus);
FLUID_TYPES.register(modEventBus);
FLUIDS.register(modEventBus);
PARTICLE_TYPES.register(modEventBus);
FEATURES.register(modEventBus);
BIOME_SOURCES.register(modEventBus);
DENSITY_FUNCTION_TYPES.register(modEventBus);
ENTITY_SUB_PREDICATES.register(modEventBus);
ATTRIBUTES.register(modEventBus);
}
static BaseFlowingFluid.Properties ichorProperties() {
return new BaseFlowingFluid.Properties(ICHOR_TYPE, ICHOR, FLOWING_ICHOR)
.bucket(() -> AntarchyNeoforgeItems.ICHOR_BUCKET.get())
.block(() -> AntarchyNeoforgeBlocks.ICHOR_BLOCK.get())
.slopeFindDistance(4)
.levelDecreasePerBlock(1)
.tickRate(5);
}
static BaseFlowingFluid.Properties antiwaterProperties() {
return new BaseFlowingFluid.Properties(ANTIWATER_TYPE, ANTIWATER, FLOWING_ANTIWATER)
.bucket(() -> AntarchyNeoforgeItems.ANTIWATER_BUCKET.get())
.block(() -> AntarchyNeoforgeBlocks.ANTIWATER_BLOCK.get())
.slopeFindDistance(4)
.levelDecreasePerBlock(1)
.tickRate(5);
}
private static <T extends net.minecraft.core.particles.ParticleOptions> ParticleType<T> particleType(
Function<ParticleType<T>, com.mojang.serialization.MapCodec<T>> codecFactory,
Function<ParticleType<T>, StreamCodec<? super io.netty.buffer.ByteBuf, T>> streamCodecFactory
) {
return new ParticleType<T>(false) {
@Override
public com.mojang.serialization.MapCodec<T> codec() {
return codecFactory.apply(this);
}
@Override
public StreamCodec<? super io.netty.buffer.ByteBuf, T> streamCodec() {
return streamCodecFactory.apply(this);
}
};
}
}
@@ -0,0 +1,45 @@
package com.craisinlord.antarchy.neoforge.registry;
import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload;
import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking;
import com.craisinlord.antarchy.neoforge.network.BrutalflyElytraNetworking;
import com.craisinlord.antarchy.neoforge.network.MultipartNetworking;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent;
public class AntarchyNeoforgePayloadHandlers {
private AntarchyNeoforgePayloadHandlers() {}
public static void register(IEventBus modEventBus) {
modEventBus.addListener(AntarchyNeoforgePayloadHandlers::registerPayloadHandlers);
}
static void registerPayloadHandlers(RegisterPayloadHandlersEvent event) {
var registrar = event.registrar("1");
AntarchyGravityNetworking.register(registrar);
BrutalflyElytraNetworking.register(registrar);
registrar.playToClient(
com.craisinlord.antarchy.content.network.BloodglassStatePayload.TYPE,
com.craisinlord.antarchy.content.network.BloodglassStatePayload.STREAM_CODEC,
(payload, ctx) -> ctx.enqueueWork(() ->
com.craisinlord.antarchy.content.client.BloodglassClientState.update(payload.shieldsActive(), payload.shieldsMax())
)
);
registrar.playToClient(
BloodCrystalKatanaTrailPayload.TYPE,
BloodCrystalKatanaTrailPayload.STREAM_CODEC,
(payload, ctx) -> ctx.enqueueWork(() ->
com.craisinlord.antarchy.content.client.BloodCrystalKatanaTrailClientState.trigger(payload.entityId(), payload.durationTicks())
)
);
registrar.playToClient(
com.craisinlord.antarchy.content.network.ScorpionWhipTetherPayload.TYPE,
com.craisinlord.antarchy.content.network.ScorpionWhipTetherPayload.STREAM_CODEC,
(payload, ctx) -> ctx.enqueueWork(() ->
com.craisinlord.antarchy.content.client.ScorpionWhipTetherClientState.update(payload.playerId(), payload.targetId())
)
);
MultipartNetworking.register(registrar);
// ThoraxisWeatherNetworking.register(registrar);
}
}
@@ -0,0 +1,141 @@
package com.craisinlord.antarchy.neoforge.registry;
import com.craisinlord.antarchy.Antarchy;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
public final class AntarchyNeoforgeSounds {
private static final DeferredRegister<SoundEvent> SOUND_EVENTS = DeferredRegister.create(Registries.SOUND_EVENT, Antarchy.MODID);
public static final DeferredHolder<SoundEvent, SoundEvent> SQUIDZOOKA_FIRE = registerSoundEvent("squidzooka_fire");
public static final DeferredHolder<SoundEvent, SoundEvent> SHRINK_RAY_SOUND = registerSoundEvent("shrink_ray");
public static final DeferredHolder<SoundEvent, SoundEvent> GROWTH_RAY_SOUND = registerSoundEvent("growth_ray");
public static final DeferredHolder<SoundEvent, SoundEvent> SIZE_RAY_CHARGE = registerSoundEvent("size_ray_charge");
public static final DeferredHolder<SoundEvent, SoundEvent> ANT_AMBIENT = registerSoundEvent("ant_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> ANT_IDLE = registerSoundEvent("ant_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> ANT_HURT = registerSoundEvent("ant_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> ANT_BITE = registerSoundEvent("ant_bite");
public static final DeferredHolder<SoundEvent, SoundEvent> ANT_GATHER = registerSoundEvent("ant_gather");
public static final DeferredHolder<SoundEvent, SoundEvent> ANT_NEST = registerSoundEvent("ant_nest");
public static final DeferredHolder<SoundEvent, SoundEvent> CLOUD_SHARK_BITE = registerSoundEvent("cloud_shark_bite");
public static final DeferredHolder<SoundEvent, SoundEvent> CLOUD_SHARK_IDLE = registerSoundEvent("cloud_shark_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> CLOUD_SHARK_HURT = registerSoundEvent("cloud_shark_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> CLOUD_SHARK_DEATH = registerSoundEvent("cloud_shark_death");
public static final DeferredHolder<SoundEvent, SoundEvent> CLOUD_SHARK_FLY = registerSoundEvent("cloud_shark_fly");
public static final DeferredHolder<SoundEvent, SoundEvent> CATERPILLAR_IDLE = registerSoundEvent("caterpillar_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> CATERPILLAR_HURT = registerSoundEvent("caterpillar_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> CATERPILLAR_CRAWL = registerSoundEvent("caterpillar_crawl");
public static final DeferredHolder<SoundEvent, SoundEvent> BUTTERFLY_HURT = registerSoundEvent("butterfly_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> BRUTALFLY_IDLE = registerSoundEvent("brutalfly_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> BRUTALFLY_DEATH = registerSoundEvent("brutalfly_death");
public static final DeferredHolder<SoundEvent, SoundEvent> ELYTHIA_FIREFLY_AMBIENT = registerSoundEvent("ambient.elythia.firefly");
public static final DeferredHolder<SoundEvent, SoundEvent> MISSILE_SQUID_AMBIENT = registerSoundEvent("missile_squid_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> MISSILE_SQUID_HURT = registerSoundEvent("missile_squid_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> MISSILE_SQUID_DEATH = registerSoundEvent("missile_squid_death");
public static final DeferredHolder<SoundEvent, SoundEvent> MISSILE_SQUID_ATTACK = registerSoundEvent("missile_squid_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> KRAKEN_FLYING_LOOP = registerSoundEvent("kraken_flying_loop");
public static final DeferredHolder<SoundEvent, SoundEvent> KRAKEN_FLYING_SIDEWAYS_LOOP = registerSoundEvent("kraken_flying_sideways_loop");
public static final DeferredHolder<SoundEvent, SoundEvent> KRAKEN_ATTACK = registerSoundEvent("kraken_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> KRAKEN_SPIN = registerSoundEvent("kraken_spin");
public static final DeferredHolder<SoundEvent, SoundEvent> KRAKEN_ROAR = registerSoundEvent("kraken_roar");
public static final DeferredHolder<SoundEvent, SoundEvent> KRAKEN_SUMMON = registerSoundEvent("kraken_summon");
public static final DeferredHolder<SoundEvent, SoundEvent> KRAKEN_HURT = registerSoundEvent("kraken_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> KRAKEN_DEATH = registerSoundEvent("kraken_death");
public static final DeferredHolder<SoundEvent, SoundEvent> BASILISK_IDLE_LOOP = registerSoundEvent("basilisk_idle_loop");
public static final DeferredHolder<SoundEvent, SoundEvent> BASILISK_SLITHER_LOOP = registerSoundEvent("basilisk_slither_loop");
public static final DeferredHolder<SoundEvent, SoundEvent> BASILISK_BITE = registerSoundEvent("basilisk_bite");
public static final DeferredHolder<SoundEvent, SoundEvent> BASILISK_HISS = registerSoundEvent("basilisk_hiss");
public static final DeferredHolder<SoundEvent, SoundEvent> BASILISK_HURT = registerSoundEvent("basilisk_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> BASILISK_DEATH = registerSoundEvent("basilisk_death");
public static final DeferredHolder<SoundEvent, SoundEvent> THORAXIS_NIGHTMARE_WASTES_AMBIENT = registerSoundEvent("thoraxis_nightmare_wastes_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> THORAXIS_NIGHTMARE_WASTES_ADDITIONS = registerSoundEvent("thoraxis_nightmare_wastes_additions");
public static final DeferredHolder<SoundEvent, SoundEvent> THORAXIS_NIGHTMARE_WASTES_MOOD = registerSoundEvent("thoraxis_nightmare_wastes_mood");
public static final DeferredHolder<SoundEvent, SoundEvent> THORAXIS_DREAM_DUNES_AMBIENT = registerSoundEvent("thoraxis_dream_dunes_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> THORAXIS_DREAM_DUNES_ADDITIONS = registerSoundEvent("thoraxis_dream_dunes_additions");
public static final DeferredHolder<SoundEvent, SoundEvent> THORAXIS_DREAM_DUNES_MOOD = registerSoundEvent("thoraxis_dream_dunes_mood");
public static final DeferredHolder<SoundEvent, SoundEvent> THORAXIS_LUCID_POOLS_AMBIENT = registerSoundEvent("thoraxis_lucid_pools_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> THORAXIS_LUCID_POOLS_ADDITIONS = registerSoundEvent("thoraxis_lucid_pools_additions");
public static final DeferredHolder<SoundEvent, SoundEvent> THORAXIS_LUCID_POOLS_MOOD = registerSoundEvent("thoraxis_lucid_pools_mood");
public static final DeferredHolder<SoundEvent, SoundEvent> LUCID_AMBIENT = registerSoundEvent("lucid_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> LUCID_FLYING = registerSoundEvent("lucid_flying");
public static final DeferredHolder<SoundEvent, SoundEvent> LUCID_ATTACK = registerSoundEvent("lucid_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> LUCID_BOLT_SOUND = registerSoundEvent("lucid_bolt");
public static final DeferredHolder<SoundEvent, SoundEvent> LUCID_HURT = registerSoundEvent("lucid_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> LUCID_DEATH = registerSoundEvent("lucid_death");
public static final DeferredHolder<SoundEvent, SoundEvent> REVERIE_IDLE = registerSoundEvent("reverie_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> REVERIE_HURT = registerSoundEvent("reverie_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> REVERIE_WORRY = registerSoundEvent("reverie_worry");
public static final DeferredHolder<SoundEvent, SoundEvent> REVERIE_SAVE = registerSoundEvent("reverie_save");
public static final DeferredHolder<SoundEvent, SoundEvent> REVERIE_JOIN_PLAYER = registerSoundEvent("reverie_join_player");
public static final DeferredHolder<SoundEvent, SoundEvent> REVERIE_ALERT = registerSoundEvent("reverie_alert");
public static final DeferredHolder<SoundEvent, SoundEvent> FLYING_SQUIRREL_IDLE = registerSoundEvent("flying_squirrel_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> FLYING_SQUIRREL_BEG = registerSoundEvent("flying_squirrel_beg");
public static final DeferredHolder<SoundEvent, SoundEvent> FLYING_SQUIRREL_NUT = registerSoundEvent("flying_squirrel_nut");
public static final DeferredHolder<SoundEvent, SoundEvent> FLYING_SQUIRREL_GLIDE_LOOP = registerSoundEvent("flying_squirrel_glide_loop");
public static final DeferredHolder<SoundEvent, SoundEvent> FLYING_SQUIRREL_HURT = registerSoundEvent("flying_squirrel_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> FLYING_SQUIRREL_DEATH = registerSoundEvent("flying_squirrel_death");
public static final DeferredHolder<SoundEvent, SoundEvent> NIGHTMARE_IDLE = registerSoundEvent("nightmare_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> NIGHTMARE_HURT = registerSoundEvent("nightmare_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> NIGHTMARE_ROAR = registerSoundEvent("nightmare_roar");
public static final DeferredHolder<SoundEvent, SoundEvent> NIGHTMARE_DEATH = registerSoundEvent("nightmare_death");
public static final DeferredHolder<SoundEvent, SoundEvent> NIGHTMARE_BITE = registerSoundEvent("nightmare_bite");
public static final DeferredHolder<SoundEvent, SoundEvent> NIGHTMARE_FLAP = registerSoundEvent("nightmare_flap");
public static final DeferredHolder<SoundEvent, SoundEvent> TRIFFID_ATTACK = registerSoundEvent("triffid_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> TRIFFID_GRAB = registerSoundEvent("triffid_grab");
public static final DeferredHolder<SoundEvent, SoundEvent> TRIFFID_HURT = registerSoundEvent("triffid_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> TRIFFID_DEATH = registerSoundEvent("triffid_death");
public static final DeferredHolder<SoundEvent, SoundEvent> TRIFFID_HISS = registerSoundEvent("triffid_hiss");
public static final DeferredHolder<SoundEvent, SoundEvent> TRIFFID_GROWL = registerSoundEvent("triffid_growl");
public static final DeferredHolder<SoundEvent, SoundEvent> MANTIS_AMBIENT = registerSoundEvent("mantis_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> MANTIS_HURT = registerSoundEvent("mantis_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> MANTIS_ATTACK = registerSoundEvent("mantis_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> MANTIS_FLY_LOOP = registerSoundEvent("mantis_fly_loop");
public static final DeferredHolder<SoundEvent, SoundEvent> GRAVITY_GUN_PICKUP = registerSoundEvent("gravity_gun_pickup");
public static final DeferredHolder<SoundEvent, SoundEvent> GRAVITY_GUN_DROP = registerSoundEvent("gravity_gun_drop");
public static final DeferredHolder<SoundEvent, SoundEvent> GRAVITY_GUN_HOLD_LOOP = registerSoundEvent("gravity_gun_hold_loop");
public static final DeferredHolder<SoundEvent, SoundEvent> GRAVITY_GUN_LAUNCH = registerSoundEvent("gravity_gun_launch");
public static final DeferredHolder<SoundEvent, SoundEvent> GRAVITY_GUN_DRYFIRE = registerSoundEvent("gravity_gun_dryfire");
public static final DeferredHolder<SoundEvent, SoundEvent> BED_BUG_AMBIENT = registerSoundEvent("bed_bug_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> BED_BUG_HURT = registerSoundEvent("bed_bug_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> BED_BUG_ATTACK = registerSoundEvent("bed_bug_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> WASP_IDLE = registerSoundEvent("wasp_idle");
public static final DeferredHolder<SoundEvent, SoundEvent> WASP_HURT = registerSoundEvent("wasp_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> WASP_ATTACK = registerSoundEvent("wasp_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> WASP_DEATH = registerSoundEvent("wasp_death");
public static final DeferredHolder<SoundEvent, SoundEvent> SCORPION_AMBIENT = registerSoundEvent("scorpion_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> SCORPION_HURT = registerSoundEvent("scorpion_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> SCORPION_ATTACK = registerSoundEvent("scorpion_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> EMPEROR_SCORPION_AMBIENT = registerSoundEvent("emperor_scorpion_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> EMPEROR_SCORPION_HURT = registerSoundEvent("emperor_scorpion_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> EMPEROR_SCORPION_ATTACK = registerSoundEvent("emperor_scorpion_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> EMPEROR_SCORPION_ROAR = registerSoundEvent("emperor_scorpion_roar");
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEWORM_AMBIENT = registerSoundEvent("moleworm_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEWORM_HURT = registerSoundEvent("moleworm_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEWORM_ATTACK = registerSoundEvent("moleworm_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEWORM_DIG = registerSoundEvent("moleworm_dig");
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_AMBIENT = registerSoundEvent("molevore_ambient");
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_HURT = registerSoundEvent("molevore_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_ATTACK = registerSoundEvent("molevore_attack");
public static final DeferredHolder<SoundEvent, SoundEvent> MOLEVORE_DIG = registerSoundEvent("molevore_dig");
public static final DeferredHolder<SoundEvent, SoundEvent> DUCT_TAPE_USE = registerSoundEvent("duct_tape_use");
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_HYPNOTIC_GAS = registerSoundEvent("potent_nyxite_hypnotic_gas");
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_GEYSER_ERUPTION_START = registerSoundEvent("potent_nyxite_geyser_eruption_start");
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_GEYSER_ERUPTION_ACTIVE = registerSoundEvent("potent_nyxite_geyser_eruption_active");
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_GEYSER_CONTINUOUS_START = registerSoundEvent("potent_nyxite_geyser_continuous_start");
public static final DeferredHolder<SoundEvent, SoundEvent> POTENT_NYXITE_GEYSER_CONTINUOUS_ACTIVE = registerSoundEvent("potent_nyxite_geyser_continuous_active");
private AntarchyNeoforgeSounds() {}
public static void register(IEventBus modEventBus) {
SOUND_EVENTS.register(modEventBus);
}
private static DeferredHolder<SoundEvent, SoundEvent> registerSoundEvent(String path) {
return SOUND_EVENTS.register(path,
() -> SoundEvent.createVariableRangeEvent(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, path)));
}
}
@@ -0,0 +1,48 @@
package com.craisinlord.antarchy.neoforge.registry;
import com.craisinlord.antarchy.content.entity.*;
import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity;
import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity;
import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity;
import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity;
import com.craisinlord.antarchy.content.entity.lucid.LucidEntity;
import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity;
import net.minecraft.world.entity.SpawnPlacementTypes;
import net.minecraft.world.entity.animal.Cow;
import net.minecraft.world.entity.monster.Monster;
import net.minecraft.world.level.levelgen.Heightmap;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.event.entity.RegisterSpawnPlacementsEvent;
public class AntarchyNeoforgeSpawnPlacements {
private AntarchyNeoforgeSpawnPlacements() {}
public static void register(IEventBus modEventBus) {
modEventBus.addListener(AntarchyNeoforgeSpawnPlacements::registerSpawnPlacements);
}
static void registerSpawnPlacements(RegisterSpawnPlacementsEvent event) {
event.register(AntarchyNeoforgeEntites.FLYING_SQUIRREL.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING, FlyingSquirrelEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.CATERPILLAR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CaterpillarEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.BUTTERFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ButterflyEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.REVERIE.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ReverieEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.BRUTALFLY.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Monster::checkMonsterSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.ENCHANTED_GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CloudSharkEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.WASP.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WaspEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.BOMBER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
event.register(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR);
}
}
@@ -0,0 +1,40 @@
modLoader="javafml" #mandatory
loaderVersion="[2,)" #mandatory
license="All rights reserved"
[[mods]] #mandatory
modId="antarchy" #mandatory
logoFile="../assets/antarchy_/antarchy_logo.png"
logoBlur=false
version="${version}" #mandatory
displayName="Antarchy" #mandatory
displayURL="https://www.curseforge.com/minecraft/mc-mods/antarchy"
authors="CraisinLord"
description='''
ANTS! ANTS! ANTS! ANTS!
'''
[[mixins]]
config = "antarchy-common.mixins.json"
[[mixins]]
config = "antarchy-neoforge.mixins.json"
[[dependencies.antarchy]]
modId="minecraft"
type="required"
versionRange="[1.21.1,)"
[[dependencies.antarchy]]
modId="integrated_api"
type="required"
versionRange="[1.6.2,)"
ordering="AFTER"
side="BOTH"
[[dependencies.antarchy]]
modId="geckolib"
type="required"
versionRange="*"
ordering="AFTER"
side="BOTH"
@@ -0,0 +1,23 @@
{
"required": true,
"package": "com.craisinlord.antarchy.neoforge.mixins",
"refmap": "antarchy.refmap.json",
"compatibilityLevel": "JAVA_21",
"mixins": [
"compat.SablePhysicsColliderBlockGetterMixin",
"item.BucketItemThoraxisWaterMixin",
"entity.MultipartEntityBridgeMixin",
"entity.MultipartEntityLevelRegistryMixin",
"entity.ParalyzedMobFreezeMixin",
"infinity.PortalCreatorMixin",
"infinity.RandomSpringMixin",
"level.ClientLevelPartEntitiesAccessor",
"level.ServerLevelPartEntitiesAccessor"
],
"client": [
],
"injectors": {
"defaultRequire": 1
},
"minVersion": "0.8"
}
@@ -0,0 +1,5 @@
{
"parent": "neoforge:item/bucket",
"loader": "neoforge:fluid_container",
"fluid": "antarchy:antiwater"
}
@@ -0,0 +1,25 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"textures": {
"layer0": "antarchy:item/battle_axe/battle_axe_item"
},
"base": {
"parent": "antarchy:item/battle_axe_held"
},
"texture_size": [
64,
64
],
"perspectives": {
"gui": {
"parent": "antarchy:item/battle_axe_gui"
},
"ground": {
"parent": "antarchy:item/battle_axe_gui"
},
"fixed": {
"parent": "antarchy:item/battle_axe_gui"
}
}
}
@@ -0,0 +1,25 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"textures": {
"layer0": "antarchy:item/big_bertha/big_bertha_item"
},
"base": {
"parent": "antarchy:item/big_bertha_held"
},
"texture_size": [
64,
64
],
"perspectives": {
"gui": {
"parent": "antarchy:item/big_bertha_gui"
},
"ground": {
"parent": "antarchy:item/big_bertha_gui"
},
"fixed": {
"parent": "antarchy:item/big_bertha_gui"
}
}
}
@@ -0,0 +1,18 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"base": {
"parent": "antarchy:item/gravity_gun_held_geo"
},
"perspectives": {
"gui": {
"parent": "antarchy:item/gravity_gun_gui"
},
"ground": {
"parent": "antarchy:item/gravity_gun_gui"
},
"fixed": {
"parent": "antarchy:item/gravity_gun_gui"
}
}
}
@@ -0,0 +1,18 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"base": {
"parent": "antarchy:item/grow_ray_held_geo"
},
"perspectives": {
"gui": {
"parent": "antarchy:item/grow_ray_gui"
},
"ground": {
"parent": "antarchy:item/grow_ray_gui"
},
"fixed": {
"parent": "antarchy:item/grow_ray_gui"
}
}
}
@@ -0,0 +1,18 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"base": {
"parent": "antarchy:item/grow_ray_held_geo"
},
"perspectives": {
"gui": {
"parent": "antarchy:item/grow_ray_gui"
},
"ground": {
"parent": "antarchy:item/grow_ray_gui"
},
"fixed": {
"parent": "antarchy:item/grow_ray_gui"
}
}
}
@@ -0,0 +1,5 @@
{
"parent": "neoforge:item/bucket",
"loader": "neoforge:fluid_container",
"fluid": "antarchy:ichor"
}
@@ -0,0 +1,18 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"base": {
"parent": "antarchy:item/shrink_ray_held_geo"
},
"perspectives": {
"gui": {
"parent": "antarchy:item/shrink_ray_gui"
},
"ground": {
"parent": "antarchy:item/shrink_ray_gui"
},
"fixed": {
"parent": "antarchy:item/shrink_ray_gui"
}
}
}
@@ -0,0 +1,18 @@
{
"loader": "neoforge:separate_transforms",
"gui_light": "front",
"base": {
"parent": "antarchy:item/squidzooka_held_geo"
},
"perspectives": {
"gui": {
"parent": "antarchy:item/squidzooka_gui"
},
"ground": {
"parent": "antarchy:item/squidzooka_gui"
},
"fixed": {
"parent": "antarchy:item/squidzooka_gui"
}
}
}
@@ -0,0 +1,9 @@
{
"type": "neoforge:add_features",
"biomes": "#antarchy:overworld_ant_nest_spawn_biomes",
"features": [
"antarchy:brown_ant_nest",
"antarchy:rainbow_ant_nest"
],
"step": "vegetal_decoration"
}
@@ -0,0 +1,12 @@
{
"type": "neoforge:add_spawns",
"biomes": "#antarchy:apple_cow_spawn_biomes",
"spawners": [
{
"type": "antarchy:apple_cow",
"weight": 10,
"minCount": 2,
"maxCount": 4
}
]
}
@@ -0,0 +1,12 @@
{
"type": "neoforge:add_spawns",
"biomes": "#antarchy:flower_forest_butterfly_spawn_biomes",
"spawners": [
{
"type": "antarchy:butterfly",
"weight": 28,
"minCount": 2,
"maxCount": 5
}
]
}
@@ -0,0 +1,12 @@
{
"type": "neoforge:add_spawns",
"biomes": "#antarchy:flower_forest_caterpillar_spawn_biomes",
"spawners": [
{
"type": "antarchy:caterpillar",
"weight": 24,
"minCount": 2,
"maxCount": 4
}
]
}
@@ -0,0 +1,12 @@
{
"type": "neoforge:add_spawns",
"biomes": "#antarchy:flying_squirrel_spawn_biomes",
"spawners": [
{
"type": "antarchy:flying_squirrel",
"weight": 8,
"minCount": 1,
"maxCount": 3
}
]
}
@@ -0,0 +1,12 @@
{
"type": "neoforge:add_spawns",
"biomes": "#antarchy:golden_apple_cow_spawn_biomes",
"spawners": [
{
"type": "antarchy:golden_apple_cow",
"weight": 3,
"minCount": 1,
"maxCount": 3
}
]
}
@@ -0,0 +1,18 @@
{
"neoforge:conditions": [
{
"type": "neoforge:mod_loaded",
"modid": "create"
}
],
"type": "neoforge:add_spawns",
"biomes": "#antarchy:honeyed_apple_cow_spawn_biomes",
"spawners": [
{
"type": "antarchy:honeyed_apple_cow",
"weight": 2,
"minCount": 1,
"maxCount": 2
}
]
}
@@ -0,0 +1,8 @@
{
"type": "neoforge:add_features",
"biomes": "#antarchy:milkweed_spawn_biomes",
"features": [
"antarchy:flower_forest_milkweed"
],
"step": "vegetal_decoration"
}
@@ -0,0 +1,12 @@
{
"type": "neoforge:add_spawns",
"biomes": "#antarchy:missile_squid_spawn_biomes",
"spawners": [
{
"type": "antarchy:missile_squid",
"weight": 2,
"minCount": 1,
"maxCount": 2
}
]
}
@@ -0,0 +1,9 @@
{
"type": "neoforge:add_features",
"biomes": "#antarchy:is_elythia",
"features": [
"antarchy:uranium_ore",
"antarchy:titanium_ore"
],
"step": "underground_ores"
}
@@ -0,0 +1,9 @@
{
"type": "neoforge:add_features",
"biomes": "#minecraft:is_overworld",
"features": [
"antarchy:uranium_ore",
"antarchy:titanium_ore"
],
"step": "underground_ores"
}
@@ -0,0 +1,8 @@
{
"type": "neoforge:add_features",
"biomes": "#antarchy:red_ant_nest_spawn_biomes",
"features": [
"antarchy:red_ant_nest"
],
"step": "vegetal_decoration"
}