1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 11:45:51 +00:00

Fixes #1162 (also more performance improvements)

This commit is contained in:
TheBusyBiscuit 2019-10-06 17:04:34 +02:00
parent 64bd72a695
commit 58889c46d0
5 changed files with 54 additions and 71 deletions

View File

@ -156,6 +156,7 @@ public final class SlimefunManager {
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(strippedItem, enchantment.getEnchantment(), 0); EmeraldEnchants.getInstance().getRegistry().applyEnchantment(strippedItem, enchantment.getEnchantment(), 0);
} }
} }
if (SlimefunItem.getByItem(strippedItem) instanceof Soulbound) { if (SlimefunItem.getByItem(strippedItem) instanceof Soulbound) {
return true; return true;
} }

View File

@ -191,24 +191,9 @@ public final class Slimefun {
* <code>false</code> otherwise. * <code>false</code> otherwise.
*/ */
public static boolean isEnabled(Player p, ItemStack item, boolean message) { public static boolean isEnabled(Player p, ItemStack item, boolean message) {
String world = p.getWorld().getName();
SlimefunItem sfItem = SlimefunItem.getByItem(item); SlimefunItem sfItem = SlimefunItem.getByItem(item);
if (sfItem == null) return !SlimefunItem.isDisabled(item); if (sfItem == null) return !SlimefunItem.isDisabled(item);
if (SlimefunPlugin.getWhitelist().contains(world + ".enabled")) { else return isEnabled(p, sfItem, message);
if (SlimefunPlugin.getWhitelist().getBoolean(world + ".enabled")) {
if (!SlimefunPlugin.getWhitelist().contains(world + ".enabled-items." + sfItem.getID())) SlimefunPlugin.getWhitelist().setDefaultValue(world + ".enabled-items." + sfItem.getID(), true);
if (SlimefunPlugin.getWhitelist().getBoolean(world + ".enabled-items." + sfItem.getID())) return true;
else {
if (message) SlimefunPlugin.getLocal().sendMessage(p, "messages.disabled-in-world", true);
return false;
}
}
else {
if (message) SlimefunPlugin.getLocal().sendMessage(p, "messages.disabled-in-world", true);
return false;
}
}
else return true;
} }
/** /**

View File

@ -5,6 +5,7 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -152,20 +153,17 @@ public class CargoNet extends Network {
} }
else { else {
SimpleHologram.update(b, "&7Status: &a&lONLINE"); SimpleHologram.update(b, "&7Status: &a&lONLINE");
final Map<Integer, List<Location>> output = new HashMap<>(); final Map<Integer, List<Location>> output = new HashMap<>();
Set<Location> combinedOutputNodes = new HashSet<>(); Set<Location> combinedOutputNodes = new HashSet<>();
combinedOutputNodes.addAll(outputNodes); combinedOutputNodes.addAll(outputNodes);
combinedOutputNodes.addAll(advancedOutputNodes); combinedOutputNodes.addAll(advancedOutputNodes);
List<Location> list = new ArrayList<>(); List<Location> list = new LinkedList<>();
int lastFrequency = -1; int lastFrequency = -1;
for (Location outputNode: combinedOutputNodes) { for (Location outputNode: combinedOutputNodes) {
Integer frequency = getFrequency(outputNode); int frequency = getFrequency(outputNode);
list.add(outputNode);
if (frequency != lastFrequency && lastFrequency != -1) { if (frequency != lastFrequency && lastFrequency != -1) {
output.merge(lastFrequency, list, (prev, next) -> { output.merge(lastFrequency, list, (prev, next) -> {
@ -173,9 +171,10 @@ public class CargoNet extends Network {
return prev; return prev;
}); });
list.clear(); list = new LinkedList<>();
} }
list.add(outputNode);
lastFrequency = frequency; lastFrequency = frequency;
} }
@ -202,6 +201,7 @@ public class CargoNet extends Network {
CargoNet self = this; CargoNet self = this;
final BlockStorage storage = BlockStorage.getStorage(b.getWorld()); final BlockStorage storage = BlockStorage.getStorage(b.getWorld());
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> { Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
if (BlockStorage.getLocationInfo(b.getLocation(), "visualizer") == null) { if (BlockStorage.getLocationInfo(b.getLocation(), "visualizer") == null) {

View File

@ -18,7 +18,6 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction; import io.github.thebusybiscuit.cscorelib2.protection.ProtectableAction;
@ -38,56 +37,54 @@ public class ArmorListener implements Listener {
public void onDamage(EntityDamageEvent e) { public void onDamage(EntityDamageEvent e) {
if (e.getEntity() instanceof Player && !e.isCancelled()) { if (e.getEntity() instanceof Player && !e.isCancelled()) {
Player p = (Player) e.getEntity(); Player p = (Player) e.getEntity();
for (ItemStack armor: p.getInventory().getArmorContents()) { SlimefunItem item = SlimefunItem.getByItem(p.getInventory().getBoots());
SlimefunItem item = SlimefunItem.getByItem(armor); if (item != null) {
if (item != null) { if (item.getID().equals("ENDER_BOOTS")
if (item.getID().equals("ENDER_BOOTS") && Slimefun.hasUnlocked(p, item, true)
&& Slimefun.hasUnlocked(p, item, true) && e instanceof EntityDamageByEntityEvent
&& e instanceof EntityDamageByEntityEvent && ((EntityDamageByEntityEvent) e).getDamager() instanceof EnderPearl
&& ((EntityDamageByEntityEvent) e).getDamager() instanceof EnderPearl ) {
) { e.setCancelled(true);
e.setCancelled(true); }
} else if (item.getID().equals("SLIME_BOOTS")
else if (item.getID().equals("SLIME_BOOTS") && Slimefun.hasUnlocked(p, item, true)
&& Slimefun.hasUnlocked(p, item, true) && e.getCause() == DamageCause.FALL
&& e.getCause() == DamageCause.FALL ) {
) { e.setCancelled(true);
e.setCancelled(true); }
} else if (item.getID().equals("BOOTS_OF_THE_STOMPER")
else if (item.getID().equals("BOOTS_OF_THE_STOMPER") && Slimefun.hasUnlocked(p, item, true)
&& Slimefun.hasUnlocked(p, item, true) && e.getCause() == DamageCause.FALL
&& e.getCause() == DamageCause.FALL ) {
) { e.setCancelled(true);
e.setCancelled(true); p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ZOMBIE_BREAK_WOODEN_DOOR, 1F, 2F);
p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ZOMBIE_BREAK_WOODEN_DOOR, 1F, 2F); p.setVelocity(new Vector(0.0, 0.7, 0.0));
p.setVelocity(new Vector(0.0, 0.7, 0.0)); for (Entity n: p.getNearbyEntities(4, 4, 4)) {
for (Entity n: p.getNearbyEntities(4, 4, 4)) { if (n instanceof LivingEntity && !n.getUniqueId().equals(p.getUniqueId())) {
if (n instanceof LivingEntity && !n.getUniqueId().equals(p.getUniqueId())) { n.setVelocity(n.getLocation().toVector().subtract(p.getLocation().toVector())
n.setVelocity(n.getLocation().toVector().subtract(p.getLocation().toVector()) .normalize().multiply(1.4));
.normalize().multiply(1.4)); if (p.getWorld().getPVP()
if (p.getWorld().getPVP() && SlimefunPlugin.getProtectionManager()
&& SlimefunPlugin.getProtectionManager() .hasPermission(p, n.getLocation(), ProtectableAction.PVP)
.hasPermission(p, n.getLocation(), ProtectableAction.PVP) ) {
) { EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(p, n,
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(p, n, DamageCause.ENTITY_ATTACK, e.getDamage() / 2);
DamageCause.ENTITY_ATTACK, e.getDamage() / 2); Bukkit.getPluginManager().callEvent(event);
Bukkit.getPluginManager().callEvent(event); if (!event.isCancelled()) ((LivingEntity) n).damage(e.getDamage() / 2);
if (!event.isCancelled()) ((LivingEntity) n).damage(e.getDamage() / 2);
}
} }
} }
for (BlockFace face: BlockFace.values()) {
Block b = p.getLocation().getBlock().getRelative(BlockFace.DOWN).getRelative(face);
p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
}
} }
else if (item.getID().equals("SLIME_STEEL_BOOTS")
&& Slimefun.hasUnlocked(p, item, true) for (BlockFace face: BlockFace.values()) {
&& e.getCause() == DamageCause.FALL Block b = p.getLocation().getBlock().getRelative(BlockFace.DOWN).getRelative(face);
) p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
e.setCancelled(true); }
} }
else if (item.getID().equals("SLIME_STEEL_BOOTS")
&& Slimefun.hasUnlocked(p, item, true)
&& e.getCause() == DamageCause.FALL
)
e.setCancelled(true);
} }
} }
} }

View File

@ -69,7 +69,7 @@ public class BackpackListener implements Listener {
} }
else if (e.getCurrentItem() != null && e.getCurrentItem().getType() != Material.AIR) { else if (e.getCurrentItem() != null && e.getCurrentItem().getType() != Material.AIR) {
SlimefunItem sfItem = SlimefunItem.getByItem(e.getCurrentItem()); SlimefunItem sfItem = SlimefunItem.getByItem(e.getCurrentItem());
if ((SlimefunManager.isItemSimiliar(item, SlimefunItem.getItem("COOLER"), false) && !(sfItem instanceof Juice)) || if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.COOLER, false) && !(sfItem instanceof Juice)) ||
e.getCurrentItem().getType().toString().contains("SHULKER_BOX") || e.getCurrentItem().getType().toString().contains("SHULKER_BOX") ||
sfItem instanceof SlimefunBackpack) sfItem instanceof SlimefunBackpack)