mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Merge pull request #683 from mrcoffee1026/master
Resolving the Ancient Altar dupe glitch.
This commit is contained in:
commit
c67cc2fbaf
@ -1,11 +1,13 @@
|
|||||||
package me.mrCookieSlime.Slimefun.AncientAltar;
|
package me.mrCookieSlime.Slimefun.AncientAltar;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.MC_1_8.ParticleEffect;
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.MC_1_8.ParticleEffect;
|
||||||
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
import me.mrCookieSlime.Slimefun.SlimefunStartup;
|
||||||
import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener;
|
import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener;
|
||||||
|
import me.mrCookieSlime.Slimefun.Variables;
|
||||||
|
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -92,9 +94,9 @@ public class RitualAnimation implements Runnable {
|
|||||||
|
|
||||||
private void abort() {
|
private void abort() {
|
||||||
running = false;
|
running = false;
|
||||||
for (ItemStack stack: items) {
|
// for (ItemStack stack: items) {
|
||||||
l.getWorld().dropItemNaturally(l, stack);
|
// l.getWorld().dropItemNaturally(l, stack);
|
||||||
}
|
// }
|
||||||
l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F);
|
l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F);
|
||||||
altars.remove(altar);
|
altars.remove(altar);
|
||||||
}
|
}
|
||||||
@ -103,6 +105,12 @@ public class RitualAnimation implements Runnable {
|
|||||||
l.getWorld().playSound(l, Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1F, 1F);
|
l.getWorld().playSound(l, Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1F, 1F);
|
||||||
l.getWorld().playEffect(l, Effect.STEP_SOUND, Material.EMERALD_BLOCK);
|
l.getWorld().playEffect(l, Effect.STEP_SOUND, Material.EMERALD_BLOCK);
|
||||||
l.getWorld().dropItemNaturally(l.add(0, 1, 0), output);
|
l.getWorld().dropItemNaturally(l.add(0, 1, 0), output);
|
||||||
|
|
||||||
|
pedestals.forEach((pblock)->{
|
||||||
|
Variables.altarinuse.remove(pblock.getLocation());
|
||||||
|
});
|
||||||
|
Variables.altarinuse.remove(altar.getLocation()); // should re-enable altar blocks on craft completion.
|
||||||
|
|
||||||
altars.remove(altar);
|
altars.remove(altar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -705,7 +705,7 @@ public class SlimefunItems {
|
|||||||
|
|
||||||
PROGRAMMABLE_ANDROID = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzUwM2NiN2VkODQ1ZTdhNTA3ZjU2OWFmYzY0N2M0N2FjNDgzNzcxNDY1YzlhNjc5YTU0NTk0Yzc2YWZiYSJ9fX0="), "&cProgrammable Android &7(Normal)", "", "&8\u21E8 &7Function: None", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
PROGRAMMABLE_ANDROID = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzUwM2NiN2VkODQ1ZTdhNTA3ZjU2OWFmYzY0N2M0N2FjNDgzNzcxNDY1YzlhNjc5YTU0NTk0Yzc2YWZiYSJ9fX0="), "&cProgrammable Android &7(Normal)", "", "&8\u21E8 &7Function: None", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
||||||
PROGRAMMABLE_ANDROID_FARMER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjlkMzMzNTdlODQxODgyM2JmNzgzZGU5MmRlODAyOTFiNGViZDM5MmFlYzg3MDY2OThlMDY4OTZkNDk4ZjYifX19"), "&cProgrammable Android &7(Farmer)", "", "&8\u21E8 &7Function: Farming", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
PROGRAMMABLE_ANDROID_FARMER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjlkMzMzNTdlODQxODgyM2JmNzgzZGU5MmRlODAyOTFiNGViZDM5MmFlYzg3MDY2OThlMDY4OTZkNDk4ZjYifX19"), "&cProgrammable Android &7(Farmer)", "", "&8\u21E8 &7Function: Farming", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
||||||
PROGRAMMABLE_ANDROID_MINER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTYzOGEyODU0MWFiM2FlMGE3MjNkNTU3ODczOGUwODc1ODM4OGVjNGMzMzI0N2JkNGNhMTM0ODJhZWYzMzQifX19"), "§cProgrammable Android &7(Miner)", "", "§8\u21E8 §7Function: Mining", "§8\u21E8 §7Fuel Efficiency: 1.0x");
|
PROGRAMMABLE_ANDROID_MINER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTYzOGEyODU0MWFiM2FlMGE3MjNkNTU3ODczOGUwODc1ODM4OGVjNGMzMzI0N2JkNGNhMTM0ODJhZWYzMzQifX19"), "&cProgrammable Android &7(Miner)", "", "&8\u21E8 &7Function: Mining", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
||||||
PROGRAMMABLE_ANDROID_WOODCUTTER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDMyYTgxNDUxMDE0MjIwNTE2OWExYWQzMmYwYTc0NWYxOGU5Y2I2YzY2ZWU2NGVjYTJlNjViYWJkZWY5ZmYifX19"), "&cProgrammable Android &7(Woodcutter)", "", "&8\u21E8 &7Function: Woodcutting", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
PROGRAMMABLE_ANDROID_WOODCUTTER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDMyYTgxNDUxMDE0MjIwNTE2OWExYWQzMmYwYTc0NWYxOGU5Y2I2YzY2ZWU2NGVjYTJlNjViYWJkZWY5ZmYifX19"), "&cProgrammable Android &7(Woodcutter)", "", "&8\u21E8 &7Function: Woodcutting", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
||||||
PROGRAMMABLE_ANDROID_BUTCHER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2I0NzJkZjBhZDlhM2JlODhmMmU1ZDVkNDIyZDAyYjExNmQ2NGQ4ZGYxNDc1ZWQzMmU1NDZhZmM4NGIzMSJ9fX0="), "&cProgrammable Android &7(Butcher)", "", "&8\u21E8 &7Function: Slaughtering", "&8\u21E8 &7Damage: 4", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
PROGRAMMABLE_ANDROID_BUTCHER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2I0NzJkZjBhZDlhM2JlODhmMmU1ZDVkNDIyZDAyYjExNmQ2NGQ4ZGYxNDc1ZWQzMmU1NDZhZmM4NGIzMSJ9fX0="), "&cProgrammable Android &7(Butcher)", "", "&8\u21E8 &7Function: Slaughtering", "&8\u21E8 &7Damage: 4", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
||||||
PROGRAMMABLE_ANDROID_FISHERMAN = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzQ1ZTg3MzNhNzMxMTQzMzNiOThiMzYwMTc1MTI0MTcyMmY0NzEzZTFhMWE1ZDM2ZmJiMTMyNDkzZjFjNyJ9fX0="), "&cProgrammable Android &7(Fisherman)", "", "&8\u21E8 &7Function: Fishing", "&8\u21E8 &7Success Rate: 10%", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
PROGRAMMABLE_ANDROID_FISHERMAN = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzQ1ZTg3MzNhNzMxMTQzMzNiOThiMzYwMTc1MTI0MTcyMmY0NzEzZTFhMWE1ZDM2ZmJiMTMyNDkzZjFjNyJ9fX0="), "&cProgrammable Android &7(Fisherman)", "", "&8\u21E8 &7Function: Fishing", "&8\u21E8 &7Success Rate: 10%", "&8\u21E8 &7Fuel Efficiency: 1.0x");
|
||||||
|
@ -331,7 +331,7 @@ public class SlimefunItem {
|
|||||||
public static SlimefunItem getByItem(ItemStack item) {
|
public static SlimefunItem getByItem(ItemStack item) {
|
||||||
if (item == null) return null;
|
if (item == null) return null;
|
||||||
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER");
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER");
|
||||||
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REPAIRED_SPAWNER");
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REINFORCED_SPAWNER");
|
||||||
for (SlimefunItem sfi: items) {
|
for (SlimefunItem sfi: items) {
|
||||||
if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
||||||
else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
|
||||||
|
@ -97,7 +97,10 @@ public class AutoDisenchanter extends AContainer {
|
|||||||
ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
|
ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
|
||||||
|
|
||||||
// Check if disenchantable
|
// Check if disenchantable
|
||||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
SlimefunItem sfItem = null;
|
||||||
|
if ((item != null) && (item.getType() != Material.BOOK)) { // stops endless checks of getByItem for empty book stacks.
|
||||||
|
sfItem = SlimefunItem.getByItem(item);
|
||||||
|
}
|
||||||
if (sfItem != null && !sfItem.isDisenchantable()) return;
|
if (sfItem != null && !sfItem.isDisenchantable()) return;
|
||||||
|
|
||||||
// Disenchant
|
// Disenchant
|
||||||
|
@ -439,6 +439,7 @@ public class SlimefunStartup extends JavaPlugin {
|
|||||||
Variables.jump = null;
|
Variables.jump = null;
|
||||||
Variables.mode = null;
|
Variables.mode = null;
|
||||||
SlimefunGuide.history = null;
|
SlimefunGuide.history = null;
|
||||||
|
Variables.altarinuse = null;
|
||||||
Variables.enchanting = null;
|
Variables.enchanting = null;
|
||||||
Variables.backpack = null;
|
Variables.backpack = null;
|
||||||
Variables.soulbound = null;
|
Variables.soulbound = null;
|
||||||
|
@ -2,10 +2,12 @@ package me.mrCookieSlime.Slimefun;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
@ -18,6 +20,7 @@ public class Variables {
|
|||||||
|
|
||||||
public static Map<UUID, Integer> enchanting = new HashMap<UUID, Integer>();
|
public static Map<UUID, Integer> enchanting = new HashMap<UUID, Integer>();
|
||||||
public static Map<UUID, ItemStack> backpack = new HashMap<UUID, ItemStack>();
|
public static Map<UUID, ItemStack> backpack = new HashMap<UUID, ItemStack>();
|
||||||
|
public static HashSet<Location> altarinuse = new HashSet<Location>();
|
||||||
|
|
||||||
public static Map<UUID, List<ItemStack>> soulbound = new HashMap<UUID, List<ItemStack>>();
|
public static Map<UUID, List<ItemStack>> soulbound = new HashMap<UUID, List<ItemStack>>();
|
||||||
public static List<UUID> blocks = new ArrayList<UUID>();
|
public static List<UUID> blocks = new ArrayList<UUID>();
|
||||||
|
@ -16,6 +16,7 @@ import me.mrCookieSlime.Slimefun.AncientAltar.RitualAnimation;
|
|||||||
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||||
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
import me.mrCookieSlime.Slimefun.Setup.Messages;
|
||||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||||
|
import me.mrCookieSlime.Slimefun.Variables;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -51,6 +52,10 @@ public class AncientAltarListener implements Listener {
|
|||||||
SlimefunItem item = BlockStorage.check(b);
|
SlimefunItem item = BlockStorage.check(b);
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
if (item.getID().equals("ANCIENT_PEDESTAL")) {
|
if (item.getID().equals("ANCIENT_PEDESTAL")) {
|
||||||
|
if (Variables.altarinuse.contains(b.getLocation())) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
Item stack = findItem(b);
|
Item stack = findItem(b);
|
||||||
if (stack == null) {
|
if (stack == null) {
|
||||||
@ -80,6 +85,11 @@ public class AncientAltarListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (item.getID().equals("ANCIENT_ALTAR")) {
|
else if (item.getID().equals("ANCIENT_ALTAR")) {
|
||||||
|
if (Variables.altarinuse.contains(b.getLocation())) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Variables.altarinuse.add(b.getLocation()); // make altarinuse simply because that was the last block clicked.
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
|
|
||||||
ItemStack catalyst = new CustomItem(e.getPlayer().getInventory().getItemInMainHand(), 1);
|
ItemStack catalyst = new CustomItem(e.getPlayer().getInventory().getItemInMainHand(), 1);
|
||||||
@ -88,6 +98,9 @@ public class AncientAltarListener implements Listener {
|
|||||||
if (!altars.contains(e.getClickedBlock())) {
|
if (!altars.contains(e.getClickedBlock())) {
|
||||||
altars.add(e.getClickedBlock());
|
altars.add(e.getClickedBlock());
|
||||||
if (pedestals.size() == 8) {
|
if (pedestals.size() == 8) {
|
||||||
|
pedestals.forEach((pblock)->{
|
||||||
|
Variables.altarinuse.add(pblock.getLocation());
|
||||||
|
});
|
||||||
if (catalyst != null && !catalyst.getType().equals(Material.AIR)) {
|
if (catalyst != null && !catalyst.getType().equals(Material.AIR)) {
|
||||||
List<ItemStack> input = new ArrayList<ItemStack>();
|
List<ItemStack> input = new ArrayList<ItemStack>();
|
||||||
for (Block pedestal: pedestals) {
|
for (Block pedestal: pedestals) {
|
||||||
@ -105,16 +118,25 @@ public class AncientAltarListener implements Listener {
|
|||||||
else {
|
else {
|
||||||
altars.remove(e.getClickedBlock());
|
altars.remove(e.getClickedBlock());
|
||||||
Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true);
|
Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true);
|
||||||
|
pedestals.forEach((pblock)->{
|
||||||
|
Variables.altarinuse.remove(pblock.getLocation());
|
||||||
|
});
|
||||||
|
Variables.altarinuse.remove(b.getLocation()); // bad recipe, no longer in use.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
altars.remove(e.getClickedBlock());
|
altars.remove(e.getClickedBlock());
|
||||||
Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-catalyst", true);
|
Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-catalyst", true);
|
||||||
|
pedestals.forEach((pblock)->{
|
||||||
|
Variables.altarinuse.remove(pblock.getLocation());
|
||||||
|
});
|
||||||
|
Variables.altarinuse.remove(b.getLocation()); // unkown catalyst, no longer in use
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
altars.remove(e.getClickedBlock());
|
altars.remove(e.getClickedBlock());
|
||||||
Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.not-enough-pedestals", true, new Variable("%pedestals%", String.valueOf(pedestals.size())));
|
Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.not-enough-pedestals", true, new Variable("%pedestals%", String.valueOf(pedestals.size())));
|
||||||
|
Variables.altarinuse.remove(b.getLocation()); // not a valid altar so remove from inuse
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user