Skip to content

Commit

Permalink
PhatLoots v5.6.1
Browse files Browse the repository at this point in the history
- Fixed SampleLoot failing to load on pre 1.20.5 Minecraft versions
- The SampleLoot can now be deleted if it is no longer desired
- Fixed the **/loot reset** and **/loot clean** commands not targeting the right block
- Ensured that new config options are now auto-populated to old configurations, rather than just using the default values
- Updated default item values to contain netherite tools, armor, etc.
- Fixed a bug causing auto-generated vanilla item names being in italic if no formatting was applied
  • Loading branch information
Redned235 committed Jul 6, 2024
1 parent e1eb426 commit 0e4e310
Show file tree
Hide file tree
Showing 9 changed files with 370 additions and 337 deletions.
4 changes: 2 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {
val supportedVersions = listOf("1.20", "1.20.1", "1.20.2", "1.20.3", "1.20.4", "1.20.5", "1.20.6", "1.21")

group = "com.codisimus.plugins"
version = "5.6.0"
version = "5.6.1"

java {
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
Expand Down Expand Up @@ -46,7 +46,7 @@ dependencies {

tasks {
runServer {
minecraftVersion("1.20.4")
minecraftVersion("1.20")
}

shadowJar {
Expand Down
18 changes: 6 additions & 12 deletions src/main/java/com/codisimus/plugins/phatloots/PhatLoots.java
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ public void onEnable() {
dataFolder = dir.getPath();

dir = new File(dataFolder, "LootTables");
boolean lootTablesExists = dir.exists();

if (!dir.isDirectory()) {
dir.mkdir();
}
Expand All @@ -99,18 +101,10 @@ public void onEnable() {
}

//Save SampleLoot.yml if it does not exist
File file = new File(dataFolder, "LootTables" + File.separator + "SampleLoot.yml");
if (!file.exists()) {
try (InputStream inputStream = this.getResource("SampleLoot.yml")) {
try (OutputStream outputStream = new FileOutputStream(file)) {
int read;
byte[] bytes = new byte[1024];

while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
}
} catch (IOException ex) {
if (!lootTablesExists) {
try {
this.saveResource("LootTables/SampleLoot.yml", false);
} catch (Exception ex) {
logger.log(Level.WARNING, "Could not save resource: SampleLoot.yml", ex);
}
}
Expand Down
27 changes: 23 additions & 4 deletions src/main/java/com/codisimus/plugins/phatloots/PhatLootsConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import com.codisimus.plugins.phatloots.loot.LootCollection;
import java.io.File;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.logging.Level;
import org.bukkit.ChatColor;
import org.bukkit.Material;
Expand Down Expand Up @@ -71,6 +73,8 @@ public class PhatLootsConfig {

public static String tierPrefix;

private static boolean configDirty;

public static void load() {
FileConfiguration config = PhatLoots.plugin.getConfig();

Expand All @@ -92,10 +96,10 @@ public static void load() {
}
}

cancelIfRegionHasPlayerOwner = config.getBoolean("CancelOpenIfRegionHasPlayerOwner", true);
cancelIfRegionHasPlayerMember = config.getBoolean("CancelOpenIfRegionHasPlayerMember", true);
cancelIfRegionHasGroupOwner = config.getBoolean("CancelOpenIfRegionHasGroupOwner", true);
cancelIfRegionHasGroupMember = config.getBoolean("CancelOpenIfRegionHasGroupMember", true);
cancelIfRegionHasPlayerOwner = getOrRun(config, "CancelOpenIfRegionHasPlayerOwner", true, config::getBoolean, config::set);
cancelIfRegionHasPlayerMember = getOrRun(config, "CancelOpenIfRegionHasPlayerMember", true, config::getBoolean, config::set);
cancelIfRegionHasGroupOwner = getOrRun(config, "CancelOpenIfRegionHasGroupOwner", true, config::getBoolean, config::set);
cancelIfRegionHasGroupMember = getOrRun(config, "CancelOpenIfRegionHasGroupMember", true, config::getBoolean, config::set);
checkIfRegionHasOwnerOrMember = (cancelIfRegionHasPlayerOwner || cancelIfRegionHasPlayerMember || cancelIfRegionHasGroupOwner || cancelIfRegionHasGroupMember);
ConfigurationSection section = config.getConfigurationSection("AutoLink");
if (section != null) {
Expand Down Expand Up @@ -238,6 +242,10 @@ public static void load() {
PhatLoots.autoSavePeriod = config.getInt("AutoSavePeriod") * 20L;
PhatLootsListener.autoBreakOnPunch = config.getBoolean("AutoBreakOnPunch");

if (configDirty) {
PhatLoots.plugin.saveConfig();
PhatLoots.logger.info("Config file has been updated with new values.");
}

/* LORES.YML */

Expand Down Expand Up @@ -296,4 +304,15 @@ private static String getString(ConfigurationSection config, String key) {
String string = ChatColor.translateAlternateColorCodes('&', config.getString(key));
return string.isEmpty() ? null : string;
}

private static <T> T getOrRun(ConfigurationSection section, String location, T defaultValue, Function<String, T> getter, BiConsumer<String, T> consumer) {
if (!section.contains(location, true)) {
consumer.accept(location, defaultValue);
configDirty = true;

return defaultValue;
}

return getter.apply(location);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public boolean linkHand(Player player, PhatLoot phatLoot) {
)
public boolean link(Player player, PhatLoot phatLoot) {
//Cancel if the player is not targeting a correct Block
Block block = player.getTargetBlock(EnumSet.of(Material.AIR, Material.CAVE_AIR, Material.VOID_AIR), 10);
Block block = player.getTargetBlock(null, 10);
String blockName = PhatLootsUtil.getBlockName(block);
if (!PhatLootsUtil.isLinkableType(block)) {
player.sendMessage("§6" + blockName + "§4 is not a linkable type.");
Expand Down Expand Up @@ -278,7 +278,7 @@ public boolean unlinkHand(Player player, PhatLoot phatLoot) {
permission = "phatloots.unlink"
)
public boolean unlink(Player player, PhatLoot phatLoot) {
Block block = player.getTargetBlock(EnumSet.of(Material.AIR, Material.CAVE_AIR, Material.VOID_AIR), 10);
Block block = player.getTargetBlock(null, 10);
phatLoot.removeChest(block);
player.sendMessage("§5Target §6" + PhatLootsUtil.getBlockName(block) + "§5 has been unlinked from PhatLoot §6" + phatLoot.name);
phatLoot.saveChests();
Expand Down Expand Up @@ -772,8 +772,8 @@ public boolean give(CommandSender sender, World world, PhatLoot phatLoot, String
permission = "phatloots.reset"
)
public boolean reset(Player player) {
Block block = player.getTargetBlock(EnumSet.noneOf(Material.class), 10);
for (PhatLoot phatLoot : PhatLootsUtil.getPhatLoots(player)) {
Block block = player.getTargetBlock(null, 10);
for (PhatLoot phatLoot : PhatLootsUtil.getPhatLoots(player, block)) {
phatLoot.reset(block);
player.sendMessage("§5Target §6" + PhatLootsUtil.getBlockName(block) + "§5 has been reset.");
}
Expand Down Expand Up @@ -809,8 +809,8 @@ public boolean reset(CommandSender sender, String string) {
permission = "phatloots.clean"
)
public boolean clean(Player player) {
Block block = player.getTargetBlock(EnumSet.noneOf(Material.class), 10);
for (PhatLoot phatLoot : PhatLootsUtil.getPhatLoots(player)) {
Block block = player.getTargetBlock(null, 10);
for (PhatLoot phatLoot : PhatLootsUtil.getPhatLoots(player, block)) {
phatLoot.clean(block);
player.sendMessage("§5Target §6" + PhatLootsUtil.getBlockName(block) + "§5 has been cleaned.");
}
Expand Down
27 changes: 15 additions & 12 deletions src/main/java/com/codisimus/plugins/phatloots/loot/Item.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ public class Item extends Loot {
};
/* MATERIALS */
private static final EnumSet<Material> ARMOR_MATERIAL_SET = EnumSet.of(
Material.NETHERITE_HELMET, Material.NETHERITE_CHESTPLATE,
Material.NETHERITE_LEGGINGS, Material.NETHERITE_BOOTS,
Material.DIAMOND_HELMET, Material.DIAMOND_CHESTPLATE,
Material.DIAMOND_LEGGINGS, Material.DIAMOND_BOOTS,
Material.IRON_HELMET, Material.IRON_CHESTPLATE,
Expand All @@ -104,27 +106,28 @@ public class Item extends Loot {
Material.CHAINMAIL_HELMET, Material.CHAINMAIL_CHESTPLATE,
Material.CHAINMAIL_LEGGINGS, Material.CHAINMAIL_BOOTS,
Material.LEATHER_HELMET, Material.LEATHER_CHESTPLATE,
Material.LEATHER_LEGGINGS, Material.LEATHER_BOOTS
Material.LEATHER_LEGGINGS, Material.LEATHER_BOOTS,
Material.TURTLE_HELMET
);
private static final EnumSet<Material> SWORD_MATERIAL_SET = EnumSet.of(
Material.DIAMOND_SWORD, Material.IRON_SWORD, Material.GOLDEN_SWORD,
Material.STONE_SWORD, Material.WOODEN_SWORD
Material.NETHERITE_SWORD, Material.DIAMOND_SWORD, Material.IRON_SWORD,
Material.GOLDEN_SWORD, Material.STONE_SWORD, Material.WOODEN_SWORD
);
private static final EnumSet<Material> AXE_MATERIAL_SET = EnumSet.of(
Material.DIAMOND_AXE, Material.IRON_AXE, Material.GOLDEN_AXE,
Material.STONE_AXE, Material.WOODEN_AXE
Material.NETHERITE_AXE, Material.DIAMOND_AXE, Material.IRON_AXE,
Material.GOLDEN_AXE, Material.STONE_AXE, Material.WOODEN_AXE
);
private static final EnumSet<Material> PICKAXE_MATERIAL_SET = EnumSet.of(
Material.DIAMOND_PICKAXE, Material.IRON_PICKAXE, Material.GOLDEN_PICKAXE,
Material.STONE_PICKAXE, Material.WOODEN_PICKAXE
Material.NETHERITE_PICKAXE, Material.DIAMOND_PICKAXE, Material.IRON_PICKAXE,
Material.GOLDEN_PICKAXE, Material.STONE_PICKAXE, Material.WOODEN_PICKAXE
);
private static final EnumSet<Material> SPADE_MATERIAL_SET = EnumSet.of(
Material.DIAMOND_SHOVEL, Material.IRON_SHOVEL, Material.GOLDEN_SHOVEL,
Material.STONE_SHOVEL, Material.WOODEN_SHOVEL
Material.NETHERITE_SHOVEL, Material.DIAMOND_SHOVEL, Material.IRON_SHOVEL,
Material.GOLDEN_SHOVEL, Material.STONE_SHOVEL, Material.WOODEN_SHOVEL
);
private static final EnumSet<Material> HOE_MATERIAL_SET = EnumSet.of(
Material.DIAMOND_HOE, Material.IRON_HOE, Material.GOLDEN_HOE,
Material.STONE_HOE, Material.WOODEN_HOE
Material.NETHERITE_HOE, Material.DIAMOND_HOE, Material.IRON_HOE,
Material.GOLDEN_HOE, Material.STONE_HOE, Material.WOODEN_HOE
);
public static int tierNotify;
public static FileConfiguration loreConfig;
Expand Down Expand Up @@ -472,7 +475,7 @@ public ItemStack getItem() {
}

//Set the new display name of the item
meta.setDisplayName(nameBuilder.toString());
meta.setDisplayName(ChatColor.RESET + nameBuilder.toString());
clone.setItemMeta(meta);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public static String getItemName(ItemStack item) {
//Return the Display name of the item if there is one
if (item.hasItemMeta()) {
String name = item.getItemMeta().getDisplayName();
if (name != null && !name.isEmpty()) {
if (!name.isEmpty()) {
return name;
}
}
Expand Down Expand Up @@ -187,9 +187,20 @@ public static Player getNearestPlayer(Location location) {
* @return The LinkedList of PhatLoots
*/
public static LinkedList<PhatLoot> getPhatLoots(Player player) {
Block block = player.getTargetBlock(null, 10);
return getPhatLoots(player, block);
}

/**
* Returns a LinkedList of PhatLoots that are linked to the target Block
*
* @param player The Player targeting a Block
* @param block The Block that the Player is targeting
* @return The LinkedList of PhatLoots
*/
public static LinkedList<PhatLoot> getPhatLoots(Player player, Block block) {
LinkedList<PhatLoot> phatLoots = new LinkedList<>();
//Cancel if the sender is not targeting a correct Block
Block block = player.getTargetBlock(EnumSet.of(Material.AIR, Material.CAVE_AIR, Material.VOID_AIR), 10);
String blockName = PhatLootsUtil.getBlockName(block);
if (!PhatLootsUtil.isLinkableType(block)) {
player.sendMessage("§6" + blockName + "§4 is not a linkable type.");
Expand Down
Loading

0 comments on commit 0e4e310

Please sign in to comment.