Skip to content

Commit 7e54eec

Browse files
committed
1.8 R1 Support
Untested
1 parent 7902bdc commit 7e54eec

28 files changed

Lines changed: 2049 additions & 15 deletions

core/src/main/java/be/isach/ultracosmetics/UltraCosmeticsData.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import be.isach.ultracosmetics.util.ServerVersion;
55
import be.isach.ultracosmetics.version.VersionManager;
66
import org.bukkit.Bukkit;
7-
import org.bukkit.plugin.Plugin;
7+
import org.bukkit.ChatColor;
88

99
/**
1010
* Package: be.isach.ultracosmetics.util
@@ -108,15 +108,15 @@ void checkTreasureChests() {
108108
treasureChests = true;
109109
if (!Bukkit.getPluginManager().isPluginEnabled("Vault")
110110
&& (boolean) SettingsManager.getConfig().get("TreasureChests.Loots.Money.Enabled")) {
111-
Bukkit.getConsoleSender().sendMessage("§c§l-------------------------");
112-
Bukkit.getConsoleSender().sendMessage("§c§l");
113-
Bukkit.getConsoleSender().sendMessage("§c§l");
114-
Bukkit.getConsoleSender().sendMessage("§c§lTreasure Chests' Money Loot requires Vault!");
115-
Bukkit.getConsoleSender().sendMessage("§c§l");
116-
Bukkit.getConsoleSender().sendMessage("§c§lMoney Loot is turned off!");
117-
Bukkit.getConsoleSender().sendMessage("§c§l");
118-
Bukkit.getConsoleSender().sendMessage("§c§l");
119-
Bukkit.getConsoleSender().sendMessage("§c§l-------------------------");
111+
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "-------------------------");
112+
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "");
113+
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "");
114+
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "Treasure Chests' Money Loot requires Vault!");
115+
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "");
116+
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "Money Loot is turned off!");
117+
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "");
118+
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "");
119+
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "" + ChatColor.BOLD + "-------------------------");
120120
moneyTreasureLoot = false;
121121
}
122122
}
@@ -137,13 +137,13 @@ void initModule() {
137137

138138
boolean checkServerVersion() {
139139
String bukkVersion = Bukkit.getVersion();
140-
if (!bukkVersion.contains("1.8.8") && !bukkVersion.contains("1.9") && !bukkVersion.contains("1.10")) {
141-
System.out.println("----------------------------\n\nUltraCosmetics requires Spigot 1.8.8 or higher to work!\n\n----------------------------");
140+
if (!bukkVersion.contains("1.8") && !bukkVersion.contains("1.9") && !bukkVersion.contains("1.10")) {
141+
System.out.println("----------------------------\n\nUltraCosmetics requires Spigot 1.8 or higher to work!\n\n----------------------------");
142142
Bukkit.getPluginManager().disablePlugin(ultraCosmetics);
143143
return false;
144144
}
145145

146-
String mcVersion = "1.8.8";
146+
String mcVersion = "1.8.0";
147147

148148
try {
149149
mcVersion = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
@@ -160,7 +160,7 @@ boolean checkServerVersion() {
160160
Bukkit.getPluginManager().disablePlugin(ultraCosmetics);
161161
return true;
162162
}
163-
} else serverVersion = ServerVersion.v1_8_R3;
163+
} else serverVersion = ServerVersion.v1_8_R1;
164164

165165
UltraCosmeticsData.get().setServerVersion(serverVersion);
166166

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
include 'v1_8_R1', 'v1_8_R2', 'v1_8_R3', 'v1_9_R1' , 'v1_9_R2', 'v1_10_R1', 'v1_11_R1', 'core'
2-
rootProject.name = 'UltraCosmetics'
2+
rootProject.name = 'UltraCosmetics'
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package be.isach.ultracosmetics.v1_8_R1;
2+
3+
import be.isach.ultracosmetics.version.IActionBar;
4+
import net.minecraft.server.v1_8_R1.ChatSerializer;
5+
import net.minecraft.server.v1_8_R1.IChatBaseComponent;
6+
import net.minecraft.server.v1_8_R1.PacketPlayOutChat;
7+
import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
8+
import org.bukkit.entity.Player;
9+
10+
/**
11+
* @author RadBuilder
12+
*/
13+
public class ActionBar implements IActionBar {
14+
@Override
15+
public void sendActionMessage(Player player, String message) {
16+
CraftPlayer p = (CraftPlayer) player;
17+
IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + message + "\"}");
18+
PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc, (byte) 2);
19+
p.getHandle().playerConnection.sendPacket(ppoc);
20+
}
21+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package be.isach.ultracosmetics.v1_8_R1;
2+
3+
import be.isach.ultracosmetics.version.AAnvilGUI;
4+
import net.minecraft.server.v1_8_R1.*;
5+
import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
6+
import org.bukkit.entity.Player;
7+
8+
/**
9+
* @author RadBuilder
10+
*/
11+
public class AnvilGUI extends AAnvilGUI{
12+
public AnvilGUI(Player player, AnvilClickEventHandler handler) {
13+
super(player, handler);
14+
}
15+
16+
private class AnvilContainer extends ContainerAnvil {
17+
public AnvilContainer(EntityHuman entity) {
18+
super(entity.inventory, entity.world, new BlockPosition(0, 0, 0), entity);
19+
}
20+
21+
@Override
22+
public boolean a(EntityHuman entityhuman) {
23+
return true;
24+
}
25+
}
26+
27+
@Override
28+
public void open() {
29+
EntityPlayer p = ((CraftPlayer) player).getHandle();
30+
AnvilContainer container = new AnvilContainer(p);
31+
inv = container.getBukkitView().getTopInventory();
32+
for (AnvilSlot slot : items.keySet())
33+
inv.setItem(slot.getSlot(), items.get(slot));
34+
int c = p.nextContainerCounter();
35+
p.playerConnection.sendPacket(new PacketPlayOutOpenWindow(c, "minecraft:anvil", new ChatMessage("Repairing"), 0));
36+
p.activeContainer = container;
37+
p.activeContainer.windowId = c;
38+
p.activeContainer.addSlotListener(p);
39+
}
40+
}
Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
package be.isach.ultracosmetics.v1_8_R1;
2+
3+
import be.isach.ultracosmetics.UltraCosmeticsData;
4+
import be.isach.ultracosmetics.treasurechests.ChestType;
5+
import be.isach.ultracosmetics.treasurechests.TreasureChestDesign;
6+
import be.isach.ultracosmetics.util.MathUtils;
7+
import be.isach.ultracosmetics.util.PacketSender;
8+
import be.isach.ultracosmetics.util.Particles;
9+
import be.isach.ultracosmetics.util.UtilParticles;
10+
import be.isach.ultracosmetics.v1_8_R1.pathfinders.CustomPathFinderGoalPanic;
11+
import be.isach.ultracosmetics.version.IEntityUtil;
12+
import net.minecraft.server.v1_8_R1.*;
13+
import org.bukkit.Bukkit;
14+
import org.bukkit.Location;
15+
import org.bukkit.block.Block;
16+
import org.bukkit.craftbukkit.v1_8_R1.CraftWorld;
17+
import org.bukkit.craftbukkit.v1_8_R1.entity.*;
18+
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftInventory;
19+
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack;
20+
import org.bukkit.craftbukkit.v1_8_R1.util.UnsafeList;
21+
import org.bukkit.entity.*;
22+
import org.bukkit.entity.Entity;
23+
import org.bukkit.inventory.Inventory;
24+
import org.bukkit.inventory.ItemStack;
25+
import org.bukkit.util.Vector;
26+
27+
import java.lang.reflect.Field;
28+
import java.util.*;
29+
30+
/**
31+
* @author RadBuilder
32+
*/
33+
public class EntityUtil implements IEntityUtil {
34+
35+
@Override
36+
public void setPassenger(Entity vehicle, Entity passenger) {
37+
vehicle.setPassenger(passenger);
38+
}
39+
40+
@Override
41+
public void resetWitherSize(Wither wither) {
42+
((CraftWither) wither).getHandle().r(600);
43+
}
44+
45+
@Override
46+
public void setHorseSpeed(Horse horse, double speed) {
47+
((CraftHorse) horse).getHandle().getAttributeInstance(GenericAttributes.d).setValue(speed);
48+
}
49+
50+
Random r = new Random();
51+
Map<Player, List<EntityArmorStand>> fakeArmorStandsMap = new HashMap<>();
52+
Map<Player, List<Entity>> cooldownJumpMap = new HashMap<>();
53+
54+
@Override
55+
public void sendBlizzard(final Player player, Location loc, boolean affectPlayers, Vector v) {
56+
if (!fakeArmorStandsMap.containsKey(player))
57+
fakeArmorStandsMap.put(player, new ArrayList<EntityArmorStand>());
58+
if (!cooldownJumpMap.containsKey(player))
59+
cooldownJumpMap.put(player, new ArrayList<Entity>());
60+
61+
final List<EntityArmorStand> fakeArmorStands = fakeArmorStandsMap.get(player);
62+
final List<Entity> cooldownJump = cooldownJumpMap.get(player);
63+
64+
final EntityArmorStand as = new EntityArmorStand(((CraftWorld) player.getWorld()).getHandle());
65+
as.setInvisible(true);
66+
as.setSmall(true);
67+
as.setGravity(false);
68+
as.setArms(true);
69+
as.setHeadPose(new Vector3f((float) (r.nextInt(360)),
70+
(float) (r.nextInt(360)),
71+
(float) (r.nextInt(360))));
72+
as.setLocation(loc.getX() + MathUtils.randomDouble(-1.5, 1.5), loc.getY() + MathUtils.randomDouble(0, .5) - 0.75, loc.getZ() + MathUtils.randomDouble(-1.5, 1.5), 0, 0);
73+
fakeArmorStands.add(as);
74+
for (Player players : player.getWorld().getPlayers()) {
75+
PacketSender.send(players, new PacketPlayOutSpawnEntityLiving(as));
76+
PacketSender.send(players, new PacketPlayOutEntityEquipment(as.getId(), 4, CraftItemStack.asNMSCopy(new ItemStack(org.bukkit.Material.PACKED_ICE))));
77+
}
78+
UtilParticles.display(Particles.CLOUD, loc.clone().add(MathUtils.randomDouble(-1.5, 1.5), MathUtils.randomDouble(0, .5) - 0.75, MathUtils.randomDouble(-1.5, 1.5)), 2, 0.4f);
79+
Bukkit.getScheduler().runTaskLater(UltraCosmeticsData.get().getPlugin(), new Runnable() {
80+
@Override
81+
public void run() {
82+
for (Player pl : player.getWorld().getPlayers())
83+
PacketSender.send(pl, new PacketPlayOutEntityDestroy(as.getId()));
84+
fakeArmorStands.remove(as);
85+
}
86+
}, 20);
87+
if (affectPlayers)
88+
for (final Entity ent : as.getBukkitEntity().getNearbyEntities(0.5, 0.5, 0.5)) {
89+
if (!cooldownJump.contains(ent) && ent != player) {
90+
MathUtils.applyVelocity(ent, new Vector(0, 1, 0).add(v));
91+
cooldownJump.add(ent);
92+
Bukkit.getScheduler().runTaskLater(UltraCosmeticsData.get().getPlugin(), new Runnable() {
93+
@Override
94+
public void run() {
95+
cooldownJump.remove(ent);
96+
}
97+
}, 20);
98+
}
99+
}
100+
}
101+
102+
@Override
103+
public void clearBlizzard(Player player) {
104+
if (!fakeArmorStandsMap.containsKey(player)) return;
105+
106+
for (EntityArmorStand as : fakeArmorStandsMap.get(player))
107+
for (Player pl : player.getWorld().getPlayers())
108+
PacketSender.send(pl, new PacketPlayOutEntityDestroy(as.getId()));
109+
fakeArmorStandsMap.remove(player);
110+
cooldownJumpMap.remove(player);
111+
}
112+
113+
@Override
114+
public void clearPathfinders(Entity entity) {
115+
EntityInsentient entitySheep = (EntityInsentient) ((CraftEntity) entity).getHandle();
116+
117+
try {
118+
Field bField = PathfinderGoalSelector.class.getDeclaredField("b");
119+
bField.setAccessible(true);
120+
Field cField = PathfinderGoalSelector.class.getDeclaredField("c");
121+
cField.setAccessible(true);
122+
bField.set(entitySheep.goalSelector, new UnsafeList<PathfinderGoalSelector>());
123+
bField.set(entitySheep.targetSelector, new UnsafeList<PathfinderGoalSelector>());
124+
cField.set(entitySheep.goalSelector, new UnsafeList<PathfinderGoalSelector>());
125+
cField.set(entitySheep.targetSelector, new UnsafeList<PathfinderGoalSelector>());
126+
} catch (Exception exc) {
127+
exc.printStackTrace();
128+
}
129+
}
130+
131+
@Override
132+
public void makePanic(Entity entity) {
133+
EntityInsentient insentient = (EntityInsentient) ((CraftEntity) entity).getHandle();
134+
insentient.goalSelector.a(3, new CustomPathFinderGoalPanic((EntityCreature) insentient, 0.4d));
135+
136+
}
137+
138+
@Override
139+
public void sendDestroyPacket(Player player, Entity entity) {
140+
PacketPlayOutEntityDestroy packet = new PacketPlayOutEntityDestroy(((CraftEntity) entity).getHandle().getId());
141+
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
142+
}
143+
144+
@Override
145+
public void move(Creature creature, Location loc) {
146+
EntityCreature ec = ((CraftCreature) creature).getHandle();
147+
ec.S = 1;
148+
149+
if (loc == null) return;
150+
151+
ec.getNavigation().a(loc.getX(), loc.getY(), loc.getZ(), (1.0D + 2.0D * 0.5d) * 1.0D);
152+
}
153+
154+
@Override
155+
public void moveDragon(Player player, Vector vector, Entity entity) {
156+
EntityEnderDragon ec = ((CraftEnderDragon) entity).getHandle();
157+
158+
ec.hurtTicks = -1;
159+
160+
ec.getBukkitEntity().setVelocity(vector);
161+
162+
ec.pitch = player.getLocation().getPitch();
163+
ec.yaw = player.getLocation().getYaw() - 180;
164+
}
165+
166+
@Override
167+
public void setClimb(Entity entity) {
168+
((CraftEntity) entity).getHandle().S = 1;
169+
}
170+
171+
@Override
172+
public void moveShip(Player player, Entity entity, Vector vector) {
173+
EntityBoat ec = ((CraftBoat) entity).getHandle();
174+
175+
ec.getBukkitEntity().setVelocity(vector);
176+
177+
ec.pitch = player.getLocation().getPitch();
178+
ec.yaw = player.getLocation().getYaw() - 180;
179+
}
180+
181+
@Override
182+
public void playChestAnimation(Block b, boolean open, TreasureChestDesign design) {
183+
Location location = b.getLocation();
184+
World world = ((CraftWorld) location.getWorld()).getHandle();
185+
BlockPosition position = new BlockPosition(location.getX(), location.getY(), location.getZ());
186+
if (design.getChestType() == ChestType.ENDER) {
187+
TileEntityEnderChest tileChest = (TileEntityEnderChest) world.getTileEntity(position);
188+
world.playBlockAction(position, tileChest.w(), 1, open ? 1 : 0);
189+
} else {
190+
TileEntityChest tileChest = (TileEntityChest) world.getTileEntity(position);
191+
world.playBlockAction(position, tileChest.w(), 1, open ? 1 : 0);
192+
}
193+
}
194+
195+
@Override
196+
public Entity spawnItem(ItemStack itemStack, Location blockLocation) {
197+
EntityItem ei = new EntityItem(
198+
((CraftWorld)blockLocation.clone().add(0.5D, 1.2D, 0.5D).getWorld()).getHandle(),
199+
blockLocation.clone().add(0.5D, 1.2D, 0.5D).getX(),
200+
blockLocation.clone().add(0.5D, 1.2D, 0.5D).getY(),
201+
blockLocation.clone().add(0.5D, 1.2D, 0.5D).getZ(),
202+
CraftItemStack.asNMSCopy(itemStack)) {
203+
};
204+
ei.getBukkitEntity().setVelocity(new Vector(0.0D, 0.25D, 0.0D));
205+
ei.pickupDelay = 2147483647;
206+
ei.getBukkitEntity().setCustomName(UUID.randomUUID().toString());
207+
ei.pickupDelay = 20;
208+
209+
((CraftWorld) blockLocation.clone().add(0.5D, 1.2D, 0.5D).getWorld()).getHandle().addEntity(ei);
210+
211+
return ei.getBukkitEntity();
212+
}
213+
214+
@Override
215+
public boolean isSameInventory(Inventory first, Inventory second) {
216+
return ((CraftInventory) first).getInventory().equals(((CraftInventory) second).getInventory());
217+
}
218+
219+
@Override
220+
public void follow(Entity toFollow, Entity follower) {
221+
net.minecraft.server.v1_8_R1.Entity pett = ((CraftEntity) follower).getHandle();
222+
((EntityInsentient) pett).getNavigation().a(2);
223+
Object petf = ((CraftEntity) follower).getHandle();
224+
Location targetLocation = toFollow.getLocation();
225+
PathEntity path;
226+
path = ((EntityInsentient) petf).getNavigation().a(targetLocation.getX() + 1, targetLocation.getY(), targetLocation.getZ() + 1);
227+
if (path != null) {
228+
((EntityInsentient) petf).getNavigation().a(path, 1.05D);
229+
((EntityInsentient) petf).getNavigation().a(1.05D);
230+
}
231+
}
232+
233+
@Override
234+
public void chickenFall(Player player) {
235+
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
236+
if (!entityPlayer.onGround && entityPlayer.motY < 0.0D) {
237+
Vector v = player.getVelocity();
238+
player.setVelocity(v);
239+
entityPlayer.motY *= 0.85;
240+
}
241+
}
242+
243+
@Override
244+
public void sendTeleportPacket(Player player, Entity entity) {
245+
((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutEntityTeleport(((CraftEntity) entity).getHandle()));
246+
}
247+
248+
@Override
249+
public boolean isMoving(org.bukkit.entity.Player entity) {
250+
EntityPlayer ent = ((CraftPlayer) entity).getHandle();
251+
long time = System.currentTimeMillis() - ent.D();
252+
if(time > 0.001) {
253+
Bukkit.broadcastMessage("MOVING");
254+
return true;
255+
}
256+
Bukkit.broadcastMessage("NOT MOVING");
257+
return false;
258+
}
259+
260+
}

0 commit comments

Comments
 (0)