Add Coal Cents economy

This commit is contained in:
CoalGov Deploy
2026-05-04 17:00:05 +00:00
commit c8cc200004
73 changed files with 6873 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
package com.librewiki.coalgov.service;
import com.librewiki.coalgov.CoalGovPlugin;
import com.librewiki.coalgov.storage.SuperFurnaceRepository;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
import java.sql.SQLException;
import java.util.List;
public final class SuperFurnaceService {
private static final int SPEED_MULTIPLIER = 5;
private static final int FUEL_MULTIPLIER = 4;
private final CoalGovPlugin plugin;
private final SuperFurnaceRepository repository;
private final NamespacedKey itemKey;
private final NamespacedKey recipeKey;
public SuperFurnaceService(CoalGovPlugin plugin, SuperFurnaceRepository repository) {
this.plugin = plugin;
this.repository = repository;
this.itemKey = new NamespacedKey(plugin, "super_furnace");
this.recipeKey = new NamespacedKey(plugin, "super_furnace_recipe");
}
public void registerRecipe() {
Bukkit.removeRecipe(recipeKey);
ShapedRecipe recipe = new ShapedRecipe(recipeKey, item());
recipe.shape("SSS", "SFS", "SSS");
recipe.setIngredient('S', Material.STONE);
recipe.setIngredient('F', Material.FURNACE);
Bukkit.addRecipe(recipe);
}
public ItemStack item() {
ItemStack item = new ItemStack(Material.FURNACE);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(plugin.messages().raw("&6CoalGov Super Furnace"));
meta.setLore(List.of(
plugin.messages().raw("&75x smelting speed."),
plugin.messages().raw("&7Burns fuel 4x faster."),
plugin.messages().raw("&7Crafted with stone around a furnace.")
));
meta.getPersistentDataContainer().set(itemKey, PersistentDataType.BYTE, (byte) 1);
item.setItemMeta(meta);
return item;
}
public boolean isItem(ItemStack item) {
if (item == null || item.getType() != Material.FURNACE || !item.hasItemMeta()) {
return false;
}
return item.getItemMeta().getPersistentDataContainer().has(itemKey, PersistentDataType.BYTE);
}
public void add(Block block) throws SQLException {
repository.add(block.getLocation());
}
public void remove(Block block) throws SQLException {
repository.remove(block.getLocation());
}
public boolean isSuperFurnace(Block block) throws SQLException {
return block.getType() == Material.FURNACE && repository.exists(block.getLocation());
}
public int fasterCookTime(int cookTime) {
return Math.max(1, (int) Math.ceil(cookTime / (double) SPEED_MULTIPLIER));
}
public int shorterBurnTime(int burnTime) {
return Math.max(1, (int) Math.floor(burnTime / (double) FUEL_MULTIPLIER));
}
}