Skip to content

Commit

Permalink
Added annotation: "@UniqueObject"
Browse files Browse the repository at this point in the history
Защита от дубликатов полей, которые могут быть проблемными в некоторых местах
  • Loading branch information
OldSerpskiStalker committed Oct 24, 2024
1 parent 97f6f29 commit bd2f21c
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@

import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import org.imesense.dynamicspawncontrol.ai.spider.util.event.WebAttackEvent;
import org.imesense.dynamicspawncontrol.ai.spider.util.event.OnWebAttackEvent;
import org.imesense.dynamicspawncontrol.ai.spider.util.attackweb.WebSlingerCapability;
import org.imesense.dynamicspawncontrol.ai.zombie.event.BreakTorchEvent;
import org.imesense.dynamicspawncontrol.ai.zombie.event.OnBreakTorchEvent;
import org.imesense.dynamicspawncontrol.debug.CheckDebugger;
import org.imesense.dynamicspawncontrol.gameplay.recipes.IRecipes;
import org.imesense.dynamicspawncontrol.gameplay.recipes.CraftItemWeb;
Expand Down Expand Up @@ -93,7 +93,7 @@ public DynamicSpawnControl()
* @param event Preinitialization event
*/
@Mod.EventHandler
public synchronized void preInit(FMLPreInitializationEvent event)
public synchronized void preInit(FMLPreInitializationEvent event) throws IllegalAccessException
{
//
CheckDebugger.instance = new CheckDebugger();
Expand All @@ -105,6 +105,10 @@ public synchronized void preInit(FMLPreInitializationEvent event)
Log.createLogFile(globalDirectory.getPath() + File.separator + ProjectStructure.STRUCT_FILES_DIRS.NAME_DIRECTORY, CheckDebugger.instance.IsRunDebugger);
Log.writeDataToLogFile(1, "Debugger is running: " + (CheckDebugger.instance.IsRunDebugger ? "true" : "false"));

//
UniqueField uniqueField = new UniqueField();
Log.writeDataToLogFile(0, "Object create [UniqueField]: " + uniqueField.hashCode());

//
MessageHandler.init();

Expand Down Expand Up @@ -166,8 +170,8 @@ public synchronized void init(FMLInitializationEvent event)
public synchronized void postInit(FMLPostInitializationEvent event)
{
//-' TODO: перенести это в отдельную инициализацию
MinecraftForge.EVENT_BUS.register(new WebAttackEvent());
MinecraftForge.EVENT_BUS.register(new BreakTorchEvent());
MinecraftForge.EVENT_BUS.register(new OnWebAttackEvent());
MinecraftForge.EVENT_BUS.register(new OnBreakTorchEvent());
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package org.imesense.dynamicspawncontrol;

import net.minecraft.client.Minecraft;
import org.imesense.dynamicspawncontrol.technical.customlibrary.inlineannotation.UniqueObject;

import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.Set;

/**
*
*/
public final class UniqueField
{
/**
*
*/
@UniqueObject
private final Minecraft CLIENT = Minecraft.getMinecraft();

/**
*
*/
public UniqueField() throws IllegalAccessException
{
this.validateUniqueFields(this);
}

/**
*
* @param object
*/
private void validateUniqueFields(Object object) throws IllegalAccessException
{
Set<Object> uniqueValues = new HashSet<>();
Field[] fields = object.getClass().getDeclaredFields();

for (Field field : fields)
{
if (field.isAnnotationPresent(UniqueObject.class))
{
field.setAccessible(true);

Object value = field.get(object);

if (!uniqueValues.add(value))
{
throw new IllegalStateException("Duplicate field value detected: " + field.getName());
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.imesense.dynamicspawncontrol.technical.customlibrary.inlineannotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UniqueObject
{

}

0 comments on commit bd2f21c

Please sign in to comment.