Skip to content

Instantly share code, notes, and snippets.

@SupaHam
Last active August 29, 2015 14:11
Show Gist options
  • Save SupaHam/dda5d60ce7ed3beae569 to your computer and use it in GitHub Desktop.
Save SupaHam/dda5d60ce7ed3beae569 to your computer and use it in GitHub Desktop.
Create a colourful sky. The SkyColors are best rendered during day. These colors were the best I could find without repeating them. This triggers a rain effect (on the client side), so it would be wise to cover their heads with blocks, especially far above so they don't hear the rain sounds. I'd recommend Barrier blocks at level 256 in adjacent …
package com.supaham.bukkittesting.protolib;
import static com.supaham.bukkittesting.protolib.RainbowSky.SkyColor.DARKER_BLUE;
import static com.supaham.bukkittesting.protolib.RainbowSky.SkyColor.DARKEST_RED;
import static com.supaham.bukkittesting.protolib.RainbowSky.SkyColor.DARK_GOLD;
import static com.supaham.bukkittesting.protolib.RainbowSky.SkyColor.LIGHT_SEPIA_BLACK;
import static com.supaham.bukkittesting.protolib.RainbowSky.SkyColor.SEPIA_BLACK;
import static com.supaham.bukkittesting.protolib.RainbowSky.SkyColor.SEPIA_DARKER_BLACK;
import static com.supaham.bukkittesting.protolib.RainbowSky.SkyColor.SEPIA_DARKEST_BLACK;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketContainer;
import com.supaham.bukkittesting.BukkitTesting;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class RainbowSky extends ProtoBase {
private Random random = new Random();
private Map<Player, SkyColor> last = new HashMap<>();
public RainbowSky(BukkitTesting instance) {
super(instance);
}
@EventHandler
public void playerJoin(final PlayerJoinEvent event) {
new BukkitRunnable() {
@Override
public void run() {
Player player = event.getPlayer();
SkyColor skyColor = last.get(player);
SkyColor rand;
// SkyColor[] coll = SkyColor.values();
SkyColor[] coll = new SkyColor[]{SEPIA_BLACK, SEPIA_DARKER_BLACK, SEPIA_DARKEST_BLACK, LIGHT_SEPIA_BLACK, DARKEST_RED, DARK_GOLD, DARKER_BLUE};
do {
rand = coll[random.nextInt(coll.length)];
if (skyColor != null && rand.equals(skyColor)) {
rand = null;
}
} while(rand == null);
try {
rand.show(mgr, player);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
last.put(player, rand);
}
}.runTaskTimer(plugin, 40L, 10L);
new BukkitRunnable() {
@Override
public void run() {
event.getPlayer()
.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION, 100, 1), true);
}
}.runTaskTimer(plugin, 40L, 100L);
}
public static PacketContainer changeGameState(int reason, float value) {
PacketContainer packet = new PacketContainer(PacketType.Play.Server.GAME_STATE_CHANGE);
packet.getIntegers().write(0, reason);
packet.getFloat().write(0, value);
return packet;
}
public enum SkyColor {
DARK_GOLD(2, 0),
DARK_RED(3, 0),
DARKER_RED(4, 0),
DARKEST_RED(5, 0),
BLACK(2, 1),
DARKER_BLUE(3, 1),
DARK_BLUE(4, 1),
AQUA(5, 1),
LIGHT_BLUE(6, 1),
DARK_BLUE_2(3, 2),
AQUA_2(4, 2),
LIGHT_BLUE_2(5, 2),
BLUE_GOLD(3, 3),
AQUA_3(4, 3),
SEPIA_BLACK(1, 5),
SEPIA_DARKER_BLACK(2, 5),
SEPIA_DARKEST_BLACK(1, 6),
LIGHT_SEPIA_BLACK(2, 6),
BLUE_SKY_DARK_TERRAIN(3, 9),
;
private final float i1;
private final float i2;
SkyColor(float i1, float i2) {
this.i1 = i1;
this.i2 = i2;
}
public void show(ProtocolManager mgr, Player player) throws InvocationTargetException {
mgr.sendServerPacket(player, changeGameState(7, i1));
mgr.sendServerPacket(player, changeGameState(8, i2));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment