Randomized and shuffled all crafting recipes / furnace recipes.

Randomized breeding results, randomized mob drops occasionally.
master
sigonasr2 6 years ago
parent 75790cb620
commit 856ba687ab
  1. 33
      MCRandomizer/src/scramble/plugin/FurnaceRecipeStore.java
  2. 2
      MCRandomizer/src/scramble/plugin/ShapedRecipeStore.java
  3. 2
      MCRandomizer/src/scramble/plugin/ShapelessRecipeStore.java
  4. 117
      MCRandomizer/src/scramble/plugin/Template.java
  5. 61
      MCRandomizer/src/scramble/plugin/listener/ExampleListener.java

@ -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…
Cancel
Save