Skip to content

Commit a74ecb5

Browse files
committed
refactor: move Timer class out of TimerState interface
1 parent f3926c9 commit a74ecb5

13 files changed

Lines changed: 74 additions & 59 deletions

File tree

examples/paper/src/main/java/me/devnatan/inventoryframework/runtime/SamplePlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void onEnable() {
2222
new Failing(),
2323
new SimplePagination(),
2424
new AutoUpdate(),
25-
new AutoUpdateAdvanced())
25+
new TimerView())
2626
.register();
2727

2828
IFExampleCommandExecutor command = new IFExampleCommandExecutor(viewFrame);

examples/paper/src/main/java/me/devnatan/inventoryframework/runtime/view/AutoUpdateAdvanced.java

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package me.devnatan.inventoryframework.runtime.view;
2+
3+
import me.devnatan.inventoryframework.View;
4+
import me.devnatan.inventoryframework.ViewConfigBuilder;
5+
import me.devnatan.inventoryframework.context.Context;
6+
import me.devnatan.inventoryframework.context.RenderContext;
7+
import me.devnatan.inventoryframework.state.MutableIntState;
8+
import me.devnatan.inventoryframework.state.timer.Timer;
9+
import me.devnatan.inventoryframework.state.timer.TimerState;
10+
import org.bukkit.Material;
11+
import org.bukkit.inventory.ItemStack;
12+
import org.jetbrains.annotations.NotNull;
13+
14+
public class TimerView extends View {
15+
16+
private final MutableIntState countState = mutableState(0);
17+
private final TimerState timerState = timerState(10);
18+
19+
@Override
20+
public void onInit(@NotNull ViewConfigBuilder config) {
21+
config.cancelOnClick().title("Timer (?)").scheduleUpdate(timerState);
22+
}
23+
24+
@Override
25+
public void onFirstRender(@NotNull RenderContext render) {
26+
// Item to pause/unpause
27+
render.slot(1, new ItemStack(Material.CLOCK)).onClick(click -> {
28+
final Timer timer = timerState.get(click);
29+
timer.pause();
30+
});
31+
32+
// Tracking item that reacts to timer state
33+
render.slot(2, new ItemStack(Material.REDSTONE))
34+
.updateOnStateChange(timerState)
35+
.onClick(click -> {
36+
final Timer timer = timerState.get(click);
37+
timer.pause();
38+
});
39+
}
40+
41+
@Override
42+
public void onUpdate(@NotNull Context update) {
43+
final int count = countState.increment(update);
44+
final String pause = timerState.get(update).isPaused() ? "paused" : "running";
45+
update.updateTitleForPlayer(String.format("Timer (%d) [%b]", count, pause));
46+
}
47+
}

inventory-framework-api/src/main/java/me/devnatan/inventoryframework/ViewConfigBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import java.util.Set;
99
import java.util.stream.Collectors;
1010
import me.devnatan.inventoryframework.exception.InvalidLayoutException;
11-
import me.devnatan.inventoryframework.state.TimerState;
11+
import me.devnatan.inventoryframework.state.timer.TimerState;
1212
import org.jetbrains.annotations.ApiStatus;
1313
import org.jetbrains.annotations.NotNull;
1414

inventory-framework-api/src/main/java/me/devnatan/inventoryframework/internal/ElementFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import me.devnatan.inventoryframework.context.IFSlotClickContext;
1818
import me.devnatan.inventoryframework.context.IFSlotRenderContext;
1919
import me.devnatan.inventoryframework.logging.Logger;
20-
import me.devnatan.inventoryframework.state.TimerState;
20+
import me.devnatan.inventoryframework.state.timer.TimerState;
2121
import org.jetbrains.annotations.NotNull;
2222
import org.jetbrains.annotations.Nullable;
2323

inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/StateAccess.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import me.devnatan.inventoryframework.component.PaginationValueConsumer;
1212
import me.devnatan.inventoryframework.context.IFContext;
1313
import me.devnatan.inventoryframework.context.IFOpenContext;
14+
import me.devnatan.inventoryframework.state.timer.TimerState;
1415
import org.jetbrains.annotations.ApiStatus;
1516
import org.jetbrains.annotations.NotNull;
1617

@@ -184,7 +185,7 @@ public interface StateAccess<
184185
* @return A new unmodifiable timer state.
185186
*/
186187
@ApiStatus.Experimental
187-
TimerState timerState(long intervalInTicks);
188+
TimerState timerState(long intervalInTicks);
188189

189190
/**
190191
* Creates a new immutable pagination with static data source.

inventory-framework-api/src/main/java/me/devnatan/inventoryframework/state/TimerState.java

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package me.devnatan.inventoryframework.state.timer;
2+
3+
public interface Timer {
4+
5+
long initialInterval();
6+
7+
long currentInterval();
8+
9+
boolean isPaused();
10+
11+
boolean pause();
12+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package me.devnatan.inventoryframework.state.timer;
2+
3+
import me.devnatan.inventoryframework.state.State;
4+
5+
public interface TimerState extends State<Timer> {
6+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.devnatan.inventoryframework.state
22

3+
import me.devnatan.inventoryframework.state.timer.TimerState
34
import kotlin.time.Duration
45

56
public fun StateAccess<*, *>.timerState(interval: Duration): TimerState = timerState(interval.inWholeSeconds / 20)

0 commit comments

Comments
 (0)