mirror of
https://github.com/KoopaCode/LifeSteal-Core.git
synced 2025-04-02 06:47:32 +00:00
1.0.1 Release Fix!
This commit is contained in:
parent
725274453e
commit
af1ca7831d
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
7
.idea/encodings.xml
generated
Normal file
7
.idea/encodings.xml
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
14
.idea/misc.xml
generated
Normal file
14
.idea/misc.xml
generated
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="MavenProjectsManager">
|
||||||
|
<option name="originalFiles">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/pom.xml" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>com.koopa</groupId>
|
<groupId>com.koopa</groupId>
|
||||||
<artifactId>lifestealcore</artifactId>
|
<artifactId>lifestealcore</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.1</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>LifeStealCore</name>
|
<name>LifeStealCore</name>
|
||||||
|
@ -1 +1 @@
|
|||||||
TEST
|
https://www.spigotmc.org/resources/lifesteal-core-1-13-1-20-4.121599/
|
@ -24,6 +24,7 @@ public class PlayerListener implements Listener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
// Load their hearts from hearts.yml and update their health
|
||||||
plugin.getHeartManager().updatePlayerMaxHealth(player);
|
plugin.getHeartManager().updatePlayerMaxHealth(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,20 +32,25 @@ public class PlayerListener implements Listener {
|
|||||||
public void onPlayerDeath(PlayerDeathEvent event) {
|
public void onPlayerDeath(PlayerDeathEvent event) {
|
||||||
Player victim = event.getEntity();
|
Player victim = event.getEntity();
|
||||||
Player killer = victim.getKiller();
|
Player killer = victim.getKiller();
|
||||||
|
int victimHearts = plugin.getHeartManager().getPlayerHearts(victim);
|
||||||
|
|
||||||
if (killer != null && killer != victim) {
|
// Check if this is their last heart
|
||||||
int victimHearts = plugin.getHeartManager().getPlayerHearts(victim);
|
if (victimHearts <= 1) {
|
||||||
int killerHearts = plugin.getHeartManager().getPlayerHearts(killer);
|
// Ban them but keep minimum health for game mechanics
|
||||||
|
plugin.getBanManager().banPlayer(victim, killer); // Ban with dramatic effect
|
||||||
if (victimHearts > plugin.getConfig().getInt("settings.min-hearts")) {
|
plugin.getHeartManager().setPlayerHearts(victim, 0); // This won't set health to 0
|
||||||
plugin.getHeartManager().setPlayerHearts(victim, victimHearts - 1);
|
return;
|
||||||
plugin.getHeartManager().setPlayerHearts(killer, killerHearts + 1);
|
|
||||||
killer.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 100, 1));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ban the player
|
// Only lose hearts to player kills
|
||||||
plugin.getBanManager().banPlayer(victim);
|
if (killer != null && killer != victim) {
|
||||||
|
// PvP death - transfer heart
|
||||||
|
int killerHearts = plugin.getHeartManager().getPlayerHearts(killer);
|
||||||
|
plugin.getHeartManager().setPlayerHearts(victim, victimHearts - 1);
|
||||||
|
plugin.getHeartManager().setPlayerHearts(killer, killerHearts + 1);
|
||||||
|
killer.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 100, 1));
|
||||||
|
}
|
||||||
|
// Non-PvP deaths don't lose hearts unless it was their last heart
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -125,15 +125,32 @@ public class BanManager {
|
|||||||
Bukkit.broadcastMessage(MessageUtils.color("&c&lBANISHED TO THE SHADOW REALM"));
|
Bukkit.broadcastMessage(MessageUtils.color("&c&lBANISHED TO THE SHADOW REALM"));
|
||||||
Bukkit.broadcastMessage("");
|
Bukkit.broadcastMessage("");
|
||||||
|
|
||||||
// Ban the player
|
// Add to banned players list
|
||||||
|
bannedPlayers.put(player.getUniqueId(), true);
|
||||||
|
banData.set(player.getUniqueId().toString() + ".name", player.getName());
|
||||||
|
banData.set(player.getUniqueId().toString() + ".banTime", System.currentTimeMillis());
|
||||||
|
saveBanData();
|
||||||
|
|
||||||
|
// Ban and kick the player
|
||||||
Bukkit.getScheduler().runTaskLater(plugin, () -> {
|
Bukkit.getScheduler().runTaskLater(plugin, () -> {
|
||||||
|
// Ban the player
|
||||||
|
Bukkit.getBanList(BanList.Type.NAME).addBan(
|
||||||
|
player.getName(),
|
||||||
|
MessageUtils.color(
|
||||||
|
"&c&lYOU HAVE BEEN BANISHED!\n\n" +
|
||||||
|
"&7You have lost all your hearts...\n" +
|
||||||
|
"&7Other players must use a Revival Beacon to bring you back!"
|
||||||
|
),
|
||||||
|
null, // No expiry
|
||||||
|
"LifeSteal System"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Kick them with the message
|
||||||
player.kickPlayer(MessageUtils.color(
|
player.kickPlayer(MessageUtils.color(
|
||||||
"&c&lYOU HAVE BEEN BANISHED!\n\n" +
|
"&c&lYOU HAVE BEEN BANISHED!\n\n" +
|
||||||
"&7You have lost all your hearts...\n" +
|
"&7You have lost all your hearts...\n" +
|
||||||
"&7Find a Revival Beacon to return!"
|
"&7Other players must use a Revival Beacon to bring you back!"
|
||||||
));
|
));
|
||||||
plugin.getConfig().set("banned-players." + player.getUniqueId(), true);
|
|
||||||
plugin.saveConfig();
|
|
||||||
}, 2L); // Small delay for dramatic effect
|
}, 2L); // Small delay for dramatic effect
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,17 @@ public class HeartManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
data = YamlConfiguration.loadConfiguration(dataFile);
|
data = YamlConfiguration.loadConfiguration(dataFile);
|
||||||
|
|
||||||
|
// Load all saved hearts into memory
|
||||||
|
for (String uuidString : data.getKeys(false)) {
|
||||||
|
try {
|
||||||
|
UUID uuid = UUID.fromString(uuidString);
|
||||||
|
int hearts = data.getInt(uuidString);
|
||||||
|
playerHearts.put(uuid, hearts);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
plugin.getLogger().warning("Invalid UUID in hearts.yml: " + uuidString);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveAllData() {
|
public void saveAllData() {
|
||||||
@ -54,18 +65,43 @@ public class HeartManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getPlayerHearts(Player player) {
|
public int getPlayerHearts(Player player) {
|
||||||
return playerHearts.getOrDefault(player.getUniqueId(),
|
UUID uuid = player.getUniqueId();
|
||||||
plugin.getConfig().getInt("settings.default-hearts"));
|
if (!playerHearts.containsKey(uuid)) {
|
||||||
|
// If player doesn't have hearts saved, give them default hearts
|
||||||
|
int defaultHearts = plugin.getConfig().getInt("settings.default-hearts");
|
||||||
|
playerHearts.put(uuid, defaultHearts);
|
||||||
|
savePlayerHearts(uuid);
|
||||||
|
}
|
||||||
|
return playerHearts.get(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPlayerHearts(Player player, int hearts) {
|
public void setPlayerHearts(Player player, int hearts) {
|
||||||
playerHearts.put(player.getUniqueId(), hearts);
|
UUID uuid = player.getUniqueId();
|
||||||
updatePlayerMaxHealth(player);
|
// Ensure minimum of 1 health for game mechanics
|
||||||
|
hearts = Math.max(0, hearts);
|
||||||
|
playerHearts.put(uuid, hearts);
|
||||||
|
savePlayerHearts(uuid);
|
||||||
|
|
||||||
|
if (hearts > 0) {
|
||||||
|
updatePlayerMaxHealth(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void savePlayerHearts(UUID uuid) {
|
||||||
|
// Save to hearts.yml immediately when changed
|
||||||
|
data.set(uuid.toString(), playerHearts.get(uuid));
|
||||||
|
try {
|
||||||
|
data.save(dataFile);
|
||||||
|
} catch (Exception e) {
|
||||||
|
plugin.getLogger().severe("Could not save hearts data!");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updatePlayerMaxHealth(Player player) {
|
public void updatePlayerMaxHealth(Player player) {
|
||||||
int hearts = getPlayerHearts(player);
|
int hearts = getPlayerHearts(player);
|
||||||
player.setMaxHealth(hearts * 2);
|
// Minimum of 1 health (0.5 hearts) for the game
|
||||||
|
player.setMaxHealth(Math.max(1, hearts * 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setHearts(UUID uuid, int hearts) {
|
public void setHearts(UUID uuid, int hearts) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
name: LifeStealCore
|
name: LifeStealCore
|
||||||
version: '1.0.0'
|
version: '1.0.1'
|
||||||
main: com.koopa.lifestealcore.LifeStealCore
|
main: com.koopa.lifestealcore.LifeStealCore
|
||||||
api-version: '1.13'
|
api-version: '1.13'
|
||||||
author: Koopa
|
author: Koopa
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0.0
|
1.0.1
|
Loading…
x
Reference in New Issue
Block a user