Skip to content

Commit 3b1c567

Browse files
authored
Merge pull request #518 from VolmitSoftware/Development
Development
2 parents 4dc30a5 + 823fda4 commit 3b1c567

30 files changed

+1190
-60
lines changed

build.gradle

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ plugins {
2020
id 'java-library'
2121
id "io.freefair.lombok" version "6.3.0"
2222
id "com.github.johnrengelman.shadow" version "7.1.2"
23+
id "org.jetbrains.gradle.plugin.idea-ext" version "1.1.9"
2324
}
2425

2526
version '1.16.0-1.19.2-1.21.3'
@@ -99,6 +100,7 @@ allprojects {
99100
maven { url "https://repo.glaremasters.me/repository/bloodshot/" }
100101
maven { url "https://maven.enginehub.org/repo/" }
101102
maven { url "https://repo.oraxen.com/releases" }
103+
maven { url "https://repo.alessiodp.com/releases" }
102104
maven { url 'https://jitpack.io' }
103105
}
104106

@@ -119,12 +121,14 @@ allprojects {
119121
implementation 'com.github.VolmitDev:Amulet:23.5.1'
120122
implementation 'com.github.VolmitDev:Chrono:22.9.10'
121123
implementation 'com.github.VolmitDev:Spatial:22.11.1'
124+
implementation 'net.byteflux:libby-velocity:1.3.1'
122125

123-
implementation "io.papermc:paperlib:1.0.7"
124-
implementation 'com.github.ben-manes.caffeine:caffeine:3.0.6'
126+
compileOnly "io.papermc:paperlib:1.0.7"
127+
compileOnly 'com.github.ben-manes.caffeine:caffeine:3.0.6'
125128
annotationProcessor 'systems.manifold:manifold-ext:' + manifoldVersion
126129
testAnnotationProcessor 'systems.manifold:manifold-ext:' + manifoldVersion
127130
implementation 'systems.manifold:manifold-rt:' + manifoldVersion
131+
compileOnly 'io.lettuce:lettuce-core:6.5.1.RELEASE'
128132

129133
//Random Api's
130134
compileOnly 'com.github.DeadSilenceIV:AdvancedChestsAPI:2.9-BETA'
@@ -138,6 +142,7 @@ allprojects {
138142
compileOnly "com.github.TechFortress:GriefPrevention:16.18.1"
139143
implementation 'xyz.xenondevs:particle:1.8.1'
140144
implementation "com.frengor:ultimateadvancementapi-shadeable:2.4.2"
145+
implementation 'com.jeff-media:custom-block-data:2.2.3'
141146
compileOnly 'com.griefdefender:api:2.1.0-SNAPSHOT'
142147
compileOnly 'io.netty:netty-all:4.1.68.Final'
143148

@@ -150,32 +155,44 @@ allprojects {
150155
compileOnly 'net.kyori:adventure-platform-bukkit:4.3.4'
151156
compileOnly 'it.unimi.dsi:fastutil:8.5.13'
152157
compileOnly "fr.skytasul:glowingentities:1.4.1"
153-
implementation 'com.google.guava:guava:30.1-jre'
158+
compileOnly 'com.google.guava:guava:30.1-jre'
154159
compileOnly fileTree(dir: 'libs', include: ['*.jar'])
155160
}
156161
}
157162

163+
dependencies {
164+
compileOnly(project(":velocity")) {
165+
transitive = false
166+
}
167+
}
168+
158169
/**
159170
* Configure Adapt for shading
160171
*/
161172
shadowJar {
162173
// minimize()
163174
VERSIONS.each {
164175
dependsOn(":version:${it.key}:build")
165-
from(project(":version:${it.key}").layout.buildDirectory.file("libs/${it.key}.jar").get())
176+
from(project(":version:${it.key}").tasks.named("jar", Jar).get().archiveFile)
166177
}
178+
dependsOn(":velocity:build")
179+
from(project(":velocity").tasks.named("jar", Jar).get().archiveFile)
167180

168181
append("plugin.yml")
169182
relocate 'manifold', 'com.volmit.adapt.util.manifold'
170183
relocate 'art.arcane', 'com.volmit.adapt.util.arcane'
171184
relocate 'Fukkit.extensions', 'com.volmit.adapt.util.extensions'
172185
relocate 'Amulet.extensions', 'com.volmit.adapt.util.extensions'
173186
relocate 'com.fren_gor.ultimateAdvancementAPI', 'com.volmit.adapt.util.advancements'
187+
relocate 'net.byteflux.libby', 'com.volmit.adapt.util.libby'
188+
relocate 'com.jeff_media.customblockdata', 'com.volmit.util.customblocks'
174189
dependencies {
175190
include(dependency('systems.manifold:'))
176191
include(dependency('xyz.xenondevs:'))
177192
include(dependency('com.github.VolmitDev:'))
178193
include(dependency('com.frengor:ultimateadvancementapi-shadeable:'))
194+
include(dependency('net.byteflux:'))
195+
include(dependency('com.jeff-media:custom-block-data:'))
179196
}
180197
}
181198

@@ -279,3 +296,6 @@ if (JavaVersion.current() != JavaVersion.VERSION_1_8 &&
279296
}
280297
}
281298

299+
idea.project.settings.taskTriggers {
300+
afterSync(":velocity:generateTemplates")
301+
}

settings.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
rootProject.name = 'Adapt'
22

33
include(
4+
":velocity",
45
':version:v1_21_2',
56
':version:v1_21',
67
':version:v1_20_5',

src/main/java/com/volmit/adapt/Adapt.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package com.volmit.adapt;
2020

2121
import art.arcane.amulet.io.FolderWatcher;
22+
import com.jeff_media.customblockdata.CustomBlockData;
2223
import com.volmit.adapt.api.advancement.AdvancementManager;
2324
import com.volmit.adapt.api.data.WorldData;
2425
import com.volmit.adapt.api.potion.BrewingManager;
@@ -29,6 +30,7 @@
2930
import com.volmit.adapt.api.world.AdaptServer;
3031
import com.volmit.adapt.content.gui.SkillsGui;
3132
import com.volmit.adapt.content.protector.*;
33+
import com.volmit.adapt.util.redis.RedisSync;
3234
import fr.skytasul.glowingentities.GlowingEntities;
3335
import com.volmit.adapt.util.*;
3436
import com.volmit.adapt.util.collection.KList;
@@ -79,6 +81,8 @@ public class Adapt extends VolmitPlugin {
7981

8082
@Getter
8183
private AdvancementManager manager;
84+
@Getter
85+
private RedisSync redisSync;
8286

8387

8488
private final KList<Runnable> postShutdown = new KList<>();
@@ -115,7 +119,9 @@ public void start() {
115119
if (AdaptConfig.get().isUseSql()) {
116120
sqlManager.establishConnection();
117121
}
122+
redisSync = new RedisSync();
118123
startSim();
124+
CustomBlockData.registerListener(this);
119125
registerListener(new BrewingManager());
120126
registerListener(Version.get());
121127
setupMetrics();

src/main/java/com/volmit/adapt/AdaptConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.volmit.adapt.api.xp.Curves;
2323
import com.volmit.adapt.util.IO;
2424
import com.volmit.adapt.util.JSONObject;
25+
import com.volmit.adapt.util.redis.RedisConfig;
2526
import lombok.Getter;
2627
import lombok.Setter;
2728
import org.bukkit.Material;
@@ -62,6 +63,7 @@ public class AdaptConfig {
6263
private boolean welcomeMessage = true;
6364
private boolean advancements = true;
6465
private boolean useSql = false;
66+
private boolean useRedis = false;
6567
private int sqlSecondsCheckverify = 30;
6668
private boolean useEnchantmentTableParticleForActiveEffects = true;
6769
private boolean escClosesAllGuis = false;
@@ -73,6 +75,7 @@ public class AdaptConfig {
7375
private boolean actionbarNotifyXp = true;
7476
private boolean actionbarNotifyLevel = true;
7577
private boolean unlearnAllButton = false;
78+
private RedisConfig redis = new RedisConfig();
7679
private SqlSettings sql = new SqlSettings();
7780
private Protector protectorSupport = new Protector();
7881
private Map<String, Map<String, Boolean>> protectionOverrides = Map.of(

src/main/java/com/volmit/adapt/api/recipe/AdaptRecipe.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ public ItemStack getResult() {
291291
public void register() {
292292
ShapedRecipe s = new ShapedRecipe(new NamespacedKey(Adapt.instance, getKey()), result);
293293
s.shape(shapes.toArray(new String[0]));
294-
ingredients.forEach(i -> s.setIngredient(i.getCharacter(), i.getMaterial()));
294+
ingredients.forEach(i -> s.setIngredient(i.getCharacter(), i.getChoice()));
295295
Bukkit.getServer().addRecipe(s);
296296
Adapt.verbose("Registered Shaped Crafting Recipe " + s.getKey());
297297
}

src/main/java/com/volmit/adapt/api/recipe/MaterialChar.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,28 @@
2121
import lombok.AllArgsConstructor;
2222
import lombok.Data;
2323
import org.bukkit.Material;
24+
import org.bukkit.Tag;
25+
import org.bukkit.inventory.ItemStack;
26+
import org.bukkit.inventory.RecipeChoice;
2427

2528
@AllArgsConstructor
2629
@Data
2730
public class MaterialChar {
2831
private char character;
29-
private Material material;
32+
private RecipeChoice choice;
33+
34+
public MaterialChar(char character, Tag<Material> tag) {
35+
this.character = character;
36+
this.choice = new RecipeChoice.MaterialChoice(tag);
37+
}
38+
39+
public MaterialChar(char character, Material... material) {
40+
this.character = character;
41+
this.choice = new RecipeChoice.MaterialChoice(material);
42+
}
43+
44+
public MaterialChar(char character, ItemStack... itemStack) {
45+
this.character = character;
46+
this.choice = new RecipeChoice.ExactChoice(itemStack);
47+
}
3048
}

src/main/java/com/volmit/adapt/api/world/AdaptPlayer.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
package com.volmit.adapt.api.world;
2020

21-
import com.google.gson.Gson;
2221
import com.volmit.adapt.Adapt;
2322
import com.volmit.adapt.AdaptConfig;
2423
import com.volmit.adapt.api.notification.AdvancementNotification;
@@ -52,6 +51,7 @@ public class AdaptPlayer extends TickedObject {
5251
private long lastloc;
5352
private Vector velocity;
5453
private Location lastpos;
54+
private long lastSeen = -1;
5555

5656
public AdaptPlayer(Player p) {
5757
super("players", p.getUniqueId().toString(), 50);
@@ -124,9 +124,10 @@ public PlayerSkillLine getSkillLine(String l) {
124124
@SneakyThrows
125125
private void save() {
126126
UUID uuid = player.getUniqueId();
127-
String data = new Gson().toJson(this.data);
127+
String data = this.data.toJson();
128128

129129
if (AdaptConfig.get().isUseSql()) {
130+
Adapt.instance.getRedisSync().publish(uuid, data);
130131
Adapt.instance.getSqlManager().updateData(uuid, data);
131132
} else {
132133
IO.writeAll(getPlayerDataFile(uuid), new JSONObject(data).toString(4));
@@ -136,10 +137,11 @@ private void save() {
136137
@SneakyThrows
137138
private void unSave() {
138139
UUID uuid = player.getUniqueId();
139-
String data = new Gson().toJson(new PlayerData());
140+
String data = new PlayerData().toJson();
140141
unregister();
141142

142143
if (AdaptConfig.get().isUseSql()) {
144+
Adapt.instance.getRedisSync().publish(uuid, data);
143145
Adapt.instance.getSqlManager().updateData(uuid, data);
144146
} else {
145147
IO.writeAll(getPlayerDataFile(uuid), new JSONObject(data).toString(4));
@@ -178,12 +180,27 @@ public void delete(UUID uuid) {
178180
});
179181
}
180182

183+
public boolean shouldUnload() {
184+
if (player.isOnline()) {
185+
lastSeen = M.ms();
186+
return false;
187+
}
188+
189+
return lastSeen + 60_000 < System.currentTimeMillis();
190+
}
191+
181192
private PlayerData loadPlayerData() {
182193
boolean upload = false;
183194
if (AdaptConfig.get().isUseSql()) {
195+
var opt = Adapt.instance.getRedisSync().cachedData(player.getUniqueId());
196+
if (opt.isPresent()) {
197+
Adapt.verbose("Using cached data for player: " + player.getUniqueId());
198+
return opt.get();
199+
}
200+
184201
String sqlData = Adapt.instance.getSqlManager().fetchData(player.getUniqueId());
185202
if (sqlData != null) {
186-
return new Gson().fromJson(sqlData, PlayerData.class);
203+
return PlayerData.fromJson(sqlData);
187204
}
188205
upload = true;
189206
}
@@ -195,7 +212,7 @@ private PlayerData loadPlayerData() {
195212
if (upload) {
196213
Adapt.instance.getSqlManager().updateData(player.getUniqueId(), text);
197214
}
198-
return new Gson().fromJson(text, PlayerData.class);
215+
return PlayerData.fromJson(text);
199216
} catch (Throwable ignored) {
200217
Adapt.verbose("Failed to load player data for " + player.getName() + " (" + player.getUniqueId() + ")");
201218
}

src/main/java/com/volmit/adapt/api/world/AdaptServer.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.volmit.adapt.content.item.KnowledgeOrb;
3636
import com.volmit.adapt.util.*;
3737
import lombok.Getter;
38+
import lombok.NonNull;
3839
import lombok.SneakyThrows;
3940
import org.bukkit.Bukkit;
4041
import org.bukkit.Material;
@@ -55,7 +56,7 @@
5556

5657
public class AdaptServer extends TickedObject {
5758
private final ReentrantLock clearLock = new ReentrantLock();
58-
private final Map<Player, AdaptPlayer> players = new ConcurrentHashMap<>();
59+
private final Map<UUID, AdaptPlayer> players = new ConcurrentHashMap<>();
5960
@Getter
6061
private final List<SpatialXP> spatialTickets = new ArrayList<>();
6162
@Getter
@@ -112,12 +113,15 @@ public void takeSpatial(AdaptPlayer p) {
112113

113114
public void join(Player p) {
114115
AdaptPlayer a = new AdaptPlayer(p);
115-
players.put(p, a);
116+
players.put(p.getUniqueId(), a);
116117
a.loggedIn();
117118
}
118119

119-
public void quit(Player p) {
120-
Optional.ofNullable(players.remove(p)).ifPresent(AdaptPlayer::unregister);
120+
public void quit(UUID p) {
121+
AdaptPlayer a = players.get(p);
122+
if (a == null) return;
123+
a.unregister();
124+
players.remove(p);
121125
}
122126

123127
@Override
@@ -175,7 +179,7 @@ public void on(PlayerJoinEvent e) {
175179
@EventHandler(priority = EventPriority.MONITOR)
176180
public void on(PlayerQuitEvent e) {
177181
Player p = e.getPlayer();
178-
quit(p);
182+
quit(p.getUniqueId());
179183
}
180184

181185
@EventHandler
@@ -205,7 +209,7 @@ public void onTick() {
205209
return;
206210

207211
try {
208-
players.keySet().removeIf(player -> !player.isOnline());
212+
players.values().removeIf(AdaptPlayer::shouldUnload);
209213
} finally {
210214
clearLock.unlock();
211215
}
@@ -236,11 +240,17 @@ public PlayerData peekData(UUID player) {
236240
return new PlayerData();
237241
}
238242

243+
@NonNull
244+
public Optional<PlayerData> getPlayerData(@NonNull UUID uuid) {
245+
return Optional.ofNullable(players.get(uuid))
246+
.map(AdaptPlayer::getData);
247+
}
248+
239249
public AdaptPlayer getPlayer(Player p) {
240-
return players.computeIfAbsent(p, player -> {
250+
return players.computeIfAbsent(p.getUniqueId(), player -> {
241251
Adapt.warn("Failed to find AdaptPlayer for " + p.getName() + " (" + p.getUniqueId() + ")");
242252
Adapt.warn("Loading new AdaptPlayer...");
243-
return new AdaptPlayer(player);
253+
return new AdaptPlayer(p);
244254
});
245255
}
246256

src/main/java/com/volmit/adapt/api/world/PlayerData.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
package com.volmit.adapt.api.world;
2020

21+
import com.google.gson.Gson;
2122
import com.volmit.adapt.Adapt;
2223
import com.volmit.adapt.AdaptConfig;
2324
import com.volmit.adapt.api.notification.ActionBarNotification;
@@ -43,6 +44,7 @@
4344
@Data
4445
@NoArgsConstructor
4546
public class PlayerData {
47+
private static final Gson GSON = new Gson();
4648
private final Map<String, PlayerSkillLine> skillLines = new ConcurrentHashMap<>();
4749
private Map<String, Double> stats = new ConcurrentHashMap<>();
4850
private String last = "none";
@@ -237,4 +239,12 @@ public PlayerSkillLine getSkillLine(String skillLine) {
237239
public void addWisdom() {
238240
wisdom++;
239241
}
242+
243+
public String toJson() {
244+
return GSON.toJson(this);
245+
}
246+
247+
public static PlayerData fromJson(String json) {
248+
return GSON.fromJson(json, PlayerData.class);
249+
}
240250
}

0 commit comments

Comments
 (0)