diff --git a/src/main/java/com/l2jserver/model/Model.java b/src/main/java/com/l2jserver/model/Model.java index 127aa8994..64041c342 100644 --- a/src/main/java/com/l2jserver/model/Model.java +++ b/src/main/java/com/l2jserver/model/Model.java @@ -83,7 +83,6 @@ public interface Model> { * database exception will occur. */ INSERT, - /** * Updates the object in the database. *

diff --git a/src/main/java/com/l2jserver/model/id/AccountID.java b/src/main/java/com/l2jserver/model/id/AccountID.java index c5e151f34..7e4c0d68c 100644 --- a/src/main/java/com/l2jserver/model/id/AccountID.java +++ b/src/main/java/com/l2jserver/model/id/AccountID.java @@ -18,10 +18,14 @@ package com.l2jserver.model.id; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; +import com.l2jserver.model.id.provider.IDProvider; /** * Each account is identified by its {@link ID}. This {@link ID} is equal to the * account username or login. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/CastleID.java b/src/main/java/com/l2jserver/model/id/CastleID.java index edf86a354..1b98bd7a8 100644 --- a/src/main/java/com/l2jserver/model/id/CastleID.java +++ b/src/main/java/com/l2jserver/model/id/CastleID.java @@ -18,9 +18,13 @@ package com.l2jserver.model.id; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; +import com.l2jserver.model.id.provider.IDProvider; /** * Each {@link Castle} is identified by an {@link ID}. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/ChatMessageID.java b/src/main/java/com/l2jserver/model/id/ChatMessageID.java index b95ec4070..604e808ab 100644 --- a/src/main/java/com/l2jserver/model/id/ChatMessageID.java +++ b/src/main/java/com/l2jserver/model/id/ChatMessageID.java @@ -18,10 +18,14 @@ package com.l2jserver.model.id; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.server.ChatMessage; /** * Each {@link ChatMessage} log entry is identified by an {@link ID}. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/FortID.java b/src/main/java/com/l2jserver/model/id/FortID.java index 766556f4b..fdfa46c40 100644 --- a/src/main/java/com/l2jserver/model/id/FortID.java +++ b/src/main/java/com/l2jserver/model/id/FortID.java @@ -19,9 +19,13 @@ package com.l2jserver.model.id; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.l2jserver.model.game.Fort; +import com.l2jserver.model.id.provider.IDProvider; /** * Each {@link Fort} is identified by an {@link ID}. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/FriendID.java b/src/main/java/com/l2jserver/model/id/FriendID.java index 4d3ced80f..da54c6dfa 100644 --- a/src/main/java/com/l2jserver/model/id/FriendID.java +++ b/src/main/java/com/l2jserver/model/id/FriendID.java @@ -21,9 +21,13 @@ import com.google.inject.assistedinject.Assisted; import com.l2jserver.model.game.CharacterFriend; import com.l2jserver.model.id.compound.AbstractCompoundID; import com.l2jserver.model.id.object.CharacterID; +import com.l2jserver.model.id.provider.IDProvider; /** * Each {@link CharacterFriend} is identified by an {@link ID}. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/ObjectID.java b/src/main/java/com/l2jserver/model/id/ObjectID.java index dfc507d04..faad8394e 100644 --- a/src/main/java/com/l2jserver/model/id/ObjectID.java +++ b/src/main/java/com/l2jserver/model/id/ObjectID.java @@ -25,6 +25,9 @@ import com.l2jserver.model.world.WorldObject; * an {@link IDProvider}. The {@link ObjectID} provides a facility * {@link #getObject() method} that allows easily fetch this object from * database without the need to directly use DAOs. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel * diff --git a/src/main/java/com/l2jserver/model/id/ShortcutID.java b/src/main/java/com/l2jserver/model/id/ShortcutID.java index b3452c308..b450cf0ab 100644 --- a/src/main/java/com/l2jserver/model/id/ShortcutID.java +++ b/src/main/java/com/l2jserver/model/id/ShortcutID.java @@ -22,10 +22,14 @@ import com.l2jserver.model.game.Shortcut; import com.l2jserver.model.id.compound.AbstractCompoundID; import com.l2jserver.model.id.object.CharacterID; import com.l2jserver.model.id.object.ItemID; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.id.template.SkillTemplateID; /** * Each {@link Shortcut} is identified by an {@link ID}. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/SkillID.java b/src/main/java/com/l2jserver/model/id/SkillID.java index e7fdc304d..98c27c537 100644 --- a/src/main/java/com/l2jserver/model/id/SkillID.java +++ b/src/main/java/com/l2jserver/model/id/SkillID.java @@ -21,10 +21,14 @@ import com.google.inject.assistedinject.Assisted; import com.l2jserver.model.game.CharacterFriend; import com.l2jserver.model.id.compound.AbstractCompoundID; import com.l2jserver.model.id.object.ActorID; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.id.template.SkillTemplateID; /** * Each {@link CharacterFriend} is identified by an {@link ID}. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/TemplateID.java b/src/main/java/com/l2jserver/model/id/TemplateID.java index 30e393420..920c54856 100644 --- a/src/main/java/com/l2jserver/model/id/TemplateID.java +++ b/src/main/java/com/l2jserver/model/id/TemplateID.java @@ -19,11 +19,15 @@ package com.l2jserver.model.id; import java.lang.ref.Reference; import java.lang.ref.SoftReference; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.template.Template; /** * Templates IDs, different from {@link ObjectID}s, can be repeated and are * defined in the template class. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/object/ActorID.java b/src/main/java/com/l2jserver/model/id/object/ActorID.java index 6c0e32f35..d9f136671 100644 --- a/src/main/java/com/l2jserver/model/id/object/ActorID.java +++ b/src/main/java/com/l2jserver/model/id/object/ActorID.java @@ -19,10 +19,14 @@ package com.l2jserver.model.id.object; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.l2jserver.model.id.ObjectID; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.world.Actor; /** * An {@link ObjectID} instance representing an {@link Actor} object + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel * @param diff --git a/src/main/java/com/l2jserver/model/id/object/CharacterID.java b/src/main/java/com/l2jserver/model/id/object/CharacterID.java index 9911df3a7..0dadad1af 100644 --- a/src/main/java/com/l2jserver/model/id/object/CharacterID.java +++ b/src/main/java/com/l2jserver/model/id/object/CharacterID.java @@ -20,10 +20,14 @@ import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.l2jserver.db.dao.CharacterDAO; import com.l2jserver.model.id.ObjectID; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.world.L2Character; /** * An {@link ObjectID} instance representing an {@link L2Character} object + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/object/ClanID.java b/src/main/java/com/l2jserver/model/id/object/ClanID.java index 994577e5a..f4703b269 100644 --- a/src/main/java/com/l2jserver/model/id/object/ClanID.java +++ b/src/main/java/com/l2jserver/model/id/object/ClanID.java @@ -20,10 +20,14 @@ import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.l2jserver.db.dao.ClanDAO; import com.l2jserver.model.id.ObjectID; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.world.Clan; /** * An {@link ObjectID} instance representing an {@link Clan} object + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/object/ItemID.java b/src/main/java/com/l2jserver/model/id/object/ItemID.java index 6e441c782..e62687496 100644 --- a/src/main/java/com/l2jserver/model/id/object/ItemID.java +++ b/src/main/java/com/l2jserver/model/id/object/ItemID.java @@ -20,10 +20,14 @@ import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.l2jserver.db.dao.ItemDAO; import com.l2jserver.model.id.ObjectID; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.world.Item; /** * An {@link ObjectID} instance representing an {@link Item} object + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/object/NPCID.java b/src/main/java/com/l2jserver/model/id/object/NPCID.java index d9b2f3f33..782835e7c 100644 --- a/src/main/java/com/l2jserver/model/id/object/NPCID.java +++ b/src/main/java/com/l2jserver/model/id/object/NPCID.java @@ -19,6 +19,7 @@ package com.l2jserver.model.id.object; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.l2jserver.model.id.ObjectID; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.world.NPC; import com.l2jserver.service.database.DataAccessObject; import com.l2jserver.service.game.world.WorldService; @@ -27,6 +28,9 @@ import com.l2jserver.service.game.world.WorldService; * An {@link ObjectID} instance representing an {@link NPC} object. Since NPC * instances are stores in run-time only, the search is performed in the * {@link WorldService} instead of using a {@link DataAccessObject}. + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/object/PetID.java b/src/main/java/com/l2jserver/model/id/object/PetID.java index 448921a55..d393e2be4 100644 --- a/src/main/java/com/l2jserver/model/id/object/PetID.java +++ b/src/main/java/com/l2jserver/model/id/object/PetID.java @@ -19,10 +19,14 @@ package com.l2jserver.model.id.object; import com.google.inject.Inject; import com.l2jserver.db.dao.PetDAO; import com.l2jserver.model.id.ObjectID; +import com.l2jserver.model.id.provider.IDProvider; import com.l2jserver.model.world.Pet; /** * An {@link ObjectID} instance representing an {@link Pet} object + *

+ * Please, do not directly instantiate this class, use an {@link IDProvider} + * instead. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/provider/IDProvider.java b/src/main/java/com/l2jserver/model/id/provider/IDProvider.java index 8b71e525c..9033771d7 100644 --- a/src/main/java/com/l2jserver/model/id/provider/IDProvider.java +++ b/src/main/java/com/l2jserver/model/id/provider/IDProvider.java @@ -19,8 +19,17 @@ package com.l2jserver.model.id.provider; import com.l2jserver.model.id.ID; /** - * The ID factory is used to create instances of IDs. It will automatically make - * sure the ID is free before allocating it. + * ID objects should never be directly instantiated and an provider + * implementation must be used to create and generate them. + *

+ * + * The ID provider is used to create instances of IDs. It will automatically + * make sure the ID is free before allocating it. + *

+ * The provider will also make sure only a single instance for each raw ID + * exits, that is for any given ID instance for raw value 1 only a single + * object will be created and following calls will always return the same + * object. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/model/id/provider/IDProviderModule.java b/src/main/java/com/l2jserver/model/id/provider/IDProviderModule.java index ef1d380fc..76a31049a 100644 --- a/src/main/java/com/l2jserver/model/id/provider/IDProviderModule.java +++ b/src/main/java/com/l2jserver/model/id/provider/IDProviderModule.java @@ -70,6 +70,7 @@ public class IDProviderModule extends AbstractModule { install(new FactoryModuleBuilder().build(AccountIDProvider.class)); install(new FactoryModuleBuilder().build(FortIDProvider.class)); install(new FactoryModuleBuilder().build(FriendIDProvider.class)); + install(new FactoryModuleBuilder().build(ChatMessageIDProvider.class)); // TEMPLATE IDS install(new FactoryModuleBuilder().build(ItemTemplateIDProvider.class)); diff --git a/src/main/java/com/l2jserver/service/game/clan/ClanService.java b/src/main/java/com/l2jserver/service/game/clan/ClanService.java index 7c7c01833..175443937 100644 --- a/src/main/java/com/l2jserver/service/game/clan/ClanService.java +++ b/src/main/java/com/l2jserver/service/game/clan/ClanService.java @@ -17,6 +17,7 @@ package com.l2jserver.service.game.clan; import com.l2jserver.model.world.Clan; +import com.l2jserver.model.world.L2Character; import com.l2jserver.service.Service; /** @@ -25,5 +26,7 @@ import com.l2jserver.service.Service; * @author Rogiel */ public interface ClanService extends Service { + void join(Clan clan, L2Character character, L2Character inviter); + void leave(Clan clan, L2Character character); } diff --git a/src/main/java/com/l2jserver/service/game/clan/FortService.java b/src/main/java/com/l2jserver/service/game/clan/FortService.java index 553b7e639..d5fa8e076 100644 --- a/src/main/java/com/l2jserver/service/game/clan/FortService.java +++ b/src/main/java/com/l2jserver/service/game/clan/FortService.java @@ -16,10 +16,11 @@ */ package com.l2jserver.service.game.clan; +import com.l2jserver.model.game.Fort; import com.l2jserver.service.Service; /** - * This service manages Fort instances. + * This service manages {@link Fort} instances. * * @author Rogiel */ diff --git a/src/main/java/com/l2jserver/service/game/world/filter/impl/RangeFilter.java b/src/main/java/com/l2jserver/service/game/world/filter/impl/RangeFilter.java index 2dd5a99d1..1a6b5b096 100644 --- a/src/main/java/com/l2jserver/service/game/world/filter/impl/RangeFilter.java +++ b/src/main/java/com/l2jserver/service/game/world/filter/impl/RangeFilter.java @@ -16,6 +16,8 @@ */ package com.l2jserver.service.game.world.filter.impl; +import org.apache.commons.math.util.FastMath; + import com.google.common.base.Preconditions; import com.l2jserver.model.world.PositionableObject; import com.l2jserver.service.game.world.filter.WorldObjectFilter; @@ -45,16 +47,30 @@ public class RangeFilter implements WorldObjectFilter { */ public RangeFilter(final PositionableObject object, final int range) { Preconditions.checkNotNull(object, "object"); - Preconditions.checkState(range >= 0, "range < 0"); + Preconditions.checkState(range >= 0, "negative range"); this.object = object; - this.range = Math.pow(range, 2); + this.range = range; } @Override public boolean accept(PositionableObject other) { if (other == null) return false; - - return other.getPosition().getDistanceSquared(object.getPosition()) <= range; + + final double dx = FastMath.abs(object.getPoint().getX() + - other.getPoint().getX()); + final double dy = FastMath.abs(object.getPoint().getY() + - other.getPoint().getY()); + final double dz = FastMath.abs(object.getPoint().getZ() + - other.getPoint().getZ()); + + if (dx > range) + return false; + if (dy > range) + return false; + if (dz > range) + return false; + + return true; } } diff --git a/src/main/java/com/l2jserver/service/game/world/filter/impl/RangePointFilter.java b/src/main/java/com/l2jserver/service/game/world/filter/impl/RangePointFilter.java index cb3fbf1d5..fc318439c 100644 --- a/src/main/java/com/l2jserver/service/game/world/filter/impl/RangePointFilter.java +++ b/src/main/java/com/l2jserver/service/game/world/filter/impl/RangePointFilter.java @@ -37,10 +37,6 @@ public class RangePointFilter implements WorldObjectFilter { * The desired maximum distance of the object */ private final double range; - /** - * The range multiplied by two - */ - private final double doubleRange; /** * Creates a new instance @@ -55,7 +51,6 @@ public class RangePointFilter implements WorldObjectFilter { Preconditions.checkState(range >= 0, "range < 0"); this.point = point; this.range = Math.pow(range, 2); - this.doubleRange = range * 2; } @Override @@ -66,13 +61,13 @@ public class RangePointFilter implements WorldObjectFilter { final double dy = FastMath.abs(point.getY() - other.getPoint().getY()); final double dz = FastMath.abs(point.getZ() - other.getPoint().getZ()); - if (dx > doubleRange) + if (dx > range) return false; - if (dy > doubleRange) + if (dy > range) return false; - if (dz > doubleRange) + if (dz > range) return false; - return ((dx * dx) + (dy * dy) + (dz * dz)) <= range; + return true; } } diff --git a/src/main/java/com/l2jserver/util/ClassUtils.java b/src/main/java/com/l2jserver/util/ClassUtils.java index 35eaa9ea0..05c977423 100644 --- a/src/main/java/com/l2jserver/util/ClassUtils.java +++ b/src/main/java/com/l2jserver/util/ClassUtils.java @@ -25,7 +25,7 @@ public class ClassUtils { /** * Return true if class a is either equivalent to class b, or if class a is * a subclass of class b, i.e. if a either "extends" or "implements" b. Note - * tht either or both "Class" objects may represent interfaces. + * that either or both "Class" objects may represent interfaces. * * @param a * class @@ -35,7 +35,7 @@ public class ClassUtils { */ public static boolean isSubclass(Class a, Class b) { // We rely on the fact that for any given java class or - // primtitive type there is a unqiue Class object, so + // primitive type there is a unique Class object, so // we can use object equivalence in the comparisons. if (a == b) { return true;