-
Notifications
You must be signed in to change notification settings - Fork 5
[REFERENCE ONLY DO NOT REVIEW!!!] Implement Mojang WebAPI, common user root class, and playerheads #56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
[REFERENCE ONLY DO NOT REVIEW!!!] Implement Mojang WebAPI, common user root class, and playerheads #56
Changes from 3 commits
5972a00
b8a5bf6
8dae48a
7d74d10
3db73ff
004fbf0
b014f6b
329515f
ab69d97
67a9c4b
680655b
8c113ec
ac010e4
0b15f04
b6f0496
6d4bcec
c4a023e
0fb226b
c44992f
b278a81
8c6b7b5
786590d
cacaefb
ade9f94
223a6f9
84c0b3b
6b4316f
42b1739
d16c439
3aaa25b
6fc4385
263164b
26c8415
614816b
e6a97e1
94683c6
aa23150
7f2cab7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| /* | ||
| * Copyright (c) 2020 DumbDogDiner <dumbdogdiner.com>. All rights reserved. | ||
| * Licensed under the MIT license, see LICENSE for more information... | ||
| */ | ||
| package com.dumbdogdiner.stickyapi.bukkit.item.generator; | ||
|
|
||
| import com.destroystokyo.paper.profile.PlayerProfile; | ||
| import com.destroystokyo.paper.profile.ProfileProperty; | ||
| import com.dumbdogdiner.stickyapi.common.util.textures.MobHead; | ||
| import org.bukkit.Bukkit; | ||
| import org.bukkit.Material; | ||
| import org.bukkit.inventory.ItemStack; | ||
| import org.bukkit.inventory.meta.SkullMeta; | ||
|
|
||
| import java.util.UUID; | ||
|
|
||
| public class MobHeadGenerator { | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. MobHeadBuilder? |
||
| private SkullMeta meta = (SkullMeta) (new ItemStack(Material.PLAYER_HEAD, 1)).getItemMeta(); | ||
| private PlayerProfile profile = Bukkit.createProfile(new UUID(0,0), null); | ||
|
|
||
|
|
||
|
|
||
| public MobHeadGenerator(MobHead head){ | ||
| profile.setName(head.getName()); | ||
| profile.setProperty(new ProfileProperty("texture", head.getTexture())); | ||
| meta.setPlayerProfile(profile); | ||
| meta.setDisplayName(head.getName()); | ||
| } | ||
|
|
||
| public ItemStack getHead(){ | ||
| return getHead(1); | ||
| } | ||
|
|
||
| public ItemStack getHead(int amount){ | ||
| ItemStack head = new ItemStack(Material.PLAYER_HEAD, amount); | ||
| head.setItemMeta(meta); | ||
| return null; | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,96 @@ | ||||||||||
| /* | ||||||||||
| * Copyright (c) 2020 DumbDogDiner <dumbdogdiner.com>. All rights reserved. | ||||||||||
| * Licensed under the MIT license, see LICENSE for more information... | ||||||||||
| */ | ||||||||||
| package com.dumbdogdiner.stickyapi.bukkit.item.generator; | ||||||||||
|
|
||||||||||
| import com.destroystokyo.paper.profile.PlayerProfile; | ||||||||||
| import com.destroystokyo.paper.profile.ProfileProperty; | ||||||||||
| import com.dumbdogdiner.stickyapi.bukkit.user.StickyUserBukkit; | ||||||||||
| import org.bukkit.Bukkit; | ||||||||||
| import org.bukkit.Material; | ||||||||||
| import org.bukkit.OfflinePlayer; | ||||||||||
| import org.bukkit.entity.Player; | ||||||||||
| import org.bukkit.inventory.ItemStack; | ||||||||||
| import org.bukkit.inventory.meta.SkullMeta; | ||||||||||
| import com.google.gson.Gson; | ||||||||||
|
|
||||||||||
| import java.net.URL; | ||||||||||
| import java.util.Base64; | ||||||||||
| import java.util.UUID; | ||||||||||
|
|
||||||||||
| public class PlayerHeadGenerator { | ||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||
| private SkullMeta meta = (SkullMeta) (new ItemStack(Material.PLAYER_HEAD, 1)).getItemMeta(); | ||||||||||
|
|
||||||||||
| PlayerProfile ownerProfile; | ||||||||||
|
kaylendog marked this conversation as resolved.
Outdated
|
||||||||||
|
|
||||||||||
| public PlayerHeadGenerator(UUID playerId){ | ||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Use annotations please, this is for Kotlin support. |
||||||||||
| meta.setOwningPlayer(Bukkit.getOfflinePlayer(playerId)); | ||||||||||
| ownerProfile = Bukkit.getServer().createProfile(playerId); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| public PlayerHeadGenerator(Player player){ | ||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| this(Bukkit.getOfflinePlayer(player.getUniqueId())); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| public PlayerHeadGenerator(StickyUserBukkit player){ | ||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There must be a better way to do this aside from implementing an API-specific user. |
||||||||||
| meta.setOwningPlayer(player.getAsBukkitPlayer()); | ||||||||||
| ownerProfile = player.getAsBukkitPlayer().getPlayerProfile(); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| public PlayerHeadGenerator(OfflinePlayer player){ | ||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| meta.setOwningPlayer(player); | ||||||||||
| ownerProfile = Bukkit.createProfile(player.getUniqueId()); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| public PlayerHeadGenerator(ItemStack head){ | ||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| if(head.getType() != Material.PLAYER_HEAD && head.getType() != Material.PLAYER_WALL_HEAD) | ||||||||||
| throw new IllegalArgumentException("head must be a player head or player wall head"); | ||||||||||
| meta = (SkullMeta) head.getItemMeta(); | ||||||||||
| meta.getPlayerProfile(); | ||||||||||
| if(!ownerProfile.hasTextures()){ | ||||||||||
| if(!ownerProfile.complete()){ | ||||||||||
| throw new IllegalArgumentException("Invalid player profile attached to the head, with no UUID or textures!"); | ||||||||||
| } | ||||||||||
| } | ||||||||||
| } | ||||||||||
|
|
||||||||||
|
|
||||||||||
| public void setTexture(URL textureURL){ | ||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| // {"textures":{"SKIN":{"url":"http://textures.minecraft.net/texture/63d621100fea5883922e78bb448056448c983e3f97841948a2da747d6b08b8ab"}}} | ||||||||||
| class textures { | ||||||||||
| SKIN skn; | ||||||||||
| public textures(String url){ | ||||||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| skn = new SKIN(url); | ||||||||||
| } | ||||||||||
| class SKIN{ | ||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| String url; | ||||||||||
| public SKIN(String s){ | ||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| url = s; | ||||||||||
| } | ||||||||||
| } | ||||||||||
| } | ||||||||||
|
|
||||||||||
| setTexture(new String(Base64.getEncoder().encode(new Gson().toJson(new textures(textureURL.toString())).getBytes()))); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| /** | ||||||||||
| * Set the texture with a pre-encoded string | ||||||||||
| * @param texture Base64 string of the json of texture location | ||||||||||
| */ | ||||||||||
| public void setTexture(String texture){ | ||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| ownerProfile.setProperty(new ProfileProperty("texture", texture)); | ||||||||||
| meta.setPlayerProfile(ownerProfile); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| public ItemStack getHead(){ | ||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| return getHead(1); | ||||||||||
| } | ||||||||||
|
|
||||||||||
| public ItemStack getHead(int amount){ | ||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||
| ItemStack head = new ItemStack(Material.PLAYER_HEAD, amount); | ||||||||||
| head.setItemMeta(meta); | ||||||||||
| return null; | ||||||||||
| } | ||||||||||
|
|
||||||||||
| } | ||||||||||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,81 @@ | ||||||
| /* | ||||||
| * Copyright (c) 2020 DumbDogDiner <dumbdogdiner.com>. All rights reserved. | ||||||
| * Licensed under the MIT license, see LICENSE for more information... | ||||||
| */ | ||||||
| package com.dumbdogdiner.stickyapi.bukkit.user; | ||||||
|
|
||||||
| import com.dumbdogdiner.stickyapi.bukkit.item.generator.PlayerHeadGenerator; | ||||||
| import com.dumbdogdiner.stickyapi.common.user.StickyUser; | ||||||
| import org.bukkit.Bukkit; | ||||||
| import org.bukkit.Location; | ||||||
| import org.bukkit.OfflinePlayer; | ||||||
| import org.bukkit.Sound; | ||||||
| import org.bukkit.entity.Player; | ||||||
| import org.bukkit.inventory.ItemStack; | ||||||
| import org.jetbrains.annotations.NotNull; | ||||||
|
|
||||||
| import java.util.UUID; | ||||||
|
|
||||||
| public class StickyUserBukkit extends StickyUser { | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I thought we decided not to do this?
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We definitely decided not to do this.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why is this still here?
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That should be gone in latest |
||||||
| public StickyUserBukkit(Player p) { | ||||||
| super(p.getUniqueId(), p.getName()); | ||||||
| } | ||||||
|
|
||||||
| public StickyUserBukkit(OfflinePlayer p) { | ||||||
| super(p.getUniqueId(), p.getName()); | ||||||
| } | ||||||
|
|
||||||
| public StickyUserBukkit(StickyUser p){ | ||||||
| super(p); | ||||||
| } | ||||||
|
|
||||||
| public StickyUserBukkit(UUID uniqueId){ | ||||||
| super(uniqueId); | ||||||
| } | ||||||
|
|
||||||
| public boolean isOnline(){ | ||||||
| return getAsOfflinePlayer().isOnline(); | ||||||
| } | ||||||
|
|
||||||
| public boolean isBanned(){ | ||||||
| return getAsOfflinePlayer().isBanned(); | ||||||
| } | ||||||
|
|
||||||
| public boolean playSound(@NotNull Location location, @NotNull Sound sound, float v, float v1){ | ||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A more explicit variable name for
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @NotZachery this is your code, I moved it here
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Doesn't matter who wrote it, a more explicit variable name would be preferable.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. fixed |
||||||
| if(!isOnline()) | ||||||
| return false; | ||||||
| getAsBukkitPlayer().playSound(location, sound, v, v1); | ||||||
| return true; | ||||||
| } | ||||||
|
|
||||||
| public boolean sendMessage(String [] msgs){ | ||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| if(!isOnline()) | ||||||
| return false; | ||||||
| getAsBukkitPlayer().sendMessage(msgs); | ||||||
| return true; | ||||||
| } | ||||||
|
|
||||||
| public boolean sendMessage(String msg){ | ||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| if(!isOnline()) | ||||||
| return false; | ||||||
| getAsBukkitPlayer().sendMessage(msg); | ||||||
| return true; | ||||||
| } | ||||||
|
|
||||||
| public boolean sendRawMessage(String msg){ | ||||||
| if(!isOnline()) | ||||||
| return false; | ||||||
| getAsBukkitPlayer().sendRawMessage(msg); | ||||||
| return true; | ||||||
| } | ||||||
|
|
||||||
| public ItemStack getHead(){ | ||||||
| return getHead(1); | ||||||
| } | ||||||
| public ItemStack getHead(int amt){ | ||||||
| PlayerHeadGenerator gen = new PlayerHeadGenerator(this); | ||||||
| return gen.getHead(amt); | ||||||
| } | ||||||
|
|
||||||
|
|
||||||
| } | ||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| /* | ||
| * Copyright (c) 2020 DumbDogDiner <dumbdogdiner.com>. All rights reserved. | ||
| * Licensed under the MIT license, see LICENSE for more information... | ||
| */ | ||
| package com.dumbdogdiner.stickyapi.bungeecord.user; | ||
|
|
||
| import com.dumbdogdiner.stickyapi.common.user.StickyUser; | ||
| import com.dumbdogdiner.stickyapi.common.webapis.MojangAPI; | ||
| import net.md_5.bungee.api.ProxyServer; | ||
| import net.md_5.bungee.api.connection.ProxiedPlayer; | ||
|
|
||
| import java.util.UUID; | ||
|
|
||
| public class StickyUserBungee extends StickyUser { | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. see above
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. See above again |
||
| public StickyUserBungee(UUID uniqueId) { | ||
| super(uniqueId); | ||
| } | ||
|
|
||
| public StickyUserBungee(ProxiedPlayer p) { | ||
| super(p.getUniqueId(), p.getName()); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| /* | ||
| * Copyright (c) 2020 DumbDogDiner <dumbdogdiner.com>. All rights reserved. | ||
| * Licensed under the MIT license, see LICENSE for more information... | ||
| */ | ||
| package com.dumbdogdiner.stickyapi.common.user; | ||
|
|
||
| import com.dumbdogdiner.stickyapi.bukkit.user.StickyUserBukkit; | ||
| import com.dumbdogdiner.stickyapi.common.cache.Cacheable; | ||
| import lombok.Getter; | ||
| import org.bukkit.Bukkit; | ||
| import org.bukkit.OfflinePlayer; | ||
| import org.bukkit.entity.Player; | ||
|
|
||
| import java.util.UUID; | ||
|
|
||
| public class StickyUser implements Cacheable { | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. see above
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The problem with a class like this is it effectively does nothing. Craftbukkit caches players, and this is doing this too i.e. it will barely be any quicker. Yes, if the server needs to fetch an entire profile, the stock implementation will be slower. However, there are better ways to do this than how it's being done here. We have discussed having plugin APIs before, but I vote this is the best solution. It is much better to exchange what data a plugin needs with another than to extend everything, despite not needing 90% of that information.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is very useful to cache OFFLINE users especially. Every plugin's user should have a few specific methods, namely getters for UUID, and if it's done via inheritance, it allows a plugin api to generically take any other plugin's user and compare stuff.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You don't need to do that if you have plugins implement methods that take UUIDs. The plugins can cache their own data on offline users.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A lot of the time, retrieving cached offline user data for each plugin will require a database request, there's no real way to get around that. If they're written properly, they'll then cache that themselves.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For retrieving just user names and the last login time from bukkit doesn't require a database. A plugin can be written to use one, but it doesn't have to.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As far as the root class vs passing UUIDs: StickyWalletUser swu = getTransactionUser(something); // just go with it mkay
StickyCommands.getInstance().isAFK(swu);or (new StickyCommands.User(getTransactionUser(something))).isAFK();is cleaner than (new StickyCommands.User(getTransactionUser(something).getUniqueId())).isAFK();
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @aakatz3
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. bump |
||
| @Getter | ||
| protected UUID uniqueId; | ||
|
|
||
| @Getter | ||
| protected String name; | ||
|
|
||
| public StickyUser(UUID uniqueId) { | ||
| this.uniqueId = uniqueId; | ||
| this.name = null; | ||
| } | ||
|
|
||
| public StickyUser(StickyUser p){ | ||
| uniqueId = p.getUniqueId(); | ||
| name = p.getName(); | ||
| } | ||
|
|
||
| protected StickyUser(UUID uniqueId, String userName) { | ||
| this.uniqueId = uniqueId; | ||
| this.name = userName; | ||
| } | ||
|
|
||
|
|
||
| public Player getAsBukkitPlayer(){ | ||
| return Bukkit.getPlayer(uniqueId); | ||
| } | ||
|
|
||
| public OfflinePlayer getAsOfflinePlayer(){ | ||
| return Bukkit.getOfflinePlayer(uniqueId); | ||
| } | ||
|
|
||
| public StickyUserBukkit getAsBukkitUser(){ | ||
| return new StickyUserBukkit(this); | ||
| } | ||
|
|
||
| @Override | ||
| public String getKey() { | ||
| return uniqueId.toString(); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,18 @@ | ||||||
| /* | ||||||
| * Copyright (c) 2020 DumbDogDiner <dumbdogdiner.com>. All rights reserved. | ||||||
| * Licensed under the MIT license, see LICENSE for more information... | ||||||
| */ | ||||||
| package com.dumbdogdiner.stickyapi.common.util.textures; | ||||||
|
|
||||||
| import lombok.Getter; | ||||||
|
|
||||||
| public enum DefaultSkins { | ||||||
|
kaylendog marked this conversation as resolved.
Outdated
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Move to resources please.
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What format should these be in in resources? SQLite DB??
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. JSON.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if this was moved to resources, please remove this class |
||||||
| STEVE("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"), | ||||||
| ALEX("iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFhElEQVR4Xu1a328UVRjdR6UUKJFIKL90oa4Vs1TwgRItUvlljMYSjVIDBAzUloZkg5pIDFWJUE3UpyaQiokJSWM0PPjrwcAjT/2fPufc2TN++82dGcruTrfbOcnJ3L33u7f3nPvd2dm5LZUyMLitV8Bdm59wV5bBHRt65JNj1VTa8VYcKLi6Y72jNgCEyMlDe+Wbk/ujK9hVBlD8wJY1iQaUy+UGoq4rDODq223Auq43QItFBoB6O6wKA3ziswwYqwx0jwEU/vzWta6Mu781wMeuMYDCNZkZ+ivPRztex6HSv0ZAiHquv8eJfam8QV7cGbK6s1de2B7eBypbe9yNELGogwGMQx/0xRho57g0Kuk5ws4nd2gDwD3b1zkhELhvV5+7kvh8eHCjjAxucnEwhDHogzqOow1Ie46w88kdbtKbw1ULhQfC+rHS/Nwrf89ekvvf1+Th3Izc/64WlK/Ib5+ekv27N7oYxKIP+kbbJRgTY0Nw2nOEnU/ucCu1JUjlbevCVe0PtwLK1Wf75NcvLsif16fd9feZaZmvfSj/ztZk/uM3HRGDWPRBX5QxFsbE56znCDuf3MFUDbfBWik//aTceH9Y5s8fkeHKU048MPbKrPx19aITjzIAUxCDWPRBX4yhx9RiuT30drDzyR3RZIMVC9O2T66PDcncmdfk5qkDgbij8sfVc/LPV7Xo6+3BzUvyy+QxmQme+RGDWPRBX4zB1acBPvEdYwDTHml7brQqP02+LbfPvx79oPnx9Ggg8JB8dvjlBv5w+lX58uQBF4NY9EFfjOG2QH07UHzSc4SdT+7grzeKnr943K3otx8clCvHq3L5yB6ZHh10YsHP39onX7970BFlxCD254kTru/tj94Ir/XxaCQzgKRxdj7LjvdOLIpmpVJpoI2PYXEx9jAUPRQFbaWzZ9OZhYWFcBwwKGNLvjO0O7ra8CWjFQbYR2KyJQZQfJ2r24AgA7R49zeaRSsMsKnfzi3QtAF7KzUBB54Zd9ejw3cbqNts+/DQrJSuXfuf4+NSunVLSnfuuBsmvip580Sdo44HUQdR5L17Ifk5KZ4xtp39ySxQ4OMYALo/OjEREmVOvG5CJJ4T0vGgFq3JcXQsBbIPDbXtj2NAksCsdu8EOUlMEBmhRep40E5Ykyusx7eG2XY7RhayBGa1u7TnBFDWf5wG6LqkeMZBoC5bgTqb8soAHYN9rxkJITF5LZpl1utYGmBFq/54KCNvBA9f+P2hiTodY9ut3hh8BlCczoBEA7QYmKEN8AnThnEL+PrUU91nwNzl8Ugg61tqgM2AtPaYILv63LPWAKatR7Q2RIuzBuDqM8DV12Os3hgoLElgpgF2D2YZYL8FfLEJBtgVtgb4tojVG8OjGJDWHjOAgqwofk6L91CLSzLAZsiSDBgZGREwSSDrGTc1NdXASBCuzABSr36SATqeMSwH/bQ4a4AzQRnAdr1FrN4YKCxJYFa73iK4WgNBd7NUBuibKttdDLdJQN6EkwygSF+GLJsBvgxqMCEQlhbPGF1nV7jhBhjQd49YkgEFChQoUKBAgQIFChQoUKBAgQLNounDVbwVauXhZ95o2gBz/r/6DNAZsNiGf4BoN1pqwEIb/gWm1eDLTf2WV9O+BOXbXjJ6nU7qV+m+/yewZwfLjUc1IKndidLnBDz9pRG6XZ8krSQD0tpjBmhxMCGtvSsNaPX5f7uhxfkEWgPs8bo+1PCd7fkOPjTtfHIHxfmOupZiQNbRV0cbkJbiWe3WAH2sZQ1ghvBYbEUZQNp2e7hJYVEmqNX3bRE7n9yRJTCr3aa4zwBtUscZwFPjJIGsTzpdbhB/Jr7HG7JDGdQxWyDr+Dyr3bfCOgtWhQGkE6pucK5sMqTVBvwH+QeX13iz8VkAAAAASUVORK5CYII="); | ||||||
|
|
||||||
| @Getter | ||||||
| private final String texture; | ||||||
| DefaultSkins(String t) { | ||||||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| this.texture = t; | ||||||
| } | ||||||
| } | ||||||
Uh oh!
There was an error while loading. Please reload this page.