Merge beta7 into master

This commit is contained in:
craisinlord committed 2026-07-09 20:16:39 -05:00
commit 0db80e3cb7
335 files changed
+18289 -8157

No files matched your search

+7
View File
@@ -42,6 +42,13 @@ dependencies {
compileOnly(files("$rootDir/infinite_dimensions_jars/cloth-config-15.0.140-fabric.jar"))
compileOnly(files("$rootDir/infinite_dimensions_jars/sable-neoforge-1.21.1-2.0.3.jar"))
// Compile against the NeoForge jar (official Mojang mappings, matches this module's compile
// space) but load the real Fabric jar at runtime — sizeable_foliage's Fabric jar ships
// intermediary-mapped (Fabric's normal shipping format) which this compileOnly classpath
// can't resolve directly.
compileOnly(files("$rootDir/sizeable_foliage_jars/sizeable_foliage-neoforge-1.21.1-1.0.0.jar"))
runtimeOnly(files("$rootDir/sizeable_foliage_jars/sizeable_foliage-fabric-1.21.1-1.0.0.jar"))
annotationProcessor "org.spongepowered:mixin:0.8.7:processor"
common(project(path: ':common', configuration: 'namedElements')) { transitive false }
shadowCommon(project(path: ':common', configuration: 'namedElements')) { transitive false }
@@ -169,11 +169,17 @@ public final class AntarchyConfigModuleFabric {
private static boolean isMiscSetting(String name) {
return name.equals("disableInfinityBookPortalCreation")
|| name.equals("rainbowAntsLeadToInfinityDimensions")
|| name.equals("permanentPortalsEnabled")
|| name.equals("permanentPortalsFlintAndSteelEnabled")
|| name.equals("elythiaPortalEnabled")
|| name.equals("thoraxisPortalEnabled")
|| name.equals("cavarynPortalEnabled")
|| name.equals("hushweedSporeLifetimeSeconds")
|| name.equals("elythiaFireflyParticlesEnabled")
|| name.equals("duplicatorTreeEnabled")
|| name.equals("glowingTorchflowers")
|| name.equals("glowVinesUnderLeaves")
|| name.equals("swingThroughGrassEnabled")
|| name.equals("entitySpecificFireOverlayEnabled")
|| name.equals("dreamSandEnabled")
|| name.startsWith("dreamSand")
@@ -38,10 +38,10 @@ public final class AntarchyFabric implements ModInitializer {
Registries.BIOME,
ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "mantis_overworld_spawn_biomes")
);
@Override
public void onInitialize() {
AntarchyFabricNetworking.register();
AntarchyFabricNetworking.bootstrapMultipartCommon();
AntarchyConfigModuleFabric.init();
AntarchyFabricContent.register();
registerWorldgenFeatures();
@@ -67,6 +67,7 @@ import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity;
import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity;
import com.craisinlord.antarchy.content.entity.AlphaMantisEntity;
import com.craisinlord.antarchy.content.entity.MantisEntity;
import com.craisinlord.antarchy.content.entity.RollyPollyEntity;
import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity;
import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity;
import com.craisinlord.antarchy.content.entity.ScorpionEntity;
@@ -75,8 +76,6 @@ import com.craisinlord.antarchy.content.item.LucidPearlItem;
import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity;
import com.craisinlord.antarchy.content.entity.ToreterrorEntity;
import com.craisinlord.antarchy.content.entity.WaterBombEntity;
import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity;
import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity;
import com.craisinlord.antarchy.content.item.PrimordialArmorItem;
import com.craisinlord.antarchy.content.item.WaterCannonItem;
import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity;
@@ -85,15 +84,12 @@ import com.craisinlord.antarchy.content.entity.MolevoreEntity;
import com.craisinlord.antarchy.content.entity.MolewormEntity;
import com.craisinlord.antarchy.content.entity.BomberEntity;
import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity;
import com.craisinlord.antarchy.content.entity.SpitBugEntity;
import com.craisinlord.antarchy.content.entity.SpitBugProjectileEntity;
import com.craisinlord.antarchy.content.entity.TriffidEntity;
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.ant.TermiteEntity;
import com.craisinlord.antarchy.content.item.BattleAxeItem;
import com.craisinlord.antarchy.content.item.BasiliskDaggerItem;
import com.craisinlord.antarchy.content.item.BigBerthaItem;
@@ -167,6 +163,7 @@ import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfigura
import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature;
import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions;
import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions;
import com.craisinlord.antarchy.content.portal.PermanentPortalType;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
@@ -401,6 +398,9 @@ public final class AntarchyFabricContent {
public static final DeferredHolder<SoundEvent, SoundEvent> TORETERROR_HURT = registerSoundEvent("toreterror_hurt");
public static final DeferredHolder<SoundEvent, SoundEvent> TORETERROR_DEATH = registerSoundEvent("toreterror_death");
public static final DeferredHolder<SoundEvent, SoundEvent> TORETERROR_BOMBER_FIRE = registerSoundEvent("toreterror_bomber_fire");
public static final DeferredHolder<SoundEvent, SoundEvent> TORETERROR_SPIN = registerSoundEvent("toreterror_spin");
public static final DeferredHolder<SoundEvent, SoundEvent> TORETERROR_RICOCHET = registerSoundEvent("toreterror_ricochet");
public static final DeferredHolder<SoundEvent, SoundEvent> WATER_CANNON_FIRE = registerSoundEvent("water_cannon_fire");
public static final DeferredHolder<SoundEvent, SoundEvent> TORETERROR_JUMP_UP = registerSoundEvent("toreterror_jump_up");
public static final DeferredHolder<SoundEvent, SoundEvent> TORETERROR_JUMP_LAND = registerSoundEvent("toreterror_jump_land");
public static final DeferredHolder<SoundEvent, SoundEvent> STINKY_FLY_SOUND = registerSoundEvent("stinky_fly");
@@ -515,13 +515,14 @@ public final class AntarchyFabricContent {
() -> 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<OuranwoodVineBlock> OURANWOOD_VINE = BLOCKS.register("ouranwood_vine",
// () -> OURANWOOD_VINE_INSTANCE);
// public static final DeferredBlock<OuranwoodVinePlantBlock> OURANWOOD_VINE_PLANT = BLOCKS.register("ouranwood_vine_plant",
// () -> OURANWOOD_VINE_PLANT_INSTANCE);
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<net.minecraft.world.level.block.StandingSignBlock> OURANWOOD_SIGN = BLOCKS.register("ouranwood_sign",
() -> new net.minecraft.world.level.block.StandingSignBlock(OuranwoodWoodTypes.OURANWOOD, BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_SIGN)));
public static final DeferredBlock<net.minecraft.world.level.block.WallSignBlock> OURANWOOD_WALL_SIGN = BLOCKS.register("ouranwood_wall_sign",
@@ -611,6 +612,10 @@ public final class AntarchyFabricContent {
AntarchyFabricContent::cloudBucketItem,
BlockBehaviour.Properties.ofFullCopy(Blocks.POWDER_SNOW).noLootTable().noOcclusion()
));
public static final DeferredBlock<AntDimensionPortalBlock> ELYTHIA_PORTAL = BLOCKS.register("elythia_portal",
() -> new AntDimensionPortalBlock(PermanentPortalType.ELYTHIA, portalProperties()));
public static final DeferredBlock<AntDimensionPortalBlock> THORAXIS_PORTAL = BLOCKS.register("thoraxis_portal",
() -> new AntDimensionPortalBlock(PermanentPortalType.THORAXIS, portalProperties()));
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",
@@ -701,6 +706,7 @@ public final class AntarchyFabricContent {
() -> new Potion("stinky", new MobEffectInstance(mobEffectHolder(STINKY), 2400)));
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);
// public static final DeferredHolder<MobEffect, com.craisinlord.antarchy.content.effect.GlimmersGraceMobEffect> GLIMMERS_GRACE = MOB_EFFECTS.register("glimmers_grace", com.craisinlord.antarchy.content.effect.GlimmersGraceMobEffect::new);
public static final DeferredHolder<Potion, Potion> PARALYSIS = POTIONS.register("paralysis",
() -> new Potion(new MobEffectInstance(mobEffectHolder(PARALYZED), 200)));
public static final DeferredHolder<Potion, Potion> LONG_PARALYSIS = POTIONS.register("long_paralysis",
@@ -792,7 +798,7 @@ public final class AntarchyFabricContent {
.build("mantis"));
public static final DeferredHolder<EntityType<?>, EntityType<AlphaMantisEntity>> ALPHA_MANTIS = ENTITY_TYPES.register("alpha_mantis",
() -> EntityType.Builder.of(AlphaMantisEntity::new, MobCategory.MONSTER)
.sized(4.0F, 3.25F)
.sized(4.25F, 3.35F)
.clientTrackingRange(10)
.build("alpha_mantis"));
public static final DeferredHolder<EntityType<?>, EntityType<OuranwoodBoatEntity>> OURANWOOD_BOAT_ENTITY = ENTITY_TYPES.register("ouranwood_boat",
@@ -1088,9 +1094,9 @@ public final class AntarchyFabricContent {
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_BUTTON);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_LEAVES);
public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(OURANWOOD_ACORN_BLOCK);
// public static final DeferredItem<net.minecraft.world.item.BlockItem> OURANWOOD_VINE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_VINE);
public static final DeferredItem<net.minecraft.world.item.BlockItem> ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(ORANGE_MILKWEED);
public static final DeferredItem<net.minecraft.world.item.BlockItem> PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(PINK_MILKWEED);
public static final DeferredItem<net.minecraft.world.item.BlockItem> TORCHFLOWER_BUSH_ITEM = ITEMS.registerSimpleBlockItem(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), OURANWOOD_SIGN.get(), OURANWOOD_WALL_SIGN.get()));
public static final DeferredItem<net.minecraft.world.item.HangingSignItem> OURANWOOD_HANGING_SIGN_ITEM = ITEMS.register("ouranwood_hanging_sign",
@@ -1562,6 +1568,15 @@ public final class AntarchyFabricContent {
.sized(11.4F, 39.0F)
.clientTrackingRange(12)
.build("kraken"));
public static final DeferredHolder<EntityType<?>, EntityType<com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity>> KRAKEN_PART = ENTITY_TYPES.register("kraken_part",
() -> EntityType.Builder.<com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity>of(
com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity::new,
MobCategory.MISC
)
.sized(1.0F, 1.0F)
.clientTrackingRange(12)
.updateInterval(1)
.build("kraken_part"));
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)
@@ -1732,6 +1747,14 @@ public final class AntarchyFabricContent {
public static final DeferredItem<DeferredSpawnEggItem> CHEEP_SPAWN_EGG = ITEMS.register("cheep_spawn_egg",
() -> new DeferredSpawnEggItem(CHEEP, 0xFF00AA, 0x00FF44, new Item.Properties()));
// public static final DeferredHolder<EntityType<?>, EntityType<com.craisinlord.antarchy.content.entity.GlimmerEntity>> GLIMMER = ENTITY_TYPES.register("glimmer",
// () -> EntityType.Builder.of(com.craisinlord.antarchy.content.entity.GlimmerEntity::new, MobCategory.CREATURE)
// .sized(0.9F, 1.4F)
// .clientTrackingRange(8)
// .build("glimmer"));
// public static final DeferredItem<DeferredSpawnEggItem> GLIMMER_SPAWN_EGG = ITEMS.register("glimmer_spawn_egg",
// () -> new DeferredSpawnEggItem(GLIMMER, 0xBEEFFF, 0x6FD8FF, new Item.Properties()));
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> ANTARCHY_TAB = CREATIVE_MODE_TABS.register("antarchy",
() -> CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0)
.title(net.minecraft.network.chat.Component.translatable("itemGroup.antarchy.antarchy"))
@@ -1815,6 +1838,7 @@ public final class AntarchyFabricContent {
FabricDefaultAttributeRegistry.register(EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build());
FabricDefaultAttributeRegistry.register(TORETERROR.get(), ToreterrorEntity.createAttributes().build());
FabricDefaultAttributeRegistry.register(CHEEP.get(), com.craisinlord.antarchy.content.entity.CheepEntity.createAttributes().build());
// FabricDefaultAttributeRegistry.register(GLIMMER.get(), com.craisinlord.antarchy.content.entity.GlimmerEntity.createAttributes().build());
FabricDefaultAttributeRegistry.register(RED_ANT.get(), buildAntAttributes(
AntarchySettings.redAntHealth(),
@@ -1851,6 +1875,7 @@ public final class AntarchyFabricContent {
SpawnPlacements.register(MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn);
SpawnPlacements.register(OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn);
SpawnPlacements.register(CHEEP.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.AbstractFish::checkSurfaceWaterAnimalSpawnRules);
// SpawnPlacements.register(GLIMMER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules);
SpawnPlacements.register(NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn);
SpawnPlacements.register(MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn);
SpawnPlacements.register(MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn);
@@ -1933,7 +1958,7 @@ public final class AntarchyFabricContent {
"smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab",
"cut_dream_sandstone_slab" -> 4;
case "umbral_moss_block", "umbral_moss_carpet" -> 4;
case "torchflower_bush", "hushweed", "orange_milkweed", "pink_milkweed", "amber_lichen", "creepvine" -> 6;
case "hushweed", "orange_milkweed", "pink_milkweed", "amber_lichen", "creepvine" -> 6;
case "blood_crystal_block", "budding_blood_crystal",
"small_blood_crystal_bud", "medium_blood_crystal_bud",
"large_blood_crystal_bud", "blood_crystal_cluster" -> 7;
@@ -1945,17 +1970,16 @@ public final class AntarchyFabricContent {
"chiseled_titanium", "uranium_bulb", "titanium_bulb",
"uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor",
"uranium_bars", "titanium_bars" -> 8;
case "bile_vein" -> 9;
case "infested_rooted_dirt", "infested_coarse_dirt", "triffid_goo_block",
"cloud_block", "creeping_horror_egg", "lurking_terror_egg" -> 9;
case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 10;
case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg",
"butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg",
"red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg",
"moleworm_spawn_egg", "mantis_spawn_egg", "alpha_mantis_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg",
"moleworm_spawn_egg", "mantis_spawn_egg", "alpha_mantis_spawn_egg", "rolly_polly_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg",
"apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", "enchanted_golden_apple_cow_spawn_egg",
"honeyed_apple_cow_spawn_egg", "dr_trayaurus_spawn_egg", "wasp_spawn_egg",
"bomber_spawn_egg", "jumpy_bug_spawn_egg", "spit_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", "octopus_bomb_spawn_egg",
"dr_trayaurus_spawn_egg", "wasp_spawn_egg",
"bomber_spawn_egg", "jumpy_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", "octopus_bomb_spawn_egg",
"nightmare_spawn_egg", "bed_bug_spawn_egg", "lucid_spawn_egg", "scorpion_spawn_egg",
"basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg",
"hercules_beetle_spawn_egg",
@@ -2001,6 +2025,13 @@ public final class AntarchyFabricContent {
return BLOOD_CRYSTAL_CRYSTAL.get();
}
// private static OuranwoodVinePlantBlock createOuranwoodVinePlant() {
// OuranwoodVinePlantBlock.bindHeadBlock(OURANWOOD_VINE_INSTANCE);
// OuranwoodVinePlantBlock block = new OuranwoodVinePlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WEEPING_VINES_PLANT));
// OuranwoodVineBlock.bindBodyBlock(block);
// return block;
// }
private static Block createDirtOre(Block copyFrom) {
return new Block(dirtOreProperties());
}
@@ -2020,6 +2051,17 @@ public final class AntarchyFabricContent {
return BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK);
}
private static BlockBehaviour.Properties portalProperties() {
return BlockBehaviour.Properties.of()
.strength(-1.0F)
.noCollission()
.noOcclusion()
.lightLevel(state -> 11)
.noLootTable()
.isSuffocating((state, level, pos) -> false)
.isViewBlocking((state, level, pos) -> false);
}
private static Block createOre(Block copyFrom) {
return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops());
}
@@ -2246,6 +2288,14 @@ public final class AntarchyFabricContent {
CREATIVE_MODE_TABS.register();
// Wire common-module accessors after all registrations are complete.
PermanentPortalType.bindBlocks(
() -> MOSSY_OURANWOOD_WOOD.get(),
() -> ELYTHIA_PORTAL.get(),
() -> NYXITE.get(),
() -> THORAXIS_PORTAL.get(),
() -> NYXITE.get(),
() -> THORAXIS_PORTAL.get()
);
AntarchySoundEvents.bind(
SQUIDZOOKA_FIRE,
@@ -2365,6 +2415,9 @@ public final class AntarchyFabricContent {
TORETERROR_HURT,
TORETERROR_DEATH,
TORETERROR_BOMBER_FIRE,
TORETERROR_SPIN,
TORETERROR_RICOCHET,
WATER_CANNON_FIRE,
TORETERROR_JUMP_UP,
TORETERROR_JUMP_LAND,
STINKY_FLY_SOUND,
@@ -2379,6 +2432,8 @@ public final class AntarchyFabricContent {
);
AntarchyObjects.setOctopusBomb(OCTOPUS_BOMB);
// AntarchyObjects.setGlimmer(GLIMMER);
// AntarchyObjects.setGlimmersGrace(() -> mobEffectHolder(GLIMMERS_GRACE));
AntarchyObjects.bind(
EASTER_BUNNY,
FLYING_SQUIRREL,
@@ -2399,7 +2454,11 @@ public final class AntarchyFabricContent {
HUSH_PROJECTILE,
TORETERROR,
WATER_BOMB,
(java.util.function.Supplier) BOMBER,
(java.util.function.Supplier) BOMBER,
(java.util.function.Supplier) BED_BUG,
CHEEP,
(java.util.function.Supplier) CHEEP,
() -> DUPLICATOR_LOG.get(),
() -> DUPLICATOR_SAPLING.get(),
() -> DUCT_TAPE.get(),
@@ -2428,6 +2487,8 @@ public final class AntarchyFabricContent {
() -> TRIFFID_GOO_BLOCK.get(),
() -> PALE_NYXITE.get(),
() -> NYXITE_SPIKE.get(),
() -> NYXITE.get(),
() -> NYXITE_SPIKE.get(),
() -> POTENT_NYXITE.get(),
() -> ANTIMETAL.get(),
() -> POLISHED_ANTIMETAL.get(),
@@ -2440,6 +2501,7 @@ public final class AntarchyFabricContent {
KRAKEN_TOOTH,
() -> MOGGLES.get(),
() -> REVERIE_BOTTLE.get(),
() -> STINK_BUG_ITEM.get(),
() -> mobEffectHolder(DREAD),
() -> mobEffectHolder(PARALYZED),
() -> mobEffectHolder(INVERTED),
@@ -2449,7 +2511,8 @@ public final class AntarchyFabricContent {
() -> MOSSY_OURANWOOD_WOOD.get(),
() -> ORANGE_MILKWEED.get(),
() -> PINK_MILKWEED.get(),
() -> TORCHFLOWER_BUSH.get(),
() -> BED_BUG_EGG.get(),
() -> BED_BUG_EGG.get(),
() -> BED_BUG_EGG.get(),
() -> WASP_NEST.get(),
() -> HUSHWEED.get(),
@@ -10,6 +10,7 @@ import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition;
import com.craisinlord.antarchy.content.portal.PermanentPortalManager;
import com.craisinlord.antarchy.content.command.CaterpillarCommand;
import com.craisinlord.antarchy.content.command.GravityCommand;
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
@@ -58,6 +59,7 @@ public final class AntarchyFabricEvents {
if (entity instanceof ServerPlayer sp) {
BloodglassManager.handleDeath(sp);
}
PermanentPortalManager.handleSacrifice(entity);
if (entity instanceof MissileSquidEntity missileSquid) {
if (missileSquid.isSpawnedByKraken()) {
return;
@@ -7,6 +7,7 @@ public final class AntarchyFabricClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
AntarchyFabricClientNetworking.register();
AntarchyFabricClientNetworking.bootstrapMultipartClient();
AntarchyFabricClientBootstrap.register();
}
}
@@ -6,6 +6,7 @@ import com.craisinlord.antarchy.content.client.renderer.*;
import com.craisinlord.antarchy.content.client.particle.*;
import com.craisinlord.antarchy.content.client.renderer.AntiwaterFluidRenderer;
import com.craisinlord.antarchy.fabric.AntarchyFabricContent;
import com.craisinlord.antarchy.fabric.client.renderer.MultipartPartRenderer;
import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRendererRegistrationCallback;
import net.minecraft.world.entity.EntityType;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
@@ -89,6 +90,7 @@ public final class AntarchyFabricClientBootstrap {
EntityRendererRegistry.register(AntarchyFabricContent.DR_TRAYAURUS.get(), context -> new DrTrayaurusRenderer(context, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/dr_trayaurus.png")));
EntityRendererRegistry.register(AntarchyFabricContent.CLOUD_SHARK.get(), CloudSharkRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN.get(), KrakenRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN_PART.get(), MultipartPartRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.MISSILE_SQUID.get(), MissileSquidRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.OCTOPUS_BOMB.get(), OctopusBombRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.NIGHTMARE.get(), NightmareRenderer::new);
@@ -109,6 +111,7 @@ public final class AntarchyFabricClientBootstrap {
EntityRendererRegistry.register(AntarchyFabricContent.TORETERROR.get(), ToreterrorRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.WATER_BOMB.get(), WaterBombRenderer::new);
EntityRendererRegistry.register(AntarchyFabricContent.CHEEP.get(), com.craisinlord.antarchy.content.client.renderer.CheepRenderer::new);
// EntityRendererRegistry.register(AntarchyFabricContent.GLIMMER.get(), com.craisinlord.antarchy.content.client.renderer.GlimmerRenderer::new);
EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel);
EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel);
@@ -122,7 +125,15 @@ public final class AntarchyFabricClientBootstrap {
AntarchyFabricContent.OURANWOOD_LEAVES.get()
);
ColorProviderRegistry.BLOCK.register((state, level, pos, tintIndex) -> 0xFF4A0000, AntarchyFabricContent.ANTIWATER_BLOCK.get());
ColorProviderRegistry.BLOCK.register(
(state, level, pos, tintIndex) -> level != null && pos != null
? BiomeColors.getAverageGrassColor(level, pos)
: net.minecraft.world.level.GrassColor.getDefaultColor()
);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> FoliageColor.getDefaultColor(), AntarchyFabricContent.OURANWOOD_LEAVES_ITEM.get());
ColorProviderRegistry.ITEM.register(
(stack, tintIndex) -> net.minecraft.world.level.GrassColor.getDefaultColor()
);
}
private static void registerFluids() {
@@ -198,10 +209,11 @@ public final class AntarchyFabricClientBootstrap {
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_DOOR.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_TRAPDOOR.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout());
// BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE.get(), RenderType.cutout());
// BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE_PLANT.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DUPLICATOR_SAPLING.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ORANGE_MILKWEED.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PINK_MILKWEED.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TORCHFLOWER_BUSH.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.HUSHWEED.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CORNEA_STALK.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.FALLEN_KING_CROWN_BLOCK.get(), RenderType.cutout());
@@ -219,6 +231,8 @@ public final class AntarchyFabricClientBootstrap {
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_FIRE.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_CEILING_FIRE.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIWATER_BLOCK.get(), RenderType.translucent());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ELYTHIA_PORTAL.get(), RenderType.translucent());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.THORAXIS_PORTAL.get(), RenderType.translucent());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TRIFFID_GOO_BLOCK.get(), RenderType.translucent());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_DOOR.get(), RenderType.cutout());
BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_DOOR.get(), RenderType.cutout());
@@ -319,6 +333,7 @@ public final class AntarchyFabricClientBootstrap {
ScorpionWhipTetherRenderHandler.tick();
DorrieJumpClientHandler.tick();
HerculesBeetleClientHandler.tick();
RollyPollyClientHandler.tick();
});
BigBerthaClientHandler.register();
@@ -329,7 +344,6 @@ public final class AntarchyFabricClientBootstrap {
MogglesClientRenderer.register();
StinkySoundHandler.register();
ReverieTrailHandler.register();
HudRenderCallback.EVENT.register((guiGraphics, partialTick) -> {
DreadHudRenderer.render(guiGraphics);
ParalyzedHudRenderer.render(guiGraphics);
@@ -31,12 +31,20 @@ public final class AntarchyKeyBindings {
CATEGORY
);
public static final KeyMapping ROLLY_POLLY_ROLL = new KeyMapping(
"key.antarchy.rolly_polly_roll",
InputConstants.Type.KEYSYM,
GLFW.GLFW_KEY_R,
CATEGORY
);
private AntarchyKeyBindings() {}
public static void register() {
KeyBindingHelper.registerKeyBinding(BRUTALFLY_FLAP);
KeyBindingHelper.registerKeyBinding(DORRIE_CHARGE_JUMP);
KeyBindingHelper.registerKeyBinding(HERCULES_BEETLE_CHARGE);
KeyBindingHelper.registerKeyBinding(ROLLY_POLLY_ROLL);
}
public static boolean isBrutalflyFlapPressed() {
@@ -0,0 +1,29 @@
package com.craisinlord.antarchy.fabric.client;
import com.craisinlord.antarchy.content.entity.RollyPollyEntity;
import com.craisinlord.antarchy.content.network.RollyPollyRollPayload;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
public final class RollyPollyClientHandler {
private static boolean wasPressingRoll;
private RollyPollyClientHandler() {
}
public static void tick() {
Minecraft mc = Minecraft.getInstance();
LocalPlayer player = mc.player;
if (player == null || mc.screen != null || !(player.getVehicle() instanceof RollyPollyEntity)) {
wasPressingRoll = false;
return;
}
boolean pressingRoll = AntarchyKeyBindings.ROLLY_POLLY_ROLL.isDown();
if (pressingRoll && !wasPressingRoll) {
ClientPlayNetworking.send(new RollyPollyRollPayload());
}
wasPressingRoll = pressingRoll;
}
}
@@ -0,0 +1,37 @@
package com.craisinlord.antarchy.fabric.client.multipart;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.world.entity.Entity;
public final class MultipartClientPartLevelRegistry {
private MultipartClientPartLevelRegistry() {
}
public static void register(MultipartEntityOwner owner) {
Entity[] parts = owner.antarchy$getMultipartParts();
if (parts == null) {
return;
}
ClientLevel clientLevel = (ClientLevel) ((Entity) owner).level();
for (Entity part : parts) {
if (part != null && clientLevel.getEntity(part.getId()) != part) {
clientLevel.addEntity(part);
}
}
}
public static void unregister(MultipartEntityOwner owner) {
Entity[] parts = owner.antarchy$getMultipartParts();
if (parts == null) {
return;
}
for (Entity part : parts) {
if (part != null && !part.isRemoved()) {
part.discard();
}
}
}
}
@@ -0,0 +1,26 @@
package com.craisinlord.antarchy.fabric.client.renderer;
import com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation;
public class MultipartPartRenderer extends EntityRenderer<MultipartPartEntity> {
private static final ResourceLocation TEXTURE = ResourceLocation.withDefaultNamespace("textures/misc/white.png");
public MultipartPartRenderer(EntityRendererProvider.Context context) {
super(context);
this.shadowRadius = 0.0F;
}
@Override
public void render(MultipartPartEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) {
}
@Override
public ResourceLocation getTextureLocation(MultipartPartEntity entity) {
return TEXTURE;
}
}
@@ -0,0 +1,65 @@
package com.craisinlord.antarchy.fabric.entity.multipart;
import com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition;
public final class FabricKrakenMultipartLayout {
private static final MultipartPartDefinition[] PARTS = {
new MultipartPartDefinition(
"tentacle_mass",
14.0F,
18.0F,
0.90F,
12.0D,
13.5D,
0.00D,
true
),
new MultipartPartDefinition(
"head",
15.0F,
11.5F,
1.00F,
26.0D,
19.0D,
0.00D,
true
),
new MultipartPartDefinition(
"back_head",
13.0F,
11.0F,
1.10F,
38.0D,
20.5D,
0.00D,
true
),
new MultipartPartDefinition(
"mantle",
16.0F,
14.0F,
1.00F,
51.0D,
23.0D,
0.00D,
true
),
new MultipartPartDefinition(
"crest",
12.0F,
10.0F,
1.10F,
63.0D,
28.0D,
0.00D,
true
)
};
private FabricKrakenMultipartLayout() {
}
public static MultipartPartDefinition part(int partIndex) {
return PARTS[partIndex];
}
}
@@ -0,0 +1,199 @@
package com.craisinlord.antarchy.fabric.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.EntityType;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.Nullable;
public class MultipartPartEntity extends Entity implements MultipartPartAccess {
@Nullable
private MultipartEntityOwner owner;
private int partIndex;
@Nullable
private MultipartPartDefinition definition;
public MultipartPartEntity(EntityType<? extends MultipartPartEntity> entityType, Level level) {
super(entityType, level);
this.setNoGravity(true);
}
public MultipartPartEntity antarchy$configure(MultipartEntityOwner owner, int partIndex, MultipartPartDefinition definition) {
this.owner = owner;
this.partIndex = partIndex;
this.definition = definition;
this.refreshDimensions();
this.antarchy$syncFromParent();
return this;
}
@Nullable
public Entity antarchy$getMultipartParent() {
return this.owner == null ? null : (Entity) this.owner;
}
public int getPartIndex() {
return this.partIndex;
}
public String getPartName() {
return this.definition == null ? "" : this.definition.name();
}
public float getDamageMultiplier() {
return this.definition == null ? 1.0F : this.definition.damageMultiplier();
}
@Override
public void antarchy$syncFromParent() {
Entity parent = this.antarchy$getMultipartParent();
MultipartPartDefinition definition = this.definition;
if (parent == null || definition == 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 * definition.forwardOffset() + right.x * definition.lateralOffset(),
parent.getY() + definition.yOffset(),
parent.getZ() + forward.z * definition.forwardOffset() + right.z * definition.lateralOffset()
);
this.setPos(position.x, position.y, position.z);
this.setYRot(parent.getYRot());
this.setXRot(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.antarchy$getMultipartParent();
}
@Override
public boolean isPickable() {
return true;
}
@Override
public boolean isAttackable() {
return true;
}
@Override
public boolean isPushable() {
return false;
}
@Override
public boolean canBeCollidedWith() {
return !this.isRemoved();
}
@Override
public boolean canCollideWith(Entity entity) {
MultipartPartDefinition definition = this.definition;
if (definition == null || !definition.collisionEnabled()) {
return false;
}
Entity parent = this.antarchy$getMultipartParent();
if (entity == parent) {
return false;
}
if (entity instanceof MultipartPartEntity otherPart && otherPart.antarchy$getMultipartParent() == parent) {
return false;
}
return entity.canBeCollidedWith() && !this.isPassengerOfSameVehicle(entity);
}
@Override
public boolean shouldBeSaved() {
return false;
}
@Override
public ItemStack getPickResult() {
Entity parent = this.antarchy$getMultipartParent();
return parent == null ? ItemStack.EMPTY : parent.getPickResult();
}
@Override
public boolean hurt(DamageSource source, float amount) {
Entity parent = this.antarchy$getMultipartParent();
MultipartPartDefinition definition = this.definition;
if (parent == null || definition == null || parent.isRemoved()) {
return false;
}
if (this.level().isClientSide()) {
if (source.getEntity() instanceof Player) {
MultipartFramework.sendMultipartAttack(parent.getUUID(), this.partIndex, amount * definition.damageMultiplier());
}
return true;
}
return this.owner != null && this.owner.antarchy$hurtMultipartPart(this, source, amount * definition.damageMultiplier());
}
@Override
public boolean isInvulnerableTo(DamageSource source) {
return false;
}
@Override
public InteractionResult interactAt(Player player, Vec3 vec, InteractionHand hand) {
Entity parent = this.antarchy$getMultipartParent();
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 == null ? InteractionResult.PASS : this.owner.antarchy$interactMultipartPart(this, player, vec, hand);
}
@Override
public EntityDimensions getDimensions(Pose pose) {
MultipartPartDefinition definition = this.definition;
return definition == null ? super.getDimensions(pose) : EntityDimensions.scalable(definition.width(), definition.height());
}
@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,37 @@
package com.craisinlord.antarchy.fabric.entity.multipart;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
public final class MultipartServerPartLevelRegistry {
private MultipartServerPartLevelRegistry() {
}
public static void register(MultipartEntityOwner owner) {
Entity[] parts = owner.antarchy$getMultipartParts();
if (parts == null) {
return;
}
ServerLevel serverLevel = (ServerLevel) ((Entity) owner).level();
for (Entity part : parts) {
if (part != null && serverLevel.getEntity(part.getId()) != part) {
serverLevel.addFreshEntity(part);
}
}
}
public static void unregister(MultipartEntityOwner owner) {
Entity[] parts = owner.antarchy$getMultipartParts();
if (parts == null) {
return;
}
for (Entity part : parts) {
if (part != null && !part.isRemoved()) {
part.discard();
}
}
}
}
@@ -0,0 +1,19 @@
package com.craisinlord.antarchy.fabric.mixin.client;
import com.craisinlord.antarchy.fabric.AntarchyFabricContent;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
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(ClientPacketListener.class)
public abstract class MultipartClientSpawnMixin {
@Inject(method = "handleAddEntity", at = @At("HEAD"), cancellable = true)
private void antarchy$skipTrackedMultipartPlaceholders(ClientboundAddEntityPacket packet, CallbackInfo ci) {
if (packet.getType() == AntarchyFabricContent.KRAKEN_PART.get()) {
ci.cancel();
}
}
}
@@ -0,0 +1,34 @@
package com.craisinlord.antarchy.fabric.mixin.client;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import com.craisinlord.antarchy.fabric.client.multipart.MultipartClientPartLevelRegistry;
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)
public abstract class MultipartEntityLevelRegistryMixin {
@Inject(method = "setLevelCallback", at = @At("TAIL"))
private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) {
Entity self = (Entity) (Object) this;
if (self instanceof MultipartEntityOwner owner
&& entityInLevelCallback != EntityInLevelCallback.NULL
&& self.level().isClientSide()) {
if (owner.antarchy$getMultipartParts() == null) {
owner.antarchy$spawnMultipartParts();
}
MultipartClientPartLevelRegistry.register(owner);
}
}
@Inject(method = "setRemoved", at = @At("HEAD"))
private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) {
Entity self = (Entity) (Object) this;
if (self instanceof MultipartEntityOwner owner && self.level().isClientSide()) {
MultipartClientPartLevelRegistry.unregister(owner);
}
}
}
@@ -0,0 +1,37 @@
package com.craisinlord.antarchy.fabric.mixin.entity;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import com.craisinlord.antarchy.fabric.entity.multipart.MultipartServerPartLevelRegistry;
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 Fabric levels.
*/
public abstract class MultipartEntityLevelRegistryMixin {
@Inject(method = "setLevelCallback", at = @At("TAIL"))
private void antarchy$registerMultipartParts(EntityInLevelCallback entityInLevelCallback, CallbackInfo ci) {
Entity self = (Entity) (Object) this;
if (self instanceof MultipartEntityOwner owner
&& entityInLevelCallback != EntityInLevelCallback.NULL
&& !self.level().isClientSide()) {
if (owner.antarchy$getMultipartParts() == null) {
owner.antarchy$spawnMultipartParts();
}
MultipartServerPartLevelRegistry.register(owner);
}
}
@Inject(method = "setRemoved", at = @At("HEAD"))
private void antarchy$unregisterMultipartParts(Entity.RemovalReason removalReason, CallbackInfo ci) {
Entity self = (Entity) (Object) this;
if (self instanceof MultipartEntityOwner owner && !self.level().isClientSide()) {
MultipartServerPartLevelRegistry.unregister(owner);
}
}
}
@@ -4,6 +4,9 @@ import com.craisinlord.antarchy.content.client.BloodglassClientState;
import com.craisinlord.antarchy.content.client.BrutalflyElytraClientState;
import com.craisinlord.antarchy.content.client.ScorpionWhipTetherClientState;
import com.craisinlord.antarchy.content.client.ThoraxisWeatherClientState;
import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework;
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload;
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload;
import com.craisinlord.antarchy.content.network.*;
import com.craisinlord.antarchy.content.weather.ThoraxisWeatherKind;
import com.craisinlord.antarchy.fabric.client.BloodCrystalKatanaTrailClientState;
@@ -14,6 +17,23 @@ public final class AntarchyFabricClientNetworking {
private AntarchyFabricClientNetworking() {
}
public static void bootstrapMultipartClient() {
MultipartFramework.bootstrap(
AntarchyFabricNetworking::createMultipartPart,
new MultipartFramework.NetworkBridge() {
@Override
public void sendAttack(java.util.UUID parentId, int partIndex, float damage) {
ClientPlayNetworking.send(new MultipartAttackPayload(parentId, partIndex, damage));
}
@Override
public void sendInteract(java.util.UUID parentId, int partIndex, int handId) {
ClientPlayNetworking.send(new MultipartInteractPayload(parentId, partIndex, handId));
}
}
);
}
public static void register() {
ClientPlayNetworking.registerGlobalReceiver(GravityStatePayload.TYPE, (payload, context) ->
context.client().execute(() -> AntarchyFabricNetworking.handleGravityState(context.player(), payload)));
@@ -3,6 +3,7 @@ package com.craisinlord.antarchy.fabric.network;
import com.craisinlord.antarchy.content.entity.DiamondMinecartEntity;
import com.craisinlord.antarchy.content.client.HerculesBeetleImpactShakeClientState;
import com.craisinlord.antarchy.content.entity.multipart.MultipartEntityOwner;
import com.craisinlord.antarchy.content.entity.multipart.MultipartFramework;
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartAttackPayload;
import com.craisinlord.antarchy.content.entity.multipart.network.MultipartInteractPayload;
import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi;
@@ -19,6 +20,8 @@ import com.craisinlord.antarchy.content.entity.DorrieEntity;
import com.craisinlord.antarchy.content.network.DorrieJumpInputPayload;
import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload;
import com.craisinlord.antarchy.content.weather.ThoraxisWeatherSnapshot;
import com.craisinlord.antarchy.fabric.AntarchyFabricContent;
import com.craisinlord.antarchy.fabric.entity.multipart.MultipartPartEntity;
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
@@ -28,7 +31,6 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.ItemStack;
@@ -43,6 +45,26 @@ public final class AntarchyFabricNetworking {
registerServerReceivers();
}
public static void bootstrapMultipartCommon() {
MultipartFramework.bootstrap(
AntarchyFabricNetworking::createMultipartPart,
new MultipartFramework.NetworkBridge() {
@Override
public void sendAttack(java.util.UUID parentId, int partIndex, float damage) {
}
@Override
public void sendInteract(java.util.UUID parentId, int partIndex, int handId) {
}
}
);
}
public static MultipartPartEntity createMultipartPart(MultipartEntityOwner owner, int partIndex, com.craisinlord.antarchy.content.entity.multipart.MultipartPartDefinition spec) {
return new MultipartPartEntity(AntarchyFabricContent.KRAKEN_PART.get(), ((Entity) owner).level())
.antarchy$configure(owner, partIndex, spec);
}
private static void registerPayloadTypes() {
PayloadTypeRegistry.playS2C().register(GravityStatePayload.TYPE, GravityStatePayload.STREAM_CODEC);
PayloadTypeRegistry.playS2C().register(BloodglassStatePayload.TYPE, BloodglassStatePayload.STREAM_CODEC);
@@ -63,6 +85,7 @@ public final class AntarchyFabricNetworking {
PayloadTypeRegistry.playC2S().register(HerculesBeetleJumpInputPayload.TYPE, HerculesBeetleJumpInputPayload.STREAM_CODEC);
PayloadTypeRegistry.playC2S().register(HerculesBeetleMountedAttackPayload.TYPE, HerculesBeetleMountedAttackPayload.STREAM_CODEC);
PayloadTypeRegistry.playC2S().register(HerculesBeetleMountedChargePayload.TYPE, HerculesBeetleMountedChargePayload.STREAM_CODEC);
PayloadTypeRegistry.playC2S().register(com.craisinlord.antarchy.content.network.RollyPollyRollPayload.TYPE, com.craisinlord.antarchy.content.network.RollyPollyRollPayload.STREAM_CODEC);
PayloadTypeRegistry.playC2S().register(MultipartAttackPayload.TYPE, MultipartAttackPayload.STREAM_CODEC);
PayloadTypeRegistry.playC2S().register(MultipartInteractPayload.TYPE, MultipartInteractPayload.STREAM_CODEC);
}
@@ -90,6 +113,8 @@ public final class AntarchyFabricNetworking {
context.server().execute(() -> handleHerculesBeetleMountedAttack(context.player(), payload)));
ServerPlayNetworking.registerGlobalReceiver(HerculesBeetleMountedChargePayload.TYPE, (payload, context) ->
context.server().execute(() -> handleHerculesBeetleMountedCharge(context.player(), payload)));
ServerPlayNetworking.registerGlobalReceiver(com.craisinlord.antarchy.content.network.RollyPollyRollPayload.TYPE, (payload, context) ->
context.server().execute(() -> handleRollyPollyRoll(context.player())));
ServerPlayNetworking.registerGlobalReceiver(MultipartAttackPayload.TYPE, (payload, context) ->
context.server().execute(() -> handleMultipartAttack(context.player(), payload)));
ServerPlayNetworking.registerGlobalReceiver(MultipartInteractPayload.TYPE, (payload, context) ->
@@ -272,8 +297,7 @@ public final class AntarchyFabricNetworking {
return;
}
DamageSource source = serverPlayer.level().damageSources().playerAttack(serverPlayer);
owner.antarchy$hurtMultipartPart(part, source, payload.damage());
serverPlayer.attack(part);
}
private static void handleMultipartInteract(ServerPlayer serverPlayer, MultipartInteractPayload payload) {
@@ -370,6 +394,12 @@ public final class AntarchyFabricNetworking {
}
}
private static void handleRollyPollyRoll(ServerPlayer player) {
if (player.getVehicle() instanceof com.craisinlord.antarchy.content.entity.RollyPollyEntity rollyPolly) {
rollyPolly.handleRollToggle(player);
}
}
public static void triggerHerculesBeetleImpactShake(int durationTicks) {
HerculesBeetleImpactShakeClientState.trigger(durationTicks);
}
@@ -15,6 +15,7 @@
"BloodglassRespawnMixin",
"DreamCampfireBlockEntityMixin",
"JumpyBootsFallDamageMixin",
"entity.MultipartEntityLevelRegistryMixin",
"WoodTypeInvoker",
"infinity.RandomSpringMixin",
"infinity.PortalCreatorMixin"
@@ -24,7 +25,9 @@
"client.DuctTapeInputMixin",
"client.AntiwaterFogMixin",
"client.GravityGunMouseScrollMixin",
"client.CrossbowArmPoseMixin"
"client.CrossbowArmPoseMixin",
"client.MultipartClientSpawnMixin",
"client.MultipartEntityLevelRegistryMixin"
],
"injectors": {
"defaultRequire": 1
+2 -1
View File
@@ -33,6 +33,7 @@
"java": ">=21",
"fabric-api": "*",
"integrated_api": "*",
"geckolib": "*"
"geckolib": "*",
"sizeable_foliage": "*"
}
}