9
0
mirror of https://github.com/Xiao-MoMi/Custom-Fishing.git synced 2025-12-29 03:49:07 +00:00
This commit is contained in:
Xiao-MoMi
2023-01-06 13:13:35 +08:00
parent 420e0db544
commit 2fa8e406a7
12 changed files with 128 additions and 153 deletions

View File

@@ -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")
}

View File

@@ -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();

View File

@@ -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();
}

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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() {

View File

@@ -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));
}
}
}

View File

@@ -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);
}
}

View File

@@ -1,13 +0,0 @@
package net.momirealms.customfishing.util;
import org.bukkit.Location;
public class BlockUtil {
public static void isInOpenLava(Location location) {
}
}

View File

@@ -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){

View File

@@ -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;
}

View File

@@ -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);
}
}