First pass trying to optimise LivingUpdateEvent handlers, see issue #484
This commit is contained in:
@@ -352,14 +352,6 @@ public final class WizardryEventHandler {
|
||||
@SubscribeEvent
|
||||
public static void onLivingUpdateEvent(LivingUpdateEvent event){
|
||||
|
||||
// Experimental animation feature
|
||||
// if(event.getEntityLiving().isHandActive() && event.getEntityLiving().getActiveItemStack().getItemUseAction() == WizardryUtilities.POINT){
|
||||
// event.getEntityLiving().isSwingInProgress = true;
|
||||
// event.getEntityLiving().swingProgress = 1f;
|
||||
// event.getEntityLiving().prevSwingProgress = 1;
|
||||
// event.getEntityLiving().swingingHand = event.getEntityLiving().getActiveHand();
|
||||
// }
|
||||
|
||||
if(event.getEntityLiving().world.isRemote){
|
||||
|
||||
// Client-side continuous spell casting for NPCs
|
||||
@@ -379,10 +371,10 @@ public final class WizardryEventHandler {
|
||||
// TODO: This implementation of modifiers relies on them being accessible client-side.
|
||||
// Right now that doesn't matter because NPCs don't use modifiers, but they might in future
|
||||
((EntityLiving)event.getEntity()).getAttackTarget(), modifiers);
|
||||
|
||||
((ISpellCaster)event.getEntity()).setSpellCounter(count + 1);
|
||||
}
|
||||
}
|
||||
|
||||
((ISpellCaster)event.getEntity()).setSpellCounter(count + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -336,6 +336,10 @@ public class WizardData implements INBTSerializable<NBTTagCompound> {
|
||||
*/
|
||||
private void updateImbuedItems(){
|
||||
|
||||
// FIXME: Iterating through the entire inventory each tick is an AWFUL way of doing this, and is super-slow!
|
||||
// Change the imbuement durations map to be ItemStack -> Integer and just decrement them, adding entries
|
||||
// whenever an item with an imbuement enters the inventory and removing them when the time expires.
|
||||
|
||||
Set<Imbuement> activeImbuements = new HashSet<Imbuement>();
|
||||
|
||||
// For each item in the player's inventory
|
||||
|
||||
@@ -114,7 +114,8 @@ public class PotionContainment extends PotionMagicEffect {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onLivingUpdateEvent(LivingUpdateEvent event){
|
||||
if(event.getEntityLiving().getEntityData().hasKey(ENTITY_TAG)
|
||||
// This is LAST-RESORT CLEANUP. It does NOT need checking every tick! We always check for the actual potion anyway.
|
||||
if(event.getEntity().ticksExisted % 20 == 0 && event.getEntityLiving().getEntityData().hasKey(ENTITY_TAG)
|
||||
&& !event.getEntityLiving().isPotionActive(WizardryPotions.containment)){
|
||||
event.getEntityLiving().getEntityData().removeTag(ENTITY_TAG);
|
||||
}
|
||||
|
||||
@@ -46,9 +46,10 @@ public class PotionDecay extends PotionMagicEffect {
|
||||
// amplifier of the potion effect, and is too slow for this purpose.
|
||||
|
||||
EntityLivingBase target = event.getEntityLiving();
|
||||
|
||||
if(!target.world.isRemote && target.isPotionActive(WizardryPotions.decay) && target.onGround
|
||||
&& target.ticksExisted % Constants.DECAY_SPREAD_INTERVAL == 0){
|
||||
|
||||
// Do the timing check first, it'll cut out 95% of calls to all subsequent conditions
|
||||
if(target.ticksExisted % Constants.DECAY_SPREAD_INTERVAL == 0 && !target.world.isRemote
|
||||
&& target.isPotionActive(WizardryPotions.decay) && target.onGround){
|
||||
|
||||
List<Entity> entities = target.world.getEntitiesWithinAABBExcludingEntity(target,
|
||||
target.getEntityBoundingBox());
|
||||
|
||||
@@ -119,7 +119,8 @@ public class Intimidate extends SpellAreaEffect {
|
||||
@SubscribeEvent
|
||||
public static void onLivingUpdateEvent(LivingUpdateEvent event){
|
||||
|
||||
if(event.getEntityLiving().isPotionActive(WizardryPotions.fear)
|
||||
// No need to do this every tick either
|
||||
if(event.getEntity().ticksExisted % 50 == 0 && event.getEntityLiving().isPotionActive(WizardryPotions.fear)
|
||||
&& event.getEntityLiving() instanceof EntityCreature){
|
||||
|
||||
NBTTagCompound entityNBT = event.getEntityLiving().getEntityData();
|
||||
|
||||
@@ -196,7 +196,9 @@ public class MindControl extends SpellRay {
|
||||
// more efficient (because it only fires when the entity tries to set a target)
|
||||
// Of course, in survival this code is unlikely to be used much because the entity will always try to target the
|
||||
// player and hence will rarely have no target.
|
||||
if(event.getEntityLiving().isPotionActive(WizardryPotions.mind_control) && event.getEntityLiving() instanceof EntityLiving){
|
||||
// No need to do it every tick either!
|
||||
if(event.getEntity().ticksExisted % 50 == 0 && event.getEntityLiving().isPotionActive(WizardryPotions.mind_control)
|
||||
&& event.getEntityLiving() instanceof EntityLiving){
|
||||
|
||||
EntityLiving entity = (EntityLiving)event.getEntityLiving();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user