Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 4 additions & 9 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
<dependency>
<groupId>com.skadistats</groupId>
<artifactId>clarity</artifactId>
<version>3.1.3</version>
<version>4.0.0</version>
</dependency>

<dependency>
Expand Down Expand Up @@ -77,18 +77,13 @@
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>opendota.Main</mainClass>
</transformer>
<transformer implementation="org.atteo.classindex.ClassIndexTransformer" />
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/clarity/providers.txt</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.atteo.classindex</groupId>
<artifactId>classindex-transformer</artifactId>
<version>3.4</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
Expand Down
23 changes: 19 additions & 4 deletions src/main/java/opendota/Parse.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.gson.Gson;
import com.google.protobuf.GeneratedMessage;
import skadistats.clarity.io.Util;
import skadistats.clarity.model.DTClass;
import skadistats.clarity.model.Entity;
import skadistats.clarity.model.FieldPath;
import skadistats.clarity.model.StringTable;
Expand All @@ -25,7 +26,7 @@
import skadistats.clarity.wire.dota.common.proto.DOTAUserMessages.CDOTAUserMsg_ChatWheel;
import skadistats.clarity.wire.dota.common.proto.DOTAUserMessages.CDOTAUserMsg_LocationPing;
import skadistats.clarity.wire.dota.common.proto.DOTAUserMessages.CDOTAUserMsg_SpectatorPlayerUnitOrders;
import skadistats.clarity.wire.dota.common.proto.DOTAUserMessages.DOTA_COMBATLOG_TYPES;
import skadistats.clarity.wire.dota.common.proto.DOTACombatLog.DOTA_COMBATLOG_TYPES;
import skadistats.clarity.wire.dota.s2.proto.DOTAS2GcMessagesCommon.CMsgDOTAMatch;
import skadistats.clarity.wire.shared.s1.proto.S1UserMessages.CUserMsg_SayText2;
import skadistats.clarity.wire.shared.s2.proto.S2UserMessages.CUserMessageSayText2;
Expand Down Expand Up @@ -941,6 +942,9 @@ private Integer getAbilityEntityStringTableIndex(Entity e) {
return idx;
}

private final Object fpAbsent = new Object();
private final IdentityHashMap<DTClass, HashMap<String, Object>> fpCache = new IdentityHashMap<>();

public <T> T getEntityProperty(Entity e, String property, Integer idx) {
try {
if (e == null) {
Expand All @@ -949,11 +953,22 @@ public <T> T getEntityProperty(Entity e, String property, Integer idx) {
if (idx != null) {
property = property.replace("%i", Util.arrayIdxToString(idx));
}
FieldPath fp = e.getDtClass().getFieldPathForName(property);
if (fp == null) {
DTClass dt = e.getDtClass();
HashMap<String, Object> perClass = fpCache.get(dt);
if (perClass == null) {
perClass = new HashMap<>();
fpCache.put(dt, perClass);
}
Object cached = perClass.get(property);
if (cached == null) {
FieldPath resolved = dt.getFieldPathForName(property);
cached = resolved == null ? fpAbsent : resolved;
perClass.put(property, cached);
}
if (cached == fpAbsent) {
return null;
}
return e.getPropertyForFieldPath(fp);
return e.getPropertyForFieldPath((FieldPath) cached);
} catch (Exception ex) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.util.Set;

import skadistats.clarity.model.CombatLogEntry;
import skadistats.clarity.wire.dota.common.proto.DOTAUserMessages.DOTA_COMBATLOG_TYPES;
import skadistats.clarity.wire.dota.common.proto.DOTACombatLog.DOTA_COMBATLOG_TYPES;

public class GreevilsGreedVisitor implements Visitor<Integer> {

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/opendota/combatlogvisitors/TrackVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import java.util.HashMap;

import skadistats.clarity.model.CombatLogEntry;
import skadistats.clarity.wire.dota.common.proto.DOTAUserMessages.DOTA_COMBATLOG_TYPES;
import skadistats.clarity.wire.dota.common.proto.DOTACombatLog.DOTA_COMBATLOG_TYPES;

public class TrackVisitor implements Visitor<TrackVisitor.TrackStatus> {

Expand Down
15 changes: 12 additions & 3 deletions src/main/java/opendota/processors/warding/OnWardExpired.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package opendota.processors.warding;

import skadistats.clarity.event.EventBase;
import skadistats.clarity.event.GenerateEvent;
import skadistats.clarity.event.UsagePointMarker;
import skadistats.clarity.event.UsagePointType;
import skadistats.clarity.model.Entity;
Expand All @@ -11,7 +13,14 @@

@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
@UsagePointMarker(value = UsagePointType.EVENT_LISTENER, parameterClasses = { Entity.class })
public @interface OnWardExpired {
}
@UsagePointMarker(value = UsagePointType.EVENT_LISTENER)
@GenerateEvent
public @interface OnWardExpired {
interface Listener {
void invoke(Entity e);
}

interface Event extends EventBase {
void raise(Entity e);
}
}
15 changes: 12 additions & 3 deletions src/main/java/opendota/processors/warding/OnWardKilled.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package opendota.processors.warding;

import skadistats.clarity.event.EventBase;
import skadistats.clarity.event.GenerateEvent;
import skadistats.clarity.event.UsagePointMarker;
import skadistats.clarity.event.UsagePointType;
import skadistats.clarity.model.Entity;
Expand All @@ -11,7 +13,14 @@

@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
@UsagePointMarker(value = UsagePointType.EVENT_LISTENER, parameterClasses = { Entity.class, String.class })
public @interface OnWardKilled {
}
@UsagePointMarker(value = UsagePointType.EVENT_LISTENER)
@GenerateEvent
public @interface OnWardKilled {
interface Listener {
void invoke(Entity e, String killerHeroName);
}

interface Event extends EventBase {
void raise(Entity e, String killerHeroName);
}
}
15 changes: 12 additions & 3 deletions src/main/java/opendota/processors/warding/OnWardPlaced.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package opendota.processors.warding;

import skadistats.clarity.event.EventBase;
import skadistats.clarity.event.GenerateEvent;
import skadistats.clarity.event.UsagePointMarker;
import skadistats.clarity.event.UsagePointType;
import skadistats.clarity.model.Entity;
Expand All @@ -11,7 +13,14 @@

@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
@UsagePointMarker(value = UsagePointType.EVENT_LISTENER, parameterClasses = { Entity.class })
public @interface OnWardPlaced {
}
@UsagePointMarker(value = UsagePointType.EVENT_LISTENER)
@GenerateEvent
public @interface OnWardPlaced {
interface Listener {
void invoke(Entity e);
}

interface Event extends EventBase {
void raise(Entity e);
}
}
20 changes: 10 additions & 10 deletions src/main/java/opendota/processors/warding/Wards.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import skadistats.clarity.processor.gameevents.OnCombatLogEntry;
import skadistats.clarity.processor.reader.OnTickEnd;
import skadistats.clarity.processor.runner.Context;
import skadistats.clarity.wire.dota.common.proto.DOTAUserMessages;
import skadistats.clarity.wire.dota.common.proto.DOTACombatLog;

/**
* @author micaelbergeron
Expand Down Expand Up @@ -56,9 +56,9 @@ public class Wards {
private final Map<String, Queue<String>> wardKillersByWardClass = new HashMap<>();
private Queue<ProcessEntityCommand> toProcess = new ArrayDeque<>();

private Event<OnWardKilled> evKilled;
private Event<OnWardExpired> evExpired;
private Event<OnWardPlaced> evPlaced;
private OnWardKilled.Event evKilled;
private OnWardExpired.Event evExpired;
private OnWardPlaced.Event evPlaced;

private class ProcessEntityCommand {

Expand All @@ -73,17 +73,17 @@ public ProcessEntityCommand(Entity e, FieldPath p) {

@Initializer(OnWardKilled.class)
public void initOnWardKilled(final Context ctx, final EventListener<OnWardKilled> listener) {
evKilled = ctx.createEvent(OnWardKilled.class, Entity.class, String.class);
evKilled = (OnWardKilled.Event) ctx.createEvent(OnWardKilled.class);
}

@Initializer(OnWardExpired.class)
public void initOnWardExpired(final Context ctx, final EventListener<OnWardExpired> listener) {
evExpired = ctx.createEvent(OnWardExpired.class, Entity.class);
evExpired = (OnWardExpired.Event) ctx.createEvent(OnWardExpired.class);
}

@Initializer(OnWardPlaced.class)
public void initOnWardPlaced(final Context ctx, final EventListener<OnWardPlaced> listener) {
evPlaced = ctx.createEvent(OnWardPlaced.class, Entity.class);
evPlaced = (OnWardPlaced.Event) ctx.createEvent(OnWardPlaced.class);
}

public Wards() {
Expand Down Expand Up @@ -163,7 +163,7 @@ private boolean isWard(Entity e) {
}

private boolean isWardDeath(CombatLogEntry e) {
return e.getType().equals(DOTAUserMessages.DOTA_COMBATLOG_TYPES.DOTA_COMBATLOG_DEATH)
return e.getType().equals(DOTACombatLog.DOTA_COMBATLOG_TYPES.DOTA_COMBATLOG_DEATH)
&& WARDS_TARGET_NAMES.contains(e.getTargetName());
}

Expand Down