commit
01a7559190
@ -1,4 +1,4 @@
|
|||||||
val mc_version="1.19"
|
val mc_version="1.19.3"
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
`java-library`
|
`java-library`
|
||||||
|
@ -2,20 +2,22 @@ package net.theprogrammersworld.herobrine.AI;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket.Action;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket;
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket.Action;
|
|
||||||
import net.theprogrammersworld.herobrine.Herobrine;
|
import net.theprogrammersworld.herobrine.Herobrine;
|
||||||
import net.theprogrammersworld.herobrine.Utils;
|
import net.theprogrammersworld.herobrine.Utils;
|
||||||
import net.theprogrammersworld.herobrine.AI.Core.CoreType;
|
import net.theprogrammersworld.herobrine.AI.Core.CoreType;
|
||||||
@ -679,14 +681,14 @@ public class AICore {
|
|||||||
if(playerCanSeeHerobrine && !visibilityList.contains(p)) {
|
if(playerCanSeeHerobrine && !visibilityList.contains(p)) {
|
||||||
// If player p can see Herobrine but visibilty is not already enabled, then enable it.
|
// If player p can see Herobrine but visibilty is not already enabled, then enable it.
|
||||||
ServerPlayer pcon = ((CraftPlayer) p).getHandle();
|
ServerPlayer pcon = ((CraftPlayer) p).getHandle();
|
||||||
pcon.connection.send(new ClientboundPlayerInfoPacket(Action.ADD_PLAYER, Herobrine.getPluginCore().HerobrineNPC.getEntity()));
|
pcon.connection.send(new ClientboundPlayerInfoUpdatePacket(Action.ADD_PLAYER, Herobrine.getPluginCore().HerobrineNPC.getEntity()));
|
||||||
visibilityList.add(p);
|
visibilityList.add(p);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if(!playerCanSeeHerobrine && visibilityList.contains(p)) {
|
else if(!playerCanSeeHerobrine && visibilityList.contains(p)) {
|
||||||
// If player p cannot see Herobrine but visibility is still enabled, then disable it.
|
// If player p cannot see Herobrine but visibility is still enabled, then disable it.
|
||||||
ServerPlayer pcon = ((CraftPlayer) p).getHandle();
|
ServerPlayer pcon = ((CraftPlayer) p).getHandle();
|
||||||
pcon.connection.send(new ClientboundPlayerInfoPacket(Action.REMOVE_PLAYER, Herobrine.getPluginCore().HerobrineNPC.getEntity()));
|
pcon.connection.send(new ClientboundPlayerInfoRemovePacket(List.of(Herobrine.getPluginCore().HerobrineNPC.getEntity().getUUID())));
|
||||||
visibilityList.remove(p);
|
visibilityList.remove(p);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -24,13 +24,14 @@ import org.bukkit.metadata.FixedMetadataValue;
|
|||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import net.minecraft.world.entity.Entity;
|
|
||||||
import net.minecraft.world.entity.EntityType;
|
|
||||||
import net.minecraft.world.entity.MobCategory;
|
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
import net.minecraft.core.MappedRegistry;
|
import net.minecraft.core.MappedRegistry;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.core.registries.BuiltInRegistries;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.EntityType;
|
||||||
|
import net.minecraft.world.entity.MobCategory;
|
||||||
import net.theprogrammersworld.herobrine.AI.AICore;
|
import net.theprogrammersworld.herobrine.AI.AICore;
|
||||||
import net.theprogrammersworld.herobrine.AI.Core.CoreType;
|
import net.theprogrammersworld.herobrine.AI.Core.CoreType;
|
||||||
import net.theprogrammersworld.herobrine.AI.extensions.GraveyardWorld;
|
import net.theprogrammersworld.herobrine.AI.extensions.GraveyardWorld;
|
||||||
@ -82,7 +83,7 @@ public class Herobrine extends JavaPlugin implements Listener {
|
|||||||
// If it is not, print an error message and disable the plugin.
|
// If it is not, print an error message and disable the plugin.
|
||||||
if (continueWithEnable) {
|
if (continueWithEnable) {
|
||||||
try {
|
try {
|
||||||
Class.forName("org.bukkit.craftbukkit.v1_19_R1.CraftArt");
|
Class.forName("org.bukkit.craftbukkit.v1_19_R2.CraftArt");
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (ClassNotFoundException e) {
|
||||||
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "This version of Herobrine is not "
|
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "This version of Herobrine is not "
|
||||||
+ "compatible with this server's Spigot version and will be disabled.");
|
+ "compatible with this server's Spigot version and will be disabled.");
|
||||||
@ -368,12 +369,12 @@ public class Herobrine extends JavaPlugin implements Listener {
|
|||||||
// Registers a custom entity. Adapted from https://www.spigotmc.org/threads/handling-custom-entity-registry-on-spigot-1-13.353426/#post-3447111
|
// Registers a custom entity. Adapted from https://www.spigotmc.org/threads/handling-custom-entity-registry-on-spigot-1-13.353426/#post-3447111
|
||||||
// As of 1.18.2, this function was updated to unfreeze and freeze the entity registry when adding a new custom entity. Additionally, a conditional
|
// As of 1.18.2, this function was updated to unfreeze and freeze the entity registry when adding a new custom entity. Additionally, a conditional
|
||||||
// check was added to prevent the plugin from crashing due to an attempt to add the same custom entity twice.
|
// check was added to prevent the plugin from crashing due to an attempt to add the same custom entity twice.
|
||||||
if (!Registry.ENTITY_TYPE.getOptional(new ResourceLocation(customName)).isPresent()) {
|
if (!BuiltInRegistries.ENTITY_TYPE.getOptional(new ResourceLocation(customName)).isPresent()) {
|
||||||
unfreezeRegistry();
|
unfreezeRegistry();
|
||||||
EntityType.Builder<?> entity = EntityType.Builder.of(_func, enumCreatureType);
|
EntityType.Builder<?> entity = EntityType.Builder.of(_func, enumCreatureType);
|
||||||
entity.noSummon();
|
entity.noSummon();
|
||||||
Registry.register(Registry.ENTITY_TYPE, customName, entity.build(customName));
|
Registry.register(BuiltInRegistries.ENTITY_TYPE, customName, entity.build(customName));
|
||||||
Registry.ENTITY_TYPE.freeze();
|
BuiltInRegistries.ENTITY_TYPE.freeze();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -382,16 +383,16 @@ public class Herobrine extends JavaPlugin implements Listener {
|
|||||||
// Adapted from https://github.com/iSach/UltraCosmetics/blob/7f8bbfd2a540559888b89dae7eee4dec482ab7c9/v1_18_R2/src/main/java/be/isach/ultracosmetics/
|
// Adapted from https://github.com/iSach/UltraCosmetics/blob/7f8bbfd2a540559888b89dae7eee4dec482ab7c9/v1_18_R2/src/main/java/be/isach/ultracosmetics/
|
||||||
// v1_18_R2/customentities/CustomEntities.java#L75-L104
|
// v1_18_R2/customentities/CustomEntities.java#L75-L104
|
||||||
// Obfuscated fields are from https://github.com/iSach/UltraCosmetics/blob/master/v1_19_R1/src/main/java/be/isach/ultracosmetics/v1_19_R1/ObfuscatedFields.java
|
// Obfuscated fields are from https://github.com/iSach/UltraCosmetics/blob/master/v1_19_R1/src/main/java/be/isach/ultracosmetics/v1_19_R1/ObfuscatedFields.java
|
||||||
final String INTRUSIVE_HOLDER_CACHE = "cc";
|
final String INTRUSIVE_HOLDER_CACHE = "m";
|
||||||
final String FROZEN = "ca";
|
final String FROZEN = "l";
|
||||||
Class<?> registryClass = MappedRegistry.class;
|
Class<?> registryClass = MappedRegistry.class;
|
||||||
try {
|
try {
|
||||||
Field intrusiveHolderCache = registryClass.getDeclaredField(INTRUSIVE_HOLDER_CACHE);
|
Field intrusiveHolderCache = registryClass.getDeclaredField(INTRUSIVE_HOLDER_CACHE);
|
||||||
intrusiveHolderCache.setAccessible(true);
|
intrusiveHolderCache.setAccessible(true);
|
||||||
intrusiveHolderCache.set(Registry.ENTITY_TYPE, new IdentityHashMap<EntityType<?>, Holder.Reference<EntityType<?>>>());
|
intrusiveHolderCache.set(BuiltInRegistries.ENTITY_TYPE, new IdentityHashMap<EntityType<?>, Holder.Reference<EntityType<?>>>());
|
||||||
Field frozen = registryClass.getDeclaredField(FROZEN);
|
Field frozen = registryClass.getDeclaredField(FROZEN);
|
||||||
frozen.setAccessible(true);
|
frozen.setAccessible(true);
|
||||||
frozen.set(Registry.ENTITY_TYPE, false);
|
frozen.set(BuiltInRegistries.ENTITY_TYPE, false);
|
||||||
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
return;
|
return;
|
||||||
|
@ -9,8 +9,8 @@ import net.theprogrammersworld.herobrine.NPC.NMS.NMSWorld;
|
|||||||
import net.theprogrammersworld.herobrine.NPC.Network.NetworkHandler;
|
import net.theprogrammersworld.herobrine.NPC.Network.NetworkHandler;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.CraftServer;
|
import org.bukkit.craftbukkit.v1_19_R2.CraftServer;
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ public class HumanEntity extends ServerPlayer {
|
|||||||
private CraftPlayer cplayer = null;
|
private CraftPlayer cplayer = null;
|
||||||
|
|
||||||
public HumanEntity(final NPCCore npcCore, final NMSWorld world, final GameProfile s) {
|
public HumanEntity(final NPCCore npcCore, final NMSWorld world, final GameProfile s) {
|
||||||
super(npcCore.getServer().getMCServer(), world.getWorldServer(), s, null);
|
super(npcCore.getServer().getMCServer(), world.getWorldServer(), s);
|
||||||
|
|
||||||
this.setGameMode(GameType.SURVIVAL);
|
this.setGameMode(GameType.SURVIVAL);
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ import net.minecraft.server.MinecraftServer;
|
|||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.CraftServer;
|
import org.bukkit.craftbukkit.v1_19_R2.CraftServer;
|
||||||
|
|
||||||
public class NMSServer {
|
public class NMSServer {
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import net.minecraft.server.level.ChunkMap;
|
|||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_19_R2.CraftWorld;
|
||||||
|
|
||||||
public class NMSWorld {
|
public class NMSWorld {
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import net.minecraft.network.protocol.Packet;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ public class EntityManager {
|
|||||||
public void spawnCustomZombie(Location loc,MobType mbt){
|
public void spawnCustomZombie(Location loc,MobType mbt){
|
||||||
|
|
||||||
World world = loc.getWorld();
|
World world = loc.getWorld();
|
||||||
net.minecraft.world.level.Level mcWorld = ((org.bukkit.craftbukkit.v1_19_R1.CraftWorld) world).getHandle();
|
net.minecraft.world.level.Level mcWorld = ((org.bukkit.craftbukkit.v1_19_R2.CraftWorld) world).getHandle();
|
||||||
CustomZombie zmb = new CustomZombie(mcWorld,loc,mbt);
|
CustomZombie zmb = new CustomZombie(mcWorld,loc,mbt);
|
||||||
mcWorld.addFreshEntity(zmb, SpawnReason.CUSTOM);
|
mcWorld.addFreshEntity(zmb, SpawnReason.CUSTOM);
|
||||||
mobList.put(Integer.valueOf(zmb.getBukkitEntity().getEntityId()),zmb);
|
mobList.put(Integer.valueOf(zmb.getBukkitEntity().getEntityId()),zmb);
|
||||||
@ -24,7 +24,7 @@ public class EntityManager {
|
|||||||
public void spawnCustomSkeleton(Location loc,MobType mbt){
|
public void spawnCustomSkeleton(Location loc,MobType mbt){
|
||||||
|
|
||||||
World world = loc.getWorld();
|
World world = loc.getWorld();
|
||||||
net.minecraft.world.level.Level mcWorld = ((org.bukkit.craftbukkit.v1_19_R1.CraftWorld) world).getHandle();
|
net.minecraft.world.level.Level mcWorld = ((org.bukkit.craftbukkit.v1_19_R2.CraftWorld) world).getHandle();
|
||||||
CustomSkeleton zmb = new CustomSkeleton(mcWorld,loc,mbt);
|
CustomSkeleton zmb = new CustomSkeleton(mcWorld,loc,mbt);
|
||||||
mcWorld.addFreshEntity(zmb, SpawnReason.CUSTOM);
|
mcWorld.addFreshEntity(zmb, SpawnReason.CUSTOM);
|
||||||
mobList.put(Integer.valueOf(zmb.getBukkitEntity().getEntityId()), zmb);
|
mobList.put(Integer.valueOf(zmb.getBukkitEntity().getEntityId()), zmb);
|
||||||
|
@ -1,30 +1,41 @@
|
|||||||
package net.theprogrammersworld.herobrine.listeners;
|
package net.theprogrammersworld.herobrine.listeners;
|
||||||
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket;
|
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket.Action;
|
|
||||||
import net.theprogrammersworld.herobrine.AI.AICore;
|
|
||||||
import net.theprogrammersworld.herobrine.AI.Core.CoreType;
|
|
||||||
import net.theprogrammersworld.herobrine.Herobrine;
|
|
||||||
import net.theprogrammersworld.herobrine.Utils;
|
|
||||||
import net.theprogrammersworld.herobrine.misc.ItemName;
|
|
||||||
import org.bukkit.*;
|
|
||||||
import org.bukkit.block.Jukebox;
|
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
|
||||||
import org.bukkit.event.player.*;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Jukebox;
|
||||||
|
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
|
import org.bukkit.event.player.PlayerBedEnterEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.event.player.PlayerKickEvent;
|
||||||
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket.Action;
|
||||||
|
import net.theprogrammersworld.herobrine.Herobrine;
|
||||||
|
import net.theprogrammersworld.herobrine.Utils;
|
||||||
|
import net.theprogrammersworld.herobrine.AI.AICore;
|
||||||
|
import net.theprogrammersworld.herobrine.AI.Core.CoreType;
|
||||||
|
import net.theprogrammersworld.herobrine.misc.ItemName;
|
||||||
|
|
||||||
public class PlayerListener implements Listener {
|
public class PlayerListener implements Listener {
|
||||||
|
|
||||||
private ArrayList<String> equalsLoreS = new ArrayList<String>();
|
private ArrayList<String> equalsLoreS = new ArrayList<String>();
|
||||||
@ -49,7 +60,7 @@ public class PlayerListener implements Listener {
|
|||||||
// If the persistent tab list entry for Herobrine is enabled, send an "add player" packet to the user on login.
|
// If the persistent tab list entry for Herobrine is enabled, send an "add player" packet to the user on login.
|
||||||
if(Herobrine.getPluginCore().getConfigDB().ShowInTabList)
|
if(Herobrine.getPluginCore().getConfigDB().ShowInTabList)
|
||||||
((CraftPlayer) event.getPlayer()).getHandle().connection.send(
|
((CraftPlayer) event.getPlayer()).getHandle().connection.send(
|
||||||
new ClientboundPlayerInfoPacket(Action.ADD_PLAYER, Herobrine.getPluginCore().HerobrineNPC.getEntity()));
|
new ClientboundPlayerInfoUpdatePacket(Action.ADD_PLAYER, Herobrine.getPluginCore().HerobrineNPC.getEntity()));
|
||||||
|
|
||||||
// Check if the user has a Graveyard cache. If they do, this means they are stuck in the Graveyard and
|
// Check if the user has a Graveyard cache. If they do, this means they are stuck in the Graveyard and
|
||||||
// need teleported out.
|
// need teleported out.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
name: Herobrine
|
name: Herobrine
|
||||||
main: net.theprogrammersworld.herobrine.Herobrine
|
main: net.theprogrammersworld.herobrine.Herobrine
|
||||||
version: 2.4.0
|
version: 2.5.0-SNAPSHOT
|
||||||
description: "Bring Herobrine to your Spigot-based Minecraft server!"
|
description: "Bring Herobrine to your Spigot-based Minecraft server!"
|
||||||
website: https://www.theprogrammersworld.net
|
website: https://www.theprogrammersworld.net
|
||||||
api-version: 1.19
|
api-version: 1.19
|
||||||
|
Loading…
Reference in New Issue
Block a user