Skip to content

Dream-Rainy/ImyvmVillagerShop

Repository files navigation

Imyvm Villager Shop


LisenseBuild

已知不兼容模组: OffersHUD

一、配置文件

文件位置:config/imyvm_villagershop.conf

core {
  # 指定显示语言
  language="zh_cn"
  tax {
    # 玩家补货时的税率
    restock=0.01
  }
  # 数据库相关设置
  database {
      # 数据库类型,支持 "POSTGRESQL" , "MYSQL" , "H2"
      database=H2
      # 数据库地址,默认为 H2
      url="localhost:5432/imyvmvillagershop"
      # 数据库用户名
      username=root
      # 数据库密码
      password=""
      # 仅在MySQL数据库生效,用来调整Hikari池的大小
      maximumPoolSize=10
  }
}

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

二、商店创建

1.玩家商店

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

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

注意

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

2.系统商店

管理员可以使用指令 /villagerShop create adminShop <shopName> <x y z> <type> <item1> <count>:<price>:[stock] <item2> <count>:<price>:[stock] ... <item_n> <count>:<price>:[stock] 来创建系统商店。
系统商店库存无限,但是可以使用玩家商店中的stock参数来限制单个玩家的购买数量。
stock可以为空,如果为空,则默认为不限量。

三、商店管理

1.货物设置

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

2.商店设置

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

四、收购相关

仅管理员可创建收购商店,在创建时将<type>参数设置为UNLIMITED_BUY即可创建无限收购指定物品的商店。
或者将<type>参数设置为REFRESHABLE_BUY即可每日对限制进行更新。
收购价格由使用者自行设定。
收购也可以使用stock参数来设定每天每人可以出售给系统商店的数量。
stock可以为空,如果为空,则默认为不限量。

五、其他

TODO:

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

Footnotes

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