Skip to content

Commit

Permalink
Updated drop and destroy functions to API principles
Browse files Browse the repository at this point in the history
Signed-off-by: Irmo van den Berge <bergerkiller@gmail.com>
  • Loading branch information
bergerkiller committed Aug 13, 2012
1 parent 7b04071 commit cb0940a
Show file tree
Hide file tree
Showing 72 changed files with 287 additions and 481 deletions.
70 changes: 19 additions & 51 deletions src/main/java/org/spout/vanilla/data/drops/Drop.java
Expand Up @@ -27,39 +27,27 @@
package org.spout.vanilla.data.drops;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.Set;

import org.spout.api.inventory.ItemStack;
import org.spout.api.material.Material;

import org.spout.vanilla.data.drops.flag.DropFlag;
import org.spout.vanilla.data.drops.flag.DropFlagSingle;
import org.spout.api.util.flag.Flag;
import org.spout.api.util.flag.FlagContainer;

/**
* Contains one or more Drops
*/
public abstract class Drop {
private final List<DropFlag> flags = new ArrayList<DropFlag>();
public abstract class Drop extends FlagContainer {
private double chance = 1.0;

/**
* Checks if this Drop matches all the flags given
* @param flags to match against
* @return True if matched, False if not
*/
public boolean matchFlags(Set<DropFlagSingle> flags) {
if (flags.contains(DropFlagSingle.NO_DROPS)) {
return false;
}
for (DropFlag flag : this.flags) {
if (!flag.evaluate(flags)) {
return false;
}
}
return true;
@Override
public boolean matchFlags(Set<Flag> flags) {
// if (flags.contains(DropFlagSingle.NO_DROPS)) {
// return false;
// }
return super.matchFlags(flags);
}

/**
Expand All @@ -68,11 +56,11 @@ public boolean matchFlags(Set<DropFlagSingle> flags) {
* @param dropFlags to check against
* @return True if a drop can be performed, False if not
*/
public boolean canDrop(Random random, Set<DropFlagSingle> dropFlags) {
public boolean canDrop(Random random, Set<Flag> flags) {
if (this.hasChance() && random.nextDouble() >= this.getChance()) {
return false;
}
return this.matchFlags(dropFlags);
return this.matchFlags(flags);
}

/**
Expand Down Expand Up @@ -100,54 +88,34 @@ public double getChance() {
return this.chance;
}

/**
* Adds all the flags for these drops<br>
* All flags set for these drops need to be set to make these drops function
*
* @param dropflags to add (can be a DropFlag and DropFlagBundle)
* @return these Drops
*/
public Drop addFlags(DropFlag... dropFlags) {
this.flags.addAll(Arrays.asList(dropFlags));
@Override
public Drop addFlags(Flag... dropFlags) {
super.addFlags(dropFlags);
return this;
}

/**
* Removes all the flags for these drops
*
* @param dropflags to remove (can be a DropFlag and DropFlagBundle)
* @return these Drops
*/
public Drop removeFlags(DropFlag... dropFlags) {
this.flags.removeAll(Arrays.asList(dropFlags));
@Override
public Drop removeFlags(Flag... dropFlags) {
super.removeFlags(dropFlags);
return this;
}

/**
* Gets all the flags set for these drops<br>
* All flags set for these drops need to be set to make these drops function
* @return drop flags
*/
public List<DropFlag> getFlags() {
return this.flags;
}

/**
* Fills a list with the Drops
* @param random to use
* @param flags to evaluate against (contains no inverted flags)
* @param drops list to fill
* @return the inputed list of drops
*/
public abstract List<ItemStack> getDrops(Random random, Set<DropFlagSingle> flags, List<ItemStack> drops);
public abstract List<ItemStack> getDrops(Random random, Set<Flag> flags, List<ItemStack> drops);

/**
* Gets the Drops
* @param random to use
* @param flags to evaluate against (contains no inverted flags)
* @return list of ItemStacks
*/
public final List<ItemStack> getDrops(Random random, Set<DropFlagSingle> flags) {
public final List<ItemStack> getDrops(Random random, Set<Flag> flags) {
return getDrops(random, flags, new ArrayList<ItemStack>());
}

Expand Down
13 changes: 6 additions & 7 deletions src/main/java/org/spout/vanilla/data/drops/Drops.java
Expand Up @@ -34,9 +34,8 @@

import org.spout.api.inventory.ItemStack;
import org.spout.api.material.Material;
import org.spout.api.util.flag.Flag;

import org.spout.vanilla.data.drops.flag.DropFlag;
import org.spout.vanilla.data.drops.flag.DropFlagSingle;
import org.spout.vanilla.data.drops.type.FixedDrop;
import org.spout.vanilla.data.drops.type.RandomDrop;
import org.spout.vanilla.data.drops.type.RandomRangeDrop;
Expand All @@ -48,7 +47,7 @@ public class Drops extends Drop {
private final List<Drop> drops = new ArrayList<Drop>();

@Override
public List<ItemStack> getDrops(Random random, Set<DropFlagSingle> flags, List<ItemStack> drops) {
public List<ItemStack> getDrops(Random random, Set<Flag> flags, List<ItemStack> drops) {
if (this.canDrop(random, flags) && !this.drops.isEmpty()) {
for (Drop drop : this.drops) {
drops = drop.getDrops(random, flags, drops);
Expand Down Expand Up @@ -144,20 +143,20 @@ public Drops setChance(double chance) {
}

@Override
public Drops addFlags(DropFlag... dropFlags) {
public Drops addFlags(Flag... dropFlags) {
super.addFlags(dropFlags);
return this;
}

public SwitchDrops addSwitch(DropFlag... dropFlags) {
public SwitchDrops addSwitch(Flag... dropFlags) {
return this.add(new SwitchDrops()).addFlags(dropFlags);
}

public Drops forFlags(DropFlagSingle... flags) {
public Drops forFlags(Flag... flags) {
return add(new Drops().addFlags(flags));
}

public SelectedDrops addSelect(DropFlagSingle... flags) {
public SelectedDrops addSelect(Flag... flags) {
return add(new SelectedDrops().addFlags(flags));
}

Expand Down
8 changes: 3 additions & 5 deletions src/main/java/org/spout/vanilla/data/drops/SelectedDrops.java
Expand Up @@ -31,13 +31,11 @@
import java.util.Set;

import org.spout.api.inventory.ItemStack;

import org.spout.vanilla.data.drops.flag.DropFlag;
import org.spout.vanilla.data.drops.flag.DropFlagSingle;
import org.spout.api.util.flag.Flag;

public class SelectedDrops extends Drops {
@Override
public List<ItemStack> getDrops(Random random, Set<DropFlagSingle> flags, List<ItemStack> drops) {
public List<ItemStack> getDrops(Random random, Set<Flag> flags, List<ItemStack> drops) {
if (!this.canDrop(random, flags) || this.isEmpty()) {
return drops;
} else {
Expand All @@ -46,7 +44,7 @@ public List<ItemStack> getDrops(Random random, Set<DropFlagSingle> flags, List<I
}

@Override
public SelectedDrops addFlags(DropFlag... dropFlags) {
public SelectedDrops addFlags(Flag... dropFlags) {
super.addFlags(dropFlags);
return this;
}
Expand Down
8 changes: 3 additions & 5 deletions src/main/java/org/spout/vanilla/data/drops/SwitchDrops.java
Expand Up @@ -31,9 +31,7 @@
import java.util.Set;

import org.spout.api.inventory.ItemStack;

import org.spout.vanilla.data.drops.flag.DropFlag;
import org.spout.vanilla.data.drops.flag.DropFlagSingle;
import org.spout.api.util.flag.Flag;

/**
* If all flags match, it drops the first segment, else the other<br>
Expand All @@ -44,7 +42,7 @@ public class SwitchDrops extends Drops {
public final Drops FALSE = new Drops();

@Override
public List<ItemStack> getDrops(Random random, Set<DropFlagSingle> flags, List<ItemStack> drops) {
public List<ItemStack> getDrops(Random random, Set<Flag> flags, List<ItemStack> drops) {
if (this.canDrop(random, flags)) {
drops = this.TRUE.getDrops(random, flags, drops);
} else {
Expand All @@ -54,7 +52,7 @@ public List<ItemStack> getDrops(Random random, Set<DropFlagSingle> flags, List<I
}

@Override
public SwitchDrops addFlags(DropFlag... dropFlags) {
public SwitchDrops addFlags(Flag... dropFlags) {
super.addFlags(dropFlags);
return this;
}
Expand Down
10 changes: 8 additions & 2 deletions src/main/java/org/spout/vanilla/data/drops/flag/BlockFlags.java
Expand Up @@ -26,13 +26,19 @@
*/
package org.spout.vanilla.data.drops.flag;

import org.spout.api.util.flag.FlagSingle;

public class BlockFlags {
/**
* The (growing) block is fully grown
*/
public static final DropFlagSingle FULLY_GROWN = new DropFlagSingle();
public static final FlagSingle FULLY_GROWN = new FlagSingle();
/**
* Whether seeds are dropped
*/
public static final DropFlagSingle SEEDS = new DropFlagSingle();
public static final FlagSingle SEEDS = new FlagSingle();
/**
* The block was destroyed because of an explosion
*/
public static final FlagSingle IGNITED = new FlagSingle();
}

This file was deleted.

40 changes: 0 additions & 40 deletions src/main/java/org/spout/vanilla/data/drops/flag/DropFlagTrue.java

This file was deleted.

Expand Up @@ -26,13 +26,17 @@
*/
package org.spout.vanilla.data.drops.flag;

import java.util.Set;
import org.spout.api.inventory.ItemStack;
import org.spout.api.util.flag.FlagData;
import org.spout.api.util.flag.FlagSingle;

public interface DropFlag {
public class DropFlags {
/**
* Checks if this Flag evaluates one of the flags set
* @param flags to test against
* @return True if successful, False if not
* No drops should be spawned at all
*/
public boolean evaluate(Set<DropFlagSingle> flags);
public static final FlagSingle NO_DROPS = new FlagSingle();
/**
* Contents are passed in
*/
public static final FlagData<ItemStack[]> CONTENTS = new FlagData<ItemStack[]>();
}
Expand Up @@ -26,13 +26,15 @@
*/
package org.spout.vanilla.data.drops.flag;

import org.spout.api.util.flag.FlagSingle;

public class PlayerFlags {
/**
* The player that caused the drops is in Creative mode
*/
public static final DropFlagSingle CREATIVE = new DropFlagSingle();
public static final FlagSingle CREATIVE = new FlagSingle();
/**
* The player that caused the drops is in Survival mode
*/
public static final DropFlagSingle SURVIVAL = new DropFlagSingle();
public static final FlagSingle SURVIVAL = new FlagSingle();
}

0 comments on commit cb0940a

Please sign in to comment.