Randomized and shuffled all crafting recipes / furnace recipes.
Randomized breeding results, randomized mob drops occasionally.
This commit is contained in:
parent
75790cb620
commit
856ba687ab
33
MCRandomizer/src/scramble/plugin/FurnaceRecipeStore.java
Normal file
33
MCRandomizer/src/scramble/plugin/FurnaceRecipeStore.java
Normal file
@ -0,0 +1,33 @@
|
||||
package scramble.plugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.inventory.FurnaceRecipe;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.RecipeChoice;
|
||||
import org.bukkit.inventory.ShapelessRecipe;
|
||||
|
||||
public class FurnaceRecipeStore implements RecipeStore{
|
||||
public List<Material> craftingitems = new ArrayList<Material>();
|
||||
public String finalItem;
|
||||
|
||||
@Override
|
||||
public void createRecipe() {
|
||||
FurnaceRecipe rec = new FurnaceRecipe(new NamespacedKey(Template.plugin,"furnace"+System.nanoTime()),new ItemStack(Material.getMaterial(finalItem)),new RecipeChoice.MaterialChoice(craftingitems),
|
||||
Template.r.nextInt(100)+1f,Template.r.nextInt(81)+20);
|
||||
Bukkit.getLogger().info("Added recipe for "+finalItem);
|
||||
Bukkit.getLogger().info("Furnace recipe w/");
|
||||
Bukkit.getLogger().info(" "+craftingitems.toString());
|
||||
Bukkit.addRecipe(rec);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setResultItem(String item) {
|
||||
this.finalItem=item;
|
||||
}
|
||||
|
||||
}
|
@ -24,7 +24,7 @@ public class ShapedRecipeStore implements RecipeStore{
|
||||
|
||||
@Override
|
||||
public void createRecipe() {
|
||||
ShapedRecipe sr = new ShapedRecipe(new ItemStack(Material.getMaterial(finalItem)));
|
||||
ShapedRecipe sr = new ShapedRecipe(new ItemStack(Material.getMaterial(finalItem),Template.randomizeAmount()));
|
||||
sr.shape(shape);
|
||||
for (Character c : ingredientsMap.keySet()) {
|
||||
MaterialChoice m = ingredientsMap.get(c);
|
||||
|
@ -14,7 +14,7 @@ public class ShapelessRecipeStore implements RecipeStore{
|
||||
|
||||
@Override
|
||||
public void createRecipe() {
|
||||
ShapelessRecipe sr = new ShapelessRecipe(new ItemStack(Material.getMaterial(finalItem)));
|
||||
ShapelessRecipe sr = new ShapelessRecipe(new ItemStack(Material.getMaterial(finalItem),Template.randomizeAmount()));
|
||||
for (int i=0;i<craftingitems.size();i++) {
|
||||
sr.addIngredient(Material.getMaterial(craftingitems.get(i)));
|
||||
Bukkit.getLogger().info(" Added ingredient "+craftingitems.get(i));
|
||||
|
@ -16,9 +16,14 @@ import java.util.logging.Logger;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.entity.Blaze;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Monster;
|
||||
import org.bukkit.inventory.BlastingRecipe;
|
||||
import org.bukkit.inventory.CampfireRecipe;
|
||||
import org.bukkit.inventory.FurnaceRecipe;
|
||||
@ -45,7 +50,7 @@ public class Template
|
||||
{
|
||||
public static final String CHAT_PREFIX = ChatColor.AQUA + "Scrambled Recipes";
|
||||
|
||||
private static Template plugin;
|
||||
static Template plugin;
|
||||
|
||||
public static List<String> craftingrecipes;
|
||||
|
||||
@ -53,12 +58,17 @@ public class Template
|
||||
|
||||
public static List<RecipeStore> recipeStorage;
|
||||
public static List<String> shufflelist;
|
||||
public static List<String> archivedshufflelist;
|
||||
public static List<ItemStack> shufflelist2;
|
||||
public static HashMap<EntityType,EntityType> breedingTable = new HashMap<EntityType,EntityType>();
|
||||
public static boolean enableRecipeModifications = false;
|
||||
public static HashMap<EntityType,List<ItemStack>> monsterDropTable = new HashMap<EntityType,List<ItemStack>>();
|
||||
public static HashMap<String,FurnaceRecipeStore> furnaceRecipeTables = new HashMap<String,FurnaceRecipeStore>();
|
||||
|
||||
PluginDescriptionFile pdfFile;
|
||||
|
||||
public static Random r;
|
||||
public static int randomChance=10; //Chance of a random drop.
|
||||
|
||||
public static Template getPlugin()
|
||||
{
|
||||
@ -73,6 +83,21 @@ public class Template
|
||||
ReadIntoList(f2, smeltingrecipes);
|
||||
plugin.getLogger().info("Loaded " + craftingrecipes.size() + " crafting entries, " + smeltingrecipes.size() + " furnace entries.");
|
||||
String shape;
|
||||
for (String s : smeltingrecipes) {
|
||||
String[] split = s.split(",");
|
||||
//FurnaceRecipe rec = new FurnaceRecipe(new NamespacedKey(plugin,"furnace"),new ItemStack(Material.getMaterial(name)));
|
||||
if (furnaceRecipeTables.containsKey(split[1])) {
|
||||
FurnaceRecipeStore frs = furnaceRecipeTables.get(split[1]);
|
||||
frs.craftingitems.add(Material.getMaterial(split[0]));
|
||||
furnaceRecipeTables.put(split[1], frs);
|
||||
} else {
|
||||
FurnaceRecipeStore frs = new FurnaceRecipeStore();
|
||||
furnaceRecipeTables.put(split[1],frs);
|
||||
frs.craftingitems.add(Material.getMaterial(split[0]));
|
||||
recipeStorage.add(frs);
|
||||
shufflelist.add(split[1]);
|
||||
}
|
||||
}
|
||||
for (String s : craftingrecipes)
|
||||
{
|
||||
String temp = s.substring(0, s.indexOf(","));
|
||||
@ -129,7 +154,8 @@ public class Template
|
||||
}
|
||||
|
||||
plugin.getLogger().info("Creating recipes...");
|
||||
while (shufflelist.size() > 0)
|
||||
archivedshufflelist.addAll(shufflelist);
|
||||
while (shufflelist.size()>0)
|
||||
{
|
||||
Integer numb = Integer.valueOf(r.nextInt(recipeStorage.size()));
|
||||
RecipeStore rs = (RecipeStore)recipeStorage.get(numb.intValue());
|
||||
@ -145,9 +171,59 @@ public class Template
|
||||
shufflelist.remove(0);
|
||||
recipeStorage.remove(rs);
|
||||
}
|
||||
plugin.getLogger().info("Shuffling monster drops...");
|
||||
shufflelist.addAll(archivedshufflelist);
|
||||
EntityType[] monsterTypeList = new EntityType[]{
|
||||
EntityType.BLAZE,
|
||||
EntityType.CAVE_SPIDER,
|
||||
EntityType.CREEPER,
|
||||
EntityType.DROWNED,
|
||||
EntityType.ELDER_GUARDIAN,
|
||||
EntityType.ENDERMAN,
|
||||
EntityType.ENDERMITE,
|
||||
EntityType.EVOKER,
|
||||
EntityType.GUARDIAN,
|
||||
EntityType.HUSK,
|
||||
EntityType.ILLUSIONER,
|
||||
EntityType.PIG_ZOMBIE,
|
||||
EntityType.PILLAGER,
|
||||
EntityType.RAVAGER,
|
||||
EntityType.SILVERFISH,
|
||||
EntityType.SKELETON,
|
||||
EntityType.SPIDER,
|
||||
EntityType.STRAY,
|
||||
EntityType.VEX,
|
||||
EntityType.VINDICATOR,
|
||||
EntityType.WITCH,
|
||||
EntityType.WITHER,
|
||||
EntityType.ZOMBIE,
|
||||
EntityType.ZOMBIE_VILLAGER,
|
||||
};
|
||||
while (shufflelist.size()>0) {
|
||||
EntityType pick = monsterTypeList[r.nextInt(monsterTypeList.length)];
|
||||
ItemStack it = new ItemStack(Material.getMaterial(shufflelist.get(0)));
|
||||
if (monsterDropTable.containsKey(pick)) {
|
||||
List<ItemStack> addTable = monsterDropTable.get(pick);
|
||||
addTable.add(it);
|
||||
monsterDropTable.put(pick, addTable);
|
||||
} else {
|
||||
List<ItemStack> addTable = new ArrayList<ItemStack>();
|
||||
addTable.add(it);
|
||||
monsterDropTable.put(pick, addTable);
|
||||
}
|
||||
shufflelist.remove(0);
|
||||
}
|
||||
plugin.getLogger().info("Done! All recipes shuffled!");
|
||||
}
|
||||
}
|
||||
|
||||
public static int randomizeAmount() {
|
||||
int counter=1;
|
||||
while (Template.r.nextInt(4)==0) {
|
||||
counter++;
|
||||
}
|
||||
return counter;
|
||||
}
|
||||
|
||||
private static void ReadIntoList(File f, List<String> list)
|
||||
{
|
||||
@ -182,12 +258,48 @@ public class Template
|
||||
Bukkit.addRecipe(sr);
|
||||
}
|
||||
|
||||
public void setBreedingTable() {
|
||||
List<EntityType> canBreed = new ArrayList<EntityType>();
|
||||
canBreed.addAll(Arrays.asList(new EntityType[]{
|
||||
EntityType.HORSE,
|
||||
EntityType.VILLAGER,
|
||||
EntityType.CAT,
|
||||
EntityType.CHICKEN,
|
||||
EntityType.COW,
|
||||
EntityType.DONKEY,
|
||||
EntityType.FOX,
|
||||
EntityType.LLAMA,
|
||||
EntityType.MULE,
|
||||
EntityType.MUSHROOM_COW,
|
||||
EntityType.OCELOT,
|
||||
EntityType.PANDA,
|
||||
EntityType.PARROT,
|
||||
EntityType.PIG,
|
||||
EntityType.POLAR_BEAR,
|
||||
EntityType.RABBIT,
|
||||
EntityType.SHEEP,
|
||||
EntityType.SKELETON_HORSE,
|
||||
EntityType.TURTLE,
|
||||
EntityType.VILLAGER,
|
||||
EntityType.WANDERING_TRADER,
|
||||
EntityType.WOLF,
|
||||
EntityType.ZOMBIE_HORSE
|
||||
}));
|
||||
while (canBreed.size()>1) {
|
||||
breedingTable.put(canBreed.remove(0), canBreed.remove(r.nextInt(canBreed.size())));
|
||||
}
|
||||
if (canBreed.size()>0) {
|
||||
breedingTable.put(canBreed.get(0), canBreed.get(0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void onEnable()
|
||||
{
|
||||
craftingrecipes = new ArrayList();
|
||||
smeltingrecipes = new ArrayList();
|
||||
shufflelist = new ArrayList();
|
||||
archivedshufflelist = new ArrayList();
|
||||
shufflelist2 = new ArrayList();
|
||||
recipeStorage = new ArrayList();
|
||||
plugin = (Template)getPlugin(Template.class);
|
||||
@ -268,6 +380,7 @@ public class Template
|
||||
}
|
||||
ReadRecipeData();
|
||||
AddInDefaultRecipes();
|
||||
setBreedingTable();
|
||||
|
||||
for (String s : recipeTypeMap.keySet()) {
|
||||
Bukkit.getLogger().info(" Randomized " + recipeTypeMap.get(s) + " " + s + " recipes.");
|
||||
|
@ -4,14 +4,22 @@ import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Ageable;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Monster;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.entity.EntityBreedEvent;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.inventory.CraftItemEvent;
|
||||
import org.bukkit.event.inventory.FurnaceSmeltEvent;
|
||||
import org.bukkit.event.inventory.PrepareItemCraftEvent;
|
||||
@ -20,24 +28,59 @@ import org.bukkit.inventory.Recipe;
|
||||
import org.bukkit.inventory.RecipeChoice;
|
||||
import org.bukkit.inventory.ShapedRecipe;
|
||||
import org.bukkit.inventory.ShapelessRecipe;
|
||||
import org.bukkit.metadata.FixedMetadataValue;
|
||||
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import scramble.plugin.Template;
|
||||
|
||||
public class ExampleListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onEntityBreed(EntityBreedEvent ev) {
|
||||
//Bukkit.getLogger().info("Breeder is "+ev.getBreeder());
|
||||
if (ev.getBreeder()!=null &&
|
||||
ev.getBreeder() instanceof Player) {
|
||||
ev.getEntity().remove();
|
||||
if (ev.getFather()!=null &&
|
||||
!ev.getFather().hasMetadata("hasBred") || Math.abs(ev.getFather().getWorld().getFullTime()-ev.getFather().getMetadata("hasBred").get(0).asLong())>1) {
|
||||
SpawnRandomizedEntity(ev.getFather());
|
||||
} else {
|
||||
if (!ev.getMother().hasMetadata("hasBred") || Math.abs(ev.getMother().getWorld().getFullTime()-ev.getMother().getMetadata("hasBred").get(0).asLong())>1) {
|
||||
SpawnRandomizedEntity(ev.getMother());
|
||||
}
|
||||
}
|
||||
if (ev.getFather()!=null) {
|
||||
ev.getFather().setMetadata("hasBred", new FixedMetadataValue(Template.getPlugin(),ev.getFather().getWorld().getFullTime()));
|
||||
Bukkit.getLogger().info("Set father hasBred to "+ev.getFather().getMetadata("hasBred").get(0).asLong());
|
||||
}
|
||||
if (ev.getMother()!=null) {
|
||||
ev.getMother().setMetadata("hasBred", new FixedMetadataValue(Template.getPlugin(),ev.getMother().getWorld().getFullTime()));
|
||||
Bukkit.getLogger().info("Set mother hasBred to "+ev.getFather().getMetadata("hasBred").get(0).asLong());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SpawnRandomizedEntity(LivingEntity ent) {
|
||||
Entity baby = ent.getWorld().spawnEntity(ent.getLocation(), Template.breedingTable.get(ent.getType()));
|
||||
if (baby instanceof Ageable) {
|
||||
Ageable baby_ent = (Ageable)baby;
|
||||
baby_ent.setBaby();
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDeath(EntityDeathEvent ev) {
|
||||
if (Template.monsterDropTable.containsKey(ev.getEntityType())) {
|
||||
if (Template.r.nextInt(100)<Template.randomChance) {
|
||||
List<ItemStack> itemList = Template.monsterDropTable.get(ev.getEntityType());
|
||||
ev.getDrops().add(itemList.get(Template.r.nextInt(itemList.size())));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBreak(BlockBreakEvent event) {
|
||||
/*
|
||||
* We get the player and make a variable to make it easier to access it when we
|
||||
* need to use it.
|
||||
*/
|
||||
//Player p = event.getPlayer();
|
||||
/*
|
||||
* Here we cancel the event. This means that they can't break the block. In this
|
||||
* case, we send a message to the player saying they don't have the required
|
||||
* permission.
|
||||
*/
|
||||
/*if (!p.hasPermission("template.breakblocks")) {
|
||||
p.sendMessage(Template.CHAT_PREFIX + ChatColor.WHITE + " > " + ChatColor.RED + "You do not have permission to break blocks!");
|
||||
event.setCancelled(true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user