Initial Pass at Minecraft 1.12 support
This commit is contained in:
parent
22180b7b3d
commit
5503ba44f0
@ -35,6 +35,7 @@ import com.massivecraft.massivecore.item.WriterItemStack;
|
||||
import com.massivecraft.massivecore.mixin.MixinEvent;
|
||||
import com.massivecraft.massivecore.mson.Mson;
|
||||
import com.massivecraft.massivecore.mson.MsonEvent;
|
||||
import com.massivecraft.massivecore.nms.NmsBasics;
|
||||
import com.massivecraft.massivecore.nms.NmsItemStackCreate17R4P;
|
||||
import com.massivecraft.massivecore.ps.PS;
|
||||
import com.massivecraft.massivecore.ps.PSAdapter;
|
||||
@ -261,7 +262,18 @@ public class MassiveCore extends MassivePlugin
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Class<?>> getClassesActiveNms()
|
||||
{
|
||||
List<Class<?>> ret = super.getClassesActiveNms();
|
||||
|
||||
ret.remove(NmsBasics.class);
|
||||
ret.add(0, NmsBasics.class);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Class<?>> getClassesActiveMixins()
|
||||
{
|
||||
|
@ -14,6 +14,7 @@ public class NmsChat extends Mixin
|
||||
// -------------------------------------------- //
|
||||
|
||||
private static NmsChat d = new NmsChat().setAlternatives(
|
||||
NmsChat112R1P.class,
|
||||
NmsChat18R2P.class,
|
||||
NmsChat18R1.class,
|
||||
NmsChatFallback.class
|
||||
|
54
src/com/massivecraft/massivecore/nms/NmsChat112R1P.java
Normal file
54
src/com/massivecraft/massivecore/nms/NmsChat112R1P.java
Normal file
@ -0,0 +1,54 @@
|
||||
package com.massivecraft.massivecore.nms;
|
||||
|
||||
import com.massivecraft.massivecore.particleeffect.ReflectionUtils.PackageType;
|
||||
import com.massivecraft.massivecore.util.IdUtil;
|
||||
import com.massivecraft.massivecore.util.ReflectionUtil;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class NmsChat112R1P extends NmsChatAbstract
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE & CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
private static NmsChat112R1P i = new NmsChat112R1P();
|
||||
public static NmsChat112R1P get() { return i; }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// FIELDS
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected Class<?> classChatMessageType;
|
||||
protected Object instanceChatMessageTypeGameInfo;
|
||||
|
||||
// -------------------------------------------- //
|
||||
// SETUP
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public void setup() throws Throwable
|
||||
{
|
||||
this.classChatSerializer = PackageType.MINECRAFT_SERVER.getClass("IChatBaseComponent$ChatSerializer");
|
||||
this.methodChatSerializer = ReflectionUtil.getMethod(this.classChatSerializer, "a", String.class);
|
||||
this.classEnumTitleAction = PackageType.MINECRAFT_SERVER.getClass("PacketPlayOutTitle$EnumTitleAction");
|
||||
|
||||
setupCommon();
|
||||
|
||||
this.classChatMessageType = PackageType.MINECRAFT_SERVER.getClass("ChatMessageType");
|
||||
this.instanceChatMessageTypeGameInfo = this.classChatMessageType.getEnumConstants()[2];
|
||||
// CHAT(0),
|
||||
// SYSTEM(1),
|
||||
// GAME_INFO(2);
|
||||
this.constructorPacketPlayOutChatType = ReflectionUtil.getConstructor(this.classPacketPlayOutChat, this.classIChatBaseComponent, this.classChatMessageType);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// ACTIONBAR
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public <T> T constructActionBarPacket(Object component) {
|
||||
return ReflectionUtil.invokeConstructor(this.constructorPacketPlayOutChatType, component, this.instanceChatMessageTypeGameInfo);
|
||||
}
|
||||
|
||||
}
|
@ -13,16 +13,19 @@ public class NmsChat18R1 extends NmsChatAbstract
|
||||
public static NmsChat18R1 get() { return i; }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// SETUP SPECIFIC
|
||||
// SETUP
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public void setupSpecific() throws Throwable
|
||||
public void setup() throws Throwable
|
||||
{
|
||||
this.classChatSerializer = PackageType.MINECRAFT_SERVER.getClass("ChatSerializer");
|
||||
this.methodChatSerializer = ReflectionUtil.getMethod(this.classChatSerializer, "a", String.class);
|
||||
|
||||
this.classEnumTitleAction = PackageType.MINECRAFT_SERVER.getClass("EnumTitleAction");
|
||||
|
||||
setupCommon();
|
||||
|
||||
this.constructorPacketPlayOutChatType = ReflectionUtil.getConstructor(this.classPacketPlayOutChat, this.classIChatBaseComponent, Byte.TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -13,16 +13,18 @@ public class NmsChat18R2P extends NmsChatAbstract
|
||||
public static NmsChat18R2P get() { return i; }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// SETUP SPECIFIC
|
||||
// SETUP
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public void setupSpecific() throws Throwable
|
||||
public void setup() throws Throwable
|
||||
{
|
||||
this.classChatSerializer = PackageType.MINECRAFT_SERVER.getClass("IChatBaseComponent$ChatSerializer");
|
||||
this.methodChatSerializer = ReflectionUtil.getMethod(this.classChatSerializer, "a", String.class);
|
||||
|
||||
this.classEnumTitleAction = PackageType.MINECRAFT_SERVER.getClass("PacketPlayOutTitle$EnumTitleAction");
|
||||
|
||||
setupCommon();
|
||||
|
||||
this.constructorPacketPlayOutChatType = ReflectionUtil.getConstructor(this.classPacketPlayOutChat, this.classIChatBaseComponent, Byte.TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -61,8 +61,14 @@ public abstract class NmsChatAbstract extends NmsChat
|
||||
@Override
|
||||
public void setup() throws Throwable
|
||||
{
|
||||
this.setupSpecific();
|
||||
|
||||
throw notImplemented();
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// SETUP COMMON
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected void setupCommon() throws Throwable {
|
||||
for (Object object : this.classEnumTitleAction.getEnumConstants())
|
||||
{
|
||||
Enum<?> e = (Enum<?>) object;
|
||||
@ -70,27 +76,20 @@ public abstract class NmsChatAbstract extends NmsChat
|
||||
else if (e.name().equalsIgnoreCase("SUBTITLE")) this.enumEnumTitleActionSub = e;
|
||||
else if (e.name().equalsIgnoreCase("TIMES")) this.enumEnumTitleActionTimes = e;
|
||||
}
|
||||
|
||||
|
||||
this.classIChatBaseComponent = PackageType.MINECRAFT_SERVER.getClass("IChatBaseComponent");
|
||||
|
||||
|
||||
// Get title packet and it's constructor
|
||||
this.classPacketPlayOutTitle = PackageType.MINECRAFT_SERVER.getClass("PacketPlayOutTitle");
|
||||
this.constructorPacketPlayOutTitle = ReflectionUtil.getConstructor(this.classPacketPlayOutTitle, this.classEnumTitleAction, this.classIChatBaseComponent);
|
||||
|
||||
this.constructorPacketPlayOutTitleTimes = ReflectionUtil.getConstructor(this.classPacketPlayOutTitle, this.classEnumTitleAction, this.classIChatBaseComponent, int.class, int.class, int.class);
|
||||
|
||||
|
||||
// Get Chat packet and it's constructor
|
||||
this.classPacketPlayOutChat = PackageType.MINECRAFT_SERVER.getClass("PacketPlayOutChat");
|
||||
this.constructorPacketPlayOutChat = ReflectionUtil.getConstructor(this.classPacketPlayOutChat, this.classIChatBaseComponent);
|
||||
this.constructorPacketPlayOutChatType = ReflectionUtil.getConstructor(this.classPacketPlayOutChat, this.classIChatBaseComponent, Byte.TYPE);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// SETUP SPECIFIC
|
||||
// -------------------------------------------- //
|
||||
|
||||
public abstract void setupSpecific() throws Throwable;
|
||||
|
||||
// -------------------------------------------- //
|
||||
// TO COMPONENT
|
||||
// -------------------------------------------- //
|
||||
@ -173,8 +172,12 @@ public abstract class NmsChatAbstract extends NmsChat
|
||||
if (player == null) return;
|
||||
|
||||
Object component = toComponent(raw);
|
||||
Object packet = ReflectionUtil.invokeConstructor(this.constructorPacketPlayOutChatType, component, (byte)2);
|
||||
Object packet = this.constructActionBarPacket(component);
|
||||
NmsBasics.get().sendPacket(player, packet);
|
||||
}
|
||||
|
||||
public <T> T constructActionBarPacket(Object component) {
|
||||
return ReflectionUtil.invokeConstructor(this.constructorPacketPlayOutChatType, component, (byte)2);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.permissions.PermissibleBase;
|
||||
|
||||
public class BasicCommandSender extends PermissibleBase implements CommandSender
|
||||
public abstract class BasicCommandSender extends PermissibleBase implements CommandSender
|
||||
{
|
||||
public final String name;
|
||||
|
||||
@ -32,19 +32,13 @@ public class BasicCommandSender extends PermissibleBase implements CommandSender
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Server getServer()
|
||||
{
|
||||
return Bukkit.getServer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(String message)
|
||||
{
|
||||
// Nothing per default
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(String[] messages)
|
||||
{
|
||||
|
@ -1,16 +1,51 @@
|
||||
package com.massivecraft.massivecore.util;
|
||||
|
||||
import com.massivecraft.massivecore.collections.MassiveList;
|
||||
import com.massivecraft.massivecore.predicate.Predicate;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.Recipe;
|
||||
import org.bukkit.inventory.ShapelessRecipe;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.potion.PotionData;
|
||||
import org.bukkit.potion.PotionType;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
// NOTE: This utility targets 1.9 and will crash on older servers.
|
||||
public class RecipeUtil
|
||||
{
|
||||
{
|
||||
// ------------------------------------------- //
|
||||
// REMOVE
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static void remove(Predicate<Recipe> removePredicate)
|
||||
{
|
||||
Objects.requireNonNull(removePredicate);
|
||||
|
||||
List<Recipe> recipesToRemove = new MassiveList<>();
|
||||
List<Recipe> recipesToKeep = new MassiveList<>();
|
||||
|
||||
Iterator<Recipe> iterator = Bukkit.recipeIterator();
|
||||
while (iterator.hasNext())
|
||||
{
|
||||
Recipe recipe = iterator.next();
|
||||
List<Recipe> recipes = removePredicate.apply(recipe) ? recipesToRemove : recipesToKeep;
|
||||
recipes.add(recipe);
|
||||
}
|
||||
|
||||
if (recipesToRemove.isEmpty()) return;
|
||||
|
||||
Bukkit.clearRecipes();
|
||||
for (Recipe recipe : recipesToKeep) {
|
||||
Bukkit.addRecipe(recipe);
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------- //
|
||||
// POTION
|
||||
// -------------------------------------------- //
|
||||
|
Loading…
Reference in New Issue
Block a user