mirror of
https://github.com/TotalFreedomMC/VulnerabilityPatcher.git
synced 2024-06-29 01:10:53 +00:00
112 lines
3.9 KiB
Java
112 lines
3.9 KiB
Java
package me.cooljwb.vulnerabilitypatcher.patches;
|
|
|
|
import me.cooljwb.vulnerabilitypatcher.SMG;
|
|
import net.minecraft.server.v1_13_R2.ChatMessageException;
|
|
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.EventPriority;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.block.Action;
|
|
import org.bukkit.event.player.PlayerInteractEvent;
|
|
import org.bukkit.inventory.EquipmentSlot;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.meta.BookMeta;
|
|
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
|
|
/*
|
|
* Copyright 2019 CoolJWB
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/**
|
|
* @author CoolJWB
|
|
*/
|
|
|
|
public class Books extends Patches implements Listener {
|
|
|
|
private Logger log = Logger.getLogger("Minecraft");
|
|
|
|
@EventHandler(priority = EventPriority.HIGHEST)
|
|
public void onPlayerInteractEvent(PlayerInteractEvent event) {
|
|
if (event.getItem() != null && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) {
|
|
Player player = event.getPlayer();
|
|
ItemStack item = event.getItem();
|
|
EquipmentSlot hand = event.getHand();
|
|
|
|
|
|
switch (item.getType().toString()) {
|
|
case "WRITTEN_BOOK":
|
|
writtenBook(player, hand);
|
|
break;
|
|
case "KNOWLEDGE_BOOK":
|
|
knowledgeBook(player, hand);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(devmode)
|
|
log.log(Level.INFO, String.format("[%s] Event: %s", pluginName, ReflectionToStringBuilder.toString(event)));
|
|
}
|
|
|
|
public void writtenBook(Player player, EquipmentSlot hand) {
|
|
if(hand.name().equals("OFF_HAND")) {
|
|
ItemStack hand_item = player.getInventory().getItemInOffHand();
|
|
resetMeta(player, hand_item, false);
|
|
}
|
|
|
|
else if(hand.name().equals("HAND")) {
|
|
ItemStack hand_item = player.getInventory().getItemInMainHand();
|
|
resetMeta(player, hand_item, true);
|
|
}
|
|
}
|
|
|
|
public void knowledgeBook(Player player, EquipmentSlot hand) {
|
|
if(hand.name().equals("OFF_HAND")) {
|
|
ItemStack hand_item = player.getInventory().getItemInOffHand();
|
|
hand_item.setAmount(-1);
|
|
msg(player, SMG.ITEM.msg);
|
|
}
|
|
|
|
else if(hand.name().equals("HAND")) {
|
|
ItemStack hand_item = player.getInventory().getItemInMainHand();
|
|
hand_item.setAmount(-1);
|
|
msg(player, SMG.ITEM.msg);
|
|
}
|
|
}
|
|
|
|
public void resetMeta(Player player, ItemStack hand_item, boolean mainhand) {
|
|
net.minecraft.server.v1_13_R2.ItemStack nmsItemStack = CraftItemStack.asNMSCopy(hand_item);
|
|
|
|
if(nmsItemStack.hasTag() && nmsItemStack.getTag().hasKey("pages")) {
|
|
if (nmsItemStack.getTag().getList("pages", 8).toString().contains("run_command")) {
|
|
BookMeta meta = (BookMeta) hand_item.getItemMeta();
|
|
ItemStack book = new ItemStack(Material.WRITTEN_BOOK);
|
|
|
|
meta.setPages(meta.getPages());
|
|
book.setItemMeta(meta);
|
|
|
|
if (mainhand)
|
|
player.getInventory().setItemInMainHand(book);
|
|
else
|
|
player.getInventory().setItemInOffHand(book);
|
|
}
|
|
}
|
|
}
|
|
}
|