Skip to content

Commit

Permalink
Added the ability to consume food from entire inventory when using sm…
Browse files Browse the repository at this point in the history
…art-breeding (#523)
  • Loading branch information
OmerBenGera committed Jun 11, 2022
1 parent b5dba86 commit 6e5002a
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 25 deletions.
Expand Up @@ -82,10 +82,10 @@ public final class SettingsHandler {

//Entities settings
public final boolean entitiesStackingEnabled, entitiesParticlesEnabled, linkedEntitiesEnabled, nerfedEntitiesTeleport,
stackDownEnabled, keepFireEnabled, mythicMobsCustomNameEnabled, stackAfterBreed, smartBreeding,
entitiesHideNames, entitiesNamesToggleEnabled, entitiesFastKill, eggLayMultiply, scuteMultiply,
entitiesClearEquipment, spawnCorpses, entitiesOneShotEnabled, storeEntities, superiorSkyblockHook,
multiplyDrops, multiplyExp, spreadDamage, entitiesFillVehicles;
stackDownEnabled, keepFireEnabled, mythicMobsCustomNameEnabled, stackAfterBreed, smartBreedingEnabled,
smartBreedingConsumeEntireInventory, entitiesHideNames, entitiesNamesToggleEnabled, entitiesFastKill,
eggLayMultiply, scuteMultiply, entitiesClearEquipment, spawnCorpses, entitiesOneShotEnabled, storeEntities,
superiorSkyblockHook, multiplyDrops, multiplyExp, spreadDamage, entitiesFillVehicles;
public final long entitiesStackInterval;
public final String entitiesCustomName, entitiesNamesToggleCommand;
public final NameBuilder<StackedEntity> entitiesNameBuilder;
Expand Down Expand Up @@ -261,7 +261,8 @@ public SettingsHandler(WildStackerPlugin plugin) {
keepLowestHealth = Fast2EnumsArray.fromList(cfg.getStringList("entities.keep-lowest-health"),
EntityType.class, SpawnCause.class);
stackAfterBreed = cfg.getBoolean("entities.stack-after-breed", true);
smartBreeding = cfg.getBoolean("entities.smart-breeding", false);
smartBreedingEnabled = cfg.getBoolean("entities.smart-breeding.enabled", false);
smartBreedingConsumeEntireInventory = cfg.getBoolean("entities.smart-breeding.consume-entire-inventory", false);
entitiesHideNames = cfg.getBoolean("entities.hide-names", false);
entitiesNamesToggleEnabled = cfg.getBoolean("entities.names-toggle.enabled", false);
entitiesNamesToggleCommand = cfg.getString("entities.names-toggle.command", "stacker names entity");
Expand Down Expand Up @@ -712,20 +713,8 @@ private void dataConvertor(YamlConfiguration cfg) {
if (cfg.contains("items.pickup-sound.enabled")) {
cfg.set("items.pickup-sound", cfg.getBoolean("items.pickup-sound.enabled"));
}
}

private static boolean canHaveSpawnerOverride() {
String version = System.getProperty("java.version");

if (!version.contains("."))
return true;

try {
int javaVersionNum = Integer.parseInt(version.split("\\.")[0]);
return javaVersionNum < 12;
} catch (NumberFormatException error) {
error.printStackTrace();
return true;
if (cfg.isBoolean("entities.smart-breeding")) {
cfg.set("entities.smart-breeding.enabled", cfg.getBoolean("entities.smart-breeding"));
}
}

Expand Down
Expand Up @@ -469,15 +469,16 @@ public void onEntityFeed(PlayerInteractEntityEvent e) {
return;

StackedEntity stackedEntity = WStackedEntity.of(e.getRightClicked());
int inHandItemsAmount = inHand.getAmount();
int inventoryItemsAmount = plugin.getSettings().smartBreedingConsumeEntireInventory ?
ItemUtils.countItem(e.getPlayer().getInventory(), inHand) : inHand.getAmount();

if (stackedEntity.getStackAmount() > 1) {
int itemsAmountToRemove;

if (plugin.getSettings().smartBreeding) {
if (plugin.getSettings().smartBreedingEnabled) {
int breedableAmount = e.getPlayer().getGameMode() == GameMode.CREATIVE ?
stackedEntity.getStackAmount() :
Math.min(stackedEntity.getStackAmount(), inHandItemsAmount);
Math.min(stackedEntity.getStackAmount(), inventoryItemsAmount);

if (breedableAmount % 2 != 0)
breedableAmount--;
Expand Down Expand Up @@ -524,16 +525,21 @@ public void onEntityFeed(PlayerInteractEntityEvent e) {
e.setCancelled(true);

if (e.getPlayer().getGameMode() != GameMode.CREATIVE) {
int inHandItemsAmount = inHand.getAmount();

ItemStack newItem;

if (itemsAmountToRemove >= inHandItemsAmount) {
newItem = new ItemStack(Material.AIR);
ItemUtils.setItemInHand(e.getPlayer().getInventory(), inHand, newItem);
if (itemsAmountToRemove - inHandItemsAmount > 0)
ItemUtils.removeItem(e.getPlayer().getInventory(), inHand, itemsAmountToRemove - inHandItemsAmount);
} else {
newItem = inHand.clone();
newItem.setAmount(inHandItemsAmount - itemsAmountToRemove);
ItemUtils.setItemInHand(e.getPlayer().getInventory(), inHand, newItem);
}

ItemUtils.setItemInHand(e.getPlayer().getInventory(), inHand, newItem);
}
}
}
Expand Down Expand Up @@ -961,7 +967,7 @@ private class TurtleListener implements Listener {

@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onTurtleEggLay(EntityChangeBlockEvent e) {
if (plugin.getSettings().smartBreeding && e.getEntity() instanceof org.bukkit.entity.Turtle &&
if (plugin.getSettings().smartBreedingEnabled && e.getEntity() instanceof org.bukkit.entity.Turtle &&
e.getTo().name().equals("TURTLE_EGG")) {
StackedEntity stackedEntity = WStackedEntity.of(e.getEntity());
int breedableAmount = !stackedEntity.hasFlag(EntityFlag.BREEDABLE_AMOUNT) ? 0 :
Expand Down
5 changes: 4 additions & 1 deletion src/main/resources/config.yml
Expand Up @@ -373,7 +373,10 @@ entities:
# When smart-breed is enabled, players will be consumed with two items in order to breed a stack.
# No breeding animation will be played, and a new baby stack will be spawned with the correct amount.
# This can prevent massive splits of the stack for breeding, and can help with performance.
smart-breeding: false
smart-breeding:
enabled: false
# When enabled, items for breeding will be consumed from the entire inventory instead of only hand.
consume-entire-inventory: false

# When enabled, entities' names will be shown only if player looks exactly towards them.
hide-names: false
Expand Down

0 comments on commit 6e5002a

Please sign in to comment.