From 69f55fc6c780b9d6303c90ac4b8040ea884bd66b Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sat, 2 Nov 2024 22:07:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=8D=E5=8A=A1=E7=AB=AF?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/mcreator/superbwarfare/ModUtils.java | 3 +++ .../superbwarfare/config/ServerConfig.java | 16 ++++++++++++++++ .../config/server/SpawnConfig.java | 18 ++++++++++++++++++ .../superbwarfare/entity/SenpaiEntity.java | 10 +--------- .../superbwarfare/init/ModEntities.java | 18 ++++++++++++------ 5 files changed, 50 insertions(+), 15 deletions(-) create mode 100644 src/main/java/net/mcreator/superbwarfare/config/ServerConfig.java create mode 100644 src/main/java/net/mcreator/superbwarfare/config/server/SpawnConfig.java diff --git a/src/main/java/net/mcreator/superbwarfare/ModUtils.java b/src/main/java/net/mcreator/superbwarfare/ModUtils.java index 496422b36..dc19d3313 100644 --- a/src/main/java/net/mcreator/superbwarfare/ModUtils.java +++ b/src/main/java/net/mcreator/superbwarfare/ModUtils.java @@ -2,6 +2,7 @@ package net.mcreator.superbwarfare; import net.mcreator.superbwarfare.config.ClientConfig; import net.mcreator.superbwarfare.config.CommonConfig; +import net.mcreator.superbwarfare.config.ServerConfig; import net.mcreator.superbwarfare.init.*; import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.network.message.*; @@ -37,6 +38,7 @@ import java.util.function.Supplier; @Mod(ModUtils.MODID) public class ModUtils { + public static final String MODID = "superbwarfare"; public static final String ATTRIBUTE_MODIFIER = "superbwarfare_attribute_modifier"; @@ -45,6 +47,7 @@ public class ModUtils { public ModUtils() { ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ClientConfig.init()); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, CommonConfig.init()); + ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ServerConfig.init()); IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); diff --git a/src/main/java/net/mcreator/superbwarfare/config/ServerConfig.java b/src/main/java/net/mcreator/superbwarfare/config/ServerConfig.java new file mode 100644 index 000000000..a44a1d7b5 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/config/ServerConfig.java @@ -0,0 +1,16 @@ +package net.mcreator.superbwarfare.config; + +import net.mcreator.superbwarfare.config.server.SpawnConfig; +import net.minecraftforge.common.ForgeConfigSpec; + +public class ServerConfig { + + public static ForgeConfigSpec init() { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + + SpawnConfig.init(builder); + + return builder.build(); + } + +} diff --git a/src/main/java/net/mcreator/superbwarfare/config/server/SpawnConfig.java b/src/main/java/net/mcreator/superbwarfare/config/server/SpawnConfig.java new file mode 100644 index 000000000..62fa4f9a5 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/config/server/SpawnConfig.java @@ -0,0 +1,18 @@ +package net.mcreator.superbwarfare.config.server; + +import net.minecraftforge.common.ForgeConfigSpec; + +public class SpawnConfig { + + public static ForgeConfigSpec.BooleanValue SPAWN_SENPAI; + + public static void init(ForgeConfigSpec.Builder builder) { + builder.push("spawn"); + + builder.comment("Set TRUE to allow Senpai to spawn naturally"); + SPAWN_SENPAI = builder.define("spawn_senpai", false); + + builder.pop(); + } + +} diff --git a/src/main/java/net/mcreator/superbwarfare/entity/SenpaiEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/SenpaiEntity.java index 2c6392d37..b077dca7e 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/SenpaiEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/SenpaiEntity.java @@ -10,7 +10,6 @@ import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; @@ -27,8 +26,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraftforge.common.DungeonHooks; import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.PlayMessages; import software.bernie.geckolib.animatable.GeoEntity; @@ -41,6 +38,7 @@ import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; public class SenpaiEntity extends Monster implements GeoEntity, AnimatedEntity { + public static final EntityDataAccessor ANIMATION = SynchedEntityData.defineId(SenpaiEntity.class, EntityDataSerializers.STRING); private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); @@ -153,12 +151,6 @@ public class SenpaiEntity extends Monster implements GeoEntity, AnimatedEntity { this.updateSwingTime(); } - public static void init() { - SpawnPlacements.register(ModEntities.SENPAI.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, - (entityType, world, reason, pos, random) -> (world.getDifficulty() != Difficulty.PEACEFUL && Monster.isDarkEnoughToSpawn(world, pos, random) && Mob.checkMobSpawnRules(entityType, world, reason, pos, random))); - DungeonHooks.addDungeonMob(ModEntities.SENPAI.get(), 180); - } - public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes() .add(Attributes.MOVEMENT_SPEED, 0.23) diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModEntities.java b/src/main/java/net/mcreator/superbwarfare/init/ModEntities.java index f16a2b1eb..334919374 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModEntities.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModEntities.java @@ -1,21 +1,24 @@ package net.mcreator.superbwarfare.init; import net.mcreator.superbwarfare.ModUtils; +import net.mcreator.superbwarfare.config.server.SpawnConfig; import net.mcreator.superbwarfare.entity.*; import net.mcreator.superbwarfare.entity.projectile.*; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MobCategory; +import net.minecraft.world.Difficulty; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.level.levelgen.Heightmap; import net.minecraftforge.event.entity.EntityAttributeCreationEvent; +import net.minecraftforge.event.entity.SpawnPlacementRegisterEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public class ModEntities { + public static final DeferredRegister> REGISTRY = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, ModUtils.MODID); public static final RegistryObject> TARGET = register("target", @@ -63,8 +66,11 @@ public class ModEntities { } @SubscribeEvent - public static void init(FMLCommonSetupEvent event) { - event.enqueueWork(SenpaiEntity::init); + public static void onRegisterSpawnPlacement(SpawnPlacementRegisterEvent event) { + event.register(ModEntities.SENPAI.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, + (entityType, world, reason, pos, random) -> (world.getDifficulty() != Difficulty.PEACEFUL && SpawnConfig.SPAWN_SENPAI.get() + && Monster.isDarkEnoughToSpawn(world, pos, random) && Mob.checkMobSpawnRules(entityType, world, reason, pos, random)), + SpawnPlacementRegisterEvent.Operation.OR); } @SubscribeEvent