Skip to content

Commit

Permalink
Merge pull request #3 from Furyloxx/fix-npc
Browse files Browse the repository at this point in the history
Fix npc and Improve this slayer logic
  • Loading branch information
GrishMahat authored Sep 25, 2024
2 parents e02cccb + 2fa994b commit fe1f771
Show file tree
Hide file tree
Showing 6 changed files with 157 additions and 206 deletions.
25 changes: 14 additions & 11 deletions src/main/java/me/godspunky/skyblock/Skyblock.java
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ public void onEnable() {
new WardrobeListener(this);
new CheckPlayerGUIListener(this);
loadymldata();
registerNPCS();
loadIslandWorld();
loadDungeonWorld();
loadCommandMap();
Expand Down Expand Up @@ -288,20 +289,22 @@ public void loadListeners() {
this.sendMessage(SUtil.getRandomVisibleColor() + "Successfully loaded listeners [" + SUtil.getTimeDifferenceAndColor(start, System.currentTimeMillis()) + ChatColor.WHITE + "]");
}

private void registerNPCS()
{
Reflections reflections = new Reflections("import me.godspunky.skyblock.npc");
for (Class<? extends SkyblockNPC> npcClazz : reflections.getSubTypesOf(SkyblockNPC.class)){
try {
npcClazz.getDeclaredConstructor().newInstance();
}catch (Exception ex){
ex.printStackTrace();
private void registerNPCS() {
this.sendMessage(SUtil.getRandomVisibleColor() + "Registering NPCs...");
long start = System.currentTimeMillis();

}
Reflections reflections = new Reflections("me.godspunky.skyblock.npc");
for (Class<? extends SkyblockNPC> npcClazz : reflections.getSubTypesOf(SkyblockNPC.class)) {
try {
SkyblockNPC npcInstance = npcClazz.getDeclaredConstructor().newInstance();
SkyblockNPCManager.addNPC(npcInstance);
} catch (Exception ex) {
}
SLog.info("Loaded " + SkyblockNPCManager.getNPCS().size() + " npcs");

}

this.sendMessage(SUtil.getRandomVisibleColor() + "Successfully registered " + SkyblockNPCManager.getNPCS().size() + " NPCs [" + SUtil.getTimeDifferenceAndColor(start, System.currentTimeMillis()) + ChatColor.WHITE + "]");
}


public void loadDatabase() {
this.sendMessage(SUtil.getRandomVisibleColor() + "Loading SQL Database...");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,42 +35,42 @@ public class SlayerBossType {
"At 50% health, calls its deadly pack", "of pups.");

public static final SlayerBossType REVENANT_HORROR_I = new SlayerBossType("revenant_horror_i", "Revenant Horror", SEntityType.REVENANT_HORROR, 1,
"Beginner", SlayerMobType.ZOMBIE, 500, 15, 5, 150, 100, LIFE_DRAIN);
"Beginner", SlayerMobType.ZOMBIE, 500, 15, 5, 5, 100, LIFE_DRAIN);
public static final SlayerBossType REVENANT_HORROR_II = new SlayerBossType("revenant_horror_ii",
"Revenant Horror", SEntityType.REVENANT_HORROR, 2, "Strong", SlayerMobType.ZOMBIE,
20000, 50, 25, 1440, 2000, LIFE_DRAIN, PESTILENCE);
20000, 50, 25, 25, 2000, LIFE_DRAIN, PESTILENCE);
public static final SlayerBossType REVENANT_HORROR_III = new SlayerBossType("revenant_horror_iii",
"Revenant Horror", SEntityType.REVENANT_HORROR, 3, "Challenging", SlayerMobType.ZOMBIE, 400000, 300,
100, 2400, 10000, LIFE_DRAIN, PESTILENCE, ENRAGE);
100, 100, 10000, LIFE_DRAIN, PESTILENCE, ENRAGE);
public static final SlayerBossType REVENANT_HORROR_IV = new SlayerBossType("revenant_horror_iv",
"Revenant Horror", SEntityType.REVENANT_HORROR, 4, "Deadly", SlayerMobType.ZOMBIE, 1500000,
1000, 500, 4800, 50000, LIFE_DRAIN, PESTILENCE, ENRAGE);
1000, 500, 500, 50000, LIFE_DRAIN, PESTILENCE, ENRAGE);

public static final SlayerBossType TARANTULA_BROODFATHER_I = new SlayerBossType("tarantula_broodfather_i", "Tarantula Broodfather",
SEntityType.TARANTULA_BROODFATHER, 1, "Beginner", SlayerMobType.SPIDER, 750,
35, 5, 250, 100, COMBAT_JUMP);
35, 5, 5, 100, COMBAT_JUMP);
public static final SlayerBossType TARANTULA_BROODFATHER_II = new SlayerBossType("tarantula_broodfather_ii", "Tarantula Broodfather",
SEntityType.TARANTULA_BROODFATHER, 2, "Strong", SlayerMobType.SPIDER, 30000,
110, 25, 600, 2000, COMBAT_JUMP, NOXIOUS);
110, 25, 25, 2000, COMBAT_JUMP, NOXIOUS);
public static final SlayerBossType TARANTULA_BROODFATHER_III = new SlayerBossType("tarantula_broodfather_iii", "Tarantula Broodfather",
SEntityType.TARANTULA_BROODFATHER, 3, "Challenging", SlayerMobType.SPIDER, 900000,
525, 100, 1000, 10000, COMBAT_JUMP, NOXIOUS);
525, 100, 100, 10000, COMBAT_JUMP, NOXIOUS);
public static final SlayerBossType TARANTULA_BROODFATHER_IV = new SlayerBossType("tarantula_broodfather_iv", "Tarantula Broodfather",
SEntityType.TARANTULA_BROODFATHER, 4, "Debilitating", SlayerMobType.SPIDER, 2400000,
1325, 500, 2000, 50000, COMBAT_JUMP, NOXIOUS);
1325, 500, 500, 50000, COMBAT_JUMP, NOXIOUS);

public static final SlayerBossType SVEN_PACKMASTER_I = new SlayerBossType("sven_packmaster_i",
"Sven Packmaster", SEntityType.SVEN_PACKMASTER, 1, "Beginner", SlayerMobType.WOLF, 2000, 60, 5, 250,
"Sven Packmaster", SEntityType.SVEN_PACKMASTER, 1, "Beginner", SlayerMobType.WOLF, 2000, 60, 5, 5,
100, AGILE);
public static final SlayerBossType SVEN_PACKMASTER_II = new SlayerBossType("sven_packmaster_ii",
"Sven Packmaster", SEntityType.SVEN_PACKMASTER, 2, "Strong", SlayerMobType.WOLF, 40000,
200, 10, 25, 600, 2000, AGILE, TRUE_DAMAGE);
200, 10, 25, 25, 2000, AGILE, TRUE_DAMAGE);
public static final SlayerBossType SVEN_PACKMASTER_III = new SlayerBossType("sven_packmaster_iii",
"Sven Packmaster", SEntityType.SVEN_PACKMASTER, 3, "Challenging", SlayerMobType.WOLF, 750000,
450, 50, 100, 1500, 10000, AGILE, TRUE_DAMAGE, CALL_THE_PUPS);
450, 50, 100, 100, 10000, AGILE, TRUE_DAMAGE, CALL_THE_PUPS);
public static final SlayerBossType SVEN_PACKMASTER_IV = new SlayerBossType("sven_packmaster_iv",
"Sven Packmaster", SEntityType.SVEN_PACKMASTER, 4, "Truly Painful", SlayerMobType.WOLF, 2000000,
1100, 200, 500, 3000, 50000, AGILE, TRUE_DAMAGE, CALL_THE_PUPS);
1100, 200, 500, 500, 50000, AGILE, TRUE_DAMAGE, CALL_THE_PUPS);

private final String namespace;
private final String name;
Expand Down Expand Up @@ -125,36 +125,27 @@ public static ChatColor getColorForTier(int tier) {
public static int staticGetXPReqForLevel(int level, EntityType type) {
switch (type) {
case ZOMBIE:
return (Integer) SUtil.getOrDefault(Arrays.asList(new Integer[]{5, 15, 200, Integer.valueOf(1000), Integer.valueOf(5000), Integer.valueOf(20000), Integer.valueOf(100000), Integer.valueOf(400000), Integer.valueOf(1000000)}), level, Integer.valueOf(1000000));
return SUtil.getOrDefault(Arrays.asList(5, 15, 200, 1000, 5000, 20000, 100000, 400000, 1000000), level - 1, 1000000);
case SPIDER:
return (Integer) SUtil.getOrDefault(Arrays.asList(new Integer[]{5, 25, 200, Integer.valueOf(1000), Integer.valueOf(5000), Integer.valueOf(20000), Integer.valueOf(100000), Integer.valueOf(400000), Integer.valueOf(1000000)} ), level, Integer.valueOf(1000000));
return SUtil.getOrDefault(Arrays.asList(5, 25, 200, 1000, 5000, 20000, 100000, 400000, 1000000), level - 1, 1000000);
case WOLF:
return (Integer) SUtil.getOrDefault(Arrays.asList(new Integer[]{10, 30, 250, 1500, 5000, 20000, Integer.valueOf(100000), Integer.valueOf(400000), Integer.valueOf(1000000)} ), level, Integer.valueOf(1000000));
return SUtil.getOrDefault(Arrays.asList(10, 30, 250, 1500, 5000, 20000, 100000, 400000, 1000000), level - 1, 1000000);
case ENDERMAN:
return (Integer) SUtil.getOrDefault(Arrays.asList(10, 30, 250, Integer.valueOf(1500), Integer.valueOf(5000), Integer.valueOf(20000), Integer.valueOf(100000), Integer.valueOf(400000), 1000000), level, 1000000);
return SUtil.getOrDefault(Arrays.asList(10, 30, 250, 1500, 5000, 20000, 100000, 400000, 1000000), level - 1, 1000000);
default:
return 1000000;
}
return 1000000;
}

public int getXPReqForLevel(int level) {
switch (type) {
case ZOMBIE:
return SUtil.getOrDefault(Arrays.asList(5, 15, 200, 1000, 5000, 20000, 100000, 400000, 1000000), level, 1000000);
case SPIDER:
return SUtil.getOrDefault(Arrays.asList(5, 25, 200, 1000, 5000, 20000, 100000, 400000, 1000000), level, 1000000);
case WOLF:
return SUtil.getOrDefault(Arrays.asList(10, 30, 250, 1500, 5000, 20000, 100000, 400000, 1000000), level, 1000000);
default:
return 1000000;
}
return staticGetXPReqForLevel(level, type.getEntityType());
}

public static SlayerBossType getByNamespace(String namespace) {
for (SlayerBossType type : TYPES) {
if (namespace.toLowerCase().equals(type.namespace.toLowerCase()))
return type;
}
return null;
return TYPES.stream()
.filter(type -> type.namespace.equalsIgnoreCase(namespace))
.findFirst()
.orElse(null);
}

public String getDisplayName() {
Expand Down Expand Up @@ -209,39 +200,15 @@ public enum SlayerMobType {
WOLF;

public String getName() {
switch (this) {
case ZOMBIE:
return "Zombie";
case SPIDER:
return "Spider";
case WOLF:
return "Wolf";
}
return "Unknown";
return name().charAt(0) + name().substring(1).toLowerCase();
}

public String getPluralName() {
switch (this) {
case ZOMBIE:
return "Zombies";
case SPIDER:
return "Spiders";
case WOLF:
return "Wolves";
}
return "Unknown";
return getName() + (this == WOLF ? "ves" : "s");
}

public EntityType getEntityType() {
switch (this) {
case ZOMBIE:
return EntityType.ZOMBIE;
case SPIDER:
return EntityType.SPIDER;
case WOLF:
return EntityType.WOLF;
}
return null;
return EntityType.valueOf(name());
}

public Material getIcon() {
Expand All @@ -252,40 +219,19 @@ public Material getIcon() {
return Material.WEB;
case WOLF:
return Material.MUTTON;
default:
return Material.AIR;
}
return Material.AIR;
}

public int getLevelForXP(int xp) {
if (xp >= 1000000) return 9;
if (xp >= 400000) return 8;
if (xp >= 100000) return 7;
if (xp >= 20000) return 6;
if (xp >= 5000) return 5;
switch (this) {
case ZOMBIE: {
if (xp >= 1000) return 4;
if (xp >= 200) return 3;
if (xp >= 15) return 2;
if (xp >= 5) return 1;
break;
}
case SPIDER: {
if (xp >= 1000) return 4;
if (xp >= 200) return 3;
if (xp >= 25) return 2;
if (xp >= 5) return 1;
break;
}
case WOLF: {
if (xp >= 1500) return 4;
if (xp >= 250) return 3;
if (xp >= 30) return 2;
if (xp >= 10) return 1;
break;
int[] thresholds = {5, 15, 200, 1000, 5000, 20000, 100000, 400000, 1000000};
for (int i = 0; i < thresholds.length; i++) {
if (xp < thresholds[i]) {
return i;
}
}
return 0;
return 9;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
import org.bukkit.World;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.ChatColor;

import java.util.HashMap;
import java.util.Map;
Expand All @@ -35,6 +37,7 @@ public class SlayerQuest implements ConfigurationSerializable {
@Setter
private SEntity entity;
private boolean bossSpawned;
private Player owner;

public SlayerQuest(SlayerBossType type, long started) {
this.type = type;
Expand Down Expand Up @@ -78,7 +81,6 @@ public static SlayerQuest deserialize(Map<String, Object> map) {
SEntityType.valueOf(String.valueOf(map.get("lastKilled"))));
}

// Plays the spawn effect for minibosses, similar to Hypixel's flashy visuals
public static void playMinibossSpawn(Location location, Entity sound) {
Location clone = location.clone();
World world = location.getWorld();
Expand All @@ -94,7 +96,6 @@ public static void playMinibossSpawn(Location location, Entity sound) {
);
}

// Plays the boss spawn effect with magical particles and explosions
public static void playBossSpawn(Location location, Entity sound) {
Location clone = location.clone();
World world = location.getWorld();
Expand All @@ -118,4 +119,10 @@ public void run() {
}.runTaskLater(Skyblock.getPlugin(), 28);
}

public void complete(Player player) {
killed = System.currentTimeMillis();

// Use the player parameter instead of owner
player.sendMessage(ChatColor.GREEN + "You completed the " + type.getDisplayName() + " Slayer quest!");
}
}
Loading

0 comments on commit fe1f771

Please sign in to comment.