+ particle
This commit is contained in:
parent
578e34e514
commit
b2f8fb6da8
33
README.md
33
README.md
@ -1,5 +1,38 @@
|
|||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="./examples/favicon.ico" alt="mark text" width="100" height="100">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3 align="center">v-charts</h3>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://travis-ci.org/ElemeFE/v-charts">
|
||||||
|
<img src="https://travis-ci.org/ElemeFE/v-charts.svg?branch=master" alt="Build Status">
|
||||||
|
</a>
|
||||||
|
<a href="https://npmjs.org/package/v-charts">
|
||||||
|
<img src="http://img.shields.io/npm/dm/v-charts.svg" alt="NPM downloads">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.npmjs.org/package/v-charts">
|
||||||
|
<img src="https://img.shields.io/npm/v/v-charts.svg" alt="Npm package">
|
||||||
|
</a>
|
||||||
|
<a>
|
||||||
|
<img src="https://img.shields.io/badge/language-javascript-yellow.svg" alt="Language">
|
||||||
|
</a>
|
||||||
|
<a>
|
||||||
|
<img src="https://img.shields.io/badge/license-MIT-000000.svg" alt="License">
|
||||||
|
</a>
|
||||||
|
<a href="https://gitter.im/ElemeFE/v-charts?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge">
|
||||||
|
<img src="https://badges.gitter.im/ElemeFE/v-charts.svg" alt="Join the chat">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
![](https://i.loli.net/2019/07/06/5d1f802426f2a12175.png)
|
![](https://i.loli.net/2019/07/06/5d1f802426f2a12175.png)
|
||||||
|
|
||||||
|
![](https://img.shields.io/github/license/bkm016/taboolib.svg)
|
||||||
|
![](https://img.shields.io/github/release/Bkm016/TabooLib.svg)
|
||||||
|
![](https://img.shields.io/github/languages/code-size/bkm016/taboolib.svg)
|
||||||
|
![](https://img.shields.io/github/downloads/Bkm016/TabooLib/total.svg)
|
||||||
|
|
||||||
插件文档
|
插件文档
|
||||||
---
|
---
|
||||||
| 文档 | 地址 |
|
| 文档 | 地址 |
|
||||||
|
@ -6,7 +6,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = 'me.skymc'
|
group = 'me.skymc'
|
||||||
version = '5.07'
|
version = '5.08'
|
||||||
|
|
||||||
sourceCompatibility = 1.8
|
sourceCompatibility = 1.8
|
||||||
targetCompatibility = 1.8
|
targetCompatibility = 1.8
|
||||||
|
112
src/main/scala/io/izzel/taboolib/util/TMap.java
Normal file
112
src/main/scala/io/izzel/taboolib/util/TMap.java
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
package io.izzel.taboolib.util;
|
||||||
|
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import io.izzel.taboolib.util.lite.Numbers;
|
||||||
|
import org.bukkit.util.NumberConversions;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author sky
|
||||||
|
* @Since 2019-10-06 17:18
|
||||||
|
*/
|
||||||
|
public class TMap {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private Map<String, String> content = Maps.newHashMap();
|
||||||
|
|
||||||
|
public TMap(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInt(String... key) {
|
||||||
|
return getInt(key, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInt(String[] key, int def) {
|
||||||
|
return Arrays.stream(key).filter(content::containsKey).mapToInt(i -> NumberConversions.toInt(content.get(i))).findFirst().orElse(def);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getDouble(String... key) {
|
||||||
|
return getDouble(key, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getDouble(String[] key, double def) {
|
||||||
|
return Arrays.stream(key).filter(content::containsKey).mapToDouble(i -> NumberConversions.toDouble(content.get(i))).findFirst().orElse(def);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getBoolean(String... key) {
|
||||||
|
return getBoolean(key, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getBoolean(String[] key, boolean def) {
|
||||||
|
return Arrays.stream(key).filter(content::containsKey).map(i -> Numbers.getBoolean(content.get(i))).findFirst().orElse(def);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String get(String... key) {
|
||||||
|
return get(key, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String get(String[] key, String def) {
|
||||||
|
return Arrays.stream(key).filter(content::containsKey).map(i -> content.get(i)).findFirst().orElse(def);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TMap parse(String in) {
|
||||||
|
Matcher matcher = Pattern.compile("(?<name>[^{}]+)?\\{(?<content>[^<>]+)}").matcher(in);
|
||||||
|
if (matcher.find()) {
|
||||||
|
TMap map = new TMap(matcher.group("name"));
|
||||||
|
for (String content : matcher.group("content").split(";")) {
|
||||||
|
String[] v = content.split("=");
|
||||||
|
if (v.length == 2) {
|
||||||
|
map.content.put(v[0].toLowerCase().trim(), v[1].trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
return new TMap(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(o instanceof TMap)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
TMap tMap = (TMap) o;
|
||||||
|
return Objects.equals(getName(), tMap.getName()) &&
|
||||||
|
Objects.equals(getContent(), tMap.getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(getName(), getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "TMap{" +
|
||||||
|
"name='" + name + '\'' +
|
||||||
|
", content=" + content +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
// *********************************
|
||||||
|
//
|
||||||
|
// Getter and Setter
|
||||||
|
//
|
||||||
|
// *********************************
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
}
|
151
src/main/scala/io/izzel/taboolib/util/lite/Effects.java
Normal file
151
src/main/scala/io/izzel/taboolib/util/lite/Effects.java
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
package io.izzel.taboolib.util.lite;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import io.izzel.taboolib.util.ArrayUtil;
|
||||||
|
import io.izzel.taboolib.util.TMap;
|
||||||
|
import io.izzel.taboolib.util.item.Items;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Particle;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.material.MaterialData;
|
||||||
|
import org.bukkit.util.NumberConversions;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author sky
|
||||||
|
* @Since 2019-10-06 1:02
|
||||||
|
*/
|
||||||
|
public class Effects {
|
||||||
|
|
||||||
|
private Particle particle;
|
||||||
|
private Location center;
|
||||||
|
private double[] offset = {0, 0, 0};
|
||||||
|
private double speed = 0;
|
||||||
|
private double range = 0;
|
||||||
|
private int count = 0;
|
||||||
|
private List<Player> player = Lists.newArrayList();
|
||||||
|
private Object data;
|
||||||
|
|
||||||
|
public static Effects create(Particle particle, Location center) {
|
||||||
|
return new Effects(particle, center);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Effects parse(String in) {
|
||||||
|
TMap map = TMap.parse(in);
|
||||||
|
Effects effects = Effects.create(parseParticle(map.getName()), null);
|
||||||
|
for (Map.Entry<String, String> entry : map.getContent().entrySet()) {
|
||||||
|
switch (entry.getKey()) {
|
||||||
|
case "offset":
|
||||||
|
case "o":
|
||||||
|
Double[] offset = Arrays.stream(entry.getValue().split(",")).map(NumberConversions::toDouble).toArray(Double[]::new);
|
||||||
|
effects.offset(new double[] {offset.length > 0 ? offset[0] : 0, offset.length > 1 ? offset[1] : 0, offset.length > 2 ? offset[2] : 0});
|
||||||
|
break;
|
||||||
|
case "speed":
|
||||||
|
case "s":
|
||||||
|
effects.speed(NumberConversions.toDouble(entry.getValue()));
|
||||||
|
break;
|
||||||
|
case "range":
|
||||||
|
case "r":
|
||||||
|
effects.range(NumberConversions.toDouble(entry.getValue()));
|
||||||
|
break;
|
||||||
|
case "count":
|
||||||
|
case "c":
|
||||||
|
case "amount":
|
||||||
|
case "a":
|
||||||
|
effects.count(NumberConversions.toInt(entry.getValue()));
|
||||||
|
break;
|
||||||
|
case "data":
|
||||||
|
case "d":
|
||||||
|
String[] data = entry.getValue().split(":");
|
||||||
|
if (effects.particle.getDataType().equals(ItemStack.class)) {
|
||||||
|
effects.data(new ItemStack(Items.asMaterial(data[0]), 1, data.length > 1 ? NumberConversions.toShort(data[1]) : 0));
|
||||||
|
} else if (effects.particle.getDataType().equals(MaterialData.class)) {
|
||||||
|
effects.data(new MaterialData(Items.asMaterial(data[0]), data.length > 1 ? NumberConversions.toByte(data[1]) : 0));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return effects;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Particle parseParticle(String in) {
|
||||||
|
try {
|
||||||
|
return Particle.valueOf(in.toUpperCase());
|
||||||
|
} catch (Throwable ignored) {
|
||||||
|
}
|
||||||
|
return Particle.FLAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
Effects() {
|
||||||
|
}
|
||||||
|
|
||||||
|
Effects(Particle particle, Location center) {
|
||||||
|
this.particle = particle;
|
||||||
|
this.center = center;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void play() {
|
||||||
|
if (player.size() > 0) {
|
||||||
|
player.forEach(p -> p.spawnParticle(particle, Optional.ofNullable(center).orElse(p.getLocation()), count, offset[0], offset[1], offset[2], speed, data));
|
||||||
|
}
|
||||||
|
if (range > 0 && center != null) {
|
||||||
|
center.getWorld().getPlayers().stream().filter(p -> p.getLocation().distance(center) < range).forEach(p -> p.spawnParticle(particle, center, count, offset[0], offset[1], offset[2], speed, data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects particle(Particle particle) {
|
||||||
|
this.particle = particle;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects center(Location center) {
|
||||||
|
this.center = center;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects offset(double[] offset) {
|
||||||
|
this.offset = offset;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects speed(double speed) {
|
||||||
|
this.speed = speed;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects range(double range) {
|
||||||
|
this.range = range;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects count(int count) {
|
||||||
|
this.count = count;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects player(List<Player> player) {
|
||||||
|
this.player = player;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects player(Player... player) {
|
||||||
|
this.player = ArrayUtil.asList(player);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects data(ItemStack data) {
|
||||||
|
this.data = data;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Effects data(MaterialData data) {
|
||||||
|
this.data = data;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package io.izzel.taboolib.util.lite;
|
package io.izzel.taboolib.util.lite;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import io.izzel.taboolib.util.Reflection;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -10,7 +11,6 @@ import org.bukkit.event.inventory.ClickType;
|
|||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -22,11 +22,9 @@ public class Servers {
|
|||||||
|
|
||||||
public static void setEnchantmentAcceptingNew(boolean value) {
|
public static void setEnchantmentAcceptingNew(boolean value) {
|
||||||
try {
|
try {
|
||||||
Field f = Enchantment.class.getDeclaredField("acceptingNew");
|
Reflection.setValue(null, Enchantment.class, true, "acceptingNew", value);
|
||||||
f.setAccessible(true);
|
} catch (Throwable t) {
|
||||||
f.set(null, value);
|
t.printStackTrace();
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user