Skip to content
This repository was archived by the owner on Sep 29, 2019. It is now read-only.

Commit

Permalink
Added more timer features
Browse files Browse the repository at this point in the history
  • Loading branch information
Sharpjaws committed Feb 4, 2017
1 parent e293ce6 commit 05fd0e2
Show file tree
Hide file tree
Showing 7 changed files with 198 additions and 74 deletions.
2 changes: 1 addition & 1 deletion src/main/java/me/sharpjaws/sharpSK/EffTimerCreate.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public String toString(@Nullable Event paramEvent, boolean paramBoolean) {
protected void execute(final Event e) {

CTimerThread th = new CTimerThread(s.getSingle(e),duration.getSingle(e).getTicks()/20);
th.start();
th.instance().start();


}
Expand Down
49 changes: 0 additions & 49 deletions src/main/java/me/sharpjaws/sharpSK/EffTimerExtend.java

This file was deleted.

15 changes: 10 additions & 5 deletions src/main/java/me/sharpjaws/sharpSK/EffTimerStop.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,21 @@ public String toString(@Nullable Event paramEvent, boolean paramBoolean) {

@Override
protected void execute(final Event e) {

CTimerThread a = null;
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t instanceof CTimerThread) {
if (t.getName().contains(timer.getSingle(e))){
((CTimerThread) t).stopTimer();
if (((CTimerThread) t).instance().getName().equals(timer.getSingle(e))){
a = ((CTimerThread) t).instance();

}

}
}
}
try {
a.stopTimer(a.getName());
}catch(NullPointerException ex){

}

}

}
51 changes: 51 additions & 0 deletions src/main/java/me/sharpjaws/sharpSK/ExprAllTimers.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package me.sharpjaws.sharpSK;

import java.util.ArrayList;

import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.util.Kleenean;
import me.sharpjaws.sharpSK.Threads.CTimerThread;

public class ExprAllTimers extends SimpleExpression<String>{

@Override
public boolean isSingle() {
return false;
}

@Override
public Class<? extends String> getReturnType() {
return String.class;
}

@Override
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
return true;
}

@Override
public String toString(@Nullable Event e, boolean debug) {
return "";
}

@Override
@Nullable
protected String[] get(Event e) {

ArrayList<String> timers = new ArrayList<>();

for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t instanceof CTimerThread) {
timers.add(t.getName());

}
}
return timers.toArray(new String[timers.size()]);
}

}
105 changes: 105 additions & 0 deletions src/main/java/me/sharpjaws/sharpSK/ExprTimerTime.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package me.sharpjaws.sharpSK;

import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.classes.Changer;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.util.Timespan;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import me.sharpjaws.sharpSK.Threads.CTimerThread;

public class ExprTimerTime extends SimpleExpression<Integer>{
private Expression<String> timer;
@Override
public boolean isSingle() {
return true;
}

@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}

@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
timer = (Expression<String>) expr[0];
return true;
}

@Override
public String toString(@Nullable Event e, boolean debug) {
return "time of timer %string%";
}

@Override
@Nullable
protected Integer[] get(Event e) {
int a = 0;
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t instanceof CTimerThread) {
if (t.getName().contains(timer.getSingle(e))){
a = ((CTimerThread) t).getTime();

}

}
}
return new Integer[] {a};
}

@Override
public void change(Event e, Object[] delta, Changer.ChangeMode mode) {
if (mode == Changer.ChangeMode.SET) {
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t instanceof CTimerThread) {
if (t.getName().contains(timer.getSingle(e))){
((CTimerThread) t).setTime(((Timespan)delta[0]).getTicks()/20);

}

}
}
}
if (mode == Changer.ChangeMode.ADD) {
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t instanceof CTimerThread) {
if (t.getName().contains(timer.getSingle(e))){
((CTimerThread) t).addTime(((Timespan)delta[0]).getTicks()/20);

}

}
}
}
if (mode == Changer.ChangeMode.REMOVE) {
for (Thread t : Thread.getAllStackTraces().keySet()) {
if (t instanceof CTimerThread) {
if (t.getName().contains(timer.getSingle(e))){
((CTimerThread) t).removeTime(((Timespan)delta[0]).getTicks()/20);

}

}
}
}
}

@Override
public Class<?>[] acceptChange(Changer.ChangeMode mode) {
if (mode == Changer.ChangeMode.SET)
return CollectionUtils.array(new Class[] { Timespan.class });
if (mode == Changer.ChangeMode.ADD)
return CollectionUtils.array(new Class[] { Timespan.class });
if (mode == Changer.ChangeMode.REMOVE)
return CollectionUtils.array(new Class[] { Timespan.class });
return null;
}

}
47 changes: 29 additions & 18 deletions src/main/java/me/sharpjaws/sharpSK/Threads/CTimerThread.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,44 +14,55 @@ public class CTimerThread extends Thread{

public CTimerThread(String name, int seconds){

secs = seconds;
Tname = name;
this.secs = seconds;
this.Tname = name;
}


@Override
public void run() {
Countdown = secs +1;
this.instance().Countdown = secs +1;
this.setName(Tname);
try {

while (Countdown >= 1){
while (!(Countdown < 2)){
Countdown--;
try {
EvtTimerTick ev = new EvtTimerTick(this.getName(),Countdown);
EvtTimerTick ev = new EvtTimerTick(this.getName(),Countdown);
Bukkit.getServer().getPluginManager().callEvent(ev);
sleep(1000);
} catch (InterruptedException e) {
this.interrupt();
}

CTimerThread.sleep(1000);
}

EvtTimerComplete ev2 = new EvtTimerComplete(this.getName());
Bukkit.getServer().getPluginManager().callEvent(ev2);
this.interrupt();

this.instance().interrupt();

} catch (InterruptedException e) {
this.instance().interrupt();
}
}
public void addTime(int time){
Countdown = Countdown + time;
this.instance().Countdown = Countdown + time;
}

public void setTime(int time){
Countdown = time;
this.instance().Countdown = time;
}
public void stopTimer(){
Countdown = 0;
this.interrupt();
public int getTime(){
return this.instance().Countdown;
}
public void stopTimer(String name){
if (name.contains(Tname)){
this.instance().Countdown = 0;
this.instance().interrupt();
}
}
public void removeTime(int time){
this.Countdown = this.instance().Countdown - time;

}
public CTimerThread instance(){
return this;
}


}
3 changes: 2 additions & 1 deletion src/main/java/me/sharpjaws/sharpSK/main.java
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,8 @@ public Phase get(EnderDragonChangePhaseEvent e) {
//Timers
Skript.registerEffect(EffTimerCreate.class, "create timer %string% for %timespan%");
Skript.registerEffect(EffTimerStop.class, "stop timer %string%");
Skript.registerEffect(EffTimerExtend.class, "extend timer %string% by %timespan%");
Skript.registerExpression(ExprTimerTime.class,Integer.class,ExpressionType.SIMPLE, "time of timer %string%");
Skript.registerExpression(ExprAllTimers.class,String.class,ExpressionType.SIMPLE, "(all [of]|the) [running] timers");
Skript.registerCondition(CondTimerActive.class, "timer %string% is active");
Skript.registerCondition(CondTimerNotActive.class, "timer %string% is not active");
Skript.registerEvent("Timer Tick", SimpleEvent.class, EvtTimerTick.class, "timer tick");
Expand Down

0 comments on commit 05fd0e2

Please sign in to comment.