Skip to content

Commit 2c4a709

Browse files
Merge pull request #93 from Dans-Plugins/develop
Several Fixes
2 parents 2ad112e + 46d95b4 commit 2c4a709

39 files changed

+378
-146
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,6 @@ buildNumber.properties
110110
.flattened-pom.xml
111111

112112
# Common working directory
113-
run/
113+
run/
114+
115+
.env

.testcontainer/post-create.sh

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#!/bin/bash
2+
3+
SERVER_DIR="/testmcserver"
4+
BUILD_DIR="/testmcserver-build"
5+
RESOURCES_DIR="/resources/jars"
6+
7+
# Function: Log a message with the [POST-CREATE] prefix
8+
log() {
9+
local message="$1"
10+
echo "[POST-CREATE] $message"
11+
}
12+
13+
# Function: Setup server
14+
setup_server() {
15+
if [ -z "$(ls -A "$SERVER_DIR")" ] || [ "$OVERWRITE_EXISTING_SERVER" = "true" ]; then
16+
rm -rf "$SERVER_DIR"/*
17+
cp "$BUILD_DIR"/spigot-"${MINECRAFT_VERSION}".jar "$SERVER_DIR"/spigot-"${MINECRAFT_VERSION}".jar
18+
mkdir "$SERVER_DIR"/plugins
19+
else
20+
log "Server is already set up."
21+
fi
22+
}
23+
24+
# Function: Setup ops.json file
25+
setup_ops_file() {
26+
log "Creating ops.json file..."
27+
cat <<EOF > /testmcserver/ops.json
28+
[
29+
{
30+
"uuid": "${OPERATOR_UUID}",
31+
"name": "${OPERATOR_NAME}",
32+
"level": ${OPERATOR_LEVEL},
33+
"bypassesPlayerLimit": false
34+
}
35+
]
36+
EOF
37+
}
38+
39+
# Function: Accept EULA
40+
accept_eula() {
41+
log "Accepting Minecraft EULA..."
42+
echo "eula=true" > "$SERVER_DIR"/eula.txt
43+
}
44+
45+
# Function: Copy the latest plugin JAR with timestamp check
46+
copy_latest_plugin_jar() {
47+
log "Copying the latest plugin JAR..."
48+
ls -l "$BUILD_DIR/SimpleSkills/target" || log "ERROR: No target directory found in SimpleSkills build directory."
49+
if [ ! -d "$BUILD_DIR/SimpleSkills/target" ]; then
50+
log "ERROR: The target directory does not exist in the SimpleSkills build directory."
51+
log "List of files in the build directory:"
52+
ls -l "$BUILD_DIR" || log "ERROR: Failed to list files in the build directory."
53+
return 1
54+
fi
55+
local jarFile=$(find "$BUILD_DIR/SimpleSkills/target" -name "SimpleSkills-*.jar" -type f -print -quit)
56+
57+
if [ -z "$jarFile" ]; then
58+
log "ERROR: No plugin JAR file found in the build directory."
59+
return 1
60+
fi
61+
62+
local currentDate=$(date +%s)
63+
local jarDate=$(stat -c %Y "$jarFile")
64+
local diff=$((currentDate - jarDate))
65+
66+
if [ $diff -gt 300 ]; then
67+
log "WARNING: The plugin JAR is older than 5 minutes. It may be necessary to rebuild the plugin."
68+
fi
69+
70+
cp "$jarFile" "$SERVER_DIR/plugins" || log "ERROR: Failed to copy the plugin JAR."
71+
}
72+
73+
# Function: Update Bluemap configuration
74+
update_bluemap_config() {
75+
log "Updating Bluemap configuration..."
76+
sed -i 's/accept-download: false/accept-download: true/g' "$SERVER_DIR"/plugins/bluemap/core.conf
77+
}
78+
79+
# Function: Start server
80+
start_server() {
81+
log "Starting server ${MINECRAFT_VERSION} server from ${SERVER_DIR}/spigot-${MINECRAFT_VERSION}.jar..."
82+
java -jar "$SERVER_DIR"/spigot-"${MINECRAFT_VERSION}".jar
83+
}
84+
85+
# Main Process
86+
log "Running 'post-create.sh' script..."
87+
setup_server
88+
setup_ops_file
89+
accept_eula
90+
if ! copy_latest_plugin_jar; then
91+
log "Exiting script due to error in copying the latest plugin JAR."
92+
exit 1
93+
fi
94+
95+
# Start Server
96+
start_server

Dockerfile

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
FROM ubuntu
2+
3+
# Install dependencies
4+
RUN apt update
5+
RUN DEBIAN_FRONTEND=noninteractive apt install -y wget git openjdk-21-jdk openjdk-21-jre
6+
7+
# Build server
8+
WORKDIR /testmcserver-build
9+
RUN wget -O BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
10+
RUN git config --global --unset core.autocrlf || :
11+
RUN java -jar BuildTools.jar --rev 1.21.4
12+
13+
# Copy plugin jar (built separately, not in this Dockerfile, this is to save time by avoiding rebuilding the plugin)
14+
COPY ./target /testmcserver-build/SimpleSkills/target
15+
16+
# Copy resources and make post-create.sh executable
17+
COPY ./.testcontainer /resources
18+
RUN chmod +x /resources/post-create.sh
19+
20+
# Run server
21+
WORKDIR /testmcserver
22+
EXPOSE 25565
23+
ENTRYPOINT /resources/post-create.sh

compose.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
services:
2+
testmcserver:
3+
build: .
4+
image: ss-test-mc-server
5+
container_name: ss-test-mc-server
6+
ports:
7+
- "25565:25565"
8+
volumes:
9+
- type: bind
10+
source: ./testmcserver # note: might need to create this directory before running
11+
target: /testmcserver
12+
environment:
13+
- MINECRAFT_VERSION=${MINECRAFT_VERSION}
14+
- OPERATOR_UUID=${OPERATOR_UUID}
15+
- OPERATOR_NAME=${OPERATOR_NAME}
16+
- OPERATOR_LEVEL=${OPERATOR_LEVEL}
17+
- OVERWRITE_EXISTING_SERVER=${OVERWRITE_EXISTING_SERVER}

down.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
docker compose down --remove-orphans

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>dansplugins</groupId>
88
<artifactId>SimpleSkills</artifactId>
9-
<version>2.1.0</version>
9+
<version>2.2.0-SNAPSHOT</version>
1010
<packaging>jar</packaging>
1111

1212
<name>SimpleSkills</name>

sample.env

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Version of minecraft expected to be installed
2+
MINECRAFT_VERSION=1.21.4
3+
4+
# Operator user UUID, name, and level
5+
OPERATOR_UUID=
6+
OPERATOR_NAME=
7+
OPERATOR_LEVEL=4
8+
9+
# Whether to overwrite existing server
10+
OVERWRITE_EXISTING_SERVER=false

src/main/java/dansplugins/simpleskills/SimpleSkills.java

Lines changed: 60 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import dansplugins.simpleskills.bstats.Metrics;
44
import dansplugins.simpleskills.commands.*;
55
import dansplugins.simpleskills.commands.tab.TabCommand;
6-
import dansplugins.simpleskills.playerrecord.PlayerRecord;
76
import dansplugins.simpleskills.playerrecord.PlayerRecordRepository;
87
import dansplugins.simpleskills.config.ConfigService;
98
import dansplugins.simpleskills.message.MessageService;
@@ -13,12 +12,14 @@
1312
import dansplugins.simpleskills.chance.ChanceCalculator;
1413
import dansplugins.simpleskills.experience.ExperienceCalculator;
1514

16-
import dansplugins.simpleskills.logging.Logger;
15+
import dansplugins.simpleskills.logging.Log;
1716
import dansplugins.simpleskills.skill.skills.*;
1817
import org.bukkit.Bukkit;
1918
import org.bukkit.command.Command;
2019
import org.bukkit.command.CommandSender;
2120
import org.bukkit.command.PluginCommand;
21+
import org.bukkit.event.EventHandler;
22+
import org.bukkit.event.Listener;
2223
import org.jetbrains.annotations.NotNull;
2324
import preponderous.ponder.minecraft.bukkit.PonderMC;
2425
import preponderous.ponder.minecraft.bukkit.abs.AbstractPluginCommand;
@@ -32,18 +33,18 @@
3233
/**
3334
* @author Daniel Stephenson
3435
*/
35-
public class SimpleSkills extends PonderBukkitPlugin {
36+
public class SimpleSkills extends PonderBukkitPlugin implements Listener {
3637
private final String pluginVersion = "v" + getDescription().getVersion();
3738
private PonderMC ponder;
3839

39-
private final Logger logger = new Logger(this);
40+
private final Log log = new Log(this);
4041
private final MessageService messageService = new MessageService(this);
4142
private final ConfigService configService = new ConfigService(this);
4243
private final ExperienceCalculator experienceCalculator = new ExperienceCalculator();
43-
private final PlayerRecordRepository playerRecordRepository = new PlayerRecordRepository();
4444
private final SkillRepository skillRepository = new SkillRepository();
45-
private final StorageService storageService = new StorageService(playerRecordRepository, skillRepository, messageService, configService, experienceCalculator, logger);
46-
private final ChanceCalculator chanceCalculator = new ChanceCalculator(playerRecordRepository, configService, skillRepository, messageService, experienceCalculator, logger);
45+
private final PlayerRecordRepository playerRecordRepository = new PlayerRecordRepository(log, messageService, skillRepository, configService, experienceCalculator);
46+
private final StorageService storageService = new StorageService(playerRecordRepository, skillRepository, messageService, configService, experienceCalculator, log);
47+
private final ChanceCalculator chanceCalculator = new ChanceCalculator(playerRecordRepository, configService, skillRepository, messageService, experienceCalculator, log);
4748

4849

4950
/**
@@ -56,21 +57,26 @@ public void onEnable() {
5657
setTabCompleterForCoreCommands();
5758
configService.createconfig();
5859
setupMetrics();
60+
getLogger().log(Level.INFO, "Loading files.");
5961
storageService.load();
62+
getLogger().log(Level.INFO, "Creating language files.");
6063
messageService.createlang();
6164
initializeSkills();
62-
registerEvents();
65+
registerEventListeners();
6366
initializeCommandService();
6467
checkFilesVersion();
6568
}
6669

6770
/**
68-
* This runs when the sever stops.
71+
* This runs when the server stops.
6972
*/
7073
@Override
7174
public void onDisable() {
75+
getLogger().log(Level.INFO, "Saving files.");
7276
storageService.save();
77+
getLogger().log(Level.INFO, "Saving language files.");
7378
messageService.savelang();
79+
getLogger().log(Level.INFO, "Saving config files.");
7480
configService.saveconfig();
7581
}
7682

@@ -111,6 +117,7 @@ public boolean isDebugEnabled() {
111117
}
112118

113119
private void checkFilesVersion() {
120+
getLogger().log(Level.INFO, "Checking config and message files for version compatibility.");
114121
if (messageService.getlang().getDouble("message-version") != 0.2) {
115122
getLogger().log( Level.SEVERE, "Outdated message.yml! Please backup & update message.yml file and restart server again!!");
116123
}
@@ -122,15 +129,16 @@ private void checkFilesVersion() {
122129
private void performNMSChecks() {
123130
final NMSAssistant nmsAssistant = new NMSAssistant();
124131
if (nmsAssistant.isVersionGreaterThan(12)) {
125-
getLogger().log(Level.INFO, "Loading Data For " + nmsAssistant.getNMSVersion().toString());
132+
getLogger().log(Level.INFO, "Loading data For " + nmsAssistant.getNMSVersion().toString());
126133
} else {
127134
getLogger().warning("The server version is not suitable to load the plugin");
128-
getLogger().warning("Support version 1.13.x - 1.18.x");
135+
getLogger().warning("This plugin is tested on a 1.21.4 server.");
129136
Bukkit.getServer().getPluginManager().disablePlugin(this);
130137
}
131138
}
132139

133140
private void setupMetrics() {
141+
getLogger().log(Level.INFO, "Setting up bStats metrics for SimpleSkills.");
134142
int pluginId = 13470;
135143
Metrics metrics = new Metrics(this, pluginId);
136144

@@ -151,6 +159,7 @@ private void setupMetrics() {
151159

152160

153161
private void setTabCompleterForCoreCommands() {
162+
getLogger().log(Level.INFO, "Setting up tab completers for core commands.");
154163
for (String key : getDescription().getCommands().keySet()) {
155164
PluginCommand command = getCommand(key);
156165
if (command == null) {
@@ -160,16 +169,21 @@ private void setTabCompleterForCoreCommands() {
160169
}
161170
}
162171

163-
private void registerEvents() {
172+
private void registerEventListeners() {
173+
getLogger().log(Level.INFO, "Registering events...");
164174
for (AbstractSkill skill : skillRepository.getSkills()) {
175+
getLogger().log(Level.INFO, "Registering events for skill: " + skill.getName());
165176
skill.register();
166177
}
178+
179+
Bukkit.getPluginManager().registerEvents(this, this);
167180
}
168181

169182
private void initializeCommandService() {
183+
getLogger().log(Level.INFO, "Initializing command service...");
170184
ArrayList<AbstractPluginCommand> commands = new ArrayList<>(Arrays.asList(
171185
new HelpCommand(messageService),
172-
new InfoCommand(playerRecordRepository, messageService, skillRepository, configService, experienceCalculator, logger),
186+
new InfoCommand(playerRecordRepository, messageService, skillRepository, configService, experienceCalculator, log),
173187
new StatsCommand(messageService, playerRecordRepository, skillRepository),
174188
new ForceCommand(playerRecordRepository, skillRepository),
175189
new SkillCommand(messageService, skillRepository),
@@ -180,26 +194,39 @@ private void initializeCommandService() {
180194
}
181195

182196
private void initializeSkills() {
183-
skillRepository.addSkill(new Athlete(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
184-
skillRepository.addSkill(new Boating(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
185-
skillRepository.addSkill(new Breeding(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
186-
skillRepository.addSkill(new Cardio(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
187-
skillRepository.addSkill(new Crafting(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
188-
skillRepository.addSkill(new Digging(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
189-
skillRepository.addSkill(new Dueling(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
190-
skillRepository.addSkill(new Enchanting(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
191-
skillRepository.addSkill(new Farming(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
192-
skillRepository.addSkill(new Fishing(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
193-
skillRepository.addSkill(new Floriculture(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
194-
skillRepository.addSkill(new Gliding(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
195-
skillRepository.addSkill(new Hardiness(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
196-
skillRepository.addSkill(new Woodcutting(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
197-
skillRepository.addSkill(new Mining(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
198-
skillRepository.addSkill(new MonsterHunting(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
199-
skillRepository.addSkill(new Pyromaniac(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
200-
skillRepository.addSkill(new Quarrying(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
201-
skillRepository.addSkill(new Riding(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
202-
skillRepository.addSkill(new Strength(configService, logger, playerRecordRepository, this, messageService, chanceCalculator));
197+
getLogger().log(Level.INFO, "Initializing skills...");
198+
skillRepository.addSkill(new Athlete(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
199+
skillRepository.addSkill(new Boating(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
200+
skillRepository.addSkill(new Breeding(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
201+
skillRepository.addSkill(new Cardio(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
202+
skillRepository.addSkill(new Crafting(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
203+
skillRepository.addSkill(new Digging(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
204+
skillRepository.addSkill(new Dueling(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
205+
skillRepository.addSkill(new Enchanting(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
206+
skillRepository.addSkill(new Farming(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
207+
skillRepository.addSkill(new Fishing(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
208+
skillRepository.addSkill(new Floriculture(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
209+
skillRepository.addSkill(new Gliding(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
210+
skillRepository.addSkill(new Hardiness(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
211+
skillRepository.addSkill(new Woodcutting(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
212+
skillRepository.addSkill(new Mining(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
213+
skillRepository.addSkill(new MonsterHunting(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
214+
skillRepository.addSkill(new Pyromaniac(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
215+
skillRepository.addSkill(new Quarrying(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
216+
skillRepository.addSkill(new Riding(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
217+
skillRepository.addSkill(new Strength(configService, log, playerRecordRepository, this, messageService, chanceCalculator));
218+
}
219+
220+
@EventHandler
221+
public void onPlayerJoin(@NotNull org.bukkit.event.player.PlayerJoinEvent event) {
222+
if (playerRecordRepository.getPlayerRecord(event.getPlayer().getUniqueId()) == null) {
223+
getLogger().log(Level.INFO, "No player record found for " + event.getPlayer().getName() + ". Creating a new one.");
224+
boolean success = playerRecordRepository.createPlayerRecord(event.getPlayer().getUniqueId());
225+
if (!success) {
226+
event.getPlayer().sendMessage("Error creating player record. Please try again later.");
227+
log.info("Error creating player record for " + event.getPlayer().getName() + ". Please check the logs for more details.");
228+
}
229+
}
203230
}
204231

205232
}

0 commit comments

Comments
 (0)