Skip to content
This repository has been archived by the owner on Feb 8, 2021. It is now read-only.

Commit

Permalink
Update Sit v2.2.0
Browse files Browse the repository at this point in the history
- Fix some bugs
- Support to let entity sit
  • Loading branch information
beito123 committed Apr 12, 2020
1 parent 5954176 commit 10e26e6
Show file tree
Hide file tree
Showing 12 changed files with 427 additions and 100 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
/dist/*
/.gradle/*
/*/build/*
*.cmd
*.cmd
6 changes: 6 additions & 0 deletions Roto/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
group "com.gmx.mattcha.roto"
version "1.0.0"

dependencies {
compile project(":Sit")
}
87 changes: 87 additions & 0 deletions Roto/src/main/java/com/gmx/mattcha/roto/EventListener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.gmx.mattcha.roto;

import cn.nukkit.Player;
import cn.nukkit.block.Block;
import cn.nukkit.block.BlockID;
import cn.nukkit.entity.Entity;
import cn.nukkit.event.EventHandler;
import cn.nukkit.event.Listener;
import cn.nukkit.event.entity.EntityDespawnEvent;
import cn.nukkit.event.player.PlayerInteractEntityEvent;
import cn.nukkit.event.player.PlayerInteractEvent;
import cn.nukkit.item.Item;
import cn.nukkit.item.ItemID;
import cn.nukkit.math.BlockFace;
import cn.nukkit.utils.Faceable;
import com.gmx.mattcha.sit.SitAPI;

public class EventListener implements Listener {

private MainClass plugin;

public EventListener(MainClass plugin) {
this.plugin = plugin;
}

public MainClass getPlugin() {
return this.plugin;
}

@EventHandler
public void onEntityTap(PlayerInteractEntityEvent event) {
Entity entity = event.getEntity();

/*if (!this.plugin.npcList.containsKey(entity.getId())) {
return;
}*/

Item item = event.getItem();
if (item.getId() != ItemID.POTATO) {
return;
}

if (SitAPI.getInstance().hasSat(entity)) {
SitAPI.getInstance().standupEntity(entity);
return;
}

SitAPI.getInstance().sitEntity(entity);
}

@EventHandler
public void onDespawn(EntityDespawnEvent event) {
Entity entity = event.getEntity();

if (!this.plugin.npcList.containsKey(entity.getId())) {
return;
}

this.plugin.npcList.remove(entity.getId());
}

@EventHandler
public void onTap(PlayerInteractEvent event) {
Player player = event.getPlayer();
if (!this.plugin.isBlockMode(player)) {
return;
}

Block block = event.getBlock();

if (block.getId() == BlockID.AIR) {
return;
}

String msg = "---------- Block Info(" + block.getX() + ", " + block.getY() + ", " + block.getZ() + ") ----------\n";

msg += "Block: " + block.getName() + "(ID=" + block.getId() + ", Damage=" + block.getDamage() + ", SaveID=" + block.getSaveId() + ")\n";
msg += "Chunk X=" + block.getChunkX() + ", Y=" + block.getChunkZ() + "\n";

if (block instanceof Faceable) {
BlockFace face = ((Faceable) block).getBlockFace();
msg += "BlockFace: " + face.getName() + "(Index=" + face.getIndex() + ", Axis=" + face.getAxis() + ", HIndex=" + face.getHorizontalIndex() + ", HAngle=" + face.getHorizontalAngle() + ")\n";
}

player.sendMessage(msg);
}
}
130 changes: 130 additions & 0 deletions Roto/src/main/java/com/gmx/mattcha/roto/MainClass.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
package com.gmx.mattcha.roto;

import cn.nukkit.Player;
import cn.nukkit.Server;
import cn.nukkit.command.Command;
import cn.nukkit.command.CommandSender;
import cn.nukkit.entity.Entity;
import cn.nukkit.math.Vector3;
import cn.nukkit.nbt.tag.CompoundTag;
import cn.nukkit.plugin.PluginBase;
import cn.nukkit.utils.TextFormat;
import com.gmx.mattcha.roto.entity.EntityNPC;

import java.util.*;

public class MainClass extends PluginBase {

private List<UUID> tempBlockMode = new ArrayList<>();
public Map<Long, EntityNPC> npcList = new HashMap<>();

@Override
public void onEnable() {
// Register a entity
Entity.registerEntity("EntityNPC", EntityNPC.class, true);

// Register event listener
this.getServer().getPluginManager().registerEvents(new EventListener(this), this);

Server.getInstance().getLogger().notice(TextFormat.YELLOW + "Enabled Roto! " +
TextFormat.RED + "Don't use in production server!");
}

// Commands

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (command.getName()) {
case "roto":
if (args.length < 1) {
return false;
}

if (!(sender instanceof Player)) {
sender.sendMessage(TextFormat.RED + "Please run the command in game");
return true;
}

Player player = (Player) sender;

switch (args[0]) {
case "block":
case "b":
if (this.isBlockMode(player)) {
this.removeBlockMode(player);
sender.sendMessage("You are not block mode");
return true;
}

this.addBlockMode(player);
sender.sendMessage("You are block mode");
break;
default:
sender.sendMessage(
"----- Roto Commands -----\n" +
"/roto <help> - This is not used now :P\n" +
"/npc <make(m)|remove(r)|clone(c)> - Make a fake NPC\n"
);
}

return true;
case "npc":
return this.execNPCCommand(sender, args);
}

return false;
}

private boolean execNPCCommand(CommandSender sender, String[] args) {
if (args.length < 1) {
return false;
}

if (!(sender instanceof Player)) {
sender.sendMessage(TextFormat.RED + "Please run the command in game");
return true;
}

Player player = (Player) sender;

switch (args[0]) {
case "clone":
case "c":
this.clonePlayerNPC(player);
return true;
default:
sender.sendMessage(
"----- Roto Commands -----\n" +
"/roto <help> - This is not used now :P\n" +
"/npc <make(m)|remove(r)|clone(c)> - Make a fake NPC\n"
);
return true;
}
}

// API - BlockMode

public boolean isBlockMode(Player player) {
return this.tempBlockMode.contains(player.getUniqueId());
}

public boolean addBlockMode(Player player) {
return this.tempBlockMode.add(player.getUniqueId());
}

public boolean removeBlockMode(Player player) {
return this.tempBlockMode.remove(player.getUniqueId());
}

// API - NPC

public void clonePlayerNPC(Player player) {
CompoundTag nbt = Entity.getDefaultNBT(player, new Vector3(), (float) player.getYaw(), (float) player.getPitch());

EntityNPC enpc = (EntityNPC) Entity.createEntity("EntityNPC", player.chunk, nbt, player.getSkin());

enpc.spawnToAll();

this.npcList.put(enpc.getId(), enpc);
}
}
26 changes: 26 additions & 0 deletions Roto/src/main/java/com/gmx/mattcha/roto/entity/EntityNPC.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.gmx.mattcha.roto.entity;

import cn.nukkit.entity.EntityHuman;
import cn.nukkit.entity.data.Skin;
import cn.nukkit.level.format.FullChunk;
import cn.nukkit.nbt.tag.CompoundTag;

public class EntityNPC extends EntityHuman {

public EntityNPC(FullChunk chunk, CompoundTag nbt, Skin skin) {
super(chunk, nbt);

this.skin = skin;
}

@Override
protected void initEntity() {
this.skin = new Skin();
super.initEntity();
}

@Override
public int getNetworkId() {
return -1;
}
}
29 changes: 29 additions & 0 deletions Roto/src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Roto
version: 1.0.0
description: "a development tool"
author: beito3
api: ["1.0.9"]
main: com.gmx.mattcha.roto.MainClass
load: STARTUP

commands:
roto:
description: "roto main commands"
usage: "/roto help"
permission: roto.command.roto
aliases: ["r"]
npc:
description: "make npc"
usage: "/npc help"
permission: roto.command.npc
aliases: ["n"]

permissions:
roto:
children:
roto.command:
children:
roto.command.roto:
default: true
roto.command.npc:
default: true
2 changes: 1 addition & 1 deletion Sit/build.gradle
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
group "com.gmx.mattcha.sit"
version "1.0.0"
version "2.2.0"
25 changes: 11 additions & 14 deletions Sit/src/main/java/com/gmx/mattcha/sit/EventListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import cn.nukkit.event.player.*;
import cn.nukkit.event.server.DataPacketReceiveEvent;
import cn.nukkit.level.Position;
import cn.nukkit.math.Vector3f;
import cn.nukkit.network.protocol.InteractPacket;
import cn.nukkit.network.protocol.ProtocolInfo;
import com.gmx.mattcha.sit.entity.Chair;
Expand Down Expand Up @@ -87,25 +86,23 @@ public void onTapBlock(PlayerInteractEvent event) {
}

Player player = event.getPlayer();
if (!this.plugin.hasSat(player)) {
if (!SitAPI.getInstance().hasSat(player)) {
return;
}

Block block = event.getBlock();
if (block instanceof BlockStairs && (block.getDamage() & 0x04) == 0) {
this.plugin.sitPlayer(player,
block.add(0.5, 0, 0.5),
new Vector3f(0 , 1.58F, 0));
SitAPI.getInstance().sitEntity(player,
block.add(SitAPI.getInstance().defaultSitStairPosition),
SitAPI.getInstance().defaultSitStairOffset);

this.plugin.msg.sendTip(player, "sit.tapwarp.atStair.ok");
}
}

@EventHandler
public void onDespawn(EntityDespawnEvent event) {
if (event.getEntity() instanceof Player) {
this.plugin.closeChair((Player) event.getEntity());
}
SitAPI.getInstance().closeChair(event.getEntity());
}

@EventHandler
Expand All @@ -114,7 +111,7 @@ public void onDead(PlayerDeathEvent event) {
return;
}

this.plugin.closeChair(event.getEntity());
SitAPI.getInstance().closeChair(event.getEntity());
}

@EventHandler
Expand All @@ -123,7 +120,7 @@ public void onBedEnter(PlayerBedEnterEvent event) {
return;
}

this.plugin.closeChair(event.getPlayer());
SitAPI.getInstance().closeChair(event.getPlayer());
}

@EventHandler
Expand All @@ -132,7 +129,7 @@ public void onTeleport(PlayerTeleportEvent event) {
return;
}

this.plugin.closeChair(event.getPlayer());
SitAPI.getInstance().closeChair(event.getPlayer());
}

@EventHandler
Expand All @@ -143,7 +140,7 @@ public void onInvalidMove(PlayerInvalidMoveEvent event) {

Player player = event.getPlayer();

Chair chair = this.plugin.getChair(player);
Chair chair = SitAPI.getInstance().getChair(player);
if (chair == null) {
return;
}
Expand All @@ -168,7 +165,7 @@ public void onActionPacket(DataPacketReceiveEvent event) {
if (event.getPacket().pid() == ProtocolInfo.INTERACT_PACKET) {
Player player = event.getPlayer();

if (!this.plugin.hasSat(player)) {
if (!SitAPI.getInstance().hasSat(player)) {
return;
}

Expand All @@ -184,7 +181,7 @@ public void onActionPacket(DataPacketReceiveEvent event) {
tempSit.remove(player.getUniqueId());
}

this.plugin.closeChair(player);
SitAPI.getInstance().closeChair(player);
this.tempJustStoodup.put(player.getUniqueId(), new TempData(System.currentTimeMillis(), player)); // bad hack
}
}
Expand Down
Loading

0 comments on commit 10e26e6

Please sign in to comment.