parent
d753abd2b2
commit
fb638af6fe
|
@ -0,0 +1,66 @@
|
||||||
|
# Intellij
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
*.iws
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
settings.properties
|
||||||
|
|
||||||
|
# Eclipse
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
.settings/
|
||||||
|
|
||||||
|
# NetBeans
|
||||||
|
nbproject/
|
||||||
|
|
||||||
|
# Mac
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Maven
|
||||||
|
log/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# JRebel
|
||||||
|
.rebel.xml
|
||||||
|
.rebel-remote.xml
|
||||||
|
rebel.xml
|
||||||
|
rebel-remote.xml
|
||||||
|
|
||||||
|
build.xml
|
||||||
|
|
||||||
|
# Visual Studio
|
||||||
|
*.obj
|
||||||
|
*.exe
|
||||||
|
*.pdb
|
||||||
|
*.user
|
||||||
|
*.aps
|
||||||
|
*.pch
|
||||||
|
*.vspscc
|
||||||
|
*_i.c
|
||||||
|
*_p.c
|
||||||
|
*.ncb
|
||||||
|
*.suo
|
||||||
|
*.tlb
|
||||||
|
*.tlh
|
||||||
|
*.bak
|
||||||
|
*.cache
|
||||||
|
*.ilk
|
||||||
|
*.log
|
||||||
|
*.dll
|
||||||
|
*.lib
|
||||||
|
*.sbr
|
||||||
|
|
||||||
|
# Artifacts
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Other
|
||||||
|
minecraft/1.8.8
|
||||||
|
bin/
|
||||||
|
dist/
|
||||||
|
manifest.mf
|
||||||
|
Thumbs.db
|
||||||
|
*.sh
|
||||||
|
|
||||||
|
# Generated
|
||||||
|
.git-versioned-pom.xml
|
||||||
|
pom.xml.versionsBackup
|
|
@ -0,0 +1,9 @@
|
||||||
|
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 https://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
|
||||||
|
<extension>
|
||||||
|
<groupId>me.qoomon</groupId>
|
||||||
|
<artifactId>maven-git-versioning-extension</artifactId>
|
||||||
|
<version>9.0.1</version>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
</extensions>
|
|
@ -0,0 +1,29 @@
|
||||||
|
<configuration xmlns="https://github.com/qoomon/maven-git-versioning-extension"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="https://github.com/qoomon/maven-git-versioning-extension https://qoomon.github.io/maven-git-versioning-extension/configuration-7.0.0.xsd">
|
||||||
|
<refs>
|
||||||
|
<!-- Master Branches -->
|
||||||
|
<!-- Format: <version> -->
|
||||||
|
<!-- Must manually increase version number -->
|
||||||
|
<ref type="branch">
|
||||||
|
<pattern>main</pattern>
|
||||||
|
<version>${version.release}</version>
|
||||||
|
</ref>
|
||||||
|
<ref type="branch">
|
||||||
|
<pattern>master</pattern>
|
||||||
|
<version>${version.release}</version>
|
||||||
|
</ref>
|
||||||
|
|
||||||
|
<!-- Development Branches -->
|
||||||
|
<!-- Format: <version>-DEV -->
|
||||||
|
<ref type="branch">
|
||||||
|
<pattern>development</pattern>
|
||||||
|
<version>${version.release}-DEV</version>
|
||||||
|
</ref>
|
||||||
|
<!-- Format: <branch_name>-SNAPSHOT -->
|
||||||
|
<ref type="branch">
|
||||||
|
<pattern>.+</pattern>
|
||||||
|
<version>${ref.slug}-SNAPSHOT</version>
|
||||||
|
</ref>
|
||||||
|
</refs>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2020 Illuzionz Studios
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
|
@ -0,0 +1,130 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>com.illuzionzstudios</groupId>
|
||||||
|
<artifactId>CustomFishing</artifactId>
|
||||||
|
<version>5.0.0</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<kotlin.code.style>official</kotlin.code.style>
|
||||||
|
<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
|
||||||
|
<kotlin.version>1.7.0</kotlin.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>nms-repo</id>
|
||||||
|
<url>https://repo.codemc.org/repository/nms/</url>
|
||||||
|
</repository>
|
||||||
|
|
||||||
|
<repository>
|
||||||
|
<id>jitpack.io</id>
|
||||||
|
<url>https://jitpack.io</url>
|
||||||
|
</repository>
|
||||||
|
|
||||||
|
<repository>
|
||||||
|
<id>sk89q-repo</id>
|
||||||
|
<url>https://maven.enginehub.org/repo/</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>com.github.IlluzionzDev</groupId>-->
|
||||||
|
<!-- <artifactId>Mist</artifactId>-->
|
||||||
|
<!-- <version>9d4b8f8549</version>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
|
<!-- <dependency>-->
|
||||||
|
<!-- <groupId>com.illuzionzstudios</groupId>-->
|
||||||
|
<!-- <artifactId>mist</artifactId>-->
|
||||||
|
<!-- <version>1.0.4</version>-->
|
||||||
|
<!-- <scope>system</scope>-->
|
||||||
|
<!-- <systemPath>${project.basedir}/src/main/libs/Mist-1.0.4.jar</systemPath>-->
|
||||||
|
<!-- </dependency>-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.illuzionzstudios</groupId>
|
||||||
|
<artifactId>mist</artifactId>
|
||||||
|
<version>1.0.4</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.spigotmc</groupId>
|
||||||
|
<artifactId>spigot</artifactId>
|
||||||
|
<version>1.20.4-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>kotlin-stdlib-jdk8</artifactId>
|
||||||
|
<version>${kotlin.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<sourceDirectory>src/main/kotlin</sourceDirectory>
|
||||||
|
<finalName>CustomFishing-${project.version}</finalName>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.3.0</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<relocations>
|
||||||
|
<relocation>
|
||||||
|
<pattern>com.illuzionzstudios.mist</pattern>
|
||||||
|
<shadedPattern>com.illuzionzstudios.customfishing.mist</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>kotlin</pattern>
|
||||||
|
<shadedPattern>com.illuzionzstudios.customfishing.kotlin</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
</relocations>
|
||||||
|
<createDependencyReducedPom>true</createDependencyReducedPom>
|
||||||
|
<shadedArtifactAttached>false</shadedArtifactAttached>
|
||||||
|
<minimizeJar>true</minimizeJar>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>kotlin-maven-plugin</artifactId>
|
||||||
|
<version>${kotlin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>compile</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>compile</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<jvmTarget>1.8</jvmTarget>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
<directory>${project.basedir}/src/main/resources/</directory>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,49 @@
|
||||||
|
package com.illuzionzstudios.customfishing
|
||||||
|
|
||||||
|
import com.illuzionzstudios.customfishing.command.CustomFishingCommand
|
||||||
|
import com.illuzionzstudios.customfishing.reward.RewardController
|
||||||
|
import com.illuzionzstudios.customfishing.reward.fishing.FishingController
|
||||||
|
import com.illuzionzstudios.customfishing.settings.Locale
|
||||||
|
import com.illuzionzstudios.customfishing.settings.Settings
|
||||||
|
import com.illuzionzstudios.mist.config.PluginSettings
|
||||||
|
import com.illuzionzstudios.mist.config.locale.PluginLocale
|
||||||
|
import com.illuzionzstudios.mist.plugin.SpigotPlugin
|
||||||
|
import org.bukkit.ChatColor
|
||||||
|
|
||||||
|
class CustomFishing : SpigotPlugin(7247) {
|
||||||
|
|
||||||
|
override val pluginColor: ChatColor = ChatColor.LIGHT_PURPLE
|
||||||
|
override val pluginId: Int = 53634
|
||||||
|
override val pluginLocale: PluginLocale
|
||||||
|
get() = Locale(this)
|
||||||
|
override val pluginSettings: PluginSettings
|
||||||
|
get() = Settings(this)
|
||||||
|
|
||||||
|
override fun onPluginDisable() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPluginEnable() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPluginLoad() {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPluginPreEnable() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPluginPreReload() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPluginReload() {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onRegisterReloadables() {
|
||||||
|
registerMainCommand(CustomFishingCommand(), "fishing", "customfishing")
|
||||||
|
reloadables.registerController(RewardController)
|
||||||
|
reloadables.registerController(FishingController)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.illuzionzstudios.customfishing.command
|
||||||
|
|
||||||
|
import com.illuzionzstudios.mist.command.SpigotCommandGroup
|
||||||
|
import com.illuzionzstudios.mist.command.SpigotSubCommand
|
||||||
|
import com.illuzionzstudios.mist.command.response.ReturnType
|
||||||
|
import com.illuzionzstudios.mist.command.type.ReloadCommand
|
||||||
|
|
||||||
|
class CustomFishingCommand : SpigotCommandGroup() {
|
||||||
|
|
||||||
|
override fun registerSubcommands() {
|
||||||
|
registerSubCommand(ReloadCommand())
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.illuzionzstudios.customfishing.reward
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player
|
||||||
|
import org.bukkit.event.Event
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance of a reward that triggers on a bukkit event
|
||||||
|
*/
|
||||||
|
interface EventReward<E : Event> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reward a player when the event triggers
|
||||||
|
*/
|
||||||
|
fun reward(player: Player, event: E)
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
package com.illuzionzstudios.customfishing.reward
|
||||||
|
|
||||||
|
import com.illuzionzstudios.customfishing.reward.fishing.FishingReward
|
||||||
|
import com.illuzionzstudios.customfishing.reward.fishing.loader.FishingRewardLoader
|
||||||
|
import com.illuzionzstudios.mist.Logger
|
||||||
|
import com.illuzionzstudios.mist.config.serialization.loader.DirectoryLoader
|
||||||
|
import com.illuzionzstudios.mist.controller.PluginController
|
||||||
|
import com.illuzionzstudios.mist.plugin.SpigotPlugin
|
||||||
|
import com.illuzionzstudios.mist.random.LootTable
|
||||||
|
import org.bukkit.entity.Player
|
||||||
|
|
||||||
|
object RewardController : PluginController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All loaded fishing rewards
|
||||||
|
*/
|
||||||
|
val loadedRewards: MutableSet<FishingReward> = HashSet()
|
||||||
|
|
||||||
|
override fun initialize(plugin: SpigotPlugin) {
|
||||||
|
loadedRewards.clear()
|
||||||
|
|
||||||
|
// Load rewards
|
||||||
|
DirectoryLoader(
|
||||||
|
FishingRewardLoader::class.java,
|
||||||
|
"rewards",
|
||||||
|
listOf("demo_reward.yml")
|
||||||
|
).loaders.forEach {
|
||||||
|
loadedRewards.add(it.`object`)
|
||||||
|
Logger.info("Loading fishing reward '${it.`object`.name}'")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun stop(plugin: SpigotPlugin) {
|
||||||
|
}
|
||||||
|
|
||||||
|
fun pickReward(player: Player): FishingReward? {
|
||||||
|
// Load loot for player
|
||||||
|
val lootTable: LootTable<FishingReward> = LootTable()
|
||||||
|
loadedRewards.forEach {
|
||||||
|
var passTests = true
|
||||||
|
it.requirements?.forEach { requirement -> if (!requirement.test(player)) passTests = false }
|
||||||
|
if (passTests) {
|
||||||
|
lootTable.addLoot(it, it.chance)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return lootTable.pick()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package com.illuzionzstudios.customfishing.reward.fishing
|
||||||
|
|
||||||
|
import com.illuzionzstudios.customfishing.reward.RewardController
|
||||||
|
import com.illuzionzstudios.customfishing.settings.Settings
|
||||||
|
import com.illuzionzstudios.mist.compatibility.ServerVersion.V
|
||||||
|
import com.illuzionzstudios.mist.compatibility.ServerVersion.atLeast
|
||||||
|
import com.illuzionzstudios.mist.controller.PluginController
|
||||||
|
import com.illuzionzstudios.mist.plugin.SpigotPlugin
|
||||||
|
import com.illuzionzstudios.mist.random.RandomNumberGenerator
|
||||||
|
import com.illuzionzstudios.mist.util.MathUtil
|
||||||
|
import org.bukkit.entity.Player
|
||||||
|
import org.bukkit.event.EventHandler
|
||||||
|
import org.bukkit.event.player.PlayerFishEvent
|
||||||
|
|
||||||
|
object FishingController : PluginController {
|
||||||
|
|
||||||
|
override fun initialize(plugin: SpigotPlugin) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun stop(plugin: SpigotPlugin) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
fun onFish(event: PlayerFishEvent) {
|
||||||
|
if (atLeast(V.v1_16)) {
|
||||||
|
// Custom hook features
|
||||||
|
val hook = event.hook
|
||||||
|
hook.minWaitTime = Settings.MIN_WAIT_TIME.int
|
||||||
|
hook.maxWaitTime = Settings.MAX_WAIT_TIME.int
|
||||||
|
}
|
||||||
|
|
||||||
|
// Detect if they catch a fish
|
||||||
|
if (event.state == PlayerFishEvent.State.CAUGHT_FISH) {
|
||||||
|
// Set experience default reward
|
||||||
|
event.expToDrop = RandomNumberGenerator.parse(Settings.EXP_REWARD.getString("1 to 6")).generate().toInt()
|
||||||
|
// Detect if they actually get a reward
|
||||||
|
if (MathUtil.chance(Settings.REWARD_CHANCE.double))
|
||||||
|
processRewards(event.player, event)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process rewards for a player. All calculations
|
||||||
|
* will be done here, and if null, will rerun until reward is picked.
|
||||||
|
*
|
||||||
|
* @param player Player to reward
|
||||||
|
* @param event The fishing event
|
||||||
|
*/
|
||||||
|
private fun processRewards(player: Player, event: PlayerFishEvent) {
|
||||||
|
// Try reward. Kotlin will handle null checks :)
|
||||||
|
val reward: FishingReward? = RewardController.pickReward(player)
|
||||||
|
reward?.reward(player, event)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,120 @@
|
||||||
|
package com.illuzionzstudios.customfishing.reward.fishing
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XSound
|
||||||
|
import com.illuzionzstudios.customfishing.reward.EventReward
|
||||||
|
import com.illuzionzstudios.customfishing.reward.fishing.item.FishingItem
|
||||||
|
import com.illuzionzstudios.mist.config.locale.MistString
|
||||||
|
import com.illuzionzstudios.mist.config.locale.mist
|
||||||
|
import com.illuzionzstudios.mist.random.RandomNumberGenerator
|
||||||
|
import com.illuzionzstudios.mist.requirement.PlayerRequirement
|
||||||
|
import com.illuzionzstudios.mist.util.MathUtil
|
||||||
|
import org.bukkit.Bukkit
|
||||||
|
import org.bukkit.entity.Player
|
||||||
|
import org.bukkit.event.player.PlayerFishEvent
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A fishing reward that can be caught in the water
|
||||||
|
*/
|
||||||
|
class FishingReward : EventReward<PlayerFishEvent> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Name of the reward
|
||||||
|
*/
|
||||||
|
var name: String? = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commands to execute
|
||||||
|
*/
|
||||||
|
var commands: List<String>? = ArrayList()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom items to give. Built in the reward loader
|
||||||
|
*/
|
||||||
|
var items: List<FishingItem>? = ArrayList()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Messages to send
|
||||||
|
*/
|
||||||
|
var messages: List<String>? = ArrayList()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Broadcast messages to send
|
||||||
|
*/
|
||||||
|
var broadcasts: List<String>? = ArrayList()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Title message
|
||||||
|
*/
|
||||||
|
var title: String? = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Subtitle message
|
||||||
|
*/
|
||||||
|
var subtitle: String? = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chance to find this reward
|
||||||
|
*/
|
||||||
|
var chance = 0.0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If default vanilla rewards are enabled
|
||||||
|
*/
|
||||||
|
var vanillaRewards = false
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Experience to give the player in a range. E.g "1 to 6"
|
||||||
|
*/
|
||||||
|
var experienceRange: RandomNumberGenerator = RandomNumberGenerator(1.0, 6.0)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sound to play
|
||||||
|
*/
|
||||||
|
var sound: XSound? = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requirements for this reward
|
||||||
|
*/
|
||||||
|
var requirements: List<PlayerRequirement>? = ArrayList()
|
||||||
|
|
||||||
|
override fun reward(player: Player, event: PlayerFishEvent) {
|
||||||
|
// Get global reward placeholders
|
||||||
|
val rewardPlaceholders: MutableMap<String, Any> = HashMap()
|
||||||
|
rewardPlaceholders["player"] = player.name
|
||||||
|
|
||||||
|
// Try reward actual items (commands and items)
|
||||||
|
commands?.forEach {
|
||||||
|
var replacer = MistString(it)
|
||||||
|
replacer = replacer.toString(rewardPlaceholders)
|
||||||
|
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), replacer.toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Roll items
|
||||||
|
items?.forEach {
|
||||||
|
if (MathUtil.chance(it.chance)) it.givePlayer(player)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exp and vanilla rewards
|
||||||
|
event.expToDrop = this.experienceRange.generate().toInt()
|
||||||
|
if (!vanillaRewards) event.caught?.remove()
|
||||||
|
|
||||||
|
// Messages and cosmetics
|
||||||
|
this.sound?.play(player.location)
|
||||||
|
title?.mist?.sendTitle(player, subtitle?.mist)
|
||||||
|
|
||||||
|
// Messages
|
||||||
|
messages?.forEach { message ->
|
||||||
|
val toSend = message.mist.toString(rewardPlaceholders)
|
||||||
|
toSend.sendMessage(player)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Global Messages
|
||||||
|
broadcasts?.forEach { broadcast ->
|
||||||
|
val toSend = broadcast.mist.toString(rewardPlaceholders)
|
||||||
|
Bukkit.getOnlinePlayers().forEach {
|
||||||
|
toSend.sendMessage(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.illuzionzstudios.customfishing.reward.fishing.item
|
||||||
|
|
||||||
|
import com.illuzionzstudios.mist.item.CustomItem
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A custom item that can be caught from fishing
|
||||||
|
*/
|
||||||
|
class FishingItem : CustomItem() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Chance of this item being caught out of 100
|
||||||
|
*/
|
||||||
|
var chance: Double = 100.0
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.illuzionzstudios.customfishing.reward.fishing.loader
|
||||||
|
|
||||||
|
import com.illuzionzstudios.customfishing.reward.fishing.item.FishingItem
|
||||||
|
import com.illuzionzstudios.mist.config.ConfigSection
|
||||||
|
import com.illuzionzstudios.mist.item.loader.BaseCustomItemLoader
|
||||||
|
|
||||||
|
class FishingItemLoader(section: ConfigSection) : BaseCustomItemLoader<FishingItem>(section) {
|
||||||
|
|
||||||
|
override fun returnImplementedObject(section: ConfigSection?): FishingItem {
|
||||||
|
// Lets try build the reward
|
||||||
|
val item = FishingItem()
|
||||||
|
item.chance = section?.getDouble("chance") ?: 0.0
|
||||||
|
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
package com.illuzionzstudios.customfishing.reward.fishing.loader
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XSound
|
||||||
|
import com.illuzionzstudios.customfishing.reward.fishing.FishingReward
|
||||||
|
import com.illuzionzstudios.customfishing.reward.fishing.item.FishingItem
|
||||||
|
import com.illuzionzstudios.mist.config.ConfigSection
|
||||||
|
import com.illuzionzstudios.mist.config.YamlConfig
|
||||||
|
import com.illuzionzstudios.mist.config.locale.MistString
|
||||||
|
import com.illuzionzstudios.mist.config.serialization.loader.YamlFileLoader
|
||||||
|
import com.illuzionzstudios.mist.random.RandomNumberGenerator
|
||||||
|
import com.illuzionzstudios.mist.requirement.PlayerRequirement
|
||||||
|
import com.illuzionzstudios.mist.requirement.PlayerRequirementLoader
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load a fishing reward from a file
|
||||||
|
*/
|
||||||
|
class FishingRewardLoader(directory: String, fileName: String) : YamlFileLoader<FishingReward>(directory, fileName) {
|
||||||
|
|
||||||
|
override fun loadYamlObject(file: YamlConfig?): FishingReward {
|
||||||
|
val reward = FishingReward()
|
||||||
|
|
||||||
|
reward.name = file?.getString("name")
|
||||||
|
reward.commands = file?.getStringList("commands")
|
||||||
|
|
||||||
|
val items: MutableList<FishingItem> = ArrayList()
|
||||||
|
file?.getSections("items")?.forEach {
|
||||||
|
items.add(FishingItemLoader(it!!).`object`)
|
||||||
|
}
|
||||||
|
reward.items = items
|
||||||
|
|
||||||
|
reward.messages = file?.getStringList("messages")
|
||||||
|
reward.broadcasts = file?.getStringList("broadcasts")
|
||||||
|
|
||||||
|
reward.title = file?.getString("title")
|
||||||
|
reward.subtitle = file?.getString("sub-title")
|
||||||
|
|
||||||
|
reward.chance = file?.getDouble("weight") ?: 0.0
|
||||||
|
reward.vanillaRewards = file?.getBoolean("vanilla-rewards") ?: false
|
||||||
|
reward.experienceRange = RandomNumberGenerator.parse(file?.getString("exp-amount") ?: "1 to 6")
|
||||||
|
try {
|
||||||
|
reward.sound = XSound.matchXSound(config?.getString("sound") ?: "").get()
|
||||||
|
} catch (ignored: Exception) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load requirements
|
||||||
|
val requirements: MutableList<PlayerRequirement> = ArrayList()
|
||||||
|
file?.getSections("requirements")?.forEach {
|
||||||
|
requirements.add(PlayerRequirementLoader(it!!).`object`)
|
||||||
|
}
|
||||||
|
reward.requirements = requirements
|
||||||
|
|
||||||
|
return reward
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun saveYaml() {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.illuzionzstudios.customfishing.settings
|
||||||
|
|
||||||
|
import com.illuzionzstudios.mist.config.locale.PluginLocale
|
||||||
|
import com.illuzionzstudios.mist.plugin.SpigotPlugin
|
||||||
|
|
||||||
|
class Locale(plugin: SpigotPlugin): PluginLocale(plugin) {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
var GENERAL_PLUGIN_SAVE = createString("general.save", "&7Saved all rewards")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package com.illuzionzstudios.customfishing.settings
|
||||||
|
|
||||||
|
import com.illuzionzstudios.mist.config.ConfigSetting
|
||||||
|
import com.illuzionzstudios.mist.config.PluginSettings
|
||||||
|
import com.illuzionzstudios.mist.plugin.SpigotPlugin
|
||||||
|
|
||||||
|
class Settings(plugin: SpigotPlugin) : PluginSettings(plugin) {
|
||||||
|
|
||||||
|
override fun loadSettings() {
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The chance of finding a custom reward
|
||||||
|
*/
|
||||||
|
var REWARD_CHANCE: ConfigSetting = GENERAL_GROUP.create(
|
||||||
|
"fishing.reward-chance", 100.0,
|
||||||
|
"The chance of finding a custom reward while fishing", "can be a decimal number."
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Amount of EXP rewarded from fishing when no custom reward
|
||||||
|
*/
|
||||||
|
var EXP_REWARD: ConfigSetting = GENERAL_GROUP.create(
|
||||||
|
"fishing.exp-reward",
|
||||||
|
"1 to 6",
|
||||||
|
"Amount of experience to give the player when they HAVEN'T found a custom reward.",
|
||||||
|
"X to Y indicates a range between two numbers.",
|
||||||
|
"0 indicates to not reward exp."
|
||||||
|
)
|
||||||
|
|
||||||
|
var MIN_WAIT_TIME: ConfigSetting = GENERAL_GROUP.create(
|
||||||
|
"fishing.min-wait-time",
|
||||||
|
100,
|
||||||
|
"The minimum amount of ticks to wait for a bite. This is before processing lure and other things",
|
||||||
|
"REQUIRES 1.16+"
|
||||||
|
)
|
||||||
|
|
||||||
|
var MAX_WAIT_TIME: ConfigSetting = GENERAL_GROUP.create(
|
||||||
|
"fishing.max-wait-time",
|
||||||
|
600,
|
||||||
|
"The maximum amount of ticks to wait for a bite. This is before processing lure and other things",
|
||||||
|
"REQUIRES 1.16+"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
|
@ -0,0 +1,4 @@
|
||||||
|
# General Messages
|
||||||
|
|
||||||
|
general:
|
||||||
|
prefix: "&d&lFishing Rewards &8\\u00BB&7"
|
|
@ -0,0 +1,6 @@
|
||||||
|
name: CustomFishing
|
||||||
|
version: ${project.version}
|
||||||
|
author: never2nv,Illuzionz Studios
|
||||||
|
main: com.illuzionzstudios.customfishing.CustomFishing
|
||||||
|
description: Customize the fishing system of minecraft
|
||||||
|
api-version: "1.20"
|
|
@ -0,0 +1,91 @@
|
||||||
|
###################################################################
|
||||||
|
# A custom reward that can be caught by fishing. #
|
||||||
|
# This files defines all the options for a specific reward #
|
||||||
|
# identified by 'Name'. Change the options here as you like #
|
||||||
|
# to make your own reward. To add more than one catchable reward, #
|
||||||
|
# copy this file and then change the options to your liking. #
|
||||||
|
# #
|
||||||
|
# https://docs.illuzionzstudios.com/spigot-plugins/custom-fishing/ #
|
||||||
|
# Any queries join our discord at https://discord.gg/DbJXzWq #
|
||||||
|
###################################################################
|
||||||
|
|
||||||
|
# Placeholders
|
||||||
|
# {player} : The player's name
|
||||||
|
|
||||||
|
# The name or identifier of the reward. Make it something
|
||||||
|
# relating to what the reward is.
|
||||||
|
name: "Demo Reward"
|
||||||
|
|
||||||
|
# A list of commands to run when this reward is caught.
|
||||||
|
commands:
|
||||||
|
- "msg {player} demo"
|
||||||
|
|
||||||
|
# List of custom item rewards, leave the list blank
|
||||||
|
# if you don't want any custom items or remove this section
|
||||||
|
items:
|
||||||
|
# The section for an item
|
||||||
|
sword:
|
||||||
|
# Chance out of 100 of getting this reward
|
||||||
|
chance: 100
|
||||||
|
# The custom display name of the item.
|
||||||
|
# If an empty string has no custom name
|
||||||
|
item-name: "&a&lMy Demo Sword"
|
||||||
|
# The lore of the item. Set to null for no lore
|
||||||
|
lore:
|
||||||
|
- "&7Found While Fishing!"
|
||||||
|
# The amount of this item
|
||||||
|
amount: 1
|
||||||
|
# The material of the item
|
||||||
|
material: IRON_SWORD
|
||||||
|
# If has custom model data
|
||||||
|
model-data: 0
|
||||||
|
# A list of enchants as "ENCHANT:LEVEL". Set to null for no enchants
|
||||||
|
enchants:
|
||||||
|
- "SHARPNESS:5"
|
||||||
|
# If the item appears as glowing like it's enchanted
|
||||||
|
glowing: false
|
||||||
|
# If the item is unbreakable
|
||||||
|
unbreakable: false
|
||||||
|
# If to hide flags like unbreakable and enchants
|
||||||
|
hide-flags: false
|
||||||
|
# Durability of item
|
||||||
|
damage: 0
|
||||||
|
|
||||||
|
# A list of messages to send the player when this reward is caught.
|
||||||
|
messages:
|
||||||
|
- '&7&l(!) &aYou found an awesome sword!'
|
||||||
|
|
||||||
|
# A list of messages to broadcast to the server when this reward is caught.
|
||||||
|
broadcasts:
|
||||||
|
- '&4&l(!) &c{player} &7found a &c&lLEGENDARY &7reward!'
|
||||||
|
|
||||||
|
# Title to send to the player. Leave blank if none.
|
||||||
|
title: "&a&lYou found a reward!"
|
||||||
|
|
||||||
|
# Subtitle to send to the player. Leave blank if none.
|
||||||
|
sub-title: "&7&oFound: Sword"
|
||||||
|
|
||||||
|
# The weight (chance) of this reward being found. The higher the weight
|
||||||
|
# the more likely it is to be caught.
|
||||||
|
weight: 4.5
|
||||||
|
|
||||||
|
# If the player should still receive default minecraft rewards.
|
||||||
|
# This means fish, enchanted books, enchanted items etc.
|
||||||
|
# If set to false only the custom reward will be given
|
||||||
|
vanilla-rewards: false
|
||||||
|
|
||||||
|
# The amount of experience to give the player
|
||||||
|
# as a range, the "x to y" meaning from x to y (inclusive)
|
||||||
|
# Can just be a singular number
|
||||||
|
exp-amount: "1 to 6"
|
||||||
|
|
||||||
|
# The sound to play when this reward is caught. Leave blank
|
||||||
|
# for no sound
|
||||||
|
sound: ENTITY_FIREWORK_ROCKET_TWINKLE
|
||||||
|
|
||||||
|
# Requirements if the player can find this reward
|
||||||
|
requirements:
|
||||||
|
# Check if the player has a certain permission
|
||||||
|
permission:
|
||||||
|
type: permission
|
||||||
|
value: "customfishing.vip"
|
Loading…
Reference in New Issue