From 319e481ec89712b3f54bd3660e45c6fc0500194c Mon Sep 17 00:00:00 2001 From: OldSerpskiStalker Date: Fri, 20 Sep 2024 13:00:29 +0500 Subject: [PATCH] Fix game launch --- .../configs/ConfigDebugSingleEvents.java | 9 ++ .../single/OnDropZombieItems.java | 98 +++++++++++++++++++ .../initializer/RegisterConfigClasses.java | 27 ++++- .../initializer/RegisterGameplayClasses.java | 4 +- .../technical/proxy/ClientProxy.java | 2 +- 5 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/eventprocessor/single/OnDropZombieItems.java diff --git a/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/configs/ConfigDebugSingleEvents.java b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/configs/ConfigDebugSingleEvents.java index 8e8b8a8..205caad 100644 --- a/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/configs/ConfigDebugSingleEvents.java +++ b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/configs/ConfigDebugSingleEvents.java @@ -20,6 +20,15 @@ public class ConfigDebugSingleEvents implements IConfig */ public static boolean DebugActionPanicToIdLog = false; + /** + * + * @param nameClass + */ + public ConfigDebugSingleEvents(final String nameClass) + { + + } + /** * * @param event diff --git a/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/eventprocessor/single/OnDropZombieItems.java b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/eventprocessor/single/OnDropZombieItems.java new file mode 100644 index 0000000..9623820 --- /dev/null +++ b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/eventprocessor/single/OnDropZombieItems.java @@ -0,0 +1,98 @@ +package org.imesense.dynamicspawncontrol.technical.eventprocessor.single; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.init.Items; +import net.minecraft.inventory.EntityEquipmentSlot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.living.LivingDropsEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import org.imesense.dynamicspawncontrol.technical.configs.ConfigZombieDropItem; +import org.imesense.dynamicspawncontrol.technical.customlibrary.Log; + +import java.util.List; +import java.util.Random; + +/** + * + */ +@Mod.EventBusSubscriber +public final class OnDropZombieItems +{ + /** + * + * @param nameClass + */ + public OnDropZombieItems(final String nameClass) + { + Log.writeDataToLogFile(Log.TypeLog[0], nameClass); + } + + /** + * + * @param event + */ + @SubscribeEvent(priority = EventPriority.LOWEST) + public synchronized void onUpdateLivingDropsEvent_0(LivingDropsEvent event) + { + if (event.getEntity() instanceof EntityZombie) + { + EntityZombie zombie = (EntityZombie)event.getEntity(); + + List drops = event.getDrops(); + + addDamagedItemToDrops(zombie, drops, zombie.getItemStackFromSlot(EntityEquipmentSlot.HEAD), ConfigZombieDropItem.HeadDamageFactor); + addDamagedItemToDrops(zombie, drops, zombie.getItemStackFromSlot(EntityEquipmentSlot.CHEST), ConfigZombieDropItem.ChestDamageFactor); + addDamagedItemToDrops(zombie, drops, zombie.getItemStackFromSlot(EntityEquipmentSlot.LEGS), ConfigZombieDropItem.LegsDamageFactor); + addDamagedItemToDrops(zombie, drops, zombie.getItemStackFromSlot(EntityEquipmentSlot.FEET), ConfigZombieDropItem.FeetDamageFactor); + + addDamagedItemToDrops(zombie, drops, zombie.getHeldItemMainhand(), ConfigZombieDropItem.HandItemDamageFactor); + } + } + + /** + * + * @param _zombie + * @param _drops + * @param _originalItem + * @param damageFactor + */ + private void addDamagedItemToDrops(EntityZombie _zombie, List _drops, ItemStack _originalItem, double damageFactor) + { + if (_originalItem.getItem() != Items.AIR) + { + if (new Random().nextDouble() < ConfigZombieDropItem.BreakItem) + { + return; + } + + ItemStack damagedItem = _originalItem.copy(); + int maxDamage = damagedItem.getMaxDamage(); + + if (maxDamage > 0) + { + Random rand = new Random(); + int minDamage = (int)(maxDamage * damageFactor); + + int damageSpread = (int)(maxDamage * ConfigZombieDropItem.DamageSpreadFactor); + int randomDamage = minDamage + rand.nextInt(damageSpread); + + damagedItem.setItemDamage(randomDamage); + } + + for (EntityItem item : _drops) + { + ItemStack stack = item.getItem(); + + if (stack.isItemEqualIgnoreDurability(damagedItem)) + { + return; + } + } + + _drops.add(new EntityItem(_zombie.world, _zombie.posX, _zombie.posY, _zombie.posZ, damagedItem)); + } + } +} diff --git a/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/initializer/RegisterConfigClasses.java b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/initializer/RegisterConfigClasses.java index 69372fe..fdbd2f0 100644 --- a/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/initializer/RegisterConfigClasses.java +++ b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/initializer/RegisterConfigClasses.java @@ -42,10 +42,22 @@ public static void init(FMLPreInitializationEvent event) { try { + Log.writeDataToLogFile(Log.TypeLog[0], "---------------------------------------------"); + Log.writeDataToLogFile(Log.TypeLog[0], "Start reading class: " + configClass.getName()); + + if (!hasConstructorWithParameter(configClass, String.class)) + { + throw new NoSuchMethodException("Class " + configClass.getName() + " does not have a constructor with a String parameter."); + } + Object configInstance = configClass.getConstructor(String.class).newInstance(configClass.getSimpleName()); + ((IConfig)configInstance).init(event, configClass.getSimpleName()); - Log.writeDataToLogFile(Log.TypeLog[0], String.format("configInstance (%s)", configInstance)); + Log.writeDataToLogFile(Log.TypeLog[0], String.format("Config instance created: %s", configInstance)); + + Log.writeDataToLogFile(Log.TypeLog[0], "End reading class: " + configClass.getName()); + Log.writeDataToLogFile(Log.TypeLog[0], "---------------------------------------------"); } catch (Exception exception) { @@ -53,4 +65,17 @@ public static void init(FMLPreInitializationEvent event) } } } + + private static boolean hasConstructorWithParameter(Class clazz, Class... parameterTypes) + { + try + { + clazz.getConstructor(parameterTypes); + return true; + } + catch (NoSuchMethodException e) + { + return false; + } + } } diff --git a/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/initializer/RegisterGameplayClasses.java b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/initializer/RegisterGameplayClasses.java index 88efb5a..b98da69 100644 --- a/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/initializer/RegisterGameplayClasses.java +++ b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/initializer/RegisterGameplayClasses.java @@ -3,6 +3,7 @@ import net.minecraftforge.common.MinecraftForge; import org.imesense.dynamicspawncontrol.gameplay.events.OnUpdateTorchLogic; import org.imesense.dynamicspawncontrol.technical.customlibrary.Log; +import org.imesense.dynamicspawncontrol.technical.eventprocessor.single.OnDropZombieItems; /** * @@ -14,7 +15,8 @@ public final class RegisterGameplayClasses */ private static final Class[] EVENT_CLASSES = { - OnUpdateTorchLogic.class + OnUpdateTorchLogic.class, + OnDropZombieItems.class }; /** diff --git a/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/proxy/ClientProxy.java b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/proxy/ClientProxy.java index c38ec64..ec8b14e 100644 --- a/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/proxy/ClientProxy.java +++ b/dynamicspawncontrol-1.12.2/src/main/java/org/imesense/dynamicspawncontrol/technical/proxy/ClientProxy.java @@ -94,12 +94,12 @@ public void postInit(FMLPostInitializationEvent event) { CodeGenericUtils.checkObjectNotNull(ConfigLogFile, "ConfigLogFile").save(); CodeGenericUtils.checkObjectNotNull(ConfigGameDebugger, "ConfigGameDebugger").save(); + CodeGenericUtils.checkObjectNotNull(ConfigDebugSingleEvents, "ConfigDebugSingleEvents").save(); CodeGenericUtils.checkObjectNotNull(ConfigOreGeneratorFile, "ConfigOreGeneratorFile").save(); CodeGenericUtils.checkObjectNotNull(ConfigNights, "ConfigNights").save(); CodeGenericUtils.checkObjectNotNull(ConfigWorldTime, "ConfigWorldTime").save(); CodeGenericUtils.checkObjectNotNull(ConfigPlayer, "ConfigPlayer").save(); CodeGenericUtils.checkObjectNotNull(ConfigZombieDropItem, "ConfigZombieDropItem").save(); - CodeGenericUtils.checkObjectNotNull(ConfigDebugSingleEvents, "ConfigDebugSingleEvents").save(); } /**