mirror of
https://github.com/Xiao-MoMi/Custom-Fishing.git
synced 2025-12-29 03:49:07 +00:00
1.2.16
This commit is contained in:
@@ -4,7 +4,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = 'net.momirealms'
|
||||
version = '1.2.15'
|
||||
version = '1.2.16'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
@@ -54,7 +54,6 @@ dependencies {
|
||||
compileOnly('com.github.Archy-X:AureliumSkills:Beta1.3.6')
|
||||
compileOnly('com.github.TechFortress:GriefPrevention:16.18')
|
||||
compileOnly('com.palmergames.bukkit.towny:towny:0.98.2.0')
|
||||
compileOnly('com.comphenix.protocol:ProtocolLib:4.8.0')
|
||||
compileOnly('redis.clients:jedis:4.3.1')
|
||||
compileOnly('me.clip:placeholderapi:2.11.1')
|
||||
compileOnly('com.sk89q.worldguard:worldguard-bukkit:7.0.7')
|
||||
@@ -107,4 +106,9 @@ shadowJar {
|
||||
relocate 'de.tr7zw', 'net.momirealms.customfishing.libs.de.tr7zw'
|
||||
relocate 'net.kyori', 'net.momirealms.customfishing.libs.net.kyori'
|
||||
relocate 'org.bstats', 'net.momirealms.customfishing.libs.org.bstats'
|
||||
}
|
||||
|
||||
tasks.register("delete", Delete).get().delete("build/libs/"+project.name+"-"+project.version+".jar")
|
||||
tasks.named("build").get().dependsOn("shadowJar").finalizedBy("delete").doLast {
|
||||
println("Deleting: "+ "build/libs/"+project.name+"-"+project.version+".jar")
|
||||
}
|
||||
@@ -35,6 +35,7 @@ public final class CustomFishing extends JavaPlugin {
|
||||
|
||||
public static CustomFishing plugin;
|
||||
public static BukkitAudiences adventure;
|
||||
public static String version;
|
||||
public static ProtocolManager protocolManager;
|
||||
private IntegrationManager integrationManager;
|
||||
private FishingManager fishingManager;
|
||||
@@ -82,6 +83,7 @@ public final class CustomFishing extends JavaPlugin {
|
||||
public void onEnable() {
|
||||
adventure = BukkitAudiences.create(this);
|
||||
protocolManager = ProtocolLibrary.getProtocolManager();
|
||||
version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
|
||||
this.fishingManager = new FishingManager();
|
||||
this.dataManager = new DataManager();
|
||||
this.integrationManager = new IntegrationManager();
|
||||
|
||||
@@ -67,7 +67,7 @@ public class BossBarManager extends Function {
|
||||
public void onJoin(Player player) {
|
||||
if (Competition.currentCompetition != null){
|
||||
if (Competition.currentCompetition.isJoined(player) && cache.get(player) == null){
|
||||
BossBarSender sender = new BossBarSender(player, Competition.currentCompetition.getCompetitionConfig().getBossBarConfig(), this);
|
||||
BossBarSender sender = new BossBarSender(player, Competition.currentCompetition.getCompetitionConfig().getBossBarConfig());
|
||||
if (!sender.getStatus()) {
|
||||
sender.show();
|
||||
}
|
||||
@@ -80,7 +80,7 @@ public class BossBarManager extends Function {
|
||||
|
||||
public void tryJoin(Player player) {
|
||||
if (cache.get(player) == null) {
|
||||
BossBarSender sender = new BossBarSender(player, Competition.currentCompetition.getCompetitionConfig().getBossBarConfig(), this);
|
||||
BossBarSender sender = new BossBarSender(player, Competition.currentCompetition.getCompetitionConfig().getBossBarConfig());
|
||||
if (!sender.getStatus()) {
|
||||
sender.show();
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ package net.momirealms.customfishing.competition.bossbar;
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.InternalStructure;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||
@@ -27,13 +28,15 @@ import net.momirealms.customfishing.CustomFishing;
|
||||
import net.momirealms.customfishing.competition.Competition;
|
||||
import net.momirealms.customfishing.object.TextCache;
|
||||
import net.momirealms.customfishing.util.AdventureUtil;
|
||||
import net.momirealms.customfishing.util.Reflection;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.UUID;
|
||||
|
||||
public class BossBarSender {
|
||||
@@ -50,15 +53,13 @@ public class BossBarSender {
|
||||
private boolean force;
|
||||
private final BossBarConfig config;
|
||||
private boolean isShown;
|
||||
private final BossBarManager bossBarManager;
|
||||
|
||||
public void setText(int position) {
|
||||
this.text = texts[position];
|
||||
this.force = true;
|
||||
}
|
||||
|
||||
public BossBarSender(Player player, BossBarConfig config, BossBarManager bossBarManager){
|
||||
this.bossBarManager = bossBarManager;
|
||||
public BossBarSender(Player player, BossBarConfig config){
|
||||
String[] str = config.getText();
|
||||
this.size = str.length;
|
||||
texts = new TextCache[str.length];
|
||||
@@ -75,11 +76,7 @@ public class BossBarSender {
|
||||
public void show() {
|
||||
this.isShown = true;
|
||||
|
||||
try {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getPacket());
|
||||
} catch (InvocationTargetException e){
|
||||
AdventureUtil.consoleMessage("<red>[CustomFishing] Failed to display bossbar for " + player.getName());
|
||||
}
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getPacket());
|
||||
|
||||
this.bukkitTask = new BukkitRunnable() {
|
||||
@Override
|
||||
@@ -102,16 +99,48 @@ public class BossBarSender {
|
||||
timer_1 = 0;
|
||||
if (text.update() || force) {
|
||||
force = false;
|
||||
try{
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getPacket());
|
||||
}
|
||||
catch (InvocationTargetException e){
|
||||
AdventureUtil.consoleMessage("<red>[CustomFishing] Failed to update bossbar for " + player.getName());
|
||||
}
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getUpdatePacket());
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getProgressPacket());
|
||||
}
|
||||
}
|
||||
}
|
||||
}.runTaskTimerAsynchronously(CustomFishing.plugin,1,1);
|
||||
}.runTaskTimerAsynchronously(CustomFishing.plugin,0,1);
|
||||
}
|
||||
|
||||
private PacketContainer getUpdatePacket() {
|
||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.BOSS);
|
||||
packet.getModifier().write(0, uuid);
|
||||
try {
|
||||
Method sMethod = MinecraftReflection.getChatSerializerClass().getMethod("a", String.class);
|
||||
sMethod.setAccessible(true);
|
||||
Object chatComponent = sMethod.invoke(null, GsonComponentSerializer.gson().serialize(MiniMessage.miniMessage().deserialize(AdventureUtil.replaceLegacy(text.getLatestValue()))));
|
||||
Class<?> packetBossClass = Class.forName("net.minecraft.network.protocol.game.PacketPlayOutBoss$e");
|
||||
Constructor<?> packetConstructor = packetBossClass.getDeclaredConstructor(MinecraftReflection.getIChatBaseComponentClass());
|
||||
packetConstructor.setAccessible(true);
|
||||
Object updatePacket = packetConstructor.newInstance(chatComponent);
|
||||
packet.getModifier().write(1, updatePacket);
|
||||
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException |
|
||||
InstantiationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return packet;
|
||||
}
|
||||
|
||||
|
||||
private PacketContainer getProgressPacket() {
|
||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.BOSS);
|
||||
packet.getModifier().write(0, uuid);
|
||||
try {
|
||||
Class<?> packetBossClass = Class.forName("net.minecraft.network.protocol.game.PacketPlayOutBoss$f");
|
||||
Constructor<?> packetConstructor = packetBossClass.getDeclaredConstructor(float.class);
|
||||
packetConstructor.setAccessible(true);
|
||||
Object updatePacket = packetConstructor.newInstance(Competition.currentCompetition.getProgress());
|
||||
packet.getModifier().write(1, updatePacket);
|
||||
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException |
|
||||
InstantiationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return packet;
|
||||
}
|
||||
|
||||
private PacketContainer getPacket() {
|
||||
@@ -137,11 +166,16 @@ public class BossBarSender {
|
||||
private void remove() {
|
||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.BOSS);
|
||||
packet.getModifier().write(0, uuid);
|
||||
packet.getModifier().write(1, Reflection.removeBar);
|
||||
try{
|
||||
try {
|
||||
Class<?> bar = Class.forName("net.minecraft.network.protocol.game.PacketPlayOutBoss");
|
||||
Field remove = bar.getDeclaredField("f");
|
||||
remove.setAccessible(true);
|
||||
packet.getModifier().write(1, remove.get(null));
|
||||
CustomFishing.protocolManager.sendServerPacket(player, packet);
|
||||
}catch (InvocationTargetException e){
|
||||
} catch (ClassNotFoundException e){
|
||||
AdventureUtil.consoleMessage("<red>[CustomFishing] Failed to remove bossbar for " + player.getName());
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -265,13 +265,8 @@ public class FishingManager extends Function {
|
||||
if (baitItem != null) {
|
||||
baitItem.setAmount(1);
|
||||
entityID = new Random().nextInt(100000000);
|
||||
try {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getSpawnPacket(entityID, fishHook.getLocation()));
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getMetaPacket(entityID, baitItem));
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getSpawnPacket(entityID, fishHook.getLocation()));
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getMetaPacket(entityID, baitItem));
|
||||
}
|
||||
|
||||
BobberCheckTask bobberCheckTask = new BobberCheckTask(player, initialBonus, fishHook, this, lureLevel, entityID);
|
||||
|
||||
@@ -80,13 +80,8 @@ public class BobberCheckTask extends BukkitRunnable {
|
||||
public void run() {
|
||||
timer ++;
|
||||
if (!land && entityID != 0) {
|
||||
try {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getVelocity(entityID, fishHook.getVelocity()));
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getTpPacket(entityID, fishHook.getLocation()));
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getVelocity(entityID, fishHook.getVelocity()));
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getTpPacket(entityID, fishHook.getLocation()));
|
||||
}
|
||||
if (timer > 3600) {
|
||||
stop();
|
||||
@@ -164,12 +159,7 @@ public class BobberCheckTask extends BukkitRunnable {
|
||||
|
||||
private void sendRemovePacket() {
|
||||
if (entityID == 0) return;
|
||||
try {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getDestroyPacket(entityID));
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
CustomFishing.protocolManager.sendServerPacket(player, FakeItemUtil.getDestroyPacket(entityID));
|
||||
}
|
||||
|
||||
public void cancelTask() {
|
||||
|
||||
@@ -72,29 +72,19 @@ public class ActivatedTotem extends BukkitRunnable {
|
||||
for (Player player : temp) {
|
||||
if (nearbyPlayers.remove(player)) {
|
||||
if (hasHolo) {
|
||||
try {
|
||||
for (int i = 0; i < entityID.length; i++) {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, ArmorStandUtil.getMetaPacket(entityID[i],
|
||||
totem.getHoloText()[entityID.length - 1 - i].replace("{time}", String.valueOf(totem.getDuration() - timer))
|
||||
.replace("{max_time}", String.valueOf(totem.getDuration()))
|
||||
));
|
||||
}
|
||||
addPotionEffect(player);
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
for (int i = 0; i < entityID.length; i++) {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, ArmorStandUtil.getMetaPacket(entityID[i],
|
||||
totem.getHoloText()[entityID.length - 1 - i].replace("{time}", String.valueOf(totem.getDuration() - timer))
|
||||
.replace("{max_time}", String.valueOf(totem.getDuration()))
|
||||
));
|
||||
}
|
||||
addPotionEffect(player);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (hasHolo) {
|
||||
try {
|
||||
for (int j : entityID) {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, ArmorStandUtil.getDestroyPacket(j));
|
||||
}
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
for (int j : entityID) {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, ArmorStandUtil.getDestroyPacket(j));
|
||||
}
|
||||
}
|
||||
nearbyPlayerSet.remove(player);
|
||||
@@ -103,19 +93,14 @@ public class ActivatedTotem extends BukkitRunnable {
|
||||
|
||||
for (Player newComer : nearbyPlayers) {
|
||||
if (hasHolo) {
|
||||
try {
|
||||
for (int i = 0; i < entityID.length; i++) {
|
||||
CustomFishing.protocolManager.sendServerPacket(newComer, ArmorStandUtil.getSpawnPacket(entityID[i], location.clone().add(0.5, totem.getHoloOffset() + i * 0.4, 0.5)));
|
||||
CustomFishing.protocolManager.sendServerPacket(newComer, ArmorStandUtil.getMetaPacket(entityID[i],
|
||||
totem.getHoloText()[entityID.length - 1 - i].replace("{time}", String.valueOf(totem.getDuration() - timer))
|
||||
.replace("{max_time}", String.valueOf(totem.getDuration()))
|
||||
));
|
||||
}
|
||||
addPotionEffect(newComer);
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
for (int i = 0; i < entityID.length; i++) {
|
||||
CustomFishing.protocolManager.sendServerPacket(newComer, ArmorStandUtil.getSpawnPacket(entityID[i], location.clone().add(0.5, totem.getHoloOffset() + i * 0.4, 0.5)));
|
||||
CustomFishing.protocolManager.sendServerPacket(newComer, ArmorStandUtil.getMetaPacket(entityID[i],
|
||||
totem.getHoloText()[entityID.length - 1 - i].replace("{time}", String.valueOf(totem.getDuration() - timer))
|
||||
.replace("{max_time}", String.valueOf(totem.getDuration()))
|
||||
));
|
||||
}
|
||||
addPotionEffect(newComer);
|
||||
}
|
||||
nearbyPlayerSet.add(newComer);
|
||||
}
|
||||
@@ -136,13 +121,8 @@ public class ActivatedTotem extends BukkitRunnable {
|
||||
|
||||
if (hasHolo) {
|
||||
for (Player player : nearbyPlayerSet) {
|
||||
try {
|
||||
for (int j : entityID) {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, ArmorStandUtil.getDestroyPacket(j));
|
||||
}
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
for (int j : entityID) {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, ArmorStandUtil.getDestroyPacket(j));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,10 +19,8 @@ package net.momirealms.customfishing.util;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
||||
import com.comphenix.protocol.wrappers.Pair;
|
||||
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||
import com.comphenix.protocol.wrappers.*;
|
||||
import com.google.common.collect.Lists;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||
import net.momirealms.customfishing.CustomFishing;
|
||||
@@ -33,7 +31,6 @@ import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.*;
|
||||
|
||||
public class ArmorStandUtil {
|
||||
@@ -57,14 +54,34 @@ public class ArmorStandUtil {
|
||||
public static PacketContainer getMetaPacket(int id) {
|
||||
PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
|
||||
metaPacket.getIntegers().write(0, id);
|
||||
metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher().getWatchableObjects());
|
||||
if (CustomFishing.version.equals("v1_19_R2")) {
|
||||
WrappedDataWatcher wrappedDataWatcher = createDataWatcher();
|
||||
List<WrappedDataValue> wrappedDataValueList = Lists.newArrayList();
|
||||
wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> {
|
||||
final WrappedDataWatcher.WrappedDataWatcherObject dataWatcherObject = entry.getWatcherObject();
|
||||
wrappedDataValueList.add(new WrappedDataValue(dataWatcherObject.getIndex(), dataWatcherObject.getSerializer(), entry.getRawValue()));
|
||||
});
|
||||
metaPacket.getDataValueCollectionModifier().write(0, wrappedDataValueList);
|
||||
} else {
|
||||
metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher().getWatchableObjects());
|
||||
}
|
||||
return metaPacket;
|
||||
}
|
||||
|
||||
public static PacketContainer getMetaPacket(int id, String text) {
|
||||
PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
|
||||
metaPacket.getIntegers().write(0, id);
|
||||
metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(text).getWatchableObjects());
|
||||
if (CustomFishing.version.equals("v1_19_R2")) {
|
||||
WrappedDataWatcher wrappedDataWatcher = createDataWatcher(text);
|
||||
List<WrappedDataValue> wrappedDataValueList = Lists.newArrayList();
|
||||
wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> {
|
||||
final WrappedDataWatcher.WrappedDataWatcherObject dataWatcherObject = entry.getWatcherObject();
|
||||
wrappedDataValueList.add(new WrappedDataValue(dataWatcherObject.getIndex(), dataWatcherObject.getSerializer(), entry.getRawValue()));
|
||||
});
|
||||
metaPacket.getDataValueCollectionModifier().write(0, wrappedDataValueList);
|
||||
} else {
|
||||
metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(text).getWatchableObjects());
|
||||
}
|
||||
return metaPacket;
|
||||
}
|
||||
|
||||
@@ -104,21 +121,11 @@ public class ArmorStandUtil {
|
||||
int id = new Random().nextInt(100000000);
|
||||
ItemStack itemStack = BonusManager.UTILITEMS.get(item);
|
||||
if (itemStack == null) return;
|
||||
try {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getSpawnPacket(id, location.clone().subtract(0,1,0)));
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getMetaPacket(id));
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getEquipPacket(id, itemStack));
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getSpawnPacket(id, location.clone().subtract(0,1,0)));
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getMetaPacket(id));
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getEquipPacket(id, itemStack));
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(CustomFishing.plugin, () -> {
|
||||
try {
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getDestroyPacket(id));
|
||||
}
|
||||
catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
CustomFishing.protocolManager.sendServerPacket(player, getDestroyPacket(id));
|
||||
}, time);
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
package net.momirealms.customfishing.util;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class BlockUtil {
|
||||
|
||||
public static void isInOpenLava(Location location) {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -61,12 +61,6 @@ public class ConfigUtil {
|
||||
CustomFishing.plugin.getSellManager().load();
|
||||
CustomFishing.plugin.getBagDataManager().unload();
|
||||
CustomFishing.plugin.getBagDataManager().load();
|
||||
try {
|
||||
Reflection.load();
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void update(String fileName){
|
||||
|
||||
@@ -2,13 +2,17 @@ package net.momirealms.customfishing.util;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.events.PacketContainer;
|
||||
import com.comphenix.protocol.wrappers.WrappedDataValue;
|
||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||
import com.google.common.collect.Lists;
|
||||
import net.momirealms.customfishing.CustomFishing;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
public class FakeItemUtil {
|
||||
@@ -33,7 +37,17 @@ public class FakeItemUtil {
|
||||
public static PacketContainer getMetaPacket(int id, ItemStack itemStack) {
|
||||
PacketContainer metaPacket = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
|
||||
metaPacket.getIntegers().write(0, id);
|
||||
metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(itemStack).getWatchableObjects());
|
||||
if (CustomFishing.version.equals("v1_19_R2")) {
|
||||
WrappedDataWatcher wrappedDataWatcher = createDataWatcher(itemStack);
|
||||
List<WrappedDataValue> wrappedDataValueList = Lists.newArrayList();
|
||||
wrappedDataWatcher.getWatchableObjects().stream().filter(Objects::nonNull).forEach(entry -> {
|
||||
final WrappedDataWatcher.WrappedDataWatcherObject dataWatcherObject = entry.getWatcherObject();
|
||||
wrappedDataValueList.add(new WrappedDataValue(dataWatcherObject.getIndex(), dataWatcherObject.getSerializer(), entry.getRawValue()));
|
||||
});
|
||||
metaPacket.getDataValueCollectionModifier().write(0, wrappedDataValueList);
|
||||
} else {
|
||||
metaPacket.getWatchableCollectionModifier().write(0, createDataWatcher(itemStack).getWatchableObjects());
|
||||
}
|
||||
return metaPacket;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) <2022> <XiaoMoMi>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package net.momirealms.customfishing.util;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public class Reflection {
|
||||
|
||||
public static Object removeBar;
|
||||
|
||||
public static void load() throws Exception{
|
||||
Class<?> bar = Class.forName("net.minecraft.network.protocol.game.PacketPlayOutBoss");
|
||||
Field remove = bar.getDeclaredField("f");
|
||||
remove.setAccessible(true);
|
||||
removeBar = remove.get(null);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user