Skip to content

Commit 82c48ff

Browse files
committed
feat: update samples
1 parent 5db9dfe commit 82c48ff

File tree

8 files changed

+112
-17
lines changed

8 files changed

+112
-17
lines changed

examples/minestom/src/main/kotlin/me/devnatan/inventoryframework/runtime/command/IFExampleCommand.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package me.devnatan.inventoryframework.runtime.command
33
import me.devnatan.inventoryframework.ViewFrame
44
import me.devnatan.inventoryframework.runtime.view.Failing
55
import me.devnatan.inventoryframework.runtime.view.ScheduledView
6+
import me.devnatan.inventoryframework.runtime.view.ScheduledViewAdvanced
67
import me.devnatan.inventoryframework.runtime.view.SimplePagination
78
import net.minestom.server.command.CommandSender
89
import net.minestom.server.command.builder.Command
@@ -20,6 +21,7 @@ class IFExampleCommand(
2021
"failing" to Failing::class.java,
2122
"simple-pagination" to SimplePagination::class.java,
2223
"scheduled" to ScheduledView::class.java,
24+
"scheduled-advanced" to ScheduledViewAdvanced::class.java,
2325
)
2426

2527
private val arg: Argument<String> =
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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.context.SlotClickContext
8+
import me.devnatan.inventoryframework.runtime.ExampleUtil
9+
import me.devnatan.inventoryframework.state.timerState
10+
import net.minestom.server.item.Material
11+
import kotlin.time.Duration.Companion.seconds
12+
13+
class ScheduledViewAdvanced : View() {
14+
val counter = mutableState(0)
15+
val timer = timerState(1.seconds)
16+
17+
override fun onInit(config: ViewConfigBuilder): Unit =
18+
with(config) {
19+
cancelOnClick()
20+
size(3)
21+
title("Simple Pagination")
22+
layout(" ", " C ", "B ")
23+
scheduleUpdate(timer)
24+
}
25+
26+
override fun onFirstRender(render: RenderContext) {
27+
render.layoutSlot('C').onRender {
28+
it.item = ExampleUtil.displayItem(Material.STONE, counter.increment(it).toString())
29+
}
30+
31+
render
32+
.layoutSlot('B', ExampleUtil.displayItem(Material.PAPER, "Back"))
33+
.displayIf(Context::canBack)
34+
.onClick(SlotClickContext::back)
35+
}
36+
}

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
import me.devnatan.inventoryframework.AnvilInputFeature;
44
import me.devnatan.inventoryframework.ViewFrame;
55
import me.devnatan.inventoryframework.runtime.commands.IFExampleCommandExecutor;
6-
import me.devnatan.inventoryframework.runtime.view.AnvilInputSample;
7-
import me.devnatan.inventoryframework.runtime.view.AutoUpdate;
8-
import me.devnatan.inventoryframework.runtime.view.Failing;
9-
import me.devnatan.inventoryframework.runtime.view.SimplePagination;
6+
import me.devnatan.inventoryframework.runtime.view.*;
107
import org.bukkit.plugin.java.JavaPlugin;
118

129
public class SamplePlugin extends JavaPlugin {
@@ -16,7 +13,12 @@ public void onEnable() {
1613
System.out.println("ligoo");
1714
ViewFrame viewFrame = ViewFrame.create(this)
1815
.install(AnvilInputFeature.AnvilInput)
19-
.with(new AnvilInputSample(), new Failing(), new SimplePagination(), new AutoUpdate())
16+
.with(
17+
new AnvilInputSample(),
18+
new Failing(),
19+
new SimplePagination(),
20+
new AutoUpdate(),
21+
new AutoUpdateAdvanced())
2022
.register();
2123

2224
getCommand("ifexample").setExecutor(new IFExampleCommandExecutor(viewFrame));

examples/paper/src/main/java/me/devnatan/inventoryframework/runtime/commands/IFExampleCommandExecutor.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package me.devnatan.inventoryframework.runtime.commands;
22

33
import me.devnatan.inventoryframework.ViewFrame;
4-
import me.devnatan.inventoryframework.runtime.view.AnvilInputSample;
5-
import me.devnatan.inventoryframework.runtime.view.AutoUpdate;
6-
import me.devnatan.inventoryframework.runtime.view.Failing;
7-
import me.devnatan.inventoryframework.runtime.view.SimplePagination;
4+
import me.devnatan.inventoryframework.runtime.view.*;
85
import org.bukkit.command.Command;
96
import org.bukkit.command.CommandExecutor;
107
import org.bukkit.command.CommandSender;
@@ -60,6 +57,11 @@ public boolean onCommand(
6057
return true;
6158
}
6259

60+
if (view.equalsIgnoreCase("auto-update-advanced")) {
61+
viewFrame.open(AutoUpdateAdvanced.class, player);
62+
return true;
63+
}
64+
6365
commandSender.sendMessage("Unknown view: " + view);
6466
return true;
6567
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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.TimerState;
9+
import org.bukkit.Material;
10+
import org.bukkit.inventory.ItemStack;
11+
import org.jetbrains.annotations.NotNull;
12+
13+
public class AutoUpdateAdvanced extends View {
14+
15+
private final MutableIntState countState = mutableState(0);
16+
private final TimerState autoUpdateState = timerState(10);
17+
18+
@Override
19+
public void onInit(@NotNull ViewConfigBuilder config) {
20+
config.cancelOnClick().title("Auto update (?)").scheduleUpdate(autoUpdateState);
21+
}
22+
23+
@Override
24+
public void onFirstRender(@NotNull RenderContext render) {
25+
render.slot(1, new ItemStack(Material.DIAMOND)).onClick(click -> click.openForPlayer(SimplePagination.class));
26+
27+
render.slot(2, new ItemStack(Material.CLOCK)).onClick(click -> {
28+
final var timer = autoUpdateState.get(click);
29+
timer.togglePause();
30+
});
31+
}
32+
33+
@Override
34+
public void onUpdate(@NotNull Context update) {
35+
final int count = countState.increment(update);
36+
final String pause = autoUpdateState.get(update).isPaused() ? "paused" : "running";
37+
update.updateTitleForPlayer(String.format("Auto update (%d) [%b]", count, pause));
38+
}
39+
}

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,14 @@
22

33
public interface TimerState extends State<TimerState.Timer> {
44

5-
interface Timer {}
5+
interface Timer {
6+
7+
long initialInterval();
8+
9+
long currentInterval();
10+
11+
boolean isPaused();
12+
13+
boolean togglePause();
14+
}
615
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package me.devnatan.inventoryframework.state
2+
3+
import kotlin.time.Duration
4+
5+
public fun StateAccess<*, *>.timerState(interval: Duration): TimerState = timerState(interval.inWholeSeconds / 20)

inventory-framework-platform/src/main/java/me/devnatan/inventoryframework/PlatformView.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,7 @@
3939
import me.devnatan.inventoryframework.pipeline.StandardPipelinePhases;
4040
import me.devnatan.inventoryframework.pipeline.UpdateInterceptor;
4141
import me.devnatan.inventoryframework.pipeline.ViewerLastInteractionTrackerInterceptor;
42-
import me.devnatan.inventoryframework.state.InitialDataStateValue;
43-
import me.devnatan.inventoryframework.state.MutableIntState;
44-
import me.devnatan.inventoryframework.state.MutableState;
45-
import me.devnatan.inventoryframework.state.State;
46-
import me.devnatan.inventoryframework.state.StateAccess;
47-
import me.devnatan.inventoryframework.state.StateAccessImpl;
48-
import me.devnatan.inventoryframework.state.StateValue;
42+
import me.devnatan.inventoryframework.state.*;
4943
import org.jetbrains.annotations.ApiStatus;
5044
import org.jetbrains.annotations.NotNull;
5145

@@ -765,5 +759,11 @@ public final <T> PaginationStateBuilder<TContext, TItem, T> buildLazyAsyncPagina
765759
requireNotInitialized();
766760
return stateAccess.buildLazyAsyncPaginationState(sourceProvider);
767761
}
762+
763+
@Override
764+
public TimerState timerState(long intervalInTicks) {
765+
requireNotInitialized();
766+
return stateAccess.timerState(intervalInTicks);
767+
}
768768
// endregion
769769
}

0 commit comments

Comments
 (0)