Skip to content

Dream-Rainy/ImyvmVillagerShop

Folders and files

NameName
Last commit message
Last commit date
Oct 7, 2024
Dec 2, 2024
Dec 2, 2024
Oct 15, 2022
Oct 24, 2023
Dec 2, 2024
Oct 6, 2024
Dec 2, 2024
Feb 4, 2024
Jun 2, 2023
Aug 15, 2023

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 ) { 40 , x     3   10 × 2 x 1 , x   >   3

注意

  • 商店刚创建或商品刚添加时默认会使用背包内所有(无法选择是否添加)已有物品进行免费补货。 你也在创建完成后额外使用/villagerShop item addStock <shopName> <item> [quantity]来对商店中存在的商品进行“补货”, quantity是一个可选参数,若不填则默认消耗背包内所有特定物品。
    同时,补货需要消耗一定的货币,计算公式如下:
f ( x ) = p × c × 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