mirror of
https://github.com/Xiao-MoMi/Custom-Crops.git
synced 2025-12-28 03:19:15 +00:00
[API] Improved API
This commit is contained in:
@@ -29,5 +29,4 @@ public interface EventItem {
|
||||
* @param state state
|
||||
*/
|
||||
void trigger(ActionTrigger actionTrigger, State state);
|
||||
|
||||
}
|
||||
|
||||
@@ -101,6 +101,14 @@ public interface ItemManager extends Reloadable {
|
||||
*/
|
||||
CRotation removeAnythingAt(Location location);
|
||||
|
||||
/**
|
||||
* Get the rotation of the removed entity
|
||||
*
|
||||
* @param location location
|
||||
* @return rotation
|
||||
*/
|
||||
CRotation getRotation(Location location);
|
||||
|
||||
/**
|
||||
* Get watering can config by ID
|
||||
*
|
||||
|
||||
@@ -323,35 +323,40 @@ public interface WorldManager extends Reloadable {
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
void removeSprinklerAt(@NotNull SimpleLocation location);
|
||||
@Nullable
|
||||
WorldSprinkler removeSprinklerAt(@NotNull SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove pot data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
void removePotAt(@NotNull SimpleLocation location);
|
||||
@Nullable
|
||||
WorldPot removePotAt(@NotNull SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove crop data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
void removeCropAt(@NotNull SimpleLocation location);
|
||||
@Nullable
|
||||
WorldCrop removeCropAt(@NotNull SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove greenhouse glass data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
void removeGlassAt(@NotNull SimpleLocation location);
|
||||
@Nullable
|
||||
WorldGlass removeGlassAt(@NotNull SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove scarecrow data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
void removeScarecrowAt(@NotNull SimpleLocation location);
|
||||
@Nullable
|
||||
WorldScarecrow removeScarecrowAt(@NotNull SimpleLocation location);
|
||||
|
||||
/**
|
||||
* If a certain type of item reached the limitation
|
||||
@@ -391,6 +396,12 @@ public interface WorldManager extends Reloadable {
|
||||
*/
|
||||
void saveRegionToFile(CustomCropsRegion region);
|
||||
|
||||
/**
|
||||
* Remove any block data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return block data
|
||||
*/
|
||||
CustomCropsBlock removeAnythingAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,5 +21,10 @@ import net.momirealms.customcrops.api.mechanic.requirement.State;
|
||||
|
||||
public interface Action {
|
||||
|
||||
void trigger(State condition);
|
||||
/**
|
||||
* Trigger the action
|
||||
*
|
||||
* @param state the state of the player
|
||||
*/
|
||||
void trigger(State state);
|
||||
}
|
||||
|
||||
@@ -19,11 +19,31 @@ package net.momirealms.customcrops.api.mechanic.action;
|
||||
|
||||
public abstract class ActionExpansion {
|
||||
|
||||
/**
|
||||
* Get the version number
|
||||
*
|
||||
* @return version
|
||||
*/
|
||||
public abstract String getVersion();
|
||||
|
||||
/**
|
||||
* Get the author
|
||||
*
|
||||
* @return author
|
||||
*/
|
||||
public abstract String getAuthor();
|
||||
|
||||
/**
|
||||
* Get the type of the action
|
||||
*
|
||||
* @return the type of the action
|
||||
*/
|
||||
public abstract String getActionType();
|
||||
|
||||
/**
|
||||
* Get the action factory
|
||||
*
|
||||
* @return the action factory
|
||||
*/
|
||||
public abstract ActionFactory getActionFactory();
|
||||
}
|
||||
|
||||
@@ -19,5 +19,12 @@ package net.momirealms.customcrops.api.mechanic.action;
|
||||
|
||||
public interface ActionFactory {
|
||||
|
||||
/**
|
||||
* Build an action by args and chance
|
||||
*
|
||||
* @param args args
|
||||
* @param chance chance (0-1)
|
||||
* @return action
|
||||
*/
|
||||
Action build(Object args, double chance);
|
||||
}
|
||||
|
||||
@@ -21,5 +21,12 @@ import net.momirealms.customcrops.api.mechanic.world.CustomCropsBlock;
|
||||
|
||||
public interface Condition {
|
||||
|
||||
/**
|
||||
* If the block meets the conditions
|
||||
*
|
||||
* @param block block
|
||||
* @param offline offline tick
|
||||
* @return met or not
|
||||
*/
|
||||
boolean isConditionMet(CustomCropsBlock block, boolean offline);
|
||||
}
|
||||
|
||||
@@ -19,11 +19,31 @@ package net.momirealms.customcrops.api.mechanic.condition;
|
||||
|
||||
public abstract class ConditionExpansion {
|
||||
|
||||
/**
|
||||
* Get the version number
|
||||
*
|
||||
* @return version
|
||||
*/
|
||||
public abstract String getVersion();
|
||||
|
||||
/**
|
||||
* Get the author
|
||||
*
|
||||
* @return author
|
||||
*/
|
||||
public abstract String getAuthor();
|
||||
|
||||
/**
|
||||
* Get the type of the condition
|
||||
*
|
||||
* @return the type of the condition
|
||||
*/
|
||||
public abstract String getConditionType();
|
||||
|
||||
/**
|
||||
* Get the condition factory
|
||||
*
|
||||
* @return the condition factory
|
||||
*/
|
||||
public abstract ConditionFactory getConditionFactory();
|
||||
}
|
||||
|
||||
@@ -19,5 +19,11 @@ package net.momirealms.customcrops.api.mechanic.condition;
|
||||
|
||||
public interface ConditionFactory {
|
||||
|
||||
/**
|
||||
* Build a condition with the args
|
||||
*
|
||||
* @param args args
|
||||
* @return condition
|
||||
*/
|
||||
Condition build(Object args);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,11 @@ public class Conditions {
|
||||
this.conditions = conditions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of conditions
|
||||
*
|
||||
* @return conditions
|
||||
*/
|
||||
public Condition[] getConditions() {
|
||||
return conditions;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.momirealms.customcrops.api.mechanic.condition;
|
||||
|
||||
import net.momirealms.customcrops.api.mechanic.item.ItemCarrier;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class DeathConditions extends Conditions {
|
||||
|
||||
@@ -15,14 +16,30 @@ public class DeathConditions extends Conditions {
|
||||
this.deathDelay = deathDelay;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the item to replace, null if the crop would be removed
|
||||
*
|
||||
* @return the item to replace
|
||||
*/
|
||||
@Nullable
|
||||
public String getDeathItem() {
|
||||
return deathItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the item carrier of the item to replace
|
||||
*
|
||||
* @return item carrier
|
||||
*/
|
||||
public ItemCarrier getItemCarrier() {
|
||||
return itemCarrier;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the delay in ticks
|
||||
*
|
||||
* @return delay
|
||||
*/
|
||||
public int getDeathDelay() {
|
||||
return deathDelay;
|
||||
}
|
||||
|
||||
@@ -52,14 +52,29 @@ public class BoneMeal {
|
||||
this.dispenserAllowed = dispenserAllowed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ID of the bone meal item
|
||||
*
|
||||
* @return bonemeal item id
|
||||
*/
|
||||
public String getItem() {
|
||||
return item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the returned item's ID
|
||||
*
|
||||
* @return returned item ID
|
||||
*/
|
||||
public String getReturned() {
|
||||
return returned;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the points to gain in one try
|
||||
*
|
||||
* @return points
|
||||
*/
|
||||
public int getPoint() {
|
||||
for (Pair<Double, Integer> pair : pointGainList) {
|
||||
if (Math.random() < pair.left()) {
|
||||
@@ -69,18 +84,38 @@ public class BoneMeal {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger the actions of using the bone meal
|
||||
*
|
||||
* @param state player state
|
||||
*/
|
||||
public void trigger(State state) {
|
||||
ActionManager.triggerActions(state, actions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the amount to consume
|
||||
*
|
||||
* @return amount to consume
|
||||
*/
|
||||
public int getUsedAmount() {
|
||||
return usedAmount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the amount of the returned items
|
||||
*
|
||||
* @return amount of the returned items
|
||||
*/
|
||||
public int getReturnedAmount() {
|
||||
return returnedAmount;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the bone meal can be used with a dispenser
|
||||
*
|
||||
* @return can be used or not
|
||||
*/
|
||||
public boolean isDispenserAllowed() {
|
||||
return dispenserAllowed;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import net.momirealms.customcrops.api.mechanic.condition.Conditions;
|
||||
import net.momirealms.customcrops.api.mechanic.condition.DeathConditions;
|
||||
import net.momirealms.customcrops.api.mechanic.requirement.Requirement;
|
||||
import net.momirealms.customcrops.api.mechanic.requirement.State;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -30,50 +31,169 @@ import java.util.HashSet;
|
||||
|
||||
public interface Crop extends KeyItem {
|
||||
|
||||
/**
|
||||
* Get the id of the seed
|
||||
*
|
||||
* @return seed ID
|
||||
*/
|
||||
String getSeedItemID();
|
||||
|
||||
/**
|
||||
* Get the max points to grow
|
||||
*
|
||||
* @return max points
|
||||
*/
|
||||
int getMaxPoints();
|
||||
|
||||
/**
|
||||
* Get the requirements for planting
|
||||
*
|
||||
* @return requirements for planting
|
||||
*/
|
||||
Requirement[] getPlantRequirements();
|
||||
|
||||
/**
|
||||
* Get the requirements for breaking
|
||||
*
|
||||
* @return requirements for breaking
|
||||
*/
|
||||
Requirement[] getBreakRequirements();
|
||||
|
||||
/**
|
||||
* Get the requirements for interactions
|
||||
*
|
||||
* @return requirements for interactions
|
||||
*/
|
||||
Requirement[] getInteractRequirements();
|
||||
|
||||
/**
|
||||
* Get the conditions to grow
|
||||
*
|
||||
* @return conditions to grow
|
||||
*/
|
||||
Conditions getGrowConditions();
|
||||
|
||||
/**
|
||||
* Get the conditions of death
|
||||
*
|
||||
* @return conditions of death
|
||||
*/
|
||||
DeathConditions[] getDeathConditions();
|
||||
|
||||
/**
|
||||
* Get the available bone meals
|
||||
*
|
||||
* @return bone meals
|
||||
*/
|
||||
BoneMeal[] getBoneMeals();
|
||||
|
||||
/**
|
||||
* If the crop has rotations
|
||||
*/
|
||||
boolean hasRotation();
|
||||
|
||||
/**
|
||||
* Trigger actions
|
||||
*
|
||||
* @param trigger action trigger
|
||||
* @param state player state
|
||||
*/
|
||||
void trigger(ActionTrigger trigger, State state);
|
||||
|
||||
/**
|
||||
* Get the stage config by point
|
||||
*
|
||||
* @param point point
|
||||
* @return stage config
|
||||
*/
|
||||
@Nullable
|
||||
Stage getStageByPoint(int point);
|
||||
|
||||
/**
|
||||
* Get the stage item ID by point
|
||||
* This is always NotNull if the point is no lower than 0
|
||||
*
|
||||
* @param point point
|
||||
* @return the stage item ID
|
||||
*/
|
||||
@NotNull
|
||||
String getStageItemByPoint(int point);
|
||||
|
||||
Stage getStageByItemID(String itemID);
|
||||
/**
|
||||
* Get stage config by stage item ID
|
||||
*
|
||||
* @param id item id
|
||||
* @return stage config
|
||||
*/
|
||||
@Nullable
|
||||
Stage getStageByItemID(String id);
|
||||
|
||||
/**
|
||||
* Get all the stages
|
||||
*
|
||||
* @return stages
|
||||
*/
|
||||
Collection<? extends Stage> getStages();
|
||||
|
||||
/**
|
||||
* Get the pots to plant
|
||||
*
|
||||
* @return whitelisted pots
|
||||
*/
|
||||
HashSet<String> getPotWhitelist();
|
||||
|
||||
/**
|
||||
* Get the carrier of this crop
|
||||
*
|
||||
* @return carrier of this crop
|
||||
*/
|
||||
ItemCarrier getItemCarrier();
|
||||
|
||||
interface Stage {
|
||||
|
||||
/**
|
||||
* Get the offset of the hologram
|
||||
*
|
||||
* @return offset
|
||||
*/
|
||||
double getHologramOffset();
|
||||
|
||||
@Nullable String getStageID();
|
||||
/**
|
||||
* Get the stage item ID
|
||||
* This can be null if this point doesn't have any state change
|
||||
*
|
||||
* @return stage item ID
|
||||
*/
|
||||
@Nullable
|
||||
String getStageID();
|
||||
|
||||
/**
|
||||
* Get the point of this stage
|
||||
*
|
||||
* @return point
|
||||
*/
|
||||
int getPoint();
|
||||
|
||||
/**
|
||||
* Trigger actions
|
||||
*
|
||||
* @param trigger action trigger
|
||||
* @param state player state
|
||||
*/
|
||||
void trigger(ActionTrigger trigger, State state);
|
||||
|
||||
/**
|
||||
* Get the requirements for interactions
|
||||
*
|
||||
* @return requirements for interactions
|
||||
*/
|
||||
Requirement[] getInteractRequirements();
|
||||
|
||||
/**
|
||||
* Get the requirements for breaking
|
||||
*
|
||||
* @return requirements for breaking
|
||||
*/
|
||||
Requirement[] getBreakRequirements();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,19 +23,58 @@ import net.momirealms.customcrops.api.mechanic.requirement.Requirement;
|
||||
import java.util.HashSet;
|
||||
|
||||
public interface Fertilizer extends EventItem {
|
||||
|
||||
/**
|
||||
* Get the key
|
||||
*
|
||||
* @return key
|
||||
*/
|
||||
String getKey();
|
||||
|
||||
/**
|
||||
* Get the item ID
|
||||
*
|
||||
* @return item ID
|
||||
*/
|
||||
String getItemID();
|
||||
|
||||
/**
|
||||
* Get the max times of usage
|
||||
*
|
||||
* @return the max times of usage
|
||||
*/
|
||||
int getTimes();
|
||||
|
||||
/**
|
||||
* Get the type of the fertilizer
|
||||
*
|
||||
* @return the type of the fertilizer
|
||||
*/
|
||||
FertilizerType getFertilizerType();
|
||||
|
||||
/**
|
||||
* Get the pot whitelist
|
||||
*
|
||||
* @return pot whitelist
|
||||
*/
|
||||
HashSet<String> getPotWhitelist();
|
||||
|
||||
/**
|
||||
* If the fertilizer can only be used before planting
|
||||
*/
|
||||
boolean isBeforePlant();
|
||||
|
||||
/**
|
||||
* Get the image of the fertilizer
|
||||
*
|
||||
* @return icon
|
||||
*/
|
||||
String getIcon();
|
||||
|
||||
/**
|
||||
* Get the requirements for this fertilizer
|
||||
*
|
||||
* @return requirements
|
||||
*/
|
||||
Requirement[] getRequirements();
|
||||
}
|
||||
|
||||
@@ -28,34 +28,110 @@ import java.util.HashSet;
|
||||
|
||||
public interface Pot extends KeyItem {
|
||||
|
||||
/**
|
||||
* Get max water storage
|
||||
*
|
||||
* @return water storage
|
||||
*/
|
||||
int getStorage();
|
||||
|
||||
/**
|
||||
* Get the key
|
||||
*
|
||||
* @return key
|
||||
*/
|
||||
String getKey();
|
||||
|
||||
/**
|
||||
* Get the blocks that belong to this pot
|
||||
*
|
||||
* @return blocks
|
||||
*/
|
||||
HashSet<String> getPotBlocks();
|
||||
|
||||
/**
|
||||
* Get the methods to fill this pot
|
||||
*
|
||||
* @return methods
|
||||
*/
|
||||
PassiveFillMethod[] getPassiveFillMethods();
|
||||
|
||||
/**
|
||||
* Get the dry state
|
||||
*
|
||||
* @return dry state item ID
|
||||
*/
|
||||
String getDryItem();
|
||||
|
||||
/**
|
||||
* Get the wet state
|
||||
*
|
||||
* @return wet state item ID
|
||||
*/
|
||||
String getWetItem();
|
||||
|
||||
/**
|
||||
* Get the requirements for placement
|
||||
*
|
||||
* @return requirements for placement
|
||||
*/
|
||||
Requirement[] getPlaceRequirements();
|
||||
|
||||
/**
|
||||
* Get the requirements for breaking
|
||||
*
|
||||
* @return requirements for breaking
|
||||
*/
|
||||
Requirement[] getBreakRequirements();
|
||||
|
||||
/**
|
||||
* Get the requirements for using
|
||||
*
|
||||
* @return requirements for using
|
||||
*/
|
||||
Requirement[] getUseRequirements();
|
||||
|
||||
/**
|
||||
* Trigger actions
|
||||
*
|
||||
* @param trigger action trigger
|
||||
* @param state player state
|
||||
*/
|
||||
void trigger(ActionTrigger trigger, State state);
|
||||
|
||||
/**
|
||||
* Get the water bar images
|
||||
*
|
||||
* @return water bar images
|
||||
*/
|
||||
WaterBar getWaterBar();
|
||||
|
||||
/**
|
||||
* Does the pot absorb raindrop
|
||||
*/
|
||||
boolean isRainDropAccepted();
|
||||
|
||||
/**
|
||||
* Does nearby water make the pot wet
|
||||
*/
|
||||
boolean isNearbyWaterAccepted();
|
||||
|
||||
/**
|
||||
* Get the block ID by water and fertilizers
|
||||
*
|
||||
* @param water water
|
||||
* @param type the type of the fertilizer
|
||||
* @return block item ID
|
||||
*/
|
||||
String getBlockState(boolean water, FertilizerType type);
|
||||
|
||||
/**
|
||||
* Is the pot a vanilla blocks
|
||||
*/
|
||||
boolean isVanillaBlock();
|
||||
|
||||
/**
|
||||
* Is the id a wet pot
|
||||
*/
|
||||
boolean isWetPot(String id);
|
||||
}
|
||||
|
||||
@@ -21,5 +21,10 @@ import net.momirealms.customcrops.api.common.item.KeyItem;
|
||||
|
||||
public interface Scarecrow extends KeyItem {
|
||||
|
||||
/**
|
||||
* Get the item ID
|
||||
*
|
||||
* @return item ID
|
||||
*/
|
||||
String getItemID();
|
||||
}
|
||||
|
||||
@@ -28,33 +28,107 @@ import java.util.HashSet;
|
||||
|
||||
public interface Sprinkler extends KeyItem {
|
||||
|
||||
/**
|
||||
* Get the 2D item ID
|
||||
*
|
||||
* @return 2D item ID
|
||||
*/
|
||||
String get2DItemID();
|
||||
|
||||
/**
|
||||
* Get the 3D item ID
|
||||
*
|
||||
* @return 3D item ID
|
||||
*/
|
||||
String get3DItemID();
|
||||
|
||||
/**
|
||||
* Get the 3D item ID (With water inside)
|
||||
*
|
||||
* @return 3D item ID (With water inside)
|
||||
*/
|
||||
String get3DItemWithWater();
|
||||
|
||||
/**
|
||||
* Get the max storage of water
|
||||
*
|
||||
* @return max storage of water
|
||||
*/
|
||||
int getStorage();
|
||||
|
||||
/**
|
||||
* Get the working range
|
||||
*
|
||||
* @return working range
|
||||
*/
|
||||
int getRange();
|
||||
|
||||
/**
|
||||
* Is water infinite
|
||||
*/
|
||||
boolean isInfinite();
|
||||
|
||||
/**
|
||||
* Get the amount of water to add to the pot during sprinkling
|
||||
*
|
||||
* @return amount of water to add to the pot during sprinkling
|
||||
*/
|
||||
int getWater();
|
||||
|
||||
/**
|
||||
* Get the pots that receive the water
|
||||
*
|
||||
* @return whitelisted pots
|
||||
*/
|
||||
HashSet<String> getPotWhitelist();
|
||||
|
||||
/**
|
||||
* Get the carrier of the pot
|
||||
*
|
||||
* @return carrier of the pot
|
||||
*/
|
||||
ItemCarrier getItemCarrier();
|
||||
|
||||
/**
|
||||
* Get methods to fill the sprinkler
|
||||
*
|
||||
* @return methods to fill the sprinkler
|
||||
*/
|
||||
PassiveFillMethod[] getPassiveFillMethods();
|
||||
|
||||
/**
|
||||
* Get the requirements for placement
|
||||
*
|
||||
* @return requirements for placement
|
||||
*/
|
||||
Requirement[] getPlaceRequirements();
|
||||
|
||||
/**
|
||||
* Get the requirements for breaking
|
||||
*
|
||||
* @return requirements for breaking
|
||||
*/
|
||||
Requirement[] getBreakRequirements();
|
||||
|
||||
/**
|
||||
* Get the requirements for using
|
||||
*
|
||||
* @return requirements for using
|
||||
*/
|
||||
Requirement[] getUseRequirements();
|
||||
|
||||
/**
|
||||
* Trigger actions
|
||||
*
|
||||
* @param trigger action trigger
|
||||
* @param state player state
|
||||
*/
|
||||
void trigger(ActionTrigger trigger, State state);
|
||||
|
||||
/**
|
||||
* Get the water bar images
|
||||
*
|
||||
* @return water bar images
|
||||
*/
|
||||
WaterBar getWaterBar();
|
||||
}
|
||||
|
||||
@@ -32,33 +32,107 @@ import java.util.Map;
|
||||
|
||||
public interface WateringCan extends KeyItem {
|
||||
|
||||
/**
|
||||
* Get the ID of the item
|
||||
*
|
||||
* @return item ID
|
||||
*/
|
||||
String getItemID();
|
||||
|
||||
/**
|
||||
* Get the width of the effective range
|
||||
*
|
||||
* @return width
|
||||
*/
|
||||
int getWidth();
|
||||
|
||||
/**
|
||||
* Get the length of the effective range
|
||||
*
|
||||
* @return length
|
||||
*/
|
||||
int getLength();
|
||||
|
||||
/**
|
||||
* Get the storage of water
|
||||
*
|
||||
* @return storage of water
|
||||
*/
|
||||
int getStorage();
|
||||
|
||||
/**
|
||||
* Get the amount of water to add in one try
|
||||
*/
|
||||
int getWater();
|
||||
|
||||
/**
|
||||
* If the watering can has dynamic lore
|
||||
*/
|
||||
boolean hasDynamicLore();
|
||||
|
||||
/**
|
||||
* Update a watering can's data
|
||||
*
|
||||
* @param player player
|
||||
* @param itemStack watering can item
|
||||
* @param water the amount of water
|
||||
* @param args the placeholders
|
||||
*/
|
||||
void updateItem(Player player, ItemStack itemStack, int water, Map<String, String> args);
|
||||
|
||||
/**
|
||||
* Get the current water
|
||||
*
|
||||
* @param itemStack watering can item
|
||||
* @return current water
|
||||
*/
|
||||
int getCurrentWater(ItemStack itemStack);
|
||||
|
||||
/**
|
||||
* Get the pots that receive water from this watering can
|
||||
*
|
||||
* @return whitelisted pots
|
||||
*/
|
||||
HashSet<String> getPotWhitelist();
|
||||
|
||||
/**
|
||||
* Get the sprinklers that receive water from this watering can
|
||||
*
|
||||
* @return whitelisted sprinklers
|
||||
*/
|
||||
HashSet<String> getSprinklerWhitelist();
|
||||
|
||||
/**
|
||||
* Get the dynamic lores
|
||||
*
|
||||
* @return dynamic lores
|
||||
*/
|
||||
List<String> getLore();
|
||||
|
||||
/**
|
||||
* Get the water bar images
|
||||
*
|
||||
* @return water bar images
|
||||
*/
|
||||
@Nullable WaterBar getWaterBar();
|
||||
|
||||
/**
|
||||
* Get the requirements for using this watering can
|
||||
*
|
||||
* @return requirements
|
||||
*/
|
||||
Requirement[] getRequirements();
|
||||
|
||||
/**
|
||||
* If the water is infinite
|
||||
*/
|
||||
boolean isInfinite();
|
||||
|
||||
/**
|
||||
* Trigger actions
|
||||
*
|
||||
* @param trigger action trigger
|
||||
* @param state player state
|
||||
*/
|
||||
void trigger(ActionTrigger trigger, State state);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,18 @@ package net.momirealms.customcrops.api.mechanic.item.fertilizer;
|
||||
import net.momirealms.customcrops.api.mechanic.item.Fertilizer;
|
||||
|
||||
public interface QualityCrop extends Fertilizer {
|
||||
|
||||
/**
|
||||
* Get the chance of taking effect
|
||||
*
|
||||
* @return chance
|
||||
*/
|
||||
double getChance();
|
||||
|
||||
/**
|
||||
* Get the modified quality ratio
|
||||
*
|
||||
* @return the modified quality ratio
|
||||
*/
|
||||
double[] getRatio();
|
||||
}
|
||||
|
||||
@@ -21,5 +21,10 @@ import net.momirealms.customcrops.api.mechanic.item.Fertilizer;
|
||||
|
||||
public interface SoilRetain extends Fertilizer {
|
||||
|
||||
/**
|
||||
* Get the chance of taking effect
|
||||
*
|
||||
* @return chance
|
||||
*/
|
||||
double getChance();
|
||||
}
|
||||
|
||||
@@ -21,5 +21,10 @@ import net.momirealms.customcrops.api.mechanic.item.Fertilizer;
|
||||
|
||||
public interface SpeedGrow extends Fertilizer {
|
||||
|
||||
/**
|
||||
* Get the extra points to gain
|
||||
*
|
||||
* @return points
|
||||
*/
|
||||
int getPointBonus();
|
||||
}
|
||||
|
||||
@@ -21,5 +21,10 @@ import net.momirealms.customcrops.api.mechanic.item.Fertilizer;
|
||||
|
||||
public interface Variation extends Fertilizer {
|
||||
|
||||
/**
|
||||
* Get the bonus of variation chance
|
||||
*
|
||||
* @return chance bonus
|
||||
*/
|
||||
double getChanceBonus();
|
||||
}
|
||||
|
||||
@@ -21,5 +21,10 @@ import net.momirealms.customcrops.api.mechanic.item.Fertilizer;
|
||||
|
||||
public interface YieldIncrease extends Fertilizer {
|
||||
|
||||
/**
|
||||
* Get the extra amount to drop
|
||||
*
|
||||
* @return amount bonus
|
||||
*/
|
||||
int getAmountBonus();
|
||||
}
|
||||
|
||||
@@ -36,18 +36,38 @@ public class PassiveFillMethod extends AbstractFillMethod {
|
||||
this.returnedAmount = returnedAmount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the consumed item ID
|
||||
*
|
||||
* @return consumed item ID
|
||||
*/
|
||||
public String getUsed() {
|
||||
return used;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the returned item ID
|
||||
*
|
||||
* @return returned item ID
|
||||
*/
|
||||
public String getReturned() {
|
||||
return returned;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the amount to consume
|
||||
*
|
||||
* @return amount to consume
|
||||
*/
|
||||
public int getUsedAmount() {
|
||||
return usedAmount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the amount of the returned items
|
||||
*
|
||||
* @return amount of the returned items
|
||||
*/
|
||||
public int getReturnedAmount() {
|
||||
return returnedAmount;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,12 @@ public class PositiveFillMethod extends AbstractFillMethod {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
/**
|
||||
* Get the block/furniture ID
|
||||
*
|
||||
* @return id
|
||||
*/
|
||||
public String getID() {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package net.momirealms.customcrops.api.mechanic.misc;
|
||||
|
||||
import org.bukkit.Rotation;
|
||||
|
||||
public enum CRotation {
|
||||
|
||||
NONE(0f),
|
||||
@@ -18,4 +20,39 @@ public enum CRotation {
|
||||
public float getYaw() {
|
||||
return yaw;
|
||||
}
|
||||
|
||||
public static CRotation getByRotation(Rotation rotation) {
|
||||
switch (rotation) {
|
||||
default -> {
|
||||
return CRotation.NONE;
|
||||
}
|
||||
case CLOCKWISE -> {
|
||||
return CRotation.WEST;
|
||||
}
|
||||
case COUNTER_CLOCKWISE -> {
|
||||
return CRotation.EAST;
|
||||
}
|
||||
case FLIPPED -> {
|
||||
return CRotation.NORTH;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static CRotation getByYaw(float yaw) {
|
||||
yaw = (Math.abs(yaw + 180) % 360);
|
||||
switch ((int) (yaw/90)) {
|
||||
case 1 -> {
|
||||
return CRotation.WEST;
|
||||
}
|
||||
case 2 -> {
|
||||
return CRotation.NORTH;
|
||||
}
|
||||
case 3 -> {
|
||||
return CRotation.EAST;
|
||||
}
|
||||
default -> {
|
||||
return CRotation.SOUTH;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,5 +21,11 @@ import org.bukkit.entity.Player;
|
||||
|
||||
public interface Value {
|
||||
|
||||
/**
|
||||
* Get double value
|
||||
*
|
||||
* @param player player
|
||||
* @return the value
|
||||
*/
|
||||
double get(Player player);
|
||||
}
|
||||
|
||||
@@ -19,5 +19,11 @@ package net.momirealms.customcrops.api.mechanic.requirement;
|
||||
|
||||
public interface Requirement {
|
||||
|
||||
/**
|
||||
* Does player meet the requirement
|
||||
*
|
||||
* @param state state of player
|
||||
* @return met or not
|
||||
*/
|
||||
boolean isStateMet(State state);
|
||||
}
|
||||
|
||||
@@ -19,11 +19,31 @@ package net.momirealms.customcrops.api.mechanic.requirement;
|
||||
|
||||
public abstract class RequirementExpansion {
|
||||
|
||||
/**
|
||||
* Get the version number
|
||||
*
|
||||
* @return version
|
||||
*/
|
||||
public abstract String getVersion();
|
||||
|
||||
/**
|
||||
* Get the author
|
||||
*
|
||||
* @return author
|
||||
*/
|
||||
public abstract String getAuthor();
|
||||
|
||||
/**
|
||||
* Get the type of the requirement
|
||||
*
|
||||
* @return the type of the requirement
|
||||
*/
|
||||
public abstract String getRequirementType();
|
||||
|
||||
/**
|
||||
* Get the requirement factory
|
||||
*
|
||||
* @return the requirement factory
|
||||
*/
|
||||
public abstract RequirementFactory getRequirementFactory();
|
||||
}
|
||||
|
||||
@@ -23,8 +23,22 @@ import java.util.List;
|
||||
|
||||
public interface RequirementFactory {
|
||||
|
||||
/**
|
||||
* Build a requirement
|
||||
*
|
||||
* @param args args
|
||||
* @param notMetActions actions to perform if the requirement is not met
|
||||
* @param advanced whether to trigger the notMetActions or not
|
||||
* @return requirement
|
||||
*/
|
||||
Requirement build(Object args, List<Action> notMetActions, boolean advanced);
|
||||
|
||||
/**
|
||||
* Build a requirement
|
||||
*
|
||||
* @param args args
|
||||
* @return requirement
|
||||
*/
|
||||
default Requirement build(Object args) {
|
||||
return build(args, null, false);
|
||||
}
|
||||
|
||||
@@ -22,5 +22,10 @@ import net.momirealms.customcrops.api.mechanic.world.level.DataBlock;
|
||||
|
||||
public interface CustomCropsBlock extends DataBlock, Tickable {
|
||||
|
||||
/**
|
||||
* Get the type of the item
|
||||
*
|
||||
* @return type of the item
|
||||
*/
|
||||
ItemType getType();
|
||||
}
|
||||
|
||||
@@ -2,5 +2,11 @@ package net.momirealms.customcrops.api.mechanic.world;
|
||||
|
||||
public interface Tickable {
|
||||
|
||||
/**
|
||||
* Tick
|
||||
*
|
||||
* @param interval interval
|
||||
* @param offline offline tick
|
||||
*/
|
||||
void tick(int interval, boolean offline);
|
||||
}
|
||||
|
||||
@@ -33,26 +33,55 @@ public class AbstractCustomCropsBlock implements DataBlock {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set data by key
|
||||
*
|
||||
* @param key key
|
||||
* @param tag data tag
|
||||
*/
|
||||
@Override
|
||||
public void setData(String key, Tag<?> tag) {
|
||||
compoundMap.put(key, tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get data tag by key
|
||||
*
|
||||
* @param key key
|
||||
* @return data tag
|
||||
*/
|
||||
@Override
|
||||
public Tag<?> getData(String name) {
|
||||
return compoundMap.get(name);
|
||||
public Tag<?> getData(String key) {
|
||||
return compoundMap.get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the data map
|
||||
*
|
||||
* @return data map
|
||||
*/
|
||||
@Override
|
||||
public SynchronizedCompoundMap getCompoundMap() {
|
||||
return compoundMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the location of the block
|
||||
*
|
||||
* @return location
|
||||
*/
|
||||
@Override
|
||||
public SimpleLocation getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
/**
|
||||
* interval is customized
|
||||
* You can perform tick logics if the block is ticked for some times
|
||||
*
|
||||
* @param interval interval
|
||||
* @return can be ticked or not
|
||||
*/
|
||||
public boolean canTick(int interval) {
|
||||
if (interval == 1) {
|
||||
return true;
|
||||
|
||||
@@ -24,84 +24,310 @@ import net.momirealms.customcrops.api.mechanic.item.Sprinkler;
|
||||
import net.momirealms.customcrops.api.mechanic.world.ChunkPos;
|
||||
import net.momirealms.customcrops.api.mechanic.world.CustomCropsBlock;
|
||||
import net.momirealms.customcrops.api.mechanic.world.SimpleLocation;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface CustomCropsChunk {
|
||||
|
||||
/**
|
||||
* Calculate the unload time and perform compensation
|
||||
* This method can only be called in a loaded chunk
|
||||
*/
|
||||
void notifyOfflineUpdates();
|
||||
|
||||
/**
|
||||
* Get the world associated with the chunk
|
||||
*
|
||||
* @return CustomCrops world
|
||||
*/
|
||||
CustomCropsWorld getCustomCropsWorld();
|
||||
|
||||
/**
|
||||
* Get the region associated with the chunk
|
||||
*
|
||||
* @return CustomCrops region
|
||||
*/
|
||||
CustomCropsRegion getCustomCropsRegion();
|
||||
|
||||
/**
|
||||
* Get the position of the chunk
|
||||
*
|
||||
* @return chunk position
|
||||
*/
|
||||
ChunkPos getChunkPos();
|
||||
|
||||
/**
|
||||
* Do second timer
|
||||
*/
|
||||
void secondTimer();
|
||||
|
||||
long getLastLoadedTime();
|
||||
|
||||
int getLoadedSeconds();
|
||||
|
||||
Optional<WorldCrop> getCropAt(SimpleLocation location);
|
||||
|
||||
Optional<WorldSprinkler> getSprinklerAt(SimpleLocation location);
|
||||
|
||||
Optional<WorldPot> getPotAt(SimpleLocation location);
|
||||
|
||||
Optional<WorldGlass> getGlassAt(SimpleLocation location);
|
||||
|
||||
Optional<WorldScarecrow> getScarecrowAt(SimpleLocation location);
|
||||
|
||||
Optional<CustomCropsBlock> getBlockAt(SimpleLocation location);
|
||||
|
||||
void addWaterToSprinkler(Sprinkler sprinkler, SimpleLocation location, int amount);
|
||||
|
||||
void addFertilizerToPot(Pot pot, Fertilizer fertilizer, SimpleLocation location);
|
||||
|
||||
void addWaterToPot(Pot pot, SimpleLocation location, int amount);
|
||||
|
||||
void removeSprinklerAt(SimpleLocation location);
|
||||
|
||||
void removePotAt(SimpleLocation location);
|
||||
|
||||
void removeCropAt(SimpleLocation location);
|
||||
|
||||
void removeGlassAt(SimpleLocation location);
|
||||
|
||||
void removeScarecrowAt(SimpleLocation location);
|
||||
|
||||
CustomCropsBlock removeBlockAt(SimpleLocation location);
|
||||
|
||||
CustomCropsBlock addBlockAt(CustomCropsBlock block, SimpleLocation location);
|
||||
|
||||
int getCropAmount();
|
||||
|
||||
int getPotAmount();
|
||||
|
||||
int getSprinklerAmount();
|
||||
|
||||
void addPotAt(WorldPot pot, SimpleLocation location);
|
||||
|
||||
void addSprinklerAt(WorldSprinkler sprinkler, SimpleLocation location);
|
||||
|
||||
void addCropAt(WorldCrop crop, SimpleLocation location);
|
||||
|
||||
void addPointToCrop(Crop crop, SimpleLocation location, int points);
|
||||
|
||||
void addGlassAt(WorldGlass glass, SimpleLocation location);
|
||||
|
||||
void addScarecrowAt(WorldScarecrow scarecrow, SimpleLocation location);
|
||||
|
||||
void updateLastLoadedTime();
|
||||
|
||||
CustomCropsSection[] getSections();
|
||||
|
||||
CustomCropsSection getSection(int sectionID);
|
||||
|
||||
/**
|
||||
* Get the unloaded time in seconds
|
||||
* This value would increase if the chunk is lazy
|
||||
*
|
||||
* @return the unloaded time
|
||||
*/
|
||||
int getUnloadedSeconds();
|
||||
|
||||
/**
|
||||
* Set the unloaded seconds
|
||||
*
|
||||
* @param unloadedSeconds unloadedSeconds
|
||||
*/
|
||||
void setUnloadedSeconds(int unloadedSeconds);
|
||||
|
||||
/**
|
||||
* Get the last loaded time
|
||||
*
|
||||
* @return last loaded time
|
||||
*/
|
||||
long getLastLoadedTime();
|
||||
|
||||
/**
|
||||
* Set the last loaded time to latest
|
||||
*/
|
||||
void updateLastLoadedTime();
|
||||
|
||||
/**
|
||||
* Get the loaded time in seconds
|
||||
*
|
||||
* @return loaded time
|
||||
*/
|
||||
int getLoadedSeconds();
|
||||
|
||||
/**
|
||||
* Get crop at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return crop data
|
||||
*/
|
||||
Optional<WorldCrop> getCropAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get sprinkler at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return sprinkler data
|
||||
*/
|
||||
Optional<WorldSprinkler> getSprinklerAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get pot at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return pot data
|
||||
*/
|
||||
Optional<WorldPot> getPotAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get greenhouse glass at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return greenhouse glass data
|
||||
*/
|
||||
Optional<WorldGlass> getGlassAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get scarecrow at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return scarecrow data
|
||||
*/
|
||||
Optional<WorldScarecrow> getScarecrowAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get block data at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return block data
|
||||
*/
|
||||
Optional<CustomCropsBlock> getBlockAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add water to the sprinkler
|
||||
* This method would create new sprinkler data if the sprinkler data not exists in that place
|
||||
* This method would also update the sprinkler's model if it has models according to the water amount
|
||||
*
|
||||
* @param sprinkler sprinkler config
|
||||
* @param amount amount of water
|
||||
* @param location location
|
||||
*/
|
||||
void addWaterToSprinkler(Sprinkler sprinkler, int amount, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add fertilizer to the pot
|
||||
* This method would create new pot data if the pot data not exists in that place
|
||||
* This method would update the pot's block state if it has appearance variations for different fertilizers
|
||||
*
|
||||
* @param pot pot config
|
||||
* @param fertilizer fertilizer config
|
||||
* @param location location
|
||||
*/
|
||||
void addFertilizerToPot(Pot pot, Fertilizer fertilizer, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add water to the pot
|
||||
* This method would create new pot data if the pot data not exists in that place
|
||||
* This method would update the pot's block state if it's dry
|
||||
*
|
||||
* @param pot pot config
|
||||
* @param amount amount of water
|
||||
* @param location location
|
||||
*/
|
||||
void addWaterToPot(Pot pot, int amount, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add points to a crop
|
||||
* This method would do nothing if the crop data not exists in that place
|
||||
* This method would change the stage of the crop and trigger the actions
|
||||
*
|
||||
* @param crop crop config
|
||||
* @param points points to add
|
||||
* @param location location
|
||||
*/
|
||||
void addPointToCrop(Crop crop, int points, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove sprinkler data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldSprinkler removeSprinklerAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove pot data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldPot removePotAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove crop data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldCrop removeCropAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove greenhouse glass data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldGlass removeGlassAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove scarecrow data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldScarecrow removeScarecrowAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove any block data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return block data
|
||||
*/
|
||||
@Nullable
|
||||
CustomCropsBlock removeBlockAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add a custom block data at a certain location
|
||||
*
|
||||
* @param block block data
|
||||
* @param location location
|
||||
* @return the previous block data
|
||||
*/
|
||||
@Nullable
|
||||
CustomCropsBlock addBlockAt(CustomCropsBlock block, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get the amount of crops in this chunk
|
||||
*
|
||||
* @return the amount of crops
|
||||
*/
|
||||
int getCropAmount();
|
||||
|
||||
/**
|
||||
* Get the amount of pots in this chunk
|
||||
*
|
||||
* @return the amount of pots
|
||||
*/
|
||||
int getPotAmount();
|
||||
|
||||
/**
|
||||
* Get the amount of sprinklers in this chunk
|
||||
*
|
||||
* @return the amount of sprinklers
|
||||
*/
|
||||
int getSprinklerAmount();
|
||||
|
||||
/**
|
||||
* Add pot data
|
||||
*
|
||||
* @param pot pot data
|
||||
* @param location location
|
||||
*/
|
||||
void addPotAt(WorldPot pot, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add sprinkler data
|
||||
*
|
||||
* @param sprinkler sprinkler data
|
||||
* @param location location
|
||||
*/
|
||||
void addSprinklerAt(WorldSprinkler sprinkler, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add crop data
|
||||
*
|
||||
* @param crop crop data
|
||||
* @param location location
|
||||
*/
|
||||
void addCropAt(WorldCrop crop, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add greenhouse glass data
|
||||
*
|
||||
* @param glass glass data
|
||||
* @param location location
|
||||
*/
|
||||
void addGlassAt(WorldGlass glass, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add scarecrow data
|
||||
*
|
||||
* @param scarecrow scarecrow data
|
||||
* @param location location
|
||||
*/
|
||||
void addScarecrowAt(WorldScarecrow scarecrow, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get CustomCrops sections
|
||||
*
|
||||
* @return sections
|
||||
*/
|
||||
CustomCropsSection[] getSections();
|
||||
|
||||
/**
|
||||
* Get section by ID
|
||||
*
|
||||
* @param sectionID id
|
||||
* @return section
|
||||
*/
|
||||
@Nullable
|
||||
CustomCropsSection getSection(int sectionID);
|
||||
|
||||
/**
|
||||
* If the chunk can be pruned
|
||||
*
|
||||
* @return can be pruned or not
|
||||
*/
|
||||
boolean canPrune();
|
||||
}
|
||||
|
||||
@@ -25,17 +25,52 @@ import java.util.Map;
|
||||
|
||||
public interface CustomCropsRegion {
|
||||
|
||||
/**
|
||||
* Get the CustomCrops world associated with the region
|
||||
*
|
||||
* @return CustomCrops world
|
||||
*/
|
||||
CustomCropsWorld getCustomCropsWorld();
|
||||
|
||||
/**
|
||||
* Get the cached chunk
|
||||
*
|
||||
* @param pos chunk position
|
||||
* @return cached chunk in bytes
|
||||
*/
|
||||
byte @Nullable [] getChunkBytes(ChunkPos pos);
|
||||
|
||||
/**
|
||||
* Get the position of the region
|
||||
*
|
||||
* @return the position of the region
|
||||
*/
|
||||
RegionPos getRegionPos();
|
||||
|
||||
/**
|
||||
* Remove a chunk by the position
|
||||
*
|
||||
* @param pos the position of the chunk
|
||||
*/
|
||||
void removeChunk(ChunkPos pos);
|
||||
|
||||
/**
|
||||
* Put a chunk's data to cache
|
||||
*
|
||||
* @param pos the position of the chunk
|
||||
* @param data the serialized data
|
||||
*/
|
||||
void saveChunk(ChunkPos pos, byte[] data);
|
||||
|
||||
/**
|
||||
* Get the data to save
|
||||
*
|
||||
* @return the data to save
|
||||
*/
|
||||
Map<ChunkPos, byte[]> getRegionDataToSave();
|
||||
|
||||
/**
|
||||
* If the region can be pruned or not
|
||||
*/
|
||||
boolean canPrune();
|
||||
}
|
||||
|
||||
@@ -19,22 +19,63 @@ package net.momirealms.customcrops.api.mechanic.world.level;
|
||||
|
||||
import net.momirealms.customcrops.api.mechanic.world.BlockPos;
|
||||
import net.momirealms.customcrops.api.mechanic.world.CustomCropsBlock;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface CustomCropsSection {
|
||||
|
||||
/**
|
||||
* Get the section ID
|
||||
*
|
||||
* @return section ID
|
||||
*/
|
||||
int getSectionID();
|
||||
|
||||
/**
|
||||
* Get block at a certain position
|
||||
*
|
||||
* @param pos block position
|
||||
* @return the block
|
||||
*/
|
||||
@Nullable
|
||||
CustomCropsBlock getBlockAt(BlockPos pos);
|
||||
|
||||
/**
|
||||
* Remove a block by a certain position
|
||||
*
|
||||
* @param pos block position
|
||||
* @return the removed block
|
||||
*/
|
||||
@Nullable
|
||||
CustomCropsBlock removeBlockAt(BlockPos pos);
|
||||
|
||||
/**
|
||||
* Add block at a certain position
|
||||
*
|
||||
* @param pos block position
|
||||
* @param block the new block
|
||||
* @return the previous block
|
||||
*/
|
||||
@Nullable
|
||||
CustomCropsBlock addBlockAt(BlockPos pos, CustomCropsBlock block);
|
||||
|
||||
/**
|
||||
* If the section can be pruned or not
|
||||
*/
|
||||
boolean canPrune();
|
||||
|
||||
/**
|
||||
* Get the blocks in this section
|
||||
*
|
||||
* @return blocks
|
||||
*/
|
||||
CustomCropsBlock[] getBlocks();
|
||||
|
||||
/**
|
||||
* Get the block map
|
||||
*
|
||||
* @return block map
|
||||
*/
|
||||
Map<BlockPos, CustomCropsBlock> getBlockMap();
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import net.momirealms.customcrops.api.mechanic.world.RegionPos;
|
||||
import net.momirealms.customcrops.api.mechanic.world.SimpleLocation;
|
||||
import net.momirealms.customcrops.api.mechanic.world.season.Season;
|
||||
import org.bukkit.World;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -34,96 +35,376 @@ import java.util.Optional;
|
||||
|
||||
public interface CustomCropsWorld {
|
||||
|
||||
/**
|
||||
* Save all the data
|
||||
*/
|
||||
void save();
|
||||
|
||||
/**
|
||||
* Start the tick system
|
||||
*/
|
||||
void startTick();
|
||||
|
||||
/**
|
||||
* Stop the tick system
|
||||
*/
|
||||
void cancelTick();
|
||||
|
||||
/**
|
||||
* Check if a region is loaded
|
||||
*
|
||||
* @param regionPos region position
|
||||
* @return loaded or not
|
||||
*/
|
||||
boolean isRegionLoaded(RegionPos regionPos);
|
||||
|
||||
/**
|
||||
* Removed lazy chunks (Delayed unloading chunks)
|
||||
*
|
||||
* @param chunkPos chunk position
|
||||
* @return the removed lazy chunk
|
||||
*/
|
||||
CustomCropsChunk removeLazyChunkAt(ChunkPos chunkPos);
|
||||
|
||||
/**
|
||||
* Get the world's settings
|
||||
*
|
||||
* @return world settings
|
||||
*/
|
||||
WorldSetting getWorldSetting();
|
||||
|
||||
/**
|
||||
* Set the world's settings
|
||||
*
|
||||
* @param setting settings
|
||||
*/
|
||||
void setWorldSetting(WorldSetting setting);
|
||||
|
||||
/**
|
||||
* Get all the chunks
|
||||
*
|
||||
* @return chunks
|
||||
*/
|
||||
Collection<? extends CustomCropsChunk> getChunkStorage();
|
||||
|
||||
/**
|
||||
* Get bukkit world
|
||||
* This would be null if the world is unloaded
|
||||
*
|
||||
* @return bukkit world
|
||||
*/
|
||||
@Nullable
|
||||
World getWorld();
|
||||
|
||||
/**
|
||||
* Get the world's name
|
||||
*
|
||||
* @return world's name
|
||||
*/
|
||||
@NotNull
|
||||
String getWorldName();
|
||||
|
||||
/**
|
||||
* Check if the chunk is loaded
|
||||
* The chunk would only be loaded when it has CustomCrops data and being loaded by minecraft chunk system
|
||||
*
|
||||
* @param chunkPos chunk position
|
||||
* @return loaded or not
|
||||
*/
|
||||
boolean isChunkLoaded(ChunkPos chunkPos);
|
||||
|
||||
/**
|
||||
* Create CustomCrops chunk at a certain chunk position
|
||||
* This method can only be called if that chunk is loaded
|
||||
* Otherwise it would fail
|
||||
*
|
||||
* @param chunkPos chunk position
|
||||
* @return the generated CustomCrops chunk
|
||||
*/
|
||||
Optional<CustomCropsChunk> getOrCreateLoadedChunkAt(ChunkPos chunkPos);
|
||||
|
||||
/**
|
||||
* Get the loaded CustomCrops chunk at a certain chunk position
|
||||
*
|
||||
* @param chunkPos chunk position
|
||||
* @return CustomCrops chunk
|
||||
*/
|
||||
Optional<CustomCropsChunk> getLoadedChunkAt(ChunkPos chunkPos);
|
||||
|
||||
/**
|
||||
* Get the loaded CustomCrops region at a certain region position
|
||||
*
|
||||
* @param regionPos region position
|
||||
* @return CustomCrops region
|
||||
*/
|
||||
Optional<CustomCropsRegion> getLoadedRegionAt(RegionPos regionPos);
|
||||
|
||||
/**
|
||||
* Load a CustomCrops region
|
||||
* You don't need to worry about the unloading since CustomCrops would unload the region
|
||||
* if it's unused
|
||||
*
|
||||
* @param region region
|
||||
*/
|
||||
void loadRegion(CustomCropsRegion region);
|
||||
|
||||
/**
|
||||
* Load a CustomCrops chunk
|
||||
* It's unsafe to call this method. Please use world.getChunkAt instead
|
||||
*
|
||||
* @param chunk chunk
|
||||
*/
|
||||
void loadChunk(CustomCropsChunk chunk);
|
||||
|
||||
/**
|
||||
* Unload a CustomCrops chunk
|
||||
* It's unsafe to call this method
|
||||
*
|
||||
* @param chunkPos chunk position
|
||||
*/
|
||||
void unloadChunk(ChunkPos chunkPos);
|
||||
|
||||
/**
|
||||
* Delete a chunk's data
|
||||
*
|
||||
* @param chunkPos chunk position
|
||||
*/
|
||||
void deleteChunk(ChunkPos chunkPos);
|
||||
|
||||
/**
|
||||
* Set the season and date of the world
|
||||
*
|
||||
* @param infoData info data
|
||||
*/
|
||||
void setInfoData(WorldInfoData infoData);
|
||||
|
||||
/**
|
||||
* Get the season and date
|
||||
* This might return the wrong value if sync-seasons is enabled
|
||||
*
|
||||
* @return info data
|
||||
*/
|
||||
WorldInfoData getInfoData();
|
||||
|
||||
/**
|
||||
* Get the date of the world
|
||||
* This would return the reference world's date if sync-seasons is enabled
|
||||
*
|
||||
* @return date
|
||||
*/
|
||||
int getDate();
|
||||
|
||||
/**
|
||||
* Get the season of the world
|
||||
* This would return the reference world's season if sync-seasons is enabled
|
||||
*
|
||||
* @return date
|
||||
*/
|
||||
@Nullable
|
||||
Season getSeason();
|
||||
|
||||
/**
|
||||
* Get sprinkler at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return sprinkler data
|
||||
*/
|
||||
Optional<WorldSprinkler> getSprinklerAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get pot at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return pot data
|
||||
*/
|
||||
Optional<WorldPot> getPotAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get crop at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return crop data
|
||||
*/
|
||||
Optional<WorldCrop> getCropAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get greenhouse glass at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return greenhouse glass data
|
||||
*/
|
||||
Optional<WorldGlass> getGlassAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get scarecrow at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return scarecrow data
|
||||
*/
|
||||
Optional<WorldScarecrow> getScarecrowAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Get block data at a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return block data
|
||||
*/
|
||||
Optional<CustomCropsBlock> getBlockAt(SimpleLocation location);
|
||||
|
||||
void addWaterToSprinkler(Sprinkler sprinkler, SimpleLocation location, int amount);
|
||||
/**
|
||||
* Add water to the sprinkler
|
||||
* This method would create new sprinkler data if the sprinkler data not exists in that place
|
||||
* This method would also update the sprinkler's model if it has models according to the water amount
|
||||
*
|
||||
* @param sprinkler sprinkler config
|
||||
* @param amount amount of water
|
||||
* @param location location
|
||||
*/
|
||||
void addWaterToSprinkler(Sprinkler sprinkler, int amount, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add fertilizer to the pot
|
||||
* This method would create new pot data if the pot data not exists in that place
|
||||
* This method would update the pot's block state if it has appearance variations for different fertilizers
|
||||
*
|
||||
* @param pot pot config
|
||||
* @param fertilizer fertilizer config
|
||||
* @param location location
|
||||
*/
|
||||
void addFertilizerToPot(Pot pot, Fertilizer fertilizer, SimpleLocation location);
|
||||
|
||||
void addWaterToPot(Pot pot, SimpleLocation location, int amount);
|
||||
/**
|
||||
* Add water to the pot
|
||||
* This method would create new pot data if the pot data not exists in that place
|
||||
* This method would update the pot's block state if it's dry
|
||||
*
|
||||
* @param pot pot config
|
||||
* @param amount amount of water
|
||||
* @param location location
|
||||
*/
|
||||
void addWaterToPot(Pot pot, int amount, SimpleLocation location);
|
||||
|
||||
void removeSprinklerAt(SimpleLocation location);
|
||||
/**
|
||||
* Add points to a crop
|
||||
* This method would do nothing if the crop data not exists in that place
|
||||
* This method would change the stage of the crop and trigger the actions
|
||||
*
|
||||
* @param crop crop config
|
||||
* @param points points to add
|
||||
* @param location location
|
||||
*/
|
||||
void addPointToCrop(Crop crop, int points, SimpleLocation location);
|
||||
|
||||
void removePotAt(SimpleLocation location);
|
||||
/**
|
||||
* Remove sprinkler data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldSprinkler removeSprinklerAt(SimpleLocation location);
|
||||
|
||||
void removeCropAt(SimpleLocation location);
|
||||
/**
|
||||
* Remove pot data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldPot removePotAt(SimpleLocation location);
|
||||
|
||||
void removeGlassAt(SimpleLocation location);
|
||||
/**
|
||||
* Remove crop data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldCrop removeCropAt(SimpleLocation location);
|
||||
|
||||
void removeScarecrowAt(SimpleLocation location);
|
||||
/**
|
||||
* Remove greenhouse glass data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldGlass removeGlassAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove scarecrow data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
*/
|
||||
@Nullable
|
||||
WorldScarecrow removeScarecrowAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Remove any block data from a certain location
|
||||
*
|
||||
* @param location location
|
||||
* @return block data
|
||||
*/
|
||||
@Nullable
|
||||
CustomCropsBlock removeAnythingAt(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* If the amount of pot reaches the limitation
|
||||
*
|
||||
* @param location location
|
||||
* @return reach or not
|
||||
*/
|
||||
boolean isPotReachLimit(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* If the amount of crop reaches the limitation
|
||||
*
|
||||
* @param location location
|
||||
* @return reach or not
|
||||
*/
|
||||
boolean isCropReachLimit(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* If the amount of sprinkler reaches the limitation
|
||||
*
|
||||
* @param location location
|
||||
* @return reach or not
|
||||
*/
|
||||
boolean isSprinklerReachLimit(SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add pot data
|
||||
*
|
||||
* @param pot pot data
|
||||
* @param location location
|
||||
*/
|
||||
void addPotAt(WorldPot pot, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add sprinkler data
|
||||
*
|
||||
* @param sprinkler sprinkler data
|
||||
* @param location location
|
||||
*/
|
||||
void addSprinklerAt(WorldSprinkler sprinkler, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add crop data
|
||||
*
|
||||
* @param crop crop data
|
||||
* @param location location
|
||||
*/
|
||||
void addCropAt(WorldCrop crop, SimpleLocation location);
|
||||
|
||||
void addPointToCrop(Crop crop, SimpleLocation location, int points);
|
||||
|
||||
/**
|
||||
* Add greenhouse glass data
|
||||
*
|
||||
* @param glass glass data
|
||||
* @param location location
|
||||
*/
|
||||
void addGlassAt(WorldGlass glass, SimpleLocation location);
|
||||
|
||||
/**
|
||||
* Add scarecrow data
|
||||
*
|
||||
* @param scarecrow scarecrow data
|
||||
* @param location location
|
||||
*/
|
||||
void addScarecrowAt(WorldScarecrow scarecrow, SimpleLocation location);
|
||||
}
|
||||
|
||||
@@ -23,11 +23,33 @@ import net.momirealms.customcrops.api.mechanic.world.SynchronizedCompoundMap;
|
||||
|
||||
public interface DataBlock {
|
||||
|
||||
/**
|
||||
* Set data by key
|
||||
*
|
||||
* @param key key
|
||||
* @param tag data tag
|
||||
*/
|
||||
void setData(String key, Tag<?> tag);
|
||||
|
||||
/**
|
||||
* Get data tag by key
|
||||
*
|
||||
* @param key key
|
||||
* @return data tag
|
||||
*/
|
||||
Tag<?> getData(String key);
|
||||
|
||||
/**
|
||||
* Get the data map
|
||||
*
|
||||
* @return data map
|
||||
*/
|
||||
SynchronizedCompoundMap getCompoundMap();
|
||||
|
||||
/**
|
||||
* Get the location of the block
|
||||
*
|
||||
* @return location
|
||||
*/
|
||||
SimpleLocation getLocation();
|
||||
}
|
||||
|
||||
@@ -22,11 +22,31 @@ import net.momirealms.customcrops.api.mechanic.world.CustomCropsBlock;
|
||||
|
||||
public interface WorldCrop extends CustomCropsBlock {
|
||||
|
||||
/**
|
||||
* Get the key of the crop
|
||||
*
|
||||
* @return key
|
||||
*/
|
||||
String getKey();
|
||||
|
||||
/**
|
||||
* Get the point
|
||||
*
|
||||
* @return point
|
||||
*/
|
||||
int getPoint();
|
||||
|
||||
/**
|
||||
* Set the point
|
||||
*
|
||||
* @param point point
|
||||
*/
|
||||
void setPoint(int point);
|
||||
|
||||
/**
|
||||
* Get the config
|
||||
*
|
||||
* @return crop config
|
||||
*/
|
||||
Crop getConfig();
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
package net.momirealms.customcrops.api.mechanic.world.level;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import net.momirealms.customcrops.api.manager.ConfigManager;
|
||||
import net.momirealms.customcrops.api.mechanic.world.season.Season;
|
||||
|
||||
public class WorldInfoData {
|
||||
@@ -36,19 +37,39 @@ public class WorldInfoData {
|
||||
return new WorldInfoData(Season.SPRING, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get season
|
||||
*
|
||||
* @return season
|
||||
*/
|
||||
public Season getSeason() {
|
||||
if (season == null) season = Season.SPRING;
|
||||
return season;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set season
|
||||
*
|
||||
* @param season the new season
|
||||
*/
|
||||
public void setSeason(Season season) {
|
||||
this.season = season;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get date
|
||||
*
|
||||
* @return date
|
||||
*/
|
||||
public int getDate() {
|
||||
return date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set date
|
||||
*
|
||||
* @param date the new date
|
||||
*/
|
||||
public void setDate(int date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
@@ -20,26 +20,75 @@ package net.momirealms.customcrops.api.mechanic.world.level;
|
||||
import net.momirealms.customcrops.api.mechanic.item.Fertilizer;
|
||||
import net.momirealms.customcrops.api.mechanic.item.Pot;
|
||||
import net.momirealms.customcrops.api.mechanic.world.CustomCropsBlock;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public interface WorldPot extends CustomCropsBlock {
|
||||
|
||||
/**
|
||||
* Get the key of the pot
|
||||
*
|
||||
* @return key
|
||||
*/
|
||||
String getKey();
|
||||
|
||||
/**
|
||||
* Get the amount of water
|
||||
*
|
||||
* @return amount of water
|
||||
*/
|
||||
int getWater();
|
||||
|
||||
/**
|
||||
* Set the amount of water
|
||||
*
|
||||
* @param water water
|
||||
*/
|
||||
void setWater(int water);
|
||||
|
||||
/**
|
||||
* Get the fertilizer config
|
||||
*
|
||||
* @return fertilizer config
|
||||
*/
|
||||
@Nullable
|
||||
Fertilizer getFertilizer();
|
||||
|
||||
void setFertilizer(Fertilizer fertilizer);
|
||||
/**
|
||||
* Set the fertilizer
|
||||
*
|
||||
* @param fertilizer fertilizer
|
||||
*/
|
||||
void setFertilizer(@NotNull Fertilizer fertilizer);
|
||||
|
||||
/**
|
||||
* Remove the fertilizer
|
||||
*/
|
||||
void removeFertilizer();
|
||||
|
||||
/**
|
||||
* Get the remaining usages of the fertilizer
|
||||
*
|
||||
* @return remaining usages of the fertilizer
|
||||
*/
|
||||
int getFertilizerTimes();
|
||||
|
||||
/**
|
||||
* Set the remaining usages of the fertilizer
|
||||
*
|
||||
* @param times the remaining usages of the fertilizer
|
||||
*/
|
||||
void setFertilizerTimes(int times);
|
||||
|
||||
/**
|
||||
* Get the pot config
|
||||
*
|
||||
* @return pot config
|
||||
*/
|
||||
Pot getConfig();
|
||||
|
||||
void tickWater(CustomCropsChunk chunk);
|
||||
/**
|
||||
* Tick the rainwater and nearby water
|
||||
*/
|
||||
void tickWater();
|
||||
}
|
||||
|
||||
@@ -22,11 +22,31 @@ import net.momirealms.customcrops.api.mechanic.world.CustomCropsBlock;
|
||||
|
||||
public interface WorldSprinkler extends CustomCropsBlock {
|
||||
|
||||
/**
|
||||
* Get the amount of water
|
||||
*
|
||||
* @return amount of water
|
||||
*/
|
||||
int getWater();
|
||||
|
||||
/**
|
||||
* Set the amount of water
|
||||
*
|
||||
* @param water amount of water
|
||||
*/
|
||||
void setWater(int water);
|
||||
|
||||
/**
|
||||
* Get the key of the sprinkler
|
||||
*
|
||||
* @return key
|
||||
*/
|
||||
String getKey();
|
||||
|
||||
/**
|
||||
* Get the sprinkler config
|
||||
*
|
||||
* @return sprinkler config
|
||||
*/
|
||||
Sprinkler getConfig();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user