forked from virt-mirrors/Sit
Merge branch 'master' into 1.20-1.20.1
# Conflicts: # gradle.properties
This commit is contained in:
commit
4e902c1236
10 changed files with 226 additions and 142 deletions
|
@ -23,7 +23,8 @@ import net.minecraft.util.math.BlockPos;
|
|||
import net.minecraft.util.math.Box;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.World;
|
||||
import one.oth3r.sit.Utl.HandType;
|
||||
import one.oth3r.sit.Utl.HandSettings.HandType;
|
||||
import one.oth3r.sit.file.Config;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
@ -38,25 +39,25 @@ public class Events {
|
|||
ArrayList<UseAction> notUsable = new ArrayList<>(food);
|
||||
notUsable.add(UseAction.NONE);
|
||||
HashMap<HandType, ItemStack> itemMap = new HashMap<>();
|
||||
itemMap.put(HandType.main,player.getMainHandStack());
|
||||
itemMap.put(HandType.off,player.getOffHandStack());
|
||||
itemMap.put(Utl.HandSettings.HandType.main,player.getMainHandStack());
|
||||
itemMap.put(Utl.HandSettings.HandType.off,player.getOffHandStack());
|
||||
// if sneaking cant sit
|
||||
if (player.isSneaking()) return false;
|
||||
// for both hands
|
||||
for (HandType type:HandType.values()) {
|
||||
for (HandType type: Utl.HandSettings.HandType.values()) {
|
||||
ItemStack targetStack = itemMap.get(type);
|
||||
// if req is empty and the item isn't empty, false
|
||||
if (Utl.getReq(player,type).equals(config.HandRequirement.empty) && !targetStack.isEmpty()) return false;
|
||||
if (Utl.HandSettings.getReq(player,type).equals(Config.HandRequirement.empty) && !targetStack.isEmpty()) return false;
|
||||
// if req is restrictive
|
||||
if (Utl.getReq(player,type).equals(config.HandRequirement.restrictive)) {
|
||||
if (Utl.HandSettings.getReq(player,type).equals(Config.HandRequirement.restrictive)) {
|
||||
// if item is in blacklist, false
|
||||
if (checkList(Utl.getList(player,type,"blacklist"),targetStack)) return false;
|
||||
if (checkList(Utl.HandSettings.getList(player,type,"blacklist"),targetStack)) return false;
|
||||
// if item is NOT in whitelist
|
||||
if (!checkList(Utl.getList(player,type,"whitelist"),targetStack)) {
|
||||
if (!checkList(Utl.HandSettings.getList(player,type,"whitelist"),targetStack)) {
|
||||
// if block is restricted and items is block, false, ect
|
||||
if (Utl.getBool(player,type,"block") && (targetStack.getItem() instanceof BlockItem)) return false;
|
||||
if (Utl.getBool(player,type,"food") && food.contains(targetStack.getUseAction())) return false;
|
||||
if (Utl.getBool(player,type,"usable") && !notUsable.contains(targetStack.getUseAction())) return false;
|
||||
if (Utl.HandSettings.getBool(player,type,"block") && (targetStack.getItem() instanceof BlockItem)) return false;
|
||||
if (Utl.HandSettings.getBool(player,type,"food") && food.contains(targetStack.getUseAction())) return false;
|
||||
if (Utl.HandSettings.getBool(player,type,"usable") && !notUsable.contains(targetStack.getUseAction())) return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -72,7 +73,7 @@ public class Events {
|
|||
// get a hashmap of custom blocks
|
||||
HashMap<String,HashMap<String,Object>> map = new HashMap<>();
|
||||
int i = 1;
|
||||
for (String s:config.customBlocks) {
|
||||
for (String s: Config.customBlocks) {
|
||||
String[] split = s.split("\\|");
|
||||
HashMap<String,Object> data = new HashMap<>();
|
||||
data.put("block",split[0]);
|
||||
|
@ -100,12 +101,12 @@ public class Events {
|
|||
for (Entity entity:entities.values()) if (entity.getBlockPos().equals(pos) || entity.getBlockPos().add(0,1,0).equals(pos)) return false;
|
||||
|
||||
// return for the 4 default types
|
||||
if (block instanceof StairsBlock && config.stairsOn) return blockState.get(StairsBlock.HALF) == BlockHalf.BOTTOM;
|
||||
if (block instanceof SlabBlock && config.slabsOn) return blockState.get(SlabBlock.TYPE) == SlabType.BOTTOM;
|
||||
if (block instanceof CarpetBlock && config.carpetsOn) return true;
|
||||
if (blockState.isFullCube(world,pos.add(0,1,0)) && config.fullBlocksOn) return true;
|
||||
if (block instanceof StairsBlock && Config.stairsOn) return blockState.get(StairsBlock.HALF) == BlockHalf.BOTTOM;
|
||||
if (block instanceof SlabBlock && Config.slabsOn) return blockState.get(SlabBlock.TYPE) == SlabType.BOTTOM;
|
||||
if (block instanceof CarpetBlock && Config.carpetsOn) return true;
|
||||
if (blockState.isFullCube(world,pos.add(0,1,0)) && Config.fullBlocksOn) return true;
|
||||
// custom checker
|
||||
if (config.customOn && config.customBlocks.size() != 0) {
|
||||
if (Config.customOn && Config.customBlocks.size() != 0) {
|
||||
for (HashMap<String,Object> map:getCustomBlocks().values()) {
|
||||
String blockID = Registries.BLOCK.getId(block).toString();
|
||||
if (map.get("block").equals(blockID)) {
|
||||
|
@ -149,7 +150,7 @@ public class Events {
|
|||
entity.updatePositionAndAngles(pos.getX() + 0.5, pos.getY()+.78, pos.getZ() + 0.5, 0, 0);
|
||||
hitBoxY = 2;
|
||||
}
|
||||
if (config.customOn && config.customBlocks.size() != 0) {
|
||||
if (Config.customOn && !Config.customBlocks.isEmpty()) {
|
||||
for (HashMap<String,Object> map:getCustomBlocks().values()) {
|
||||
String blockID = Registries.BLOCK.getId(block).toString();
|
||||
if (map.get("block").equals(blockID)) {
|
||||
|
@ -165,6 +166,24 @@ public class Events {
|
|||
if (entity.getY() <= pos.getY()+.35) entity.setPitch(90); // below
|
||||
else entity.setPitch(-90); // above
|
||||
}
|
||||
public static boolean sit(ServerPlayerEntity player, BlockPos pos) {
|
||||
// todo interactions entity to make the sitting hitbox?
|
||||
World world = player.getWorld();
|
||||
DisplayEntity.TextDisplayEntity entity = new DisplayEntity.TextDisplayEntity(EntityType.TEXT_DISPLAY,player.getServerWorld());
|
||||
setEntity(pos,world,entity);
|
||||
if (checkBlocks(pos,world,isAboveBlockheight(entity))) {
|
||||
if (entities.containsKey(player)) {
|
||||
if (!Config.sitWhileSeated) return false;
|
||||
entities.get(player).setRemoved(Entity.RemovalReason.DISCARDED);
|
||||
entities.remove(player);
|
||||
}
|
||||
player.getServerWorld().spawnEntity(entity);
|
||||
player.startRiding(entity);
|
||||
entities.put(player,entity);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static void register() {
|
||||
ServerTickEvents.END_SERVER_TICK.register(minecraftServer -> minecraftServer.execute(Events::cleanUp));
|
||||
// PLAYER JOIN
|
||||
|
@ -172,12 +191,12 @@ public class Events {
|
|||
ServerPlayerEntity player = handler.player;
|
||||
checkPlayers.put(player,2);
|
||||
// put server settings in the player settings
|
||||
Sit.playerSettings.put(player,Utl.getHandSettings());
|
||||
Sit.playerSettings.put(player, Utl.HandSettings.getHandSettings());
|
||||
});
|
||||
ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> {
|
||||
ServerPlayerEntity player = handler.player;
|
||||
if (entities.containsKey(player)) {
|
||||
if (!config.keepActive) {
|
||||
if (!Config.keepActive) {
|
||||
player.dismountVehicle();
|
||||
entities.get(player).setRemoved(Entity.RemovalReason.DISCARDED);
|
||||
}
|
||||
|
@ -194,22 +213,12 @@ public class Events {
|
|||
if (player == null) return ActionResult.PASS;
|
||||
if (hand == net.minecraft.util.Hand.MAIN_HAND && hitResult.getType() == HitResult.Type.BLOCK) {
|
||||
BlockPos pos = hitResult.getBlockPos();
|
||||
// check the players hands
|
||||
if (!checkLogic(player)) return ActionResult.PASS;
|
||||
// todo interactions entity to make the hitbox?
|
||||
// make the entity first before checking to make sure the blocks around are fine
|
||||
DisplayEntity.TextDisplayEntity entity = new DisplayEntity.TextDisplayEntity(EntityType.TEXT_DISPLAY,player.getServerWorld());
|
||||
setEntity(pos,world,entity);
|
||||
if (checkBlocks(pos,world,isAboveBlockheight(entity))) {
|
||||
if (entities.containsKey(player)) {
|
||||
if (!config.sitWhileSeated) return ActionResult.PASS;
|
||||
entities.get(player).setRemoved(Entity.RemovalReason.DISCARDED);
|
||||
entities.remove(player);
|
||||
}
|
||||
player.getServerWorld().spawnEntity(entity);
|
||||
player.startRiding(entity);
|
||||
entities.put(player,entity);
|
||||
return ActionResult.FAIL;
|
||||
}
|
||||
// make the player sit
|
||||
boolean status = sit(player,pos);
|
||||
// if sat, cancel / FAIL the use block event
|
||||
if (status) return ActionResult.FAIL;
|
||||
}
|
||||
return ActionResult.PASS;
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue