Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
MythicCraft
MythicCosmetics
Commits
b9c3cb26
Commit
b9c3cb26
authored
3 years ago
by
Ticxo
Browse files
Options
Download
Email Patches
Plain Diff
back stuff
parent
a142cd71
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
221 additions
and
93 deletions
+221
-93
api/src/main/java/io/lumine/cosmetics/api/players/CosmeticInventory.java
...va/io/lumine/cosmetics/api/players/CosmeticInventory.java
+7
-5
plugin/src/main/java/io/lumine/cosmetics/nms/VolatileCodeDisabled.java
...in/java/io/lumine/cosmetics/nms/VolatileCodeDisabled.java
+7
-0
plugin/src/main/java/io/lumine/cosmetics/nms/VolatileCodeHandler.java
...ain/java/io/lumine/cosmetics/nms/VolatileCodeHandler.java
+4
-1
plugin/src/main/java/io/lumine/cosmetics/nms/cosmetic/VolatileBackHelper.java
.../io/lumine/cosmetics/nms/cosmetic/VolatileBackHelper.java
+9
-0
plugin/src/main/java/io/lumine/cosmetics/nms/cosmetic/VolatileHatHelper.java
...a/io/lumine/cosmetics/nms/cosmetic/VolatileHatHelper.java
+10
-10
plugin/src/main/java/io/lumine/cosmetics/players/inventory/DigitalInventory.java
.../lumine/cosmetics/players/inventory/DigitalInventory.java
+7
-0
v1_18/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_18_R1.java
...io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_18_R1.java
+6
-1
v1_18/src/main/java/io/lumine/cosmetics/nms/v1_18_R1/cosmetic/VolatileBackImpl.java
...ine/cosmetics/nms/v1_18_R1/cosmetic/VolatileBackImpl.java
+21
-0
v1_18/src/main/java/io/lumine/cosmetics/nms/v1_18_R1/cosmetic/VolatileHatImpl.java
...mine/cosmetics/nms/v1_18_R1/cosmetic/VolatileHatImpl.java
+71
-73
v1_18_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_18_R2.java
...io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_18_R2.java
+5
-0
v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileBackImpl.java
...ine/cosmetics/nms/v1_18_R2/cosmetic/VolatileBackImpl.java
+73
-0
v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileHatImpl.java
...mine/cosmetics/nms/v1_18_R2/cosmetic/VolatileHatImpl.java
+1
-3
No files found.
api/src/main/java/io/lumine/cosmetics/api/players/CosmeticInventory.java
View file @
b9c3cb26
...
...
@@ -7,13 +7,15 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic;
public
interface
CosmeticInventory
{
public
void
initialize
(
CosmeticProfile
profile
);
void
initialize
(
CosmeticProfile
profile
);
public
Collection
<
String
>
getUnlocked
(
String
type
);
Collection
<
String
>
getUnlocked
(
String
type
);
public
Optional
<
Cosmetic
>
getCustomEquipped
(
String
type
);
Optional
<
Cosmetic
>
getCustomEquipped
(
String
type
);
public
Optional
<
Cosmetic
>
getEquippedHat
();
Optional
<
Cosmetic
>
getEquippedHat
();
Optional
<
Cosmetic
>
getEquippedBack
();
public
void
equip
(
Cosmetic
cosmetic
);
void
equip
(
Cosmetic
cosmetic
);
}
This diff is collapsed.
Click to expand it.
plugin/src/main/java/io/lumine/cosmetics/nms/VolatileCodeDisabled.java
View file @
b9c3cb26
package
io.lumine.cosmetics.nms
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileBackHelper
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileHatHelper
;
import
org.bukkit.entity.Player
;
public
class
VolatileCodeDisabled
implements
VolatileCodeHandler
{
...
...
@@ -9,6 +11,11 @@ public class VolatileCodeDisabled implements VolatileCodeHandler {
return
null
;
}
@Override
public
VolatileBackHelper
getBackHelper
()
{
return
null
;
}
@Override
public
void
injectPlayer
(
Player
player
)
{
...
...
This diff is collapsed.
Click to expand it.
plugin/src/main/java/io/lumine/cosmetics/nms/VolatileCodeHandler.java
View file @
b9c3cb26
package
io.lumine.cosmetics.nms
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileBackHelper
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileHatHelper
;
import
org.bukkit.entity.Player
;
public
interface
VolatileCodeHandler
{
public
VolatileHatHelper
getHatHelper
();
VolatileHatHelper
getHatHelper
();
VolatileBackHelper
getBackHelper
();
void
injectPlayer
(
Player
player
);
void
removePlayer
(
Player
player
);
...
...
This diff is collapsed.
Click to expand it.
plugin/src/main/java/io/lumine/cosmetics/nms/cosmetic/VolatileBackHelper.java
0 → 100644
View file @
b9c3cb26
package
io.lumine.cosmetics.nms.cosmetic
;
import
io.lumine.cosmetics.api.players.CosmeticProfile
;
public
interface
VolatileBackHelper
{
void
applyBackPacket
(
CosmeticProfile
profile
);
}
This diff is collapsed.
Click to expand it.
plugin/src/main/java/io/lumine/cosmetics/nms/VolatileHatHelper.java
→
plugin/src/main/java/io/lumine/cosmetics/nms/
cosmetic/
VolatileHatHelper.java
View file @
b9c3cb26
package
io.lumine.cosmetics.nms
;
import
io.lumine.cosmetics.api.players.CosmeticProfile
;
import
io.lumine.cosmetics.players.Profile
;
public
interface
VolatileHatHelper
{
public
void
applyHatPacket
(
CosmeticProfile
profile
);
}
package
io.lumine.cosmetics.nms
.cosmetic
;
import
io.lumine.cosmetics.api.players.CosmeticProfile
;
import
io.lumine.cosmetics.players.Profile
;
public
interface
VolatileHatHelper
{
public
void
applyHatPacket
(
CosmeticProfile
profile
);
}
This diff is collapsed.
Click to expand it.
plugin/src/main/java/io/lumine/cosmetics/players/inventory/DigitalInventory.java
View file @
b9c3cb26
...
...
@@ -12,6 +12,7 @@ import io.lumine.cosmetics.MCCosmeticsPlugin;
import
io.lumine.cosmetics.api.cosmetics.Cosmetic
;
import
io.lumine.cosmetics.api.players.CosmeticProfile
;
import
io.lumine.cosmetics.api.players.CosmeticInventory
;
import
io.lumine.cosmetics.managers.back.BackAccessory
;
import
io.lumine.cosmetics.managers.hats.Hat
;
import
io.lumine.utils.serialize.Optl
;
import
lombok.Getter
;
...
...
@@ -21,6 +22,7 @@ public class DigitalInventory implements CosmeticInventory {
@Getter
private
transient
CosmeticProfile
profile
;
private
transient
Optl
<
Hat
>
equippedHat
;
private
transient
Optl
<
BackAccessory
>
equippedBack
;
private
transient
final
Map
<
String
,
Cosmetic
>
equippedCustom
=
Maps
.
newConcurrentMap
();
@Getter
private
Map
<
String
,
List
<
String
>>
unlockedCosmetics
=
Maps
.
newConcurrentMap
();
...
...
@@ -71,6 +73,11 @@ public class DigitalInventory implements CosmeticInventory {
return
Optional
.
ofNullable
(
equippedHat
.
orElseGet
(
null
));
}
@Override
public
Optional
<
Cosmetic
>
getEquippedBack
()
{
return
Optional
.
ofNullable
(
equippedBack
.
orElseGet
(
null
));
}
@Override
public
Collection
<
String
>
getUnlocked
(
String
type
)
{
return
unlockedCosmetics
.
getOrDefault
(
type
,
Lists
.
newArrayList
());
...
...
This diff is collapsed.
Click to expand it.
v1_18/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_18_R1.java
View file @
b9c3cb26
package
io.lumine.cosmetics.nms
;
import
io.lumine.cosmetics.MCCosmeticsPlugin
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileBackHelper
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileHatHelper
;
import
io.lumine.cosmetics.nms.v1_18_R1.cosmetic.VolatileBackImpl
;
import
io.lumine.cosmetics.nms.v1_18_R1.network.VolatileChannelHandler
;
import
io.lumine.cosmetics.nms.v1_18_R1.VolatileHatImpl
;
import
io.lumine.cosmetics.nms.v1_18_R1.
cosmetic.
VolatileHatImpl
;
import
io.netty.channel.Channel
;
import
io.netty.channel.ChannelPipeline
;
import
lombok.Getter
;
...
...
@@ -15,10 +18,12 @@ public class VolatileCodeEnabled_v1_18_R1 implements VolatileCodeHandler {
@Getter
private
final
MCCosmeticsPlugin
plugin
;
@Getter
private
final
VolatileHatHelper
hatHelper
;
@Getter
private
final
VolatileBackHelper
backHelper
;
public
VolatileCodeEnabled_v1_18_R1
(
MCCosmeticsPlugin
plugin
)
{
this
.
plugin
=
plugin
;
this
.
hatHelper
=
new
VolatileHatImpl
(
plugin
);
this
.
backHelper
=
new
VolatileBackImpl
(
plugin
);
}
@Override
...
...
This diff is collapsed.
Click to expand it.
v1_18/src/main/java/io/lumine/cosmetics/nms/v1_18_R1/cosmetic/VolatileBackImpl.java
0 → 100644
View file @
b9c3cb26
package
io.lumine.cosmetics.nms.v1_18_R1.cosmetic
;
import
io.lumine.cosmetics.MCCosmeticsPlugin
;
import
io.lumine.cosmetics.api.players.CosmeticProfile
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileBackHelper
;
import
lombok.Getter
;
public
class
VolatileBackImpl
implements
VolatileBackHelper
{
@Getter
private
final
MCCosmeticsPlugin
plugin
;
public
VolatileBackImpl
(
MCCosmeticsPlugin
plugin
)
{
this
.
plugin
=
plugin
;
}
@Override
public
void
applyBackPacket
(
CosmeticProfile
profile
)
{
}
}
This diff is collapsed.
Click to expand it.
v1_18/src/main/java/io/lumine/cosmetics/nms/v1_18_R1/VolatileHatImpl.java
→
v1_18/src/main/java/io/lumine/cosmetics/nms/v1_18_R1/
cosmetic/
VolatileHatImpl.java
View file @
b9c3cb26
package
io.lumine.cosmetics.nms.v1_18_R1
;
import
java.util.List
;
import
org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack
;
import
org.bukkit.entity.Player
;
import
org.bukkit.inventory.ItemStack
;
import
com.comphenix.protocol.PacketType
;
import
com.comphenix.protocol.events.PacketContainer
;
import
com.google.common.collect.Lists
;
import
com.mojang.datafixers.util.Pair
;
import
io.lumine.cosmetics.MCCosmeticsPlugin
;
import
io.lumine.cosmetics.api.players.CosmeticProfile
;
import
io.lumine.cosmetics.nms.VolatileHatHelper
;
import
io.lumine.cosmetics.players.Profile
;
import
io.lumine.utils.protocol.Protocol
;
import
lombok.Getter
;
import
net.minecraft.world.entity.EquipmentSlot
;
public
class
VolatileHatImpl
implements
VolatileHatHelper
{
@Getter
private
final
MCCosmeticsPlugin
plugin
;
public
VolatileHatImpl
(
MCCosmeticsPlugin
plugin
)
{
this
.
plugin
=
plugin
;
}
@Override
public
void
applyHatPacket
(
CosmeticProfile
profile
)
{
if
(
profile
==
null
)
{
return
;
}
final
var
player
=
profile
.
getPlayer
();
final
var
packet
=
Protocol
.
manager
().
createPacket
(
PacketType
.
Play
.
Server
.
ENTITY_EQUIPMENT
);
packet
.
getEntityModifier
(
player
.
getWorld
()).
write
(
0
,
player
);
/*
if(profile.getHat().isPresent()) {
profile.setHatIsActive(true);
writeHeadItem(packet, profile.getEquippedHat());
Protocol.broadcastPacket(packet);
} else if(profile.getHatIsActive()) {
writeHeadItem(packet, player.getInventory().getHelmet());
Protocol.broadcastPacket(packet);
}*/
}
public
boolean
writeHeadItem
(
PacketContainer
packet
,
ItemStack
item
)
{
List
<
Pair
<
EquipmentSlot
,
net
.
minecraft
.
world
.
item
.
ItemStack
>>
slots
=
(
List
<
Pair
<
EquipmentSlot
,
net
.
minecraft
.
world
.
item
.
ItemStack
>>)
packet
.
getModifier
().
read
(
1
);
List
<
Pair
<
EquipmentSlot
,
net
.
minecraft
.
world
.
item
.
ItemStack
>>
newSlots
=
Lists
.
newArrayList
();
boolean
foundHead
=
false
;
for
(
Pair
<
EquipmentSlot
,
net
.
minecraft
.
world
.
item
.
ItemStack
>
pair
:
slots
)
{
final
EquipmentSlot
slot
=
pair
.
getFirst
();
if
(
slot
==
EquipmentSlot
.
HEAD
)
{
foundHead
=
true
;
newSlots
.
add
(
Pair
.
of
(
pair
.
getFirst
(),
CraftItemStack
.
asNMSCopy
(
item
)));
}
else
{
newSlots
.
add
(
pair
);
}
}
if
(!
foundHead
)
{
newSlots
.
add
(
Pair
.
of
(
EquipmentSlot
.
HEAD
,
CraftItemStack
.
asNMSCopy
(
item
)));
}
packet
.
getModifier
().
write
(
1
,
newSlots
);
return
true
;
}
}
package
io.lumine.cosmetics.nms.v1_18_R1.cosmetic
;
import
java.util.List
;
import
org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack
;
import
org.bukkit.inventory.ItemStack
;
import
com.comphenix.protocol.PacketType
;
import
com.comphenix.protocol.events.PacketContainer
;
import
com.google.common.collect.Lists
;
import
com.mojang.datafixers.util.Pair
;
import
io.lumine.cosmetics.MCCosmeticsPlugin
;
import
io.lumine.cosmetics.api.players.CosmeticProfile
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileHatHelper
;
import
io.lumine.utils.protocol.Protocol
;
import
lombok.Getter
;
import
net.minecraft.world.entity.EquipmentSlot
;
public
class
VolatileHatImpl
implements
VolatileHatHelper
{
@Getter
private
final
MCCosmeticsPlugin
plugin
;
public
VolatileHatImpl
(
MCCosmeticsPlugin
plugin
)
{
this
.
plugin
=
plugin
;
}
@Override
public
void
applyHatPacket
(
CosmeticProfile
profile
)
{
if
(
profile
==
null
)
{
return
;
}
final
var
player
=
profile
.
getPlayer
();
final
var
packet
=
Protocol
.
manager
().
createPacket
(
PacketType
.
Play
.
Server
.
ENTITY_EQUIPMENT
);
packet
.
getEntityModifier
(
player
.
getWorld
()).
write
(
0
,
player
);
/*
if(profile.getHat().isPresent()) {
profile.setHatIsActive(true);
writeHeadItem(packet, profile.getEquippedHat());
Protocol.broadcastPacket(packet);
} else if(profile.getHatIsActive()) {
writeHeadItem(packet, player.getInventory().getHelmet());
Protocol.broadcastPacket(packet);
}*/
}
public
boolean
writeHeadItem
(
PacketContainer
packet
,
ItemStack
item
)
{
List
<
Pair
<
EquipmentSlot
,
net
.
minecraft
.
world
.
item
.
ItemStack
>>
slots
=
(
List
<
Pair
<
EquipmentSlot
,
net
.
minecraft
.
world
.
item
.
ItemStack
>>)
packet
.
getModifier
().
read
(
1
);
List
<
Pair
<
EquipmentSlot
,
net
.
minecraft
.
world
.
item
.
ItemStack
>>
newSlots
=
Lists
.
newArrayList
();
boolean
foundHead
=
false
;
for
(
Pair
<
EquipmentSlot
,
net
.
minecraft
.
world
.
item
.
ItemStack
>
pair
:
slots
)
{
final
EquipmentSlot
slot
=
pair
.
getFirst
();
if
(
slot
==
EquipmentSlot
.
HEAD
)
{
foundHead
=
true
;
newSlots
.
add
(
Pair
.
of
(
pair
.
getFirst
(),
CraftItemStack
.
asNMSCopy
(
item
)));
}
else
{
newSlots
.
add
(
pair
);
}
}
if
(!
foundHead
)
{
newSlots
.
add
(
Pair
.
of
(
EquipmentSlot
.
HEAD
,
CraftItemStack
.
asNMSCopy
(
item
)));
}
packet
.
getModifier
().
write
(
1
,
newSlots
);
return
true
;
}
}
This diff is collapsed.
Click to expand it.
v1_18_R2/src/main/java/io/lumine/cosmetics/nms/VolatileCodeEnabled_v1_18_R2.java
View file @
b9c3cb26
package
io.lumine.cosmetics.nms
;
import
io.lumine.cosmetics.MCCosmeticsPlugin
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileBackHelper
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileHatHelper
;
import
io.lumine.cosmetics.nms.v1_18_R2.cosmetic.VolatileBackImpl
;
import
io.lumine.cosmetics.nms.v1_18_R2.cosmetic.VolatileHatImpl
;
import
io.lumine.cosmetics.nms.v1_18_R2.network.VolatileChannelHandler
;
import
io.lumine.utils.reflection.Reflector
;
...
...
@@ -23,12 +26,14 @@ public class VolatileCodeEnabled_v1_18_R2 implements VolatileCodeHandler {
@Getter
private
final
MCCosmeticsPlugin
plugin
;
@Getter
private
final
VolatileHatHelper
hatHelper
;
@Getter
private
final
VolatileBackHelper
backHelper
;
private
Reflector
<
ServerLevel
>
refServerLevel
=
new
Reflector
<>(
ServerLevel
.
class
,
"O"
);
public
VolatileCodeEnabled_v1_18_R2
(
MCCosmeticsPlugin
plugin
)
{
this
.
plugin
=
plugin
;
this
.
hatHelper
=
new
VolatileHatImpl
(
plugin
,
this
);
this
.
backHelper
=
new
VolatileBackImpl
(
plugin
,
this
);
}
@Override
...
...
This diff is collapsed.
Click to expand it.
v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileBackImpl.java
0 → 100644
View file @
b9c3cb26
package
io.lumine.cosmetics.nms.v1_18_R2.cosmetic
;
import
com.mojang.datafixers.util.Pair
;
import
io.lumine.cosmetics.MCCosmeticsPlugin
;
import
io.lumine.cosmetics.api.cosmetics.Cosmetic
;
import
io.lumine.cosmetics.api.cosmetics.ItemCosmetic
;
import
io.lumine.cosmetics.api.players.CosmeticProfile
;
import
io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_18_R2
;
import
io.lumine.cosmetics.nms.cosmetic.VolatileBackHelper
;
import
io.netty.buffer.EmptyByteBuf
;
import
io.netty.buffer.Unpooled
;
import
lombok.Getter
;
import
net.minecraft.network.FriendlyByteBuf
;
import
net.minecraft.network.protocol.game.ClientboundAddMobPacket
;
import
net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket
;
import
net.minecraft.network.protocol.game.ClientboundSetPassengersPacket
;
import
net.minecraft.world.entity.EntityType
;
import
net.minecraft.world.entity.EquipmentSlot
;
import
net.minecraft.world.entity.decoration.ArmorStand
;
import
org.bukkit.craftbukkit.v1_18_R2.CraftWorld
;
import
org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack
;
import
org.bukkit.entity.Player
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Optional
;
public
class
VolatileBackImpl
implements
VolatileBackHelper
{
@Getter
private
final
MCCosmeticsPlugin
plugin
;
private
final
VolatileCodeEnabled_v1_18_R2
nmsHandler
;
private
final
Map
<
Player
,
ArmorStand
>
activeProfile
=
new
HashMap
<>();
public
VolatileBackImpl
(
MCCosmeticsPlugin
plugin
,
VolatileCodeEnabled_v1_18_R2
nmsHandler
)
{
this
.
plugin
=
plugin
;
this
.
nmsHandler
=
nmsHandler
;
}
@Override
public
void
applyBackPacket
(
CosmeticProfile
profile
)
{
if
(
profile
==
null
)
return
;
Player
player
=
profile
.
getPlayer
();
Optional
<
Cosmetic
>
cosmetic
=
profile
.
getCosmeticInventory
().
getEquippedBack
();
if
(
cosmetic
.
isEmpty
()
||
!(
cosmetic
.
get
()
instanceof
ItemCosmetic
back
))
return
;
var
nmsBack
=
CraftItemStack
.
asNMSCopy
(
back
.
getCosmetic
());
ArmorStand
stand
=
new
ArmorStand
(
EntityType
.
ARMOR_STAND
,
((
CraftWorld
)
player
.
getWorld
()).
getHandle
());
stand
.
setMarker
(
true
);
stand
.
setInvisible
(
true
);
stand
.
setSilent
(
true
);
stand
.
setItemSlot
(
EquipmentSlot
.
HEAD
,
nmsBack
);
activeProfile
.
put
(
player
,
stand
);
ClientboundAddMobPacket
mobPacket
=
new
ClientboundAddMobPacket
(
stand
);
ClientboundSetEquipmentPacket
equipmentPacket
=
new
ClientboundSetEquipmentPacket
(
stand
.
getId
(),
List
.
of
(
Pair
.
of
(
EquipmentSlot
.
HEAD
,
nmsBack
)));
FriendlyByteBuf
bb
=
new
FriendlyByteBuf
(
Unpooled
.
buffer
());
bb
.
writeVarInt
(
player
.
getEntityId
());
bb
.
writeVarIntArray
(
new
int
[]
{
stand
.
getId
()
});
ClientboundSetPassengersPacket
passengersPacket
=
new
ClientboundSetPassengersPacket
(
bb
);
nmsHandler
.
broadcast
(
player
.
getWorld
(),
mobPacket
,
equipmentPacket
,
passengersPacket
);
}
}
This diff is collapsed.
Click to expand it.
v1_18_R2/src/main/java/io/lumine/cosmetics/nms/v1_18_R2/cosmetic/VolatileHatImpl.java
View file @
b9c3cb26
...
...
@@ -6,10 +6,8 @@ import io.lumine.cosmetics.api.cosmetics.Cosmetic;
import
io.lumine.cosmetics.api.cosmetics.ItemCosmetic
;
import
io.lumine.cosmetics.api.players.CosmeticProfile
;
import
io.lumine.cosmetics.nms.VolatileCodeEnabled_v1_18_R2
;
import
io.lumine.cosmetics.nms.VolatileHatHelper
;
import
io.lumine.cosmetics.nms.
cosmetic.
VolatileHatHelper
;
import
io.lumine.cosmetics.players.Profile
;
import
io.lumine.utils.Events
;
import
io.lumine.utils.Schedulers
;
import
lombok.Getter
;
import
net.minecraft.network.protocol.game.ClientboundAddPlayerPacket
;
import
net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket
;
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment