TamableFoxes/src/main/java/net/seanomik/tamablefoxes/TamableFoxes.java

96 lines
3.4 KiB
Java
Raw Normal View History

package net.seanomik.tamablefoxes;
2020-01-26 07:05:18 +00:00
import net.minecraft.server.v1_15_R1.*;
import net.seanomik.tamablefoxes.versions.version_1_15.command.CommandSpawnTamableFox;
2020-01-26 07:05:18 +00:00
import net.seanomik.tamablefoxes.io.LanguageConfig;
import org.bukkit.*;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftEntity;
import org.bukkit.entity.EntityType;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
// @TODO:
2020-05-03 17:36:56 +00:00
/* @CHANGELOG (1.6.0-SNAPSHOT):
* Fix a bug of duplicating water/lava buckets.
*/
public final class TamableFoxes extends JavaPlugin implements Listener {
private static TamableFoxes plugin;
2020-01-26 07:05:18 +00:00
private boolean versionSupported = true;
@Override
public void onLoad() {
2020-01-26 07:05:18 +00:00
plugin = this;
LanguageConfig.getConfig().saveDefault();
String version = Bukkit.getServer().getClass().getPackage().getName();
if (!version.equals("org.bukkit.craftbukkit.v1_15_R1")) {
2020-01-26 07:05:18 +00:00
Bukkit.getServer().getConsoleSender().sendMessage(Utils.getPrefix() + ChatColor.RED + LanguageConfig.getUnsupportedMCVersionRegister());
versionSupported = false;
return;
}
try { // Replace the fox entity
Field field = EntityTypes.FOX.getClass().getDeclaredField("ba");
field.setAccessible(true);
// If the field is final, then make it non final
if ((field.getModifiers() & Modifier.FINAL) == Modifier.FINAL) {
Field fieldMutable = field.getClass().getDeclaredField("modifiers");
fieldMutable.setAccessible(true);
fieldMutable.set(field, fieldMutable.getInt(field) & ~Modifier.FINAL);
fieldMutable.setAccessible(false);
}
field.set(EntityTypes.FOX, (EntityTypes.b<EntityFox>) (type, world) -> new EntityTamableFox(type, world));
field.setAccessible(false);
2020-01-26 07:05:18 +00:00
getServer().getConsoleSender().sendMessage(Utils.getPrefix() + ChatColor.GREEN + LanguageConfig.getSuccessReplaced());
} catch (Exception e) {
//e.printStackTrace();
2020-01-26 07:05:18 +00:00
getServer().getConsoleSender().sendMessage(Utils.getPrefix() + ChatColor.RED + LanguageConfig.getFailureReplace());
}
}
@Override
public void onEnable() {
2020-01-26 07:05:18 +00:00
if (!versionSupported) {
Bukkit.getServer().getConsoleSender().sendMessage(Utils.getPrefix() + ChatColor.RED + LanguageConfig.getUnsupportedMCVersionDisable());
getServer().getPluginManager().disablePlugin(this);
return;
}
getServer().getPluginManager().registerEvents(this, this);
this.getCommand("spawntamablefox").setExecutor(new CommandSpawnTamableFox(this));
this.saveDefaultConfig();
getConfig().options().copyDefaults(true);
saveConfig();
}
@Override
public void onDisable() {
2020-01-26 07:05:18 +00:00
getServer().getConsoleSender().sendMessage(Utils.getPrefix() + ChatColor.YELLOW + LanguageConfig.getSavingFoxMessage());
}
2020-01-26 07:05:18 +00:00
public EntityTamableFox spawnTamableFox(Location loc, EntityFox.Type type) {
EntityTamableFox tamableFox = (EntityTamableFox) ((CraftEntity) loc.getWorld().spawnEntity(loc, EntityType.FOX)).getHandle();
tamableFox.setFoxType(type);
return tamableFox;
}
public static TamableFoxes getPlugin() {
return plugin;
}
}