diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.yaml b/.github/ISSUE_TEMPLATE/1-bug-report.yaml
deleted file mode 100644
index 94171eb..0000000
--- a/.github/ISSUE_TEMPLATE/1-bug-report.yaml
+++ /dev/null
@@ -1,116 +0,0 @@
-name: Bug Report
-description: Report a bug in the plugin
-labels: ["bug", "investigate"]
-body:
- - type: markdown
- attributes:
- value: |
- ## ⚠️ PLEASE READ BEFORE SUBMITTING ⚠️
-
- 1. Try the [latest test version](https://hangar.papermc.io/kernitus/OldCombatMechanics/versions?channel=Snapshot&platform=PAPER) first
- 2. Complete ALL fields below - incomplete reports will be CLOSED
- 3. This is a volunteer project - we have no obligation to help incomplete reports
- 4. Have a question? Please use the Question template instead
-
- - type: input
- id: server-version
- attributes:
- label: Server Version
- description: Version of the server, e.g. Spigot 1.14.1 or Paper 1.19.3
- placeholder: e.g. Paper 1.20.4
- validations:
- required: true
-
- - type: input
- id: ocm-version
- attributes:
- label: OldCombatMechanics Version
- description: "EXACT version of OldCombatMechanics, e.g. 1.7.2 or 2.1.1-beta+e2f0369. DO NOT write 'latest' - versions change often."
- placeholder: e.g. 2.1.1-beta+e2f0369
- validations:
- required: true
-
- - type: textarea
- id: server-log
- attributes:
- label: Server Log File
- description: Console log from the server. DO NOT use an external service like pastebin, as these expire.
- placeholder: Paste your log here
- render: console
- validations:
- required: true
-
- - type: textarea
- id: config
- attributes:
- label: OldCombatMechanics config.yml
- description: Your config file. DO NOT use an external service like pastebin, as these expire.
- placeholder: Paste your config.yml here
- render: yaml
- validations:
- required: true
-
- - type: textarea
- id: other-plugins
- attributes:
- label: Other Plugins
- description: List of other plugins installed (conflicts are common)
- placeholder: |
- - ViaVersion 1.0.0
- - AnotherPlugin 2.3.1
- validations:
- required: true
-
- - type: textarea
- id: problem-description
- attributes:
- label: Problem Description
- description: A clear and concise description of what the bug is
- validations:
- required: true
-
- - type: textarea
- id: reproduce
- attributes:
- label: Steps to Reproduce
- description: What you would do in order for the problem to occur
- placeholder: |
- 1. Hit a mob with a stick
- 2.
- 3.
- validations:
- required: true
-
- - type: textarea
- id: expected
- attributes:
- label: Expected Behaviour
- description: What do you think should happen when you perform the above steps?
- validations:
- required: true
-
- - type: textarea
- id: actual
- attributes:
- label: Actual Behaviour
- description: What does happen when you perform the above steps?
- validations:
- required: true
-
- - type: textarea
- id: additional
- attributes:
- label: Additional Context
- description: Add any other context, screenshots, or videos here
-
- - type: checkboxes
- id: confirmation
- attributes:
- label: Pre-submission checklist
- options:
- - label: I have tried the latest test/snapshot version
- required: true
- - label: I have filled out all required fields below
- required: true
-
-
diff --git a/.github/ISSUE_TEMPLATE/2-question.yaml b/.github/ISSUE_TEMPLATE/2-question.yaml
deleted file mode 100644
index d5ba194..0000000
--- a/.github/ISSUE_TEMPLATE/2-question.yaml
+++ /dev/null
@@ -1,64 +0,0 @@
-name: Question
-description: Ask a question about the plugin
-labels: ["question"]
-body:
- - type: markdown
- attributes:
- value: |
- ## ⚠️ PLEASE READ BEFORE SUBMITTING ⚠️
-
- 1. Check the readme and wiki first: https://github.com/kernitus/BukkitOldCombatMechanics/wiki
- 2. Search existing issues to see if your question has been answered
- 3. This is a volunteer project - we have no obligation to help incomplete reports
- 4. If you've found a bug, use the Bug Report template instead
- 5. If you want a new feature, use the Feature Request template instead
-
- - type: checkboxes
- id: confirmation
- attributes:
- label: Pre-submission checklist
- options:
- - label: I have checked the wiki and readme
- required: true
- - label: I have searched existing issues
- required: true
-
- - type: textarea
- id: question
- attributes:
- label: Your Question
- description: Clearly describe what you want to know
- validations:
- required: true
-
- - type: textarea
- id: tried
- attributes:
- label: What I've Tried
- description: Have you checked documentation? Tried anything? Searched for similar issues?
- validations:
- required: true
-
- - type: input
- id: server-version
- attributes:
- label: Server Version
- placeholder: e.g. Paper 1.20.4
- validations:
- required: true
-
- - type: input
- id: ocm-version
- attributes:
- label: OldCombatMechanics Version
- description: "DO NOT write 'latest' - specify the exact version number"
- placeholder: e.g. 2.1.1
- validations:
- required: true
-
- - type: textarea
- id: context
- attributes:
- label: Additional Context
- description: Any other relevant information, screenshots, config snippets, etc.
-
diff --git a/.github/ISSUE_TEMPLATE/3-feature.yaml b/.github/ISSUE_TEMPLATE/3-feature.yaml
deleted file mode 100644
index 793db9c..0000000
--- a/.github/ISSUE_TEMPLATE/3-feature.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-name: Feature Request
-description: Suggest an idea for this project
-labels: ["enhancement"]
-body:
- - type: markdown
- attributes:
- value: |
- ## ⚠️ PLEASE READ BEFORE SUBMITTING ⚠️
-
- 1. Search for existing enhancement requests first
- 2. Have a question? Please use the Question template instead
- 3. This plugin is about combat mechanics changes from 1.9+ - not general Minecraft features
- 4. Incomplete requests WILL be closed - this is a volunteer project
-
- Remember that this plugin is about changes in combat mechanics following 1.8, anything else is out of scope.
-
- - type: checkboxes
- id: confirmation
- attributes:
- label: Pre-submission checklist
- options:
- - label: I have searched for existing enhancement requests
- required: true
- - label: This relates to combat mechanics changes from 1.9+
- required: true
-
- - type: textarea
- id: problem
- attributes:
- label: Problem
- description: Describe the problem you are facing, as a consequence of a lack of features rather than a bug
- validations:
- required: true
-
- - type: textarea
- id: solution
- attributes:
- label: Proposed Solution
- description: The solution you think best for the problem
- validations:
- required: true
-
- - type: textarea
- id: alternatives
- attributes:
- label: Alternative Solutions
- description: Describe alternative solutions you have considered
- validations:
- required: false
-
- - type: textarea
- id: evidence
- attributes:
- label: Evidence of Mechanic Change
- description: If your enhancement is about a combat feature that changed between 1.8 and now, provide evidence (wiki links, videos, etc.)
- placeholder: Links to Minecraft wiki, videos demonstrating the mechanic, etc.
- validations:
- required: false
-
- - type: textarea
- id: additional
- attributes:
- label: Additional Context
- description: Any other context or screenshots that could be relevant
-
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index 3ba13e0..0000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1 +0,0 @@
-blank_issues_enabled: false
diff --git a/.github/release-please-config.json b/.github/release-please-config.json
deleted file mode 100644
index fef3811..0000000
--- a/.github/release-please-config.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
- "include-component-in-tag": false,
- "bump-minor-pre-major": true,
- "bootstrap-sha": "56dd66a4bf88f252bb063b91835d89a1a1a2e442",
- "packages": {
- ".": {
- "package-name": "OldCombatMechanics",
- "release-type": "simple",
- "extra-files": [
- {
- "type": "generic",
- "path": "build.gradle.kts"
- }
- ],
- "changelog-sections": [
- {"type": "feat", "section": "Features"},
- {"type": "fix", "section": "Bug Fixes"},
- {"type": "perf", "section": "Performance"}
- ]
- }
- }
-}
diff --git a/.github/release-please-manifest.json b/.github/release-please-manifest.json
deleted file mode 100644
index 928e3fc..0000000
--- a/.github/release-please-manifest.json
+++ /dev/null
@@ -1 +0,0 @@
-{".":"2.4.0"}
diff --git a/.github/workflows/build-upload-release.yml b/.github/workflows/build-upload-release.yml
deleted file mode 100644
index 7ab4230..0000000
--- a/.github/workflows/build-upload-release.yml
+++ /dev/null
@@ -1,85 +0,0 @@
-name: Build and Release
-
-on:
- release:
- types: [published]
-
-jobs:
- build:
- # This permission is still required by the new action
- permissions:
- contents: write
-
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Set up JDK 17
- uses: actions/setup-java@v4
- with:
- java-version: '17'
- distribution: 'adopt'
-
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@v4
- with:
- gradle-version: wrapper
-
- # Build Step - No changes needed here
- - name: Run Gradle Build
- run: |
- if [ "${{ github.event_name }}" == "release" ]; then
- VERSION=${{ github.event.release.tag_name }}
- VERSION=${VERSION#v} # Strip 'v' if present
- ./gradlew clean build -Pversion=$VERSION
- else
- ./gradlew clean build
- fi
-
- - name: Upload Artifact to GitHub Release
- if: ${{ github.event_name == 'release' }}
- uses: softprops/action-gh-release@v2
- with:
- # The 'files' input takes a path to the asset(s) you want to upload.
- # Keep a stable filename for external download links.
- files: ./build/libs/OldCombatMechanics.jar
-
- - name: Read game versions from gradle.properties
- run: |
- RAW=$(grep ^gameVersions gradle.properties | cut -d'=' -f2-)
- # Convert "1.21, 1.20.6" -> "1:1.21,1:1.20.6" to select Bukkit-compatible typeId 1 entries via the minecraft endpoint
- GAME_VERSIONS=$(echo "$RAW" | tr -d ' ' | awk -F',' '{
- out="";
- for (i=1; i<=NF; i++) {
- v=$i;
- if (v!= "") {
- if (out!= "") out=out ",";
- out=out "1:" v;
- }
- }
- print out;
- }')
- echo "GAME_VERSIONS=$GAME_VERSIONS" >> "$GITHUB_ENV"
-
- - name: Upload to CurseForge (Bukkit)
- if: ${{ github.event_name == 'release' }}
- uses: itsmeow/curseforge-upload@v3
- with:
- token: ${{ secrets.DBO_UPLOAD_API_TOKEN }}
- project_id: '98233'
- game_endpoint: 'minecraft'
- file_path: './build/libs/OldCombatMechanics.jar'
- changelog: ${{ github.event.release.body }}
- changelog_type: 'markdown'
- release_type: 'release'
- display_name: 'OldCombatMechanics ${{ github.event.release.tag_name }}'
- game_versions: ${{ env.GAME_VERSIONS }}
-
-
- - name: Publish to Hangar
- env:
- HANGAR_API_TOKEN: ${{ secrets.HANGAR_API_TOKEN }}
- HANGAR_CHANGELOG: ${{ github.event.release.body }}
- run: ./gradlew build publishPluginPublicationToHangar --stacktrace
diff --git a/.github/workflows/dev-builds.yml b/.github/workflows/dev-builds.yml
deleted file mode 100644
index 0e4d757..0000000
--- a/.github/workflows/dev-builds.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-name: Dev builds
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches-ignore:
- - 'ingametesting'
-
-jobs:
- build:
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Set up JDK 17
- uses: actions/setup-java@v4
- with:
- java-version: '17'
- distribution: 'adopt'
- cache: gradle
-
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@v4
- with:
- gradle-version: wrapper
-
- - name: Determine if this is a release version
- run: |
- IS_RELEASE=$(./gradlew -q printIsRelease)
- echo "Is release? $IS_RELEASE"
- echo "IS_RELEASE=$IS_RELEASE" >> $GITHUB_ENV
-
- - name: Run Gradle Build
- run: |
- ./gradlew clean build
-
- - name: Archive jar file
- uses: actions/upload-artifact@v4
- with:
- name: OldCombatMechanics
- path: build/libs/OldCombatMechanics.jar
-
- - name: Publish Snapshot to Hangar
- if: ${{ github.event_name == 'push' && github.event.pull_request == null && env.IS_RELEASE != 'true' }}
- env:
- HANGAR_API_TOKEN: ${{ secrets.HANGAR_API_TOKEN }}
- run: |
- ./gradlew publishPluginPublicationToHangar
diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml
deleted file mode 100644
index bdb87a4..0000000
--- a/.github/workflows/release-please.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-name: Release Please
-
-on:
- push:
- branches:
- - master
-
-permissions:
- contents: write
- pull-requests: write
-
-jobs:
- release:
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v4
-
- - name: release-please
- uses: googleapis/release-please-action@v4
- with:
- token: ${{ secrets.RELEASE_PLEASE_TOKEN }}
- config-file: .github/release-please-config.json
- manifest-file: .github/release-please-manifest.json
diff --git a/.github/workflows/wrap-issue-form-codeblocks.yml b/.github/workflows/wrap-issue-form-codeblocks.yml
deleted file mode 100644
index ee2b43c..0000000
--- a/.github/workflows/wrap-issue-form-codeblocks.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-name: Wrap issue form code blocks
-
-on:
- issues:
- types: [opened, edited]
-
-permissions:
- issues: write
-
-jobs:
- wrap:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/github-script@v8
- with:
- script: |
- // Avoid loops: when this workflow updates the issue, it triggers "edited" again.
- if (context.actor === "github-actions[bot]") return;
-
- const issue = context.payload.issue;
- if (!issue || !issue.body) return;
-
- // On edits, bail unless the body actually changed
- if (context.payload.action === "edited") {
- const changed = context.payload.changes && context.payload.changes.body;
- if (!changed) return;
- }
-
- function escapeRegExp(s) {
- return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
- }
-
- function wrapFirstCodeBlockAfterHeading(body, headingText, summaryText) {
- const re = new RegExp(
- `(^###\\s+${escapeRegExp(headingText)}\\s*\\n+)(\`\`\`[\\s\\S]*?\\n\`\`\`)(?=\\n|$)`,
- "m"
- );
-
- return body.replace(re, (_m, heading, codeblock) => {
- return (
- `${heading}` +
- `\n` +
- `${summaryText}
\n\n` +
- `${codeblock}\n\n` +
- ` `
- );
- });
- }
-
- let body = issue.body;
-
- body = wrapFirstCodeBlockAfterHeading(body, "Server Log File", "Server log");
- body = wrapFirstCodeBlockAfterHeading(body, "OldCombatMechanics config.yml", "config.yml");
-
- if (body === issue.body) return;
-
- await github.rest.issues.update({
- owner: context.repo.owner,
- repo: context.repo.repo,
- issue_number: issue.number,
- body
- });
-
diff --git a/.gitignore b/.gitignore
index 7a55d3c..33cc87d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,7 +20,6 @@ builds
target
META-INF
/build/
-/gradle/
/.gradle/
.gradle-user/
/.gradle-cache/
diff --git a/AGENTS.md b/AGENTS.md
index 350030a..a9d5558 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -187,6 +187,7 @@ This file captures repo-specific context discovered while working on this branch
- InvulnerabilityDamageIntegrationTest adds a case asserting environmental damage above the baseline applies during invulnerability (manual EntityDamageEvent).
- `gradle.properties` gameVersions list now includes 1.21.11 down to 1.21.1 (plus 1.21) ahead of existing entries.
- GitHub release asset now keeps a stable filename `OldCombatMechanics.jar` (no version suffix); the CurseForge upload uses the same path.
+- Disabled the plain Gradle `jar` task; `assemble` now produces only the shaded `shadowJar` output `build/libs/OldCombatMechanics.jar`, avoiding an unshaded duplicate `OldCombatMechanics-.jar`.
- Expanded `SwordBlockingIntegrationTest` to cover right-click blocking, non-sword handling, offhand restoration (hotbar change and drop cancel), permission gating, and preserving an existing real shield.
- Added `PaperSwordBlockingDamageReductionIntegrationTest` (in KotestRunner list) to regression-test that Paper sword blocking is recognised server-side (via `ModuleSwordBlocking.isPaperSwordBlocking`) and produces a non-zero 1.8-style reduction from `applyPaperBlockingReduction`. This uses a synthetic damage event to avoid flakiness from mob AI / PvP settings.
- Paper-only sword blocking uses a runtime-gated helper (`kernitus.plugin.OldCombatMechanics.paper.PaperSwordBlocking`) that applies consumable + blocking components via cached reflection (lookup once, MethodHandle invoke thereafter). 1.8-style reduction is applied via `EntityDamageByEntityListener` using the `BLOCKING` damage modifier, while legacy/non-Paper keeps the shield swap path.
diff --git a/README.md b/README.md
index f68e179..95785c5 100644
--- a/README.md
+++ b/README.md
@@ -11,6 +11,10 @@
## by kernitus and Rayzr522
+
+**TrueOG Network 1.19.4 Branch**
+
+
Fine‑tune Minecraft combat, movement, and item balance without breaking your server. OldCombatMechanics is a free, open‑source toolkit for Spigot & Paper that lets you mix 1.8‑style snappiness with modern features, per world and per player.
**Why servers pick OCM** ✨
@@ -107,12 +111,12 @@ Oftentimes a particular bug fix or feature has already been implemented, but a n
yet. You can find the most up-to-date version of the plugin
on [Hangar](https://hangar.papermc.io/kernitus/OldCombatMechanics/versions?channel=Snapshot&platform=PAPER).
-
-## 🤝 Contributions
-If you are interested in contributing, please [check this page first](.github/CONTRIBUTING.md).
-
-
-
-
-
-
+(??)
+(??)## 🤝 Contributions
+(??)If you are interested in contributing, please [check this page first](.github/CONTRIBUTING.md).
+(??)
+(??)
+(??)
+(??)
+(??)
+(??)
diff --git a/build.gradle.kts b/build.gradle.kts
index 7c40111..f4df708 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -31,6 +31,7 @@ plugins {
id("com.gradleup.shadow") version "9.3.0"
id("xyz.jpenilla.run-paper") version "3.0.2"
idea
+ eclipse
id("io.papermc.hangar-publish-plugin") version "0.1.4"
}
@@ -54,8 +55,6 @@ repositories {
maven("https://repo.codemc.io/repository/maven-snapshots/")
// Placeholder API
maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
- // CodeMC Repo for bStats
- maven("https://repo.codemc.org/repository/maven-public/")
// Auth library from Minecraft
maven("https://libraries.minecraft.net/")
}
@@ -99,7 +98,6 @@ configurations.named("integrationTestCompileClasspath") {
}
dependencies {
- implementation("org.bstats:bstats-bukkit:3.1.0")
// Shaded in by Bukkit
compileOnly("io.netty:netty-all:4.1.130.Final")
// Placeholder API
@@ -126,16 +124,6 @@ dependencies {
// Integration test dependencies
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.3.0")
- add("integrationTestImplementation", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.3.0")
- add("integrationTestImplementation", "org.jetbrains.kotlin:kotlin-test:2.3.0")
- add("integrationTestImplementation", "org.jetbrains.kotlin:kotlin-reflect:2.3.0")
- add("integrationTestImplementation", "io.kotest:kotest-runner-junit5-jvm:5.9.1")
- add("integrationTestImplementation", "io.kotest:kotest-assertions-core-jvm:5.9.1")
- add("integrationTestImplementation", "net.kyori:adventure-api:4.26.1")
- add("integrationTestImplementation", "xyz.jpenilla:reflection-remapper:0.1.3")
- add("integrationTestCompileOnly", "org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT")
- add("integrationTestCompileOnly", "com.mojang:authlib:6.0.54")
- add("integrationTestCompileOnly", "io.netty:netty-all:4.1.130.Final")
}
// Substitute ${pluginVersion} in plugin.yml with version defined above
@@ -160,13 +148,16 @@ tasks.withType {
options.release.set(8)
}
+tasks.named("jar") {
+ enabled = false
+}
+
val shadowJarTask =
tasks.named("shadowJar") {
dependsOn("jar")
archiveFileName.set("${project.name}.jar")
dependencies {
exclude(dependency("org.jetbrains.kotlin:.*"))
- relocate("org.bstats", "kernitus.plugin.OldCombatMechanics.lib.bstats")
relocate("com.cryptomorin.xseries", "kernitus.plugin.OldCombatMechanics.lib.xseries")
relocate("com.github.retrooper.packetevents", "kernitus.plugin.OldCombatMechanics.lib.packetevents.api")
relocate("io.github.retrooper.packetevents", "kernitus.plugin.OldCombatMechanics.lib.packetevents.impl")
diff --git a/src/main/java/kernitus/plugin/OldCombatMechanics/OCMMain.java b/src/main/java/kernitus/plugin/OldCombatMechanics/OCMMain.java
index 1d65cb0..d498ae9 100644
--- a/src/main/java/kernitus/plugin/OldCombatMechanics/OCMMain.java
+++ b/src/main/java/kernitus/plugin/OldCombatMechanics/OCMMain.java
@@ -20,9 +20,6 @@ import kernitus.plugin.OldCombatMechanics.utilities.damage.EntityDamageByEntityL
import kernitus.plugin.OldCombatMechanics.utilities.reflection.Reflector;
import kernitus.plugin.OldCombatMechanics.utilities.storage.ModesetListener;
import kernitus.plugin.OldCombatMechanics.utilities.storage.PlayerStorage;
-import org.bstats.bukkit.Metrics;
-import org.bstats.charts.SimpleBarChart;
-import org.bstats.charts.SimplePie;
import org.bukkit.Bukkit;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.EventException;
@@ -94,37 +91,6 @@ public class OCMMain extends JavaPlugin {
Config.reload();
- // BStats Metrics
- final Metrics metrics = new Metrics(this, 53);
-
- metrics.addCustomChart(new SimplePie("server_software", () -> {
- final String name = Bukkit.getServer().getName();
- if (name == null || name.isEmpty()) return "Unknown";
- final String cleaned = name.split("\\s", 2)[0].trim();
- return cleaned.isEmpty() ? "Unknown" : cleaned;
- }));
-
- // Simple bar chart (kept in case bStats re-enables bar display)
- metrics.addCustomChart(
- new SimpleBarChart(
- "enabled_modules",
- () -> ModuleLoader.getModules().stream()
- .filter(OCMModule::isEnabled)
- .collect(Collectors.toMap(OCMModule::toString, module -> 1))));
-
- // Pie chart of enabled/disabled for each module
- ModuleLoader.getModules().forEach(module -> metrics.addCustomChart(
- new SimplePie(module.getModuleName() + "_pie",
- () -> module.isEnabled() ? "enabled" : "disabled")));
-
- // Simple pie: exact count of enabled modules per server (as a string key).
- metrics.addCustomChart(new SimplePie("enabled_modules_count", () -> {
- int count = (int) ModuleLoader.getModules().stream().filter(OCMModule::isEnabled).count();
- return Integer.toString(count);
- }));
-
- enableListeners.forEach(Runnable::run);
-
// Properly handle Plugman load/unload.
final List joinListeners = Arrays
.stream(PlayerJoinEvent.getHandlerList().getRegisteredListeners())
@@ -155,10 +121,6 @@ public class OCMMain extends JavaPlugin {
Bukkit.getScheduler().runTaskLaterAsynchronously(this,
() -> new UpdateChecker(this).performUpdate(), 20L);
- metrics.addCustomChart(new SimplePie("auto_update_pie",
- () -> Config.moduleSettingEnabled("update-checker",
- "auto-update") ? "enabled" : "disabled"));
-
}
@Override
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index ef4c608..04be967 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -21,19 +21,19 @@ always_enabled_modules:
- "fishing-rod-velocity"
- "projectile-knockback"
- "disable-crafting"
- - "update-checker"
- "old-brewing-stand"
- "disable-enderpearl-cooldown"
+ - "disable-offhand"
+ - "disable-sword-sweep-particles"
+ - "disable-attack-sounds"
+ - "old-burn-delay"
+ - "attack-range"
disabled_modules:
# Modules listed here are always disabled, regardless of modeset.
# Of course, disabling a module which disables something will enable that something!
- - "disable-offhand"
- - "disable-sword-sweep-particles"
- - "disable-attack-sounds"
- "chorus-fruit"
- - "old-burn-delay"
- - "attack-range"
+ - "update-checker"
modesets:
# Modesets are lists of modules that are enabled for a player in that mode.
@@ -61,17 +61,15 @@ worlds:
# If player has no modeset when moving worlds they'll be assigned first mode in list,
# unless the mode from the world they are coming from is also available in the new world.
# Worlds not specified below will have all modesets available.
- world: [ "old", "new" ]
- world_nether: [ "old", "new" ]
- world_the_end: [ "old", "new" ]
- # old_world: ["old"]
- # brave_new_world: ["new"]
+ world: [ "old" ]
+ world_nether: [ "old" ]
+ world_the_end: [ "old" ]
mode-messages:
# Messages used when changing player mode
# To disable any message, leave the corresponding string empty (e.g., mode-status: "").
# This applies to all messages in the configuration.
- mode-status: "&bYour current modeset is: &7%s"
+ mode-status: "&bYour current combat mode is: &7%s"
message-usage: "&eYou can use &c/ocm mode [player] &eto change modeset"
invalid-modeset: "&cPlease specify a valid modeset!"
invalid-player: "&cPlease specify a valid player!"
@@ -83,6 +81,7 @@ mode-messages:
disable-attack-cooldown:
# This is to disable the attack cooldown
+ enabled: true
# What to set the attack speed to. Default for 1.9 is 4, at least 40 is needed for no cooldown.
generic-attack-speed: 40
# Optional per-material override for the item in the player's main hand.
@@ -104,6 +103,7 @@ disable-attack-cooldown:
attack-frequency:
# Allows changing the player invulnerability between hits
+ enabled: true
# The hit delay to apply. Default for 1.9+ is 20 ticks (1 second)
playerDelay: 18
mobDelay: 16
@@ -125,6 +125,7 @@ old-tool-damage:
# IMPORTANT: Also enable disable-sword-sweep module or sweeps will have the damage value of the weapon in hand
# NOTE: this will modify the damage, however the vanilla attribute tooltip will still show the 1.9+ values.
# The tooltip section below is enabled by default so players can see the configured damage in-game.
+ enabled: true
# Use old sharpness calculations, i.e. each level adds 1.25 damage
# In 1.9+, sharpness adds 1 + 0.5 * level damage
old-sharpness: true
@@ -143,7 +144,6 @@ old-tool-damage:
IRON_AXE: 6
DIAMOND_AXE: 7
NETHERITE_AXE: 8
- COPPER_AXE: 6
# Shovel damages
GOLD_SPADE: 2
WOOD_SPADE: 2
@@ -151,7 +151,6 @@ old-tool-damage:
IRON_SPADE: 4
DIAMOND_SPADE: 5
NETHERITE_SPADE: 6
- COPPER_SPADE: 3
# Sword damages
GOLD_SWORD: 5
WOOD_SWORD: 5
@@ -159,7 +158,6 @@ old-tool-damage:
IRON_SWORD: 7
DIAMOND_SWORD: 8
NETHERITE_SWORD: 9
- COPPER_SWORD: 6
# Pickaxe damages
GOLD_PICKAXE: 3
WOOD_PICKAXE: 3
@@ -167,7 +165,6 @@ old-tool-damage:
IRON_PICKAXE: 5
DIAMOND_PICKAXE: 6
NETHERITE_PICKAXE: 7
- COPPER_PICKAXE: 4
# Hoe damages
GOLD_HOE: 1
WOOD_HOE: 1
@@ -175,16 +172,15 @@ old-tool-damage:
IRON_HOE: 1
DIAMOND_HOE: 1
NETHERITE_HOE: 1
- COPPER_HOE: 1
# Trident and mace
TRIDENT: 8
TRIDENT_THROWN: 8
- MACE: 6
old-critical-hits:
# Makes critical hits work like in 1.8
# With a critical hit, the damage will be multiplied by 1.5
# In 1.9, the user must also not be sprinting for it to be a crit
+ enabled: true
world: [ ]
# What the damage, after applying potions effects, is multiplied by
multiplier: 1.5
@@ -194,6 +190,7 @@ old-critical-hits:
old-player-regen:
# This is to make players' regeneration act mostly like it did in pre-1.9
# Based on https://minecraft.gamepedia.com/Hunger?oldid=948685
+ enabled: true
# How often a player should regenerate health, in milliseconds (In 1.8: 4 seconds)
# The foodTickerTimer might not be perfectly accurate so we give it ~10ms of leeway
interval: 3990
@@ -211,11 +208,13 @@ old-player-regen:
old-armour-strength:
# This is to make armour calculations like in 1.8
# Based on this: https://minecraft.gamepedia.com/index.php?title=Armor&oldid=909187
+ enabled: true
# Whether to introduce randomness in the calculation, as in 1.8
randomness: true
old-armour-durability:
# This makes armour take a constant amount of durability damage (except for explosions)
+ enabled: true
# By how much to reduce durability every attack. 1.8 default is 1
reduction: 1
@@ -225,6 +224,7 @@ old-armour-durability:
shield-damage-reduction:
# This module allows changing the damage reduction behaviour of shields
+ enabled: true
# How much damage blocking should reduce
# Firstly, amount is subtracted, then value is multiplied by percentage
# 1.8: (damage - 1) * 50% 1.9: damage * 33% 1.11: damage * 0%
@@ -239,6 +239,7 @@ shield-damage-reduction:
sword-blocking:
# This is to allow players to block with swords again, by getting a shield while they hold right click with a sword
# Paper 1.20.5+ uses a consumable-based blocking animation. Older/Paperless servers fall back to an offhand shield.
+ enabled: true
# With ViaVersion, clients older than 1.20.5 will also fall back to the shield behaviour.
# Set to false to disable the Paper animation path entirely and always use the legacy shield fallback.
paper-animation: true
@@ -257,6 +258,7 @@ disable-sword-sweep:
disable-sword-sweep-particles:
# This is to disable the sword sweep attack particles
# Requires PacketEvents
+ enabled: true
# ########################
# KNOCKBACK
@@ -273,6 +275,7 @@ old-player-knockback:
# knockback-extra-vertical: 0.085
#
# Minigame servers use higher vertical knockback and lower horizontal knockback, exact values are unknown.
+ enabled: false
# Horizontal knockback is reduced by 40% for every successful attack by the player, with no limit
# Increase to make clicking more important, decrease to make it less important
knockback-horizontal: 0.4
@@ -295,6 +298,7 @@ old-player-knockback:
old-fishing-knockback:
# This is to make the knockback of players when they get hit by a fishing bobber the same as it was in pre-1.9
+ enabled: true
# This is the damage done by the fishing rod attack
damage: 0.0001
# This is to cancel dragging in the entity attached to the fishing rod when reeling in, like in 1.8
@@ -309,10 +313,12 @@ fishing-rod-velocity:
# In 1.9+ fishing rods go 8 blocks instead of 12 blocks
# This is due to both gravity and initial launch speed
# Set to true to revert back to the old calculations and gravity
+ enabled: true
projectile-knockback:
# This adds knockback and/or damage to players when they get hit by snowballs, eggs & enderpearls
# This has been a Bukkit bug for so long people thought it was vanilla when it was patched
+ enabled: true
# This is the damage done by each projectile
damage:
snowball: 0.0001
@@ -326,6 +332,7 @@ projectile-knockback:
old-golden-apples:
# This is to change the behaviour / crafting of golden apples to how it was in pre-1.9
# WARNING: If on 1.12 or above and you disable this module you must reload the server for the recipe to disappear
+ enabled: true
# Cooldown between eating the apples, in seconds
cooldown:
# The cooldown for normal golden apples
@@ -387,6 +394,7 @@ old-golden-apples:
old-potion-effects:
# This is to restore the 1.8 potion effects and duration
+ enabled: true
# DURATION: (in seconds)
potion-durations:
@@ -502,29 +510,33 @@ old-potion-effects:
disable-crafting:
# Disable the crafting of specified items
+ enabled: true
# List of denied items
denied:
- shield
# Show the user a message if they try to craft a blacklisted item
showMessage: true
- message: "&cYou cannot craft that item!"
+ message: "&cERROR: You cannot craft that item! &6To block, alt-click to deflect with your sword as in Minecraft 1.8."
disable-offhand:
# Disable the usage of the offhand
# Won't affect sword-blocking module
+ enabled: true
# Whether the following list allows items or blocks them
whitelist: true
# List of items that should be allowed/blocked
# Example: [diamond_sword,BOW]
- items: [ ]
+ items: [DRAGON_EGG,END_ROD,REDSTONE_TORCH,SOUL_TORCH,TORCH,APPLE,MUSHROOM_STEW,BREAD,PORKCHOP,COOKED_PORKCHOP,ENCHANTED_GOLDEN_APPLE,GOLDEN_APPLE,COD,COOKED_COD,SALMON,COOKED_SALMON,TROPICAL_FISH,PUFFERFISH,CAKE,COOKIE,MELON_SLICE,DRIED_KELP,BEEF,COOKED_BEEF,CHICKEN,COOKED_CHICKEN,ROTTEN_FLESH,CARROT,CARROT_ON_A_STICK,GOLDEN_CARROT,BAKED_POTATO,POISONOUS_POTATO,POTATO,PUMPKIN_PIE,COOKED_RABBIT,RABBIT,RABBIT_STEW,COOKED_MUTTON,MUTTON,CHORUS_FRUIT,BEETROOT,BEETROOT_SOUP,SUSPICIOUS_STEW,SWEET_BERRIES,HONEY_BOTTLE,GLOW_BERRIES,MILK_BUCKET]
# Message to send user when denied. Set to '' to disable
- denied-message: "&cOff-hand is disabled"
+ denied-message: "&cERROR: That item is not allowed in the offhand! &6This helps to even the playing field for 1.8 players."
old-brewing-stand:
# Automatically refuels brewing stands
+ enabled: true
disable-enderpearl-cooldown:
# Disables enderpearl cooldown
+ enabled: true
# The cooldown, in seconds
# PlaceholderAPI: %ocm_enderpearl_cooldown%
cooldown: 0
@@ -534,6 +546,7 @@ disable-enderpearl-cooldown:
chorus-fruit:
# This makes the chorus fruit behaviour configurable
+ enabled: false
# The maximum distance the fruit can teleport the player. This a PER AXIS value, so this outlines a cube with
# 2 * max-teleportation-distance as the side length
# Vanilla default is 8.
@@ -553,35 +566,37 @@ chorus-fruit:
old-burn-delay:
# This makes it so entities will immediately start to burn when entering fire
+ enabled: true
# How long, in ticks, entities should be on fire for after not being in direct contact anymore
fire-ticks: 120
disable-attack-sounds:
# Disables attack sounds that were added with 1.9+
# Requires PacketEvents
+ enabled: true
# The sounds that will be blocked by this module
blocked-sound-names:
- "ENTITY_PLAYER_ATTACK_STRONG"
- "ENTITY_PLAYER_ATTACK_SWEEP"
- "ENTITY_PLAYER_ATTACK_NODAMAGE"
- "ENTITY_PLAYER_ATTACK_KNOCKBACK"
- - "ENTITY_PLAYER_ATTACK_CRIT"
- "ENTITY_PLAYER_ATTACK_WEAK"
# ########################
# SPECIAL SETTINGS BELOW #
# ########################
-message-prefix: "&6[OCM]&r"
+message-prefix: "&7[&6OCM&7]&r"
# This is to toggle the update checker
update-checker:
# Whether to check for updates and notify players with the oldcombatmechanics.notify permission
+ enabled: false
# Whether to automatically download an update of the plugin
# The update is applied on the next restart/reload of the server
# Auto update is disabled if Spigot version is below 1.18.1 and force-below-1-18-1-config-upgrade is false
# This is to prevent accidentally resetting the config
- auto-update: true
+ auto-update: false
# Whether to force config upgrade even in Spigot versions below 1.18.1
# This is not advised, as all the comments would be removed