Skip to content

Commit

Permalink
Add WildHunt and Explosive Modifier
Browse files Browse the repository at this point in the history
  • Loading branch information
Flo56958 committed Oct 8, 2023
1 parent a8c0fa5 commit 8397571
Show file tree
Hide file tree
Showing 8 changed files with 413 additions and 5 deletions.
2 changes: 2 additions & 0 deletions src/main/java/de/flo56958/minetinker/MineTinker.java
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ private void addCoreMods() {
modManager.register(Ender.instance());
modManager.register(Evasive.instance());
modManager.register(Experienced.instance());
modManager.register(Explosive.instance());
modManager.register(ExtraModifier.instance());
modManager.register(Fiery.instance());
modManager.register(Freezing.instance());
Expand Down Expand Up @@ -221,6 +222,7 @@ private void addCoreMods() {
modManager.register(Vigilant.instance());
modManager.register(VoidNetting.instance());
modManager.register(Webbed.instance());
modManager.register(WildHunt.instance());
modManager.register(Withered.instance());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,11 @@ public class ModManager {
incompatibilityList.add(Thorned.instance().getKey() + ":" + Undead.instance().getKey());
incompatibilityList.add(Webbed.instance().getKey() + ":" + Undead.instance().getKey());
incompatibilityList.add(Withered.instance().getKey() + ":" + Undead.instance().getKey());
incompatibilityList.add(MultiShot.instance().getKey() + ":" + Explosive.instance().getKey());
incompatibilityList.add(Ender.instance().getKey() + ":" + Explosive.instance().getKey());
incompatibilityList.add(Sharpness.instance().getKey() + ":" + Explosive.instance().getKey());
incompatibilityList.add(Magical.instance().getKey() + ":" + Explosive.instance().getKey());
incompatibilityList.add(Piercing.instance().getKey() + ":" + Explosive.instance().getKey());

Plugin plugin = Bukkit.getPluginManager().getPlugin("ProtocolLib");
if (plugin != null && plugin.isEnabled()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ public void reload() {

config.addDefault("Recipe.Materials", recipeMaterials);

conversions.clear();
conversions.put(Material.STONE, new Triplet(Material.STONE, 1));
conversions.put(Material.COBBLESTONE, new Triplet(Material.STONE, 1));
conversions.put(Material.SAND, new Triplet(Material.GLASS, 1));
Expand Down Expand Up @@ -226,12 +227,14 @@ public void reload() {

init(Material.FURNACE);

this.percentagePerLevel = config.getInt("PercentagePerLevel", 20);
this.percentagePerLevel = config.getInt("PercentagePerLevel", 100);
this.hasSound = config.getBoolean("Sound", true);
this.hasParticles = config.getBoolean("Particles", true);
this.worksUnderWater = config.getBoolean("WorksUnderWater", true);
this.toggleable = config.getBoolean("Toggleable", false);

this.description = this.description.replace("%chance", String.valueOf(this.percentagePerLevel));

ConfigurationSection conversionConfig = config.getConfigurationSection("Conversions");
if (conversionConfig == null) return;

Expand All @@ -247,8 +250,6 @@ public void reload() {
} else error = true;
if (error) ChatWriter.logError(this.getKey() + ".yml: Error in conversion value for " + k);
});

this.description = this.description.replace("%chance", String.valueOf(this.percentagePerLevel));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.bukkit.entity.Item;
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.BlockDropItemEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
Expand Down Expand Up @@ -174,7 +175,7 @@ public void effect(BlockDropItemEvent event) {
String.format("Block(%d/%d/%d)", loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
}

@EventHandler
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
public void effect(MTEntityDeathEvent event) {
if (event.getPlayer().equals(event.getEvent().getEntity())) {
return;
Expand Down
133 changes: 133 additions & 0 deletions src/main/java/de/flo56958/minetinker/modifiers/types/Explosive.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
package de.flo56958.minetinker.modifiers.types;

import de.flo56958.minetinker.MineTinker;
import de.flo56958.minetinker.api.events.MTEntityDamageByEntityEvent;
import de.flo56958.minetinker.api.events.MTProjectileHitEvent;
import de.flo56958.minetinker.data.ToolType;
import de.flo56958.minetinker.modifiers.Modifier;
import de.flo56958.minetinker.utils.ConfigurationManager;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Explosive extends Modifier implements Listener {

private static Explosive instance;
private float powerPerLevel;
private boolean setFire;
private boolean blockBreak;

private Explosive() {
super(MineTinker.getPlugin());
customModelData = 10_063;
}

public static Explosive instance() {
synchronized (Explosive.class) {
if (instance == null) {
instance = new Explosive();
}
}

return instance;
}

@Override
public String getKey() {
return "Explosive";
}

@Override
public List<ToolType> getAllowedTools() {
return Arrays.asList(ToolType.AXE, ToolType.BOW, ToolType.CROSSBOW, ToolType.SWORD, ToolType.TRIDENT);
}

@Override
public @NotNull List<Enchantment> getAppliedEnchantments() {
return Arrays.asList(Enchantment.DAMAGE_ALL, Enchantment.ARROW_DAMAGE, Enchantment.IMPALING);
}

@Override
public void reload() {
FileConfiguration config = getConfig();
config.options().copyDefaults(true);

config.addDefault("Allowed", true);
config.addDefault("Color", "%RED%");
config.addDefault("MaxLevel", 5);
config.addDefault("SlotCost", 1);
config.addDefault("PowerPerLevel", 1.0);
config.addDefault("SetFire", false);
config.addDefault("BlockBreak", false);

config.addDefault("EnchantCost", 10);
config.addDefault("Enchantable", false);
config.addDefault("MinimumToolLevelRequirement", 1);

config.addDefault("Recipe.Enabled", true);
config.addDefault("Recipe.Top", "TTT");
config.addDefault("Recipe.Middle", "TTT");
config.addDefault("Recipe.Bottom", "TTT");

Map<String, String> recipeMaterials = new HashMap<>();
recipeMaterials.put("T", Material.TNT.name());

config.addDefault("Recipe.Materials", recipeMaterials);

ConfigurationManager.saveConfig(config);
ConfigurationManager.loadConfig("Modifiers" + File.separator, getFileName());

init(Material.TNT);

this.powerPerLevel = (float) config.getDouble("PowerPerLevel", 1.0);
this.setFire = config.getBoolean("SetFire", false);
this.blockBreak = config.getBoolean("BlockBreak", false);

this.description = this.description.replace("%power", String.valueOf(this.powerPerLevel));
}

@EventHandler(ignoreCancelled = true)
public void onProjectileHit(final MTProjectileHitEvent event) {
Player p = event.getPlayer();
ItemStack tool = event.getTool();
if (!modManager.hasMod(tool, this)) return;

final int level = modManager.getModLevel(tool, this);

if (!p.hasPermission("minetinker.modifiers.explosive.use")) return;

final Location loc = event.getEvent().getEntity().getLocation();

loc.getWorld().createExplosion(loc, this.powerPerLevel * level, false, false, p);
}

@EventHandler(ignoreCancelled = true)
public void onEntityHit(final MTEntityDamageByEntityEvent event) {
Player p = event.getPlayer();
ItemStack tool = event.getTool();
if (event.getEvent().getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION ||
event.getEvent().getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) return;
if (!modManager.hasMod(tool, this)) return;

final int level = modManager.getModLevel(tool, this);

if (!p.hasPermission("minetinker.modifiers.explosive.use")) return;

final Location loc = event.getEntity().getLocation();

loc.getWorld().createExplosion(loc, this.powerPerLevel * level, this.setFire, this.blockBreak, p);
}
}
Loading

0 comments on commit 8397571

Please sign in to comment.