Initial commit
Added support for entity capture and spawning with eggs Added README Added spigot docker build tools Added some comments
This commit is contained in:
1
.git-submodules/spigot-docker-build-tools
Submodule
1
.git-submodules/spigot-docker-build-tools
Submodule
Submodule .git-submodules/spigot-docker-build-tools added at 36cdba14f3
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Eclipse project files
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
.settings/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Generated javadocs
|
||||||
|
doc/
|
||||||
|
|
||||||
|
# Dependency reduced pom
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
|
||||||
|
# Jetbrains Intellij IDEA
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule ".git-submodules/spigot-docker-build-tools"]
|
||||||
|
path = .git-submodules/spigot-docker-build-tools
|
||||||
|
url = https://git.048596.world/banana/spigot-docker-build-tools.git
|
||||||
6
README.md
Normal file
6
README.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# Mob Capture
|
||||||
|
|
||||||
|
This plugin serves as a basic example on how to use NBTEditor to manipulate entity data, such as
|
||||||
|
storing it in an item, and retrieving and applying it to an existing entity. It also highlights
|
||||||
|
the ability to work with entirely vanilla mechanics, such as spawn eggs, which can be extended to
|
||||||
|
work with more complex things, like spawners.
|
||||||
14
install.sh
Executable file
14
install.sh
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
export REV="1.21.10"
|
||||||
|
export M2_DIRECTORY="$M2_REPOSITORY"
|
||||||
|
export BUILD_DIRECTORY="$ARTIFACT_DIRECTORY"
|
||||||
|
export JAVA_VERSION="21"
|
||||||
|
|
||||||
|
REPOSITORY_DIR=$(dirname "$0")
|
||||||
|
|
||||||
|
cd "$REPOSITORY_DIR"
|
||||||
|
|
||||||
|
git submodule update --init --recursive --remote
|
||||||
|
|
||||||
|
./.git-submodules/spigot-docker-build-tools/run.sh mvn clean package
|
||||||
57
pom.xml
Normal file
57
pom.xml
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>com.aaaaahhhhhhh.bananapuncher714</groupId>
|
||||||
|
<artifactId>mob-capture</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.spigotmc</groupId>
|
||||||
|
<artifactId>spigot</artifactId>
|
||||||
|
<version>1.21.10-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.github.bananapuncher714</groupId>
|
||||||
|
<artifactId>nbteditor</artifactId>
|
||||||
|
<version>7.19.11</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.1.0</version>
|
||||||
|
<configuration>
|
||||||
|
<relocations>
|
||||||
|
<relocation>
|
||||||
|
<pattern>io.github.bananapuncher714.nbteditor</pattern>
|
||||||
|
<shadedPattern>com.aaaaahhhhhhh.bananapuncher714.mobcapture.nbteditor</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
</relocations>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>2.3.2</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
package com.aaaaahhhhhhh.bananapuncher714.mobcapture;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Egg;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import io.github.bananapuncher714.nbteditor.NBTEditor;
|
||||||
|
import io.github.bananapuncher714.nbteditor.NBTEditor.NBTCompound;
|
||||||
|
|
||||||
|
public class MobCapture extends JavaPlugin implements Listener {
|
||||||
|
private Map< EntityType, Material > eggTypes = new HashMap< EntityType, Material >();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
for ( EntityType type : EntityType.values() ) {
|
||||||
|
String name = type.name();
|
||||||
|
Material material = Material.getMaterial( name + "_SPAWN_EGG" );
|
||||||
|
if ( material != null ) {
|
||||||
|
eggTypes.put( type, material );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Bukkit.getPluginManager().registerEvents( this, this );
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
private void onEvent( ProjectileHitEvent event ) {
|
||||||
|
final Entity entity = event.getHitEntity();
|
||||||
|
if ( entity != null && event.getEntity() instanceof Egg ) {
|
||||||
|
final Material type = eggTypes.get( entity.getType() );
|
||||||
|
if ( type != null ) {
|
||||||
|
ItemStack egg = new ItemStack( type );
|
||||||
|
|
||||||
|
// Get the entity data
|
||||||
|
final NBTCompound compound = NBTEditor.getNBTCompound( entity );
|
||||||
|
|
||||||
|
// Delete the components that we don't want to persist
|
||||||
|
compound.set( NBTEditor.DELETE, "UUID" );
|
||||||
|
compound.set( NBTEditor.DELETE, "Pos" );
|
||||||
|
compound.set( NBTEditor.DELETE, "Motion" );
|
||||||
|
|
||||||
|
// We can use [ NBTEditor.ITEMSTACK_COMPONENTS, "minecraft:entity_data" ] here as the key
|
||||||
|
// since "minecraft:entity_data" is a default component on spawn eggs, but if you want to
|
||||||
|
// store the data in a custom component, you will need to use a different key such as
|
||||||
|
// [ NBTEditor.CUSTOM_DATA, "custom_entity_data" ].
|
||||||
|
egg = NBTEditor.set( egg, compound, NBTEditor.ITEMSTACK_COMPONENTS, "minecraft:entity_data" );
|
||||||
|
|
||||||
|
Location location = entity.getLocation();
|
||||||
|
entity.remove();
|
||||||
|
|
||||||
|
location.getWorld().dropItemNaturally( location, egg );
|
||||||
|
location.getWorld().createExplosion( location, 0f, false, false );
|
||||||
|
|
||||||
|
event.setCancelled( true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
private void onApply( PlayerInteractEntityEvent event ) {
|
||||||
|
final Entity entity = event.getRightClicked();
|
||||||
|
final Material type = eggTypes.get( entity.getType() );
|
||||||
|
final ItemStack item = event.getPlayer().getEquipment().getItem( event.getHand() );
|
||||||
|
|
||||||
|
if ( item != null && item.getType() == type ) {
|
||||||
|
if ( NBTEditor.contains( item, NBTEditor.ITEMSTACK_COMPONENTS, "minecraft:entity_data" ) ) {
|
||||||
|
// Get the corresponding entity data info from the item that the player
|
||||||
|
// is holding, and apply it to the entity that was clicked on
|
||||||
|
final NBTCompound compound = NBTEditor.getNBTCompound( item, NBTEditor.ITEMSTACK_COMPONENTS, "minecraft:entity_data" );
|
||||||
|
final NBTCompound entityCompound = NBTEditor.getNBTCompound( entity );
|
||||||
|
|
||||||
|
// Set the UUID, position and motion to the clicked entity's data
|
||||||
|
compound.set( NBTEditor.getNBTCompound( entityCompound, "UUID" ), "UUID" );
|
||||||
|
compound.set( NBTEditor.getNBTCompound( entityCompound, "Pos" ), "Pos" );
|
||||||
|
compound.set( NBTEditor.getNBTCompound( entityCompound, "Motion" ), "Motion" );
|
||||||
|
|
||||||
|
NBTEditor.set( entity, compound );
|
||||||
|
|
||||||
|
event.setCancelled( true );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
6
src/main/resources/plugin.yml
Normal file
6
src/main/resources/plugin.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
name: MobCapture
|
||||||
|
main: com.aaaaahhhhhhh.bananapuncher714.mobcapture.MobCapture
|
||||||
|
version: 0.0.1
|
||||||
|
description: Capture mobs
|
||||||
|
author: BananaPuncher714
|
||||||
|
api-version: 1.13
|
||||||
Reference in New Issue
Block a user