Skip to content

Commit 4e1493d

Browse files
Changes
1 parent bfa2c1e commit 4e1493d

8 files changed

Lines changed: 118 additions & 30 deletions

File tree

.github/workflows/build-dev.yml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
name: Build Development
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
permissions:
8+
contents: write
9+
10+
jobs:
11+
build:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: Checkout repository
15+
uses: actions/checkout@v4
16+
17+
- name: Set up JDK 21
18+
uses: actions/setup-java@v4
19+
with:
20+
java-version: 21
21+
distribution: temurin
22+
23+
- name: Build
24+
run: mvn package --file pom.xml
25+
26+
- name: Extract repository name
27+
run: echo "NAME=$(basename ${{ github.repository }})" >> $GITHUB_ENV
28+
29+
- name: Upload Build
30+
uses: marvinpinto/action-automatic-releases@master
31+
with:
32+
title: "${{ env.NAME }}"
33+
automatic_release_tag: "latest"
34+
repo_token: "${{ secrets.GITHUB_TOKEN }}"
35+
files: "target/*.jar"
36+
prerelease: false

.gitignore

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,19 @@
77
/dataSources/
88
/dataSources.local.xml
99
/target
10-
/.idea
10+
/.idea
11+
12+
# Eclipse
13+
.settings
14+
.classpath
15+
.project
16+
.factorypath
17+
18+
# VS Code
19+
.vscode
20+
21+
# macOS
22+
.DS_Store
23+
24+
# Maven
25+
dependency-reduced-pom.xml

src/main/java/fun/pozzoo/quickwaystones/QuickWaystones.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public final class QuickWaystones extends JavaPlugin {
1717
private static QuickWaystones plugin;
1818
private static DataManager dataManager;
1919
private static final Map<Location, WaystoneData> waystonesMap = new HashMap<>();
20-
private static final Map<UUID, Set<Integer>> playerAccess = new HashMap<>();
20+
private static final Map<UUID, Set<String>> playerAccess = new HashMap<>();
2121
private static int lastWaystoneID = 0;
2222
private static WaystonePass waystonePass;
2323
private static Metrics metrics;
@@ -41,7 +41,13 @@ public void onEnable() {
4141
waystonePass = new WaystonePass(plugin, "waystone_pass", "bound_waystone");
4242

4343
OptionalInt maxId = waystonesMap.values().stream()
44-
.mapToInt(WaystoneData::getId)
44+
.mapToInt(ws -> {
45+
try {
46+
return Integer.parseInt(ws.getName().replace("Waystone ", ""));
47+
} catch (NumberFormatException e) {
48+
return 0;
49+
}
50+
})
4551
.max();
4652

4753
if (maxId.isPresent()) {
@@ -94,7 +100,7 @@ public static WaystoneData getWaystone(Location location) {
94100
return waystonesMap.get(location);
95101
}
96102

97-
public static Map<UUID, Set<Integer>> getPlayerAccess() {
103+
public static Map<UUID, Set<String>> getPlayerAccess() {
98104
return playerAccess;
99105
}
100106

src/main/java/fun/pozzoo/quickwaystones/data/WaystoneData.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,31 @@
66
import java.util.UUID;
77

88
public class WaystoneData {
9-
private final int id;
9+
private final String id;
1010
private String name;
1111
private final UUID owner;
1212
private final Location location;
1313

1414
public WaystoneData(Location location, UUID owner) {
15-
id = QuickWaystones.getAndIncrementLastWaystoneID();
16-
name = "Waystone " + id ;
15+
id = UUID.randomUUID().toString();
16+
name = "Waystone " + QuickWaystones.getAndIncrementLastWaystoneID();
1717
this.location = location;
1818
this.owner = owner;
1919
}
2020
public WaystoneData(String name, Location location, UUID owner) {
21-
id = QuickWaystones.getAndIncrementLastWaystoneID();
21+
id = UUID.randomUUID().toString();
22+
this.name = name;
23+
this.location = location;
24+
this.owner = owner;
25+
}
26+
public WaystoneData(String id, String name, Location location, UUID owner) {
27+
this.id = id;
2228
this.name = name;
2329
this.location = location;
2430
this.owner = owner;
2531
}
2632

27-
public int getId() {
33+
public String getId() {
2834
return id;
2935
}
3036

src/main/java/fun/pozzoo/quickwaystones/events/OnPlayerInteract.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public void onPlayerInteract(PlayerInteractEvent event) {
3636
ItemStack item = player.getInventory().getItemInMainHand();
3737

3838
if (this.plugin.getConfig().getBoolean("Settings.EnableWaystonePass") && item.getType() == Material.PAPER && QuickWaystones.getWaystonePass().checkKey(item) && (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR)) {
39-
int waystoneID = QuickWaystones.getWaystonePass().getWaystoneID(item);
39+
String waystoneID = QuickWaystones.getWaystonePass().getWaystoneID(item);
4040

4141
if (QuickWaystones.getPlayerAccess().get(player.getUniqueId()).contains(waystoneID)) {
4242
player.playSound(player, Sound.ENTITY_GENERIC_EXTINGUISH_FIRE, 0.1f, 1);
@@ -47,6 +47,7 @@ public void onPlayerInteract(PlayerInteractEvent event) {
4747
player.playSound(player, Sound.ENTITY_PLAYER_LEVELUP, 1, 1);
4848
player.sendMessage(StringUtils.formatString("<gold>" + this.plugin.getConfig().getString("Messages.WaystoneDiscovered")));
4949
QuickWaystones.getPlayerAccess().get(player.getUniqueId()).add(waystoneID);
50+
QuickWaystones.saveData();
5051

5152
return;
5253
}
@@ -68,6 +69,7 @@ public void onPlayerInteract(PlayerInteractEvent event) {
6869
QuickWaystones.createWaystone(location, new WaystoneData(location, player.getUniqueId()));
6970

7071
QuickWaystones.getPlayerAccess().get(player.getUniqueId()).add(QuickWaystones.getWaystonesMap().get(location).getId());
72+
QuickWaystones.saveData();
7173

7274
return;
7375
}
@@ -82,6 +84,7 @@ public void onPlayerInteract(PlayerInteractEvent event) {
8284

8385
QuickWaystones.getWaystone(location).setName(textComponent.content());
8486
player.getInventory().getItemInMainHand().subtract();
87+
QuickWaystones.saveData();
8588

8689
return;
8790
}
@@ -104,9 +107,11 @@ public void onPlayerInteract(PlayerInteractEvent event) {
104107
player.playSound(player, Sound.ENTITY_PLAYER_LEVELUP, 1, 1);
105108
player.sendMessage(StringUtils.formatString("<gold>" + this.plugin.getConfig().getString("Messages.WaystoneDiscovered")));
106109
QuickWaystones.getPlayerAccess().get(player.getUniqueId()).add(QuickWaystones.getWaystonesMap().get(location).getId());
110+
QuickWaystones.saveData();
107111
}
108112
} else {
109113
QuickWaystones.getPlayerAccess().get(player.getUniqueId()).add(QuickWaystones.getWaystonesMap().get(location).getId());
114+
QuickWaystones.saveData();
110115
}
111116

112117
WaystoneGUI.runGUI(player, QuickWaystones.getWaystonesMap().get(location));

src/main/java/fun/pozzoo/quickwaystones/gui/WaystoneGUI.java

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919

2020
public class WaystoneGUI implements Listener {
2121

22-
private static final int ROWS = 4;
23-
private static final int PAGE_SIZE = 27; // top 3 rows
22+
private static final int ROWS = 6;
23+
private static final int PAGE_SIZE = 45; // top 5 rows
2424
private static final int INVENTORY_SIZE = ROWS * 9;
25-
private static final int PREV_SLOT = 27 + (3 - 1); // 29
26-
private static final int NEXT_SLOT = 27 + (7 - 1); // 33
27-
private static final int PAGE_SLOT = 27 + (5 - 1); // 31
25+
private static final int PREV_SLOT = 45 + (3 - 1); // 47
26+
private static final int NEXT_SLOT = 45 + (7 - 1); // 51
27+
private static final int PAGE_SLOT = 45 + (5 - 1); // 49
2828

2929
private static volatile boolean registered = false;
3030

@@ -48,13 +48,16 @@ private static void ensureRegistered() {
4848

4949
private static void openPage(Player player, int page, WaystoneData waystoneData) {
5050
Map<Location, WaystoneData> waystonesMap = new HashMap<>(QuickWaystones.getWaystonesMap());
51-
Map<UUID, Set<Integer>> playerAccess = QuickWaystones.getPlayerAccess();
51+
Map<UUID, Set<String>> playerAccess = QuickWaystones.getPlayerAccess();
5252

5353
if (QuickWaystones.getInstance().getConfig().getBoolean("Settings.HideUndiscoveredWaystones")) {
5454
waystonesMap.entrySet().removeIf(entry -> !playerAccess.get(player.getUniqueId()).contains(entry.getValue().getId()));
5555
}
5656

5757
List<WaystoneData> waystones = new ArrayList<>(waystonesMap.values());
58+
59+
// Sort waystones by name
60+
waystones.sort(Comparator.comparing(WaystoneData::getName));
5861

5962
int totalItems = waystones.size();
6063
int totalPages = Math.max(1, (int) Math.ceil(totalItems / (double) PAGE_SIZE));
@@ -65,13 +68,28 @@ private static void openPage(Player player, int page, WaystoneData waystoneData)
6568
WaystoneHolder holder = new WaystoneHolder(currentPage, totalPages, waystoneData);
6669
Inventory inv = Bukkit.createInventory(holder, INVENTORY_SIZE, title);
6770

68-
// Fill page items (top 27 slots)
71+
// Fill page items (top 45 slots)
6972
int startIndex = currentPage * PAGE_SIZE;
7073
int endIndex = Math.min(startIndex + PAGE_SIZE, totalItems);
7174
int slot = 0;
7275
for (int i = startIndex; i < endIndex; i++) {
7376
WaystoneData ws = waystones.get(i);
74-
ItemStack item = new ItemStack(Material.ENDER_PEARL);
77+
78+
// Get world-specific icon
79+
Material material;
80+
switch (ws.getLocation().getWorld().getEnvironment()) {
81+
case NETHER:
82+
material = Material.NETHERRACK;
83+
break;
84+
case THE_END:
85+
material = Material.END_STONE;
86+
break;
87+
default:
88+
material = Material.GRASS_BLOCK;
89+
break;
90+
}
91+
92+
ItemStack item = new ItemStack(material);
7593
ItemMeta meta = item.getItemMeta();
7694
if (meta != null) {
7795
meta.displayName(StringUtils.formatItemName(ws.getName()));
@@ -158,7 +176,7 @@ public void onInventoryClick(InventoryClickEvent event) {
158176
// Waystone teleport
159177
WaystoneData ws = holder.slotToWaystone.get(slot);
160178
if (ws != null) {
161-
if (ws.getId() == holder.waystoneData.getId()) {
179+
if (ws.getId().equals(holder.waystoneData.getId())) {
162180
String message = QuickWaystones.getInstance().getConfig().getString("Messages.SameWaystone", "You cannot teleport to the same waystone!");
163181
player.sendMessage(StringUtils.formatString("<red>" + message));
164182
player.playSound(player, Sound.ENTITY_GENERIC_EXTINGUISH_FIRE, 0.1f, 1);

src/main/java/fun/pozzoo/quickwaystones/items/WaystonePass.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ public WaystonePass(QuickWaystones plugin, String pass_key, String bound_wayston
4545
this.item = item;
4646
}
4747

48-
public ItemStack createItem(int waystoneID) {
48+
public ItemStack createItem(String waystoneID) {
4949
ItemStack item = this.item.clone();
5050
ItemMeta meta = item.getItemMeta();
5151

52-
meta.getPersistentDataContainer().set(this.bound_waystone_key, PersistentDataType.INTEGER, waystoneID);
52+
meta.getPersistentDataContainer().set(this.bound_waystone_key, PersistentDataType.STRING, waystoneID);
5353
item.setItemMeta(meta);
5454

5555
return item;
@@ -59,8 +59,8 @@ public boolean checkKey(ItemStack item) {
5959
return item.getItemMeta().getPersistentDataContainer().get(this.pass_key, PersistentDataType.BYTE) != null;
6060
}
6161

62-
public Integer getWaystoneID(ItemStack item) {
62+
public String getWaystoneID(ItemStack item) {
6363
ItemMeta meta = item.getItemMeta();
64-
return meta.getPersistentDataContainer().get(this.bound_waystone_key, PersistentDataType.INTEGER);
64+
return meta.getPersistentDataContainer().get(this.bound_waystone_key, PersistentDataType.STRING);
6565
}
6666
}

src/main/java/fun/pozzoo/quickwaystones/managers/DataManager.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,28 +47,30 @@ public void loadData() {
4747
config.load(file);
4848

4949
for (String key : waystoneKeys) {
50-
WaystoneData waystoneData = new WaystoneData(key, config.getLocation("Waystones." + key + ".location"), UUID.fromString(Objects.requireNonNull(config.getString("Waystones." + key + ".owner"))));
50+
WaystoneData waystoneData = new WaystoneData(key, config.getString("Waystones." + key + ".name"), config.getLocation("Waystones." + key + ".location"), UUID.fromString(Objects.requireNonNull(config.getString("Waystones." + key + ".owner"))));
5151
QuickWaystones.getWaystonesMap().put(waystoneData.getLocation(), waystoneData);
5252
}
5353

5454
for (String key : accessKeys) {
55-
QuickWaystones.getPlayerAccess().put(UUID.fromString(key), new HashSet<>(Arrays.asList(Objects.requireNonNull(config.getIntegerList("Access." + key)).toArray(new Integer[0]))));
55+
List<String> stringList = config.getStringList("Access." + key);
56+
QuickWaystones.getPlayerAccess().put(UUID.fromString(key), new HashSet<>(stringList));
5657
}
5758
} catch (InvalidConfigurationException | IOException e) {
5859
throw new RuntimeException(e);
5960
}
6061
}
6162

62-
public void saveData(Collection<WaystoneData> waystones, Map<UUID, Set<Integer>> playerAccess) {
63+
public void saveData(Collection<WaystoneData> waystones, Map<UUID, Set<String>> playerAccess) {
6364
configOverwrite = new YamlConfiguration();
6465

6566
for (WaystoneData waystone : waystones) {
66-
configOverwrite.set("Waystones." + waystone.getName() + ".location", waystone.getLocation());
67-
configOverwrite.set("Waystones." + waystone.getName() + ".owner", waystone.getOwner().toString());
67+
configOverwrite.set("Waystones." + waystone.getId() + ".name", waystone.getName());
68+
configOverwrite.set("Waystones." + waystone.getId() + ".location", waystone.getLocation());
69+
configOverwrite.set("Waystones." + waystone.getId() + ".owner", waystone.getOwner().toString());
6870
}
6971

70-
for (Map.Entry<UUID, Set<Integer>> entry : playerAccess.entrySet()) {
71-
configOverwrite.set("Access." + entry.getKey().toString(), entry.getValue().toArray(new Integer[0]));
72+
for (Map.Entry<UUID, Set<String>> entry : playerAccess.entrySet()) {
73+
configOverwrite.set("Access." + entry.getKey().toString(), new ArrayList<>(entry.getValue()));
7274
}
7375

7476
save();

0 commit comments

Comments
 (0)