YiC200333 / XConomy

An economy plugin that supports data synchronization between multiple servers
GNU General Public License v3.0
92 stars 32 forks source link

Vault Importer causes loss of account balance when Bedrock and Java player share (almost) the same name #138

Open gerolndnr opened 1 month ago

gerolndnr commented 1 month ago

Version of XConomy
XConomy V2.26.1

Server version
Spigot 1.20.6

Storage-type
SQLite

Describe the issues
I have several players on my server who have both a java and a bedrock account. Often, they share the exact same name, only being distinguishable by the Geyser-Prefix (in my case the default .), e.g. Java: TestPlayer123 and Bedrock .TestPlayer123. The importer ignores the prefix and stores both players balance in the data.yml as TestPlayer123.balance overwriting the balance of the other player. This results in a account balance loss for one of them.


XConomy's config.yml

#Default Online Offline SemiOnline
#Default mode will automatically detect the player's UUID(support GeyserMC)
#Online mode is better for servers that enable online-mode(support Yggdrasil)
#Offline mode does not support ignoring username case
#If you use floodgate(GeyserMC) and the option 'username-prefix' is set to empty, Please use SemiOnline mode
UUID-mode: Default
#In convertion mode, can use command '/xconomy' import data from other plugins based on Vault
#Conflicting data will be skipped, The imported data will be saved in XConomy/importdata/data.yml
#In this mode, XConomy will not start normally
#After the conversion, please check data and turn off this mode
#Sponge version does not have this function
Importdata-mode: true

#Settings
Settings:
  #Chinese ChineseTW English French Spanish Russian Turkish Japanese German
  #Indonesia Portuguese Italian
  language: German
  #Whether to check for new version
  check-update: true
  #TOP10 and the Server Total refresh time interval (Seconds)
  refresh-time: 300
  #If set to true, XConomy will register the following commands:
    # - economy
    # - eco
    # - ebalancetop
    # - ebaltop
    # - eeconomy
  #Please keep in mind that if Essentials is installed on your server
  #XConomy will take over these commands.
  eco-command: true
  #XConomy will disable the economic function of Essentials.
  #Just the economic function.
  disable-essentials: true
  #Initial balance
  initial-bal: 0
  #Tax to be paid for pay command (0.5 means 50%, 1 means 100%)
  payment-tax: 0
  #Ranking size (Max value 100)
  ranking-size: 10
  #Rows per page of list (Ranking and help menu)
  lines-per-page: 5
  #If you need to modify the data in the database directly, it is recommended to enable it
  #Asynchronous saving of data is not supported after caching is disabled
  #Disabling caching will increase the pressure on the database
  disable-cache: false
  #Dose save transaction record
  #Only MySQL is supported
  transaction-record: true
  #Record transaction information of pay command while player offline.
  #The player will receive tips when they reconnect.
  #Transaction-record function must be enabled.
  offline-pay-transfer-tips: false
  #Ignore the case of player names
  username-ignore-case: false

#It can solve the problem that some plugins need to create non-player accounts, such as Factions
#==========================================================================================
#Plugins supported by default (no requirement to enable non-player-account)
#Towny
#==========================================================================================
#Non-player account data is not synced with BC
non-player-account:
  #Whether to enable non-player accounts.
  enable: false
  #If the account name contains fields in the whitelist, it will be recognized as non-player accounts.
  #Otherwise, it is recognized as a player account
  #If the player's name contains fields in the whitelist, it will be denied access to the server.
  #This function can reduce the times that reading data from the database.
  whitelist:
    #Whether to enable whitelist.
    enable: false
    fields-list:
      - tax
      - nation-

#The display of the currency
Currency:
  singular-name: $
  plural-name: $
  #Is the balance an integer
  integer-bal: false
  #Method for rounding off excess digits in the amount
  #0 indicates rounding down, 1 indicates rounding up
  rounding-mode: 0
  thousands-separator: ' '
  #%format_balance% indicate the balance after the format
  display-format: '%balance%%currencyname%'
  #Maximum amount (default is maximum)
  max-number: '10000000000000000'
  format-balance:
    1000: k
    1000000: m

#SyncData settings
SyncData:
  #Whether to enable data synchronization between multiple servers
  enable: true
  #BungeeCord Redis
  #================================================== BungeeCord Channel ==================================================
  #After BungeeCord sync is turned on, the console and other plugins will not be able to modify the balance in the server without player
  #Please Set bungeecord to true in the spigot.yml
  #==================================================   Redis  Channel   ==================================================
  #Require 'slf4j' dependencies
  channel-type: Redis
  #Server ID, keep the ID and the MySQL settings is the same between the servers requiring synchronization
  sign: aa

#Region-Thread settings(Only effective for Folia server)
Region-Thread:
  #When executing synchronized threads, a coordinate will be randomly selected within the specified range below to perform.
  world: world
  range-x: 1024
  range-y: 1024
gerolndnr commented 1 month ago

I tried to fix it myself in #139