Merge beta7 into master
This commit is contained in:
commit
0db80e3cb7
335 files changed
+18289
-8157
No files matched your search
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
+16
-2
@@ -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() {
|
||||
|
||||
+29
@@ -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;
|
||||
}
|
||||
}
|
||||
+37
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
@@ -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;
|
||||
}
|
||||
}
|
||||
+65
@@ -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];
|
||||
}
|
||||
}
|
||||
+199
@@ -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) {
|
||||
}
|
||||
}
|
||||
+37
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
+34
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+20
@@ -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)));
|
||||
|
||||
+33
-3
@@ -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
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
"java": ">=21",
|
||||
"fabric-api": "*",
|
||||
"integrated_api": "*",
|
||||
"geckolib": "*"
|
||||
"geckolib": "*",
|
||||
"sizeable_foliage": "*"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user