From 5c5ab8c3dc7eede338c2bb99d31598bebb5a5e3f Mon Sep 17 00:00:00 2001 From: Jenny Date: Tue, 11 Feb 2025 17:45:58 +0100 Subject: [PATCH] more config options + fix prev. commit breaking arrows --- gradle.properties | 2 +- .../EnhancedExplosives.java | 8 ++-- .../config/ConfigCommon.java | 21 ---------- .../config/ConfigServer.java | 28 ++++++++++++++ .../entities/arrows/baseArrow.java | 6 +-- .../entities/arrows/carpetArrowPart.java | 6 +-- .../entities/arrows/claymoreArrow.java | 3 +- .../entities/arrows/tunnelArrow.java | 2 - .../entities/tnt/homingPrimedTNT.java | 38 ++++++++++++++++--- 9 files changed, 72 insertions(+), 42 deletions(-) delete mode 100644 src/main/java/com/jenny/enhancedexplosives/config/ConfigCommon.java create mode 100644 src/main/java/com/jenny/enhancedexplosives/config/ConfigServer.java diff --git a/gradle.properties b/gradle.properties index bc0f8e1..5ed9d7f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,7 +38,7 @@ mod_name=Enhanced Explosives # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=0.12.1 +mod_version=0.13.0 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/com/jenny/enhancedexplosives/EnhancedExplosives.java b/src/main/java/com/jenny/enhancedexplosives/EnhancedExplosives.java index d4c86c0..de12b07 100644 --- a/src/main/java/com/jenny/enhancedexplosives/EnhancedExplosives.java +++ b/src/main/java/com/jenny/enhancedexplosives/EnhancedExplosives.java @@ -2,7 +2,7 @@ package com.jenny.enhancedexplosives; import com.jenny.enhancedexplosives.blocks.blocks; import com.jenny.enhancedexplosives.config.ConfigClient; -import com.jenny.enhancedexplosives.config.ConfigCommon; +import com.jenny.enhancedexplosives.config.ConfigServer; import com.jenny.enhancedexplosives.entities.entities; import com.jenny.enhancedexplosives.items.items; import com.jenny.enhancedexplosives.particles.particles; @@ -41,8 +41,8 @@ public class EnhancedExplosives { // Register ourselves for server and other game events we are interested in MinecraftForge.EVENT_BUS.register(this); - ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ConfigClient.SPEC, "EnhancedExplosives-client.toml"); - ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ConfigCommon.SPEC, "EnhancedExplosives-common.toml"); + ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ConfigClient.SPEC, "enhancedexplosives-client.toml"); + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ConfigServer.SPEC, "enhancedexplosives-server.toml"); } private void commonSetup(final FMLCommonSetupEvent event) { @@ -59,10 +59,8 @@ public class EnhancedExplosives { @Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) public static class ClientModEvents { - @SuppressWarnings("removal") @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { - ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ConfigClient.SPEC); entities.registerRenderers(); } } diff --git a/src/main/java/com/jenny/enhancedexplosives/config/ConfigCommon.java b/src/main/java/com/jenny/enhancedexplosives/config/ConfigCommon.java deleted file mode 100644 index 0ca52d4..0000000 --- a/src/main/java/com/jenny/enhancedexplosives/config/ConfigCommon.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.jenny.enhancedexplosives.config; - -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.config.ModConfigEvent; - -import static com.jenny.enhancedexplosives.EnhancedExplosives.MODID; - -@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD) -public class ConfigCommon { - private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder(); - - public static final ForgeConfigSpec SPEC = BUILDER.build(); - - - @SubscribeEvent - static void onLoad(final ModConfigEvent event) - { - } -} diff --git a/src/main/java/com/jenny/enhancedexplosives/config/ConfigServer.java b/src/main/java/com/jenny/enhancedexplosives/config/ConfigServer.java new file mode 100644 index 0000000..1f83da9 --- /dev/null +++ b/src/main/java/com/jenny/enhancedexplosives/config/ConfigServer.java @@ -0,0 +1,28 @@ +package com.jenny.enhancedexplosives.config; + +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.fml.common.Mod; + +import static com.jenny.enhancedexplosives.EnhancedExplosives.MODID; + +@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +public class ConfigServer { + private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder(); + public static final ForgeConfigSpec SPEC; + + public static final ForgeConfigSpec.ConfigValue claymoreInstantDespawn; + public static final ForgeConfigSpec.ConfigValue homingAtPlayers; + public static final ForgeConfigSpec.ConfigValue carpetCompactDetonation; + + + static { + claymoreInstantDespawn = BUILDER.comment("Claymore arrows despawn instantly upon hitting a surface") + .define("claymore_instant_arrow_despawn", false); + homingAtPlayers = BUILDER.comment("Homing TNTs are allowed to follow players") + .define("homing_tnt_target_players", true); + carpetCompactDetonation = BUILDER.comment("Carpet Arrow TNTs explode upon explosion damage; This reduces spread") + .define("carpet_arrow_compact_detonation", true); + + SPEC = BUILDER.build(); + } +} diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/baseArrow.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/baseArrow.java index a9d86e1..720077c 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/baseArrow.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/baseArrow.java @@ -15,11 +15,11 @@ public class baseArrow extends AbstractArrow { super(pEntityType, pLevel); } - public baseArrow(Level pLevel, double pX, double pY, double pZ, EntityType pEntityType) { - super(pEntityType, pX, pY, pZ, pLevel); + public baseArrow(Level pLevel, LivingEntity pShooter, EntityType pEntityType) { + super(pEntityType, pShooter, pLevel); } - public baseArrow(Level pLevel, LivingEntity pShooter, EntityType pEntityType) { + public baseArrow(Level pLevel, EntityType pEntityType) { super(pEntityType, pLevel); } diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/carpetArrowPart.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/carpetArrowPart.java index 0226ee4..32b58b5 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/carpetArrowPart.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/carpetArrowPart.java @@ -1,11 +1,11 @@ package com.jenny.enhancedexplosives.entities.arrows; import com.jenny.enhancedexplosives.config.ConfigClient; +import com.jenny.enhancedexplosives.config.ConfigServer; import com.jenny.enhancedexplosives.entities.entities; import com.jenny.enhancedexplosives.items.items; import com.jenny.enhancedexplosives.particles.particles; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.damagesource.DamageType; import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -20,13 +20,13 @@ public class carpetArrowPart extends baseArrow { } public carpetArrowPart(Level pLevel, LivingEntity pShooter) { - super(pLevel, pShooter, entities.ARROW_CARPET_PART.get()); + super(pLevel, entities.ARROW_CARPET_PART.get()); } @Override public void tick() { super.tick(); - if (this.inGround || this.hurtMarked) { + if (this.inGround || (this.hurtMarked && !this.level().isClientSide && ConfigServer.carpetCompactDetonation.get())) { explode(); } } diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/claymoreArrow.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/claymoreArrow.java index 97780d8..edbaf85 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/claymoreArrow.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/claymoreArrow.java @@ -1,5 +1,6 @@ package com.jenny.enhancedexplosives.entities.arrows; +import com.jenny.enhancedexplosives.config.ConfigServer; import com.jenny.enhancedexplosives.entities.entities; import com.jenny.enhancedexplosives.items.items; import net.minecraft.world.entity.EntityType; @@ -9,7 +10,7 @@ import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; public class claymoreArrow extends baseArrow{ - private final int r = level().isClientSide ? 0 : level().getRandom().nextInt(0, 20); + private final int r = level().isClientSide ? 0 : (ConfigServer.claymoreInstantDespawn.get() ? -20 : level().getRandom().nextInt(0, 20)); public claymoreArrow(EntityType pEntityType, Level pLevel) { super(pEntityType, pLevel); diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tunnelArrow.java b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tunnelArrow.java index 42fd70d..ac3bf3f 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tunnelArrow.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/arrows/tunnelArrow.java @@ -43,11 +43,9 @@ public class tunnelArrow extends baseArrow{ } protected void explode() { - // sync(); Vec3 rot = getTargetVec( - getXRot(), - getYRot(), 0); for (int i = 0; i < explosionCount; i++) { Vec3 pos = position().add(rot.multiply(i * spacing, i * spacing, i * spacing)); - System.out.println(level().isClientSide + "|" + i + "|" + pos + "|" + getXRot() + "|" + getYRot()); level().explode(this, pos.x, pos.y, pos.z, power, Level.ExplosionInteraction.TNT); } diff --git a/src/main/java/com/jenny/enhancedexplosives/entities/tnt/homingPrimedTNT.java b/src/main/java/com/jenny/enhancedexplosives/entities/tnt/homingPrimedTNT.java index 321f3ce..4252a83 100644 --- a/src/main/java/com/jenny/enhancedexplosives/entities/tnt/homingPrimedTNT.java +++ b/src/main/java/com/jenny/enhancedexplosives/entities/tnt/homingPrimedTNT.java @@ -1,23 +1,25 @@ package com.jenny.enhancedexplosives.entities.tnt; import com.jenny.enhancedexplosives.blocks.blocks; -import com.jenny.enhancedexplosives.entities.entities; import com.jenny.enhancedexplosives.config.ConfigClient; - -import net.minecraft.core.BlockPos; +import com.jenny.enhancedexplosives.config.ConfigServer; +import com.jenny.enhancedexplosives.entities.entities; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; -import net.minecraft.world.entity.*; -import net.minecraft.world.entity.ai.targeting.TargetingConditions; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; public class homingPrimedTNT extends basePrimedTNT { private static final EntityDataAccessor DATA_SPEED_ID = SynchedEntityData.defineId(homingPrimedTNT.class, EntityDataSerializers.FLOAT); @@ -51,10 +53,34 @@ public class homingPrimedTNT extends basePrimedTNT { } public void findTarget() { + target = closestEntity(getEntities()); + } + + private LivingEntity closestEntity(List entities) { + double dist = Double.MAX_VALUE; + LivingEntity target = null; + for (LivingEntity e : entities) { + double newDist = e.position().distanceTo(position()); + if (newDist < dist) { + target = e; + dist = newDist; + } + } + return target; + } + + protected List getEntities() { + List ret_list = new ArrayList<>(); Vec3 corner1 = this.position().subtract(15, 15, 15); Vec3 corner2 = this.position().add(15, 15, 15); AABB boundingBox = new AABB(corner1, corner2); - target = this.level().getNearestEntity(LivingEntity.class, TargetingConditions.forNonCombat(), null, this.getX(), this.getY(), this.getZ(), boundingBox); + + for (LivingEntity entity : level().getEntitiesOfClass(LivingEntity.class, boundingBox)) { + if (level().getPlayerByUUID(entity.getUUID()) == null || ConfigServer.homingAtPlayers.get()) { // prevent aiming at player if config says so + ret_list.add(entity); + } + } + return ret_list; } @Override