/ImyvmVillagerShop

Imyvm Villager Shop 商店交易插件

Primary LanguageKotlinMIT LicenseMIT

Imyvm Villager Shop


LisenseBuild

Bug提示:注意,请不要在将个人物品放入任意槽位后选择交易。可能会导致个人物品消失。具体原因仍在排查中

一、配置文件

文件位置:config/imyvm_villagershop.conf

core {
  # 指定显示语言
  language="zh_cn"
  tax {
    # 玩家补货时的税率
    restock=0.01
  }
  # 数据库相关设置
  database {
      # 数据库类型,支持 "POSTGRESQL" , "MYSQL" , "ORACLE" 以及 "SQLSERVER"
      # 只有 POSTGRESQL 确认可用,其余理论可行
      database=POSTGRESQL
      # 数据库地址,默认为 POSTGRESQL
      # mysql相关地址 : jdbc:mysql://localhost:3306/imyvmvillagershop
      # 或 Oracle : jdbc:oracle:thin:@//localhost:1521/imyvmvillagershop
      # 或 SQL Server : jdbc:sqlserver://localhost:32768;databaseName=imyvmvillagershop
      # 如果均不可用,插件会在world文件夹下自动生成Sqlite数据库文件
      url="jdbc:pgsql://localhost:5432/imyvmvillagershop"
      # 数据库用户名
      username=root
      # 数据库密码
      password="1145141919810"
      # 仅在MySQL数据库生效,用来调整Hikari池的大小
      maximumPoolSize=10
  }
}

管理员可以使用/villagershop config reload来重载配置,使用/villagershop taxrate set <taxrate>来设置税率。

二、商店创建

1.玩家商店

玩家可以使用指令/villagershop create shop <shopname> <x y z> <item> <count> <price>1创建商店,并扣除一定的货币。
货币的花费会随着玩家拥有商店数量的增加而增加,函数表达式为:

$$f(x) \begin{cases} 40, &x\ \le\ 3\\\ 10\times2^{x-1}, &x\ \gt\ 3 \end{cases}$$

注意

  • 商店刚创建或商品刚添加时默认会使用背包内所有(无法选择是否添加)已有物品进行免费补货,你也在创建完成后额外使用/villagershop item addstock <shopname> <item> [count]来对商店中存在的商品进行“补货”,count是一个可选参数,若不填则默认消耗背包内所有特定物品。
    同时,补货需要消耗一定的货币,计算公式如下:
$$f(x) = p \times c \times t$$
$$p为设置价格,c为补货数量,t为税率,默认为0.1\%$$
  • 同一玩家创建的商店不允许名称相同,当个商店的商品数量上限为7个物品,价格下限不低于服务器设置的物价或系统商店物价。
  • 创建商店时的count参数代表用price的钱可以买到count个数的物品
    举个栗子,比如我使用/villagershop create shop DreamRain 0 0 0 minecraft:cherry_leaves 2 100创建了一个名为DreamRain并出售樱花树叶的商店。那么,我可以使用100货币买到2樱花树叶。而不是商店中樱花树叶的库存为2
  • 所有商店都有一个唯一的shopnumber标识符,并且永远不可能重复。
  • 目前商品暂不支持保存NBT(未经测试),可能会导致无法获取到指定的物品,无法保留自定义NBT等问题。

2.系统商店

管理员可以使用指令/villagershop create adminshop <shopname> <x y z> <type> <item1> <count>:<price> <item2> <count>:<price> ... <item_n> <count>:<price>来创建系统商店。
系统商店库存无限,但是可以使用玩家商店中的stock参数来限制单个玩家的购买数量2

三、商店管理

1.货物设置

在商店创建成功后,玩家可以使用/villagershop item add <shopname> <item> <count> <price>来添加商品,使用/villagershop item change <shopname> <item> <count> <price>来修改已有商品的价格以及出售数量,使用/villagershop item delete <shopname> <item>1来删除已有的商品,该操作会返还该商品的所有库存。

2.商店设置

玩家可以使用/villagershop manager info set {shopname,id} {shopnamenew,x y z}来修改商店的名称或者位置。当你不想要该商店时,可以使用/villagershop delete {shopname,shopnumber}1来删除该商店,管理员可以使用shopnumber删除任意不符合规定的商店,无需提前通知拥有者。删除商店会返还所有的库存,但是并不会返还创建时消耗的货币。同时,被管理员删除的商店并不会返还库存。
同时,管理员可以使用/villagershop manager search {shopname:shopname, location:location, owner:owner, range:range},owner参数可以使用玩家创建商店时的ID。可以使用/villagershop manager inquire <shopnumber>获取特定商店的详细信息。
管理员在征得玩家以及管理组同意的情况下,可以使用/villagershop setAdmin <shopnumber>1来将该商店转化为系统商店。注意,该操作也不会返还库存。

四、收购相关

仅管理员可创建收购商店,在创建时将<type>参数设置为1即可创建无限收购指定物品的商店。
收购价格由使用者自行设定。

五、其他

TODO:

  • 商店创建或物品添加时即消耗背包内的物品补货
  • 删除商店或商品时返还库存
  • 补货时可以从玩家身上的潜影盒中获取所需物品
  • 系统商店限制单个玩家购买数量
  • 支持范围搜索商店,以及通过玩家名称搜索商店,不输出重复结果。
  • 完成商店的实体创建
  • 完成GUI呈现以及操作监听
  • 支持保存物品NBT
  • 将计算公式独立进配置文件

Footnotes

  1. 对于该指令,你需要使用/villagershop confirm来确定执行。同时,你可以使用/villagershop cancel来取消操作,所有操作在60s后都会自动取消。并且,在执行下一个需要确认的操作前,你需要先确认已有的操作。 2 3 4

  2. 仍在开发过程中