mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-19 02:36:59 +00:00
Loot table fixes
This commit is contained in:
parent
7f3b7df710
commit
83772bed42
@ -17,6 +17,7 @@ import org.bukkit.World.Environment;
|
||||
import org.bukkit.WorldCreator;
|
||||
import org.bukkit.WorldType;
|
||||
import org.bukkit.block.Biome;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.potion.PotionEffectType;
|
||||
import org.zeroturnaround.zip.ZipUtil;
|
||||
|
||||
@ -816,6 +817,19 @@ public class ProjectManager
|
||||
prop.put("enum", a);
|
||||
}
|
||||
|
||||
if(k.getType().equals(String.class) && k.getName().equals("enchantment"))
|
||||
{
|
||||
tp = "string";
|
||||
JSONArray a = new JSONArray();
|
||||
|
||||
for(Field gg : Enchantment.class.getDeclaredFields())
|
||||
{
|
||||
a.put(gg.getName());
|
||||
}
|
||||
|
||||
prop.put("enum", a);
|
||||
}
|
||||
|
||||
if(k.getType().equals(KList.class))
|
||||
{
|
||||
tp = "array";
|
||||
|
@ -1,17 +1,13 @@
|
||||
package com.volmit.iris.command;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.object.InventorySlotType;
|
||||
import com.volmit.iris.object.IrisLootTable;
|
||||
import com.volmit.iris.util.KList;
|
||||
import com.volmit.iris.util.KMap;
|
||||
import com.volmit.iris.util.KSet;
|
||||
import com.volmit.iris.util.MortarCommand;
|
||||
import com.volmit.iris.util.MortarSender;
|
||||
|
@ -0,0 +1,67 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.attribute.AttributeModifier;
|
||||
import org.bukkit.attribute.AttributeModifier.Operation;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Desc("Represents an attribute modifier")
|
||||
@Data
|
||||
public class IrisAttributeModifier
|
||||
{
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The Attribute type")
|
||||
private Attribute attribute = null;
|
||||
|
||||
@MinNumber(2)
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The Attribute Name")
|
||||
private String name = "";
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("The application operation (add number is default)")
|
||||
private Operation operation = Operation.ADD_NUMBER;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("Minimum amount for this modifier")
|
||||
private double minAmount = 1;
|
||||
|
||||
@DontObfuscate
|
||||
@Desc("Maximum amount for this modifier")
|
||||
private double maxAmount = 1;
|
||||
|
||||
@MinNumber(0)
|
||||
@MaxNumber(1)
|
||||
@DontObfuscate
|
||||
@Desc("The chance that this attribute is applied (0 to 1)")
|
||||
private double chance = 1;
|
||||
|
||||
public IrisAttributeModifier()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void apply(RNG rng, ItemMeta meta)
|
||||
{
|
||||
if(rng.nextDouble() < getChance())
|
||||
{
|
||||
meta.addAttributeModifier(getAttribute(), new AttributeModifier(getName(), getAmount(rng), getOperation()));
|
||||
}
|
||||
}
|
||||
|
||||
public double getAmount(RNG rng)
|
||||
{
|
||||
return rng.d(getMinAmount(), getMaxAmount());
|
||||
}
|
||||
}
|
83
src/main/java/com/volmit/iris/object/IrisEnchantment.java
Normal file
83
src/main/java/com/volmit/iris/object/IrisEnchantment.java
Normal file
@ -0,0 +1,83 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
import com.volmit.iris.util.MaxNumber;
|
||||
import com.volmit.iris.util.MinNumber;
|
||||
import com.volmit.iris.util.RNG;
|
||||
import com.volmit.iris.util.Required;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Desc("Represents an enchantment & level")
|
||||
@Data
|
||||
public class IrisEnchantment
|
||||
{
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("The enchantment")
|
||||
private String enchantment = "";
|
||||
|
||||
@MinNumber(1)
|
||||
@DontObfuscate
|
||||
@Desc("Minimum amount of this loot")
|
||||
private int minLevel = 1;
|
||||
|
||||
@MinNumber(1)
|
||||
@DontObfuscate
|
||||
@Desc("Maximum amount of this loot")
|
||||
private int maxLevel = 1;
|
||||
|
||||
@MinNumber(0)
|
||||
@MaxNumber(1)
|
||||
@DontObfuscate
|
||||
@Desc("The chance that this enchantment is applied (0 to 1)")
|
||||
private double chance = 1;
|
||||
|
||||
public IrisEnchantment()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void apply(RNG rng, ItemMeta meta)
|
||||
{
|
||||
if(rng.nextDouble() < chance)
|
||||
{
|
||||
meta.addEnchant(getEnchant(), getLevel(rng), true);
|
||||
}
|
||||
}
|
||||
|
||||
public Enchantment getEnchant()
|
||||
{
|
||||
for(Field i : Enchantment.class.getDeclaredFields())
|
||||
{
|
||||
if(i.getType().equals(Enchantment.class) && i.getName().equals(getEnchantment()))
|
||||
{
|
||||
try
|
||||
{
|
||||
return (Enchantment) i.get(null);
|
||||
}
|
||||
|
||||
catch(IllegalArgumentException | IllegalAccessException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Iris.warn("Can't find enchantment type: " + getEnchantment());
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public int getLevel(RNG rng)
|
||||
{
|
||||
return rng.i(getMinLevel(), getMaxLevel());
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package com.volmit.iris.object;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Damageable;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
@ -9,6 +9,7 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||
import com.volmit.iris.Iris;
|
||||
import com.volmit.iris.gen.atomics.AtomicCache;
|
||||
import com.volmit.iris.noise.CNG;
|
||||
import com.volmit.iris.util.ArrayType;
|
||||
import com.volmit.iris.util.B;
|
||||
import com.volmit.iris.util.Desc;
|
||||
import com.volmit.iris.util.DontObfuscate;
|
||||
@ -45,6 +46,11 @@ public class IrisLoot
|
||||
@Desc("Maximum amount of this loot")
|
||||
private int maxAmount = 1;
|
||||
|
||||
@MinNumber(1)
|
||||
@DontObfuscate
|
||||
@Desc("The display name of this item")
|
||||
private String displayName = null;
|
||||
|
||||
@MinNumber(0)
|
||||
@MaxNumber(1)
|
||||
@DontObfuscate
|
||||
@ -57,36 +63,36 @@ public class IrisLoot
|
||||
@Desc("Maximum durability percent")
|
||||
private double maxDurability = 1;
|
||||
|
||||
@MinNumber(1)
|
||||
@MaxNumber(10)
|
||||
@DontObfuscate
|
||||
@Desc("Minimum Enchantment level")
|
||||
private int minEnchantLevel = 1;
|
||||
@Desc("Define a custom model identifier")
|
||||
private Integer customModel = null;
|
||||
|
||||
@MinNumber(1)
|
||||
@MaxNumber(10)
|
||||
@DontObfuscate
|
||||
@Desc("Maximum Enchantment level")
|
||||
private int maxEnchantLevel = 1;
|
||||
@Desc("Set this to true to prevent it from being broken")
|
||||
private boolean unbreakable = false;
|
||||
|
||||
@MinNumber(0)
|
||||
@MaxNumber(10)
|
||||
@ArrayType(min = 1, type = ItemFlag.class)
|
||||
@DontObfuscate
|
||||
@Desc("Minimum Enchantmentments")
|
||||
private int minEnchants = 0;
|
||||
@Desc("The item flags to add")
|
||||
private KList<ItemFlag> itemFlags = new KList<>();
|
||||
|
||||
@MinNumber(0)
|
||||
@MaxNumber(10)
|
||||
@DontObfuscate
|
||||
@Desc("Maximum Enchantmentments")
|
||||
private int maxEnchants = 0;
|
||||
@Desc("Apply enchantments to this item")
|
||||
@ArrayType(min = 1, type = IrisEnchantment.class)
|
||||
private KList<IrisEnchantment> enchantments = new KList<>();
|
||||
|
||||
@MinNumber(1)
|
||||
@DontObfuscate
|
||||
@Desc("The chance for every attempt to add an enchantment 1 in X")
|
||||
private int enchantmentRarity = 4;
|
||||
@Desc("Apply attribute modifiers to this item")
|
||||
@ArrayType(min = 1, type = IrisAttributeModifier.class)
|
||||
private KList<IrisAttributeModifier> attributes = new KList<>();
|
||||
|
||||
@ArrayType(min = 1, type = String.class)
|
||||
@DontObfuscate
|
||||
@Desc("Add lore to this item")
|
||||
private KList<String> lore = new KList<>();
|
||||
|
||||
@Required
|
||||
@DontObfuscate
|
||||
@Desc("This is the item or block type. Does not accept minecraft:*. Only materials such as DIAMOND_SWORD or DIRT.")
|
||||
private String type = "";
|
||||
|
||||
@ -127,35 +133,38 @@ public class IrisLoot
|
||||
d.setDamage((int) Math.round(Math.max(0, Math.min(max, (1D - rng.d(getMinDurability(), getMaxDurability())) * max))));
|
||||
}
|
||||
|
||||
for(IrisEnchantment i : getEnchantments())
|
||||
{
|
||||
i.apply(rng, m);
|
||||
}
|
||||
|
||||
for(IrisAttributeModifier i : getAttributes())
|
||||
{
|
||||
i.apply(rng, m);
|
||||
}
|
||||
|
||||
m.setCustomModelData(getCustomModel());
|
||||
m.setLocalizedName(displayName);
|
||||
m.setDisplayName(displayName);
|
||||
m.setUnbreakable(isUnbreakable());
|
||||
|
||||
for(ItemFlag i : getItemFlags())
|
||||
{
|
||||
m.addItemFlags(i);
|
||||
}
|
||||
|
||||
KList<String> lore = new KList<>();
|
||||
|
||||
if(minEnchants > 0 || maxEnchants > 0)
|
||||
{
|
||||
KList<Enchantment> c = new KList<Enchantment>(Enchantment.values());
|
||||
|
||||
for(int i = minEnchants; i < maxEnchants; i++)
|
||||
{
|
||||
if(rng.i(1, enchantmentRarity) == 1)
|
||||
{
|
||||
Enchantment e = c.get(rng.nextInt(c.size()));
|
||||
|
||||
for(int ggh = 0; ggh < 8; ggh++)
|
||||
{
|
||||
if(e.canEnchantItem(is))
|
||||
{
|
||||
m.addEnchant(e, rng.i(getMinEnchantLevel(), getMaxEnchantLevel()), false);
|
||||
break;
|
||||
}
|
||||
|
||||
e = c.get(rng.nextInt(c.size()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
lore.addAll(getLore());
|
||||
|
||||
if(debug)
|
||||
{
|
||||
lore.add("From Table: " + table.getName() + " (" + Form.pc(1D / table.getRarity(), 5) + ")");
|
||||
if(lore.isNotEmpty())
|
||||
{
|
||||
lore.add(ChatColor.GRAY + "--------------------");
|
||||
}
|
||||
|
||||
lore.add(ChatColor.GRAY + "From: " + table.getName() + " (" + Form.pc(1D / table.getRarity(), 5) + ")");
|
||||
lore.add(ChatColor.GRAY + "1 in " + (table.getRarity() * getRarity()) + " Chance (" + Form.pc(1D / (table.getRarity() * getRarity()), 5) + ")");
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user