mirror of
https://github.com/EssentialsX/Essentials.git
synced 2025-04-15 08:25:57 +02:00
Enchantments in CraftBukkit are still broken, but it works with Essentials :)
This commit is contained in:
parent
cbba3639b9
commit
76a8f794ef
@ -1,5 +1,6 @@
|
|||||||
package com.earth2me.essentials;
|
package com.earth2me.essentials;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.craftbukkit.EnchantmentFix;
|
||||||
import static com.earth2me.essentials.I18n._;
|
import static com.earth2me.essentials.I18n._;
|
||||||
import com.earth2me.essentials.textreader.IText;
|
import com.earth2me.essentials.textreader.IText;
|
||||||
import com.earth2me.essentials.textreader.KeywordReplacer;
|
import com.earth2me.essentials.textreader.KeywordReplacer;
|
||||||
@ -114,7 +115,7 @@ public class EssentialsPlayerListener extends PlayerListener
|
|||||||
}
|
}
|
||||||
if (user.getSavedInventory() != null)
|
if (user.getSavedInventory() != null)
|
||||||
{
|
{
|
||||||
user.getInventory().setContents(user.getSavedInventory());
|
EnchantmentFix.setContents(user.getInventory(), user.getSavedInventory());
|
||||||
user.setSavedInventory(null);
|
user.setSavedInventory(null);
|
||||||
}
|
}
|
||||||
user.updateActivity(false);
|
user.updateActivity(false);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.earth2me.essentials;
|
package com.earth2me.essentials;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.craftbukkit.EnchantmentFix;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -145,13 +146,13 @@ public final class InventoryWorkaround
|
|||||||
{
|
{
|
||||||
ItemStack stack = item.clone();
|
ItemStack stack = item.clone();
|
||||||
stack.setAmount(item.getType().getMaxStackSize());
|
stack.setAmount(item.getType().getMaxStackSize());
|
||||||
cinventory.setItem(firstFree, stack);
|
EnchantmentFix.setItem(cinventory, firstFree, stack);
|
||||||
item.setAmount(item.getAmount() - item.getType().getMaxStackSize());
|
item.setAmount(item.getAmount() - item.getType().getMaxStackSize());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Just store it
|
// Just store it
|
||||||
cinventory.setItem(firstFree, item);
|
EnchantmentFix.setItem(cinventory, firstFree, item);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -230,7 +231,7 @@ public final class InventoryWorkaround
|
|||||||
{
|
{
|
||||||
// split the stack and store
|
// split the stack and store
|
||||||
itemStack.setAmount(amount - toDelete);
|
itemStack.setAmount(amount - toDelete);
|
||||||
cinventory.setItem(first, itemStack);
|
EnchantmentFix.setItem(cinventory, first, itemStack);
|
||||||
toDelete = 0;
|
toDelete = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.earth2me.essentials.commands;
|
|||||||
|
|
||||||
import com.earth2me.essentials.User;
|
import com.earth2me.essentials.User;
|
||||||
import com.earth2me.essentials.Util;
|
import com.earth2me.essentials.Util;
|
||||||
|
import com.earth2me.essentials.craftbukkit.EnchantmentFix;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -97,7 +98,7 @@ public class Commandenchant extends EssentialsCommand
|
|||||||
level = enchantment.getMaxLevel();
|
level = enchantment.getMaxLevel();
|
||||||
}
|
}
|
||||||
stack.addEnchantment(enchantment, level);
|
stack.addEnchantment(enchantment, level);
|
||||||
user.setItemInHand(stack);
|
EnchantmentFix.setItemInHand(user.getInventory(), stack);
|
||||||
user.updateInventory();
|
user.updateInventory();
|
||||||
final String enchantmentName = enchantment.getName().toLowerCase(Locale.ENGLISH);
|
final String enchantmentName = enchantment.getName().toLowerCase(Locale.ENGLISH);
|
||||||
user.sendMessage(_("enchantmentApplied", enchantmentName.replace('_', ' ')));
|
user.sendMessage(_("enchantmentApplied", enchantmentName.replace('_', ' ')));
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.earth2me.essentials.commands;
|
package com.earth2me.essentials.commands;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.InventoryWorkaround;
|
||||||
import com.earth2me.essentials.User;
|
import com.earth2me.essentials.User;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -76,7 +77,7 @@ public class Commandgive extends EssentialsCommand
|
|||||||
final User giveTo = getPlayer(server, args, 0);
|
final User giveTo = getPlayer(server, args, 0);
|
||||||
final String itemName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
|
final String itemName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
|
||||||
sender.sendMessage(ChatColor.BLUE + "Giving " + stack.getAmount() + " of " + itemName + " to " + giveTo.getDisplayName() + ".");
|
sender.sendMessage(ChatColor.BLUE + "Giving " + stack.getAmount() + " of " + itemName + " to " + giveTo.getDisplayName() + ".");
|
||||||
giveTo.getInventory().addItem(stack);
|
InventoryWorkaround.addItem(giveTo.getInventory(), true, stack);
|
||||||
giveTo.updateInventory();
|
giveTo.updateInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package com.earth2me.essentials.commands;
|
|||||||
|
|
||||||
import static com.earth2me.essentials.I18n._;
|
import static com.earth2me.essentials.I18n._;
|
||||||
import com.earth2me.essentials.User;
|
import com.earth2me.essentials.User;
|
||||||
|
import com.earth2me.essentials.craftbukkit.EnchantmentFix;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@ -29,7 +30,7 @@ public class Commandinvsee extends EssentialsCommand
|
|||||||
}
|
}
|
||||||
if (invUser == user && user.getSavedInventory() != null)
|
if (invUser == user && user.getSavedInventory() != null)
|
||||||
{
|
{
|
||||||
invUser.getInventory().setContents(user.getSavedInventory());
|
EnchantmentFix.setContents(invUser.getInventory(), user.getSavedInventory());
|
||||||
user.setSavedInventory(null);
|
user.setSavedInventory(null);
|
||||||
user.sendMessage(_("invRestored"));
|
user.sendMessage(_("invRestored"));
|
||||||
throw new NoChargeException();
|
throw new NoChargeException();
|
||||||
@ -49,7 +50,7 @@ public class Commandinvsee extends EssentialsCommand
|
|||||||
{
|
{
|
||||||
throw new Exception(_("invBigger"));
|
throw new Exception(_("invBigger"));
|
||||||
}
|
}
|
||||||
user.getInventory().setContents(invUserStack);
|
EnchantmentFix.setContents(user.getInventory(), invUserStack);
|
||||||
user.sendMessage(_("invSee", invUser.getDisplayName()));
|
user.sendMessage(_("invSee", invUser.getDisplayName()));
|
||||||
user.sendMessage(_("invSeeHelp"));
|
user.sendMessage(_("invSeeHelp"));
|
||||||
throw new NoChargeException();
|
throw new NoChargeException();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.earth2me.essentials.commands;
|
package com.earth2me.essentials.commands;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.InventoryWorkaround;
|
||||||
import static com.earth2me.essentials.I18n._;
|
import static com.earth2me.essentials.I18n._;
|
||||||
import com.earth2me.essentials.User;
|
import com.earth2me.essentials.User;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -71,7 +72,7 @@ public class Commanditem extends EssentialsCommand
|
|||||||
|
|
||||||
final String displayName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
|
final String displayName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' ');
|
||||||
user.sendMessage(_("itemSpawn", stack.getAmount(), displayName));
|
user.sendMessage(_("itemSpawn", stack.getAmount(), displayName));
|
||||||
user.getInventory().addItem(stack);
|
InventoryWorkaround.addItem(user.getInventory(), true, stack);
|
||||||
user.updateInventory();
|
user.updateInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.earth2me.essentials.commands;
|
package com.earth2me.essentials.commands;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.InventoryWorkaround;
|
||||||
import static com.earth2me.essentials.I18n._;
|
import static com.earth2me.essentials.I18n._;
|
||||||
import com.earth2me.essentials.Trade;
|
import com.earth2me.essentials.Trade;
|
||||||
import com.earth2me.essentials.User;
|
import com.earth2me.essentials.User;
|
||||||
@ -113,7 +114,7 @@ public class Commandkit extends EssentialsCommand
|
|||||||
final int id = Material.getMaterial(Integer.parseInt(parts[0])).getId();
|
final int id = Material.getMaterial(Integer.parseInt(parts[0])).getId();
|
||||||
final int amount = parts.length > 1 ? Integer.parseInt(parts[parts.length > 2 ? 2 : 1]) : 1;
|
final int amount = parts.length > 1 ? Integer.parseInt(parts[parts.length > 2 ? 2 : 1]) : 1;
|
||||||
final short data = parts.length > 2 ? Short.parseShort(parts[1]) : 0;
|
final short data = parts.length > 2 ? Short.parseShort(parts[1]) : 0;
|
||||||
final HashMap<Integer, ItemStack> overfilled = user.getInventory().addItem(new ItemStack(id, amount, data));
|
final Map<Integer, ItemStack> overfilled = InventoryWorkaround.addItem(user.getInventory(), true, new ItemStack(id, amount, data));
|
||||||
for (ItemStack itemStack : overfilled.values())
|
for (ItemStack itemStack : overfilled.values())
|
||||||
{
|
{
|
||||||
user.getWorld().dropItemNaturally(user.getLocation(), itemStack);
|
user.getWorld().dropItemNaturally(user.getLocation(), itemStack);
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
package com.earth2me.essentials.craftbukkit;
|
||||||
|
|
||||||
|
import org.bukkit.craftbukkit.inventory.CraftInventory;
|
||||||
|
import org.bukkit.craftbukkit.inventory.CraftInventoryPlayer;
|
||||||
|
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
|
||||||
|
public class EnchantmentFix
|
||||||
|
{
|
||||||
|
public static void setContents(Inventory inventory, ItemStack[] items)
|
||||||
|
{
|
||||||
|
CraftInventory cInventory = (CraftInventory)inventory;
|
||||||
|
if (cInventory.getContents().length != items.length)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("Invalid inventory size; expected " + cInventory.getContents().length);
|
||||||
|
}
|
||||||
|
|
||||||
|
net.minecraft.server.ItemStack[] mcItems = cInventory.getInventory().getContents();
|
||||||
|
|
||||||
|
for (int i = 0; i < items.length; i++)
|
||||||
|
{
|
||||||
|
ItemStack item = items[i];
|
||||||
|
if (item == null || item.getTypeId() <= 0)
|
||||||
|
{
|
||||||
|
mcItems[i] = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mcItems[i] = new net.minecraft.server.ItemStack(item.getTypeId(), item.getAmount(), item.getDurability());
|
||||||
|
new CraftItemStack(mcItems[i]).addUnsafeEnchantments(item.getEnchantments());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setItem(Inventory inventory, int index, ItemStack item)
|
||||||
|
{
|
||||||
|
CraftInventory cInventory = (CraftInventory)inventory;
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
cInventory.getInventory().setItem(index, null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
net.minecraft.server.ItemStack stack = new net.minecraft.server.ItemStack(item.getTypeId(), item.getAmount(), item.getDurability());
|
||||||
|
new CraftItemStack(stack).addUnsafeEnchantments(item.getEnchantments());
|
||||||
|
cInventory.getInventory().setItem(index, stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setItemInHand(Inventory inventory, ItemStack item)
|
||||||
|
{
|
||||||
|
CraftInventoryPlayer cInventory = (CraftInventoryPlayer)inventory;
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
cInventory.getInventory().setItem(cInventory.getInventory().itemInHandIndex, null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
net.minecraft.server.ItemStack stack = new net.minecraft.server.ItemStack(item.getTypeId(), item.getAmount(), item.getDurability());
|
||||||
|
new CraftItemStack(stack).addUnsafeEnchantments(item.getEnchantments());
|
||||||
|
cInventory.getInventory().setItem(cInventory.getInventory().itemInHandIndex, stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user